![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3086
|
|
Level 2 ![]() Класс: Клерик Характер: Chaotic Good Раса: Полуэльф ![]() |
Вот такие скритики. Что они делают: существо (полагается, что это будет нежить) спавниться мёртвым, но при приближении игрока воскресает и ясное дело, нападает. Проверено- впечатление потрясающее. Но надо ещё доводить до ума. Мелкие проблемки описаны ниже, но есть один главный вопрос:
может можно сделать так, чтобы необходимость триггера отпала, просто прописать скрипт на самом существе, и не заморачиваться с тонкостями его размещения? (в том виде, в каком он щас есть скрипт df_slfres01, если его ставить на HB самого существа, не сработает) (Кстати, если ставить RaiseCorpse(oTarget,VFX_IMP_RAISE_DEAD,FALSE) то тварь будет вообще неубиваемая оконьчательно. Представьте себе вечного стража, который как нимфа из Леса Невервинтер не может покинуть защищаемую область, но на ней вечно воскрешается? Это такая фишка, может быть полезной.) существо onSpawn=df_slfres02: Neverwinter Script Source #include "x0_i0_corpses" void main() { KillAndReplaceRaiseable(OBJECT_SELF); ExecuteScript("nw_c2_default9", OBJECT_SELF); } триггер onHeartBeat=df_slfres01 или OnEnter=df_slfres01: Neverwinter Script Source #include "x0_i0_corpses" void main() { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); object oTarget=GetNearestObjectByTag("deathknight"); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { RaiseCorpse(oTarget,VFX_IMP_RAISE_DEAD,TRUE); //DestroyObject(OBJECT_SELF, 0.5); }; } если ставить на OnEnter, то проверка на приближение игрока не нужна. если отменить запуск скрипта nw_c2_default9, то когда его наконец убивают, сразу воскрешается, встаёт, а затем медленно исчезает. Если ставить на OnEnter, может возникнуть путаница при ипользовании большого количества существ, но DestroyObject не обязателен. Если ставить на onHeartBeat, трудностей с количеством существ больше 1 не возникнет- просто разместить триггер под конкретным существом. Но возникает другая проблема с DestroyObject: если его нет, то существо каждые 6сек полностью востанавливается, а если есть, то возникает только визуальный эффект воскрешения, а самого воскрешения почему-то не происходит. Цитата(NeoJSmith @ Apr 28 2007, 18:24) [snapback]107615[/snapback] ммм... просвятите меня пожалуйста, каким ра.... образом вы умудрились, не заполнив поле ресреф, создать объект в палитре? откройте свойтва объекта и посмотрите (IMG:style_emoticons/kolobok_light/wink3.gif) оно будет иметь значение (IMG:style_emoticons/kolobok_light/yes3.gif) возможно не то, которое вы предполагали (IMG:style_emoticons/kolobok_light/pardon.gif) Хи-хи-хи. (IMG:style_emoticons/kolobok_light/crazy.gif) тайна сия велика есть и могуча.
Причины изменения: блин, ну сколько раз говорилось, используйте тег NSS для скриптов
|
![]()
Сообщение
#3087
|
|
Level 2 ![]() Класс: Фея Характер: Chaotic Good Раса: Фея ![]() |
KillAndReplaceRaiseable(OBJECT_SELF);
Код функции скорее всего описан в библиотеке x0_i0_corpses и можно посмотреть там ее содержимое. Думаю она не слишком сложная и ее легко переписать для конкретной ситуации. Если надо поднять целую комнату зомби то можно сделать это 1им запуском своего скрипта, а запускать его когда игрок наступит на триггер-войдет в комнату. Если надо поднимать кучу одиночных зомби, то можно, как в onHeartBeat=df_slfres01, повесить на хартбит плейсибла поиск игрока и проверку растояния. Это технически очень просто, ни триггеров, ничего не надо, но хартбит и проверки растояния едят ресурсы сервера и если таких плейсиблов будет десятков 5 то лучше сделать 1ым способом(триггерами), иначе будут тормоза. Цитата проблема с DestroyObject: если его нет, то существо каждые 6сек полностью востанавливается Опять же, посмотри что за RaiseCorpse(oTarget,VFX_IMP_RAISE_DEAD,TRUE); в той же библиотеке, и поправь как тебе надо. Должен удаляться плейсибл, и на его месте создаваться зомби. Когда плейсибл удалится, его хартбит-скрипт перестанет работать. Может там задержка, и спавн зомби происходит когда плейсибла-трупа уже нет, и скрипт не может найти куда ставить зомби? Вот в этой теме как раз сейчас о спавне речь. Сообщение отредактировал diggers - May 4 2007, 21:25 |
![]()
Сообщение
#3088
|
|
Level 2 ![]() Класс: Клерик Характер: Chaotic Good Раса: Полуэльф ![]() |
Вот новый вар моего скрипта, ставиться на спавн, не требует триггера. Но почему-то не работает, не могу разобраться почему.
Идея такая- из спавна запускается функция, симулирующая HB (DelayCommand+return). Код //:://///////////////////////////////////////////// //:: Name //:: FileName df_spwnslfres1 //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* onSpawn= Creates 1-time-self-raiseble dead body that self-res when PC gets near 10f Use this on undeath creatures to surprice player */ //::////////////////////////////////////////////// //:: Created By:Worldowner //:: Created On: //::////////////////////////////////////////////// #include "x0_i0_corpses" object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); int iUndead; void getPCNear() { if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { RaiseCorpse(OBJECT_SELF,VFX_IMP_RAISE_DEAD,TRUE); DelayCommand(2.0, RaiseCorpse(OBJECT_SELF,VFX_IMP_RAISE_DEAD,TRUE)); SetLocalInt(OBJECT_SELF, "iUndead", 1); SetIsDestroyable(TRUE,FALSE,FALSE); } } void DeathHB() { DelayCommand(6.0, getPCNear()); if(GetLocalInt(OBJECT_SELF, "iUndead")!=1) { return; } } void main() { DeathHB(); KillAndReplaceRaiseable(OBJECT_SELF); //SetIsDestroyable(FALSE,TRUE,FALSE); ExecuteScript("nw_c2_default9", OBJECT_SELF); } 2diggers Цитата Должен удаляться плейсибл, и на его месте создаваться зомби. Когда плейсибл удалится, его хартбит-скрипт перестанет работать. Может там задержка, и спавн зомби происходит когда плейсибла-трупа уже нет, и скрипт не может найти куда ставить зомби? Ты не прав. Замена плейсибла на плейсибл происходит в скрипте... ох, забыл как называется, ну он на обжекте "труп зомби" в палитре. А здесь подход совсем иной- кич сначала на спавне становится мёртвым, затем воскрешается. Ну а востальном... Разумные мысли, действительно стоит обдумать. (PS т.е. плейсибла на крич) PPS сорри, перепутал тег. не убивайте меня за это, плз. Лучше обьяните, можно редактировать свои посты? PPPS Кстати, в том топике речь о NWN2, а не о первом NWN |
![]()
Сообщение
#3089
|
|
Level 2 ![]() Класс: Фея Характер: Chaotic Good Раса: Фея ![]() |
А где хартбит сам себя перезапускает?
Neverwinter Script Source #include "x0_i0_corpses" object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); int iUndead; void getPCNear() Оно вообще компилируется? Neverwinter Script Source return; } } return завершает выполнение текущей функции. Зачем там ретурн, если после него и так ничего нет? В нвн2, кроме кеширования крич, ничего нового в спавне вроде нет. |
![]()
Сообщение
#3090
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Цитата(Worldowner @ May 5 2007, 18:14) [snapback]107803[/snapback] Use this on undeath creatures to surprice player Use this on undeaD creatures to surpriSe player А еще скрипты и DelayCommand на мертвых существах не работают. Или ставь делай на модуль или создавай рядом невидимый глазу плейс воскрешающий близлежащее умертвие с нужным тэгом. |
![]() ![]()
Сообщение
#3091
|
|
Level 2 ![]() Класс: Клерик Характер: Chaotic Good Раса: Полуэльф ![]() |
Цитата(diggers @ May 5 2007, 18:05) [snapback]107804[/snapback] А где хартбит сам себя перезапускает? Оно вообще компилируется? return завершает выполнение текущей функции. Зачем там ретурн, если после него и так ничего нет? В нвн2, кроме кеширования крич, ничего нового в спавне вроде нет. Компилируется. Формальных ошиПок нет. Ошибка в логике. Как понял, так и составил, я не мастер, даже не уверен что основы уже усвоил. Но видимо, неправильно понял (ясно, потому как не работает). Разве return не возвращает в начало функции? Идея такая- запустить скрипт, который будет вертеться в памяти независимо от того, жив ли хозяин скрипта, а потому вопрос- возможно ли такое? Версия, воскрешающая через второй обьект приведена выше, но очень хочется чтобы можно было просто прописать скрипт в нужном криче и не заморачиваться с тонкостями размещения. Потому и прошу совета- МОЖ КТО ЗНАЕТ, КАК ЭТО СДЕЛАТЬ? Цитата(azathoth @ May 6 2007, 02:48) [snapback]107809[/snapback] Use this on undeaD creatures to surpriSe player Спасибо. Но это такая мелочь. Лучше дай дельный совет насчёт скрипта. |
![]()
Сообщение
#3092
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Worldowner @ May 6 2007, 18:22) [snapback]107821[/snapback] Разве return не возвращает в начало функции? Нет. Return - выход из текущей функции и возврат (return) управления дальше к тому куску кода, который вызвал эту функцию.
|
![]()
Сообщение
#3093
|
|
Level 2 ![]() Класс: Фея Характер: Chaotic Good Раса: Фея ![]() |
Neverwinter Script Source void dohb(object oCre) { SendMessageToPC(GetFirstPC(),GetName(oCre)); DelayCommand(6.0,dohb(oCre)); } void main() { dohb(OBJECT_SELF); SetIsDestroyable(0,1,1); ExecuteScript("nw_c2_default9",OBJECT_SELF); } Работает и на труп. Перестает работать если крича удалена DestroyObject() или умерла при SetIsDestroyable(1). Вот этого, про делей, я раньше не знал. |
![]()
Сообщение
#3094
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
DelayCommand - это задержка команды которая дается всеравно кому-то. Если того, кто ее должен выполнить неактивен (умер, дестроился) то и команда не выполнится.
|
![]()
Сообщение
#3095
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
Задаю самый глупый вопрос какой только смог придумать, но ответ на который мне нужен: Почему я не могу скриптом давать вещи игроку (CreateItemOnObject("Таг объекта",oPC)(IMG:style_emoticons/kolobok_light/wink3.gif) ? Наружные скобки в скрипт не печатаю.
|
![]()
Сообщение
#3096
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Epsilon @ May 7 2007, 10:27) [snapback]107848[/snapback] CreateItemOnObject("Таг объекта",oPC) надо CreateItemOnObject("Рез Реф Объекта",oPC) |
![]() ![]()
Сообщение
#3097
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
У меня складывается впечатление, что меня игнорируют.
На данный момент мой вопрос изменился, вернее их стало несколько больше, а на старые я нашел ответ 1-Как отсрочить появление окна смерти, при остаточной смерти, и как при этом воскресить игрока, в новой области. 2-Как сделать реакцию фракций на отдельного игрока, в смысле что на одного нападают а другого защищают 3-Как пишеться условие "остаточная смерть" в скрипте Мне не нужны скрипты, а нужен совет каким образом их составлять, ведь я понимаю как их делать, но не знаю всех возможностей Toolset'а По возможности пишите на мыло:undefined PS. в вопросах новичков у меня есть вопросик |
![]()
Сообщение
#3098
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Epsilon @ May 7 2007, 10:37) [snapback]107850[/snapback] 1-Как отсрочить появление окна смерти, при остаточной смерти, и как при этом воскресить игрока, в новой области. скрипт onPlayerDeath в свойствах модуля. Там окошко вызывается. Можно соотв. и вообще его не вызывать. Цитата(Epsilon @ May 7 2007, 10:37) [snapback]107850[/snapback] 2-Как сделать реакцию фракций на отдельного игрока, в смысле что на одного нападают а другого защищают только скриптами, так как все игроки в 1 фракции. Те надо писать свою систему реакции на обнаружение игрока (onPerception + библиотеки аи). Есть флаг определенный есть - атакуют, нет - игнорируют. Цитата(Epsilon @ May 7 2007, 10:37) [snapback]107850[/snapback] 3-Как пишеться условие "остаточная смерть" в скрипте что такое остаточная смерть? Цитата(Epsilon @ May 7 2007, 10:37) [snapback]107850[/snapback] По возможности пишите на мыло:undefined еще раз: на мыло врядли кто будет писать. |
![]()
Сообщение
#3099
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
Остаточная смерть - это когда игрок умер навсегда, когда в окне выскакивает только "Загрузить игру"
С почтой все ясно Насчет фракций. Ведь можно сделать реакцию фракций на предмет в инвентору игрока, или какого либо предмета в н-ной области |
![]()
Сообщение
#3100
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Epsilon @ May 7 2007, 10:55) [snapback]107852[/snapback] Остаточная смерть - это когда игрок умер навсегда, когда в окне выскакивает только "Загрузить игру" в функции которая выдает окошко о смерти (там что-то или про PopUp или еще как-то, не помню уже) есть параметр, который отвечает за то, есть ли кнопка RESPAWN в этом окошке или нет. Ставь его FALSE. Цитата(Epsilon @ May 7 2007, 10:55) [snapback]107852[/snapback] Насчет фракций. Ведь можно сделать реакцию фракций на предмет в инвентору игрока, или какого либо предмета в н-ной области можно. концептуально это тоже самое что я выше тебе написал. Те нельзя просто настроить фракции и все само заработает (так можно только для варианта, когда реакция на всех игроков должна быть одинаковая). Нужно скриптить. А вот что проверять и как это уже от ситуации и задачи зависит. |
![]()
Сообщение
#3101
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
Пожалусто подскажите как сделать так что бы мобы респились не при входе на модуль а привходе на локацию, ну и при выходе снее пропадали ??
принимаеться ответ в любой форме так же очень тяжело тоже считаеться ответом ) |
![]()
Сообщение
#3102
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
э.. система респауна тут буквально на днях обсуждалась. Найди посты Ванеса. (а вообще энкаунтеры + немного скриптов на них + скрипт-чистильщик на выходе из локации это первое, что в голову лезет)
|
![]()
Сообщение
#3103
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
В Hordes of UnderDark в конце второй главы на спинах капитанов есть флаги. Как их поставить и какие есть текстуры?
PS. я вам ещё не надоел? |
![]()
Сообщение
#3104
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Epsilon @ May 8 2007, 14:39) [snapback]107943[/snapback] В Hordes of UnderDark в конце второй главы на спинах капитанов есть флаги. Как их поставить и какие есть текстуры? визуальный эффект такой есть. посмотри фильтр по константам на слово FLAG. Там их всего 4. |
![]() ![]()
Сообщение
#3105
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
В чём ошибка моего скрипта? 00_00_00 - тег двери
Neverwinter Script Source void main()
{ if (GetListenPatternNumber() == 1 && GetIsListening(OBJECT_SELF)) { SpeakString("Проходи, только дверь за собой закрой"); ActionOpenDoor("00_00_00" oDoor); } } |
![]()
Сообщение
#3106
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
Посмотрел, их действительно четыре, но они носят текстуры флагов и стягов из размещений. Можно ли на них помещать текстуры остальных четырех флагов, и если можно то как?
|
![]()
Сообщение
#3107
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Добавь описание двери как я покажу и открой так же как я написал.
Neverwinter Script Source object oDoor = GetNearestObjectByTag("00_00_00"); // вот так откроется она AssignCommand(oDoor, ActionOpenDoor(oDoor)); |
![]()
Сообщение
#3108
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Цитата(Epsilon @ May 8 2007, 14:39) [snapback]107943[/snapback] В Hordes of UnderDark в конце второй главы на спинах капитанов есть флаги. Как их поставить и какие есть текстуры? Neverwinter Script Source //::////////////////////////////////////////////////// //:: Created By: Gennady //:: Created On: 2/02/2006 Флаг фиолетовый //::////////////////////////////////////////////////// void main() { effect eFLAG = EffectVisualEffect(VFX_DUR_FLAG_GOLD); effect eEffect = GetFirstEffect(OBJECT_SELF); if (GetEffectType(eEffect) != EFFECT_TYPE_VISUALEFFECT) ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eFLAG), OBJECT_SELF); // Запустим стандартный ХБ ExecuteScript("nw_c2_default1", OBJECT_SELF); } |
![]()
Сообщение
#3109
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
Gennady, я умею ставить этот эффект, вписывать его в скрипты. Так что повторяю тот вопрос который я задал позже: можно ли менять их текстуры? Есть четыре основных флаго и ещё два подобных, а мне нужны 8 флагов с текстурами плейсеблов стягов или флагов.
|
![]()
Сообщение
#3110
|
|
Level 4 ![]() ![]() Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
Выходит запертая намертво дверь откроется, но не отопрётся, а на открытой тоже замок будет и её нельзя будет закрыть?
|
![]() ![]() |
Текстовая версия | Сейчас: 28th July 2025 - 07:49 |