Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74
Aiwan
Лучше юзать ЮзерДеф с проверкой игрока в локации с НПС.
Lex
QUOTE (Aiwan @ Jan 8 2006, 01:23)
Лучше юзать ЮзерДеф с проверкой игрока в локации с НПС.

в начале ХБ дефолтового это есть уже.
Neverwinter Script Source
// * if not runnning normal or better Ai then exit for performance reasons
    if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
-fenix-
Nashman, во первых, тебе уже сказали, во вторых, помоему задержка между действиями маловата, а иногда слишком большая. Да и удобнее юзать DelayCommand.

QUOTE (Kavin @ Jan 7 2006, 20:52)
Ой... И Encounter-ы тоже нельзя?..

Тоже, как и тригеры!
NedWarN
Хелп, Мастера Скриптов.
У меня бешанная идея создать скрипт. Нападобии Диабло.
Чтобы можно было вставить Камень в Шмотку и она изменилась.
А думаю это невозможно. Помогите.
Dik Morris
А почему бы не сделать так:
На оружие вешаешь особое свойство, при вызывании которого начинался бы диалог с оружие.
Там, строчки появ. в зависимости от тагов камней, потом на Action Takens можно повесить скрипт добавление свойства определенной вещи. (Функцию не помню, глянь в НотУ у кузнеца, во 2 компании.)
Просто и понятно. smile.gif
QUOTE
создать скрипт.

Создаеться способом описанным выше макс. за 5 мин. Дерзай. wink.gif
StalkerDtN
Всем привет! yes.gif
Плз, подскажите как работает "сумка просителя" в игре.
Lex
QUOTE (NedWarN @ Jan 8 2006, 06:30)
Хелп, Мастера Скриптов.
У меня бешанная идея создать скрипт. Нападобии Диабло.
Чтобы можно было вставить Камень в Шмотку и она изменилась.
А думаю это невозможно. Помогите.

можно конечно вариант Дика, но это не очень удобно.
На самом деле все проще и более функционально.
В 2да прописываются новые заклы, на камни эти заклы вешаются. Скрипт заклов - добавление свойств вещи.

Посмотри стандартные заклы.. например Light. Можно наложить его на вещь, можно на существо.
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Light
//:: NW_S0_Light.nss
//:: Copyright © 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Applies a light source to the target for
    1 hour per level

    XP2
    If cast on an item, item will get temporary
    property "light" for the duration of the spell
    Brightness on an item is lower than on the
    continual light version.

*/

//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Aug 15, 2001
//:://////////////////////////////////////////////
//:: VFX Pass By: Preston W, On: June 22, 2001
//:: Added XP2 cast on item code: Georg Z, 2003-06-05
//:://////////////////////////////////////////////

#include "x2_inc_spellhook"

void main()
{

   // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run
    // this spell.
    if (!X2PreSpellCastCode())
    {
        return;
    }

    //Declare major variables
    object oTarget = GetSpellTargetObject();

    int nDuration;
    int nMetaMagic;

    // Handle spell cast on item....
    if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM && ! CIGetIsCraftFeatBaseItem(oTarget))
    {
        // Do not allow casting on not equippable items
        if (!IPGetIsItemEquipable(oTarget))
        {
         // Item must be equipable...
             FloatingTextStrRefOnCreature(83326,OBJECT_SELF);
            return;
        }

        itemproperty ip = ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_WHITE);

        if (GetItemHasItemProperty(oTarget, ITEM_PROPERTY_LIGHT))
        {
            IPRemoveMatchingItemProperties(oTarget,ITEM_PROPERTY_LIGHT,DURATION_TYPE_TEMPORARY);
        }

        nDuration = GetCasterLevel(OBJECT_SELF);
        nMetaMagic = GetMetaMagicFeat();
        //Enter Metamagic conditions
        if (nMetaMagic == METAMAGIC_EXTEND)
        {
            nDuration = nDuration *2; //Duration is +100%
        }

        AddItemProperty(DURATION_TYPE_TEMPORARY,ip,oTarget,HoursToSeconds(nDuration));
    }
    else
    {
        effect eVis = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20);
        effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
        effect eLink = EffectLinkEffects(eVis, eDur);

        nDuration = GetCasterLevel(OBJECT_SELF);
        nMetaMagic = GetMetaMagicFeat();
        //Enter Metamagic conditions
        if (nMetaMagic == METAMAGIC_EXTEND)
        {
            nDuration = nDuration *2; //Duration is +100%
        }
        //Fire cast spell at event for the specified target
        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_LIGHT, FALSE));

        //Apply the VFX impact and effects
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(nDuration));
    }

}



нюансы конечно есть, например разделение на типы вещей (оружие, броня и тд), чтобы не вешать +дамаг на армор и прочее. Но это уже твоя забота.
можно даже сделать "камнедер", который будет их обратно вынимать. Сделать возможность вставки более чем 1 камня.. Ну короче наворотить можно чего хошь.

можно конечно не заклами, а просто уникальным свойством камня. МБ тебе так проще будет, но суть одна: Вешать на камни это (наложение), а не на вещи.
NedWarN
Dik Morris
Извени но ты не представляеш, как диалоги меня достали.
Lex
А я неумею Прописывать 2да, блин что делать.
И еще как сделать так чтоб при использовании закла, игрок стоял смирно и ничо не делал.
-fenix-
QUOTE (NedWarN @ Jan 9 2006, 10:58)
А я неумею Прописывать 2да, блин что делать.

Топать в форум по 2да и просить/спрашивать/учиться там!
Nashman
Привет,
Нужен совет!!
У меня есть сидячии НЕПИСИ. Можно им задать какую-нить анимацию. И можно их заставить разговаривать между собой не вставая?
Dik Morris
QUOTE
Можно им задать какую-нить анимацию.

Hacчет анимации это наврятли, вроде невозможно. yes.gif
QUOTE
можно их заставить разговаривать между собой не вставая?

Neverwinter Script Source
// The caller will immediately speak sStringToSpeak (this is different from
// ActionSpeakString)
// - sStringToSpeak
// - nTalkVolume: TALKVOLUME_*
void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK)

QUOTE
Извени но ты не представляеш, как диалоги меня достали.

Учись правописанию! wink.gif
Vanes
NedWarN
посмотри мой модуль...
сделан он для турниров, но принцип вендора там именно "через камушки"...
http://forums.karamba.ru/index.php?act=Att...pe=post&id=1301
зы скрипт который тебе нужен: vns_vswitch_use
NedWarN
Vanes
Sps/ Буду глядеть.
Nashman
Привет,
Подскажите:
- Я сделал так, что бы когда из сидячим НПС хочешь поговорить - он встает говорит, что бы ПС отвязался, а потом обратно садится. Все хорошо, но когда он садится, то сидя постоянно поворачивается в мою сторону. Что можно из этим сделать?


ПС: По поводу Фоновой музики, в функциях нужно указать номер фоновой мелодии, а как его узнать(номер)?
Dik Morris
QUOTE
. Все хорошо, но когда он садится, то сидя постоянно поворачивается в мою сторону.

Была подобная проблема. smile.gif
Но чессно сказать уже не помню как решил, попробуй скажем почистить акции у NPC (на ActionTakens последней строчки:
Neverwinter Script Source
// Clear all the actions of the caller.
// * No return value, but if an error occurs, the log file will contain
//   "ClearAllActions failed.".
// - nClearCombatState: if true, this will immediately clear the combat state
//   on a creature, which will stop the combat music and allow them to rest,
//   engage in dialog, or other actions that they would normally have to wait for.
void ClearAllActions(int nClearCombatState=FALSE)

А вообще вот ТУТ разбирается подобная ситуация.
Насчет музыки.
Открываешь ambientmusic.2DA и смотришь там, например:
QUOTE
       
1      61842         mus_ruralday1      ****               ****       ****       ****         

PS: вопросы скорее одиночного типа, в следующий раз повнимательнее плиз. yes.gif
Salasar
У меня такая ситуация я хочу, чтобы когда герой входил в триггер дверь в комнате открывалась, оттуда выходил НПС подходил к герою, вступал с ним в разговор и, по окончании разговора становился хенчменом героя.
Lex
И в чем проблема собсна?
Dik Morris
Salasar
QUOTE
У меня такая ситуация я хочу, чтобы когда герой входил в триггер дверь в комнате открывалась, оттуда выходил

Такие скрипты разбираются на каждой странице форума, используй поиск. wink.gif
(И + функции:
Neverwinter Script Source
// Cause the action subject to open oDoor
void ActionOpenDoor(object oDoor)

Neverwinter Script Source
// Set the locked state of oTarget, which can be a door or a placeable object.
void SetLocked(object oTarget, int bLocked)

Для открытия двери.)
QUOTE
окончании разговора становился хенчменом героя.

Есть тема: (В этом разделе форума)
"Скрипты для новичков" там 100% найдеться ответ на твой вопрос. wink.gif
Вообще народ, лучше перед тем как что нибуть спросить, не надо лениться, а использовать хорошую такую кнопочку, ПОИСК. yes.gif
PS: хотя еще лучше начать разбираться самому, все равно так как тебе нужно никто не сделает, да и куда приятнее все писать самостоятельно. (И.М.Х.О)
StalkerDtN
Привет всем!
У меня такой вопрос (точнее два):
1). все знают про сумки в инвентаре(те куда можно положить ограниченное колличество вещей и плюс они уменьшают вес), можно ли сделать так, что, допустим, я в нее (в сумку) ложу несколько предметов если это подходящии предметы, то эти предметы изчезают и там появляется новый предмет (именно в этой сумке, а не просто ложиться в инвентарь)
2). существует ли функция которая берет позицию предмета в инвентаре (я не про слоты одежды и т.п.). Или хотя бы смотрит сколько данный предмет занимает места в инвентаре.
Dik Morris
StalkerDtN
Можно было бы сделать, просто.
Ложишь в сумку итемы, активируешь её...
НО! Видишь ли, на сумку нельзя вешать свойство: активировать предмет, так что приодеться по другому.
Создаём предмет со свойством активации, когда мы активируем этот предмет на сумке срабатывает ниже приведенный скрипт:
Neverwinter Script Source
#include "nw_i0_tool"
//На onActivaItem модуля.
void main()
{
object oPC = GetItemActivator();// Игрок
object oPa = GetItemActivated();// Активируемый предмет
object oSu = GetNearestObjectByTag("ТАГ_СУМКИ");// Сумка

     if (GetTag(oPa)=="TAГ_ПРЕМЕТА")
     // Проверка. Если таг активируемого предмета равен: TAГ_ПРЕМЕТА, ТО:
     {       
        if ((HasItem(oPC,"ТАГ_СУМКИ"))&&
        GetItemActivatedTarget()==oSu)
        // Проверка. Если итем находиться в инвентаре игрока,
        // + если мы активируем на сумке то:
        {
          if ((HasItem(oSu,"ТАГ_ПРЕДМЕТА_1")) && HasItem(oSu,"ТАГ_ПРЕДМЕТА_2"))
          // Опять проверка. Если в сумке есть два премета
          // с тагами: ТАГ_ПРЕДМЕТА_1 и ТАГ_ПРЕДМЕТА_2, то:
          {
          DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_1"));//Дестроим эти преметы
          DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_2"));//Дестроим эти преметы
          CreateItemOnObject("ТАГ_НОВОГО__ПРЕДМЕТА",oSu,1);// Создаем новый
          ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_DISPEL),oPC);
          // Налаживаем визуальный эффект. (для большей реалистичности)
          }
        }
// ЗЫ: скрипт писал в дикой спешке, народ, если будут ошибки, прошу сильно не пинать pardon.gif
     }
}
Nashman
Привет,
Подскажите ПЛС. Почему нельзя записать так:
Neverwinter Script Source
ActionDoCommand(AssignCommand(oNPC, CreateItemOnObject(...)));


Выдает "Делкларация не соответсвует параметру".

ПС: Просто нужно создать последовательность, а и-за єтой ошибки не получается!
-fenix-
Потому что функция CreateItemOnObject не является void функцией.
Нужно написать свою void функцию, в которой будет выполнятся CreateItemOnObject.
Говорили такое ни раз и функцию приводили то же ни раз!!!

Neverwinter Script Source
//Позволяет использовать функцию  CreateItemOnObject в
//ActionDoCommand, AssignCommand и DelayCommand.
void ActionCreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1);

void ActionCreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1)
{
CreateItemOnObject(sItemTemplate, oTarget, nStackSize);
}


А вот для CreateObject
Neverwinter Script Source
//Позволяет использовать функцию  CreateObject в
//ActionDoCommand, AssignCommand и DelayCommand.
void ActionCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="");

void ActionCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="")
{
CreateObject(nObjectType, sTemplate, lLocation, bUseAppearAnimation=FALSE, sNewTag="");
}


Может в ВИО добавить?
StalkerDtN
Dik Morris

Спасибо за участие, но это не есть то что мне нужно. Я делал уже нечто подобное только вешал скрипт на ХБ, все работало, но постоянные (точнее, совсем даже не постоянные) задержки меня котегорически не устраивали. Мне, как раз, хотелось чтобы все было, так сказать, мгновено. Видимо енто невозможно.

PS: У тебя пара неточностей:

1. "if ((HasItem(oSu,"ТАГ_ПРЕДМЕТА_1")) && HasItem(oSu,"ТАГ_ПРЕДМЕТА_2"))"

- это несработает, т.к. выше "object oSu = GetNearestObjectByTag("ТАГ_СУМКИ")"
нужно - "object oSu = GetObjectByTag("ТАГ_СУМКИ")"
2. "DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_1"))" - таг все предметы с "ТАГ_ПРЕДМЕТА_1" тоже уничтожуться, лучше отдельной функцией, например вот так:
void DObj()
{
object oSumka = GetObjectByTag("SUMKA");
object dobj_1 = GetItemPossessedBy(oSumka, "ITEM_1");
object dobj_2 = GetItemPossessedBy(oSumka, "ITEM_2");

DestroyObject(dobj_1);
DestroyObject(dobj_2);
}
Dik Morris
Функция:
Neverwinter Script Source
HasItem

Проверяет обладает ли цель нужным предметом, т.е:
Neverwinter Script Source
HasItem(oSu,"ТАГ_ПРЕДМЕТА_1

Проверяем, иметься ли в сумке нужный тебе айтем, так как:
QUOTE
несколько предметов если это подходящии предметы, то эти предметы...

QUOTE
object oSu = GetObjectByTag("ТАГ_СУМКИ")"

Таг БЛИЖАЙШЕЙ. Ведь если юзаем:
Neverwinter Script Source
GetObjectByTag
, то айтемы могут создаться в совсем другой сумке! (Если конечно она присутствует в игре pardon.gif)
QUOTE
"ТАГ_ПРЕДМЕТА_1" тоже уничтожуться

Хех, таже ситуация что и с сумкой...
Уничтожаться ближайшие объекты. Т.е те что у тебя в инвентаре.
ЗЫ: sorry за оффтоп, но ведь нужно человеку обьяснить как лучше. smile.gif
ЗЗЫ: пользуйся кодом NSS. yes.gif
Lex
QUOTE (Dik Morris @ Jan 13 2006, 20:46)
Таг БЛИЖАЙШЕЙ.

только в случае работы с инвентарем это не работает. И если надо убать именно те, что в сумке, то StalkerDtN верно написал.

QUOTE (Dik Morris @ Jan 13 2006, 20:46)
ЗЫ: sorry за оффтоп, но ведь нужно человеку обьяснить как лучше. smile.gif

Вообще оба замечания его - верные.
Добавлено в 21:19
QUOTE (StalkerDtN @ Jan 13 2006, 06:52)
2). существует ли функция которая берет позицию предмета в инвентаре (я не про слоты одежды и т.п.). Или хотя бы смотрит сколько данный предмет занимает места в инвентаре.

по поводу места - можно через 2да посчитать.
что-то такое..
Neverwinter Script Source
int GetItemPlace(object oItem)
{
int nBASE = GetBaseItemType(oItem);
int nWidth = StringToInt(Get2DAString("baseitems","InvSlotWidth",nBASE);
int nHeight = StringToInt(Get2DAString("baseitems","InvSlotHeight",nBASE);
return nWidth*nHeight;
}

Добавлено в 21:23
QUOTE (StalkerDtN @ Jan 13 2006, 06:52)
можно ли сделать так, что, допустим, я в нее (в сумку) ложу несколько предметов если это подходящии предметы, то эти предметы изчезают и там появляется новый предмет (именно в этой сумке, а не просто ложиться в инвентарь)

тока постоянной проверкой. Ну или как предложил Дик (тока реализованный более правильно, через сумку, а не айтем)
Добавлено в 21:25
QUOTE (StalkerDtN @ Jan 13 2006, 17:13)
Я делал уже нечто подобное только вешал скрипт на ХБ, все работало, но постоянные (точнее, совсем даже не постоянные) задержки меня котегорически не устраивали.

ну это просто. Выноси в отдельный скрипт проверки и запускай в ХБ (модуля, игрока) с интервалом нужным. Скажем
0.0
1.0
2.0
3.0
4.0
5.0
те у тебя будет каждую секунду проверка. Задержки минимальны, но код проверочный оптимизируй по максимуму. мб не 1.0 а 1.5 шаг... но это уже сам как хочешь.

Но проще не париться и идею чуть-чуть подправить под реалии тулсета smile.gif Вариант положил в сумку, потом активировал - нормальный. smile.gif

QUOTE (Dik Morris @ Jan 13 2006, 09:17)
НО! Видишь ли, на сумку нельзя вешать свойство: активировать предмет, так что приодеться по другому.

itemprops.2da
строка Cast_Spell, столбец 18_Containers. Ставим вместо 0 1 и кидаем в хак, если есть.
Теперь можно вешать активацию на саму сумку и забыть про другой айтем.
Nashman
Привет,
Искал, но не нашел:
- Можно непися "положить"?
Archangel
QUOTE
Привет,
Искал, но не нашел:
- Можно непися "положить"?

Положить можно анимацией "ANIMATION_LOOPING_DEAD_FRONT".
Но помни, что НеПиСя нельзя положить на неактивную (т.е. ту, которая встроена в локу) кровать.
Lex
QUOTE (Archangel @ Jan 13 2006, 22:42)
Но помни, что НеПиСя нельзя положить на неактивную (т.е. ту, которая встроена в локу) кровать.

мдя.. smile.gif учитесь говорить. Есть тайловые, а есть плейсовые кровати smile.gif
Положить (именно на) можно только на тайловую кромать после правки вокмеша тайла.
а вообще правило простое - положить можно там, куда можно наступить.
QUOTE (Archangel @ Jan 13 2006, 22:42)
ANIMATION_LOOPING_DEAD_FRONT

тогда и про ANIMATION_LOOPING_DEAD_BACK Не забывай.
Добавлено в [mergetime]1137197961[/mergetime]
но тока это - в вопросы новичков.
Nashman
Привет,
Возник вопросик, думаю больше команде ВРГ, я у "Проклятии Левора" видел похожое:
- У Вас, когда открываешь какой-то сундук появляется фраза(видит кто-то или нет), мне нужно впринцыпе то же. Можете написать как Вы это сделали?
Dik Morris
Открой ПЛ, и посмотри какие скрипты стоят в слотах сундука.
StalkerDtN
Привет всем! yes.gif
У меня скорее даже не вопрос, а не понимание ПОЧЕМУ так!
Суть проблемы в следующем: допустим есть у меня рычаг на локации, когда я его нажимаю, то на другом объекте (в этой же локации, его таг OBJ_VFX_1) проигрывается визуальный эффект, домупстим, VFX_DUR_INFERNO.
Когда я использую вот такой скрипт:
Neverwinter Script Source
void main()
{
    object oVFX = GetObjectByTag("OBJ_VFX_1");

    if (oVFX == OBJECT_INVALID) SendMessageToPC(GetFirstPC(), "объект не существует");
    else
    {
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_INFERNO), oVFX);
        SendMessageToPC(GetFirstPC(), "объект существует");
    }
}

Визуально анимации нет, но есть ее звук.
Когда вот такой:
Neverwinter Script Source
void main()
{
    object oVFX = GetObjectByTag("OBJ_VFX_1");

    if (oVFX == OBJECT_INVALID) SendMessageToPC(GetFirstPC(), "объект не существует");
    else
    {
        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_INFERNO), GetLocation(oVFX));
        SendMessageToPC(GetFirstPC(), "объект существует");
    }
}

Все работает.
Вопрос: ПОЧЕМУ! dntknw.gif

ЗЫ: когда вместо
Neverwinter Script Source
oVFX = GetObjectByTag("OBJ_VFX_1");
использую
Neverwinter Script Source
GetFirstPC()
или
Neverwinter Script Source
OBJECT_SELF
- т.е. сам рычаг первый скрипт работает как надо.
Aiwan
Эффекты VFX_DUR_* накладываются на ЛОКАЦИЮ Location: Floor, Body? head и т.д. Но самое главное, это параметр Location, который ты задаешь во втором случае верно. В первом ты пытаешься засунуть это все на объект, что есть не верно.
StalkerDtN
Тогда почему енто работает:
Neverwinter Script Source
void main()
{
// здесь поджигается объект которого атакую (эта лишь часть кода, но она работает)
    object oPC  = GetFirstPC(), oAtt;

    if (GetCurrentAction(oPC) == ACTION_ATTACKOBJECT)
    {
        oAtt = GetAttackTarget();
        ApplyEffectToObject(DURATION_TYPE_INSTANT,
                        EffectVisualEffect(VFX_DUR_INFERNO), oAtt);
    }
}


И почему 1-й скрипт работает при
Neverwinter Script Source
OBJECT_SELF
- анимация на самом рычаге
и когда целью анимации является сам игрок
Lex
QUOTE (Aiwan @ Jan 16 2006, 13:08)
Эффекты VFX_DUR_* накладываются на ЛОКАЦИЮ Location: Floor, Body? head и т.д. Но самое главное, это параметр Location, который ты задаешь во втором случае верно. В первом ты пытаешься засунуть это все на объект, что есть не верно.

?????
CODE

VFX_DUR_* Constant Group
Temporary visual effects that last for a specified duration.

(с) Лекскикон.
Временные эффекты, имеющие определенную продолжительность.
Хотя реально это не совсем так, но тем не менее ни слова про локацию.
Location: Area, Location: About Body, это не то все, это описание того, как эффект видно. если привязка к части тела - на локацию не наложить эффект. Но тип эффекта не имеет отношение к тому, на что его накладывать.

StalkerDtN, честно, фиг знает, что там такое. Эффекты имеют довольно много нюансов, которые не описаны нигде.
Aiwan
StalkerDtN НЫН движок это не аксиома. Это скорее, как многий код - есть правильное исполнение, есть неправильное. Твои куски кода это на обум, вот и сработало. Мы совсем не знаем какие происходят операции с OBJECT_SELF, возможно движок автоматом берет его локацию, позицию и прочее изначально содержит это в описании объекта.

QUOTE

Remarks

Since most effects affect objects, many will have no effect when applied at a Location. Use this function to apply Visual and Area of Effect effects, for example, you can use this to apply the visual effect of a spell, where none has been cast.


CODE

VFX_FNF_PWSTUN  White dots orbiting and purple vapors lifting.
Location: About Body
Color(s): white, purple

VFX_COM_SPARKS_PARRY  Sparks from a parry.
Location: Feet
Color(s): white




Если вы укажете в случае 1 вместо Location крича плейсебл, то шанс что он сработает равен 0.
Во втором случае так же. Укажите вместо локи что либо другое может не сработать.
На что действует каждый эффект, есть в описаннии в лексиконе. Я сталкивался с этим. Поэтому понял, что такой-то спел надо накладывать на то, что имеет в себе описание локации действия. Естественно для всех эффектов не проверял.
StalkerDtN
Да, неприятно. swoon.gif
Спасибо за хелп, буду иметь ввиду. Хотя к локации не всегда удобно и приемлимо. Ну, например, если объект движется, но это, покрайней мере, решаемо.

ЗЫ: Кстати, GetFirstPC() - есть объект и берется именно как объект, а все арбайтен. Гы! biggrin.gif
RoHaN
Здравствуйте !!! diablo.gif
Хотелось бы спросить какой из предложенных стандартных скриптов можно посмотреть, чтобы узнать как Jump'ить себя или НПС ?
А если нет такого, то хотя бы приведите пример . help.gif
StalkerDtN
Привет RoHaN ! yes.gif

Следующий скрипт тебя или NPC перекинет в любую точку внутри модуля:
Neverwinter Script Source
void main()
{
    object oPC  = GetFirstPC();  // берем игрока, т.е. самого себя
    object oNPC  = GetObjectByTag("TAG_NPC"); // берем NPC, которого будем jump-ить

    object oPoint_1 = GetObjectByTag("TAG_POINT_1"); // точка, в которую будет прыгать игрок
    object oPoint_2 = GetObjectByTag("TAG_POINT_2"); // точка, в которую будет прыгать NPC

    AssignCommand(oPC , JumpToLocation(GetLocation(oPoint_1))); // применяем прыжок в точку для игрока
    AssignCommand(oNPC, JumpToLocation(GetLocation(oPoint_2))); // применяем прыжок в точку для NPC
}


Кончено, есть и другие варианты - на твое усмотрение. biggrin.gif

ЗЫ: А, вообще, читай мануал, или в тему скрипты новичкам, там наверника это есть. drag.gif
StalkerDtN
Всем привет! yes.gif

У меня такой вопрос: как можно сделать так, чтобы в какой-нибудь из слотов игрока (INVENTORY_SLOT_*)
нельзя было запихать соответствующую ему(слоту) вещь. Вариант, на подобие, - отлавливать событие одевания предмета с помощью onPlayerEquipItem не рационален, т.к. все равно проигрывается анимация - если это оружие, то взятие его в руку. К тому же очень вероятно, что оружие не уберется, т.е. как объек-то оно уберется, а вот как анимация останется, приходится делать задержку.
Есть подозрение, что это можно усоществить через onSpawn, но вот как. dntknw.gif

ЗЫ: Вроде, нечто подобное я где-то на форуме видел, но где именно так и не нашел. unsure.gif
Nashman
QUOTE
нельзя было запихать соответствующую ему(слоту) вещь.
Где-то читал, что нельзя. Можно просто снять... Попробуй UserDef постявь безконечный цыкл(Такая не знаю или работает, но в Делфи, Си на 100%):

Neverwinter Script Source
while(TRUE)
{
//Снимаем и говорим что-то...
}


ЗЫ: Читал где-то на форуме...
Neo
Nashman,
Коллеги хмурят лбы в недоуменьи:
Рыдаю в три ручья, упав под стол!
Вы добрый гений смехотерапии,
Я ржу, как конь, читая ваш прикол!

Самое простое, но глючное, ибо жрет ресурсы - на hb непися
Neverwinter Script Source
void main(){
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF);
if(GetIsObjectValid(oItem)) ActionUnequipItem(oItem);}
helvene
offtopic.gif
QUOTE (Nashman @ Jan 22 2006, 01:37)
UserDef постявь безконечный цыкл

*из-под стола доносится сдавленное бульканье*
Vanes
просто надеваете на чара вещи с определенными тегами, а в скрипте OnUnEquipItem - проверку... если вещь вдруг снимается, то надеваете ее обратно...
ничего лишнего одето гарантированно не будет, да и скрипт не особо требовательный...
StalkerDtN
NeoJSmith , yes.gif
QUOTE
Самое простое, но глючное, ибо жрет ресурсы - на hb непися

Neverwinter Script Source
Neverwinter Script Source
void main(){
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF);
if(GetIsObjectValid(oItem)) ActionUnequipItem(oItem);}


Если применять проверку даже через каждую 0.1 с. все равно проигрывается анимация и есть шанс (!), что оружие в руке останется (т.е. если это меч, то в руке будет меч), хотя формально как объекта его там нету.


Vanes, yes.gif
а если рука всегда должна быть пустой (2da - не то, именно скрипты).
Vanes
хм...
ну тут варианта 2...
в СЕРе я видел "пустые" модельки вепов, правда не знаю как это будет выглядеть... скорее всего коряво smile.gif
или же просто убери у чара и запрети брать все фиты Weapon Proficiency(...)...
Aiwan
QUOTE (helvene @ Jan 22 2006, 05:50)
*из-под стола доносится сдавленное бульканье*

Читаю тему регулярно. Ржу как конь. Жена уже ругается.

Епть... Нафик вы велисапедр изобретаете? Когда есть велосипед?
Берете стандартный скрипт в слоте модуля OnPlayerEquipItem. Добавляете в самый верх свои строки:
Neverwinter Script Source
object oItem = GetPCItemLastEquipped(); // Item
    object oPC  = GetPCItemLastEquippedBy(); // Игрок
    string sTagItem = GetTag(oItem); // Таг Item-a

    // -------------------------------------------------------------------------
    //                            МЕЧЬ КЛАДЕНЕЦ ДЛЯ ВЗРОСЛЫХ ПАЦАНОВ
    // -------------------------------------------------------------------------

    if (sTagItem=="ТАГ_МЕЧА")
    {
      if(!GetLocalInt(oPC, "ЛОКАЛКА_МОЖНО_ВЗЯТЬ_МЕЧИК"))
      {
        AssignCommand(oPC, ActionUnequipItem(oItem));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 2.0, 3.0));
        AssignCommand(oPC, SpeakString("Мне надо манной какшки покушать."));
        SendMessageToPC(oPC, "Меч перевесил вас, и вы упали навзничь в кучу оркских какашек.");
      }
      else
          {
            AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3, 2.0, 5.0));
            AssignCommand(oPC, SpeakString("Я шмог! Я шмог! Шмог! Шмог! ШМОГ!"));
          }
    }
    // -------------------------------------------------------------------------



Добавлено в [mergetime]1137925681[/mergetime]
QUOTE (StalkerDtN @ Jan 21 2006, 10:55)
Вариант, на подобие, - отлавливать событие одевания предмета с помощью onPlayerEquipItem не рационален, т.к. все равно проигрывается анимация - если это оружие, то взятие его в руку.

Любое действие это есть сигнал. Если ты телепатический скрипт сделаешь, то хвала и респект тебе. Надо хотя бы знать, ЧТО РС СОБИРАЕТСЯ одеть меч. НАХ такие заморочки? Они НИКОМУ НЕ НУЖНЫ. Поверь. Игрокам наплевать. ЕСли только чисто для себя...
Добавлено в [mergetime]1137925852[/mergetime]
Единственно грамотное и простое решение - сделать два меча. Первый не оденет НИКТО. Второй оденут. Дальше объяснять не надо думаю...
StalkerDtN
QUOTE
Игрокам наплевать
- не наплевать потому и делаю.
QUOTE
ЕСли только чисто для себя...
- и для себя тоже.
QUOTE
Епть... Нафик вы велисапедр изобретаете? Когда есть велосипед?
Берете стандартный скрипт в слоте модуля OnPlayerEquipItem. Добавляете в самый верх свои строки:
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда.

ЗЫ: А, вообще, Aiwan , собеседника надо уважать даже если, на первый взгляд, его слова кажутся пустыми...
Lex
QUOTE (StalkerDtN @ Jan 22 2006, 15:20)
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда.

он не работает всегда, потому как нехватает задержки. Ну так тебе голова на что? Взял да добавил (мы тут тока идеи подсказываем и концептуальные части кода, все остальное уже вы сами)
Neverwinter Script Source
void main()
{
    object oItem = GetPCItemLastEquipped(); // Item
    object oPC  = GetPCItemLastEquippedBy(); // Игрок
    string sTagItem = GetTag(oItem); // Таг Item-a

    // -------------------------------------------------------------------------
    //                            МЕЧЬ КЛАДЕНЕЦ ДЛЯ ВЗРОСЛЫХ ПАЦАНОВ
    // -------------------------------------------------------------------------

    if (sTagItem=="SWORD")
    {
      if(!GetLocalInt(oPC, "SWORD"))
      {
        DelayCommand(0.4,AssignCommand(oPC, ClearAllActions()));
        DelayCommand(0.5,AssignCommand(oPC, ActionUnequipItem(oItem)));
        DelayCommand(0.6,AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 2.0, 3.0)));
        AssignCommand(oPC, SpeakString("Мне надо манной какшки покушать."));
        SendMessageToPC(oPC, "Меч перевесил вас, и вы упали навзничь в кучу оркских какашек.");
      }
      else
          {
            AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3, 2.0, 5.0));
            AssignCommand(oPC, SpeakString("Я шмог! Я шмог! Шмог! Шмог! ШМОГ!"));
          }
    }
    // -------------------------------------------------------------------------
}

Добавлено в 15:55
QUOTE (StalkerDtN @ Jan 22 2006, 15:20)
даже если, на первый взгляд, его слова кажутся пустыми...

и не на первый. Кроме как этим способом ну и конечно же бесконечным циклом (biggrin.gif), ты не сделаешь запрет. Тебе об этом второй день уже говорят.
Добавлено в [mergetime]1137948041[/mergetime]
QUOTE (Lex @ Jan 22 2006, 15:55)
Кроме как этим способом ну и конечно же бесконечным циклом

вру. Можно еще 1 макаром:

лезем в baseitems.2da, создаем новый тип оружия, все прописываем, а в требуемые фиты заносим наш.
лезем в feats.2da делаем этот наш фит. (по аналогии с Weapon Proficiency)
лезем в iprp_feats.2da и добавляем наш фит в те, что можно дать вещи.

Создаем в палитре шкурку и даем ей этот фит. Теперь, когда тебе надо, чтобы можно было брать меч, создавай ее на игрока и одевай на скрытый слот.

Это все реально сделать, другой вопрос, надо ли это все ради того, что можно сделать несколькими строчками кода (хотя факт того, что игрок возьмет оружие в руку будет.. на 1 сек. Но результат все равно наш достигается.)
Aiwan
QUOTE (StalkerDtN @ Jan 22 2006, 18:20)
ЗЫ: А, вообще, Aiwan , собеседника надо уважать даже если, на первый взгляд, его слова кажутся пустыми...

Писал, писал тебе ответ... да глюкнула старница. В общем еще раз мне влом писать все. Скажу кратко. Было бы мне на тебя плевать, я бы и не потратил свое время на кусок кода. Мы с Лексом даем шанс молодежи себя проявить, вот и не отвечаем быстро.
QUOTE (StalkerDtN @ Jan 22 2006, 18:20)
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда.

Наверное я должен все натстроить тебе и ерефку прислать? В игре проверять и вылизывать код, твои проблемы. Больше на твои вопросы я лично не отвечаю. Успехов.
QUOTE (Lex @ Jan 22 2006, 18:55)
Создаем в палитре шкурку и даем ей этот фит. Теперь, когда тебе надо, чтобы можно было брать меч, создавай ее на игрока и одевай на скрытый слот.

Для этого еще нужно игроку свой конфиг давать. Если там будет запрет на
CODE
[Server Options]
ItemLevelRestrictions=1

То ничего не наденет игрок.

Я возмущен. dntknw.gif
Lex
QUOTE (Aiwan @ Jan 22 2006, 22:29)
Для этого еще нужно игроку свой конфиг давать. Если там будет запрет на

ну.. что мешает в iprp_feats.2da поставить коэф. 1? Тогда левелрестрикт нам не помеха. smile.gif
так вот smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.