void Creature::onThink(uint32_t interval) { if(!isMapLoaded && useCacheMap()) { isMapLoaded = true; updateMapCache(); } if(followCreature && master != followCreature && !canSeeCreature(followCreature)) internalCreatureDisappear(followCreature, false); if(attackedCreature && master != attackedCreature && !canSeeCreature(attackedCreature)) internalCreatureDisappear(attackedCreature, false); blockTicks += interval; if(blockTicks >= 1000) { blockCount = std::min((uint32_t)blockCount + 1, (uint32_t)2); blockTicks = 0; } if(followCreature) { walkUpdateTicks += interval; if(forceUpdateFollowPath || walkUpdateTicks >= 2000) { walkUpdateTicks = 0; forceUpdateFollowPath = false; isUpdatingPath = true; } } if(isUpdatingPath) { isUpdatingPath = false; goToFollowCreature(); } #ifndef __GROUPED_ATTACKS__ onAttacking(interval / EVENT_CREATURECOUNT); #else onAttacking(interval); #endif executeConditions(interval); CreatureEventList thinkEvents = getCreatureEvents(CREATURE_EVENT_THINK); for(CreatureEventList::iterator it = thinkEvents.begin(); it != thinkEvents.end(); ++it) (*it)->executeThink(this, interval); }
void Creature::onThink(uint32_t interval) { if(!isMapLoaded && useCacheMap()){ isMapLoaded = true; updateMapCache(); } if(followCreature && getMaster() != followCreature && !canSeeCreature(followCreature)){ internalCreatureDisappear(followCreature, false); } if(attackedCreature && getMaster() != attackedCreature && !canSeeCreature(attackedCreature)){ internalCreatureDisappear(attackedCreature, false); } blockTicks += interval; if(blockTicks >= 1000){ blockCount = std::min((uint32_t)blockCount + 1, (uint32_t)2); blockTicks = 0; } if(followCreature){ walkUpdateTicks += interval; if(forceUpdateFollowPath || walkUpdateTicks >= 2000){ walkUpdateTicks = 0; forceUpdateFollowPath = false; isUpdatingPath = true; } } if(isUpdatingPath){ isUpdatingPath = false; getPathToFollowCreature(); } onAttacking(interval); executeConditions(interval); g_game.onCreatureThink(this, interval); }