void Creature::removeCondition(ConditionType_t type, bool force/* = false*/) { auto it = conditions.begin(), end = conditions.end(); while (it != end) { Condition* condition = *it; if (condition->getType() != type) { ++it; continue; } if (!force && type == CONDITION_PARALYZE) { int64_t walkDelay = getWalkDelay(); if (walkDelay > 0) { g_scheduler.addEvent(createSchedulerTask(walkDelay, std::bind(&Game::forceRemoveCondition, &g_game, getID(), type))); return; } } it = conditions.erase(it); condition->endCondition(this); delete condition; onEndCondition(type); } }
void Creature::removeCondition(ConditionType_t type, ConditionId_t id, bool force/* = false*/) { ConditionList::iterator it = conditions.begin(); while (it != conditions.end()) { Condition* condition = *it; if (condition->getType() != type || condition->getId() != id) { ++it; continue; } if (!force && condition->getType() == CONDITION_PARALYZE) { int64_t walkDelay = getWalkDelay(); if (walkDelay > 0) { g_scheduler.addEvent(createSchedulerTask(walkDelay, boost::bind(&Game::forceRemoveCondition, &g_game, getID(), type))); return; } } it = conditions.erase(it); condition->endCondition(this, CONDITIONEND_ABORT); delete condition; onEndCondition(type); } }
void Creature::removeCondition(Condition* condition) { ConditionList::iterator it = std::find(conditions.begin(), conditions.end(), condition); if(it != conditions.end()) { Condition* condition = *it; it = conditions.erase(it); condition->endCondition(this, CONDITIONEND_ABORT); onEndCondition(condition->getType()); delete condition; } }
void Creature::executeConditions(uint32_t interval) { for(ConditionList::iterator it = conditions.begin(); it != conditions.end(); ) { if((*it)->executeCondition(this, interval)) { ++it; continue; } Condition* condition = *it; it = conditions.erase(it); condition->endCondition(this, CONDITIONEND_TICKS); onEndCondition(condition->getType()); delete condition; } }
void Creature::removeConditions(ConditionEnd_t reason, bool onlyPersistent/* = true*/) { for(ConditionList::iterator it = conditions.begin(); it != conditions.end(); ) { if(onlyPersistent && !(*it)->isPersistent()) { ++it; continue; } Condition* condition = *it; it = conditions.erase(it); condition->endCondition(this, reason); onEndCondition(condition->getType()); delete condition; } }
void Creature::removeCondition(ConditionType_t type, ConditionId_t id) { for(ConditionList::iterator it = conditions.begin(); it != conditions.end(); ) { if((*it)->getType() != type || (*it)->getId() != id) { ++it; continue; } Condition* condition = *it; it = conditions.erase(it); condition->endCondition(this, CONDITIONEND_ABORT); onEndCondition(condition->getType()); delete condition; } }
void Creature::executeConditions(uint32_t interval) { for (ConditionList::iterator it = conditions.begin(); it != conditions.end();) { if (!(*it)->executeCondition(this, interval)) { Condition* condition = *it; ConditionType_t type = condition->getType(); it = conditions.erase(it); condition->endCondition(this, CONDITIONEND_TICKS); delete condition; onEndCondition(type); } else { ++it; } } }
void Creature::executeConditions(uint32_t interval) { auto it = conditions.begin(), end = conditions.end(); while (it != end) { Condition* condition = *it; if (!condition->executeCondition(this, interval)) { ConditionType_t type = condition->getType(); it = conditions.erase(it); condition->endCondition(this); delete condition; onEndCondition(type); } else { ++it; } } }