Здравствуйте, гость ( Вход | Регистрация )
Отправлено: Jan 10 2021, 19:17 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Привет. Как подключить base_2da.bif к nwn:EE infinite dungeons? или как в ID отредактировать базовые предметы? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #147020 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Dec 27 2020, 14:31 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
а по отключению потребления опыта хенчем\самонами есть что-то? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #147018 · Ответов: 3670 · Просмотров: 709,359 |
Отправлено: Dec 26 2020, 15:06 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Привет. Хочу сделать итем, который будет давать команду самону "двигаться", если использован на пустое место и "атаковать", если на нпц\обьект. Думаю поместить его в скрип спелов призыва, чтобы проверял, есть ли итем в инвентаре и давал, если нет. Есть какие-то наработки в этом направлении? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #147016 · Ответов: 3670 · Просмотров: 709,359 |
Отправлено: Mar 8 2019, 21:45 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-0-Это реально работает, спасибо) -1-Есть ли способ, чтобы при достижении DAMAGE_BONUS_20 (вроде как предел для нвн без доп програм), добавлялся следующий тип урона например CODE #include "x2_inc_itemprop" /* int IPGetDamageBonusConstantFromNumber(int nNumber) { switch (nNumber) { case 1: return DAMAGE_BONUS_1; // здесь строки для 2-19 case 20: return DAMAGE_BONUS_20; //a)case 21: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_1 режущий вплоть до //case 40: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_20 режущий } } */ void EmpowerMySummon(int iBonus, object oSummon) { eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus), DAMAGE_TYPE_BLUDGEONING); //б)или здесь DAMAGE_TYPE_BLUDGEONING, DAMAGE_TYPE_SLASHING } в)Или может через два эффекта (EffectDamageIncrease()), но чтобы второй подключался только когда первый достигнет максимума г)По идее можно и так: eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus/2), DAMAGE_TYPE_BLUDGEONING); eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus/2), DAMAGE_TYPE_SLASHING); Тогда при iBonus=40 будет 20+20. -2-SSMLevelUpCreature не разобрался, сделал ап через эффекты EffectDamageIncrease(iBonus=GetHitDice) и т.п. Если у кого есть готовый пример поделитесь пож). |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146800 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Mar 4 2019, 17:18 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
При копировании русского текста из тулсета вставляется в виде нечитабельных символов (Óðîâåíü(íè) Çàêëèíàòåëÿ). Русификатор для тулсета NWTSrus.rar не помогает. Как пофиксить? Вот кстати сейчас когда редактировал один раз показало как нужно. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146796 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 27 2019, 14:02 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
В x0_s2_fiend меняю стандартного врока на своего, докидываю DelayCommand(4.0, ExecuteScript("z_sbuff_scale", OBJECT_SELF)); после ApplyEffectAtLocation... CODE //z_sbuff_scale #include "X2_inc_summscale" void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); SSMLevelUpCreature(oSummon,GetLevelByClass(CLASS_T YPE_BLACKGUARD, OBJECT_SELF)+10); SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре oSummon: Самон Эпик Врок SendMessageToPC(GetFirstPC(), "oSummonlvl: " + IntToString(GetHitDice(oSummon)));//в игре oSummonlvl: 25 SendMessageToPC(GetFirstPC(), "BG+10lvl: " + IntToString(GetLevelByClass(CLASS_TYPE_BLACKGUARD, OBJECT_SELF)+10));//в игре BG+10lvl: 39 } Но Врок остается 25й лвл как и был. У него стандартный набор скриптов "nw_ch_ac%" |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146777 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 26 2019, 11:56 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1. На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу: int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale) Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4). Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный. Итого, как лучше реализовать скалирование самонов от уровня мастера? Как вариант нашел такой способ, основа из предыдущего сообщения: void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon); } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146775 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 25 2019, 22:30 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Спасибо, работает. Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146773 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 22 2019, 10:53 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Оба варианта, и OnSpawn, и внутри скрипта вызова, работают с DelayCommand(1.0, ExecuteScript("z_sbuff_onspawn", OBJECT_SELF)); Биг, биг спс. Нашел как применить несколько эффектов сразу. Но не получается оптимизировать код. CODE void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION)) { effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 6); effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 6); effect eDam = EffectDamageIncrease(DAMAGE_BONUS_6, DAMAGE_TYPE_BLUDGEONING); effect eAtt = EffectAttackIncrease(6); effect eAC = EffectACIncrease(6, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon); } else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION )) { effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4); effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 4); effect eDam = EffectDamageIncrease(DAMAGE_BONUS_4, DAMAGE_TYPE_BLUDGEONING); effect eAtt = EffectAttackIncrease(4); effect eAC = EffectACIncrease(4, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon); } else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION)) { effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 2); effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 2); effect eDam = EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BLUDGEONING); effect eAtt = EffectAttackIncrease(2); effect eAC = EffectACIncrease(2, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon); } } Например, такой вариант не срабатывает: CODE void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); int eBonus; effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, eBonus); effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, eBonus); effect eDam = EffectDamageIncrease(eBonus, DAMAGE_TYPE_BLUDGEONING); effect eAtt = EffectAttackIncrease(eBonus); effect eAC = EffectACIncrease(eBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION)) { eBonus = 6; ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon); } } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146770 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 21 2019, 20:52 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-1- в NW_S0_Summon CODE object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 10); if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION )) { ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oSummon); } SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре "oSummon: " или "oSummon: Ужасный барсук" (имя предыдущего вызванного существа). } Видимо не успевает найти самона. -2- в OnSpawn существа CODE object oMaster = GetMaster(OBJECT_SELF); if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION , oMaster)) { object oTarget = OBJECT_SELF; effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 10); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget); } SendMessageToPC(GetFirstPC(), "oMaster: " + GetName(oMaster)); //в игре "oMaster: " //SendMessageToPC(GetFirstPC(), "I`m: " + GetName(OBJECT_SELF)); в игре "I`m: Ужасный барсук" } видимо не находит мастера. нашел в nwn lexicon такую инфу: "Known bugs. This function (GetMaster()) always returns OBJECT_INVALID when used in creature OnSpawn event. To get correct results, use this function with slight delay or in signal event." Вопрос теперь как эту строку "object oMaster = GetMaster(OBJECT_SELF);" выполнить с задержкой? //ActionWait(2.0); //AssignCommand(OBJECT_SELF, ActionWait(2.0)); не оказали эффекта, а как применить DelayCommand(2.0)); с сохранением привязки к переменной oMaster идей нет. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146768 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 5 2019, 22:48 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Большой спасибо за помощь |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146766 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 5 2019, 17:25 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Как сделать ограничение по уровню для предмета? И задать свою стоимость например |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146763 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 4 2019, 19:53 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
А как вообще делать дебаг и смотреть цифры? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146761 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 3 2019, 18:36 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-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), оба спела работали корректно. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146759 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Feb 2 2019, 22:18 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-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); } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146757 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 24 2019, 16:18 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-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; } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146749 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 23 2019, 20:28 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-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-Добавление класса сложности к спеллам избранной школы волшебника-специалиста и увеличение уровней кастера для престиж-классов с чего начинать искать? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146747 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 18 2019, 19:22 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
-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? Или может есть другой путь. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146744 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 17 2019, 17:25 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Может кто в коде показать, как взять ассоциацию на сумона и применить к нему эффект увеличения силы или в скрипте 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 например. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146741 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 10 2019, 18:44 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
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? Еще заметил, что фокусировка и эпик фокусировка на оружии существо, а так же бонус к атаке и бонус усиления когтя существа не меняет отображаемый бонус атаки в окне призванного существа и судя по всему не действует. Можно ли это исправить? Как вариант решения нашел, можно добавить существу оружие с бонусом атаки\усиления. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146732 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 9 2019, 16:51 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
А где найти эффекты заклинаний? Нашел только spells.2da, vco_lgsprnatr01 sco_lgsprnatr01 Так же хотелось бы не эффектом, чтобы сверху можно было бафать той же силой быка, а так будет кап в 12 ед. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146730 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 8 2019, 18:33 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Сейчас делаю, чтобы при наличии фита GREAT_SPELL_FOCUS_CONJURATION самонам добавлялось 4силы. Но делаю это через добавление нового самона с увеличенной силой. Есть ли возможность реализовать скрипт, чтобы наличие фита прибавляло силу уже существующему самону? Может даже просто через присвоение фита FEAT_EPIC_GREAT_STRENGTH_4. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146728 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 2 2019, 17:20 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Биг спс нашел там картинку со всеми скриптами на самона, проверил - работает. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146725 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Jan 1 2019, 22:06 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Из скрипта на призыв существ 1-9 вот первые два ресфера (или тега): NW_S_badgerdire NW_S_BOARDIRE Эти мобы есть в палитре, но с другими ресферами (или тегами). Как найти именно этих мобов я не знаю, поэтому юзал мобов с палитры для замены самонов. Как я вижу решение: - либо есть возможность найти именно этих мобов, тогда проблем нет. но я не знаю как их найти. - либо найти скрипты, отвечающие за самонов игрока и добавить их в мобов с палитры. Для этого придется перебирать все скрипты (пока нашел ток один но он ничего не изменил). |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146723 · Ответов: 5109 · Просмотров: 871,257 |
Отправлено: Dec 31 2018, 19:54 | |
Level 3 Группа: Members Сообщений: 33 Регистрация: 05.12.2018 Пользователь №: 6,765 |
Если бы можно было выковырять родных самонов я бы сделал по аналогии а так не с чем сравнивать. или может есть какой модуль с измененными самонами? взял бы оттуда |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146720 · Ответов: 5109 · Просмотров: 871,257 |
Открытая тема (есть новые ответы) Открытая тема (нет новых ответов) Горячая тема (есть новые ответы) Горячая тема (нет новых ответов) |
Опрос (есть новые голоса) Опрос (нет новых голосов) Закрытая тема Тема перемещена |
Текстовая версия | Сейчас: 11th May 2024 - 18:52 |