public void SetSkillInfo(Skill_data skill)
 {
     _current_skill_info = skill;
 }
    public static void ReceiveMessage()
    {
        if (ClientSocket.Poll(-1, SelectMode.SelectRead))
        {
            byte[] head = new byte[4];
            ClientSocket.Receive(head);
            int n = TransformController.BytesToInt(head, 0);
            for (int i = 0; i < n; i++)
            {
                if (ClientSocket.Poll(-1, SelectMode.SelectRead))
                {
                    ClientSocket.Receive(head);
                    //for (int j = 0; j < 4; j++) Debug.Log(j + "   " + head[j]);
                    int    bodyLength = TransformController.BytesToInt(head, 0);
                    byte[] body       = new byte[bodyLength];
                    if (ClientSocket.Poll(-1, SelectMode.SelectRead))
                    {
                        ClientSocket.Receive(body);
                        Msg recv = TransformController.Deserialize <Msg>(body);
                        clientFrame = recv.Frame;

                        //Debug.Log("Optype = " + recv.Optype);
                        //Debug.Log("Username = "******"clientFrame = " + clientFrame);

                        int playerId = PlayerMap[recv.Username];
                        //Debug.Log("username = "******"playerid = " + playerId);
                        //Debug.Log("playerid hearusername = "******"username hereplayerid = " + playerMap[recv.Username]);
                        if ((recv.Optype & (1 << 3)) != 0)    // Move
                        {
                            Vector3 move = new Vector3(recv.Posx, recv.Posy, recv.Posz);

                            PlayerPos[playerId] += move;
                            //Debug.Log(recv.Username + "   " + move);
                            //Vector3 trans = new Vector3(forward.x, forward.y, forward.z);
                            //Debug.Log(nowPos + "   " + trans);
                            //IsWalking[playerId] = (recv.Posx != 0) || (recv.Posz != 0);
                            IsWalking[playerId] = !Mathf.Approximately(recv.Posx, 0f) || !Mathf.Approximately(recv.Posz, 0f);
                            //Debug.Log(recv.Posx + "   " + recv.Posz + (!Mathf.Approximately(recv.Posx, 0f) || !Mathf.Approximately(recv.Posz, 0f)));
                        }


                        for (int j = 0; j < skills.skill_config_list.Count; j++)
                        {
                            if (clientFrame < SkillAnimation[playerId][j])
                            {
                                IsSkill[playerId][j] = true;
                            }
                            else
                            {
                                IsSkill[playerId][j] = false;
                            }
                        }
                        bool nowState = false;
                        for (int j = 0; j < 2; j++)
                        {
                            nowState |= IsSkill[playerId][j];
                        }

                        if (nowState == false)
                        {
                            if (clientFrame >= SkillNextFrame[playerId][0])    // Skill0
                            //Debug.Log(recv.Username);
                            {
                                Skill_data skill0 = skills.skill_config_list[0];
                                if ((recv.Optype & (1 << 4)) != 0)
                                {
                                    //List<int> skillFrame = skillAttackFrame[playerId];
                                    List <int> skillFrame = skill0.skill_attack_frame;
                                    foreach (int x in skillFrame)
                                    {
                                        //Skill newSkill = new Skill(playerId, clientFrame + x - 1, playerPos[playerId], skillAreaType[playerId], skillRadius[playerId], skillDamage[playerId]);
                                        Skill newSkill = new Skill(playerId, clientFrame + x - 1, PlayerPos[playerId], skill0.skill_area_type, skill0.skill_radius, skill0.skill_damage);
                                        AllSkillRelease.Add(newSkill);
                                    }
                                    //skillNextFrame[playerId] = clientFrame + skillCoolDown[playerId] - 1;
                                    SkillNextFrame[playerId][0] = clientFrame + skill0.skill_cool_down - 1;
                                    //skillAnimation[playerId] = clientFrame + skillTotFrame[playerId] - 1;
                                    SkillAnimation[playerId][0] = clientFrame + skill0.skill_tot_frame - 1;
                                    IsSkill[playerId][0]        = true;
                                }
                            }
                            if (clientFrame >= SkillNextFrame[playerId][1])   // Skill1
                            {
                                Skill_data skill1 = skills.skill_config_list[1];
                                if ((recv.Optype & (1 << 5)) != 0)
                                {
                                    List <int> skillFrame = skill1.skill_attack_frame;

                                    /*foreach (int x in skillFrame) {
                                     *  Skill newSkill = new Skill(playerId, clientFrame + x - 1, PlayerPos[playerId], skill1.skill_area_type, skill1.skill_radius, skill1.skill_damage);
                                     *  AllSkillRelease.Add(newSkill);
                                     * }*/
                                    SkillNextFrame[playerId][1] = clientFrame + skill1.skill_cool_down - 1;
                                    SkillAnimation[playerId][1] = clientFrame + skill1.skill_tot_frame - 1;
                                    IsSkill[playerId][1]        = true;
                                }
                            }

                            for (int j = AllSkillRelease.Count - 1; j >= 0; j--)
                            {
                                Skill nowSkill = AllSkillRelease[j];
                                if (nowSkill.attackFrame == clientFrame)
                                {
                                    for (int k = 0; k < PlayerName.Count; k++)
                                    {
                                        int nowPlayerId = PlayerMap[PlayerName[k]];
                                        //Debug.Log("nowPlayerId = " + nowPlayerId + ", nowplayerName = " + playerName[nowPlayerId]);
                                        //Debug.Log("playerId = " + playerId + ", playerName = " + recv.Username);
                                        //Debug.Log("releasePosition = " + nowSkill.releasePosition + ", playerPosition = " + playerPos[nowPlayerId]);
                                        if (nowPlayerId != nowSkill.releasePlayerIndex && IsDie[nowPlayerId] == false)
                                        {
                                            //Debug.Log("dddddd");
                                            bool releaseTag = false;
                                            if (nowSkill.areaType == 1 && (nowSkill.releasePosition - PlayerPos[nowPlayerId]).sqrMagnitude <= nowSkill.radius)
                                            {
                                                releaseTag = true;
                                            }
                                            if (releaseTag == true)
                                            {
                                                NowHealthPoint[nowPlayerId] -= nowSkill.damage;
                                                if (NowHealthPoint[nowPlayerId] < 0)
                                                {
                                                    NowHealthPoint[nowPlayerId] = 0;
                                                    IsDie[nowPlayerId]          = true;
                                                }
                                            }
                                        }
                                    }
                                    AllSkillRelease.Remove(AllSkillRelease[j]);
                                }
                            }
                        }
                    }
                }
            }
        }
    }