Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 27 28 29 30 31 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Grazzt, Dark Pri...
сообщение Feb 14 2005, 17:22
Сообщение #701


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



:DB: И еще один мааленький вопросец :swoon: - можно ли манипулировать очередью actions обьектов? Утрировано - NPC по скрипту перемещается к тэгу А, потом к тэгу B, потом к тэгу C. Можно ли каким-то образом выяснить, есть ли к примеру в очереди для этого объекта комманда "переместиться к тэгу B" и очередность её выполнения относительно других комманд очереди? Можно ли каким-то образом "вручную" менять очередность? :unsure:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 14 2005, 18:34
Сообщение #702


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Grazzt, Dark Prince зачем такие заморочки. Скрипт то ты сам пишешь. Вот и определись к каждому посту свои условия, к примеру дистанцию или вешавй локалку на НПС. А выуживание акций на кой?
Добавлено в [mergetime]1108395396[/mergetime]
Опиши твою ЗАДАЧУ. Мы подскажем как ее реализовать. А твои домыслы могут быть ужасно не в кассу...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 14 2005, 19:24
Сообщение #703


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



->Aiwan: Меня интересует сама возможность. :xz: И нужно это мне скорее в целях более эффективной отладки сценариев игры. Понятное дело, что можно послать какой нибудь ClearAllActions, и попробовать сформировать цепочку событий самостоятельно. Но есть один тонкий момент - если цепочку событий для обьекта одновременно формируют несколько различных довольно обьемистых скриптов, то логика работы системы становится достаточно интересной и не всегда до конца предсказуемой в силу довольно таки высокой сложности этой самой логики и недостатка времени на бетатестирование. Как правило приходится довольно страшно изголяться с очисткой буфера комманд и локальными переменными, что не всегда (ну во всяком случае из моей скудной практики программирования под Аврору) есть гуд. Конечно можно сказать, что надо по возможности избегать таких моментов. Но увы и ах - не всегда это удается. И тогда наступают муки адовы, выражающиеся в длительных попытках найти логическую ошибку в собственных скриптах не имея нормальных средств отладки. Разобраться в этом помогло бы что-то вроде лога всех скриптовых комманд с результатами отработки, посланных во время игрового процесса. Но увы - этого видимо нет (а было бы удобно...). По этому на худой конец подошли бы и некие функции получения мгновенного состояния буфера комманд. Это был бы просто луч света в темном царстве. :drag:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение Feb 14 2005, 21:18
Сообщение #704


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



Здрастеся все.
У меня тут небольшой косяк, помогите пжАААлуйста: :swoon: :swoon:

Neverwinter Script Source
void main()
{
object oGuard =GetObjectByTag("Guard_1");
object oMech = GetObjectByTag("Mech");
while (GetTag(oItem)!=sTag)
{
object oItem = GetNextItemInInventory(oMech);
if (!GetIsObjectValid(oItem)) return OBJECT_INVALID;
  }
return oItem;
}
int nInventorySlot = GetInventoryDisturbItem(oMech);


// Здесь должна быть эта долбаная проверка :this:



ActionEquipItem(GetItem("Mech",OBJECT_SELF),INVENTORY_SLOT_RIGHTHAND);
SetLocalInt(OBJECT_SELF,"Mech",FALSE);
}


Этот скрипт вствляется в OnDamage(или как его там, непомню. Вообщем мысля понятна)НеПиСя.
И когда НеПиСь получает повреждение(т.е. его атакуют), то он должен достать меч.
В принципе все получается, но я не знаю как сделать проверку на, то, что НеПиСя атакуют.
Помогите.Плизззззз! :mamba:

P.S.: КУДА ВСЕ РАЗБЕЖАЛИСЬ?

Сообщение отредактировал Archangel - Feb 14 2005, 21:22
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 11:03
Сообщение #705


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE
Меня интересует сама возможность.

Скорее всего нет.
QUOTE
И нужно это мне скорее в целях более эффективной отладки сценариев игры. Понятное дело, что можно послать какой нибудь ClearAllActions, и попробовать сформировать цепочку событий самостоятельно.

Извини, но твои запросы непонятны с точки зрения необходимости. Зачем выуживать то что там накопилось? И пытаться разобраться? ТЫ что, будешь сам ковырять стэк? Или доверишься СКРИПТУ? По твоей логике, ты делаешь подсластитель сахару. Ты и отличаешься от компьютера, что можешь сам задать логику своих скриптов и прочее. И вообще, ОПИШИ хоть ОДНУ ситуацию, когда тебе это действительно НАДО. В стэк помещается 75 акций. Ты получил 50 разных. Что делаешь? :D Все что ты описал это не аргумент, это сожаления неумелого скриптера. Когда ты научишься писать скрипты хорошо, твой вопрос будет снят сам собой. Как что то в модуле работает без твоего ведома??? Я не пойму ты тогда зачем там? :D
Давай конкретную ситуацию. Ты делаешь то то, а происходит то-то и ты не знаешь почему. И поговорим.

QUOTE
P.S.: КУДА ВСЕ РАЗБЕЖАЛИСЬ?

Мы тут сидим от нечего делать и правим всем скрипты. Все остальное для нас пустой звук в мире. :dirol:
О! Ну наконец я могу помочь страждущему! :SM:
Поставь это на ОнДамадж НПС.
Neverwinter Script Source
void main()
{
object oItem = GetItemPossessedBy(OBJECT_SELF, "Mech");
ActionEquipItem(oItem, OBJECT_SELF, INVENTORY_SLOT_RIGHTHAND);
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение Feb 15 2005, 12:27
Сообщение #706


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



QUOTE
Мы тут сидим от нечего делать и правим всем скрипты. Все остальное для нас пустой звук в мире.


Да, ладно Aiwan...
Это я ж так, шуча.....

А за скрипт спасибушки!
%) %) %)
Добавлено в [mergetime]1108460998[/mergetime]
Aiwan!
Че-то твой скрипт не фурычит!
Я,конечно, мало че в этом понимаю, но вроде бы тута еще переменная нужна......
Пытался сам енто исправить, но не получилось. Ибо мозгов не хватает.

P.s.: Не компилится во 2й строчке. :ph34r: :ph34r: :ph34r:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 15 2005, 13:21
Сообщение #707


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



Archangel
я конечно не уверен, бо не проверял, но есть подозрение,
что при каждом попадании по NPC он будет делать доставание меча,
что, имхо, негативно скажется на его боеспособности...

правильнее, наверное, так:
Neverwinter Script Source
void main()
{
  object oSword = GetItemPossessedBy(OBJECT_SELF, "Mech");
  object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
  if (oItem != oSword)
    AssignCommand(OBJECT_SELF, ActionEquipItem(oItem, INVENTORY_SLOT_RIGHTHAND));
}


кстати, Archangel знаком с такой штукой - лексикон?

ps. по поводу "доставания меча" - во времена "игры запоем" обнаружил такую штуку:
если во время боя постоянно менять "набор оружия", процент попадания сильно
увеличивается... это, конечно, субъективно, но так показалось. :xz:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Feb 15 2005, 13:46
Сообщение #708


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



dumbo
AssignCommand(OBJECT_SELF, ...) - это бессмысленная строка. Достаточно просто
ClearAllActions();
ActionEquipItem(...);
DetermineCombatRound(...);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 15 2005, 14:16
Сообщение #709


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



DBColl
каюсь. AssignCommand применительно к селфу - лишнее стопудово :yes:
взял из первого попавшегося скрипта, особо не раздумывая... а надо было.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 15 2005, 15:25
Сообщение #710


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



>Aiwan: Немного флуда (непреднамереного) и вопрос. :DB:
Необходимость простая - отладка. Другой нет (пока). Ничего предосудительного в том, чтобы если уж существует буфер акций, то иметь возможность полноценной работы с ним, я не вижу (можно отнести к разделу моих пожеланий по второму NWN :D ). Ну впрочем вчера я и без этого разобрался. Проблема была в синхронизации действий "босса" и его "подручных" во время боя с PC и была связана с несколько некорректным планированием боевой ситуации с моей стороны. Нужно было точно синхронизировать работу трех скриптов, в одном из которых была ветка, завязяная на здоровье "босса". Из-за разности наносимого демеджа в конкретный момент времени в различных тестовых боях в некоторых случаях возникало рассогласование действий актеров. И в результате получалось тоже неплохо, но не так, как я хотел (в основном из-за не вовремя посланных DelayCommand). Решилось все просто изменением значения двух локальных переменных. Чисто (на мой непросвященный взгляд) логическая ошибка, на которую я угробил 8,5 часов своего драгоценного времени и чего бы не было, знай я содержимое буфера. А так пришлось сендить все имеющиеся переменные и долго и упорно ловить мелкий(?!) но гадский глюк. На счет опытности ты прав - на Авроре я програмлю всего неделю, по этому скрипты у меня вероятно еще не очень хорошие :D Впрочем ничего особенного в Авроре нет кроме массы нюансов (а в них вся соль!), которых о которых я еще (пока!) не знаю. Например (это уже вопрос!) 75 акций - это для всех обьектов или для одного?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 17:17
Сообщение #711


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (dumbo @ Feb 15 2005, 16:21)
я конечно не уверен, бо не проверял, но есть подозрение,
что при каждом попадании по NPC он будет делать доставание меча,
что, имхо, негативно скажется на его боеспособности...

Да, ты прав, я невнимательно написал и кстати без ароры, что естественно мог ошибиться в синтаксисе...
QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 18:25)
Например (это уже вопрос!) 75 акций - это для всех обьектов или для одного?

У каждого объекта есть стек команд, он вмещает 75 акций.
QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 18:25)
А так пришлось сендить все имеющиеся переменные и долго и упорно ловить мелкий(?!) но гадский глюк.

Давай поговорим через год. Тогда ты скажешь, нужна эта функция для доставания акций из стэка или нет. За два с лишним года ты первый кто об этом заикается. Но скажу так, никакие функции не заменят кривых скриптов. Мне интересно, как ты собрался десять акций идти по вейпам узнавать из какого скрипта какая акция? Ты хочешь еще кнопочку еррорлог, и тебе пишет тулсет где какую запятую тебе поставить, мол вы ошиблись. :) Учись скриптить и не морочь нам голову. К тому же, ты разбираешься в них неплохо для новичка. Так что скоро будешь смеяться над своим предложением.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Feb 15 2005, 17:22
Сообщение #712


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 14:25)
Например (это уже вопрос!) 75 акций - это для всех обьектов или для одного?

Для КАЖДОГО объекта.

А иметь возможность просматривать стек акций было бы действительно неплохо... :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 17:54
Сообщение #713


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (DBColl @ Feb 15 2005, 20:22)
А иметь возможность просматривать стек акций было бы действительно неплохо...

Согласен. Но не сделает Биовар это вам. Обсидан тоесть... Скажут учите Лексикон.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 15 2005, 18:12
Сообщение #714


Level 8
***

Класс: Маг
Характер: Lawful Good
Раса: Полуэльф



Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Created By: MasterMage ©
//:: Created On: edit 15.02.05
//::///////////////////////////////////////////////
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oRing=GetPCItemLastUnequipped();

    if (GetTag(oRing)=="Ring")
    {
    effect eEf=GetFirstEffect(oPC);
    while (GetIsEffectValid(eEf))
    {
    RemoveEffect(oPC,eEf);
    eEf=GetNextEffect(oPC);
    }
    }
    return;
}
это уменьшенная копия второго, но тут дело так, что все эффекты могут удалиться...Вот...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 15 2005, 19:10
Сообщение #715


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



[SIZE=1]
QUOTE (Aiwan @ Feb 15 2005, 17:54)
Согласен. Но  не сделает Биовар это вам. Обсидан тоесть... Скажут учите Лексикон.

:D Ну ведь есть раздел пожеланий. Наверно если хорошенько пожелать :lol: , да еще кто-то не поленится перевести... :D Так и вертится цитата:
"...Ибо Писание говорит фараону: для того самого Я и поставил тебя, чтобы показать над тобою силу Мою и чтобы проповедано было имя Мое по всей земле... "
Послание св. Павла к римлянам.
:DB:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 15 2005, 19:26
Сообщение #716


Level 8
***

Класс: Маг
Характер: Lawful Good
Раса: Полуэльф



Grazzt, Dark Prince :wizard:
ЭХ......мыслители..... Ээээээээх...
Aiwan СМОТРИ, СМОТРИ СЮДА!!!! :BRAVO:
Вот смотри... решил сделать скрипт, как вещи Нашера...Там где статы прибавлябтся, если все собрал... Но не понял особо инклуды и готовые, поэтому написал свой...
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastEquippedBy();
    object oItem1=GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
    object oItem2=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
    object oItem3=GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
    object oItem4=GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
    if(GetTag(oItem1)=="Item1"&&
    GetTag(oItem2)=="Item2"&&
    GetTag(oItem3)=="Item3"&&
    GetTag(oItem4)=="Item4"&&GetLocalInt(oPC,"Veshi")==0)
    {
    SetLocalInt(oPC,"Veshi",1);
    SetLocalInt(oPC,"i1",GetAbilityScore(oPC,ABILITY_STRENGTH));
    SetLocalInt(oPC,"i2",GetAbilityScore(oPC,ABILITY_DEXTERITY));
    SetLocalInt(oPC,"i3",GetAbilityScore(oPC,ABILITY_CONSTITUTION));
    SetLocalInt(oPC,"i4",GetAbilityScore(oPC,ABILITY_WISDOM));
    effect eEf1=EffectAbilityIncrease(ABILITY_STRENGTH,10);
    effect eEf2=EffectAbilityIncrease(ABILITY_DEXTERITY,10);
    effect eEf3=EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
    effect eEf4=EffectAbilityIncrease(ABILITY_WISDOM,10);
    effect eEf_main=EffectVisualEffect(VFX_DUR_STONEHOLD);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf1,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf2,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf3,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf4,oPC);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEf_main,oPC,1.5);
    }
    return;

}
это когда одел


Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    int i1=(GetAbilityScore(oPC,ABILITY_STRENGTH) - GetLocalInt(oPC,"i1"));
    int i2=(GetAbilityScore(oPC,ABILITY_DEXTERITY) - GetLocalInt(oPC,"i2"));
    int i3=(GetAbilityScore(oPC,ABILITY_CONSTITUTION) - GetLocalInt(oPC,"i3"));
    int i4=(GetAbilityScore(oPC,ABILITY_WISDOM) - GetLocalInt(oPC,"i4"));
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
    SetLocalInt(oPC,"Veshi",0);
    effect eEf1=EffectAbilityDecrease(ABILITY_STRENGTH,i1);
    effect eEf2=EffectAbilityDecrease(ABILITY_DEXTERITY,i2);
    effect eEf3=EffectAbilityDecrease(ABILITY_CONSTITUTION,i3);
    effect eEf4=EffectAbilityDecrease(ABILITY_WISDOM,i4);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf1,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf2,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf3,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf4,oPC);

    }

}
это когда снял, но иконки эффекта не исчезают.... есть что-нить полегче, да и заодно подскажи, как полегче сделать.... Не зря ученик у учителю обращается... :this:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 15 2005, 19:36
Сообщение #717


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



MasterMage
тебе надо делать не EffectAbilityDecrease, а цикл по уже наложенным эффектам на перса, выуживать наложенные тобой, и их снимать. А так ты вешаешь допольнительные новые эффекты на снимании...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 15 2005, 19:51
Сообщение #718


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Archangel @ Feb 13 2005, 17:46)
Есть Игрок, он пытается открыть дверь(точнее взломать-сначало дверь закрыта). Если у него енто получается, то рядом стоящий охранник говорит:"I kill you small thief!"

слот onUnLock
Neverwinter Script Source
void main()
{
object oGuard = GetNearestObjectByTag("Guard_dragons_1");
object oPC = GetLastUnlocked();
if (!GetIsPC(oPC)) return;
AssignCommand(oGuard,ClearAllActions());
AssignCommand(oGuard,ActionAttack(oPC));
AssignCommand(oGuard,SpeakString("I kill you small thief!"));
}

В случае, если РС успешно взломал дверь, то стражник нападает. Как тебе вроде и надо.

QUOTE (Archangel @ Feb 13 2005, 17:46)
Если ж у Игрока не получается тпереть дверь, то тогда охранник просто говорит: "What are you doing? Get out small thief!".

это нельзя сделать именно так. Можно что игрок пытается открыть дверь, но не может.
слот onFailToOpen
Neverwinter Script Source
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
object oGuard = GetNearestObjectByTag("Guard_dragons_1");
AssignCommand(oGuard,SpeakString("What are you doing? Get out small thief!"));
}


Проверил, все работает
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 20:14
Сообщение #719


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



MasterMage я такие скрипты не писал. Спроси ДБа или Лекса. :rolleyes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 15 2005, 20:23
Сообщение #720


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (dumbo @ Feb 15 2005, 19:36)
MasterMage тебе надо делать не EffectAbilityDecrease, а цикл по уже наложенным эффектам на перса, выуживать наложенные тобой, и их снимать. А так ты вешаешь допольнительные новые эффекты на сниман

абсолютно верно.
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
       if (GetLocalInt(oPC,"Veshi")==0) return;
       SetLocalInt(oPC,"Veshi",0);
       effect ePCEffect = GetFirstEffect(oPC);
       effect eEf1=EffectAbilityIncrease(ABILITY_STRENGTH,10);
       effect eEf2=EffectAbilityIncrease(ABILITY_DEXTERITY,10);
       effect eEf3=EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
       effect eEf4=EffectAbilityIncrease(ABILITY_WISDOM,10);
      while (GetIsEffectValid(ePCEffect))
       {
          if ((ePCEffect==eEf1)||(ePCEffect==eEf2)||(ePCEffect==eEf3)||(ePCEffect==eEf4))
               RemoveEffect(oPC,ePCEffect);
          ePCEffect = GetNextEffect(oPC);
       }    
    }
}


Вроде так
Как видишь, локалки не нужны. Так что первый скрипт можно упростить


QUOTE (Grazzt @ Dark Prince, Feb 14 2005, 17:22)
Можно ли каким-то образом выяснить, есть ли к примеру в очереди для этого объекта комманда "переместиться к тэгу B" и очередность её выполнения относительно других комманд очереди? Можно ли каким-то образом "вручную" менять очередность?

нет.
Можно добиться такого эффекта другим методом, но копаться в стеке акций нельзя.


QUOTE (Archangel @ Feb 14 2005, 21:18)
В принципе все получается, но я не знаю как сделать проверку на, то, что НеПиСя атакуют.

если он получил Дамаг, значит его атакуют. проверка не нужна.

QUOTE (Aiwan @ Feb 15 2005, 17:17)
Ты хочешь еще кнопочку еррорлог, и тебе пишет тулсет где какую запятую тебе поставить, мол вы ошиблись.Учись скриптить и не морочь нам голову.

Не кипятись. :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 00:33
Сообщение #721


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



боюсь, что и Lex не попал... прилагаю официальную спраУку:
QUOTE

Remarks
A common mistake with this function is to use the following approach to remove, say, a sleep effect:
effect eSleep=EffectSleep();
RemoveEffect(oPC, eSleep);
This doesn't work, because calling EffectSleep creates a new effect. It is thus not the sleep effect that is currently on oPC, but a different sleep effect.


так что тут должно быть примерно такое:
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
      if (GetLocalInt(oPC,"Veshi")==0) return;
      SetLocalInt(oPC,"Veshi",0);
      effect ePCEffect = GetFirstEffect(oPC);
      while (GetIsEffectValid(ePCEffect))
      {
          if((GetEffectType(ePCEffect) == EFFECT_TYPE_ABILITY_INCREASE) &&
            ((GetEffectCreator(ePCEffect) == GetModule()))
              RemoveEffect(oPC, ePCEffect);
          ePCEffect = GetNextEffect(oPC);
      }   
    }
}


дабы не сымать "чужие" эффекты, стоит проверочка на создателя...
если я правильно помню, то этим не обойдешься, если хочешь,
чтоб все ровно было - после реста эти эффекты "улетают"... :swoon:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 16 2005, 00:38
Сообщение #722


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Хехе, нет, dumbo, тут я все попал. :)

CODE

effect eSleep=EffectSleep();
RemoveEffect(oPC, eSleep);
This doesn't work...

но я то что удаляю?
CODE

ePCEffect = GetNextEffect(oPC);
RemoveEffect(oPC,ePCEffect);

Проверку на креатора можно внести в мой вариант, но просто подъем стата на 10 пунктов вещь довольно редкая.


Но твой вариант тоже верен. За одним НО
- снимутся все эффекты повышения статов, наложенных модулем. А это могут быть эффекты от других вещей. (например зелье ловкости. Хотя тут я не уверен, что эффект накладывает модуль, надо попробовать.)

Я уже сталкивался с подобными делами. У себя я демал моим вариантом + проверял креатора. Чтобы уж наверняка. (креатором был НПС Effector, что стоял у меня в закрытой локации. )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 00:58
Сообщение #723


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



Lex
эх, спорить буду. :tomato:
спраУку я привел немного не для того... а для чего - сейчас поймешь. :drag:
удаляешь ты тот что нужно эфект, перечисляемый. да. но!
обрати внимание с чем ты его сравниваешь. вот где порылась собака,
описываемая в нотайсе. ты сравниваешь эффект созданный (давно=) в OnEquip
с только что созданным новым эффектом. даже если эту конструкцию
пропустит компилер, в чем я сомневаюсь, равны они никак и никогда не будут.

спецовый НПС-зэк - стопудовый хит в деле создания скриптов... :good:
это я упустил. а зря.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shad
сообщение Feb 16 2005, 09:20
Сообщение #724


Level 3
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



QUOTE (Friedrich @ Feb 13 2005, 20:23)
QUOTE
И еще вопросик как мне соединить в скрипте на локации 4 заклинания Луч Мороза
Например 4 Точки маршрута и из 1 точки бьёт луч во 2 и т.д

На вейпоинты, по-моему, вообще ничего накладывать нельзя. На не статичные невидимые плейсаблы - можно.

Точно. И на локацию луч тож наложить нельзя. То все что я выше написал - неподходит. Подходит вот что:
1. Расставляем вейпойнты с тегами от имя0 до имяN, invisobj001 - ResRef невидимого _нестатического_ объекта (_статичекий_ невидимый лежит в Placeable Objects/Miscellaneous), этот скрипт вешаем на НПС:
Neverwinter Script Source
void main()
{
    int i = 0;
    string sWPTag = "имя";
    object oSource;
    object oTarget = CreateObject(OBJECT_TYPE_PLACEABLE, "invisobj001",
                    GetLocation(GetWaypointByTag(sWPTag+"0")),
                    0, "IO"+sWPTag+"0");
    //First temporary target object created
    ClearAllActions();
    ActionCastSpellAtObject(SPELL_RAY_OF_FROST, oTarget, METAMAGIC_ANY, 1);
    //NPC shoots first ray
    DestroyObject(oTarget, 7.0);
    //Temporary invisible target will be destroyed. Place here how long show must go on
    while(GetIsObjectValid(GetWaypointByTag(sWPTag+IntToString(++i))))//Validate next waypoint
    {
        oSource = oTarget;//Choose next source
        oTarget = CreateObject(OBJECT_TYPE_PLACEABLE, "invisobj001",
                  GetLocation(GetWaypointByTag(sWPTag+IntToString(i))),
                  0, "IO"+sWPTag+IntToString(i));
        //Create next temporary target object
        DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oSource, BODY_NODE_CHEST), oTarget, 30.0));
        //Delayed appliance of ray effect. Show time really maintained by destroying source/target object
        DestroyObject(oTarget, 7.0);//Destroy temporary object. Place here how long show must go on
    }
    DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oTarget, BODY_NODE_CHEST), GetObjectByTag("IO"+sWPTag+"0"), 30.0));
    //Close polygon
}

2. Расставляем невидимые нестатические с тегами от Тег0 до ТегN, вешаем скрипт на НПС:
Neverwinter Script Source
void main()
{
    int i = 0;
    string sIOTag = "Тег";
    object oSource;
    object oTarget = GetObjectByTag(sIOTag+"0");
    //First target object chosen
    ClearAllActions();
    ActionCastSpellAtObject(SPELL_RAY_OF_FROST, oTarget, METAMAGIC_ANY, 1);//NPC shoots first ray
    while(GetIsObjectValid(GetObjectByTag(sIOTag+IntToString(++i))))//Validate next waypoint
    {
        oSource = oTarget;//Choose next source
        oTarget = GetObjectByTag(sIOTag+IntToString(i));
        //Choose next target object
        DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oSource, BODY_NODE_CHEST), oTarget, 5.0-0.2*i));
        //Delayed appliance of ray effect. Replace 5.0 with needed show time
    }
    DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oTarget, BODY_NODE_CHEST), GetObjectByTag(sIOTag+"0"), 5.0-0.2*i));
    //Close polygon. Replace 5.0 with needed show time
}


Приимущество первого - красиво постепенно исчезает єффект, приимущество второго - проще.

Сообщение отредактировал Shad - Feb 16 2005, 09:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 16 2005, 10:51
Сообщение #725


Level 10
Иконки Групп

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Shad
Спасибо Дома Попробую, сделать. ;)
Добавлено в [mergetime]1108541889[/mergetime]
Я непонел как это сделать Расставляем вейпойнты с тегами от имя0 до имяN, invisobj001 - ResRef невидимого _нестатического_ объекта (_статичекий_ невидимый лежит в Placeable Objects/Miscellaneous), этот скрипт вешаем на НПС:. и на кокой слот у НПК ставить.
Я Придумал свою версию скрипта как думаеш норма!
Делается 5 НЕВИДИМЫХ НПК ПРИСВАЕВАИМ им номера и теги и вперёд..

Neverwinter Script Source
void main()
{
        int nNumber = StringToInt(GetStringRight(GetTag(OBJECT_SELF),1));
        //determines target of the lightning
        if (nNumber == 5)
        {
            nNumber = 1;
        }
        else
        {
            nNumber++;
        }
        object oTarget = GetNearestObjectByTag("Nev_Npc" + IntToString(nNumber));
        if(GetIsObjectValid(oTarget))
        {
            DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectBeam(VFX_BEAM_COLD,OBJECT_SELF,BODY_NODE_CHEST),oTarget));
        }

}


его ещё не проверял хочу посаветывотся. :good:

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 27 28 29 30 31 > » 
Ответить в эту темуОткрыть новую тему
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 30th April 2025 - 22:31