void NPCAIMgr::CheckAttacks(SystemEntity *target) { if(m_mainAttackTimer.Check(false)) { _log(NPC__AI_TRACE, "[%u] Attack timer expired. Attacking %u.", m_npc->GetID(), target->GetID()); InventoryItemRef self = m_npc->Item(); //reset the attack timer. //NOTE: there is probably a more intelligent way to make this descision. //if(self->entityAttackDelayMax() <= 0) { //use speed field... m_mainAttackTimer.Start(self->speed()); //} else { //I think this field is actually meant as a reaction time to the player showing up in range. // m_mainAttackTimer.Start(MakeRandomInt( // self->entityAttackDelayMin(), // self->entityAttackDelayMax() )); //} //Do main attack... //check our attack range... if(m_npc->DistanceTo2(target) > m_entityAttackRange2) { _log(NPC__AI_TRACE, "[%u] Target (%u) is too far away (%.2f > %.2f)", m_npc->GetID(), target->GetID(), m_npc->DistanceTo2(target), m_entityAttackRange2); _EnterFollowing(target); return; } //TODO: check to-hit... //TODO: Need to consult dgmTypeEffects to determine what kind // of effects to throw for this attack. _SendWeaponEffect("effects.Laser", target); Damage d( m_npc, (InventoryItemRef)self, effectTargetAttack); //should get this from somewhere. m_npc->ApplyDamageModifiers(d, m_npc); target->ApplyDamage(d); } }