diff --git a/src/enums.h b/src/enums.h index 07a292c7..53c96acf 100644 --- a/src/enums.h +++ b/src/enums.h @@ -151,7 +151,7 @@ enum SpellGroup_t : uint8_t { SPELLGROUP_SUPPORT = 3, SPELLGROUP_SPECIAL = 4, - SPELLGROUP_UNKNOWN = 255, // last, unspecified + SPELLGROUP_UNKNOWN = 255 // when no group set in revscript }; enum SpellType_t : uint8_t { diff --git a/src/spells.cpp b/src/spells.cpp index 4f308337..2d95148b 100644 --- a/src/spells.cpp +++ b/src/spells.cpp @@ -762,24 +762,29 @@ bool Spell::playerRuneSpellCheck(Player* player, const Position& toPos) return true; } +void Spell::addCooldowns(Player* player) const +{ + if (cooldown > 0) { + Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLCOOLDOWN, cooldown, 0, false, spellId); + player->addCondition(condition); + } + + if (group != SPELLGROUP_NONE && groupCooldown > 0) { + Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, groupCooldown, 0, false, group); + player->addCondition(condition); + } + + if (secondaryGroup != SPELLGROUP_NONE && secondaryGroupCooldown > 0) { + Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, secondaryGroupCooldown, 0, false, secondaryGroup); + player->addCondition(condition); + } +} + void Spell::postCastSpell(Player* player, bool finishedCast /*= true*/, bool payCost /*= true*/) const { if (finishedCast) { if (!player->hasFlag(PlayerFlag_HasNoExhaustion)) { - if (cooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLCOOLDOWN, cooldown, 0, false, spellId); - player->addCondition(condition); - } - - if (group != SPELLGROUP_NONE && groupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, groupCooldown, 0, false, group); - player->addCondition(condition); - } - - if (secondaryGroup != SPELLGROUP_NONE && secondaryGroupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, secondaryGroupCooldown, 0, false, secondaryGroup); - player->addCondition(condition); - } + addCooldowns(player); } if (aggressive) { @@ -879,20 +884,7 @@ bool InstantSpell::playerCastInstant(Player* player, std::string& param) target = playerTarget; if (!target || target->isRemoved() || target->isDead()) { if (!casterTargetOrDirection) { - if (cooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLCOOLDOWN, cooldown, 0, false, spellId); - player->addCondition(condition); - } - - if (group != SPELLGROUP_NONE && groupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, groupCooldown, 0, false, group); - player->addCondition(condition); - } - - if (secondaryGroup != SPELLGROUP_NONE && secondaryGroupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, secondaryGroupCooldown, 0, false, secondaryGroup); - player->addCondition(condition); - } + addCooldowns(player); player->sendCancelMessage(ret); g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF); @@ -939,20 +931,7 @@ bool InstantSpell::playerCastInstant(Player* player, std::string& param) ReturnValue ret = g_game.getPlayerByNameWildcard(param, playerTarget); if (ret != RETURNVALUE_NOERROR) { - if (cooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLCOOLDOWN, cooldown, 0, false, spellId); - player->addCondition(condition); - } - - if (group != SPELLGROUP_NONE && groupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, groupCooldown, 0, false, group); - player->addCondition(condition); - } - - if (secondaryGroup != SPELLGROUP_NONE && secondaryGroupCooldown > 0) { - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLGROUPCOOLDOWN, secondaryGroupCooldown, 0, false, secondaryGroup); - player->addCondition(condition); - } + addCooldowns(player); player->sendCancelMessage(ret); g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF); diff --git a/src/spells.h b/src/spells.h index a210bb75..d55b32ea 100644 --- a/src/spells.h +++ b/src/spells.h @@ -280,6 +280,7 @@ class Spell : public BaseSpell bool playerSpellCheck(Player* player) const; bool playerInstantSpellCheck(Player* player, const Position& toPos); bool playerRuneSpellCheck(Player* player, const Position& toPos); + void addCooldowns(Player* player) const; VocSpellMap vocSpellMap;