bool ConditionDamage::startCondition(Creature* creature) { if(!Condition::startCondition(creature) || !init()) return false; if(delayed) return true; int32_t damage = 0; return !getNextDamage(damage) || doDamage(creature, damage); }
void ConditionDamage::addCondition(Creature* creature, const Condition* addCondition) { if (addCondition->getType() == conditionType) { const ConditionDamage& conditionDamage = static_cast<const ConditionDamage&>(*addCondition); if (updateCondition(&conditionDamage)) { setTicks(addCondition->getTicks()); owner = conditionDamage.owner; maxDamage = conditionDamage.maxDamage; minDamage = conditionDamage.minDamage; startDamage = conditionDamage.startDamage; tickInterval = conditionDamage.tickInterval; periodDamage = conditionDamage.periodDamage; int32_t nextTimeLeft = tickInterval; if (!damageList.empty()) { //save previous timeLeft IntervalInfo& damageInfo = damageList.front(); nextTimeLeft = damageInfo.timeLeft; damageList.clear(); } damageList = conditionDamage.damageList; if (init()) { if (!damageList.empty()) { //restore last timeLeft IntervalInfo& damageInfo = damageList.front(); damageInfo.timeLeft = nextTimeLeft; } if (!delayed) { int32_t damage = 0; if (getNextDamage(damage)) { doDamage(creature, damage); } } } } } }
bool ConditionDamage::startCondition(Creature* creature) { if(!Condition::startCondition(creature)) return false; if(!init()) return false; if(!delayed) { int32_t damage = 0; if(getNextDamage(damage)) return doDamage(creature, damage); } return true; }