![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#4496
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Я почитал, но конкретно ничего не нашел. С первой вещью я сам разобрался (только почему-то после того как НПС выходят из домов утром дверь, на которой стоит скрипт захлопываться через 10 секунд, так и остается открытой).
Проблема в том, как вернуть тех НПС, которые бродят по городу без точек маршрута. Еще фигня с тем, что когда утром НПС, у которых есть дневные вейпоинты, выходят из домов, они застревают в проходе и потом через три часа выбираются наружу (и то не все). Я, наверное, туплю, но на самом деле не знаю, как это реализовать. Может быть сделать скрипт, типо, если происходить смена для ночью, то НПС должен находиться в определенном месте? Это можно как-то сделать? |
![]()
Сообщение
#4497
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
На вход области (или ХВ объекта) я могу предложить скрипт перемещения для НПС, которые должны менять локацию в зависимости от смены дня и ночи. Я подключаю для этих целей инклюду, и использую копирование НПС, т.к. это более быстрая функция, чем прыжок.
Neverwinter Script // КОПИЯ ОБЪЕКТА void CopyObjectN(object oSource,location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "") {CopyObject(oSource, locLocation, oOwner, sNewTag);} // Перемещаем создание к точкам днем и ночью // object oWPD - Точка день // object oWPN - Точка ночь // object oPS - Существо перемещаемое void pLudey(object oWPD, object oWPN, object oPS); //***** Перемещение день-ночь ***** void pLudey(object oWPD, object oWPN, object oPS) { if (oPS==OBJECT_INVALID||oWPD==OBJECT_INVALID||oWPN==OBJECT_INVALID) return; int T = GetTimeHour(); if(T>=7 && T<21) // день { if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 1) { AssignCommand(oPS, ClearAllActions()); DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPD))); DestroyObject(oPS, 0.3); DelayCommand(5.0, SetLocalInt(OBJECT_SELF,"PEREMESH",1)); } } else if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 2) // ночь { AssignCommand(oPS, ClearAllActions()); DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPN))); DestroyObject(oPS, 0.3); DelayCommand(5.0, SetLocalInt(OBJECT_SELF,"PEREMESH",2)); } } // Перемещение существа к точке маршрута void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; object oPointD = GetObjectByTag("WP_TAG_1"); object oPointM = GetObjectByTag("WP_TAG_2"); object oPoint1 = GetObjectByTag("WP_TAG_3"); pLudey(oPoint1, oPointD, GetObjectByTag("TAG_1")); pLudey(oPoint1, oPointM, GetObjectByTag("TAG_2")); } |
![]()
Сообщение
#4498
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата использую копирование НПС, т.к. это более быстрая функция, чем прыжок. Это как так? (IMG:style_emoticons/kolobok_light/shok.gif) Пересоздание объекта - операция намного более затратная, чем джамп.Я уже не говорю о том, что при копировании существа не копируются эффекты. Сообщение отредактировал Ilerien - Feb 22 2011, 13:42 |
![]()
Сообщение
#4499
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
|
![]()
Сообщение
#4500
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Спасибо большое (IMG:style_emoticons/kolobok_light/rolleyes.gif)
|
![]()
Сообщение
#4501
|
|
Level 3 ![]() Класс: Теневой Танцор Характер: Lawful Neutral Раса: Человек ![]() |
Могет быть, могет быть... Но факт, что джам одновременно пары десятков НПС, при входе в локу, повиснет, а создание копий нет. О_о с чего это вдруг??? Первый раз такое слышу, делал кастом сцену с парадом, толпа гоблов маршировала из локи в локу перемещались рядами по 5 гоблов в колонне и ничего |
![]()
Сообщение
#4502
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
И все-таки у меня все глючит.. Половина телепортируется, а половина - нет. Плюс жестко все глючит. Вот мой скрипт на HeartBeat
Neverwinter Script #include "x0_i0_anims" void main() { object oWP= GetWaypointByTag("NO_" + GetTag(OBJECT_SELF)); object oWPD= GetWaypointByTag("DE_" + GetTag(OBJECT_SELF)); ExecuteScript("nw_c2_default1", OBJECT_SELF); if (GetTimeHour()<=6 && GetLocalInt(OBJECT_SELF,"PeN")!=1) { AssignCommand(OBJECT_SELF, ActionJumpToObject(oWP)); SetLocalInt(OBJECT_SELF,"PeN",1); } if (GetTimeHour()>6 && GetLocalInt(OBJECT_SELF,"PeN")!=2) { AssignCommand(OBJECT_SELF, ActionJumpToObject(oWPD)); SetLocalInt(OBJECT_SELF,"PeN",2); } } И еще один вопрос. Как отключить функцию хождения по вейпоинтам? Сообщение отредактировал StasMokos - Mar 9 2011, 15:46 |
![]()
Сообщение
#4503
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата Половина телепортируется, а половина - нет. Попробуй перед прыжком clearallactions сделать.Цитата Как отключить функцию хождения по вейпоинтам? Самое изящное - не ставить неписю вейпоинты. Если надо динамически регулировать, то придётся копать скрипты аи и искать там функцию ходьбы. Можно добавить, к примеру, в неё какой-нить флаг, при котором она не срабатывает.
|
![]()
Сообщение
#4504
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Попробуй перед прыжком clearallactions сделать Это само-собой. Плюс еще нужно опустить в конец скрипта... И все же я рекомендую копирование НПС... Neverwinter Script ExecuteScript("nw_c2_default1", OBJECT_SELF); Про функцию WalkWayPoints читай здесь: http://www.city-of-masters.ru/forums/index...?showtopic=5123 |
![]()
Сообщение
#4505
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Спасибо, теперь все работает)
Но только для тех, кто не по вейпам ходит.. А есть такой вариант типо отправить НПС куда нибудь и запереть за ним дверь? Просто у меня сначала он ходит по точкам, а потом после разговора с игроком должен удалиться в свою комнату и там и остаться. Может еще какие-нибудь лучше варианты есть? |
![]()
Сообщение
#4506
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Еще одна вещь.. Если не очень сложно, кто-нибудь может объяснить мне как оперировать скриптом для сидения НПС на стуле с проигрыванием анимации (скрипт с заниженным стулом, что выложен на сайте http://remmgen.narod.ru в разделе монстры)?
Во-первых, я не понимаю какую роль там играет этот стул, а во-вторых, мне просто нормально никого не посадить, все съезжают.. Сообщение отредактировал StasMokos - Mar 21 2011, 08:44 |
![]()
Сообщение
#4507
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Цитата после разговора с игроком должен удалиться в свою комнату и там и остаться. Нарисуй триггер в комнате, а на OnEnter проверку на то, вошел ли туда нужный НПС, и команду чтобы запереть дверь. |
![]()
Сообщение
#4508
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Я так делал, но это очень плохо выглядит, когда кто-то изнутри рубит дверь..Впрочем, я уже разобрался, я просто после ухода НПС удалил все его предыдущие точки маршрута.
|
![]()
Сообщение
#4509
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Я понимаю, что я, наверное, до такой степени уже всех задолбал, что мне уже не отвечают, но появился еще один вопрос.. и не знаю, как решить его самостоятельно.
Дело вот в чем, существует триггер, когда на него попадаешь, то заражаешься болезнью (снижаются хар-ки) и совершается анимация. Тестирую.. Если заходишь на него и останавливаешься, все работает как надо, но стоит просто пробежать мимо, так показываются только анимации и больше ничего не происходит. С чем это может быть связано и как это исправить? Буду очень признатален, если кто-нибудь уделит моему вопросу хоть минутку внимания. |
![]()
Сообщение
#4510
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Давай сюда свой скрипт.
|
![]()
Сообщение
#4511
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Neverwinter Script void CheckItem(object oPC, object oItem)
{ itemproperty ipItem = GetFirstItemProperty(oItem); while(GetIsItemPropertyValid(ipItem)) { if(GetItemPropertyType(ipItem) == ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS) { if(GetItemPropertySubType(ipItem) == IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN) AssignCommand(oPC, ActionUnequipItem(oItem)); } ipItem = GetNextItemProperty(oItem); } } void HandleItems(object oTarget) { object oItem; oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); CheckItem(oTarget, oItem); oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTarget); CheckItem(oTarget, oItem); } void AdvanceDisease(object oEnter) { ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_NATURE), oEnter); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES), oEnter); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_NATURE), oEnter); int Wis_Ch = 5; int Int_Ch = 5; ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_WISDOM, Wis_Ch)), oEnter); ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_INTELLIGENCE, Int_Ch)), oEnter); int Str_Ch; int Dex_Ch; int Cha_Ch; int Con_Ch; switch (Random(3)) { case 0: Str_Ch = 0; break; case 1: Str_Ch = 3; break; case 2: Str_Ch = 5; break; } switch (Random(3)) { case 0: Dex_Ch = 0; break; case 1: Dex_Ch = 3; break; case 2: Dex_Ch = 5; break; } switch (Random(3)) { case 0: Cha_Ch = 0; break; case 1: Cha_Ch = 3; break; case 2: Cha_Ch = 5; break; } switch (Random(3)) { case 0: Con_Ch = 0; break; case 1: Con_Ch = 3; break; case 2: Con_Ch = 5; break; } ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_STRENGTH, Str_Ch)), oEnter); ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_DEXTERITY, Dex_Ch)), oEnter); ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_CONSTITUTION, Con_Ch)), oEnter); ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect( EffectAbilityDecrease(ABILITY_CHARISMA, Cha_Ch)), oEnter); SetLocalInt (oEnter, "Wis_Change", Wis_Ch); SetLocalInt (oEnter, "Int_Change", Int_Ch); SetLocalInt (oEnter, "Str_Change", Str_Ch); SetLocalInt (oEnter, "Dex_Change", Dex_Ch); SetLocalInt (oEnter, "Con_Change", Con_Ch); SetLocalInt (oEnter, "Cha_Change", Cha_Ch); } void main() { object oEnter = GetEnteringObject(); if(!GetIsPC(oEnter)) return; int once = GetLocalInt(oEnter, "once"); if(once != 1) { HandleItems(oEnter); DelayCommand(1.0, AdvanceDisease(oEnter)); SetLocalInt(oEnter, "once", 1); } } |
![]()
Сообщение
#4512
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Предполагаю, что дело в том, что не снимается какой-нибудь предмет с иммуном к уменьшению абилок.
Neverwinter Script void HandleItems(object oTarget)
{ object oItem; AssignCommand(oTarget, ClearAllActions(TRUE)); //чистим стек действий oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oTarget); ... |
![]()
Сообщение
#4513
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Нет, все снимается.
|
![]()
Сообщение
#4514
|
|
Level 6 ![]() ![]() Класс: Клерик Характер: Chaotic Neutral Раса: Животное ![]() |
|
![]()
Сообщение
#4515
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Кажется, да, проблема с этим.
Все снимается, но видимо с задержкой и эффекты не успевают сработать. Я еще отсрочил AdvanceDisease и все вроде работает.. Большое спасибо (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]()
Сообщение
#4516
|
|
Level 1 Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
народ, помогите пожалуйста, я начал создавать модуль, а для героя в этом модуле нужна нестандартная профессия! можно ли создавать в nwn новые профессии???
|
![]()
Сообщение
#4517
|
|
Level 3 ![]() Класс: Теневой Танцор Характер: Lawful Neutral Раса: Человек ![]() |
а какие "стандартные " профессии есть в нвн? (IMG:style_emoticons/kolobok_light/wacko.gif)
|
![]()
Сообщение
#4518
|
|
Level 1 Класс: Ученик Дракона Характер: Lawful Good Раса: Человек ![]() |
keks, ну а подумать никак? (IMG:style_emoticons/kolobok_light/rtfm.gif) Воин, варвар, друид, маг, волшебник, плут, и т.д. Это всё стандартные профессии!
|
![]()
Сообщение
#4519
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Классы это, классы.
Делать кастомные можно, но сложно, долго и муторно. |
![]()
Сообщение
#4520
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Я уже задавал этот вопрос, но.. задам еще раз, ибо ответа я не получил.
Добавление портретов в сеповский 2da, по-моему, гиблое дело, все портреты исчезают и все, что бы я не делал. Создаю свой хак, засовываю туда нормальный 2da с сепом и стандартными портретами + одна строчка с новым портретом. Туда же (в хак) засовываю этот самый новый портрет в пяти экземплярах (разного размера). ПОЧЕМУ НИЧЕГО НЕ РАБОТАЕТ? Что я не так делаю? (IMG:style_emoticons/kolobok_light/suicide2.gif) Сообщение отредактировал StasMokos - May 30 2011, 15:11 |
![]() ![]() |
Текстовая версия | Сейчас: 19th August 2025 - 16:50 |