Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
RedBird
В общем дело такое. Скрипт отвечающий за бардовскую песню, не помню точное название, вроде X0_nw_что-то. Суть в том что я сделал так, что при поднятии уровня Тайного Лучника и ученика дракона учитывались их уровни при определении силы песни (int GetLevelByClass кажется). Так же: в feat_archer дописал что Арчер получает песню барда так же как если бы он был бардом (допустим бард 8 арчер 4 - 12 песен в день). Сделал исполнение классовым навыком для Арчера. В чем проблема - кастую песню. Она работет, растет вместе с персонажем бард-лучник, дает как надо все параметры, работает сколько нужно по времени, могу кастовать сколько надо раз в день (1уровень=1каст\день). НО! Иногда при получении большого урона (выше 10 единиц, как я понял) все эффекты песни спадают, однако над головой сохраняются нотки, как будто песня продолжается.

В чем может быть проблема?
denis0k
Навскидку: песня может давать группу связанных (link) эффектов, один из которых - временные хитпоинты. Вполне возможно, что нвн при снятии временных хп удаляет весь набор эффектов (багофича т.е.). Лечение, если я угадал: накладывать хиты отдельным эффектом.
Sugo77
Проверьте, и подскажите, что не так в скрипте на возможность садиться игроку на стул\скамейку\кресло?(В Neverwinter Nights 2):
Код
void main()
{
object oChair = OBJECT_SELF;
if (!GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) {
     AssignCommand(GetLastUsedBy(), ActionSit(oChair));
}

}


Игрок садиться, и тут же соскавкивает\встаёт, даже не успев сесть, что не так?
Подправте, пожалуйста!

Разумеется вставлял в On Used Script, и делал предметы Usable

Добавлю:
-Тестил на всех видах скамеек, стульев, кресел-везде, один и тот же эффект, как будто что-то не срабатывает, буд-то скрипт не доработан, хотя ошибок при сохранении(На F7)-не выдаёт!

Добавлено позже!:
-Отбой!, игрок всё же "садится" на стул, после задержки, где-то в секунд: 10(Если ждать, и не шевелиться), плюс, криво "садится", иногда вообще помимо скамейки! sad.gif
Это что, так в НВН2 система сажания на стулья-настроена?!, или данный скрипт для НВН2-не совсем подходит?!

Есть другие варианты?

Заранее спасибо!
RedBird
Цитата(denis0k @ Mar 17 2013, 15:35) *
Навскидку: песня может давать группу связанных (link) эффектов, один из которых - временные хитпоинты. Вполне возможно, что нвн при снятии временных хп удаляет весь набор эффектов (багофича т.е.). Лечение, если я угадал: накладывать хиты отдельным эффектом.

К сожалению немного мимо =) я разобрался. Взял скрипт из оригинала, а там нет как я понял параметра Duration, и песня обрывалась при снятии хитов (ваша версия). С скриптом из HotU проблем нет
Alian REXis
Цитата(Sugo77 @ Mar 17 2013, 19:18) *
Проверьте, и подскажите, что не так в скрипте на возможность садиться игроку на стул\скамейку\кресло?(В Neverwinter Nights 2):

В NWN2 с ActionSit проблемы, функция изначально не работала и ее вроде не пофиксили, хотя могу ошибаться. На ваулте есть куча решений этой проблемы, например, вот.
denis0k
Обсидианы добавили в нвн2 немало клёвых ништяков, при этом, как водится, похерив немало старых smile.gif ActionSit - один из них.
Sugo77
Да, спасибо!
Скрипт по ссылке, от Alian REXis, работает без задержек, и без сбоев!:
NWN2, Drow At Picnic\НВН2, Дроу На Пикнике

Меня сейчас волнует другая проблема, с визуальным эффектами(В NWN2), под названиями:
fx_willowisp_blue
fx_willowisp_green
fx_willowisp_red
fx_willowisp_yellow
Так вот, если в самом тулсете, ставишь эти эффекты на мобов(Или в любые, другие прдметы, вещи, оружия), всё работает отлично, но стоит зайти в игру, почему-то, сразу выкидывает, интересно почему?!(Особенно если вставить данные, визуальные эффекты, в мобов, или в оружие, и когда пытаешься взять оружие в руки, сразу выбрасывает из игры, с неизвестной ошибкой, Windows 7 Максимальная 64-bit SP1-не может её определить\устранить!)
Другие визуальные эффекты, работают без сбоев, потестил уже больше половины!

С чем это может быть связано, и как можно решить данную проблему, есть идеи?
-И интересует, это только у меня одного так, или у всех?
Настройки видео, в самой игре, менял по разному, не помогает...
Версия игры: Neverwinter Nights 2 Gold от Акеллы(На русском языке) + Патч от Акеллы: Akella_SoZ_1231765(На русском языке)

Добавлю:
-Хочу позже переустановить игру, с версии Gold от Акеллы, на Platinum от Акеллы, но, сомневаюсь, что поможет...

Просьба!, у кого установлена игра: Neverwinter Nights 2, можете, пожалуйста, проверить данные визульные эффекты, будут у вас работать в модуле, или нет?!
Желательно потестить на оружии...

Заранее спасибо!
Anakondar
Кстати, это ветка авроры, а не электры
Ollone5
В общем прошу пояснить почему не у меня не работает этот http://www.city-of-masters.ru/forums/index...amp;#entry31706 скрипт. Точнее его первая часть. Я так думаю это потому что у меня версия 1.69, хотя кто знает... Я недавно начал осваивать написание скриптов и очень прошу помочь мне с моими вопросами.
Melisse
Подробнее что именно не работает?
Не создается объект, нет эффекта?

Neverwinter Script
// Может не компилироваться если у тебя не стоит патч Дамбо для буквы "я". Т.к. из-за нее не компилировалось раньше.

void Raise(object oNPC = OBJECT_SELF)
{
   effect eVisDead = EffectVisualEffect(VFX_IMP_HEAD_ACID);///Эффект с которым объект будет воскресать. В данном случае это кислота!
  
   // Объект, который будет появляться (воскресать). Там надо вставлять не тэг а РЕСРЕФ объекта, потому что тэг и ресреф могут различаться
   // Если тэг и ресреф одинаковы - тогда без разницы. А вообще пиши тэги всегда верхним регистром, а ресреф нижним :З. Функции подобные этой
   // сами переводят верхний регистр в нижний, но для различия всегда удобнее тэг - верхним, ресреф - нижним
   object oNew = CreateObject(OBJECT_TYPE_CREATURE,"ZombieWeak07", GetLocation(oNPC )) ;
   ApplyEffectAtLocation(DURATION_TYPE_INTSTANT, eVisDead, GetLocation(oNew));
}

void main()
{
   object oCleric = GetNearestObjectByTag("Nekrolog01");// Тег объекта который будет оживлять. И которого надо убить чтобы остальные больше не оживали.

   // Объект есть, не мертвый и не дерется ни с кем
  if (GetIsObjectValid(oCleric) && !GetIsDead(oCleric) && !GetIsInCombat(oCleric))
   {
       AssignCommand(oCleric, ClearAllActions()); // Чистка стэка действий объекта

       //Действия, которые выполняет "оживитель" как только умирает один из объектов. В данном случае становится на колени.  
       AssignCommand(oCleric, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 1.0, 3.0f)); // Анимация призыва/моления

       effect eVisCleric = EffectVisualEffect(VFX_IMP_AURA_NEGATIVE_ENERGY);// Эффект, с которым клирик воскрешает. В данном случае появляется красного цвета аура. Но эффекты можно менять!
       ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisCleric, oCleric, 3.0f); // TEMPORARY тип для продолжительных во времени, INSTANT для мгновенных, а PERMANENT - постоянных

       DelayCommand(3.0f, Raise(OBJECT_SELF)); // Функция сверху void main()
       DelayCommand(0.2f,AssignCommand(oCleric, SpeakOneLinerConversation())) ; // Что-то типа воспроизвести 1-ю неветвящуюся строку диалога.
  }
}
Ollone5
Да, не появляются новые зомби и людишки погибают без эффекта, а вот некролог и сверкает и на колени становиться. Мне вобще интересно что это за "ZombieWeak07", не похоже на стандартный объект, хотя я заменял эту надпись на таги своих зомби, все равно не появлялся никто. И ссылку на патч пожалуйста, если он так важен. Можно и на остальные полезные штучки если не трудно.
Melisse
Ну погибать они должны без эффекта - этого в скрипте нет,а вот не воскресать они могут если не тот рес-реф поставлен.
Еще может быть момент в том что в примере в Базе скриптов у функции Raise не объявлен OBJECT_SELF, хотя локация его берется. Вообщем потести так и сяк - в итоге получиться, скрипт рабочий на первый взгляд.
Патч http://wrg.ru/download.php?view.109
Ollone5
Спасибо, да вот на меня этот рес - реф свалился, не знаю что такое. Где то читал но не вник все ж таки.
gennady
У тебя не работает
Neverwinter Script
DelayCommand(3.0f, Raise(OBJECT_SELF)); // Функция сверху void main()

или маленькая выдержка уничтожения трупа или вообще не работает, т.к. скрипты на трупах не работают...

про рес реф я тут подробно описал: http://remmgen.narod.ru/titem.html
Aiwan
Делей лучше вообще вешать на какой либюо объект не участвующий в скрипте, в смысле, например на плейс рядом или на модуль вообще. Тогда 100% сработает.

Я имею ввиду давать команду постороннему объекту сделать что-либо с нужным объектом.

Neverwinter Script
AssignCommand(oModules, DelayCommand(3.0f, Raise));

Как пример, не знаю правильно ли я описал, сто лет не кодил нвн. Я много делал разных комплексов скриптов с делеем в ПВ, понял одну закономерность, если делей без указания того, кто его будет исполнять, то команда часто теряется. Если указать кто будет делать задержку, то срабатывает.
denis0k
Дело не в указании, просто часто объект, с которого запускается скрипт и который становится "исполнителем", уничтожается до делэя. Модуль в таких случаях - идеальный вариант.
Melisse
А что происходит со скриптом который запустил делей? Он висит незавершенным вместе с делеем или таки завершается, а команда срабатывает позже?
Учитывая "однопоточность" нвн-сервера - это не сильно мешает? smile.gif
Ollone5
Значит если на предмет то на OnHeartbeat? И на модуль так же? Куда лучше? И можно ли совместить этот скрипт с тем что там уже есть?
gennady
Neverwinter Script
void Raise(location Loc)
{
effect eVisDead = EffectVisualEffect(VFX_IMP_HEAD_ACID);//Эффект с которым объект будет воскресать. В данном случае это кислота!
object oNew = CreateObject(OBJECT_TYPE_CREATURE,"nw_zombie01", Loc) ;//Монстр из палитры который будет воскрешать.
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eVisDead, Loc);

}
void main()
{
object oCleric = GetNearestObjectByTag("Nekrolog01");// Тег объекта который будет оживлять. И которого надо убить чтобы остальные больше не оживали.
location Loc = GetLocation(OBJECT_SELF);

if (GetIsObjectValid(oCleric) == TRUE && GetIsDead(oCleric) == FALSE)
{
AssignCommand(oCleric, ClearAllActions());
AssignCommand(oCleric, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 1.0, 3.0));//Действия которые выполняет "оживитель" как только умирает один из объектов. В данном случае становится на колени.
effect eVisCleric = EffectVisualEffect(VFX_IMP_AURA_NEGATIVE_ENERGY);// Эффект с которым клирик воскрешает. В данном случае появляется красного цвета аура. Но эффекты можно менять!
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVisCleric, oCleric);
AssignCommand(oCleric, DelayCommand(3.0, Raise(Loc)));
AssignCommand(oCleric, DelayCommand(2.2, SpeakString("Воскресни!"))) ;
}
}

Скрипт на слот смерти монста.
как-то так... declare.gif
Ollone5
У меня кстати вместо русского языка в скриптах каракули какие то. И ничего, даже на колени не встал. Я поставил скрипт на onDeath некролога, на него же надо?
gennady
Это скрипт на монстров, у некролога стандартный. На монстров что их палитры, тоже нужен этот скрипт... Только ставь свой РЕСРЕФ зомби...
Ollone5
А как его ставить? Знаю куда, но как и зачем?
Melisse
Чтобы каракулей не было нужно когда копируют и вставляют - все была русская раскладка.
Flaristan
Цитата(Ollone5 @ Jul 5 2013, 10:38) *
А как его ставить? Знаю куда, но как и зачем?
Резреф – это можно сказать «код» любого объекта, а таг - его «подпись». «Код» всегда будет сугубо индивидуальный и (если я правильно понимаю механику движка НВН) в любом модуле никогда не встретятся 2 объекта с одинаковым «кодом»/резрефом, потому что даже если сделать полную копию объекта – игра сгенерирует ему новый «код»/резреф непосредственно при создании этой копии. «Подпись»/таг отличается же от резрефа тем, что он всегда будет назначенным – либо изначально по воле разрабов НВН, либо впоследствии по воле скриптера (тоесть он никогда не берется из воздуха по своей воле путем генерации, и поэтому он нужен скриптовым функциям, чтоб искать и сортировать по нему объекты).

В модуле объект можно создать двумя способами: копировать его из уже имеющегося в модуле объекта или копировать его из базы данных объектов самой игры называемой «палитрой» объектов. Когда речь идет не о клонировании объектов, а о непосредственно создании их в игре – то для этого необходим исходный «код»/резреф этого объекта в котором закодированы все его будущие свойства (наверное понятно, что если вы хотите создать не непойми что, а что-то вполне конкретное – то без «палитры»/базы данных никак не обойтись; а она по сути своей есть ничто иное, как полный перечень «кодов»/резрефов всех возможных объектов).

«Палитр»/баз данных в модуле обычно бывает 2: «дефолтная»/стандартная (то что есть в тулсете независимо от того каким бы ни был модуль, главное лишь соответствие версий НВН – и как правило во всех более поздних версиях есть все то, что было в более ранних); и «кастомная»/модифицированная (то что делает модульмейкер дополнительно, если его не удовлетворяет стандартное разнообразие). Для создания собственной палитры в тулсете есть команда «добавить в палитру» прилагающаяся к любому объекту, который был «кастомизирован»/модифицирован из стандартной палитры. Для размещения в модуле «кастомизированных»/модифицированных объектов вручную при создании или редактировании модуля – в палитру их добавлять не обязательно; но если вы планируете создавать их в модуле по ходу игры скриптами – то необходимо создать модель этого объекта, добавив ее в палитру. В ходе добавления объекта в палитру (и только тогда) можно назначить ему резреф самостоятельно вручную (а не генерировать его автоматически).

Таким образом, из какой бы палитры объект в модуле ни создавался скриптами – нам для этого нужен его резреф. Нет «валидного»/рабочего резрефа – нет объекта.

P.S.: Никогда не понимал, зачем все советуют писать таги прописными буквами, а резрефы строчными – в редакторе скриптов тулсета существует всего одна функция, которой необходимо указывать резреф объекта. Если понять и запомнить это, то никогда не перепутаешь резреф с тагом. А еще лучше – делайте их одинаковыми для кастомных объектов; меняйте таг при создании их в модуле скриптами, если нужен будет совершенно уникальный.
azathoth
Цитата
А что происходит со скриптом который запустил делей? Он висит незавершенным вместе с делеем или таки завершается, а команда срабатывает позже?
Учитывая "однопоточность" нвн-сервера - это не сильно мешает?


Механика примерно такая: скрипт отрабатывает и завершается (если не зависнет, конечно). Работа такого скрипта - повесить делей. Он это делает и довольный хорошо проделанной работой, завершается. Сами "отложенные действия" вешаются на объект - у нвн есть собственные стуктуры для представления скомпилированных скриптов. - на объкте "висят" эти "отложенные действия" - в виде этих самых структур. То ли это ссылка на скрипт, то ли тот же скрипт с другой точкой входа, то ли какое-то подмножество из скомпилированных функций (выделить их должно быть не так сложно, из-за иерархической продцедурности скриптового языка нвн) - в детали не вдавался, да и не стоит, они ничего в работе скрипт-процессора не меняют - просто эти команды со временем запустятся так же как запускается все остальные скрипты.

Цитата
P.S.: Никогда не понимал, зачем все советуют писать таги прописными буквами, а резрефы строчными – в редакторе скриптов тулсета существует всего одна функция, которой необходимо указывать резреф объекта. Если понять и запомнить это, то никогда не перепутаешь резреф с тагом. А еще лучше – делайте их одинаковыми для кастомных объектов; меняйте таг при создании их в модуле скриптами, если нужен будет совершенно уникальный.

Не льсти себе - подойди ближе. К тому же это стандартное соглашение, вроде sString и lLocation, нотация устаревшая как говно мамонта, но повсеместно используется в скриптах нвн, потому что так уж условились обозначать, и зная эти договорённости можно быстрей вникнуть в чужие скрипты / библиотеки. Та же ситуация и с тэгами и резрефами - встречая в тектсе строчные - понимаем сразу, что это резреф, без необходимости искать по всему коду ту единственную функцию, где же эта строчка там используется, а она не обязательно будет тут же, потому что резреф может, к примеру, формироваться каким-то генератором из списка, например, и мы быстрей поймём что же тут в коде происходит - где тэг пистолета, где резреф ноги, без необходимости разбирать всю логику. Это сильно экономит время.
Flaristan
Если б задачей была экономия времени – я бы скриптами вообще не занимался. biggrin.gif А так максимум что я себе позволяю – это ставить для удобства разделители на начала и концы отдельных смысловых блоков в многосложных скриптах, иногда с короткими подписями в самом разделителе указывающими на что блок направлен. Никогда проблем не возникало с тем, чтоб бегло прочитав нужные части скрипта понять, что же он там делает, и где там стоят таги, а где резрефы, даже если скрипт был написан год или более назад. Позволяет в качестве тренировки не давать мозгам закиснуть. smile.gif Ну а команды скриптеров под НВН – это сейчас раритет уже.pardon.gif Если уж и стоит где-то соблюдать упорядоченность – так это в названиях локальных переменных, обзывая их словосочетаниями вкратце описывающими функции которые те выполняют.
Melisse
azathoth
Спасибо за разъяснение процесса.
Из какого аниме аватарка?) Что-то не идентифицирую в своем багаже такого персонажа.
azathoth
Стыдно сказать, но это Артас rolleyes.gif

http://img3.joyreactor.cc/pics/post/full/a...ing-507673.jpeg
Melisse
Неожиданно. wizard.gif smile.gif Я не знаю кто он там в вов, но жаль аниме нет такого - образ няшно-годный.
azathoth
Тот же, чем окончился Frozen Throne - Артас занимает место Короля-Лича как властитель нежити.

А аниме не жалко - я что-то перестал его смотреть, как-то редко встречаю то, что зацепит. Но любовь к няшным лупоглазым неко осталась biggrin.gif
Aiwan
Харе оффтопить! orc.gif
arcmag
Neverwinter Script
void main(){
  object oPC = GetEnteringObject();
  if(GetLocalInt(oP3C, "ENTERING_ONCE") == 0){
    GiveGoldToCreature(oPC, 1000);
    CreateItemOnObject("resref_item", oPC,100);
    SetLocalInt(oPC, "ENTERING_ONCE", 1);
  }
}


Решил попробовать поставить это событие при входе игрока в локу но почему то во второй строчке object oPC = GetEnteringObject(); вылезает ошибка
ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ
Не мог бы мне кто нибудь объяснить что это значит?
Flaristan
Цитата(arcmag @ Jul 15 2013, 18:51) *
Neverwinter Script
void main(){
  object oPC = GetEnteringObject();
  if(GetLocalInt(oP3C, "ENTERING_ONCE") == 0){
     GiveGoldToCreature(oPC, 1000);
     CreateItemOnObject("resref_item", oPC,100);
     SetLocalInt(oPC, "ENTERING_ONCE", 1);
  }
}


Решил попробовать поставить это событие при входе игрока в локу но почему то во второй строчке object oPC = GetEnteringObject(); вылезает ошибка
ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ
Не мог бы мне кто нибудь объяснить что это значит?

Это значит нужно быть внимательнее biggrin.gif:
Neverwinter Script
object oPC = GetEnteringObject();

  if(GetLocalInt(oP3C, "ENTERING_ONCE") == 0)
___________________^
___________________^
___________________^
arcmag
Стер троичку все равно ошибка во второй строчке как была так и осталась та же самая object oPC = GetEnteringObject();...
Flaristan
Без тройки там все компилируется и даже работает - а чтоб не путаться удобнее писать скрипты упорядоченной структурой:
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();

if(GetLocalInt(oPC, "ENTERING_ONCE") == 0)
  {
  GiveGoldToCreature(oPC, 1000);
  CreateItemOnObject("nw_wswmgs002", oPC, 1);
  SetLocalInt(oPC, "ENTERING_ONCE", 1);
  }
}
arcmag
Не знаю) у меня все равно пишет ошибку в этой строчке object oPC = GetEnteringObject();
ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ )
Я даже удалил весь код оставив только
Neverwinter Script
void main()
{
      object ortp = GetEnteringObject();
}

все равно та же ошибка выскакивает...
Что вообще значит эта ошибка, почему у меня она выскакивает вроде же написано все правильно?
Melisse
Попробуй написать код с чистого скрита используя только инглишь-раскладку.
arcmag
Создал новый скрипт писал исключительно на инглише никакого русского

Neverwinter Script
void main()
{
    object oPC2 = GetEnteringObject();
}

все равно та же самая ошибка выскакивает при компиляции
ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ
не могу понять в чем дело) что значит эта ошибка какой то анализатор переменной хз...
Melisse
Ну... глюк какой-то компилятора, что я могу сказать.

У тебя русского текста нет? Может буква "я"? Она не компилит в стандартном тулсете.
arcmag
Все таки наверное проблема в редакторе) на ноутбуке выдает эту ошибку тут у меня немного другая версия нвн стоит) на настольном пк все работает отлично) жаль конечно что ошибку эту убрать нельзя...
Melisse
пропатч до 1.69 на ноутбуке
arcmag
Тут проблема такая) на ноутбуке я нвн давно уже установил версию 1.69 здесь стоит) А вот как раз на настольном компе я патч не ставил) Быть может этот патч корявый и попался хз) может подскажите ссылку на нормальный работающий патчик и руссификатор к нему?
Melisse
патч 1.69
Руссификатор
arcmag
Есть скрипт который я вешаю на триггер который срабатывает при OnEnter )

Neverwinter Script
void main()
{
    object oPC2 = GetEnteringObject();
    GiveXPToCreature(oPC2,100);
//*******
}


Подскажите как сделать чтобы еще при этом игрок еще и произносил какую нибудь фразу и чтобы событие произошло только один раз? Какие тут нужны функции?
Flaristan
Изучай скрипт-генератор – там есть все подобные функции.

Neverwinter Script
//Put this script OnEnter
#include "nw_i0_tool"
void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

int DoOnce = GetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF));

if (DoOnce==TRUE) return;

SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE);

AssignCommand(oPC, ActionSpeakString("GROOVY!!!"));

RewardPartyXP(100, oPC, FALSE);

}

Вот что он выдаст например по твоему запросу.

P.S.:
if (!GetIsPC(oPC)) return; - эта проверка фильтрует объекты запускающие скрипт таким образом, что срабатывать он будет только на игрока;
int DoOnce = GetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF)); - тут мы прописываем локальную переменную "ДелайРаз" на объект на котором и стоит этот скрипт, называться эта переменная будет по тагу этого оъекта;
if (DoOnce==TRUE) return; - эта проверка и выясняет значение этой переменной, и если оно TRUE (то есть событие уже произошло 1 раз), то скрипт не запустится дальше;
SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE); - строчка следующая сразу же за ней устанавливает эту переменную на TRUE (по умолчанию всегда стоит FALSE т.е. "0", и если скрипт выполняется первый раз - тут мы это и отмечаем);
AssignCommand(oPC, ActionSpeakString("GROOVY!!!")); - эта строчка заставляет игрока запустившего скрипт произнести "GROOVY!!!" при его срабатывании;
RewardPartyXP(100, oPC, FALSE); - это нестандартный вариант раздачи опыта который использовал скрипт-генератор - для его работы необходим "инклюд" который указан в скрипте перед его началом (#include "nw_i0_tool").
arcmag
Спасибо за помощь) у меня несколько вопросов по поводу функций :

1) Что означает параметр OBJECT_SELF ?

2) GetLocalInt как бы просто считывает значение переменной объекта которая может быть только в двух значениях TRUE и FALSE а SetLocalInt наоборот устанавливает это значение) так получается?

3) В чем различия между функциями ActionSpeakString и SpeakString?

Насчет скрипто-геренератора) скачал посмотрел) в принципе штука интересная вот только боюсь с моим английским троишным мне придется оч долго там разбираться и постоянно лазить в переводчик, быть может есть руссификатор к нему?
Melisse
1. OBJECT_SELF - это объект который запускает скрипт
2. Да
3. Разница в том что ActionSpeakString добавляется в стэк действий и может сработать не сразу, а SpeakString заставляет говорить сразу же
Anakondar
Цитата(Melisse @ Jul 18 2013, 09:59) *
2. Да
2. Нет. Любое целое число, не только тру или фолс.
Melisse
Цитата
2. Нет. Любое целое число, не только тру или фолс.

Нет, совсем не так.
При 0 всегда будет FALSE, а от -2,147,483,648 до 2,147,483,647, кроме 0 всегда TRUE
иначе говоря FALSE это всегда 0, а TRUE любое кроме 0
Aiwan
arcmag, почитай мануал по авроре и тут темы для новичков по скриптингу. Там разжевано все про актионы, стек и прочее.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.