Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

Важно! Скрипты
zmeylsdn
Отправлено: Dec 27 2020, 14:31


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


а по отключению потребления опыта хенчем\самонами есть что-то?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #147018 · Ответов: 3670 · Просмотров: 703,139

Важно! Скрипты
zmeylsdn
Отправлено: Dec 26 2020, 15:06


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Привет. Хочу сделать итем, который будет давать команду самону "двигаться", если использован на пустое место и "атаковать", если на нпц\обьект.
Думаю поместить его в скрип спелов призыва, чтобы проверял, есть ли итем в инвентаре и давал, если нет.
Есть какие-то наработки в этом направлении?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #147016 · Ответов: 3670 · Просмотров: 703,139

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: Mar 4 2019, 17:18


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


При копировании русского текста из тулсета вставляется в виде нечитабельных символов (Óðîâåíü(íè) Çàêëèíàòåëÿ). Русификатор для тулсета NWTSrus.rar не помогает. Как пофиксить?
Вот кстати сейчас когда редактировал один раз показало как нужно.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146796 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: Feb 25 2019, 22:30


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Спасибо, работает.
Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146773 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: Feb 5 2019, 22:48


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Большой спасибо за помощь
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146766 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: Feb 5 2019, 17:25


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Как сделать ограничение по уровню для предмета? И задать свою стоимость например
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146763 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: Feb 4 2019, 19:53


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


А как вообще делать дебаг и смотреть цифры?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146761 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: Jan 2 2019, 17:20


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Биг спс нашел там картинку со всеми скриптами на самона, проверил - работает.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146725 · Ответов: 5109 · Просмотров: 856,017

zmeylsdn
Отправлено: 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 · Просмотров: 856,017

zmeylsdn
Отправлено: Dec 31 2018, 19:54


Level 3
*

Группа: Members
Сообщений: 33
Регистрация: 05.12.2018
Пользователь №: 6,765


Если бы можно было выковырять родных самонов я бы сделал по аналогии а так не с чем сравнивать. или может есть какой модуль с измененными самонами? взял бы оттуда
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146720 · Ответов: 5109 · Просмотров: 856,017

2 страниц V   1 2 >

Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 20th April 2024 - 02:42