Index: scripts/globals/abilities/curing_waltz.lua =================================================================== --- scripts/globals/abilities/curing_waltz.lua (revision 2250) +++ scripts/globals/abilities/curing_waltz.lua (working copy) @@ -28,9 +28,6 @@ end --Reducing TP. - local tp = player:getTP(); - tp = tp - 20; - player:setTP(tp); --Applying server mods.... cure = cure * CURE_POWER; Index: scripts/globals/abilities/curing_waltz_ii.lua =================================================================== --- scripts/globals/abilities/curing_waltz_ii.lua (revision 2250) +++ scripts/globals/abilities/curing_waltz_ii.lua (working copy) @@ -28,9 +28,6 @@ end --Reducing TP. - local tp = player:getTP(); - tp = tp - 35; - player:setTP(tp); --Applying server mods.... cure = cure * CURE_POWER; Index: scripts/globals/abilities/curing_waltz_iii.lua =================================================================== --- scripts/globals/abilities/curing_waltz_iii.lua (revision 2250) +++ scripts/globals/abilities/curing_waltz_iii.lua (working copy) @@ -23,9 +23,6 @@ end --Reducing TP. - local tp = player:getTP(); - tp = tp - 50; - player:setTP(tp); --Applying server mods.... cure = cure * CURE_POWER; Index: scripts/globals/abilities/curing_waltz_iv.lua =================================================================== --- scripts/globals/abilities/curing_waltz_iv.lua (revision 2250) +++ scripts/globals/abilities/curing_waltz_iv.lua (working copy) @@ -23,9 +23,6 @@ end --Reducing TP. - local tp = player:getTP(); - tp = tp - 65; - player:setTP(tp); --Applying server mods.... cure = cure * CURE_POWER; Index: scripts/globals/abilities/divine_waltz.lua =================================================================== --- scripts/globals/abilities/divine_waltz.lua (revision 2250) +++ scripts/globals/abilities/divine_waltz.lua (working copy) @@ -27,10 +27,6 @@ cure = (vit+chr)*0.125+60; end - --Reducing TP. - local tp = player:getTP(); - tp = tp - 40; - player:setTP(tp); --Applying server mods.... cure = cure * CURE_POWER; Index: src/map/ai/ai_char_normal.cpp =================================================================== --- src/map/ai/ai_char_normal.cpp (revision 2250) +++ src/map/ai/ai_char_normal.cpp (working copy) @@ -1727,6 +1727,142 @@ return; } } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA) + { + if (m_PChar->health.tp<10){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA_II) + { + if (m_PChar->health.tp<25){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA_III) + { + if (m_PChar->health.tp<40){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_ASPIR_SAMBA) + { + if (m_PChar->health.tp<10){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_ASPIR_SAMBA_II) + { + if (m_PChar->health.tp<25){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_HASTE_SAMBA) + { + if (m_PChar->health.tp<35){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ) + { + if (m_PChar->health.tp<20){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_II) + { + if (m_PChar->health.tp<35){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_III) + { + if (m_PChar->health.tp<50){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_IV) + { + if (m_PChar->health.tp<65){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_HEALING_WALTZ) + { + if (m_PChar->health.tp<20){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_DIVINE_WALTZ) + { + if (m_PChar->health.tp<40){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_QUICKSTEP) + { + if (m_PChar->health.tp<10){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_BOX_STEP) + { + if (m_PChar->health.tp<10){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + if (m_PJobAbility->getID() == ABILITY_STUTTER_STEP) + { + if (m_PChar->health.tp<20){ + m_PChar->pushPacket(new CMessageBasicPacket(m_PChar, m_PChar, 0, 0, 88)); + m_ActionType = (m_PChar->animation == ANIMATION_ATTACK ? ACTION_ATTACK : ACTION_NONE); + m_PJobAbility = NULL; + m_PBattleSubTarget = NULL; + return;} + } + m_ActionType = ACTION_JOBABILITY_FINISH; ActionJobAbilityFinish(); return; @@ -1983,6 +2119,66 @@ } } } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA) + { + m_PChar->addTP(-10); + } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA_II) + { + m_PChar->addTP(-25); + } + if (m_PJobAbility->getID() == ABILITY_DRAIN_SAMBA_III) + { + m_PChar->addTP(-40); + } + if (m_PJobAbility->getID() == ABILITY_ASPIR_SAMBA) + { + m_PChar->addTP(-10); + } + if (m_PJobAbility->getID() == ABILITY_ASPIR_SAMBA_II) + { + m_PChar->addTP(-25); + } + if (m_PJobAbility->getID() == ABILITY_HASTE_SAMBA) + { + m_PChar->addTP(-35); + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ) + { + m_PChar->addTP(-20); + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_II) + { + m_PChar->addTP(-35); + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_III) + { + m_PChar->addTP(-50); + } + if (m_PJobAbility->getID() == ABILITY_CURING_WALTZ_IV) + { + m_PChar->addTP(-65); + } + if (m_PJobAbility->getID() == ABILITY_HEALING_WALTZ) + { + m_PChar->addTP(-20); + } + if (m_PJobAbility->getID() == ABILITY_DIVINE_WALTZ) + { + m_PChar->addTP(-40); + } + if (m_PJobAbility->getID() == ABILITY_QUICKSTEP) + { + m_PChar->addTP(-10); + } + if (m_PJobAbility->getID() == ABILITY_BOX_STEP) + { + m_PChar->addTP(-10); + } + if (m_PJobAbility->getID() == ABILITY_STUTTER_STEP) + { + m_PChar->addTP(-10); + } // TODO: все перенести в скрипты, т.к. система позволяет получать указатель на питомца @@ -2795,7 +2991,7 @@ if (Action.reaction != REACTION_EVADE) { - battleutils::HandleEnspell(m_PChar,m_PBattleTarget,&Action,i); + battleutils::HandleEnspell(m_PChar, m_PBattleTarget, &Action, i, WeaponDelay, damage); } m_PChar->m_ActionList.push_back(Action);