![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3561
|
|
Level 5 ![]() ![]() Класс: Паладин Характер: Chaotic Good Раса: Человек ![]() |
Да, не появляются новые зомби и людишки погибают без эффекта, а вот некролог и сверкает и на колени становиться. Мне вобще интересно что это за "ZombieWeak07", не похоже на стандартный объект, хотя я заменял эту надпись на таги своих зомби, все равно не появлялся никто. И ссылку на патч пожалуйста, если он так важен. Можно и на остальные полезные штучки если не трудно.
|
![]()
Сообщение
#3562
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Ну погибать они должны без эффекта - этого в скрипте нет,а вот не воскресать они могут если не тот рес-реф поставлен.
Еще может быть момент в том что в примере в Базе скриптов у функции Raise не объявлен OBJECT_SELF, хотя локация его берется. Вообщем потести так и сяк - в итоге получиться, скрипт рабочий на первый взгляд. Патч http://wrg.ru/download.php?view.109 |
![]()
Сообщение
#3563
|
|
Level 5 ![]() ![]() Класс: Паладин Характер: Chaotic Good Раса: Человек ![]() |
Спасибо, да вот на меня этот рес - реф свалился, не знаю что такое. Где то читал но не вник все ж таки.
|
![]()
Сообщение
#3564
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
У тебя не работает
Neverwinter Script DelayCommand(3.0f, Raise(OBJECT_SELF)); // Функция сверху void main() или маленькая выдержка уничтожения трупа или вообще не работает, т.к. скрипты на трупах не работают... про рес реф я тут подробно описал: http://remmgen.narod.ru/titem.html Сообщение отредактировал gennady - Jul 4 2013, 22:48 |
![]()
Сообщение
#3565
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Делей лучше вообще вешать на какой либюо объект не участвующий в скрипте, в смысле, например на плейс рядом или на модуль вообще. Тогда 100% сработает.
Я имею ввиду давать команду постороннему объекту сделать что-либо с нужным объектом. Neverwinter Script AssignCommand(oModules, DelayCommand(3.0f, Raise)); Как пример, не знаю правильно ли я описал, сто лет не кодил нвн. Я много делал разных комплексов скриптов с делеем в ПВ, понял одну закономерность, если делей без указания того, кто его будет исполнять, то команда часто теряется. Если указать кто будет делать задержку, то срабатывает. |
![]()
Сообщение
#3566
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Дело не в указании, просто часто объект, с которого запускается скрипт и который становится "исполнителем", уничтожается до делэя. Модуль в таких случаях - идеальный вариант.
|
![]()
Сообщение
#3567
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
А что происходит со скриптом который запустил делей? Он висит незавершенным вместе с делеем или таки завершается, а команда срабатывает позже?
Учитывая "однопоточность" нвн-сервера - это не сильно мешает? (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал Melisse - Jul 5 2013, 08:49 |
![]()
Сообщение
#3568
|
|
Level 5 ![]() ![]() Класс: Паладин Характер: Chaotic Good Раса: Человек ![]() |
Значит если на предмет то на OnHeartbeat? И на модуль так же? Куда лучше? И можно ли совместить этот скрипт с тем что там уже есть?
|
![]()
Сообщение
#3569
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
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("Воскресни!"))) ; } } Скрипт на слот смерти монста. как-то так... (IMG:style_emoticons/kolobok_light/declare.gif) Сообщение отредактировал gennady - Jul 5 2013, 10:18 |
![]()
Сообщение
#3570
|
|
Level 5 ![]() ![]() Класс: Паладин Характер: Chaotic Good Раса: Человек ![]() |
У меня кстати вместо русского языка в скриптах каракули какие то. И ничего, даже на колени не встал. Я поставил скрипт на onDeath некролога, на него же надо?
|
![]()
Сообщение
#3571
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Это скрипт на монстров, у некролога стандартный. На монстров что их палитры, тоже нужен этот скрипт... Только ставь свой РЕСРЕФ зомби...
|
![]()
Сообщение
#3572
|
|
Level 5 ![]() ![]() Класс: Паладин Характер: Chaotic Good Раса: Человек ![]() |
А как его ставить? Знаю куда, но как и зачем?
|
![]()
Сообщение
#3573
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Чтобы каракулей не было нужно когда копируют и вставляют - все была русская раскладка.
|
![]()
Сообщение
#3574
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
А как его ставить? Знаю куда, но как и зачем? Резреф – это можно сказать «код» любого объекта, а таг - его «подпись». «Код» всегда будет сугубо индивидуальный и (если я правильно понимаю механику движка НВН) в любом модуле никогда не встретятся 2 объекта с одинаковым «кодом»/резрефом, потому что даже если сделать полную копию объекта – игра сгенерирует ему новый «код»/резреф непосредственно при создании этой копии. «Подпись»/таг отличается же от резрефа тем, что он всегда будет назначенным – либо изначально по воле разрабов НВН, либо впоследствии по воле скриптера (тоесть он никогда не берется из воздуха по своей воле путем генерации, и поэтому он нужен скриптовым функциям, чтоб искать и сортировать по нему объекты).В модуле объект можно создать двумя способами: копировать его из уже имеющегося в модуле объекта или копировать его из базы данных объектов самой игры называемой «палитрой» объектов. Когда речь идет не о клонировании объектов, а о непосредственно создании их в игре – то для этого необходим исходный «код»/резреф этого объекта в котором закодированы все его будущие свойства (наверное понятно, что если вы хотите создать не непойми что, а что-то вполне конкретное – то без «палитры»/базы данных никак не обойтись; а она по сути своей есть ничто иное, как полный перечень «кодов»/резрефов всех возможных объектов). «Палитр»/баз данных в модуле обычно бывает 2: «дефолтная»/стандартная (то что есть в тулсете независимо от того каким бы ни был модуль, главное лишь соответствие версий НВН – и как правило во всех более поздних версиях есть все то, что было в более ранних); и «кастомная»/модифицированная (то что делает модульмейкер дополнительно, если его не удовлетворяет стандартное разнообразие). Для создания собственной палитры в тулсете есть команда «добавить в палитру» прилагающаяся к любому объекту, который был «кастомизирован»/модифицирован из стандартной палитры. Для размещения в модуле «кастомизированных»/модифицированных объектов вручную при создании или редактировании модуля – в палитру их добавлять не обязательно; но если вы планируете создавать их в модуле по ходу игры скриптами – то необходимо создать модель этого объекта, добавив ее в палитру. В ходе добавления объекта в палитру (и только тогда) можно назначить ему резреф самостоятельно вручную (а не генерировать его автоматически). Таким образом, из какой бы палитры объект в модуле ни создавался скриптами – нам для этого нужен его резреф. Нет «валидного»/рабочего резрефа – нет объекта. P.S.: Никогда не понимал, зачем все советуют писать таги прописными буквами, а резрефы строчными – в редакторе скриптов тулсета существует всего одна функция, которой необходимо указывать резреф объекта. Если понять и запомнить это, то никогда не перепутаешь резреф с тагом. А еще лучше – делайте их одинаковыми для кастомных объектов; меняйте таг при создании их в модуле скриптами, если нужен будет совершенно уникальный. |
![]()
Сообщение
#3575
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Цитата А что происходит со скриптом который запустил делей? Он висит незавершенным вместе с делеем или таки завершается, а команда срабатывает позже? Учитывая "однопоточность" нвн-сервера - это не сильно мешает? Механика примерно такая: скрипт отрабатывает и завершается (если не зависнет, конечно). Работа такого скрипта - повесить делей. Он это делает и довольный хорошо проделанной работой, завершается. Сами "отложенные действия" вешаются на объект - у нвн есть собственные стуктуры для представления скомпилированных скриптов. - на объкте "висят" эти "отложенные действия" - в виде этих самых структур. То ли это ссылка на скрипт, то ли тот же скрипт с другой точкой входа, то ли какое-то подмножество из скомпилированных функций (выделить их должно быть не так сложно, из-за иерархической продцедурности скриптового языка нвн) - в детали не вдавался, да и не стоит, они ничего в работе скрипт-процессора не меняют - просто эти команды со временем запустятся так же как запускается все остальные скрипты. Цитата P.S.: Никогда не понимал, зачем все советуют писать таги прописными буквами, а резрефы строчными – в редакторе скриптов тулсета существует всего одна функция, которой необходимо указывать резреф объекта. Если понять и запомнить это, то никогда не перепутаешь резреф с тагом. А еще лучше – делайте их одинаковыми для кастомных объектов; меняйте таг при создании их в модуле скриптами, если нужен будет совершенно уникальный. Не льсти себе - подойди ближе. К тому же это стандартное соглашение, вроде sString и lLocation, нотация устаревшая как говно мамонта, но повсеместно используется в скриптах нвн, потому что так уж условились обозначать, и зная эти договорённости можно быстрей вникнуть в чужие скрипты / библиотеки. Та же ситуация и с тэгами и резрефами - встречая в тектсе строчные - понимаем сразу, что это резреф, без необходимости искать по всему коду ту единственную функцию, где же эта строчка там используется, а она не обязательно будет тут же, потому что резреф может, к примеру, формироваться каким-то генератором из списка, например, и мы быстрей поймём что же тут в коде происходит - где тэг пистолета, где резреф ноги, без необходимости разбирать всю логику. Это сильно экономит время. |
![]()
Сообщение
#3576
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
Если б задачей была экономия времени – я бы скриптами вообще не занимался. (IMG:style_emoticons/kolobok_light/biggrin.gif) А так максимум что я себе позволяю – это ставить для удобства разделители на начала и концы отдельных смысловых блоков в многосложных скриптах, иногда с короткими подписями в самом разделителе указывающими на что блок направлен. Никогда проблем не возникало с тем, чтоб бегло прочитав нужные части скрипта понять, что же он там делает, и где там стоят таги, а где резрефы, даже если скрипт был написан год или более назад. Позволяет в качестве тренировки не давать мозгам закиснуть. (IMG:style_emoticons/kolobok_light/smile.gif) Ну а команды скриптеров под НВН – это сейчас раритет уже.(IMG:style_emoticons/kolobok_light/pardon.gif) Если уж и стоит где-то соблюдать упорядоченность – так это в названиях локальных переменных, обзывая их словосочетаниями вкратце описывающими функции которые те выполняют.
|
![]()
Сообщение
#3577
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
azathoth
Спасибо за разъяснение процесса. Из какого аниме аватарка?) Что-то не идентифицирую в своем багаже такого персонажа. |
![]()
Сообщение
#3578
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Стыдно сказать, но это Артас (IMG:style_emoticons/kolobok_light/rolleyes.gif)
http://img3.joyreactor.cc/pics/post/full/a...ing-507673.jpeg |
![]()
Сообщение
#3579
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Неожиданно. (IMG:style_emoticons/kolobok_light/wizard.gif) (IMG:style_emoticons/kolobok_light/smile.gif) Я не знаю кто он там в вов, но жаль аниме нет такого - образ няшно-годный.
Сообщение отредактировал Melisse - Jul 9 2013, 11:13 |
![]()
Сообщение
#3580
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Тот же, чем окончился Frozen Throne - Артас занимает место Короля-Лича как властитель нежити.
А аниме не жалко - я что-то перестал его смотреть, как-то редко встречаю то, что зацепит. Но любовь к няшным лупоглазым неко осталась (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#3581
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Харе оффтопить! (IMG:style_emoticons/kolobok_light/orc.gif)
|
![]()
Сообщение
#3582
|
|
Level 2 ![]() Класс: Убийца Характер: Neutral Evil Раса: Нежить ![]() |
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(); вылезает ошибка ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ Не мог бы мне кто нибудь объяснить что это значит? |
![]()
Сообщение
#3583
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
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(); вылезает ошибка ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ Не мог бы мне кто нибудь объяснить что это значит? Это значит нужно быть внимательнее (IMG:style_emoticons/kolobok_light/biggrin.gif) : Neverwinter Script object oPC = GetEnteringObject(); ___________________^if(GetLocalInt(oP3C, "ENTERING_ONCE") == 0) ___________________^ ___________________^ Сообщение отредактировал Flaristan - Jul 15 2013, 20:43 |
![]()
Сообщение
#3584
|
|
Level 2 ![]() Класс: Убийца Характер: Neutral Evil Раса: Нежить ![]() |
Стер троичку все равно ошибка во второй строчке как была так и осталась та же самая object oPC = GetEnteringObject();...
|
![]()
Сообщение
#3585
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
Без тройки там все компилируется и даже работает - а чтоб не путаться удобнее писать скрипты упорядоченной структурой:
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); } } |
![]() ![]() |
Текстовая версия | Сейчас: 4th May 2025 - 18:50 |