![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#5021
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
CODE else if(nSpellID == SPELL_SUMMON_CREATURE_III) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; sSummon = "z_s3"; //NW_S_WOLFDIRE if(nCasterLevel >= 25) { sSummon = "z_s13"; } if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION )) //WITH grCONJ +4 to str q { object oTarget = OBJECT_SELF; //OBJECT_SELF // Create the effect to apply effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); // Create the visual portion of the effect. This is instantly // applied and not persistant with wether or not we have the // above effect. effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE); // Apply the visual effect to the target ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); // Apply the effect to the object ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget); } } В данный момент скирпт накидывает силу персу. существует ли константа для призванного монстра, чтобы вставить вместо OBJECT_SELF? Еще заметил, что фокусировка и эпик фокусировка на оружии существо, а так же бонус к атаке и бонус усиления когтя существа не меняет отображаемый бонус атаки в окне призванного существа и судя по всему не действует. Можно ли это исправить? Как вариант решения нашел, можно добавить существу оружие с бонусом атаки\усиления. Сообщение отредактировал zmeylsdn - Jan 10 2019, 19:06 |
![]()
Сообщение
#5022
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Уже после вступления в силу эффекта саммона его объект можно получить через GetAssociate.
Про атаку не знаю, но рекомендую смотреть подобные вещи не в чарнике, а в логе боя. Чарник в нвн не всегда соответствует действительности. |
![]()
Сообщение
#5023
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Можно сделать в 2 разных подхода:
1. В скрипте, где вызываешь саммона после ApplyEffect с эффектом вызова саммона, получаешь саммона через object GetAssociate() и накладываешь на него эффекты через кастомную функцию, или просто. (как описал denis0k) 2. В скрипте спавна саммона ищешь мастера object GetMaster(), делаешь проверки и накладываешь эффекты на саммона уже как на OBJECT_SELF. Оба варианта должны работать |
![]()
Сообщение
#5024
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Может кто в коде показать, как взять ассоциацию на сумона и применить к нему эффект увеличения силы или в скрипте onSpawn сделать то же самое (этот вариант предпочтительнее)? Или может есть какой модуль, где это можно подсмотреть и сделать по аналогии. Чутка погуглил, но так и не понял сам механизм, взял я object GetAssociate() или object GetMaster()
CODE object GetMaster (object oAssociate=OBJECT_SELF) object oAssociate int GetAssociateType (object oAssociate) object oAssociate и дальше что? к чему применять CODE object oTarget = OBJECT_SELF; effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); ? И вопрос, чем извлечь 2да файлы из 2da.bif и после редактирования запаковать обратно? Пробовал разные проги из раздела НВнтул здесь, но там вроде ток просмотр. Или может это делается по другому, чтобы в игре был измененный базовый урон оружия из baseitems.2da например. Сообщение отредактировал zmeylsdn - Jan 17 2019, 17:38 |
![]()
Сообщение
#5025
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
В конце скрипта вызова:
CODE object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); ApplyEffectToObject(DURATION_TYPE_*, effect, oSummon); 2da из бифов можно извлечь NWN Explorer, или вроде в папке с игрой есть 2da.zip. Запаковывать обратно не надо, нужно либо положить в override, либо создать hak и подключить к модулю. |
![]()
Сообщение
#5026
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-1- В скрипте nw_s0_summon первый вариант с OBJECT_SELF работает на перса, второй вариант с object oSummon не работает никак, в т.ч. и без DelayCommand(3.0). Использую одновременно только один из вариантов, тут объединил для наглядности.
CODE else if(nSpellID == SPELL_SUMMON_CREATURE_III) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; sSummon = "NW_S_WOLFDIRE"; if(nCasterLevel >= 25) { sSummon = "z_s13qq"; } if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION )) { object oTarget = OBJECT_SELF; effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget); object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oSummon)); } } -2- В скрипте самона на onSpawn добавил это внутри void main(), никакого эффекта CODE object oMaster = GetMaster(); if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION , oMaster)) { object oTarget = OBJECT_SELF; effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget); } -3-Пытаюсь изменить ДЦ всех спеллов на эпик лвлах. Ищу в формуле спела GetSpellSaveDC() и меняю на nSpellDC. Докидываю код: CODE int nSpellDC; int nCasterLevel = GetCasterLevel(OBJECT_SELF); if(nCasterLevel <= 20) { nSpellDC = GetSpellSaveDC(); } if((nCasterLevel >= 21) && (nCasterLevel <= 21)) { nSpellDC = GetSpellSaveDC() + 10; } if(nCasterLevel >= 22) { nSpellDC = GetSpellSaveDC() + 20; } и все работает (проверено на NW_S0_WailBansh). Вопрос - возможно ли одним кодом охватить все спеллы? Каждый спелл зависит от #include "X0_I0_SPELLS" #include "x2_inc_spellhook" так что видимо этот код нужно добавлять в один из этих скриптов. Но как этим одним кодом заменить GetSpellSaveDC() каждого спела на nSpellDC? Или может есть другой путь. Сообщение отредактировал zmeylsdn - Jan 19 2019, 19:18 |
![]()
Сообщение
#5027
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Саммон уже вызван на момент применения эффекта? Я вижу вверху строчку с рефом, такое чувство, что эффект вызова саммона ещё не применён.
Все скрипты придётся менять вручную. Даже если поправить инклуд, всё равно все скрипты надо будет перекомпилировать, а этого не сделать, если предварительно не изменить хоть как-то (создать модульную версию). Сообщение отредактировал denis0k - Jan 19 2019, 08:09 |
![]()
Сообщение
#5028
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-1-Да самон вызван, добавил полный код. Плюс задержка в виде delay command (3.0).
-3-Возникли трудности с добавлением кода в x2_inc_spellhook. Если использую void nSpellDC() или int nSpellDC(), тогда пишет ERROR: NO LEFT BRACKET ON ARG LIST напротив строк "nSpellDC =". Через void main() сохраняет, но т.к. это есть и в каждом спеле, потом проблемы с ДЦ спелла на 21 и 22 лвле (0 или 1). Если вообще без первой строки и скобочек {} (c добавлением int nSpellDC;) пишет INVALID DECLARATION TYPE напротив строки "if" . Neverwinter Script void nSpellDC(){ // проблема в этой строке видимо int nCasterLevel = GetCasterLevel(OBJECT_SELF); if(nCasterLevel <= 20) { nSpellDC = GetSpellSaveDC(); } if((nCasterLevel >= 21) && (nCasterLevel <= 21)) { nSpellDC = GetSpellSaveDC() + 10; } if(nCasterLevel >= 22) { nSpellDC = GetSpellSaveDC() + 20; } } -4-Добавление класса сложности к спеллам избранной школы волшебника-специалиста и увеличение уровней кастера для престиж-классов с чего начинать искать? Сообщение отредактировал zmeylsdn - Jan 23 2019, 21:09 |
![]()
Сообщение
#5029
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата Да самон вызван, добавил полный код. Не вижу (IMG:style_emoticons/kolobok_light/smile.gif) sSummon = "z_s13qq"; есть, а вот его создания - не вижу.А вот с nSpellDC полная каша. Функция должна вернуть значение, значит, она должна быть int, а не void. Также скорее всего триггерит на одинаковое имя функции и переменной. В базе должно быть что-то типа: CODE int GetSpellDC() { бла бла бла spellDC = ххх; бла бла бла return spellDC; } Советую полистать книжки по программированию, самые простые (IMG:style_emoticons/kolobok_light/smile.gif) Цитата Добавление класса сложности к спеллам избранной школы волшебника-специалиста и увеличение уровней кастера для престиж-классов с чего начинать искать? Не понял вопроса. Можно узнать этот уровень кастера и просто прибавить ДЦ. Не знаю, можно ли узнать специализацию, давно этим занимался, всё по памяти.
|
![]()
Сообщение
#5030
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-1- да в конце скрипта были строки
Neverwinter Script effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect); return eSummonedMonster; я закинул между ними, в конце, в первой части скрипта (там было ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration))(IMG:style_emoticons/kolobok_light/wink3.gif) но ничего не произошло. Neverwinter Script effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect); if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION)) { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oSummon); } return eSummonedMonster; -3-Сделал такой код в спелхук и в спеллах поменял "GetSpellSaveDC()" на "nDC()" - работает. Neverwinter Script int nDC() { int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nSpellDC; if(nCasterLevel <= 20) { nSpellDC = GetSpellSaveDC(); } if((nCasterLevel >= 21) && (nCasterLevel <= 21)) { nSpellDC = GetSpellSaveDC() + 10; } if(nCasterLevel >= 22) { nSpellDC = GetSpellSaveDC() + 20; } return nSpellDC; } -4-Сделал такой код для учета уровней ПМа в кастер лвл. Но для его работы придется во всех спелах изменить "nCasterLevel" на "nCasterLevel()" в т.ч. и в предыдущем скрипте. Neverwinter Script int nCasterLevel() {
int nCL = GetCasterLevel(OBJECT_SELF); int nEpicMod = GetLevelByClass(CLASS_TYPE_PALEMASTER,OBJECT_SELF); if (nEpicMod>0) { nCL += (nEpicMod/2);//missstorm1\2 } return nCL; } Сообщение отредактировал zmeylsdn - Jan 24 2019, 17:41 |
![]()
Сообщение
#5031
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Можно всё-таки полный скрипт саммона, а не куски? От начала до конца.
|
![]()
Сообщение
#5032
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Приветствую всех!
Обращаюсь к вам за помощью со следующей проблемой: не работает функция FadeFromBlack (ну или мы что-то неправильно делаем). Всегда с ней отлично работалось, а тут... Суть вот в чем: ГГ разговаривает с объектом и спутником, в конце диалога они телепортируются на другие точки. Во время телепортации как раз таки нужен черный занавес. Прикрепляю код. Скрипт стоит на разговоре с объектом. Надеюсь на ваш совет! Neverwinter Script void main()
{ object oPC = GetFirstPC(); object oSarg = GetObjectByTag ("sargu_olu"); int iECHO = GetLocalInt (oPC, "snov_echo_n"); //всякое не относящееся к сути вопроса int iECHOn = iECHO + 1; SetLocalInt (oPC, "snov_echo_n", iECHOn); DelayCommand (1.0, DestroyObject (OBJECT_SELF)); GiveXPToCreature(oPC, 15); AddJournalQuestEntry ("DN_snov_echo", iECHOn+1, oPC); CreateObject(OBJECT_TYPE_PLACEABLE, "sno_echo", GetLocation(GetObjectByTag ("snov_krup"))); //удаление спутника, чтобы прыгнуть на разные точки с ГГ RemoveHenchman(oPC, oSarg); //телепортация DelayCommand (1.0, AssignCommand(oPC, JumpToObject(GetObjectByTag("WP_sno_spawn1")))); DelayCommand (1.0, AssignCommand(oSarg, JumpToObject(GetObjectByTag("WP_sno_spawn2")))); SetLocalInt(oPC, "di_sargu_1", 2); //экран AssignCommand(oPC, FadeToBlack(oPC, FADE_SPEED_FAST)); DelayCommand (2.0, ClearAllActions()); DelayCommand (4.0, FadeFromBlack(oPC, FADE_SPEED_FAST)); } |
![]()
Сообщение
#5033
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Просто догадка. В катсценах фейдят как действие, мб объект надо разрушать не через секунду, а через пять, чтобы он последнюю строку успел сделать? (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#5034
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
сделайте так
Neverwinter Script //экран AssignCommand(oPC, FadeToBlack(oPC, FADE_SPEED_FAST)); AssignCommand(oPC, DelayCommand (4.0, FadeFromBlack(oPC, FADE_SPEED_FAST))); как и сказал dens0k вы разрушаете объект и DelayCommand не срабатывает из-за этого, так как она не привязана к герою, а висит на хенче. Поэтому лучше вешать или на модуль или на PC |
![]()
Сообщение
#5035
|
|
Level 3 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Спасибо большое, все получилось!
И заодно стала понятнее логика при работе с DelayCommand (IMG:style_emoticons/kolobok_light/good.gif) |
![]()
Сообщение
#5036
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-1- Задумал я бонус к ДЦ спелла брать из мейн стата кастера:
Neverwinter Script int nDC() { // replace GetSpellSaveDC() to nDC() in all spells with DC . int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nSpellDC; if(nCasterLevel <= 39) { nSpellDC = GetSpellSaveDC() + (GetCasterAbMod())/2; } if(nCasterLevel >= 40) { nSpellDC = GetSpellSaveDC() + GetCasterAbMod(); } return nSpellDC; } В x0_i0_spells есть подобное, но там проверка только для виза и сорка что меня смутило: Neverwinter Script /* Returns the modifier from the ability score that matters for this caster */ int GetCasterAbilityModifier(object oCaster) { int nClass = GetLevelByClass(CLASS_TYPE_WIZARD, oCaster); int nAbility; if (nClass > 0) { nAbility = ABILITY_INTELLIGENCE; } else nAbility = ABILITY_CHARISMA; return GetAbilityModifier(nAbility, oCaster); } Я решил написать проверку для всех кастеров: Neverwinter Script int GetCasterAbMod(object oCaster) { int nAbility; int nClass = GetLastSpellCastClass(); if (nClass = CLASS_TYPE_WIZARD) { nAbility = ABILITY_INTELLIGENCE; } if (nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_DRUID || nClass == CLASS_TYPE_RANGER || nClass == CLASS_TYPE_PALADIN) { nAbility = ABILITY_WISDOM; } if (nClass == CLASS_TYPE_SORCERER || nClass == CLASS_TYPE_BARD) { nAbility = ABILITY_CHARISMA; } return GetAbilityModifier(nAbility, oCaster); } int nDC() { // replace GetSpellSaveDC() to nDC() in all spells with DC . int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nDiff = GetCasterAbMod(OBJECT_SELF); int nSpellDC; if(nCasterLevel <= 39) { nSpellDC = GetSpellSaveDC() + nDiff/2; } if(nCasterLevel >= 40) { nSpellDC = GetSpellSaveDC() + nDiff; } return nSpellDC; } Компилится но работает странно, не сходятся цифры и разный эффект для цепной молнии и крика баньши. Думаю проблема в функции "GetLastSpellCastClass()", но GetLevelByClass и GetClassByPosition единственное что нашел по этому поводу и выглядит неподходяще. -2- Полный скрипт самона Neverwinter Script //:://///////////////////////////////////////////// //:: Summon Creature Series //:: NW_S0_Summon //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Carries out the summoning of the appropriate creature for the Summon Monster Series of spells 1 to 9 */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 8, 2002 //::////////////////////////////////////////////// effect SetSummonEffect(int nSpellID); #include "x2_inc_spellhook" void main() { /* Spellcast Hook Code Added 2003-06-23 by GeorgZ If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook //Declare major variables int nSpellID = GetSpellId(); int nDuration = GetCasterLevel(OBJECT_SELF); nDuration = 24; if(nDuration == 1) { nDuration = 2; } effect eSummon = SetSummonEffect(nSpellID); //Make metamagic check for extend int nMetaMagic = GetMetaMagicFeat(); if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } //Apply the VFX impact and summon effect ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration)); //добавленные строки if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION)) { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 12); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oSummon); } } effect SetSummonEffect(int nSpellID) { int nFNF_Effect; int nRoll = d3(); int nCasterLevel = GetCasterLevel(OBJECT_SELF); //21+ caster lvl +20lvls to each mob string sSummon; if(nSpellID == SPELL_SUMMON_CREATURE_I) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; sSummon = "NW_S_badgerdire"; //NW_S_badgerdire if(nCasterLevel >= 21) { sSummon = "z_s11"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_II) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; sSummon = "z_s2"; //NW_S_BOARDIRE if(nCasterLevel >= 23) { sSummon = "z_s12"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_III) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; sSummon = "z_s3"; //NW_S_WOLFDIRE if(nCasterLevel >= 25) { sSummon = "z_s13"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_IV) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; sSummon = "z_s4"; //NW_S_SPIDDIRE if(nCasterLevel >= 27) { sSummon = "z_s14"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_V) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; sSummon = "z_s5"; //NW_S_beardire if(nCasterLevel >= 29) { sSummon = "z_s15"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_VI) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; sSummon = "z_s6"; //NW_S_diretiger if(nCasterLevel >= 31) { sSummon = "z_s16"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_VII) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; switch (nRoll) { case 1: sSummon = "NW_S_AIRHUGE"; //NW_S_AIRHUGE break; case 2: sSummon = "NW_S_WATERHUGE"; //NW_S_WATERHUGE break; case 3: sSummon = "NW_S_FIREHUGE"; //W_S_FIREHUGE break; } if(nCasterLevel >= 33) { sSummon = "z_s17"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; switch (nRoll) { case 1: sSummon = "NW_S_AIRGREAT"; //NW_S_AIRGREAT break; case 2: sSummon = "NW_S_WATERGREAT"; //NW_S_WATERGREAT break; case 3: sSummon = "NW_S_FIREGREAT"; //NW_S_FIREGREAT break; } if(nCasterLevel >= 35) { sSummon = "z_s18"; } } else if(nSpellID == SPELL_SUMMON_CREATURE_IX) { nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; switch (nRoll) { case 1: sSummon = "NW_S_AIRELDER"; //NW_S_AIRELDER break; case 2: sSummon = "NW_S_WATERELDER"; //NW_S_WATERELDER break; case 3: sSummon = "NW_S_FIREELDER"; //NW_S_FIREELDER break; } if(nCasterLevel >= 37) { sSummon = "z_s19"; } } //effect eVis = EffectVisualEffect(nFNF_Effect); //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect); return eSummonedMonster; } П.С. Мне кажется через OnSpawn реалиация была бы более экономичной, так что вопрос остается открытым, что же здесь не так: Neverwinter Script object oMaster = GetMaster(); //в OnSpawn
if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION, oMaster)) { object oTarget = OBJECT_SELF; effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 4); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget); } Сообщение отредактировал zmeylsdn - Feb 3 2019, 10:11 |
![]()
Сообщение
#5037
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Neverwinter Script if (nClass = CLASS_TYPE_WIZARD) Это баг, условие всегда возвращает 1, т.к. одно "=" (IMG:style_emoticons/kolobok_light/smile.gif) Цитата Компилится но работает странно, не сходятся цифры и разный эффект для цепной молнии и крика баньши. Думаю проблема в функции "GetLastSpellCastClass()", но GetLevelByClass и GetClassByPosition единственное что нашел по этому поводу и выглядит неподходяще. Ну не зная всех условий и имея гадалку в отпуске, помочь вряд ли чем-то можно (IMG:style_emoticons/kolobok_light/smile.gif) По саммону непонятно. Я в таких случаях начинаю усиленно дебажить - ставлю по коду кучу sendmessage с выводом в лог значений переменных и проходов по условиям/циклам. |
![]()
Сообщение
#5038
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-1- По бонусу к ДЦ спела от основной кастерской характеристики.
Добавил "=", теперь определяет мейн стат верно, проверено на сорке и визе. Условия: оба (сорк и виз) имеют базу мейнстата 18, все апы в мейнстат, итого на 40м 50 мейнстата = +20 модификатор. Взяты ЭпикФокусы на Разрушении и некромантии. Согласно добавленному коду, до 39го уровня включительно к ДЦ спелла должен добавлятся 150% мейнстата: 100% согласно оригиналу и 50% от кода (+ (GetCasterAbMod())/2). С 40го - 200% мейнстата: 100% согласно оригиналу и 100% от кода (+ (GetCasterAbMod())). ДЦ оригинального нвн: ЦепьМолний, ЦМ (6круг) = (10 база +6 ЭпикФокус +6 круг =22) +20 мод стата =42 (22+20*2=62 на 40м с бонусом либо 22+19*1,5=50 на 39м с бонусом) Баньша, Б (9круг) = (10 база +6 ЭпикФокус +9 круг =25) +20 мод стата =45 (25+20*2=65 на 40м с бонусом либо 25+19*1,5=53 на 39м с бонусом) Тесты показали следующие ДЦ спелов: 40й сорк\виз 20 мод хари\инты: ЦМ-62 (правильно), Б-62 (меньше, должно быть 65 =25+20*2) 40й сорк\виз 14 мод хари\инты: ЦМ-50 (правильно), Б-56 (больше, должно быть 53 =25+14*2) 39й сорк 19 мод хари: ЦМ-50 (правильно), Б-54 (больше, должно быть 53 =25+19*1,5) 39й сорк 13 мод хари: ЦМ-41(правильно), Б-48 (больше, должно быть 44 =25+13*1,5) Проверил так же Перст Смерти и обычную Молнию, их ДЦ работает правильно. В спеллах менялось только GetSpellSaveDC() на nDC(). С предыдущей формулой где давался фиксированный бонус или в зависимости от уровня ((nCasterLevel - 19)/2), оба спела работали корректно. Сообщение отредактировал zmeylsdn - Feb 3 2019, 19:02 |
![]()
Сообщение
#5039
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
В таких случаях только дебаг (IMG:style_emoticons/kolobok_light/smile.gif) Выводить все этапы в лог и смотреть, где начинают идти не те цифры.
|
![]()
Сообщение
#5040
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
А как вообще делать дебаг и смотреть цифры?
|
![]()
Сообщение
#5041
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Поскольку дебагера в нвн нет, приходится тупо делать sendmessagetopc(getfirstpc(), ***) в разных местах кода. Так можно выводить переменные, показывать, что скрипт вошёл в условие/цикл и т.п. Потом эти строки можно закомментить, пока снова баг не вылезет (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#5042
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Как сделать ограничение по уровню для предмета? И задать свою стоимость например
|
![]()
Сообщение
#5043
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Ограничение по уровню вроде бы работает только для серверной части - шардов.
Задать свою стоимость предмета вы не можете обычными для игры способами, т.к. она зависит от кол-ва свойств, можно разве что дополнить через строчку в свойствах - "дополнительная" или как-то так на русском. Есть несколько вариантов шаманства с 2да файлами, но это все костыль. Там в *.ini надо что-то настроить - и можно выводить ошибки скриптов и функций, но ограничено, в основном пользуются SendMessageToPC(GetFirstPC(), "бла-бла"); Сообщение отредактировал Melisse - Feb 5 2019, 20:55 |
![]()
Сообщение
#5044
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Как сделать ограничение по уровню для предмета? И задать свою стоимость например Стоимость можно только увеличивать, если без гемора. Ограничение можно сделать скриптово - на одевание вставить проверку и снимать, если не дорос.Иначе там адъ и израиль (IMG:style_emoticons/kolobok_light/smile.gif) На цену влияют коэффициенты свойств из 2да-таблиц, я даже не рисковал пытаться в них разбираться. |
![]()
Сообщение
#5045
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Большой спасибо за помощь
|
![]() ![]() |
Текстовая версия | Сейчас: 20th August 2025 - 14:52 |