Beispiel #1
0
    public static void Send_Damage(int m_iPlayerID, int damage)
    {
        OnGame_HP xmsg = new OnGame_HP();

        xmsg.m_iPlayerID = m_iPlayerID;
        xmsg.hpValues    = damage;

        byte[] msgBytes;
        using (MemoryStream stream = new MemoryStream())
        {
            ProtoBuf.Serializer.Serialize(stream, xmsg);
            msgBytes = stream.ToArray();
        }

        OnGame ongame = new OnGame();

        ongame.gameData       = msgBytes;
        ongame.m_iRoomID      = Network.Myplayer.m_iRoomID;
        ongame.m_iTableID     = Network.gameInfo_sitdown.m_iTableID;
        ongame.m_icmd         = (int)GameID.Damage;
        ongame.gameDataLength = msgBytes.Length;

        byte[] res;
        using (MemoryStream stream = new MemoryStream())
        {
            ProtoBuf.Serializer.Serialize(stream, ongame);
            res = stream.ToArray();
        }

        ClientHeader header = new ClientHeader();

        header = GetHeader(MessageID.CMD_PLAYGAME, res.Length);
        connector.SendMsg(header, res);
    }
Beispiel #2
0
    public static void CMD_PUSHGAMEDATA(NetworkMsg msg)
    {
        Res_game xmsg = new Res_game();

        using (MemoryStream stream = new MemoryStream(msg.data))
        {
            xmsg = ProtoBuf.Serializer.Deserialize <Res_game>(stream);
        }

        //Debug.Log("xue****sdid****:" + xmsg.m_iRoomID + ":" + xmsg.m_iTableID + ":" + xmsg.m_icmd + ":" + Enum.GetName(typeof(GameID), xmsg.m_icmd) + ":------" + Network.xue++);

        if (xmsg.m_icmd == (int)GameID.Ready)
        {
            Res_ready res = new Res_ready();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_ready>(stream);
            }
            Network.battleinfo.m_iMapIndex = res.m_iMapID;
#if xue
            Network.battleinfo.m_eBattleType = BattleType.NORMAL_PVP;
            Network.battleinfo.m_iTimeLimit  = GameDefine.INFINITE;
#endif
            int           ma       = res.m_iSeatSum;
            List <string> username = res.m_strName;
            List <int>    teamid   = res.m_iTeamID;
            List <int>    playerid = res.m_aiSeatPlayer;

            for (int i = 0; i < ma; i++)
            {
                PlayerInfo p1 = new PlayerInfo();
                p1.m_strName    = username[i];
                p1.m_iPlayerUID = playerid[i];
                p1.m_iTeam      = teamid[i];
                Network.Pid_Tid.Add(playerid[i], teamid[i]);
#if xue
                //Debug.Log("xue*****************:" + ":name:" + username[i] + ":playerid:" + playerid[i] + "teamid" + teamid[i] + "mapid:" + res.m_iMapID);
#endif
                Network.battleinfo.m_listPlayers.Add(p1);

                if (Network.playerid == playerid[i])
                {
                    Network.playerindex = i;
                }
                else
                {
                    Network.playerid2 = playerid[i];
                }
            }

            CMD_MAP_MATCH_result = (int)ResultID.result_enter_game;
        }
        else if (xmsg.m_icmd == (int)GameID.Ready_Notify)
        {
            Notify_ready res = new Notify_ready();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Notify_ready>(stream);
            }
            Network.seat_binary = (Network.seat_binary) | (1 << (res.m_iSeat));
            Network.GameReady_pic[res.m_iSeat] = res.m_iPic;
            Network.seat_res++;
        }
        else if (xmsg.m_icmd == (int)GameID.Choose)
        {
            Res_choose res = new Res_choose();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_choose>(stream);
            }

            Network.battleinfo.m_iRoundLimit = res.m_iRound;
#if xue
            Network.battleinfo.m_eBattleType = BattleType.NORMAL_PVP;
            Network.battleinfo.m_iTimeLimit  = GameDefine.INFINITE;
#endif
            int        ma     = Network.battleinfo.m_listPlayers.Count;
            List <int> tankid = res.m_iTankID;


            for (int i = 0; i < ma; i++)
            {
                Network.battleinfo.m_listPlayers[i].m_iInstructionID = tankid[i];
                Network.battleinfo.m_listPlayers[i].m_iHP            = GameGOW.Get().DataMgr.GetCharacterInstructionByID(tankid[i]).m_iHP;
                Network.battleinfo.m_listPlayers[i].m_iMoveEnergy    = GameGOW.Get().DataMgr.GetCharacterInstructionByID(tankid[i]).m_iMoveEnergy;
                Network.battleinfo.m_listPlayers[i].m_iAddEnergy     = GameGOW.Get().DataMgr.GetCharacterInstructionByID(tankid[i]).m_iAddEnergy;

#if xue
                //Debug.Log("xue*****************:tankid:" + tankid[i]);
#endif
            }

            CMD_MAP_MATCH_result = (int)ResultID.result_choose_done;
        }
        else if (xmsg.m_icmd == (int)GameID.Choose_Notify)
        {
            Notify_choose res = new Notify_choose();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Notify_choose>(stream);
            }

            //Debug.Log("xue^^^^^^^^^^^^^^^^^  " + res.m_iSeat + ":" + res.m_iTankID + "         " + Network.xue++);
            if (res.m_iTankID < 0)
            {
                Network.GameChoose_num[res.m_iSeat + 1] = (-res.m_iTankID) + 100;
            }
            else
            {
                Network.GameChoose_num[res.m_iSeat + 1] = res.m_iTankID;
                Network.GameChooseStatus = -1;
            }
        }
        else if (xmsg.m_icmd == (int)GameID.Load)
        {
            Res_loading res = new Res_loading();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_loading>(stream);
            }

            int index = 1;
            for (int i = 0; i < Network.battleinfo.m_listPlayers.Count; i++)
            {
                if (Network.battleinfo.m_listPlayers[i].m_iPlayerUID == res.m_iOptID)
                {
                    index = i;
                    break;
                }
            }

            Network.GameLoading_num[index + 1] = res.m_ilen;

            if (res.m_ilen == 200)
            {
                Network.GameLoading = 10;
            }
            else if (Network.playerid == res.m_iOptID)
            {
                Network.GameLoading++;
            }
        }
        else if (xmsg.m_icmd == (int)GameID.Move)
        {
            Res_move res = new Res_move();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_move>(stream);
            }

            CharacterLogic m_pCurrentPlayer = GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iOptID);

            int type = res.m_iDirection;
            //var m_pCharacterLogic = GameGOW.Get().BattleMgr.m_pCurrentPlayer;

            m_pCurrentPlayer.OnDirectionKeyChanged(type);

            if (type == 0 || res.m_iIntervalTime == 1)
            {
                Vector2 v2 = new Vector2(res.m_iPosX, res.m_iPosY);
                m_pCurrentPlayer.Position = v2;
            }
        }
        else if (xmsg.m_icmd == (int)GameID.Round)
        {
            Res_round res = new Res_round();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_round>(stream);
            }
            Network.Round         = res.m_iRound;
            Network.Wind          = res.m_iWind;
            Network.next_playerid = res.m_iOptID;

            if (res.m_iOptID != Network.playerid)
            {
                EventDispatcher.DispatchEvent("EventHideBattleJoyStickUI", null, null);
            }

            //技能冷却

            /*
             * if (Network.playerid == GameGOW.Get().BattleMgr.m_stBattleInfo.m_listPlayers[GameGOW.Get().BattleMgr.m_iCurrentRoundPlayerIndex].m_iPlayerUID)
             * {
             *  if (SkillManager.CurrentSkillId != 0)
             *  {
             *      Network.Skill_CD[SkillManager.CurrentSkillId]--;
             *  }
             *
             *  for (int i = 0; i < 20; i++)
             *  {
             *      if (i == SkillManager.CurrentSkillId)
             *      {
             *          if (Network.Skill_CD[i] == -1)
             *          {
             *              Network.Skill_CD[i] = 2;
             *          }
             *          continue;
             *      }
             *      else if (Network.Skill_CD[i] > 0)
             *      {
             *          Network.Skill_CD[i]--;
             *      }
             *      //Debug.Log("xue^^^^^" + i + "   " + Network.Skill_CD[i] + "   " + Network.xue++);
             *  }
             * }
             */
            SkillManager.CurrentSkillId = 0;

            if (res.m_iOptID == Network.playerid)
            {
                EventDispatcher.DispatchEvent("EventShowBattleJoyStickUI", null, null);
            }
            Network.InitRound();

            GameGOW.Get().BattleMgr.ChangeController_Quick();
        }
        else if (xmsg.m_icmd == (int)GameID.Attach)
        {
            Res_attack res = new Res_attack();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_attack>(stream);
            }

            int   speed = res.m_iPower;
            float angle = res.m_iAngle;

            SkillManager.CurrentSkillId = res.m_iBombType;

            CharacterLogic m_pCurrentPlayer = GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iOptID);

            //var m_pCharacterLogic = GameGOW.Get().BattleMgr.m_pCurrentPlayer;

            /**
             * m_pCurrentPlayer.OnFunctionKeyDown(0x11);
             *
             * GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iBombSpeed = speed;
             * GameGOW.Get().BattleMgr.m_pCurrentPlayer.m_pInfo.m_iFireAngle = angle;
             * Network.Attacking = 2;
             * m_pCurrentPlayer.OnFunctionKeyUp(0x11);
             **/
            Network.Round = res.m_iRound;

            m_pCurrentPlayer.m_pInfo.m_iBombSpeed = speed;
            m_pCurrentPlayer.m_pInfo.m_iFireAngle = angle;
            Network.Attacking = 2;

            m_pCurrentPlayer.m_pInfo.m_bInBombSpeedUp = false;
            GameGOW.Get().PlaySkill((SkillManager.SkillType)SkillManager.CurrentSkillId, m_pCurrentPlayer, Network.attackbasedata);
        }
        else if (xmsg.m_icmd == (int)GameID.Boom)
        {
            Res_Boom res = new Res_Boom();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_Boom>(stream);
            }

            float x = res.m_ix;
            float y = res.m_iy;

            SounderManager.Get().FunNet(res.BombID, res.Kind, x, y);

            /*
             * GameGOW.Get().BombMgr.GetBombByUID(res.BombID).Boom_pos = new Vector2(x, y);
             * Debug.Log("xue^^^^" + res.BombID + "   " + GameGOW.Get().BombMgr.GetBombByUID(res.BombID).Boom_pos.x + "    " +
             *  GameGOW.Get().BombMgr.GetBombByUID(res.BombID).Boom_pos.y + "    " + Network.xue++);
             * if (res.Kind == false)
             * {
             *  GameGOW.Get().BombMgr.GetBombByUID(res.BombID).Net_Boom_Status = 1;
             *  //BaseBomb.Net_Boom_Status = 1;
             * }
             * else
             * {
             *  GameGOW.Get().BombMgr.GetBombByUID(res.BombID).Net_Boom_Status = 2;
             *  //BaseBomb.Net_Boom_Status = 2;
             * }
             */
        }
        else if (xmsg.m_icmd == (int)GameID.Damage)
        {
            OnGame_HP res = new OnGame_HP();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <OnGame_HP>(stream);
            }

            //执行掉血
            DamageType     eType     = DamageType.NORMAL;
            CharacterLogic dstObject = GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iPlayerID);
            int            hp        = dstObject.m_pInfo.m_iHP;
            float          DD        = res.hpValues;
            hp -= (int)DD;
            if (hp > dstObject.m_pInfo.m_iMaxHP)
            {
                hp = dstObject.m_pInfo.m_iMaxHP;
            }
            dstObject.OnDamage(hp, res.hpValues, eType);
        }
        else if (xmsg.m_icmd == (int)GameID.Die)
        {
            Notify_disconnect res = new Notify_disconnect();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Notify_disconnect>(stream);
            }
            GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iOptID).Dead();
        }
        else if (xmsg.m_icmd == (int)GameID.Disconnect)
        {
            Notify_disconnect res = new Notify_disconnect();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Notify_disconnect>(stream);
            }
            //处理掉线
        }
        else if (xmsg.m_icmd == (int)GameID.Over)
        {
            Res_over res = new Res_over();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Res_over>(stream);
            }

            if (res.m_iOverStatus == (int)GameResID.game_result_win)
            {
                GameGOW.Get().Winner_Id = 2;
                GameGOW.Get().BattleMgr.StopBattle();
            }
            else if (res.m_iOverStatus == (int)GameResID.game_result_fail)
            {
                GameGOW.Get().Winner_Id = 1;
                GameGOW.Get().BattleMgr.StopBattle();
            }
            else if (res.m_iOverStatus == (int)GameResID.game_result_exception)
            {
                EventDispatcher.DispatchEvent("EventBackHost", null, null);
            }
            else
            {
                GameGOW.Get().Winner_Id = 1;
                GameGOW.Get().BattleMgr.StopBattle();
            }

            Network.addgold    = res.m_iGetGold;
            Network.addexp     = res.m_iGetExp;
            Network.adddiamond = res.m_iGetDiamond;

            Network.gold      += Network.addgold;
            Network.exp       += Network.addexp;
            Network.diamond   += Network.adddiamond;
            Add_Friend_List    = new Dictionary <string, int>();
            Invite_Friend_List = new Dictionary <string, int>();
        }
        else if (xmsg.m_icmd == (int)GameID.Quit)
        {
            GameGOW.Get().BattleMgr.m_bIsInBattle = false;
        }
        else if (xmsg.m_icmd == (int)GameID.Chat)
        {
            Notify_chat res = new Notify_chat();
            using (MemoryStream stream = new MemoryStream(xmsg.gameData))
            {
                res = ProtoBuf.Serializer.Deserialize <Notify_chat>(stream);
            }

            if (res.m_iChatID >= 1000 && res.m_iChatID < 2000)
            {
                var info = GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iOptID).m_pInfo;
                info.EmojiID = res.m_iChatID;
            }
            else
            {
                LuaHelper.Play_Sound(2, "sound/girlsound/girl_0" + (res.m_iChatID - 2000));
                var info = GameGOW.Get().CharacterMgr.GetCharacterByUid(res.m_iOptID).m_pInfo;
                info.MessageID = res.m_iChatID;
            }
        }
    }