Esempio n. 1
0
/**
 * \brief 敌我判断
 * \param entry 判断的对象
 * \param notify 判断失败时是否提示(不能攻击10级以下的玩家)
 * \return 0:友方 1:敌人 -1:中立
 */
int ScenePet::isEnemy(SceneEntryPk * entry,bool notify,bool good)
{
  int ret=0;
  bool isPlayer = false;
  if (entry)
  {
    if (type==Cmd::PET_TYPE_SEMI)
    {
      ret = SceneNpc::isEnemy(entry,notify,good);
    }
    else
    {
      SceneEntryPk * master = getMaster();
      if (master)
      {
        if (master->scene==scene)
        {
          if (scene->zPosShortRange(getPos(),master->getPos(),SCREEN_WIDTH*2,SCREEN_HEIGHT*2))
          {
            if (this!=entry)
            {
              if (!((entry->frenzy)||(frenzy)))
              {
                if (master->getType()==zSceneEntry::SceneEntry_Player)
                {
                  isPlayer = true;
                  //Zebra::logger->debug("isPetEnemy 119 %s->%s",master->name,entry->name);
                  ret = isUserMasterEnemy(entry);
                }
                else
                {
                  //Zebra::logger->debug("isPetEnemy 124 %s->%s",master->name,entry->name);
                  ret = master->isEnemy(entry,notify);
                }
              }
              else
                ret = 1;
            }
            else
              ret = 0;
          }
          else
            ret = -1;
        }
        else
          ret = -1;
      }
      else
        ret = -1;
    }
  }
  else
    ret = -1;

  if (isPlayer)
  {
    if (ret==1)
      return 1;
    else
      return 0;
  }
  else
  {
    return ret;
  }
}