bool Creature::addCondition(Condition* condition, bool force/* = false*/) { if (condition == NULL) { return false; } if (!force && condition->getType() == CONDITION_HASTE && hasCondition(CONDITION_PARALYZE)) { int64_t walkDelay = getWalkDelay(); if (walkDelay > 0) { g_scheduler.addEvent(createSchedulerTask(walkDelay, boost::bind(&Game::forceAddCondition, &g_game, getID(), condition))); return false; } } Condition* prevCond = getCondition(condition->getType(), condition->getId(), condition->getSubId()); if (prevCond) { prevCond->addCondition(this, condition); delete condition; return true; } if (condition->startCondition(this)) { conditions.push_back(condition); onAddCondition(condition->getType()); return true; } delete condition; return false; }
bool Creature::addCondition(Condition* condition) { if(condition == NULL || isImmune(condition)){ delete condition; return false; } for(ConditionList::const_iterator it = conditions.begin(); it != conditions.end(); ++it){ if((*it)->onUpdate(this, condition)){ delete condition; return true; } } if(condition->onBegin(this)){ onAddCondition(condition); conditions.push_back(condition); condition->setAttached(true); onAddCondition(condition, false); return true; } return false; }
bool Creature::addCondition(Condition* condition) { if(!condition) return false; bool hadCondition = hasCondition(condition->getType(), -1, false); if(Condition* previous = getCondition(condition->getType(), condition->getId(), condition->getSubId())) { previous->addCondition(this, condition); delete condition; return true; } if(condition->startCondition(this)) { conditions.push_back(condition); onAddCondition(condition->getType(), hadCondition); return true; } delete condition; return false; }