![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#211
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
KoYuKi, да меняй ее откуда хочешь, из любого скрипта вызывай функцию SetLocalInt (oPC, sIntName, N) где object oPC = GetFirstPC(); (первый попавшийся PC, ведь ты делаешь сингл?), string sIntName = "имя твоей переменной"; int N = "значение переменной". Это в точности также как и с GlobalInt только Local в отличие от нее надо где то хранить, на каком то объекте. Откуда надо, оттуда и меняй эту переменную. Например как только игрок дергает за рычаг поставь на действии SetLocalInt(oPC, sIntName, GetLocalInt(oPC, sIntName)+N); где N - то значение которое ты хочешь прибавить к старому значению переменной.
Чтобы переменная уменьшалась или увеличивалась, или еще как-нибудь изменялась со временем, нужно написать таймер который будет, опять таки, работать либо на PC, либо еще где-то. Это сложнее. Для этого нужно зациклить скрипт таймера, не помню точно название функции запуска скрипта, кажется ExecuteScript. Скрипт таймера надо запускать раз, допустим, в 6 секунд (игровой раунд) с помощью функции DelayCommand, и вызывать снова этот делэй-команд по окончании работы скрипта-таймера. В скрипте-таймере же нужно написать то что будет происходить каждые 6 секунд. Я так подозреваю, какая-то проверка. Например проверка того, не прошло ли еще 10 минут, или 60 раундов. Для этого нужно в таймер поставить счетчик раундов или проверку текущего времени... Отдельная песня... Я напишу, если не забуду, пример когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр. Сообщение отредактировал Lorendroll - Aug 8 2008, 12:08 |
![]()
Сообщение
#212
|
|
Level 6 ![]() ![]() Класс: Варвар Характер: Chaotic Good Раса: Полуорк ![]() |
Lorendroll спасибо большое, теперь все ясно =) Прийду домой, буду пробовать.
Цитата Я напишу, если не забуду, пример, когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр. Обязательно гляну, если напишешь, пример бы не помешал. |
![]()
Сообщение
#213
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Этот скрипт надо вызвать командой ExecuteScript("this_script", oPC) из любого другого. object oPC = GetFirstPC() к примеру.
Neverwinter Script void main()
{ int iTime = 10; /*Количество раундов перед тем как переменная изменится*/ int iTimer = GetLocalInt (OBJECT_SELF, "TIMER"); /*Смотрим сколько раундов уже прошло*/ SetLocalInt (OBJECT_SELF, "TIMER", iTimer+1); /*Прибавляем к таймеру единичку*/ if (iTimer+1 >= iTime) /*Проверяем не прошло ли уже достаточно времени*/ { FloatingTextStringOnCreature("Something happened!", OBJECT_SELF); /*Если условие выполнено то пишем что произошло (сообщаем игроку если надо)*/ SetLocalInt (OBJECT_SELF, "INTEGER", GetLocalInt(OBJECT_SELF, "INTEGER")+1); /*Выставляем нужную переменную, или увеличиваем ее значение на 1 или еще что угодно. Еще полезно тут же написать второе условие при котором останавливать таймер после того как он становится ненужным, с помощью команды "return;"*/ SetLocalInt (OBJECT_SELF, "TIMER", 0); /*обнуляем таймер*/ } DelayCommand(6.0, ExecuteScript("this_script", OBJECT_SELF)); /*Перезапускаем скрипт через 6 секунд. */ } Сообщение отредактировал Lorendroll - Aug 9 2008, 14:58 |
![]()
Сообщение
#214
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек ![]() |
Вот в кои-то веки не обошелся своими силами...
Значит, существует триггер, описанный около блупринта травы, являющегося по факту "Tree". По факту триггер является трапом, процовоцирующим АОЕ спелл. Т.к. с "Tree" спеллы не пускаются, должен создаться другой блупринт, желательно невидимый. Вариантов решения 3: 1) ActionCastSpellAtObject - не подходит, нормальный кастер лвл он имеет только с криче блупринта, а со скриптхидден кричи не запускается. В ином случае кастер лвл = 0. 2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком. 3) TriggerProjectileTrap - не удалось заставить работать. Делал путем задания правельного тэга запускающему блупринту. Опять же работает только с кричи. Разницы между моей версией и скриптом проджектил эрроу трапов из ОС нет практически, но мой скрипт не работает... Именно проджектил эрроу пока не делал... |
![]()
Сообщение
#215
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком. В Nwn2 AOE-объекты можно создавать только скриптом с существа. Иначе AOE-объект запускает скрипты OnEnter и OnExit для всех попавших в него существ и сразу исчезает. Пример. Вот такой скрипт, висящий на каком-нибудь рычаге или триггере, заработает криво (как описано выше). Neverwinter Script void main() А вот так — нормально:{ effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC()); } Neverwinter Script void func()
{ effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC()); } void main() { object oCreature = GetFirstPC(); AssignCommand(oCreature, func()); } |
![]()
Сообщение
#216
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек ![]() |
Тогда это актуально для всех 3 пунктов. То есть то, что я хочу сделать - вообще в принципе нереализуемо... Спасибо.
Можно попробовать сделать это с катсцен инвизибилити... Хотя не стоит, слишком много там будет лишних объектов, лучше другое что-нибудь сделать. С диспеллом, как я понял, нечто похожее. Ну это хотя бы можно без проблем эмулировать... Хотя стоп, я же не делаю ActionCastSpellAtLocation, можно и с игрока... Но скрипт этот для PW, к слову. Тогда еще не все потеряно. Кстати, в случае выше АОЕ эффект будет бегать вместе с игроком, LOL. Neverwinter Script void func(location lTarget) { effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); DelayCommand *проджектил анимация* DelayCommand *ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eEff, GetFirstPC());* - кхм, жгу, xD. } void main() { object oCreature = GetFirstPC(); location lTarget = GetLocation (oCreature); AssignCommand(oCreature, func(lTarget)); } В общем, никак не получится. Блин, туплю... А также не могу редактировать посты... Наверное, их мало... В общем, не нужна тут проджектил анимация и т.д. Вполне реально сделать. |
![]()
Сообщение
#217
|
|
Level 2 ![]() Класс: Рейнджер Характер: True Neutral Раса: Эльф ![]() |
Есть ли способ намертво прицепить одну модельку к другой - например чтоб над плечем игрока летала фигурка демилича (череп)
|
![]()
Сообщение
#218
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
DarkPhoenix, это вполне реально, но практически не относится к скриптингу. Делается через кастомный vfx.
Посмотри вот этот хак и сделай по аналогии: http://nwvault.ign.com/View.php?view=NWN2V...etail&id=37 |
![]()
Сообщение
#219
|
|
Level 2 ![]() Класс: Рейнджер Характер: True Neutral Раса: Эльф ![]() |
Спасибо! А каких нибудь гидов по этому не знаеш?
|
![]()
Сообщение
#220
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Очень интересует вопрос - как вернуть Школу магии, на которой специализируется волшебник? Есть мнение, что оная может храниться в локальных переменных персонажа...
|
![]()
Сообщение
#221
|
|
Отверженный ![]() ![]() ![]() ![]() Класс: Теневой Танцор Характер: Neutral Good Раса: Баатезу ![]() |
да
в файле *.bic (персонажа) есть переменная School типа byte (которая находится в ветке ClassList) значения переменной: Цитата 0: General 1: Abjuration 2: Conjuration 3: Divination 4: Enchantment 5: Evocation 6: Illusion 7: Necromancy 8: Transmutation а вот как попасть в этот файл персонажа через скрипты - это уже не ко мне (IMG:style_emoticons/kolobok_light/wacko.gif) Сообщение отредактировал virus_found - Dec 23 2008, 01:06 |
![]()
Сообщение
#222
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Спасибо!
Вопрос логически продолжается: кто знает - как добыть эту школу из файла персонажа через скрипты? ^_^ |
![]()
Сообщение
#223
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Сингл или шард? Если сингл, то никак, если шард, то можно, но сложно.
|
![]()
Сообщение
#224
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как?
|
![]()
Сообщение
#225
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как? Потому что в сингле доступны только стандартные функции НВН, которыми нельзя получить школу магии. На шардах же возможно использование NWNX с плагином NWNX-Leto, который позволяет редактировать файлы персонажей.
|
![]()
Сообщение
#226
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Эх... ясно, пасиб... Но буду иметь ввиду на всякий случай.
|
![]()
Сообщение
#227
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Народ, не могу разобраться в некоторых вещах.
1) Пытаюсь написать скрипт, что бы один НПС атаковал другова. Neverwinter Script void main() { object oVoin = GetObjectByTag("BOEC1"); object oVoin2 = GetObjectByTag("BOEC2"); AssingCommand(oVoin, ActionAttack(oVoin2)); } Компилятр выдаёт мне: 4000_tboi_os.nss(6): ERROR: UNDEFINED INDENTIFIER 2) В Вики был самоучитель из 4-х уроков. Там был приведён пример скрипта, что-бы НПС пел: Neverwinter Script void main() { ClearAllActions(); ActionSpeakString(39;This is the song that never ends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;Yes it goes on and on, my friends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;Some people started singing it not knowing what it was.39(IMG:style_emoticons/kolobok_light/wink3.gif) ; ActionWait(1.5); ActionSpeakString(39;And now they39;ll keep on singing it forever, just because:39(IMG:style_emoticons/kolobok_light/wink3.gif) ; } Компилятор так-же выдал ошибку: Script2.nss(4): ERROR: UNDEFINED IDENTIFIER Может это правила написания для 1-го NWN? Возможно я чего-то не понял? Если по 1-му вопросу, то я задаю 2 объекта которые определяются по тэгам и отдаю команду (т.е. oVoin c тэгом BOEC1 атакует oVoin2 c тэгом BOEC2). По втрому вообще понять не могу. Может мне нужно именно задать объект? Зарание спасибо! Простите за мультипост, допустил гругую ошибку в предыдущем посте и не могу найти кнопку для редактирования (IMG:style_emoticons/kolobok_light/vava.gif) Neverwinter Script void main() { ClearAllActions(); ActionSpeakString(39;This is the song that never ends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;Yes it goes on and on, my friends.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;Some people started singing it not knowing what it was.39(IMG:style_emoticons/kolobok_light/wink3.gif) ActionWait(1.5); ActionSpeakString(39;And now they keep on singing it forever, just because39(IMG:style_emoticons/kolobok_light/wink3.gif) } Опять... редактор заменил символ " ' " на "' (IMG:style_emoticons/kolobok_light/wink3.gif) " |
![]()
Сообщение
#228
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions());
Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ; Neverwinter Script void main() { ClearAllActions(); ActionSpeakString("This is the song that never ends."); ActionWait(1.5); ActionSpeakString("Yes it goes on and on, my friends."); ActionWait(1.5); ActionSpeakString("Some people started singing it not knowing what it was."); ActionWait(1.5); ActionSpeakString("And now they'll keep on singing it forever, just because..."); } Сообщение отредактировал greye - Jan 3 2009, 15:05 |
![]()
Сообщение
#229
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions()); Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ; По первому компилятор "дал добро". Спасибо!) А по второму, ковычки я ставлю двойные и точку с зяпятой тоже ставлю, но компилятор всё равно в той-же строке ошибку выдаёт (IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#230
|
|
Level 1 Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Второй скрип запахал!)) В ковычках дело было... а в примере одна была (IMG:style_emoticons/kolobok_light/smile.gif)
А второй скрипт без ошибок, но не рабочий... не хотят они друг друга атаковать. |
![]()
Сообщение
#231
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Чувствуется, у админов и у всех остальных летние каникулы. Но все же, вдруг кто зайдет. Не могу написать скрипт одевания брони на ГГ через диалог. Поможите, люди добрые, подскажите, что здесь не так:
Neverwinter Script // Проба. Одеть вещь в слот. void main() { object oPC = GetPCSpeaker(); object oItem = GetObjectByTag("NW_CLOTH018"); AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) ); } И почему у меня эта долбаное действие ActionEquipItem вообще не работает, вплоть до того, что не работает стандартный скрипт ga_equip_slot ? Может быть, кто-то знает, какой командой в этом случае можно заменить ActionEquipItem? |
![]()
Сообщение
#232
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Neverwinter Script object oItem = GetObjectByTag("NW_CLOTH018"); может быть дело в том, что таких объектов много, и берётся объект не в инвентаре героя; тогда лучше использовать функцию: Neverwinter Script object GetItemPossessedBy(object oCreature, string sItemTag) ещё может быть стоит попробовать добавить перед одеванием ActionPauseConversation(), а после ActionResumeConversation()... |
![]()
Сообщение
#233
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Ух. Спасибо, что вообще ответил, но я, к сожалению, ничего не поняла. Я же не скриптер, а полный ламер. Вместо object oItem = GetObjectByTag мне надо написать object GetItemPossessedBy? Так у меня не компилируется, или как там... И непонятно, куда писать тег вещи. (object oCreature, string sItemTag("NW_CLOTH018") )? Тогда что за oCreature?
ActionPauseConversation() - это Neverwinter Script void ActionPauseConversation(); ? Так все равно не компилируется. Я понимаю, для тебя это вопросы из серии "детский сад - штаны на лямках". Вероятно, мне стоит со всем этим перейти в "скрипты для новичков", я в эту тему-то написала потому что стандартный скрипт тоже не работает. Если тебе не очень влом, разжуй мне, пожалуйста, все это в любой теме, в какой тут положено, или просто покажи на этом примере, чтобы я поняла принцип. Может, и еще кому пригодится. |
![]()
Сообщение
#234
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
объясню, но вряд ли кому-то это ещё пригодится, т.к. каждому нужны объяснения для себя отдельно.
Во-первых, странно, что стандартный скрипт не работает, может быть дело не в скрипте, а в опечатке в теге, или перепутывании его с резрефом. oCreature и sItemTag - это параметры функции GetItemPossessedBy, чтобы её запустить, надо вместо них записать что нам надо, в данном случае нам нужен предмет с тегом у игрока, сделовательно oCreature - игрок, sItemTag - тэг Neverwinter Script object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018");
Сообщение отредактировал azathoth - Jul 26 2009, 05:18 |
![]()
Сообщение
#235
|
|
Level 1 Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Вах, сработало! Спасибо огромное, - а то я уже неделю бъюсь!
Но стандартный скрипт ga_equip_slot у меня не работает точно, я ничего не напутала. Поэтому кладу сюда получившийся скриптик имени azathoth для счастья будущих поколений, - вдруг у кого-то еще возникнут такие проблемы. Скрипт одевает броню на ГГ через диалог, и только после того, как через ga_give_item добавляешь эту самую броню в инвентарь ГГ на предыдущей фразе. Neverwinter Script //:: Проба. Одеть броню на ГГ. void main() { object oPC = GetPCSpeaker(); object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018"); AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) ); } azathoth, спасибо. Ты мне просто весь сценарий спас. |
![]() ![]() |
Текстовая версия | Сейчас: 17th July 2025 - 17:00 |