![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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 |
![]()
Сообщение
#4521
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Создаю модуль и не могу понять простую вещь... Каким образом задать команду так, что бы во первых: Персонаж нападал на игрока после определённой реплики в диалоге. Во вторых: после того как он напал все неписи находящиеся в одной комнате с игроком и агрессором нападали на игрока так же.
|
![]()
Сообщение
#4522
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Для того, чтобы NPC атаковал игрока после фразы в диалоге, надо воспользоваться "шляпой" (визардом) во вкладке Action Taken: он самостоятельно создаст скрипт
Neverwinter Script //:://///////////////////////////////////////////// //:: FileName at_001 //::////////////////////////////////////////////// //::////////////////////////////////////////////// //:: Created By: Script Wizard //:: Created On: 15.01.2011 0:32:16 //::////////////////////////////////////////////// #include "nw_i0_generic" void main() { // Set the faction to hate the player, then attack the player AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100); DetermineCombatRound(GetPCSpeaker()); } Для того, чтобы все npc в комнате(или где-либо еще, насколько я понимаю, расстояние роли не играет) атаковали игрока после некой фразы в диалоге, надо поставить этим npc уникальные тэги (в моем примере это будут "NPC1", "NPC2" и "NPC3", а так же NPC, с которым ведется диалог, тэг которого не понадобится) и поставить на вкладку action taken скрипт вроде Neverwinter Script #include "nw_i0_generic" void main() { AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100); //заставляем NPC, на котором стоит диалог(OBJECT_SELF), возненавидеть говорящего игрока (GetPCSpeaker) AdjustReputation(GetPCSpeaker(), GetObjectByTag("NPC1"), -100); //заставляем NPC с тэгом "NPC1" (GetObjectByTag("NPC1")) возненавидеть игрока AdjustReputation(GetPCSpeaker(), GetObjectByTag("NPC1"), -100); //заставляем NPC с тэгом "NPC2" (GetObjectByTag("NPC2")) возненавидеть игрока AdjustReputation(GetPCSpeaker(), GetObjectByTag("NPC1"), -100); //заставляем NPC с тэгом "NPC3" (GetObjectByTag("NPC3")) возненавидеть игрока DetermineCombatRound(GetPCSpeaker()); } если нужно, могу выложить мини-модуль, в котором реализован второй скрипт (1.69+SoU+HoU) Сообщение отредактировал wirTUS - May 31 2011, 23:59 |
![]()
Сообщение
#4523
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Чувствую я так никогда и не дождусь ответа на мой вопрос по 2da-шникам...
Ну ладно, еще другой вопрос созрел. Не подскажете, почему хэнчман не парализуется такой строчкой? AssignCommand(oDeek, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_ TEMPORARY, EffectCutsceneParalyze(), oDeek, 30.0)))); |
![]()
Сообщение
#4524
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Чувствую я так никогда и не дождусь ответа на мой вопрос по 2da-шникам... Там косяк где угодно может быть, начиная от кривой строки в 2да и заканчивая наличием такой же 2да в более приоритетном хаке.Цитата Не подскажете, почему хэнчман не парализуется такой строчкой? Косяк где-то в другом месте, эта строчка должна работать.
|
![]()
Сообщение
#4525
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Самым первым хаком я ставлю свой, значит мой 2da будет перекрывать остальные, правильно?
Вот чем заканчивается мой 2da. ("-" обозначаю пустые клетки) 2998 - - - - - cep_reserv 2999 bill_ 1 0 - 0 - Вот фрагмент моего скрипта. Neverwinter Script AssignCommand(oPC, ClearAllActions());
AssignCommand(oDeek, ClearAllActions()); if (oPC==GetMaster(oDeek)) { DelayCommand(1.0, ActionDoCommand(AssignCommand(oDeek, ActionJumpToObject(oWPoHench)))); DelayCommand(1.5, AssignCommand(oDeek, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_ TEMPORARY, EffectCutsceneParalyze(), oDeek, 15.0)))); } DelayCommand(3.31, ActionDoCommand(AssignCommand(oPC, ActionJumpToObject(oWPoPC)))); Сообщение отредактировал StasMokos - Jun 6 2011, 15:15 |
![]()
Сообщение
#4526
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Ок, как файлы портретов называются?
Поля в 2да пустыми быть не должны ни при каких условиях - дефолтным значением является ****. Думаю, заработает, если убрать нафиг все экшены. Использование Action*() оправдано ровно в 2 случаях: 1) когда хочется (обычно в катсцене - когда мы точно знаем, что никто не помешает) игрока или непися заставить выполнить строго определенную последовательность действий, время выполнения которых заранее не известно; 2) когда нужный функционал в принципе без экшена не доступен, например, ActionCastSpellAt*(). В остальных случаях лучше управляться функцией DelayCommand(). У тебя здесь всем занимаются задержки, и экшены не нужны. Кстати, парализованный непись не сможет прыгнуть на вейпоинт. Сообщение отредактировал Ilerien - Jun 6 2011, 15:39 |
![]()
Сообщение
#4527
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
po_bill_h, po_bill_l, po_bill_m, po_bill_s, po_bill_t
Ну, это я и имею в виду, просто в 2da-редакторе, в котором я все делаю, они показываются как пустые. Поменял везде на вот такую строку DelayCommand(1.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oDeek, 15.0)); Ничего не изменилось... У меня, кстати, и есть подготовка к катсцене, сначала эта парализация стояла на цикле while, но потом я решил переставить. Вообще, идея в том, что для катсцены герой телепортируется в другую область (после разговора), а хэнчи либо остаются и не телепортируются, либо телепортируются в свою точку. Но в любом случае у меня хэнч оказывается в точке, где должен быть герой. Цитата Кстати, парализованный непись не сможет прыгнуть на вейпоинт. Это я понимаю. |
![]()
Сообщение
#4528
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
С портретами все правильно, должен отображаться в женских дворфских.
Цитата Ничего не изменилось... На неписе флаг plot или immortal, случайно, не стоит?
|
![]()
Сообщение
#4529
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Что-то я сглючил и редактировал не тот 2da-шник. Но проблема все равно не решилась.. Что делать с теми строками, на которых есть пометка USER?
Их заменять или делать следующими строками? (Если честно, попробовал сделать и так и так, но ничего не вышло.) Еще вопрос, есть ли лимит строчек, если есть, то какой? Вроде бы нет.. Я нашел только отмену этого флага в одном месте. |
![]()
Сообщение
#4530
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Что-то я сглючил и редактировал не тот 2da-шник. Но проблема все равно не решилась.. Что делать с теми строками, на которых есть пометка USER? По логике заменять, эти строки в СЕРе оставлены для юзерского контента.Цитата Еще вопрос, есть ли лимит строчек, если есть, то какой? Вероятно, есть, но очень большой - предполагаю, что как минимум 32к.Цитата Вроде бы нет.. Я нашел только отмену этого флага в одном месте. В общем, закомментировать все остальные строки кода и оставить только эффект. Если и тогда не наложится, проблема в неписе, если наложится - в остальном коде.
|
![]()
Сообщение
#4531
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Почему тогда, когда я хоть что-то в них меняю, исчезают вообще все портреты из модуля?
Просто так эффект работает. Может проблема в том, что на той области на OnEnter стоит катсцена? Хотя как это может повлиять.. Короче, вот скрипт. Neverwinter Script void main()
{ object oPC = GetPCSpeaker(); object oSelf = OBJECT_SELF; object oDeek = GetObjectByTag("deeken"); object oWPoPC = GetWaypointByTag("SAMOUB_PC"); object oWPoDestZuits = GetWaypointByTag("SAMOUB_DESTR_ZUITS"); object oWPoHench = GetNearestObjectByTag("SAMOUB_HENCH"); location lLoc1= GetLocation(OBJECT_SELF); SetLocalLocation(oPC, "Return_SAMOUB_ZUITZ", GetLocation(oPC)); AssignCommand(oPC, ClearAllActions()); AssignCommand(oSelf, ClearAllActions()); AssignCommand(oDeek, ClearAllActions()); DelayCommand(0.3, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HARM, FALSE), lLoc1, 0.5)); DelayCommand(0.31, AssignCommand(oSelf, ActionJumpToObject(oWPoDestZuits))); if (oPC==GetMaster(oDeek)) { //DelayCommand(1.0, ActionDoCommand(AssignCommand(oDeek, ActionJumpToObject(oWPoHench)))); DelayCommand(1.8, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oDeek, 15.0)); } DelayCommand(3.31, AssignCommand(oPC, ActionJumpToObject(oWPoPC))); } |
![]()
Сообщение
#4532
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Почему тогда, когда я хоть что-то в них меняю, исчезают вообще все портреты из модуля? Может, редактор капризничает? Проще всего 2да с малым числом столбцов текстовым редактором вроде вордпада править.Кем скрипт выполняется? Neverwinter Script oPC==GetMaster(oDeek) точно возвращает истину?
|
![]()
Сообщение
#4533
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Вот строчки из WordPad
3499 **** **** **** **** **** cep_reserv **** 3500 bill_ 1 0 **** 0 USER **** 3501 **** **** **** **** **** USER Скрипт стоит в разговоре на реплике NPC, который обозначен в моем скрипте как oSelf. Да, я проверял. Еще вопрос возник. Можно ли сделать так, чтобы скрипт все время выполнялся, т.е. проверка все время проходила, в каждую долю секунды? Сообщение отредактировал StasMokos - Jun 7 2011, 10:47 |
![]()
Сообщение
#4534
|
|
Level 3 ![]() Класс: Теневой Танцор Характер: Lawful Neutral Раса: Человек ![]() |
можно через кастомный void с делеем сам на себя, ток зачем каждую долю секунды-то?
насчет портретов, а чем тебе вариант просто запихать в папку портретов не нравится???? |
![]()
Сообщение
#4535
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Цитата можно через кастомный void с делеем сам на себя, ток зачем каждую долю секунды-то? Мне нужно, чтобы если рядом с игроком проходил НПС, то игрок телепортировался. Таким образом проверку же все время нужно делать? Цитата насчет портретов, а чем тебе вариант просто запихать в папку портретов не нравится???? Это способ, в котором портреты могут использоваться только как портреты уже в игре самим игроком? |
![]() ![]() |
Текстовая версия | Сейчас: 19th August 2025 - 03:57 |