public void DecHP()
    {
        // Hurt self

        this.Hp--;
        if (this.Hp <= 0)
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                // make self dead and destroy later
                MakeDead();
            }
            else
            {
                this.Hp = 1;

                // Dead event sync
                PlayerEventItem deadEvent = new PlayerEventItem();
                deadEvent.cbTeamType  = (byte)TeamType;
                deadEvent.wChairId    = (ushort)ChairID;
                deadEvent.cbAIId      = AIId;
                deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByDecHp;
                //killer
                deadEvent.nCustomData0 = (Int32)TeamType;
                deadEvent.nCustomData1 = (Int32)ChairID;
                deadEvent.nCustomData2 = (Int32)AIId;
                GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
            }
        }
    }
    public void PickupObject(GameObject objToPick, Vector3 pickupPos)
    {
        if (gameObject.GetComponent <PlayerBase>().TeamType == PlayerTeam.PlayerTeamType.HideTeam)  //躲藏的玩家无法执行找操作
        {
            return;
        }
        else
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
            {
                byte Gamestate = CServerItem.get().GetGameStatus();
                if (Gamestate != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
            else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (GameManager.s_singleGameStatus != SocketDefines.GAME_STATUS_PLAY)
                {
                    return;
                }
            }
        }
        if (objToPick == null || this.Hp <= 0)
        {
            return;
        }

        if (this.IsAI)
        {
            //AI没有用射线检测,也就没有距离判断,所以这里要加入

            Vector3 distToPick = objToPick.transform.position - this.transform.position;
            if (distToPick.magnitude > ControlManager.s_MaxTouchCheckDistance)
            {
                Debug.LogError("-----------距离过远!!!!!" + distToPick.magnitude + " " + objToPick.transform.position + " " + this.transform.position);
                //if (objToPick.tag == "Hide" || objToPick.tag == "NormalFurniture") //objToPick.name
                {
                    UIManager.GetInstance().ShowPickupTooFarText();

                    return;
                }
            }
        }

        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
        {
            // Pick event sync
            PlayerEventItem pickEvent = new PlayerEventItem();
            pickEvent.cbTeamType  = (byte)TeamType;
            pickEvent.wChairId    = (ushort)ChairID;
            pickEvent.cbAIId      = (byte)AIId;
            pickEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.Pick;
            GameObjectsManager.GetInstance().PlayerEventList.Add(pickEvent);
        }
        else
        {
            if (IsAI || !ControlManager.isPerson_1st)  //只有第三人称才有拾取动画
            {
                if (IsLocalHuman())
                {
                    EnableModelDisplay();
                }

                PlayPickupAnim();
                //if (_avatarAnimator != null)
                //{
                //    _avatarAnimator.SetBool("Pickup_b", true);
                //}
            }
        }

        PlayerBase pickedPlayer    = null;
        string     strObjToPickTag = null;

        if (this.IsAI)
        {
            //this是AI时,传的objToPick是根节点(PlayerBase都在根节点)

            pickedPlayer = objToPick.GetComponent <PlayerBase>();

            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                Transform model = pickedPlayer.transform.FindChild("Model");
                if (model != null)
                {
                    strObjToPickTag = model.tag;    //tag在model节点
                }
                else
                {
                    Debug.LogError("PickupObject IsAI: model==null");
                }
            }
        }
        else
        {
            //this不是AI时,objToPick如果是躲藏者,传的是Model子节点,否则传的也是根节点

            pickedPlayer = objToPick.transform.parent.GetComponent <PlayerBase>();
            if (pickedPlayer == null)
            {
                //objToPick是场景中的物体,不是躲藏者

                strObjToPickTag = objToPick.tag;
            }
            else
            {
                strObjToPickTag = objToPick.tag;
            }
        }

        if (strObjToPickTag == "Hide" || (strObjToPickTag == "LocalHuman" && pickedPlayer != null && pickedPlayer.TeamType == PlayerTeam.PlayerTeamType.HideTeam)) //objToPick.name
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log(gameObject.name + " touched Hide: " + ObjNamePicked);

            if (IsLocalHuman())
            {
                Debug.Log("I'm touched Hide: " + ObjNamePicked);
            }

            // Check if objToPick is alive
            if (pickedPlayer != null)
            {
                if (pickedPlayer.IsDead())
                {
                    Debug.Log("It was already dead!");
                }
                else
                {
                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                    {
                        if (IsAI && pickedPlayer.m_isStealth == 1) //AI警察不点隐身的躲藏者
                        {
                            return;
                        }
                        //击杀信息
                        if (gameObject.GetComponent <PlayerBase>().IsAI)
                        {
                            //String[] str = gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(gameObject.name + " 找到了: " + pickedPlayer.gameObject.name);
                        }
                        else
                        {
                            String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                            //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                            UIManager.GetInstance().ShowMiddleTips(str[0] + " 找到了: " + pickedPlayer.gameObject.name);
                        }

                        // Heal self
                        AddHP();

                        if (m_hnGameManager != null && IsLocalHuman())  //本地玩家找到躲藏者提示
                        {
                            m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_HIDE_BEFOUNDED);
                        }

                        // make pickedPlayer dead and destroy later
                        pickedPlayer.MakeDead();
                        //if (!pickedPlayer.IsAI)
                        //{
                        //    PlayerChairIDOfPickedDead = pickedPlayer.ChairID;
                        //}
                    }
                    else
                    {
                        //Debug.LogWarning("+++++++++++++++++ " + pickedPlayer.m_isStealth + " " + IsAI);
                        if (pickedPlayer.m_isStealth == 1 && IsAI)  //AI警察不点隐身的躲藏者
                        {
                            //Debug.LogWarning("----------玩家隐身中");
                            return;
                        }
                        // Dead event sync
                        PlayerEventItem deadEvent = new PlayerEventItem();
                        deadEvent.cbTeamType  = (byte)pickedPlayer.TeamType;
                        deadEvent.wChairId    = (ushort)pickedPlayer.ChairID;
                        deadEvent.cbAIId      = pickedPlayer.AIId;
                        deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByPicked;
                        //killer
                        deadEvent.nCustomData0 = (Int32)this.TeamType;
                        deadEvent.nCustomData1 = (Int32)this.ChairID;
                        deadEvent.nCustomData2 = (Int32)this.AIId;
                        GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
                    }

                    //警察找到躲藏者加分
                    GameScore += 50;
                }
            }
        }
        else if (strObjToPickTag == "NormalFurniture")
        {
            ObjNamePicked = objToPick.transform.parent.name;
            Debug.Log("touched normal furniture: " + ObjNamePicked);

            UIManager.GetInstance().ShowPickupWrongUI(pickupPos); //hit.point

            if (m_hnGameManager != null && IsLocalHuman())        //本地玩家点击错误物体提示
            {
                m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_PickObj);
            }
            if (IsLocalHuman())
            {
                UIManager.GetInstance().ShowMiddleTips("该物品不是玩家!");
            }
            if (UIManager.TimeLeft <= 45)   //剩余时间小于45秒时,警察无敌
            {
                return;
            }

            // Hurt self
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                DecHP();
            }
            else
            {
                PlayerEventItem decHpEvent = new PlayerEventItem();
                decHpEvent.cbTeamType  = (byte)this.TeamType;
                decHpEvent.wChairId    = (ushort)this.ChairID;
                decHpEvent.cbAIId      = (byte)this.AIId;
                decHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DecHp;
                GameObjectsManager.GetInstance().PlayerEventList.Add(decHpEvent);
            }
        }
        else if (strObjToPickTag == "Tagger")
        {
            ObjNamePicked = pickedPlayer.gameObject.name;
            Debug.Log("touched Tagger: " + ObjNamePicked);
        }
        else
        {
            Debug.LogError("PickupObject: incorrect objToPickTag=" + strObjToPickTag);
        }


        //判断是否团灭
        int taggerCount = 0;
        int hideCount   = 0;

        for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++)
        {
            PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
            if (team == null)
            {
                continue;
            }
            for (int i = 0; i < team.GetPlayerNum(); i++)
            {
                PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i);
                if (playerBase != null && playerBase.Hp != 0)
                {
                    if (teamType == PlayerTeam.PlayerTeamType.TaggerTeam)
                    {
                        taggerCount++;
                    }
                    else if (teamType == PlayerTeam.PlayerTeamType.HideTeam)
                    {
                        hideCount++;
                    }
                }
            }
        }
        if (taggerCount == 0 || hideCount == 0)
        {
            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
            {
                if (UIManager.GetInstance() != null)
                {
                    UIManager.GetInstance().ShowWinOrLose();
                }
                m_hnGameManager.StopSingleGame();
                m_hnGameManager.PlayAgainSingleGame();
            }
        }
    }
Ejemplo n.º 3
0
    //void Update()
    //{

    //}
    private void OnCollisionEnter(Collision collision)
    {
        //if (collision.collider.tag == "Hide" || collision.collider.tag == "NormalFurniture")
        {
            Debug.Log("---------Boom!!!!!!!!!!!!");
            PlayerTeam team      = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
            Human      localHuam = GameObjectsManager.GetInstance().GetLocalHuman();
            if (team != null)
            {
                for (int i = 0; i < team.GetPlayerNum(); i++)
                {
                    PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i);
                    if (playerBase != null)
                    {
                        if (Math.Abs(this.gameObject.transform.position.x - playerBase.gameObject.transform.position.x) < 5 &&
                            Math.Abs(this.gameObject.transform.position.y - playerBase.gameObject.transform.position.y) < 5 &&
                            Math.Abs(this.gameObject.transform.position.z - playerBase.gameObject.transform.position.z) < 5)
                        {
                            if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                            {
                                playerBase.MakeDead();

                                //playerBase.PlayerChairIDOfPickedDead = playerBase.ChairID;
                                //Debug.Log(temp.name + "击杀了: " + playerBase.gameObject.name);
                                var kernel = (GameScene)CServerItem.get().GetClientKernelSink();
                                if (kernel != null)
                                {
                                    String[] str = kernel.getPlayerByChairID(HNGameManager.m_iLocalChairID).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                                    UIManager.GetInstance().ShowMiddleTips(str[0] + "击杀了: " + playerBase.gameObject.name);
                                    localHuam.AddHP();
                                }
                            }
                            else
                            {
                                // Dead event sync
                                PlayerEventItem deadEvent = new PlayerEventItem();
                                deadEvent.cbTeamType  = (byte)playerBase.TeamType;
                                deadEvent.wChairId    = (ushort)playerBase.ChairID;
                                deadEvent.cbAIId      = playerBase.AIId;
                                deadEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DeadByBoom;
                                //killer
                                deadEvent.nCustomData0 = (Int32)localHuam.TeamType;
                                deadEvent.nCustomData1 = (Int32)localHuam.ChairID;
                                deadEvent.nCustomData2 = (Int32)localHuam.AIId;
                                GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent);
                            }
                        }
                    }
                }
            }

            //炸弹特效
            GameObject loadObj = Resources.Load("Player/Prefabs/Invenrtory/FX Comic Explosion 1 Large BOOM") as GameObject;
            GameObject BoomFX  = Instantiate(loadObj);
            BoomFX.transform.position = gameObject.transform.position;
            Destroy(this.gameObject);

            if (hnGameManager != null)
            {
                hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_Boom);
            }

            // Boom event sync
            PlayerEventItem boomEvent = new PlayerEventItem();
            boomEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
            boomEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
            boomEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
            boomEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.Boom;
            boomEvent.nCustomData0 = (Int32)gameObject.transform.position.x;
            boomEvent.nCustomData1 = (Int32)gameObject.transform.position.y;
            boomEvent.nCustomData2 = (Int32)gameObject.transform.position.z;
            GameObjectsManager.GetInstance().PlayerEventList.Add(boomEvent);
        }
    }
Ejemplo n.º 4
0
    //检测道具使用
    private void CheckInventoryUse()
    {
        Human localHuman = null;

        if (GameObjectsManager.GetInstance() != null)
        {
            localHuman = GameObjectsManager.GetInstance().GetLocalHuman();
        }
        if (localHuman != null && localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam)
        {
            if (ListInventory.Count != 0 && ListInventory != null)
            {
                for (int i = 0; i < ListInventory.Count; i++)
                {
                    if (ListInventory[i].obj != null && !ListInventory[i].bUsed)
                    {
                        String[] str = ListInventory[i].obj.name.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                        switch (str[1])
                        {
                        case "Search":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
                                PlayerBase playerBase = null;
                                if (team.GetPlayerNum() != 0 && localHuman.Hp != 0)
                                {
                                    int count = 0;
                                    while (true)
                                    {
                                        int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum());
                                        playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index);
                                        if (playerBase.Hp > 0)
                                        {
                                            break;
                                        }
                                        if (count > 50)      //防止没有存活导致死循环
                                        {
                                            playerBase = null;
                                            break;
                                        }
                                        count++;
                                    }
                                    if (playerBase != null)
                                    {
                                        InventoryObjItem temp = ListInventory[i];
                                        temp.bTaked      = true;
                                        ListInventory[i] = temp;

                                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                        {
                                            InventoryRemove(i);
                                            UIManager.GetInstance().ShowMiddleTips("有一个玩家变成了" + playerBase.gameObject.name);
                                        }

                                        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                        {
                                            // GetInventory event sync
                                            PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                            getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                            getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                            getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                            getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                            getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                            getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Search;
                                            GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                        }
                                    }
                                }
                            }
                            break;

                        case "Boom":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (!HaveBoom && localHuman.Hp != 0)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        HaveBoom = true;
                                        InventoryRemove(i);
                                        //GameSceneUIHandler.ShowLog("你拾取了炸弹!!!");
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了炸弹!!!");
                                        ControlManager.GetInstance().BoomButton.gameObject.SetActive(true);
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Boom;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                    }
                                }
                            }
                            break;

                        case "Blood":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (localHuman.Hp < PlayerBase.MaxHp && localHuman.Hp != 0)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        localHuman.Hp++;      //生命增加
                                        InventoryRemove(i);
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了生命道具!!!");
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Blood;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);

                                        // AddHp event
                                        PlayerEventItem addHpEvent = new PlayerEventItem();
                                        addHpEvent.cbTeamType  = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        addHpEvent.wChairId    = (ushort)HNGameManager.m_iLocalChairID;
                                        addHpEvent.cbAIId      = HNMJ_Defines.INVALID_AI_ID;
                                        addHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.AddHp;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(addHpEvent);
                                    }
                                }
                            }
                            break;

                        case "Speed":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                if (ControlManager.GetInstance()._etcJoystickL.axisX.speed == ControlManager.s_speed && localHuman.Hp != 0 && localHuman.m_isGrounded)
                                {
                                    InventoryObjItem temp = ListInventory[i];
                                    temp.bTaked      = true;
                                    ListInventory[i] = temp;

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                    {
                                        InventoryRemove(i);
                                        UIManager.GetInstance().ShowMiddleTips("你拾取了加速道具!!!");
                                        ControlManager.GetInstance().SpeedChange(ControlManager.s_speed * 3);
                                        StartCoroutine(InventorySpeed());
                                    }

                                    if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                    {
                                        // GetInventory event sync
                                        PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                        getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                        getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                        getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                        getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                        getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                        getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Speed;
                                        GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                    }
                                }
                            }
                            break;

                        case "Key":
                            if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 &&
                                Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 &&
                                !ListInventory[i].bTaked)
                            {
                                //Debug.Log("--------Key1");
                                if (localHuman.transform.FindChild("Inventory_Arrow") == null && localHuman.Hp != 0)
                                {
                                    PlayerTeam team       = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam);
                                    PlayerBase playerBase = null;
                                    if (team.GetPlayerNum() != 0)
                                    {
                                        int count = 0;
                                        while (true)
                                        {
                                            int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum());
                                            playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index);
                                            if (playerBase.Hp > 0)
                                            {
                                                break;
                                            }
                                            if (count > 50)      //防止没有存活导致死循环
                                            {
                                                playerBase = null;
                                                localHuman = null;
                                                break;
                                            }
                                            count++;
                                        }
                                        if (playerBase != null && localHuman != null)
                                        {
                                            if (DirectionKey.GetInstance != null)
                                            {
                                                InventoryObjItem temp = ListInventory[i];
                                                temp.bTaked      = true;
                                                ListInventory[i] = temp;

                                                if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame)
                                                {
                                                    DirectionKey.GetInstance.Deal(localHuman.gameObject, playerBase.gameObject);
                                                    InventoryRemove(i);
                                                    UIManager.GetInstance().ShowMiddleTips("你拾取了钥匙道具!!!");
                                                }

                                                if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu)
                                                {
                                                    // GetInventory event sync
                                                    PlayerEventItem getInventoryEvent = new PlayerEventItem();
                                                    getInventoryEvent.cbTeamType   = (byte)GameObjectsManager.s_LocalHumanTeamType;
                                                    getInventoryEvent.wChairId     = (ushort)HNGameManager.m_iLocalChairID;
                                                    getInventoryEvent.cbAIId       = HNMJ_Defines.INVALID_AI_ID;
                                                    getInventoryEvent.cbEventKind  = (byte)PlayerBase.PlayerEventKind.GetInventory;
                                                    getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id;
                                                    getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Key;
                                                    GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }
    }