Ejemplo n.º 1
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();
            //pkg.ClearContext();
            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {

                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked"));

                return 0;
            }
            int id = packet.ReadInt();
            int senderID;
            using (PlayerBussiness db = new PlayerBussiness())
            {
                if (db.DeleteMail(client.Player.PlayerCharacter.ID, id, out senderID))
                {
                    client.Out.SendMailResponse(senderID,eMailRespose.Receiver);
                    pkg.WriteBoolean(true);
                }
                else
                {
                    pkg.WriteBoolean(false);
                }
            }

            client.Out.SendTCP(pkg);

            return 0;
        }
Ejemplo n.º 2
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            int user_id = packet.ReadInt();
            //PlayerInfo info = client.Player.PlayerCharacter;

            return 0;
        }
Ejemplo n.º 3
0
 public override void OnRecvPacket(Game.Base.Packets.GSPacketIn pkg)
 {
     if (pkg.Code == 0x03)  //system_message
     {
         Console.WriteLine(pkg.ReadString());
     }
 }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int banUserID = packet.ReadInt();
            bool isBanChat = packet.ReadBoolean();
            int userID = 0;
            string userName = "";
            bool result = false;
            string msg = "ConsortiaIsBanChatHandler.Failed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                if (db.UpdateConsortiaIsBanChat(banUserID, client.Player.PlayerCharacter.ConsortiaID, client.Player.PlayerCharacter.ID, isBanChat, ref userID, ref userName, ref msg))
                {
                    msg = "ConsortiaIsBanChatHandler.Success";
                    result = true;
                    GameServer.Instance.LoginServer.SendConsortiaBanChat(userID, userName, client.Player.PlayerCharacter.ID, client.Player.PlayerCharacter.NickName,isBanChat);
                }
            }
            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 5
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            int activeID = packet.ReadInt();
            string awardID = packet.ReadString();
            string msg = "ActivePullDownHandler.Fail";
            using (ActiveBussiness db = new ActiveBussiness())
            {
                int result = db.PullDown(activeID, awardID, client.Player.PlayerCharacter.ID,ref msg);
                if (result == 0)
                {
                    client.Out.SendMailResponse(client.Player.PlayerCharacter.ID,eMailRespose.Receiver);
                }
                if (msg != "ActiveBussiness.Msg0")
                {
                    client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation(msg));
                }
                else
                {
                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation(msg));

                }
            }

            return 0;
        }
Ejemplo n.º 6
0
 //0友好,1黑名单
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     var im_cmd = packet.ReadByte();
     switch (im_cmd)
     {
         case (byte)IMPackageType.FRIEND_ADD:
             HandleFRIEND_ADD(packet);
             break;
         case (byte)IMPackageType.FRIEND_REMOVE:
             break;
         case (byte)IMPackageType.FRIEND_UPDATE:
             break;
         case (byte)IMPackageType.FRIEND_STATE:
             break;
         case (byte)IMPackageType.ONS_EQUIP:
             break;
         case (byte)IMPackageType.FRIEND_RESPONSE:
             break;
         case (byte)IMPackageType.SAME_CITY_FRIEND:
             break;
         case (byte)IMPackageType.ADD_CUSTOM_FRIENDS:
             break;
         case (byte)IMPackageType.ONE_ON_ONE_TALK:
             break;
     }
     return 0;
 }
Ejemplo n.º 7
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {

            int index = packet.ReadInt();
            client.Player.FightBag.RemoveItemAt(index);
            return 0;
        }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int id = client.Player.PlayerCharacter.ConsortiaID;
            string consortiaName = client.Player.PlayerCharacter.ConsortiaName;
            bool result = false;
            string msg = "ConsortiaDisbandHandler.Failed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                if (db.DeleteConsortia(client.Player.PlayerCharacter.ConsortiaID, client.Player.PlayerCharacter.ID, ref msg))
                {
                    result = true;
                    msg = "ConsortiaDisbandHandler.Success1";

                    client.Player.ClearConsortia();

                    GameServer.Instance.LoginServer.SendConsortiaDelete(id);
                }
            }

            string temp = LanguageMgr.GetTranslation(msg);
            if (msg == "ConsortiaDisbandHandler.Success1")
            {
                temp += consortiaName + LanguageMgr.GetTranslation("ConsortiaDisbandHandler.Success2");
            }

            packet.WriteBoolean(result);
            packet.WriteInt(client.Player.PlayerCharacter.ID);
            packet.WriteString(temp);
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 9
0
 public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
 {
     if (player.IsAttacking)
     {
         player.UseSpecialSkill();
     }
 }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            //if (client.Player.CurrentHotSpringRoom != null)
            //{
            //    client.Player.CurrentHotSpringRoom.ProcessData(client.Player, packet);
            //}
            GSPacketIn pkg = new GSPacketIn((byte)ePackageType.HOTSPRING_ROOM_PLAYER_ADD);
            var player = client.Player.PlayerCharacter;
            pkg.WriteInt(player.ID);
            pkg.WriteInt(player.Grade);
            pkg.WriteInt(player.Hide);

            pkg.WriteInt(player.Repute);
            pkg.WriteString(player.NickName);
            pkg.WriteBoolean(true);
            pkg.WriteInt(5);
  
            pkg.WriteBoolean(player.Sex);
            pkg.WriteString(player.Style);
            pkg.WriteString(player.Colors);
            pkg.WriteString(player.Skin);
            pkg.WriteInt(405);
            pkg.WriteInt(405);
            //var _loc_6:* = new Point(_loc_2.readInt(), _loc_2.readInt());
            pkg.WriteInt(player.FightPower);
            pkg.WriteInt(player.Win);
            pkg.WriteInt(player.Total);
            pkg.WriteInt(45);
            //_loc_5.FightPower = _loc_2.readInt();
            //_loc_5.WinCount = _loc_2.readInt();
            //_loc_5.TotalCount = _loc_2.readInt();
            //_loc_4.playerDirection = _loc_2.readInt();
            client.SendTCP(pkg);
            return 0;
        }
Ejemplo n.º 11
0
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     //Lay Danh Sach tat ca cac phong
     GSPacketIn pkg = new GSPacketIn((byte)ePackageType.HOTSPRING_ROOM_LIST_GET);
     pkg.WriteInt(10);
     for (int i = 0; i < 10; i++)
     {
         //loc_2.roomNumber = _loc_3.readInt();
         pkg.WriteInt(i);
         //_loc_2.roomID = _loc_3.readInt();
         pkg.WriteInt(i);
         //_loc_2.roomName = _loc_3.readUTF();
         pkg.WriteString("Room" + i);
         //_loc_2.roomPassword = _loc_3.readUTF();
         pkg.WriteString("");
         //_loc_2.effectiveTime = _loc_3.readInt();
         pkg.WriteInt(1);
         //_loc_2.curCount = _loc_3.readInt();
         pkg.WriteInt(1);
         //_loc_2.playerID = _loc_3.readInt();
         pkg.WriteInt(client.Player.PlayerCharacter.ID);
         //_loc_2.playerName = _loc_3.readUTF();
         pkg.WriteString("abc");
         //_loc_2.startTime = _loc_3.readDate();
         pkg.WriteDateTime(DateTime.Now.AddDays(-50));
         //_loc_2.roomIntroduction = _loc_3.readUTF();
         pkg.WriteString("Room Intro");
         //_loc_2.roomType = _loc_3.readInt();
         pkg.WriteInt(1);
         //_loc_2.maxCount = _loc_3.readInt();
         pkg.WriteInt(10);
     }
     client.SendTCP(pkg);
     return 0;
 }
Ejemplo n.º 12
0
 public void SendLoginFailed(string msg)
 {
     GSPacketIn pkg = new GSPacketIn((byte)ePackageType.LOGIN);
     pkg.WriteByte(1);
     pkg.WriteString(msg);
     SendTCP(pkg);
 }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int id = packet.ReadInt();
            bool upGrade = packet.ReadBoolean();
            bool result = false;
            string msg = "ConsortiaUserGradeUpdateHandler.Failed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                string tempUserName = "";
                ConsortiaDutyInfo info = new ConsortiaDutyInfo();
                if (db.UpdateConsortiaUserGrade(id, client.Player.PlayerCharacter.ConsortiaID, client.Player.PlayerCharacter.ID, upGrade, ref msg, ref info, ref tempUserName))
                {
                    msg = "ConsortiaUserGradeUpdateHandler.Success";
                    result = true;
                    GameServer.Instance.LoginServer.SendConsortiaDuty(info, upGrade ? 6 : 7, client.Player.PlayerCharacter.ConsortiaID,id, tempUserName,client.Player.PlayerCharacter.ID,client.Player.PlayerCharacter.NickName);
                }
            }
            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 14
0
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     int hallType=packet.ReadInt();
     int updateType=packet.ReadInt();
     int page=packet.ReadInt();
     if(page<0)page=0;
     page++;
     BaseRoom[] list = RoomMgr.Rooms;
     List<BaseRoom> tempList = new List<BaseRoom>();
     //int maxRoomInList = 7;
     var count = 0;
     for (int i = 0; i < list.Length; i++)
     {
         if (!list[i].IsEmpty )
         {
                 // if(!list[i].IsPlaying&&cou) countPr
             count++;
             if (count < page * numberRoomInPage&&count>(page-1)*numberRoomInPage)
                 tempList.Add(list[i]);
             else if(count > page * numberRoomInPage) {
                 break;
             }
             //m_player.Out.SendUpdateRoomList(list[i]);
         }
     }
     if(tempList.Count>0)  client.Out.SendUpdateRoomList(tempList);
     return 0;
 }
Ejemplo n.º 15
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            //GSPacketIn pkg = packet.Clone();
            //pkg.ClearContext();
            PlayerInventory m_storeBag = client.Player.StoreBag2;
            PlayerEquipInventory m_mainBag = client.Player.MainBag;
            PlayerInventory m_propBag = client.Player.PropBag;

            for(int i=0;i<m_storeBag.Capalility;i++){
                if (m_storeBag.GetItemAt(i) != null)
                {
                    var item = m_storeBag.GetItemAt(i);
                    if (item.Template.CategoryID == 10 || item.Template.CategoryID == 11 || item.Template.CategoryID == 12)
                    {
                        m_storeBag.MoveToStore(m_storeBag, i, m_propBag.FindFirstEmptySlot(1), m_propBag, 999);
                    }
                    else
                    {
                        if (item.Template.CategoryID == 7&&m_mainBag.GetItemAt(6)==null)
                        {
                            m_storeBag.MoveToStore(m_storeBag, i, 6, m_mainBag, 999);
                        }else
                        m_storeBag.MoveToStore(m_storeBag, i, m_mainBag.FindFirstEmptySlot(32), m_mainBag, 999);
                    }
                }
                
            }
            //m_storeBag.ClearBag();
            return 0;
        }
Ejemplo n.º 16
0
 public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
 {
     if (game is PVEGame)
     {
         PVEGame pve = game as PVEGame;
         if (pve.BossCardCount + 1 > 0)
         {
             int index = packet.ReadByte();
             if (index < 0 || index > pve.BossCards.Length)
             {
                 if (pve.IsBossWar != "")
                 {
                     pve.TakeBossCard(player);
                 }
                 else pve.TakeCard(player);
             }
             else
             {
                 if (pve.IsBossWar != "")
                 {
                     pve.TakeBossCard(player, index);
                 }
                 else pve.TakeCard(player, index);
             }
         }
     }
 }
        public override void OnTick(HotSpringRoom room)
        {
            try 
            {
                if(room != null)
                {
                    room.KickAllPlayer();

                    //using(PlayerBussiness db = new PlayerBussiness())
                    //{
                    //    db.DisposeHotSpringRoomInfo(room.Info.ID);
                    //}

                    //GameServer.Instance.LoginServer.SendUpdatePlayerMarriedStates(room.Info.GroomID);
                    //GameServer.Instance.LoginServer.SendUpdatePlayerMarriedStates(room.Info.BrideID);

                    //GameServer.Instance.LoginServer.SendHotSpringRoomInfoToPlayer(room.Info.GroomID, false, room.Info);
                    //GameServer.Instance.LoginServer.SendHotSpringRoomInfoToPlayer(room.Info.BrideID, false, room.Info);

                    //HotSpringRoomMgr.RemoveHotSpringRoom(room);

                    GSPacketIn pkg = new GSPacketIn((short)ePackageType.MARRY_ROOM_DISPOSE);
                    pkg.WriteInt(room.Info.ID);
                    WorldMgr.MarryScene.SendToALL(pkg);

                    room.StopTimer();
                }
            }
            catch(Exception ex)
            {
                if (log.IsErrorEnabled)
                    log.Error("OnTick",ex);
            }
        }
Ejemplo n.º 18
0
 //0友好,1黑名单
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     var pet_cmd = packet.ReadByte();
     switch (pet_cmd)
     {
         case (byte)Game.Logic.eTankCmdType.UPDATE_PET:
             HandleUPDATE_PET(client, packet.ReadInt());
             break;
         case (byte)Game.Logic.eTankCmdType.ADD_PET://ADD_PET
             break;
         case (byte)Game.Logic.eTankCmdType.MOVE_PETBAG://MOVE_PETBAG
             break;
         case (byte)Game.Logic.eTankCmdType.FEED_PET://FEED_PET
             break;
         case (byte)Game.Logic.eTankCmdType.REFRESH_PET://REFRESH_PET
             client.Out.SendRefreshPet();
             break;
         case (byte)Game.Logic.eTankCmdType.ADOPT_PET://ADOPT_PET
             break;
         case (byte)Game.Logic.eTankCmdType.EQUIP_PET_SKILL://EQUIP_PET_SKILL
             break;
         case (byte)Game.Logic.eTankCmdType.RELEASE_PET://RELEASE_PET
             break;
         case (byte)Game.Logic.eTankCmdType.RENAME_PET://RENAME_PET
             break;
         case (byte)Game.Logic.eTankCmdType.PAY_SKILL://PAY_SKILL
             break;
         case (byte)Game.Logic.eTankCmdType.FIGHT_PET://FIGHT_PET
             break;
     }
     return 0;
 }
Ejemplo n.º 19
0
 public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
 {
     if (player.IsAttacking)
     {
         player.Skip(packet.ReadByte());
     }
 }
Ejemplo n.º 20
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            if (client.Player.PlayerCharacter.IsBanChat)
            {
                client.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("ConsortiaChatHandler.IsBanChat"));
                return 1;
            }

            packet.ClientID = (client.Player.PlayerCharacter.ID);
            byte channel = packet.ReadByte();
            string nick = packet.ReadString();
            string msg = packet.ReadString();
            packet.WriteInt(client.Player.PlayerCharacter.ConsortiaID);

            GamePlayer[] players = WorldMgr.GetAllPlayers();
            foreach (GamePlayer p in players)
            {
                if (p.PlayerCharacter.ConsortiaID == client.Player.PlayerCharacter.ConsortiaID)
                    p.Out.SendTCP(packet);
            }

            GameServer.Instance.LoginServer.SendPacket(packet);

            return 0;
        }
Ejemplo n.º 21
0
 public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
 {
     if(game is PVEGame)
     {
         PVEGame pve = game as PVEGame;
         int tryAgain = packet.ReadInt();
         bool isHost = packet.ReadBoolean();
         if (isHost == true)
         {
             if (tryAgain == 1)
             {
                 if (player.PlayerDetail.RemoveMoney(100) > 0)
                 {
                     //退回关卡结算
                     pve.WantTryAgain = 1;
                     game.SendToAll(packet);
                     player.PlayerDetail.LogAddMoney(AddMoneyType.Game, AddMoneyType.Game_TryAgain, player.PlayerDetail.PlayerCharacter.ID, 100, player.PlayerDetail.PlayerCharacter.Money);
                 }
                 else
                 {
                     player.PlayerDetail.SendInsufficientMoney((int)eBattleRemoveMoneyType.TryAgain);
                 }
             }
             else
             {
                 //退回房间
                 pve.WantTryAgain = 0;
                 game.SendToAll(packet);
             }
             pve.CheckState(0);
         }
     }
 }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int id = packet.ReadInt();
            bool isAlly = packet.ReadBoolean();
            bool result = false;
            string msg = "ConsortiaApplyAllyAddHandler.Add_Failed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                ConsortiaApplyAllyInfo info = new ConsortiaApplyAllyInfo();
                info.Consortia1ID = client.Player.PlayerCharacter.ConsortiaID;
                info.Consortia2ID = id;
                info.Date = DateTime.Now;
                info.State = 0;// isAlly ? 1 : 0;
                info.Remark = "";
                info.IsExist = true;
                if (db.AddConsortiaApplyAlly(info, client.Player.PlayerCharacter.ID, ref msg))
                {
                    msg = "ConsortiaApplyAllyAddHandler.Add_Success";
                    result = true;
                }
            }
            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int id = packet.ReadInt();
            bool result = false;
            string nickName = "";
            string msg = id == client.Player.PlayerCharacter.ID ? "ConsortiaUserDeleteHandler.ExitFailed" : "ConsortiaUserDeleteHandler.KickFailed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                if (db.DeleteConsortiaUser(client.Player.PlayerCharacter.ID, id, client.Player.PlayerCharacter.ConsortiaID, ref msg, ref nickName))
                {
                    msg = id == client.Player.PlayerCharacter.ID ? "ConsortiaUserDeleteHandler.ExitSuccess" : "ConsortiaUserDeleteHandler.KickSuccess";
                    int consortiaID = client.Player.PlayerCharacter.ConsortiaID;
                    if (id == client.Player.PlayerCharacter.ID)
                    {
                        client.Player.ClearConsortia();
                        client.Out.SendMailResponse(client.Player.PlayerCharacter.ID, eMailRespose.Receiver);
                    }

                   // client.Player.StoreBag.SendStoreToMail();
                    GameServer.Instance.LoginServer.SendConsortiaUserDelete(id, consortiaID, id != client.Player.PlayerCharacter.ID, nickName,client.Player.PlayerCharacter.NickName);
                    result = true;
                }
            }

            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 24
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            eBageType bagType = (eBageType)packet.ReadByte();
            int place = packet.ReadInt();
            int count = packet.ReadInt();
            client.Player.BeginChanges();
            PlayerInventory bag = client.Player.GetInventory(bagType);
            if (bag != null && bag.GetItemAt(place) != null)
            {
                ItemTemplateInfo item = bag.GetItemAt(place).Template;
                int price = count * item.ReclaimValue;
                if (item.ReclaimType == 2)
                {
                    client.Player.AddGiftToken(price);
                    //client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemReclaimHandler.Success1", price));
                }
                if (item.ReclaimType == 1)
                {
                    client.Player.AddGold(price);
                    //client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemReclaimHandler.Success2", price));
                }
                bag.RemoveItemAt(place);

            }
            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemReclaimHandler.NoSuccess"));
                return 1;
            }

            client.Player.CommitChanges();
            //LogMgr.LogMoneyAdd(LogMoneyType.Shop, LogMoneyType.Shop_Continue, client.Player.PlayerCharacter.ID, 25, client.Player.PlayerCharacter.Money, 25, 0, 0, 0, "牌子编号",));
            //client.Player.SaveIntoDatabase();//保存到数据库
            return 0;
        }
Ejemplo n.º 25
0
        public void HandleGameRoomCreate(GSPacketIn pkg)
        {
            int roomId = pkg.ReadInt();
            int gameType = pkg.ReadInt();
            int count = pkg.ReadInt();

            IGamePlayer[] players = new IGamePlayer[count];
            for (int i = 0; i < count; i++)
            {
                PlayerInfo info = new PlayerInfo();
                info.ID = pkg.ReadInt();
                info.Attack = pkg.ReadInt();
                info.Defence = pkg.ReadInt();
                info.Agility = pkg.ReadInt();
                info.Luck = pkg.ReadInt();

                double baseAttack = pkg.ReadDouble();
                double baseDefence = pkg.ReadDouble();
                double baseAgility = pkg.ReadDouble();
                double baseBlood = pkg.ReadDouble();
                int templateId = pkg.ReadInt();

                ItemTemplateInfo itemTemplate = ItemMgr.FindItemTemplate(templateId);
                ItemInfo item = new ItemInfo(itemTemplate);

                players[i] = new ProxyPlayer(info, item, baseAttack, baseDefence, baseAgility, baseBlood);
            }

            ProxyRoomMgr.CreateRoom(players, roomId, this);
        }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.CurrentMarryRoom != null && client.Player.PlayerCharacter.ID == client.Player.CurrentMarryRoom.Info.PlayerID)
            {
                string roomName = packet.ReadString();

                bool isPwdChanged = packet.ReadBoolean();

                string pwd = packet.ReadString();
                
                string introduction = packet.ReadString();

                MarryRoom room = client.Player.CurrentMarryRoom;

                room.Info.RoomIntroduction = introduction;
                room.Info.Name = roomName;
                if (isPwdChanged)
                {
                    room.Info.Pwd = pwd;
                }
                

                using (PlayerBussiness db = new PlayerBussiness())
                {
                    db.UpdateMarryRoomInfo(room.Info);
                }

                room.SendMarryRoomInfoUpdateToScenePlayers(room);

                client.Player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("MarryRoomInfoUpdateHandler.Successed"));
                return 0;
            }

            return 1;
        }
Ejemplo n.º 27
0
        public bool HandleCommand(TankGameLogicProcessor process, GamePlayer player, GSPacketIn packet)
        {
            //if (player.CurrentGame.Data.CurrentIndex == player || player.CurrentGame.Data.Players[player].State == TankGameState.FRIST || player.CurrentGame.Data.Players[player].State == TankGameState.DEAD)
            if (player.CurrentGame.Data.CurrentIndex == player || player.CurrentGame.Data.Players[player].State == TankGameState.DEAD)
            {
                player.CurrentGame.ReturnPacket(player, packet);
                player.CurrentGame.Data.Players[player].SetXY(packet.ReadInt(), packet.ReadInt());
                //player.CurrentGame.Data.Players[player].StartMoving();

                //GameServer.log.Error(string.Format("StopMoving {0} {1}",player.CurrentGame.Data.Players[player].X,player.CurrentGame.Data.Players[player].Y));
                
                //由于同步问题,暂时去掉
                //if (player.CurrentGame != null)
                //    player.CurrentGame.Data.Players[player].StartMoving();
               
                // GameServer.log.Error(string.Format("StopMoving {0} {1}", player.CurrentGame.Data.Players[player].X, player.CurrentGame.Data.Players[player].Y));
                return true;
            }
            else
            {
                //if (player.CurrentGame.Data.CurrentFire != null)
                //{
                    //int x = packet.ReadInt();
                    //player.CurrentGame.Data.Players[player].PosY = packet.ReadInt();
                //}
                //return true;
            }
            return false;
        }
Ejemplo n.º 28
0
 public override void OnRecvPacket(GSPacketIn pkg)
 {
     switch (pkg.Code)
     {
         case (int)eFightPackageType.LOGIN:
             HandleLogin(pkg);
             break;
         case (int)eFightPackageType.ROOM_CREATE:
             HandleGameRoomCreate(pkg);
             break;
         case (int)eFightPackageType.ROOM_REMOVE:
             HandleGameRoomCancel(pkg);
             break;
         case (int)eFightPackageType.SEND_TO_GAME:
             HanleSendToGame(pkg);
             break;
         case (int)eFightPackageType.PLAYER_USE_PROP_INGAME:
             HandlePlayerUsingProp(pkg);
             break;
         case (int)eFightPackageType.DISCONNECT:
             HandlePlayerExit(pkg);
             break;
         case (int)eFightPackageType.CHAT:
             HandlePlayerMessage(pkg);
             break;
         case (int)eFightPackageType.SYS_NOTICE:
             HandleSysNotice(pkg);
             break;
         case (int)eFightPackageType.FIND_CONSORTIA_ALLY:
             HandleConsortiaAlly(pkg);
             break;
         default:
             break;
     }
 }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;
            //Type 1表示商城,2表示铁匠铺

            bool result = false;
            string msg = "ConsortiaEquipControlHandler.Fail";
            ConsortiaEquipControlInfo info = new ConsortiaEquipControlInfo();
            info.ConsortiaID = client.Player.PlayerCharacter.ConsortiaID;
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                for (int i = 0; i < 5; i++)
                {

                    info.Riches = packet.ReadInt();
                    info.Type = 1;
                    info.Level = i + 1;

                    db.AddAndUpdateConsortiaEuqipControl(info, client.Player.PlayerCharacter.ID, ref msg);
                }
                info.Riches = packet.ReadInt();
                info.Type = 2;
                info.Level = 0;
                db.AddAndUpdateConsortiaEuqipControl(info, client.Player.PlayerCharacter.ID, ref msg);
                msg = "ConsortiaEquipControlHandler.Success";
                result = true;
            }
            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 30
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            //修改:  Xiaov
            //时间:  2009-11-4
            //描述:  场景准备<已通过>
            if (client.Player.CurrentRoom != null)
            {
                GSPacketIn pkgMsg = null;
                List<GamePlayer> players = client.Player.CurrentRoom.GetPlayers();
                foreach (GamePlayer p in players)
                {
                    if (p != client.Player)
                    {
                        if (pkgMsg == null)
                        {
                            pkgMsg = p.Out.SendSceneAddPlayer(client.Player);
                        }
                        else
                        {
                            p.Out.SendTCP(pkgMsg);
                        }
                        client.Out.SendSceneRemovePlayer(p);
                    }
                }
            }

            return 1;
        }
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (client.Player.PlayerCharacter.ConsortiaID == 0)
                return 0;

            int id = packet.ReadInt();
            bool result = false;
            string msg = "ConsortiaApplyLoginPassHandler.Failed";
            using (ConsortiaBussiness db = new ConsortiaBussiness())
            {
                int consortiaRepute = 0;
                ConsortiaUserInfo info = new ConsortiaUserInfo();
                if (db.PassConsortiaApplyUsers(id, client.Player.PlayerCharacter.ID, client.Player.PlayerCharacter.NickName, client.Player.PlayerCharacter.ConsortiaID, ref msg, info, ref consortiaRepute))
                {
                    msg = "ConsortiaApplyLoginPassHandler.Success";
                    result = true;
                    if (info.UserID != 0)
                    {
                        info.ConsortiaID = client.Player.PlayerCharacter.ConsortiaID;
                        info.ConsortiaName = client.Player.PlayerCharacter.ConsortiaName;
                        GameServer.Instance.LoginServer.SendConsortiaUserPass(client.Player.PlayerCharacter.ID, client.Player.PlayerCharacter.NickName, info, false, consortiaRepute, info.LoginName, client.Player.PlayerCharacter.FightPower);
                    }
                }
            }

            packet.WriteBoolean(result);
            packet.WriteString(LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(packet);

            return 0;
        }
Ejemplo n.º 32
0
 public void HandleCommand(BaseGame game, Player player, Game.Base.Packets.GSPacketIn packet)
 {
     if (player.HasTakeCard == false && player.CanTakeOut == true)
     {
         int index = packet.ReadByte();
         if (index < 0 || index > 7)
         {
             game.TakeCard(player);
         }
         else
         {
             game.TakeCard(player, index);
         }
     }
 }
Ejemplo n.º 33
0
        public override void OnStarting(BaseSceneGame game, Game.Base.Packets.GSPacketIn data)
        {
            //base.OnStarting(game, data);

            TankData tank = game.Data;

            tank.Reset();
            GamePlayer[] list   = game.Data.GetAllPlayers();
            int          i      = random.Next(list.Length);
            GamePlayer   player = GetLowDelayPlayer(game, list[i]);
            //List<Point> pos = new List<Point>();
            //pos.AddRange(Managers.MapMgr.GetMapPos(game.Data.MapIndex));

            MapPoint pos = Managers.MapMgr.GetMapRandomPos(game.Data.MapIndex);

            tank.CurrentWind = random.Next(-40, 40);
            data.WriteInt(player.PlayerCharacter.ID);
            data.WriteInt(tank.CurrentWind);
            data.WriteByte((byte)game.Data.Count);
            Point temp     = new Point();
            int   lastTeam = -1;

            foreach (GamePlayer p in list)
            {
                temp = GetRandom(pos, temp, lastTeam, p.CurrentTeamIndex);
                tank.Players[p].X = temp.X;
                tank.Players[p].Y = temp.Y;
                tank.CurrentMap.AddPhysical(tank.Players[p]);
                p.CanFly = true;
                p.Count  = 2;

                data.WriteInt(p.PlayerCharacter.ID);
                data.WriteInt(tank.Players[p].X);
                data.WriteInt(tank.Players[p].Y);
                data.WriteInt(random.Next(0, 2) > 0 ? 1 : -1);
                data.WriteInt(tank.Players[p].Blood);
                data.WriteBoolean(game.Data.Players[p].IsCaptain);
                lastTeam = p.CurrentTeamIndex;
            }
            tank.CurrentIndex = player;
            game.BeginTimer(TIMEOUT);
            if (game.RoomType == eRoomType.PAIRUP && game.MatchGame != null)
            {
                game.MatchGame.StopTimer();
            }
        }
Ejemplo n.º 34
0
 public static void SendStartMessage(BattleGame game)
 {
     Game.Base.Packets.GSPacketIn pkg = new Game.Base.Packets.GSPacketIn((byte)ePackageType.GAME_CHAT);
     pkg.WriteInt(2);
     if (game.GameType == eGameType.Free)
     {
         foreach (Player p in game.GetAllFightPlayers())
         {
             (p.PlayerDetail as ProxyPlayer).Rate = 1;
             GSPacketIn pkg1 = SendBufferList(p, (p.PlayerDetail as ProxyPlayer).Buffers);
             game.SendToAll(pkg1);
         }
         pkg.WriteString("撮合成功!您所在的小队开始了自由战");
     }
     else
     {
         pkg.WriteString("撮合成功!您所在的小队开始了公会战");
     }
     game.SendToAll(pkg, null);
 }
Ejemplo n.º 35
0
 public static void SendStartMessage(BattleGame game)
 {
     Game.Base.Packets.GSPacketIn pkg = new Game.Base.Packets.GSPacketIn((byte)ePackageType.GAME_CHAT);
     pkg.WriteInt(2);
     if (game.GameType == eGameType.Free)
     {
         foreach (Player p in game.GetAllFightPlayers())
         {
             (p.PlayerDetail as ProxyPlayer).Rate = 1;
             GSPacketIn pkg1 = SendBufferList(p, (p.PlayerDetail as ProxyPlayer).Buffers);
             game.SendToAll(pkg1);
         }
         pkg.WriteString("Bắt cặp thành công, Bắt đẩu chiến đấu!");
     }
     else
     {
         pkg.WriteString("Kết nối thất bại!");
     }
     game.SendToAll(pkg, null);
 }
Ejemplo n.º 36
0
        public int HandlePacket(GameClient client, Game.Base.Packets.GSPacketIn packet)
        {
            int type_award = packet.ReadInt();

            //1:isDailyGotten
            //2:isShowEgg
            //3:Vip
            if (type_award == 3)
            {
                //client.Player.PlayerCharacter.CanTakeVipReward = false;
                client.Player.PlayerCharacter.LastVIPPackTime = DateTime.Now;
                using (PlayerBussiness db = new PlayerBussiness())
                {
                    db.UpdateLastVIPPackTime(client.Player.PlayerCharacter);
                }
            }
            if (type_award == 2)
            {
            }
            if (Managers.AwardMgr.AddDailyAward(client.Player) == true && type_award == 1)
            {
                using (PlayerBussiness db = new PlayerBussiness())
                {
                    if (db.UpdatePlayerLastAward(client.Player.PlayerCharacter.ID))
                    {
                        client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Success"));
                    }
                    else
                    {
                        client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Fail"));
                    }
                }
            }
            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Fail1"));
            }
            return(2);
        }
Ejemplo n.º 37
0
 public int HandlePacket(GameClient client, Game.Base.Packets.GSPacketIn packet)
 {
     if (Managers.AwardMgr.AddDailyAward(client.Player) == true)
     {
         using (PlayerBussiness db = new PlayerBussiness())
         {
             if (db.UpdatePlayerLastAward(client.Player.PlayerCharacter.ID) == true)
             {
                 client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Success"));
             }
             else
             {
                 client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Fail"));
             }
         }
     }
     else
     {
         client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("GameUserDailyAward.Fail1"));
     }
     return(2);
 }
Ejemplo n.º 38
0
 public void WritePacket(GSPacketIn pkg)
 {
     pkg.WriteHeader();
     this.Write(pkg.Buffer, 0, pkg.Length);
 }
Ejemplo n.º 39
0
        public int HandlePacket(GameClient client, Game.Base.Packets.GSPacketIn packet)
        {
            int type_award = packet.ReadInt();

            return(0);
        }
Ejemplo n.º 40
0
        public override void OnStopping(BaseSceneGame game, Game.Base.Packets.GSPacketIn pkg)
        {
            base.OnStopping(game, pkg);
            game.BeginTimer(TIMEOUT / 2);

            TankData data = game.Data;

            pkg.WriteByte((byte)data.Players.Count);

            int winTeam  = -1;
            int lastTeam = -1;

            data.killFlag = false;

            foreach (KeyValuePair <GamePlayer, Player> p in data.Players)
            {
                //if(p.Value.TotalHurt > 0)
                //{
                //    data.killFlag = true;
                //}

                if (winTeam == -1 && p.Value.Blood > 0)
                {
                    if (game.GameMode == eGameMode.FLAG)
                    {
                        if (p.Value.IsCaptain)
                        {
                            winTeam = p.Key.CurrentTeamIndex;
                            break;
                        }
                        else
                        {
                            lastTeam = p.Key.CurrentTeamIndex;
                        }
                    }
                    else
                    {
                        winTeam = p.Key.CurrentTeamIndex;
                        break;
                    }
                }
            }

            //if (!data.killFlag)
            //{
            //    game.BeginTimer(3000);
            //}

            if (winTeam == -1 && game.Data.CurrentIndex == null)
            {
                winTeam = lastTeam;
            }

            if (winTeam == -1)
            {
                if (game.Data.CurrentFire != null)
                {
                    winTeam = game.Data.CurrentFire.CurrentTeamIndex;
                }
                else
                {
                    winTeam = data.LastDead;
                }
            }

            int GP;

            //E等级差=(对方平均等级+5)-玩家等级;取值区间(1~9);
            //            P赢=4*[(对方平均等级+5)-玩家等级]+伤害的血量*0.2%+击杀数*2+(命中次数/玩家总的回合次数)*8;
            //P输=1*[(对方平均等级+5)-玩家等级]+伤害的血量*0.2%+击杀数*2+(命中次数/玩家总的回合次数)*8


            //            P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*[(对方平均等级+10)-玩家等级]
            //P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*[(对方平均等级+10)-玩家等级];

//            P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[1+(总击杀数-1)*33%]
//P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[1+(总击杀数-1)*33%]

            //P赢=[2+伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[0.9+(游戏开始时对方玩家人数-1)*30%]
            //P输=[伤害的血量*0.1%+击杀数*0.5+(命中次数/玩家总的回合次数)*2]*对方平均等级*[0.9+(游戏开始时对方玩家人数-1)*30%]


            //bool flag = data.GameStart.AddMinutes(1).CompareTo(DateTime.Now) > 0;
            string     winStr     = LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg5");
            GamePlayer winPlayer  = null;
            string     loseStr    = LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg5");
            GamePlayer losePlayer = null;

            foreach (KeyValuePair <GamePlayer, Player> p in data.Players)
            {
                if (game.RoomType == 0)
                {
                    p.Key.PlayerCharacter.CheckCount++;
                }
                else
                {
                    p.Key.PlayerCharacter.CheckCount += 2;
                }
                p.Key.Out.SendCheckCode();

                if (p.Value.TotalHurt > 0)
                {
                    data.killFlag = true;
                }

                if (game.GameClass == eGameClass.CONSORTIA)
                {
                    if (p.Key.CurrentTeamIndex == winTeam)
                    {
                        winStr   += " [" + p.Key.PlayerCharacter.NickName + "] ";
                        winPlayer = p.Key;
                    }
                    else
                    {
                        loseStr   += " [" + p.Key.PlayerCharacter.NickName + "] ";
                        losePlayer = p.Key;
                    }
                }
            }

            int riches = 0;

            if (game.GameClass == eGameClass.CONSORTIA)
            {
                winStr  += LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg1") + losePlayer.PlayerCharacter.ConsortiaName + LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg2");
                loseStr += LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg3") + winPlayer.PlayerCharacter.ConsortiaName + LanguageMgr.GetTranslation("Game.Server.SceneGames.OnStopping.Msg4");
                riches   = ConsortiaMgr.ConsortiaFight(winPlayer.CurrentTeamIndex == 1 ? data.ConsortiaID1 : data.ConsortiaID2,
                                                       winPlayer.CurrentTeamIndex == 1 ? data.ConsortiaID2 : data.ConsortiaID1, game.Data.Players, game.RoomType, game.GameClass, data.persons[winPlayer.CurrentTeamIndex].TotalKillHealth);
                GameServer.Instance.LoginServer.SendConsortiaFight(winPlayer.PlayerCharacter.ConsortiaID, riches, winStr);
                //GameServer.Instance.LoginServer.SendConsortiaFight(losePlayer.PlayerCharacter.ConsortiaID, -riches, loseStr);
            }

            foreach (KeyValuePair <GamePlayer, Player> p in data.Players)
            {
                GP = 1;
                if (p.Value.State != TankGameState.LOSE)
                {
                    if (game.RoomType == eRoomType.PAIRUP)
                    {
                        p.Key.PlayerCharacter.Total++;
                    }

                    double level    = (data.TotalLevel - data.persons[p.Key.CurrentTeamIndex].TotalLevel) / (data.TotalPerson - data.persons[p.Key.CurrentTeamIndex].TeamPerson);
                    double disLevel = level + 10 - p.Key.PlayerCharacter.Grade;

                    if (p.Key.CurrentTeamIndex == winTeam)
                    {
                        if (game.RoomType == eRoomType.PAIRUP)
                        {
                            p.Key.PlayerCharacter.Win++;
                        }

                        //GP = (int)Math.Ceiling((((data.killFlag ? 2 : 0) + (double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (1 + (data.persons[p.Key.CurrentTeamIndex].TatolKill - 1) * 0.33)));
                        GP = (int)Math.Ceiling((((data.killFlag ? 2 : 0) + (double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (0.9 + (data.persons[p.Key.CurrentTeamIndex].TeamPerson - 1) * 0.3)));
                    }
                    else
                    {
                        GP = (int)Math.Ceiling(((double)p.Value.TotalHurt * 0.001 + p.Value.TotalKill * 0.5 + (p.Value.HitNum / (p.Value.BoutNum == 0 ? 1 : p.Value.BoutNum)) * 2) * level * (0.9 + (data.persons[p.Key.CurrentTeamIndex].TeamPerson - 1) * 0.3));
                    }

                    bool isMarried = false;
                    if (p.Key.PlayerCharacter.IsMarried)
                    {
                        foreach (GamePlayer q in data.Players.Keys)
                        {
                            if (q.PlayerCharacter.ID != p.Key.PlayerCharacter.ID)
                            {
                                if (q.CurrentTeamIndex == p.Key.CurrentTeamIndex && p.Key.PlayerCharacter.SpouseID == q.PlayerCharacter.ID)
                                {
                                    GP        = (int)(GP * 1.2);
                                    isMarried = true;
                                }
                            }
                        }
                    }

                    p.Key.QuestInventory.CheckWin(data.MapIndex, (int)game.GameMode, game.ScanTime, p.Value.IsCaptain,
                                                  data.persons[p.Key.CurrentTeamIndex].TeamPerson, data.TotalPerson - data.persons[p.Key.CurrentTeamIndex].TeamPerson, p.Key.CurrentTeamIndex == winTeam, game.GameClass == eGameClass.CONSORTIA, (int)game.RoomType, isMarried);


                    double AAS = AntiAddictionMgr.GetAntiAddictionCoefficient(p.Key.PlayerCharacter.AntiAddiction);
                    GP = (int)(GP * AAS);

                    GP  = (int)(GP * RateMgr.GetRate(eRateType.Experience_Rate));
                    GP *= p.Key.BuffInventory.GPMultiple();

                    if (game.RoomType != eRoomType.PAIRUP && (disLevel <= 0 || disLevel >= 20))
                    {
                        GP = 1;
                    }

                    if (AAS < 10E-6)
                    {
                        GP = 0;
                    }
                    else
                    {
                        if (GP < 1)
                        {
                            GP = 1;
                        }
                    }

                    p.Key.SetGP(GP);

                    Dictionary <int, int> requestItems = p.Key.QuestInventory.GetRequestItems();
                    List <MapGoodsInfo>   questItems   = Managers.MapMgr.GetQuestGoodsAll(data.MapIndex);
                    foreach (MapGoodsInfo questID in questItems)
                    {
                        if (requestItems.ContainsKey(questID.GoodsID) && requestItems[questID.GoodsID] > 0)
                        {
                            int total = random.Next(questID.Value + 1);
                            if (p.Key.CurrentTeamIndex != winTeam)
                            {
                                total = total / 2;
                            }
                            else if (total < 1)
                            {
                                total = 1;
                            }
                            if (total < 1)
                            {
                                continue;
                            }

                            int count             = requestItems[questID.GoodsID] > total ? total : requestItems[questID.GoodsID];
                            ItemTemplateInfo temp = Bussiness.Managers.ItemMgr.GetSingleGoods(questID.GoodsID);
                            p.Key.TempInventory.AddItemTemplate(temp, questID, count);
                            requestItems[questID.GoodsID] -= count;
                        }
                    }
                }

                //p.Value.IsTakeOut = true;
                pkg.WriteInt(p.Key.PlayerCharacter.ID);
                pkg.WriteBoolean(winTeam == p.Key.CurrentTeamIndex);
                pkg.WriteInt(p.Key.PlayerCharacter.Grade);
                pkg.WriteInt(p.Key.PlayerCharacter.GP);
                pkg.WriteInt((int)p.Value.TotalKill);
                pkg.WriteInt(p.Value.TotalHurt);
                pkg.WriteInt(GP);
                pkg.WriteInt((int)p.Value.HitNum);
                pkg.WriteInt((int)p.Value.BoutNum);
                pkg.WriteInt(p.Value.Offer);

                if (data.persons[p.Key.CurrentTeamIndex].TotalKillHealth > 0)
                {
                    p.Value.IsTakeOut = true;
                    if (p.Key.CurrentGame != null)
                    {
                        p.Key.CurrentGame.IsTakeOut = true;
                    }
                }
                pkg.WriteBoolean(p.Value.IsTakeOut);
            }

            pkg.WriteInt(riches);
            //pkg.WriteBoolean(data.killFlag);
            pkg.WriteInt(data.TotalPerson / 2);

            data.InsertGameInfo(game, winTeam);

            GamePlayer[] list = data.Players.Keys.ToArray();
            foreach (GamePlayer p in list)
            {
                if (data.Players[p].State == TankGameState.LOSE)
                {
                    data.Players.Remove(p);
                }
                else
                {
                    //data.Players[p].Reset();
                    //p.PropInventory.Clear();
                    //if (!killFlag)
                    //{
                    //    if (p.CurrentGame.GameState != eGameState.FREE)
                    //    {
                    //        p.CurrentGame.ShowArk(p.CurrentGame, p);
                    //    }
                    //}
                }
            }
        }
Ejemplo n.º 41
0
        /// <summary>
        /// Called when the client receives bytes
        /// </summary>
        /// <param name="numBytes">The number of bytes received</param>
        public void ReceiveBytes(int numBytes)
        {
            lock (this)
            {
                byte[] buffer = m_client.PacketBuf;

                //End Offset of buffer
                int bufferSize = m_client.PacketBufSize + numBytes;
                //log.Debug(Marshal.ToHexDump("Recieve:", buffer, 0, bufferSize));
                //Size < minimum
                if (bufferSize < GSPacketIn.HDR_SIZE)
                {
                    m_client.PacketBufSize = bufferSize; // undo buffer read
                    return;
                }
                //Reset the offset
                m_client.PacketBufSize = 0;

                int curOffset = 0;

                do
                {
                    //read buffer length
                    int packetLength = 0;
                    int header       = 0;
                    if (m_client.Encryted)
                    {
                        //int key = receive_fsm.getState();
                        int i = receive_fsm.count;
                        //key = (key & (0xff << 16)) >> 16;
                        byte[] tempKey = cloneArrary(m_client.RECEIVE_KEY);
                        while (curOffset + 4 < bufferSize)
                        {
                            byte[] tempBuffer = decryptBytes(buffer, curOffset, 8, tempKey);
                            header = ((byte)(tempBuffer[0]) << 8) + (byte)(tempBuffer[1]);
                            if (header == GSPacketIn.HEADER)
                            {
                                packetLength = ((byte)(tempBuffer[2]) << 8) + (byte)(tempBuffer[3]);
                                break;
                            }
                            else
                            {
                                curOffset++;
                            }
                        }

                        //decryptBytes(buffer,
                    }
                    else
                    {
                        while (curOffset + 4 < bufferSize)
                        {
                            header = (buffer[curOffset] << 8) + buffer[curOffset + 1];
                            if (header == GSPacketIn.HEADER)
                            {
                                packetLength = (buffer[curOffset + 2] << 8) + buffer[curOffset + 3];
                                break;
                            }
                            else
                            {
                                curOffset++;
                            }
                        }
                    }

                    if ((packetLength != 0 && packetLength < GSPacketIn.HDR_SIZE) || packetLength > 2048)
                    {
                        log.Error("packetLength:" + packetLength + ",GSPacketIn.HDR_SIZE:" + GSPacketIn.HDR_SIZE + ",offset:" + curOffset + ",bufferSize:" + bufferSize + ",numBytes:" + numBytes);
                        log.ErrorFormat("Err pkg from {0}:", m_client.TcpEndpoint);
                        log.Error(Marshal.ToHexDump("===> error buffer", buffer));
                        m_client.PacketBufSize = 0;
                        if (m_client.Strict)
                        {
                            m_client.Disconnect();
                        }
                        return;
                    }

                    int dataLeft = bufferSize - curOffset;
                    if (dataLeft < packetLength || packetLength == 0)
                    {
                        Array.Copy(buffer, curOffset, buffer, 0, dataLeft);
                        m_client.PacketBufSize = dataLeft;
                        break;
                    }

                    GSPacketIn pkg = new GSPacketIn(new byte[2048], 2048);
                    if (m_client.Encryted)
                    {
                        // pkg.CopyFrom(buffer, curOffset, 0, packetLength, receive_fsm.getState());
                        pkg.CopyFrom3(buffer, curOffset, 0, packetLength, m_client.RECEIVE_KEY);
                        //receive_fsm.UpdateState();
                    }
                    else
                    {
                        pkg.CopyFrom(buffer, curOffset, 0, packetLength);
                    }
                    pkg.ReadHeader();

                    log.Debug((Marshal.ToHexDump("Recieve Packet:", pkg.Buffer, 0, packetLength)));
                    try
                    {
                        m_client.OnRecvPacket(pkg);
                    }
                    catch (Exception e)
                    {
                        if (log.IsErrorEnabled)
                        {
                            log.Error("HandlePacket(pak)", e);
                        }
                    }

                    curOffset += packetLength;
                } while (bufferSize - 1 > curOffset);

                if (bufferSize - 1 == curOffset)
                {
                    buffer[0] = buffer[curOffset];
                    m_client.PacketBufSize = 1;
                }
            }
        }