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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
202 страниц V  « < 200 201 202  
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
zmeylsdn
сообщение Jan 18 2019, 19:22
Сообщение #5026


Level 2
*

Класс: Бледный Мастер
Характер: 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jan 19 2019, 08:08
Сообщение #5027


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Саммон уже вызван на момент применения эффекта? Я вижу вверху строчку с рефом, такое чувство, что эффект вызова саммона ещё не применён.

Все скрипты придётся менять вручную. Даже если поправить инклуд, всё равно все скрипты надо будет перекомпилировать, а этого не сделать, если предварительно не изменить хоть как-то (создать модульную версию).

Сообщение отредактировал denis0k - Jan 19 2019, 08:09
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Jan 23 2019, 20:28
Сообщение #5028


Level 2
*

Класс: Бледный Мастер
Характер: 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jan 23 2019, 22:59
Сообщение #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)
Цитата
Добавление класса сложности к спеллам избранной школы волшебника-специалиста и увеличение уровней кастера для престиж-классов с чего начинать искать?
Не понял вопроса. Можно узнать этот уровень кастера и просто прибавить ДЦ. Не знаю, можно ли узнать специализацию, давно этим занимался, всё по памяти.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Jan 24 2019, 16:18
Сообщение #5030


Level 2
*

Класс: Бледный Мастер
Характер: 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jan 24 2019, 18:34
Сообщение #5031


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Можно всё-таки полный скрипт саммона, а не куски? От начала до конца.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StasMokos
сообщение Jan 27 2019, 22:20
Сообщение #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));
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jan 28 2019, 07:40
Сообщение #5033


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Просто догадка. В катсценах фейдят как действие, мб объект надо разрушать не через секунду, а через пять, чтобы он последнюю строку успел сделать? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Jan 28 2019, 10:37
Сообщение #5034


Level 11
***

Класс: Волшебник
Характер: Neutral Good
Раса: Фея



сделайте так

Neverwinter Script
//экран
  AssignCommand(oPC, FadeToBlack(oPC, FADE_SPEED_FAST));
  AssignCommand(oPC, DelayCommand (4.0, FadeFromBlack(oPC, FADE_SPEED_FAST)));


как и сказал dens0k вы разрушаете объект и DelayCommand не срабатывает из-за этого, так как она не привязана к герою, а висит на хенче. Поэтому лучше вешать или на модуль или на PC
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StasMokos
сообщение Jan 28 2019, 21:01
Сообщение #5035


Level 3
*

Класс: Воин
Характер: True Neutral
Раса: Эльф



Спасибо большое, все получилось!
И заодно стала понятнее логика при работе с DelayCommand (IMG:style_emoticons/kolobok_light/good.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 2 2019, 22:18
Сообщение #5036


Level 2
*

Класс: Бледный Мастер
Характер: 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 3 2019, 11:24
Сообщение #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 с выводом в лог значений переменных и проходов по условиям/циклам.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 3 2019, 18:36
Сообщение #5038


Level 2
*

Класс: Бледный Мастер
Характер: 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 4 2019, 00:39
Сообщение #5039


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



В таких случаях только дебаг (IMG:style_emoticons/kolobok_light/smile.gif) Выводить все этапы в лог и смотреть, где начинают идти не те цифры.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 4 2019, 19:53
Сообщение #5040


Level 2
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



А как вообще делать дебаг и смотреть цифры?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 4 2019, 23:09
Сообщение #5041


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Поскольку дебагера в нвн нет, приходится тупо делать sendmessagetopc(getfirstpc(), ***) в разных местах кода. Так можно выводить переменные, показывать, что скрипт вошёл в условие/цикл и т.п. Потом эти строки можно закомментить, пока снова баг не вылезет (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 5 2019, 17:25
Сообщение #5042


Level 2
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



Как сделать ограничение по уровню для предмета? И задать свою стоимость например
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 5 2019, 20:49
Сообщение #5043


Level 11
***

Класс: Волшебник
Характер: Neutral Good
Раса: Фея



Ограничение по уровню вроде бы работает только для серверной части - шардов.
Задать свою стоимость предмета вы не можете обычными для игры способами, т.к. она зависит от кол-ва свойств, можно разве что дополнить через строчку в свойствах - "дополнительная" или как-то так на русском. Есть несколько вариантов шаманства с 2да файлами, но это все костыль.


Там в *.ini надо что-то настроить - и можно выводить ошибки скриптов и функций, но ограничено, в основном пользуются SendMessageToPC(GetFirstPC(), "бла-бла");

Сообщение отредактировал Melisse - Feb 5 2019, 20:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 5 2019, 21:11
Сообщение #5044


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата(zmeylsdn @ Feb 5 2019, 17:25) *
Как сделать ограничение по уровню для предмета? И задать свою стоимость например
Стоимость можно только увеличивать, если без гемора. Ограничение можно сделать скриптово - на одевание вставить проверку и снимать, если не дорос.

Иначе там адъ и израиль (IMG:style_emoticons/kolobok_light/smile.gif) На цену влияют коэффициенты свойств из 2да-таблиц, я даже не рисковал пытаться в них разбираться.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 5 2019, 22:48
Сообщение #5045


Level 2
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



Большой спасибо за помощь
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

202 страниц V  « < 200 201 202
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18th February 2019 - 00:06