Здравствуйте, гость ( Вход | Регистрация )
Отправлено: Jul 11 2018, 10:40 | |
Level 1 Группа: Newbie Сообщений: 2 Регистрация: 11.06.2018 Пользователь №: 6,746 |
Дело в том что я делал по аналогии со стандартными заклинаниями Боиварей.. к примеру вот это заклинание http://nwn.wikia.com/wiki/Stonehold работает с такими же функциями. Кроме того.. когда я сделал пару тестов и они меня вообще в тупик загнали. 1. Добавил для проверки еще один эффект ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); и он срабатывает такое же рандомное кол-во раз как и Weird()... но Код void main() { //float fDelay1 = GetRandomDelay(6.0, 12.0); oTarget = GetFirstInPersistentObject(); while(GetIsObjectValid(oTarget)) { if(GetIsPC(oTarget)) { SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD)); if(!GetHasSpellEffect(SPELL_WEIRD, oTarget)) { //DelayCommand(fDelay1, Weird()); [b]ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); Weird();[/b] } } oTarget = GetNextInPersistentObject(); } } но если убрать эффект Weird(), то ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); работает как часы.. Код void main() { //float fDelay1 = GetRandomDelay(6.0, 12.0); oTarget = GetFirstInPersistentObject(); while(GetIsObjectValid(oTarget)) { if(GetIsPC(oTarget)) { SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD)); if(!GetHasSpellEffect(SPELL_WEIRD, oTarget)) { //DelayCommand(fDelay1, Weird()); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); [b]//Weird();[/b] } } oTarget = GetNextInPersistentObject(); } } Вышло сузить область поиска ошибки.. Использовал все туже функцию ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); для проверки Сама по себе она работает правильно. В паре с void CreatePhantom() обе работают криво, а вот в паре с void ApplyEffect() обе работают отлично. Логично что конфликт где то в функции void CreatePhantom(), но не пойму что в ней может быть не так. Все.. извеняюсь за стену текста, проблема вроде решена, помогла минимальная задержка 0.2 перед функцией CreatePhantom() Код void Weird() { DelayCommand(0.2, CreatePhantom()); DelayCommand(2.7, ApplyEffect()); } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146661 · Ответов: 3359 · Просмотров: 640,080 |
Отправлено: Jul 9 2018, 20:24 | |
Level 1 Группа: Newbie Сообщений: 2 Регистрация: 11.06.2018 Пользователь №: 6,746 |
Добрый день.. в полку новичков прибыло) Попробовал переписать заклинание и при тестах столкнулся с парой проблем решить которые не получается, уверен что где то допустил банальные ошибки. Проблема в том что эффект Weird() срабатывет одновременно рандомное кол-во раз в одну и ту же цель. Т.е. появляется от 1го до 5-6 духов и на цель накладывается соответствующее кол-во эффектов. Собственно вот скрипт OnHeartbeat Код #include "NW_I0_SPELLS" #include "x0_i0_spells" #include "x2_inc_spellhook" #include "x0_i0_position" #include "x0_i0_match" object oTarget; object oCaster = GetAreaOfEffectCreator(); location RandomLocation (object oTarget, float fRadius, int iLine = TRUE) { if (!iLine) fRadius = IntToFloat(Random(FloatToInt(fRadius))); float iXO = VectorMagnitude(GetPosition(oTarget)) * cos(VectorToAngle(GetPosition(oTarget))); float iYO = VectorMagnitude(GetPosition(oTarget)) * sin(VectorToAngle(GetPosition(oTarget))); float fRndomAngle = IntToFloat(Random(360)); location lNewLoc = Location(GetArea(oTarget),Vector(iXO + fRadius * cos(fRndomAngle),iYO + fRadius * sin(fRndomAngle)),360.0); return lNewLoc; } void CreatePhantom() { location lRandom = RandomLocation(oTarget, 8.0, TRUE); object oPhantom = CreateObject(OBJECT_TYPE_CREATURE, "nw_wraith", lRandom, FALSE, ""); ActionDoCommand(TurnToFaceObject(oTarget, oPhantom)); SetImmortal(oPhantom, TRUE); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectEntangle(), oPhantom); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHaste(), oPhantom); DelayCommand(1.0, AssignCommand(oPhantom, ActionCastFakeSpellAtObject(SPELL_PHANTASMAL_KILLER, oTarget, PROJECTILE_PATH_TYPE_DEFAULT))); DestroyObject(oPhantom, 2.0); } void ApplyEffect() { int nAbility = GetCasterAbilityModifier(oCaster); int nSpellFocus; if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster)) { nSpellFocus = 6; } else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster)) { nSpellFocus = 4; } else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster)) { nSpellFocus = 2; } else { nSpellFocus = 0; } int nSpellDC = 19 + nAbility + nSpellFocus; int fSchool; if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster)) { fSchool = 3; } else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster)) { fSchool = 2; } else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster)) { fSchool = 1; } else { fSchool = 1; } int nRounds = d2(fSchool); effect eFrightened = EffectFrightened(); effect eParalyzed = EffectParalyze(); effect ePetrified = EffectPetrify(); effect eVisFrightened = EffectVisualEffect(218); effect eVisParalyzed = EffectVisualEffect(232); effect eVisPetrified = EffectVisualEffect(351); effect elFrightened = EffectLinkEffects(eVisFrightened, eFrightened); effect elParalyzed = EffectLinkEffects(eVisParalyzed, eParalyzed); effect elPetrified = EffectLinkEffects(eVisPetrified, ePetrified); int nRandom = Random(3); if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC, SAVING_THROW_TYPE_NONE, oCaster)) { if(nRandom == 0) { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elFrightened, oTarget, RoundsToSeconds(nRounds)); } else if(nRandom == 1) { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elParalyzed, oTarget, RoundsToSeconds(nRounds)); } else { ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elPetrified, oTarget, RoundsToSeconds(nRounds)); } } } void Weird() { CreatePhantom(); DelayCommand(2.5, ApplyEffect()); } void main() { oTarget = GetFirstInPersistentObject(); while(GetIsObjectValid(oTarget)) { if(GetIsPC(oTarget)) { SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD)); if(!GetHasSpellEffect(SPELL_WEIRD,oTarget)) { Weird(); } } oTarget = GetNextInPersistentObject(); } } |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #146659 · Ответов: 3359 · Просмотров: 640,080 |
Открытая тема (есть новые ответы) Открытая тема (нет новых ответов) Горячая тема (есть новые ответы) Горячая тема (нет новых ответов) |
Опрос (есть новые голоса) Опрос (нет новых голосов) Закрытая тема Тема перемещена |
Текстовая версия | Сейчас: 24th April 2024 - 16:42 |