bool CBaseMonster::bfAssignMonsterAction(CScriptEntityAction *tpEntityAction) { if (!inherited::bfAssignMonsterAction(tpEntityAction)) return false; CScriptMonsterAction &l_tAction = tpEntityAction->m_tMonsterAction; if (l_tAction.completed()) return false; CEntityAlive *pE = smart_cast<CEntityAlive *>(l_tAction.m_tObject); switch(l_tAction.m_tAction) { case eGA_Rest: StateMan->force_script_state(eStateRest); break; case eGA_Eat: if (pE && !pE->getDestroy() && !pE->g_Alive()){ CorpseMan.force_corpse(pE); StateMan->force_script_state(eStateEat); } else StateMan->force_script_state(eStateRest); break; case eGA_Attack: if (pE && !pE->getDestroy() && pE->g_Alive()){ EnemyMan.force_enemy(pE); StateMan->force_script_state(eStateAttack); } else StateMan->force_script_state(eStateRest); break; case eGA_Panic: if (pE && !pE->getDestroy() && pE->g_Alive()){ EnemyMan.force_enemy (pE); StateMan->force_script_state (eStatePanic); } else StateMan->force_script_state (eStateRest); break; } m_script_state_must_execute = true; return (!l_tAction.m_bCompleted); }