public void AddState(StateSkill skill)
        {
            skill.SetStateInfo(this);
            this.playerCardState.Add(skill);
            LogsSystem.Instance.Print(string.Format("英雄 {0} 获得了状态 {1} ,持续 {2} 回合", this.cardName, skill.skillName, skill.GetRemainRounds()), LogLevel.GAMEDETAIL);

            //通过技能的USE操作添加
            //TcpServer.Instance.GetTCPDataSender().SendStateOperate(skill, this, OperateStateData.StateOperateCode.AddState, cardOwnerPostion, cardRoom);
        }
 /// <summary>
 /// 附加状态
 /// </summary>
 public void AppendState(StateSkill state)
 {
     this.playerCardState.Add(state);
     LogsSystem.Instance.Print(string.Format("卡片{0}获得了状态{1}", this.cardName, state.skillName), LogLevel.GAMEDETAIL);
 }
        /// <summary>
        /// 移除状态
        /// </summary>
        public void RemoveState(StateSkill skill)
        {
            if (playerCardState.Contains(skill))
            {
                this.playerCardState.Remove(skill);
                LogsSystem.Instance.Print(string.Format("英雄 {0} 移除了状态 {1}", this.cardName, skill.skillName), LogLevel.GAMEDETAIL);

                //向服务器请求去除状态
                TcpServer.Instance.GetTCPDataSender().SendStateOperate(skill, this, OperateStateData.StateOperateCode.RemoveState, cardOwnerPostion, cardRoom);
            }
            else
            {
                LogsSystem.Instance.Print("卡片上不具备该技能:" + skill.skillName, LogLevel.WARN);
            }
        }
        /// <summary>
        /// 向客户端发送状态修改操作的请求
        /// </summary>
        public void SendStateOperate(StateSkill skill, PlayerCard operateCard, int operateType, int operatePosition, GameRoom gameRoom)
        {
            OperateStateData detail = new OperateStateData();
            detail.skillID = skill.skillID;
            detail.stateOperate = operateType;
            detail.ownerCardUUID = operateCard.cardUUID;
            detail.appendData = skill.GenerateSkillAppendData();//将技能生成的数据附加值传递
            switch (operateCard.GetCardOwnerPosition())
            {
                case 0://A
                    {
                        detail.operatePlayerPosition = 0;
                        detail.operatePlayerUid = gameRoom.playerSocketA.playerInfo.playerUid;
                        detail.operatePlayerUUID = gameRoom.playerSocketA.playerInfo.playerUUID;
                        break;
                    }
                case 1://B
                    {
                        detail.operatePlayerPosition = 1;
                        detail.operatePlayerUid = gameRoom.playerSocketB.playerInfo.playerUid;
                        detail.operatePlayerUUID = gameRoom.playerSocketB.playerInfo.playerUUID;
                        break;
                    }
                default:
                    {
                        LogsSystem.Instance.Print("错误:卡片拥有者的位置出现错误:" + operateCard.GetCardOwnerPosition(), LogLevel.WARN);
                        break;
                    }
            }

            GameData data = new GameData();
            data.returnCode = ReturnCode.Success;
            data.roomID = gameRoom.roomID;
            data.operateCode = OperateCode.OperateState;
            data.operateData = JsonCoding<OperateStateData>.encode(detail);

            gameRoom.SendOperateToAllPlayer(data);
        }