Esempio n. 1
0
/**
 * \brief 查找主人的敌人
 *
 *
 * \param ret 找到的目标
 * \return 是否找到
 */
bool ScenePet::checkMasterTarget(SceneEntryPk *&ret)
{
  if ((Cmd::PET_TYPE_RIDE==getPetType())
      || (Cmd::PET_TYPE_GUARDNPC==getPetType())
      || (Cmd::PET_TYPE_SEMI==getPetType()))
  {
    ret = 0;
    return false;
  }

  SceneEntryPk * master = getMaster();
  if (master)                     
  {                                       
    int r = npc_search_region;
    if (aif&AIF_DOUBLE_REGION)
      r *= 2;

    SceneEntryPk * tmp = 0;
    if (petData.ai&Cmd::PETAI_ATK_ACTIVE)//主人攻击的对象
      tmp = master->getCurTarget();
    else if (petData.ai&Cmd::PETAI_ATK_PASSIVE)//攻击主人的对象
      tmp = master->getDefTarget();

    if ((tmp)&&(tmp!=this))
      if (tmp->getState() == zSceneEntry::SceneEntry_Normal
          && isEnemy(tmp)
          && canReach(tmp)
          && canFight())
      {
        ret = tmp;
        return true;
      }
    return false;
  } 
  //Zebra::logger->error("ScenePet::checkMasterTarget(): %s 没有主人",name);
  ret = 0;
  return false;
}