コード例 #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;
        }
コード例 #2
0
        //修改:  Xiaov
        //时间:  2009-11-4
        //描述:  修改邮件的已读未读标志<已测试>
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            int id = packet.ReadInt();
            using (PlayerBussiness db = new PlayerBussiness())
            {
                MailInfo mes = db.GetMailSingle(client.Player.PlayerCharacter.ID, id);
                if (mes != null && !mes.IsRead)
                {
                    mes.IsRead = true;
                    if (mes.Type < 100)
                    {
                        mes.ValidDate = 3 * 24;
                        mes.SendTime = DateTime.Now;
                    }
                    db.UpdateMail(mes, mes.Money);
                    pkg.WriteBoolean(true);
                }
                else
                {
                    pkg.WriteBoolean(false);
                }
            }

            client.Out.SendTCP(pkg);

            return 0;
        }
コード例 #3
0
        //修改:  Xiaov
        //时间:  2009-11-7
        //描述:  用户与用户之间私聊<已测试>
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            int receiverID = packet.ReadInt();
            //int senderID = packet.ReadInt();
            string receiver = packet.ReadString();
            string sender = packet.ReadString();
            string msg = packet.ReadString();
            bool isAutoReply = packet.ReadBoolean();

            if (receiverID == 0)
            {
                using (PlayerBussiness db = new PlayerBussiness())
                {
                    PlayerInfo info = db.GetUserSingleByNickName(receiver);
                    if (info != null)
                        receiverID = info.ID;
                }
            }

            if (receiverID != 0)
            {
                GSPacketIn pkg = packet.Clone();
                pkg.ClearContext();
                pkg.WriteInt(receiverID);
                pkg.ClientID = (client.Player.PlayerCharacter.ID);
                //pkg.WriteInt(senderID);
                pkg.WriteString(receiver);
                pkg.WriteString(sender);
                pkg.WriteString(msg);
                pkg.WriteBoolean(false);

                GamePlayer player = Managers.WorldMgr.GetPlayerById(receiverID);

                if (player != null)
                {
                    if (player.IsBlackFriend(client.Player.PlayerCharacter.ID))
                        return 1;
                    player.Out.SendTCP(pkg);
                }
                else
                {

                    GameServer.Instance.LoginServer.SendPacket(pkg);
                }
                client.Out.SendTCP(pkg);
            }
            else
            {
                client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("UserPrivateChatHandler.NoUser"));
            }

            return 1;
        }
コード例 #4
0
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     GSPacketIn pkg = packet.Clone();
     //if (DateTime.Now.Date != client.Player.PlayerCharacter.LastDate.Date)
     //{
         pkg.WriteBoolean(true);
     //}
     //else
     //{
     //    pkg.WriteBoolean(false);
     //}
     client.SendTCP(pkg);
     return 0;
 }
コード例 #5
0
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     packet = packet.Clone();
     packet.ClearContext();
     int num = packet.ReadInt();
     int num2 = packet.ReadInt();
     int num3 = packet.ReadInt();
     int num4 = packet.ReadInt();
     int num5 = packet.ReadInt();
     int num6 = packet.ReadInt();
     int num7 = packet.ReadInt();
     client.Player.CurrentHotSpringRoom = new HotSpringRoom(new HotSpringRoomInfo(), new TankHotSpringLogicProcessor());
     client.Player.CurrentHotSpringRoom.ProcessData(client.Player, packet);
     return 0;
 }
コード例 #6
0
        public bool HandleCommand(TankGameLogicProcessor process, GamePlayer player, GSPacketIn packet)
        {
            if (player.CurrentGame.Data.CurrentIndex == player || player.CurrentGame.Data.Players[player].State == TankGameState.DEAD)
            {
                GSPacketIn pkg = packet.Clone();
                pkg.ClientID = player.PlayerCharacter.ID;
                player.CurrentGame.SendToPlayerExceptSelf(pkg, player);

                byte type = packet.ReadByte();
                int tx = packet.ReadInt();
                int ty = packet.ReadInt();
                byte dir = packet.ReadByte();
                bool isLiving = packet.ReadBoolean();
                Player p = player.CurrentGame.Data.Players[player];

                switch (type)
                {
                    case 0:
                    case 1:
                        //p.X = tx;
                        //p.Y = ty;
                        p.SetXY(tx, ty);
                        if (player.CurrentGame != null)
                        {
                            p.StartMoving();
                            if (p.Y - ty > 1 || p.IsLiving != isLiving)
                            {
                                //GameServer.log.Error(string.Format("修正掉落: 动作类型  {0}    原始Y:{1}     最新Y:{2}", type, ty, p.Y));
                                //把服务器修正的掉落指令和客户掉落指令加以区分。
                                pkg = player.Out.SendPlayerMove(3, p.X, p.Y, 0, p.IsLiving);
                                player.CurrentGame.SendToPlayerExceptSelf(pkg, player);
                            }
                        }
                        break;
                    case 2:
                        if (player.CurrentGame.Data.Players[player].State == TankGameState.DEAD)
                        {
                            p.EndX = tx;
                            p.EndY = ty;
                        }
                        break;
                }
                return true;
            }
            return false;
        }
コード例 #7
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            byte unknow = packet.ReadByte();
            int id = packet.ReadInt();
            if (client.Player.PlayerCharacter.AnswerSite < id)
            {
                List<ItemInfo> infos = null;
                client.Player.PlayerCharacter.AnswerSite = id;
                if (DropInventory.AnswerDrop(id, ref infos))
                {
                    int gold = 0;
                    int money = 0;
                    int giftToken = 0;
                    int medal = 0;
                    foreach (ItemInfo info in infos)
                    {
                        ItemInfo.FindSpecialItemInfo(info, ref gold, ref money, ref giftToken, ref medal);
                        //if ((info != null) && (info.Template.BagType == eBageType.PropBag))
                        //{
                            client.Player.MainBag.AddTemplate(info, info.Count);
                        //}
                        client.Player.AddGold(gold);
                        client.Player.AddMoney(money);
                        client.Player.AddGiftToken(giftToken);
                        client.Player.AddMedal(medal);
                        LogMgr.LogMoneyAdd(LogMoneyType.Award, LogMoneyType.Award_Answer, client.Player.PlayerCharacter.ID, giftToken, client.Player.PlayerCharacter.Money, money, 0, 0,0, "", "", "");
                    }
                }
            }

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();
            pkg.WriteInt(client.Player.PlayerCharacter.AnswerSite);
            for (int i = 0; i < client.Player.PlayerCharacter.AnswerSite; i++)
            {
                pkg.WriteByte(unknow);
            }

            client.Player.Out.SendTCP(pkg);
            return 1;
        }
コード例 #8
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
 
            //修改:  Xiaov 
            //时间:  2009-11-4
            //描述:  小喇叭<未测试>
            
            ItemInfo item = client.Player.PropBag.GetItemByCategoryID(0,11, 4);
            if (item != null)
            {
                //item.Count--;
                //if (item.Count <= 0)
                //{
                //    client.Player.RemoveItem(item);
                //}
                //else
                //{                    
                    client.Player.PropBag.RemoveCountFromStack(item, 1);                   
              //  }
                int senderID = packet.ReadInt();
                string senderName = packet.ReadString();
                string msg = packet.ReadString();
                GSPacketIn pkg = packet.Clone();
                pkg.ClearContext();
                pkg.ClientID = (client.Player.PlayerCharacter.ID);
                pkg.WriteInt(client.Player.PlayerCharacter.ID);
                pkg.WriteString(client.Player.PlayerCharacter.NickName);
                pkg.WriteString(msg);


                GamePlayer[] players = Managers.WorldMgr.GetAllPlayers();

                foreach (GamePlayer p in players)
                {
                    p.Out.SendTCP(pkg);
                }

            }

            return 0;
        }
コード例 #9
0
ファイル: InviteCommand.cs プロジェクト: vancourt/BaseGunnyII
 public bool HandleCommand(TankHotSpringLogicProcessor process, GamePlayer player, GSPacketIn packet)
 {
     if ((player.CurrentHotSpringRoom != null) && (player.CurrentHotSpringRoom.RoomState == eRoomState.FREE))
     {
         if (player.PlayerCharacter.ID != player.CurrentHotSpringRoom.Info.PlayerID)
         {
             return false;
         }
         GSPacketIn pkg = packet.Clone();
         pkg.ClearContext();
         GamePlayer playerById = WorldMgr.GetPlayerById(packet.ReadInt());
         if (((playerById != null) && (playerById.CurrentRoom == null)) && (playerById.CurrentHotSpringRoom == null))
         {
             pkg.WriteByte((byte)HotSpringCmdType.HOTSPRING_ROOM_INVITE);
             pkg.WriteInt(player.CurrentHotSpringRoom.Info.RoomID);
             playerById.Out.SendTCP(pkg);
             return true;
         }
     }
     return false;
 }
コード例 #10
0
        public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
        {
            if (player.IsAttacking)
            {
                GSPacketIn pkg = packet.Clone();
                pkg.ClientID = player.PlayerDetail.PlayerCharacter.ID;
                pkg.Parameter1 = player.Id;
                game.SendToAll(pkg, player.PlayerDetail);

                byte type = packet.ReadByte();
                int tx = packet.ReadInt();
                int ty = packet.ReadInt();
                byte dir = packet.ReadByte();
                bool isLiving = packet.ReadBoolean();
                //Console.WriteLine("isLiving : {0}, tx : {1}, ty : {2}, type : {3}, playerId : {4}", isLiving, tx, ty, type, player.Id);
                switch (type)
                {
                    case 0:
                    case 1:
                        //p.X = tx;
                        //p.Y = ty;
                       // if (player.PlayerDetail.PlayerCharacter.NickName == "jacken123")
                           // Console.WriteLine(player.PlayerDetail.PlayerCharacter.NickName + "X坐标" + player.X.ToString() + "Y坐标" + player.Y.ToString());
                        player.SetXY(tx, ty);
                        player.StartMoving();
                       // if (player.PlayerDetail.PlayerCharacter.NickName == "jacken123")
                           // Console.WriteLine(string.Format("修正掉落: 动作类型  {0}    原始Y:{1}     最新Y:{2}", type, ty, player.Y));
                        if (player.Y - ty > 1 || player.IsLiving != isLiving)
                        {
                            //Console.WriteLine("player.IsLiving : {0}, playerId : {1}", player.IsLiving, player.Id);
                            //把服务器修正的掉落指令和客户掉落指令加以区分。
                            Console.WriteLine("玩家移动掉落:"+player.IsLiving.ToString());
                            game.SendPlayerMove(player, 3, player.X, player.Y, 0, player.IsLiving, null);
                        }
                        break;
                    case 2:
                        break;
                }
            }
        }
コード例 #11
0
        public void HandleCommand(BaseGame game, Player player, GSPacketIn packet)
        {
            if (player.IsLiving || player.IsAttacking)
            {
                GSPacketIn pkg = packet.Clone();
                pkg.ClientID = player.Id;
                game.SendToAll(pkg, player.PlayerDetail);

                byte type = packet.ReadByte();
                int tx = packet.ReadInt();
                int ty = packet.ReadInt();
                byte dir = packet.ReadByte();
                bool isLiving = packet.ReadBoolean();

                switch (type)
                {
                    case 0:
                    case 1:
                        //p.X = tx;
                        //p.Y = ty;
                        player.SetXY(tx, ty);
                        player.StartMoving();
                        if (player.Y - ty > 1 || player.IsLiving != isLiving)
                        {
                            //GameServer.log.Error(string.Format("修正掉落: 动作类型  {0}    原始Y:{1}     最新Y:{2}", type, ty, p.Y));
                            //把服务器修正的掉落指令和客户掉落指令加以区分。
                            pkg = player.PlayerDetail.Out.SendPlayerMove(player,3, player.X, player.Y, 0, player.IsLiving);
                            game.SendToAll(pkg, player.PlayerDetail);
                        }
                        break;
                    case 2:
                        if (player.IsLiving == false)
                        {
                            player.TargetPoint = new Point(tx, ty);
                        }
                        break;
                }
            }
        }
コード例 #12
0
        public int HandlePacket(GameClient client,GSPacketIn packet )
        {
            ItemInfo item = client.Player.PropBag.GetItemByCategoryID(0,11, 5);
            if (item != null)
            {
                //item.Count--;
                //if (item.Count <= 0)
                //{
                //    //client.Player.RemoveAllItem(item, false, Game.Server.Statics.ItemRemoveType.Use, item.GetBagType());
                //    client.Player.RemoveItem(item);
                //}
                //else
                //{                    
                   // client.Player.PropBag.RefreshItem(item);
                    client.Player.PropBag.RemoveCountFromStack(item,1);
                  
              
              //  }
                int senderID = packet.ReadInt();
                string senderName = packet.ReadString();
                string msg = packet.ReadString();

                GSPacketIn pkg = packet.Clone();
                pkg.ClearContext();
                pkg.ClientID = (client.Player.PlayerCharacter.ID);
                pkg.WriteInt(client.Player.PlayerCharacter.ID);
                pkg.WriteString(client.Player.PlayerCharacter.NickName);
                pkg.WriteString(msg);

                GameServer.Instance.LoginServer.SendPacket(pkg);

                GamePlayer[] players = Managers.WorldMgr.GetAllPlayers();
                foreach (GamePlayer p in players)
                {
                    p.Out.SendTCP(pkg);
                }
            }
            return 0;
        }
コード例 #13
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            byte page = packet.ReadByte();
            byte count = packet.ReadByte();

            GamePlayer[] players = Managers.WorldMgr.GetAllPlayersNoGame();

            int total = players.Length;
            byte length = total > count ? count : (byte)total;

            pkg.WriteByte(length);
            for (int i = page * count; i < page * count + length; i++)
            {
                PlayerInfo info = players[i % total].PlayerCharacter;
                pkg.WriteInt(info.ID);
                pkg.WriteString(info.NickName);
                pkg.WriteByte(info.typeVIP);
                pkg.WriteInt(info.VIPLevel);
                pkg.WriteBoolean(info.Sex);
                pkg.WriteInt(info.Grade);
                pkg.WriteInt(info.ConsortiaID);
                pkg.WriteString(info.ConsortiaName);// == null ? "" : info.ConsortiaName);
                pkg.WriteInt(info.Offer);
                pkg.WriteInt(info.Win);
                pkg.WriteInt(info.Total);
                pkg.WriteInt(info.Escape);
                pkg.WriteInt(info.Repute);
                pkg.WriteInt(info.FightPower);
                pkg.WriteBoolean(info.IsOldPlayer);//_loc_6.isOld = _loc_2.readBoolean();

            }

            client.Out.SendTCP(pkg);

            return 0;
        }
コード例 #14
0
        public bool HandleCommand(TankMarryLogicProcessor process, GamePlayer player, GSPacketIn packet)
        {
            if (player.CurrentMarryRoom == null || player.CurrentMarryRoom.RoomState != eRoomState.FREE)
            {
                return false;
            }

            if (player.CurrentMarryRoom.Info.GuestInvite == false)
            {
                if( player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.GroomID && player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.BrideID)
                {
                    return false;
                }
            }
            
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            int id = packet.ReadInt();
            GamePlayer invitedplayer = Managers.WorldMgr.GetPlayerById(id);
            if (invitedplayer != null && invitedplayer.CurrentRoom == null && invitedplayer.CurrentMarryRoom == null)
            {
                pkg.WriteByte((byte)MarryCmdType.INVITE);
                pkg.WriteInt(player.PlayerCharacter.ID);
                pkg.WriteString(player.PlayerCharacter.NickName);
                pkg.WriteInt(player.CurrentMarryRoom.Info.ID);
                //pkg.WriteInt(player.CurrentMarryRoom.Info.MapIndex);
                pkg.WriteString(player.CurrentMarryRoom.Info.Name);
                pkg.WriteString(player.CurrentMarryRoom.Info.Pwd);
                pkg.WriteInt(player.MarryMap);

                invitedplayer.Out.SendTCP(pkg);

                return true;
            }

            return false;

        }
コード例 #15
0
        //修改:  Xiaov
        //时间:  2009-11-7
        //描述:  进入结婚场景<已测试>
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();

            if (WorldMgr.MarryScene.AddPlayer(client.Player))
            {
                pkg.WriteBoolean(true);
            }
            else
            {
                pkg.WriteBoolean(false);
            }
            client.Out.SendTCP(pkg);

            if (client.Player.CurrentMarryRoom==null)
            {
                MarryRoom[] list = MarryRoomMgr.GetAllMarryRoom();

                foreach (MarryRoom g in list)
                {
                    client.Player.Out.SendMarryRoomInfo(client.Player, g);
                }
            }
            return 0;

            //if (client.Player.CurrentScene == WorldMgr.MarryScene)
            //{
            //    MarryRoom[] list = MarryRoomMgr.GetAllMarryRoom();
            //    foreach (MarryRoom g in list)
            //    {
            //        client.Player.Out.SendMarryRoomInfo(client.Player, g);
            //    }

            //    client.Out.SendPingTime();
            //}
        }
コード例 #16
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();
            //eBageType bagType = (eBageType)packet.ReadByte();
            int holeNum = packet.ReadInt();
            //int toplace = packet.ReadInt();
            int templateID = packet.ReadInt();
            int mustGold = 500;
            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {

                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked"));
                return 0;
            }
            if (client.Player.PlayerCharacter.Gold < mustGold)
            {
                client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("ItemComposeHandler.NoMoney"));
                return 0;
            }
            
            PlayerInventory storeBag = client.Player.GetInventory(eBageType.Store);
            ItemInfo item = storeBag.GetItemAt(0);
            ItemInfo gem;
            ItemTemplateInfo goods = Bussiness.Managers.ItemMgr.FindItemTemplate(templateID); 
           // storeBag.a
            if (goods == null) return 11;
            var result=false;
            switch (holeNum)
            {
                case 1:
                    if (item.Hole1 > 0)
                    {
                        item.Hole1=0;
                        result = true;
                    }
                    break;
                case 2:
                    if (item.Hole2 > 0)
                    {
                        item.Hole2 = 0;
                        result = true;
                    }
                    break;
                case 3:
                    if (item.Hole3 > 0)
                    {
                        item.Hole3 = 0;
                        result = true;
                    }
                    break;
                case 4:
                    if (item.Hole4 > 0)
                    {
                        item.Hole4 = 0;
                        result = true;
                    }
                    break;
                case 5:
                    if (item.Hole5 > 0)
                    {
                        item.Hole5 = 0;
                        result = true;
                    }
                    break;
                case 6:
                    if (item.Hole6 > 0)
                    {
                        item.Hole6 = 0;
                        result = true;
                    }
                    break;
                default:
                    return 1;
                   
            }
            if (result)
            {
                pkg.WriteInt(0);
                client.Player.BeginChanges();
                gem = ItemInfo.CreateFromTemplate(goods, 1, (int)ItemAddType.Buy);
                client.Player.AddItem(gem);
                client.Player.StoreBag2.MoveToStore(client.Player.StoreBag2, 0, client.Player.MainBag.FindFirstEmptySlot(32), client.Player.MainBag, 9);
                client.Player.UpdateItem(item);
                client.Player.RemoveGold(mustGold);
                client.Player.CommitChanges();
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("OK"));
            }
            else
            {

                pkg.WriteInt(1);
            }
            client.Player.SendTCP(pkg);
        
            client.Player.SaveIntoDatabase();//保存到数据库
            
            return 0;
        }
コード例 #17
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            StringBuilder str = new StringBuilder();
            int mustGold = 40000;
            bool _moveHole = packet.ReadBoolean();
            bool _moveFivSixHole = packet.ReadBoolean();

            ItemInfo transferBefore = client.Player.StoreBag2.GetItemAt(0);
            ItemInfo transferAfter = client.Player.StoreBag2.GetItemAt(1);
            //未开始
            if (transferBefore != null && transferAfter != null &&
                transferBefore.Template.CategoryID == transferAfter.Template.CategoryID &&
                //transferBefore.Template.CategoryID < 10 &&
                transferAfter.Count == 1 && transferBefore.Count == 1 &&
                transferBefore.IsValidItem() && transferAfter.IsValidItem())
            {

                if (client.Player.PlayerCharacter.Gold < mustGold)
                {
                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("itemtransferhandler.nogold"));
                    return 1;
                }
                    client.Player.RemoveGold(mustGold);

                    if (transferBefore.Template.CategoryID == 7 || transferAfter.Template.CategoryID == 7)
                    {
                        ItemTemplateInfo newTemp0 = null;
                        ItemTemplateInfo newTemp1 = null;
                        ItemInfo newItem0 = null;
                        ItemInfo newItem1 = null;
                        int _temID0 = transferBefore.TemplateID;
                        int _temID1 = transferAfter.TemplateID;

                        GetWeaponID(ref _temID0, ref _temID1);

                        newTemp0 = Bussiness.Managers.ItemMgr.FindItemTemplate(_temID0);
                        newTemp1 = Bussiness.Managers.ItemMgr.FindItemTemplate(_temID1);
                        if (newTemp0 != null)
                        newItem0 = ItemInfo.CreateWeapon(newTemp0, transferBefore, (int)ItemAddType.Strengthen);
                        transferBefore = newItem0;
                        if (newTemp1 != null)
                        newItem1 = ItemInfo.CreateWeapon(newTemp1, transferAfter, (int)ItemAddType.Strengthen);
                        transferAfter = newItem1;

                    }

                    StrengthenMgr.InheritTransferProperty(ref transferBefore, ref transferAfter, _moveHole, _moveFivSixHole);

                    client.Player.StoreBag2.ClearBag();
                    client.Player.StoreBag2.AddItemTo(transferBefore, 0);
                    client.Player.StoreBag2.AddItemTo(transferAfter, 1);
                    client.Player.SaveIntoDatabase();
                    pkg.WriteByte(0);
                    client.Out.SendTCP(pkg);

            }
            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("itemtransferhandler.nocondition"));
            }

            return 0;
        }
コード例 #18
0
ファイル: BaseSceneGame.cs プロジェクト: vancourt/BaseGunnyII
 public void ReturnPacket(GamePlayer player, GSPacketIn packet)
 {
     GSPacketIn pkg = packet.Clone();
     pkg.ClientID = player.PlayerCharacter.ID;
     SendToAll(pkg);
 }
コード例 #19
0
 public int HandlePacket(GameClient client, GSPacketIn packet)
 {
     GSPacketIn pkg = packet.Clone();
     client.SendTCP(pkg);
     return 0;
 }
コード例 #20
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            int id = packet.ReadInt();
            byte type = packet.ReadByte();
            List<int> types = new List<int>();
            string msg = "";// LanguageMgr.GetTranslation("MailGetAttachHandler.Falied");
            eMessageType eMsg = eMessageType.Normal;
            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {

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

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            using (PlayerBussiness db = new PlayerBussiness())
            {
                MailInfo mes = db.GetMailSingle(client.Player.PlayerCharacter.ID, id);
                if (mes != null)
                {
                    bool result = true;
                    int oldMoney = mes.Money;
                    GamePlayer player = Managers.WorldMgr.GetPlayerById(mes.ReceiverID);

                    if (mes.Type > 100 && mes.Money > client.Player.PlayerCharacter.Money)
                    {
                        client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("MailGetAttachHandler.NoMoney"));
                        return 0;
                    }

                    if (!mes.IsRead)
                    {
                        mes.IsRead = true;
                        mes.ValidDate = 3 * 24;
                        mes.SendTime = DateTime.Now;
                    }
                    if (result && (type == 0 || type == 1) && !string.IsNullOrEmpty(mes.Annex1))
                    {
                        if (GetAnnex(mes.Annex1, client.Player, ref msg, ref result, ref eMsg))
                        {
                            types.Add(1);
                            mes.Annex1 = null;
                        }
                    }

                    if (result && (type == 0 || type == 2) && !string.IsNullOrEmpty(mes.Annex2))
                    {
                        if (GetAnnex(mes.Annex2, client.Player, ref msg, ref result, ref eMsg))
                        {
                            types.Add(2);
                            mes.Annex2 = null;
                        }
                    }

                    if (result && (type == 0 || type == 3) && !string.IsNullOrEmpty(mes.Annex3))
                    {
                        if (GetAnnex(mes.Annex3, client.Player, ref msg, ref result, ref eMsg))
                        {
                            types.Add(3);
                            mes.Annex3 = null;
                        }
                    }

                    if (result && (type == 0 || type == 4) && !string.IsNullOrEmpty(mes.Annex4))
                    {
                        if (GetAnnex(mes.Annex4, client.Player, ref msg, ref result, ref eMsg))
                        {
                            types.Add(4);
                            mes.Annex4 = null;
                        }
                    }

                    if (result && (type == 0 || type == 5) && !string.IsNullOrEmpty(mes.Annex5))
                    {
                        if (GetAnnex(mes.Annex5, client.Player, ref msg, ref result, ref eMsg))
                        {
                            types.Add(5);
                            mes.Annex5 = null;
                        }
                    }

                    if ((type == 0 || type == 6) && mes.Gold > 0)
                    {
                        types.Add(6);
                        player.AddGold(mes.Gold);
                        mes.Gold = 0;
                    }

                    if ((type == 0 || type == 7) && mes.Type < 100 && mes.Money > 0)
                    {
                        types.Add(7);
                        player.AddMoney(mes.Money);
                        LogMgr.LogMoneyAdd(LogMoneyType.Mail, LogMoneyType.Mail_Money, player.PlayerCharacter.ID, mes.Money, player.PlayerCharacter.Money, 0, 0, 0,0, "", "", "");//添加日志
                        mes.Money = 0;
                    }
                    if (mes.Type > 100 && mes.GiftToken > 0)//trminhpc
                    {
                        types.Add(8);
                        player.AddGiftToken(mes.GiftToken);
                        mes.GiftToken = 0;
                    }

                    if (mes.Type > 100 && mes.Money > 0)
                    {
                        mes.Money = 0;
                        msg = LanguageMgr.GetTranslation("MailGetAttachHandler.Deduct") + (string.IsNullOrEmpty(msg) ? LanguageMgr.GetTranslation("MailGetAttachHandler.Success") : msg);
                    }

                    if (db.UpdateMail(mes, oldMoney))
                    {
                        if (mes.Type > 100 && oldMoney > 0)
                        {
                            player.RemoveMoney(oldMoney);
                            LogMgr.LogMoneyAdd(LogMoneyType.Mail, LogMoneyType.Mail_Pay, client.Player.PlayerCharacter.ID, oldMoney, client.Player.PlayerCharacter.Money, 0, 0, 0,0, "", "", "");
                            client.Out.SendMailResponse(mes.SenderID, eMailRespose.Receiver);
                            client.Out.SendMailResponse(mes.ReceiverID, eMailRespose.Send);
                        }
                    }

                    //pkg.WriteBoolean(result);
                    pkg.WriteInt(id);
                    pkg.WriteInt(types.Count);
                    foreach (int i in types)
                    {
                        pkg.WriteInt(i);
                    }

                    client.Out.SendTCP(pkg);

                    client.Out.SendMessage(eMsg, string.IsNullOrEmpty(msg) ? LanguageMgr.GetTranslation("MailGetAttachHandler.Success") : msg);
                }
                else
                {
                    client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("MailGetAttachHandler.Falied"));
                }
            }

            return 0;
        }
コード例 #21
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (countConnect >= 3000){client.Disconnect();return 0;}
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            StringBuilder str = new StringBuilder();
            int mustGold = GameProperties.PRICE_COMPOSE_GOLD;
            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {

                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked"));
                return 0;
            }
            if (client.Player.PlayerCharacter.Gold < mustGold)
            {
                client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("ItemComposeHandler.NoMoney"));
                return 0;
            }

            int itemPlace = - 1;
            int godPlace = -1;
            bool isBinds = false;
            bool consortia = packet.ReadBoolean();

            ItemInfo item = client.Player.StoreBag2.GetItemAt(1);
            ItemInfo stone = client.Player.StoreBag2.GetItemAt(2);
            ItemInfo luck = null;
            ItemInfo god = null;

            string BeginProperty = null;
            string AddItem = null;
            using (ItemRecordBussiness db = new ItemRecordBussiness())
            {
                db.PropertyString(item, ref BeginProperty);
            }
            if (item != null && stone != null && item.Template.CanCompose && (item.Template.CategoryID < 10 || stone.Template.CategoryID == 11 && stone.Template.Property1 == 1))
            {

                isBinds = isBinds ? true : item.IsBinds;
                isBinds = isBinds ? true : stone.IsBinds;
                str.Append(item.ItemID + ":" + item.TemplateID + "," + stone.ItemID + ":" + stone.TemplateID + ",");
                ThreadSafeRandom random = new ThreadSafeRandom();
                bool result = false;
                byte isSuccess = 1;
                //bool isGod = false;
                double probability = composeRate[(stone.Template.Quality - 1)] * 100;//stone.Template.Property2;
                if (client.Player.StoreBag2.GetItemAt(0)!=null)
                {
                    luck = client.Player.StoreBag2.GetItemAt(0);
                    if (luck != null && luck.Template.CategoryID == 11 && luck.Template.Property1 == 3)
                    {
                        isBinds = isBinds ? true : luck.IsBinds;
                        AddItem += "|" + luck.ItemID + ":" + luck.Template.Name + "|" + stone.ItemID + ":" + stone.Template.Name;
                        str.Append(luck.ItemID + ":" + luck.TemplateID + ",");
                        probability += probability * luck.Template.Property2 / 100;
                    }

                }
                else
                {
                    probability += probability * 1 / 100;
                }
                if (godPlace != -1)
                {
                    god = client.Player.PropBag.GetItemAt(godPlace);
                    if (god != null && god.Template.CategoryID == 11 && god.Template.Property1 == 7)
                    {
                        isBinds = isBinds ? true : god.IsBinds;
                        //isGod = true;
                        str.Append(god.ItemID + ":" + god.TemplateID + ",");
                        AddItem += "," + god.ItemID + ":" + god.Template.Name;
                    }
                    else
                    {
                        god = null;
                    }
                }
                //判断是公会铁匠铺还是铁匠铺
                if (consortia)
                {

                    ConsortiaInfo info = ConsortiaMgr.FindConsortiaInfo(client.Player.PlayerCharacter.ConsortiaID);
                    //这里添加公会权限限制的判断
                    ConsortiaBussiness csbs = new ConsortiaBussiness();
                    ConsortiaEquipControlInfo cecInfo = csbs.GetConsortiaEuqipRiches(client.Player.PlayerCharacter.ConsortiaID, 0, 2);

                    if (info == null)
                    {
                        client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemStrengthenHandler.Fail"));
                    }
                    else
                    {

                        if (client.Player.PlayerCharacter.Riches < cecInfo.Riches)
                        {
                            client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("ItemStrengthenHandler.FailbyPermission"));
                            return 1;
                        }
                        else
                        {
                            probability *= (1 + 0.1 * info.SmithLevel);

                        }
                    }

                }
                probability = Math.Floor(probability * 10) / 10;
                //client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Probability: " + probability.ToString()));
                int rand = random.Next(100);
                switch (stone.Template.Property3)
                {
                    case 1:
                        if (stone.Template.Property4 > item.AttackCompose)
                        {
                            result = true;
                            if (probability > rand)
                            {
                                isSuccess = 0;
                                item.AttackCompose = stone.Template.Property4;
                            }

                        }
                        break;
                    case 2:
                        if (stone.Template.Property4 > item.DefendCompose)
                        {
                            result = true;
                            if (probability > rand)
                            {
                                isSuccess = 0;
                                item.DefendCompose = stone.Template.Property4;
                            }

                        }
                        break;
                    case 3:
                        if (stone.Template.Property4 > item.AgilityCompose)
                        {
                            result = true;
                            if (probability > rand)
                            {
                                isSuccess = 0;
                                item.AgilityCompose = stone.Template.Property4;
                            }

                        }
                        break;
                    case 4:
                        if (stone.Template.Property4 > item.LuckCompose)
                        {
                            result = true;
                            if (probability > rand)
                            {
                                isSuccess = 0;
                                item.LuckCompose = stone.Template.Property4;
                            }

                        }
                        break;
                }

                if (result)
                {
                    item.IsBinds = isBinds;
                    if (isSuccess != 0)
                    {
                        str.Append("false!");
                        result = false;

                    }
                    else
                    {
                        str.Append("true!");
                        result = true;
                        client.Player.OnItemCompose(stone.TemplateID);
                    }
                    LogMgr.LogItemAdd(client.Player.PlayerCharacter.ID, LogItemType.Compose, BeginProperty, item, AddItem, Convert.ToInt32(result));
                    client.Player.RemoveItem(stone);
                    client.Player.SaveIntoDatabase();//保存到数据库
                    if (luck != null)
                    {
                        client.Player.RemoveItem(luck);
                    }
                    if (god != null)
                    {
                        client.Player.RemoveItem(god);
                    }
                    client.Player.RemoveGold(mustGold);
                    client.Player.StoreBag2.ClearBag();
                    client.Player.StoreBag2.AddItemTo(item, 1);
                    //client.Player.StoreBag2.UpdateItem(item);
                    pkg.WriteByte(isSuccess);
                    client.Out.SendTCP(pkg);
                    if (itemPlace < 31)
                    {
                        client.Player.MainBag.UpdatePlayerProperties();
                    }
                }
                else
                {
                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemComposeHandler.NoLevel"));
                }
            }
            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemComposeHandler.Fail"));
            }

            return 0;
        }
コード例 #22
0
        // <summary>
        // 修改:  Xiaov 
        // 时间:  2009-11-7
        // 描述:  发送邮件<未测试>   
       
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {

           
            if (client.Player.PlayerCharacter.Gold < 100)
                return 1;

           

            string msg = "UserSendMailHandler.Success";
            eMessageType eMsg = eMessageType.Normal;
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            string nickName = packet.ReadString().Trim();
            string title = packet.ReadString();
            string content = packet.ReadString();
            bool isPay = packet.ReadBoolean();
            int validDate = packet.ReadInt();
            int money = packet.ReadInt();

            eBageType bag1 = (eBageType)packet.ReadByte();
            int place1 = packet.ReadInt();
            eBageType bag2 = (eBageType)packet.ReadByte();
            int place2 = packet.ReadInt();
            eBageType bag3 = (eBageType)packet.ReadByte();
            int place3 = packet.ReadInt();
            eBageType bag4 = (eBageType)packet.ReadByte();
            int place4 = packet.ReadInt();

            if ((money!=0||place1!=-1||place2!=-1||place3!=-1||place4!=-1)&&(client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked))
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked"));
                pkg.WriteBoolean(false);
                client.Out.SendTCP(pkg);
                return 1;
            }

            using (PlayerBussiness db = new PlayerBussiness())
            {
                PlayerInfo user;
                GamePlayer player = Managers.WorldMgr.GetClientByPlayerNickName(nickName);
                if (player == null)
                {
                    user = db.GetUserSingleByNickName(nickName);
                }
                else
                {
                    user = player.PlayerCharacter;
                }

                if (user != null && !string.IsNullOrEmpty(nickName))
                {
                    if (user.NickName != client.Player.PlayerCharacter.NickName)
                    {
                        client.Player.SaveIntoDatabase();

                        //附件内容描述(例:邮件最后一行标注附件为:1、大喇叭x5;2、强化石4级x1;3、极•烈火x1;4、点券999999;5、强化公式-朱雀x5
                        MailInfo message = new MailInfo();
                        message.SenderID = client.Player.PlayerCharacter.ID;
                        message.Sender = client.Player.PlayerCharacter.NickName;
                        message.ReceiverID = user.ID;
                        message.Receiver = user.NickName;
                        message.IsExist = true;
                        message.Gold = 0;
                        message.Money = 0;

                        message.Title = title;
                        message.Content = content;
                        List<ItemInfo> items = new List<ItemInfo>();
                        List<eBageType> bagType = new List<eBageType>();
                        StringBuilder annexRemark = new StringBuilder();
                        annexRemark.Append(LanguageMgr.GetTranslation("UserSendMailHandler.AnnexRemark"));
                        int index = 0;

                        if (place1 != -1)
                        {
                            ItemInfo goods = client.Player.GetItemAt(bag1, place1);
                            if (goods != null && !goods.IsBinds)
                            {
                                message.Annex1Name = goods.Template.Name;
                                message.Annex1 = goods.ItemID.ToString();
                                items.Add(goods);
                                bagType.Add(bag1);
                                //annexRemark = message.Annex1Name + "x" + goods.Count;
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                //annexRemark.Append(annexRemark.Length);
                                annexRemark.Append(message.Annex1Name);
                                annexRemark.Append("x");
                                annexRemark.Append(goods.Count);
                                annexRemark.Append(";");
                                //goods.UserID = 0;
                                //client.Player.RemoveAllItem(goods, true, ItemRemoveType.Mail);
                            }
                        }

                        if (place2 != -1)
                        {
                            ItemInfo goods = client.Player.GetItemAt(bag2, place2);
                            if (goods != null && !goods.IsBinds)
                            {
                                message.Annex2Name = goods.Template.Name;
                                message.Annex2 = goods.ItemID.ToString();
                                items.Add(goods);
                                bagType.Add(bag2);
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                annexRemark.Append(message.Annex2Name);
                                annexRemark.Append("x");
                                annexRemark.Append(goods.Count);
                                annexRemark.Append(";");
                                //goods.UserID = 0;
                                //client.Player.RemoveAllItem(goods, true, ItemRemoveType.Mail);
                            }
                        }

                        if (place3 != -1)
                        {
                            ItemInfo goods = client.Player.GetItemAt(bag3, place3);
                            if (goods != null && !goods.IsBinds)
                            {
                                message.Annex3Name = goods.Template.Name;
                                message.Annex3 = goods.ItemID.ToString();
                                items.Add(goods);
                                bagType.Add(bag3);
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                annexRemark.Append(message.Annex3Name);
                                annexRemark.Append("x");
                                annexRemark.Append(goods.Count);
                                annexRemark.Append(";");
                            }
                        }

                        if (place4 != -1)
                        {
                            ItemInfo goods = client.Player.GetItemAt(bag4, place4);
                            if (goods != null && !goods.IsBinds)
                            {
                                message.Annex4Name = goods.Template.Name;
                                message.Annex4 = goods.ItemID.ToString();
                                items.Add(goods);
                                bagType.Add(bag4);
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                annexRemark.Append(message.Annex4Name);
                                annexRemark.Append("x");
                                annexRemark.Append(goods.Count);
                                annexRemark.Append(";");
                            }
                        }

                        if (isPay)
                        {
                            if (money <= 0 || (string.IsNullOrEmpty(message.Annex1) && string.IsNullOrEmpty(message.Annex2) && string.IsNullOrEmpty(message.Annex3) && string.IsNullOrEmpty(message.Annex4)))
                                return 1;

                            message.ValidDate = validDate == 1 ? 1 : 6;
                            message.Type = (int)eMailType.Payment;
                            if (money > 0)
                            {
                                message.Money = money;
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                annexRemark.Append(LanguageMgr.GetTranslation("UserSendMailHandler.PayMoney"));
                                annexRemark.Append(money);
                                annexRemark.Append(";");
                            }
                        }
                        else
                        {
                            message.Type = (int)eMailType.Common;
                            if (client.Player.PlayerCharacter.Money >= money && money > 0)
                            {
                                message.Money = money;
                                client.Player.RemoveMoney(money);
                                LogMgr.LogMoneyAdd(LogMoneyType.Mail, LogMoneyType.Mail_Send, client.Player.PlayerCharacter.ID, money, client.Player.PlayerCharacter.Money, 0, 0, 0, "", "", "");
                                index++;
                                annexRemark.Append(index);
                                annexRemark.Append("、");
                                annexRemark.Append(LanguageMgr.GetTranslation("UserSendMailHandler.Money"));
                                annexRemark.Append(money);
                                annexRemark.Append(";");
                            }
                        }

                        if (annexRemark.Length > 1)
                        {
                            message.AnnexRemark = annexRemark.ToString();
                        }

                        if (db.SendMail(message))
                        {
                            client.Player.RemoveGold(100);
                            for(int i=0;i<items.Count;i++)
                            {
                                items[i].UserID = 0;
                                client.Player.RemoveItem(items[i]);
                                items[i].IsExist = true;
                            }
                        }

                        client.Player.SaveIntoDatabase();
                        pkg.WriteBoolean(true);

                        //发送通知
                        if (user.State != 0)
                        {
                            client.Player.Out.SendMailResponse(user.ID, eMailRespose.Receiver);
                        }
                        client.Player.Out.SendMailResponse(client.Player.PlayerCharacter.ID, eMailRespose.Send);
                    }
                    else
                    {
                        msg = "UserSendMailHandler.Failed1";
                        pkg.WriteBoolean(false);
                    }
                }
                else
                {   
                     
                    eMsg = eMessageType.ERROR;
                    msg = "UserSendMailHandler.Failed2";
                    pkg.WriteBoolean(false);
                }
            }
            client.Out.SendMessage(eMsg, LanguageMgr.GetTranslation(msg));
            client.Out.SendTCP(pkg);
            
            return 0;
        }
コード例 #23
0
 public void ReturnPacketForScene(GamePlayer player, GSPacketIn packet)
 {
     GSPacketIn pkg = packet.Clone();
     pkg.ClientID = player.PlayerCharacter.ID;
     SendToPlayerExceptSelfForScene(pkg, player);
     //SendToAll(pkg);
 }
コード例 #24
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            if (countConnect >= 3000){client.Disconnect();return 0;}

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            int ItemBagType = packet.ReadInt();
            int ItemPlace = packet.ReadInt();

            int HoleNum = packet.ReadInt();

            int GemBagType = packet.ReadInt();
            int GemPlace = packet.ReadInt();

            ItemInfo Item = client.Player.GetItemAt((eBageType)ItemBagType, ItemPlace);

            ItemInfo Gem = client.Player.GetItemAt((eBageType)GemBagType, GemPlace);

            string BeginProperty = null;
            string AddItem = "";
             using (ItemRecordBussiness db = new ItemRecordBussiness())
            {
                db.PropertyString(Item, ref BeginProperty);
            }

            int Glod = 2000;
            if (Item == null || Gem == null || Gem.Template.Property1 != 31)
                return 0;
            if (client.Player.PlayerCharacter.Gold > Glod)
            {
                string[] Hole = Item.Template.Hole.Split('|');
                if (HoleNum > 0 && HoleNum < 7)
                {
                    client.Player.RemoveGold(Glod);
                    bool result = false;
                    switch (HoleNum)
                    {
                        case 1:
                            if (Item.Hole1 >= 0)
                            {
                                string[] str = Hole[0].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole1 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + ","+ Gem.Template.Name ;
                                    result = true;
                                }
                            }
                            break;
                        case 2:
                            if (Item.Hole2 >= 0)
                            {
                                string[] str = Hole[1].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole2 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + "," + Gem.Template.Name;
                                    result = true;
                                }
                            }
                            break;
                        case 3:
                            if (Item.Hole3 >= 0)
                            {
                                string[] str = Hole[2].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole3 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + "," + Gem.Template.Name;
                                    result = true;
                                }
                            }
                            break;
                        case 4:
                            if (Item.Hole4 >= 0)
                            {
                                string[] str = Hole[3].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole4 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + "," + Gem.Template.Name;
                                    result = true;
                                }
                            }
                            break;
                        case 5:
                            if (Item.Hole5 >= 0)
                            {
                                string[] str = Hole[4].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole5 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + "," + Gem.Template.Name;
                                    result = true;
                                }
                            }
                            break;
                        case 6:
                            if (Item.Hole6 >= 0)
                            {
                                string[] str = Hole[5].Split(',');

                                if (Convert.ToInt32(str[1]) == Gem.Template.Property2)
                                {
                                    Item.Hole6 = Gem.TemplateID;
                                    AddItem += "," + Gem.ItemID + "," + Gem.Template.Name;
                                    result = true;
                                }
                            }
                            break;
                    }

                    if (result)
                    {
                        //client.Player.StoreBag2.MoveToStore(client.Player.StoreBag2, 0, client.Player.MainBag.FindFirstEmptySlot(31), client.Player.MainBag, 9);
                        pkg.WriteInt(0);
                        Gem.Count--;
                        client.Player.StoreBag2.UpdateItem(Item);
                        client.Player.UpdateItem(Gem);
                        //client.Player.UpdateItem(Item);
                        //client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemInlayHandle.Success", Gem.Template.Name));
                    }
                    LogMgr.LogItemAdd(client.Player.PlayerCharacter.ID, LogItemType.Insert, BeginProperty, Item, AddItem, Convert.ToInt32(result));
                }
                else
                {
                    pkg.WriteByte(1);
                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemInlayHandle.NoPlace"));
                }
                client.Player.SendTCP(pkg);
                client.Player.SaveIntoDatabase();//保存到数据库
            }

            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserBuyItemHandler.NoMoney"));
            }
            return 0;
        }
コード例 #25
0
        public bool HandleCommand(TankMarryLogicProcessor process, GamePlayer player, GSPacketIn packet)
        {
            if (player.CurrentMarryRoom == null || player.CurrentMarryRoom.RoomState != eRoomState.FREE)
            {
                return false;
            }

            if(player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.GroomID && player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.BrideID )
            {
                return false;
            }

            int needMoney = GameProperties.PRICE_PROPOSE;
            if(player.CurrentMarryRoom.Info.IsHymeneal)
            {
                if (player.PlayerCharacter.Money < needMoney)
                {
                    player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("UserFirecrackersCommand.MoneyNotEnough"));
                    return false;
                }
            }

            GamePlayer Groom = player.CurrentMarryRoom.GetPlayerByUserID(player.CurrentMarryRoom.Info.GroomID);
            if(Groom == null)
            {
                player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("HymenealCommand.NoGroom"));
                return false;
            }

            GamePlayer Bride = player.CurrentMarryRoom.GetPlayerByUserID(player.CurrentMarryRoom.Info.BrideID);
            if (Bride == null)
            {
                player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("HymenealCommand.NoBride"));
                return false;
            }

            bool result = false;
            bool isFirst = false;
            GSPacketIn pkg = packet.Clone();

            int hymenealState = packet.ReadInt();

            if (1 == hymenealState)
            {
                player.CurrentMarryRoom.RoomState = eRoomState.FREE;
            }
            else
            {
                player.CurrentMarryRoom.RoomState = eRoomState.Hymeneal;
                player.CurrentMarryRoom.BeginTimerForHymeneal(170 * 1000);

                if (!player.PlayerCharacter.IsGotRing)
                {
                    isFirst = true;
                    ItemTemplateInfo ringTemplate = ItemMgr.FindItemTemplate(9022);
                    ItemInfo ring1 = ItemInfo.CreateFromTemplate(ringTemplate, 1, (int)ItemAddType.webing);
                    ring1.IsBinds = true;
                    //Groom.CurrentInventory.AddItem(ring1, 11);
                    using (PlayerBussiness pb = new PlayerBussiness())
                    {
                        ring1.UserID = 0;
                        pb.AddGoods(ring1);

                        string content = LanguageMgr.GetTranslation("HymenealCommand.Content", Bride.PlayerCharacter.NickName);

                        MailInfo mail = new MailInfo();
                        mail.Annex1 = ring1.ItemID.ToString();
                        mail.Content = content;
                        mail.Gold = 0;
                        mail.IsExist = true;
                        mail.Money = 0;
                        mail.Receiver = Groom.PlayerCharacter.NickName;
                        mail.ReceiverID = Groom.PlayerCharacter.ID;
                        mail.Sender = LanguageMgr.GetTranslation("HymenealCommand.Sender");
                        mail.SenderID = 0;
                        mail.Title = LanguageMgr.GetTranslation("HymenealCommand.Title");
                        mail.Type = (int)eMailType.Marry;
                        if (pb.SendMail(mail))
                        {
                            result = true;
                        }
                        player.Out.SendMailResponse(mail.ReceiverID, eMailRespose.Receiver);
                    }

                    ItemInfo ring2 = ItemInfo.CreateFromTemplate(ringTemplate, 1, (int)ItemAddType.webing);
                    ring2.IsBinds = true;
                    //Bride.CurrentInventory.AddItem(ring2, 11);
                    using (PlayerBussiness pb = new PlayerBussiness())
                    {
                        ring2.UserID = 0;
                        pb.AddGoods(ring2);

                        string content = LanguageMgr.GetTranslation("HymenealCommand.Content", Groom.PlayerCharacter.NickName);

                        MailInfo mail = new MailInfo();
                        mail.Annex1 = ring2.ItemID.ToString();
                        mail.Content = content;
                        mail.Gold = 0;
                        mail.IsExist = true;
                        mail.Money = 0;
                        mail.Receiver = Bride.PlayerCharacter.NickName;
                        mail.ReceiverID = Bride.PlayerCharacter.ID;
                        mail.Sender = LanguageMgr.GetTranslation("HymenealCommand.Sender");
                        mail.SenderID = 0;
                        mail.Title = LanguageMgr.GetTranslation("HymenealCommand.Title");
                        mail.Type = (int)eMailType.Marry;
                        if (pb.SendMail(mail))
                        {
                            result = true;
                        }
                        player.Out.SendMailResponse(mail.ReceiverID, eMailRespose.Receiver);
                    }

                    player.CurrentMarryRoom.Info.IsHymeneal = true;

                    using (PlayerBussiness db = new PlayerBussiness())
                    {
                        db.UpdateMarryRoomInfo(player.CurrentMarryRoom.Info);

                        //更新IsGotRing的数据库
                        db.UpdatePlayerGotRingProp(Groom.PlayerCharacter.ID,Bride.PlayerCharacter.ID);

                        //通过数据库读入PlayerCharacter内存
                        Groom.LoadMarryProp();
                        Bride.LoadMarryProp();
                    }

                    //Groom.PlayerCharacter.IsGotRing = true;
                    //Bride.PlayerCharacter.IsGotRing = true;

                }
                else
                {
                    isFirst = false;
                    result = true;
                }

                if (!isFirst)
                {
                    //player.SetMoney(-needMoney, MoneyRemoveType.Marry);
                    player.RemoveMoney(needMoney);
                    LogMgr.LogMoneyAdd(LogMoneyType.Marry, LogMoneyType.Marry_Hymeneal, player.PlayerCharacter.ID, needMoney, player.PlayerCharacter.Money, 0, 0, 0,0, "", "", "");
                    CountBussiness.InsertSystemPayCount(player.PlayerCharacter.ID, needMoney, 0, (int)eConsumerType.Marry, (int)eSubConsumerType.Marry_Hymeneal);
                }

                pkg.WriteInt(player.CurrentMarryRoom.Info.ID);
                pkg.WriteBoolean(result);
                //0 player.CurrentMarryRoom.SendToAll(pkg);
                //0 player.CurrentMarryRoom.SendToAllForScene(pkg,1);
                player.CurrentMarryRoom.SendToAll(pkg);

                if(result)
                {
                    string msg = LanguageMgr.GetTranslation("HymenealCommand.Succeed", Groom.PlayerCharacter.NickName, Bride.PlayerCharacter.NickName);
                    GSPacketIn message = player.Out.SendMessage(eMessageType.ChatNormal, msg);
                    player.CurrentMarryRoom.SendToPlayerExceptSelfForScene(message, player);
                }
            }

            return true;
        }
コード例 #26
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            packet.ClientID = (client.Player.PlayerCharacter.ID);

            byte channel = packet.ReadByte();
            bool team = packet.ReadBoolean();
            string nick = packet.ReadString();
            string msg = packet.ReadString();

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();
            pkg.ClientID = (client.Player.PlayerCharacter.ID);
            pkg.WriteInt(4);
            pkg.WriteByte(channel);
            pkg.WriteBoolean(team);
            pkg.WriteString(client.Player.PlayerCharacter.NickName);
            pkg.WriteString(msg);

            if (client.Player.CurrentRoom != null)
            {
                if (client.Player.CurrentRoom.RoomType == eRoomType.Match)
                {
                    if (client.Player.CurrentRoom.Game != null)
                    {
                        client.Player.CurrentRoom.BattleServer.Server.SendChatMessage(msg, client.Player,team);
                        return 1;
                    }                  
                }
            }
            //3公会
            if (channel == 3)
            {
                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);
                //string nick = packet.ReadString();
                //string msg = packet.ReadString();
                pkg.WriteInt(client.Player.PlayerCharacter.ConsortiaID);

                GamePlayer[] players = WorldMgr.GetAllPlayers();
                foreach (GamePlayer p in players)
                {
                    if (p.PlayerCharacter.ConsortiaID == client.Player.PlayerCharacter.ConsortiaID && !p.IsBlackFriend(client.Player.PlayerCharacter.ID))
                        p.Out.SendTCP(pkg);
                }

                GameServer.Instance.LoginServer.SendPacket(pkg);
            }
            else if (channel == 9)
            {
                if (client.Player.CurrentMarryRoom == null)
                {
                    return 1;
                }

                //0 client.Player.CurrentMarryRoom.SendToAll(pkg);
                client.Player.CurrentMarryRoom.SendToAllForScene(pkg, client.Player.MarryMap);
            }
            else
            {

                if (client.Player.CurrentRoom != null)
                {
                    if (team)
                    {
                        client.Player.CurrentRoom.SendToTeam(pkg, client.Player.CurrentRoomTeam, client.Player);
                    }
                    else
                    {
                        client.Player.CurrentRoom.SendToAll(pkg);
                    }
                }
                else
                {
                    if (DateTime.Compare(client.Player.LastChatTime.AddSeconds(1), DateTime.Now) > 0 && channel == 5)
                        return 1;

                    if (team)
                        return 1;
                    if (DateTime.Compare(client.Player.LastChatTime.AddSeconds(30), DateTime.Now) > 0)
                    {
                        client.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("SceneChatHandler.Fast"));
                        return 1;
                    }
                    client.Player.LastChatTime = DateTime.Now;

                    GamePlayer[] list = Managers.WorldMgr.GetAllPlayers();
                    foreach (GamePlayer p in list)
                    {
                        if (p.CurrentRoom == null && p.CurrentMarryRoom == null && !p.IsBlackFriend(client.Player.PlayerCharacter.ID))
                            p.Out.SendTCP(pkg);
                    }
                }
            }


            return 1;
        }
コード例 #27
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();
            bool IsBinds = false;
            int OpertionType = packet.ReadInt();
            int Count = packet.ReadInt();

            List<ItemInfo> Items = new List<ItemInfo>();
            List<ItemInfo> AppendItems = new List<ItemInfo>();
            List<eBageType> BagTypes = new List<eBageType>();

            StringBuilder str = new StringBuilder();

            int defaultprobability = 25;

            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.locked"));
                return 1;
            }



            for (int i = 0; i < Count; i++)
            {
                eBageType bagType = (eBageType)packet.ReadInt();
                int place = packet.ReadInt();

                ItemInfo info = client.Player.GetItemAt(bagType, place);
                if (info != null)
                {
                    if (!Items.Contains(info))
                    {
                        if (info.IsBinds == true)
                        {
                            IsBinds = true;
                        }
                        str.Append(info.ItemID + ":" + info.TemplateID + ",");
                        Items.Add(info);
                        BagTypes.Add(bagType);
                    }
                    else
                    {
                        client.Out.SendMessage(eMessageType.Normal, "Bad Input");
                        return 1;
                    }
                }

            }

            //          ItemInfo MainMaterial = client.Player.GetItemAt(packet.ReadInt(), packet.ReadInt());


            eBageType BagType = (eBageType)packet.ReadInt();
            int Place = packet.ReadInt();

            ItemInfo Item = client.Player.GetItemAt(BagType, Place);
            if (Item != null)
            {
                str.Append(Item.ItemID + ":" + Item.TemplateID + ",");
            }

            eBageType LuckBagType = (eBageType)packet.ReadInt();
            int LuckPlace = packet.ReadInt();

            ItemInfo LuckItem = client.Player.GetItemAt(LuckBagType, LuckPlace); ;

            bool Luck = LuckItem == null ? false : true;

            //if (IsBinds != Item.IsBinds && IsBinds == true)
            //{
            //    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemRefineryHandler.IsBinds"));
            //  //  return 1;
            //}

            if (Count != 4 || Item == null)
            {

                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemRefineryHandler.ItemNotEnough"));
                return 1;
            }

            bool result = false;
            bool IsFormula = false;


            if (OpertionType == 0)  //预览模式
            {
                ItemTemplateInfo Template = Managers.RefineryMgr.Refinery(client.Player, Items, Item, Luck, OpertionType, ref result, ref defaultprobability, ref IsFormula);

                if (Template != null)
                {
                    client.Out.SendRefineryPreview(client.Player, Template.TemplateID, IsBinds, Item);
                }

                return 0;

            }
            else                     //玩家炼化
            {

                int MustGold = 10000;

                if (client.Player.PlayerCharacter.Gold > MustGold)
                {

                    client.Player.RemoveGold(MustGold);
                    ItemTemplateInfo RewardItem = Managers.RefineryMgr.Refinery(client.Player, Items, Item, Luck, OpertionType, ref result, ref defaultprobability, ref IsFormula);
                    if (RewardItem != null && IsFormula && result)
                    {
                        str.Append("Success");
                        result = true;

                        if (result)
                        {
                            ItemInfo item = ItemInfo.CreateFromTemplate(RewardItem, 1, (int)ItemAddType.Refinery);

                            if (item != null)
                            {
                                client.Player.OnItemMelt(Item.Template.CategoryID);
                              //  Managers.RefineryMgr.InheritProperty(Item, ref item);
                                item.IsBinds = IsBinds;

                                AbstractInventory bg = client.Player.GetItemInventory(RewardItem);

                                if (!bg.AddItem(item, bg.BeginSlot))
                                {
                                    str.Append("NoPlace");
                                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation(item.GetBagName()) + LanguageMgr.GetTranslation("ItemFusionHandler.NoPlace"));
                                }

                                pkg.WriteByte(0);

                                Item.Count--;
                                client.Player.UpdateItem(Item);
                            }
                        }

                        else
                        {
                            str.Append("false");

                        }                        
                        
                    }
                    else
                    {
                        pkg.WriteByte(1);
                    }



                    if (Luck)
                    {
                        LuckItem.Count--;
                        client.Player.UpdateItem(LuckItem);
                    }

                    for (int i = 0; i < Items.Count; i++)
                    {
                        client.Player.UpdateItem(Items[i]);
                        if (Items[i].Count <= 0)
                        {
                            client.Player.RemoveItem(Items[i]);                            
                        }
                    }
                    client.Player.RemoveItem(Items[Items.Count - 1]);
                    client.Player.Out.SendTCP(pkg);

                }
                else
                {
                    client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemRefineryHandler.NoGold"));
                }


                return 1;
            }
        }
コード例 #28
0
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            int id = packet.ReadInt();
            int price = packet.ReadInt();
            bool result = false;
            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            string msg = "AuctionUpdateHandler.Fail";
            if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked)
            {

                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked"));
                return 0;
            }
            using (PlayerBussiness db = new PlayerBussiness())
            {
                AuctionInfo info = db.GetAuctionSingle(id);
                if (info == null)
                {
                    msg = "AuctionUpdateHandler.Msg1";
                }
                else if (info.PayType == 0 && price > client.Player.PlayerCharacter.Gold)
                {
                    msg = "AuctionUpdateHandler.Msg2";
                }
                else if (info.PayType == 1 && price > client.Player.PlayerCharacter.Money)
                {
                    msg = "AuctionUpdateHandler.Msg3";
                }
                else if (info.BuyerID == 0 && info.Price > price)
                {
                    msg = "AuctionUpdateHandler.Msg4";
                }
                else if (info.BuyerID != 0 && info.Price + info.Rise > price && (info.Mouthful == 0 || info.Mouthful > price))
                {
                    msg = "AuctionUpdateHandler.Msg5";
                }
                else
                {
                    int oldBuyerID = info.BuyerID;
                    info.BuyerID = client.Player.PlayerCharacter.ID;
                    info.BuyerName = client.Player.PlayerCharacter.NickName;
                    info.Price = price;
                    if (info.Mouthful != 0 && price >= info.Mouthful)
                    {
                        info.Price = info.Mouthful;
                        info.IsExist = false;
                    }
                    if (db.UpdateAuction(info))
                    {
                        if (info.PayType == 0)
                        {
                            client.Player.RemoveGold(info.Price);
                        }
                        else
                        {
                            client.Player.RemoveMoney(info.Price);
                            LogMgr.LogMoneyAdd(LogMoneyType.Auction, LogMoneyType.Auction_Update, client.Player.PlayerCharacter.ID, info.Price, client.Player.PlayerCharacter.Money, 0, 0, 0, "", "", "");
                        }

                        if (info.IsExist)
                        {
                            msg = "AuctionUpdateHandler.Msg6";
                        }
                        else
                        {
                            msg = "AuctionUpdateHandler.Msg7";
                            client.Out.SendMailResponse(info.AuctioneerID, eMailRespose.Receiver);
                            client.Out.SendMailResponse(info.BuyerID, eMailRespose.Receiver);
                        }

                        if (oldBuyerID != 0)
                        {
                            client.Out.SendMailResponse(oldBuyerID, eMailRespose.Receiver);//通知老买主价格被超出
                        }
                        result = true;
                    }
                }

                client.Out.SendAuctionRefresh(info, id, info != null ? info.IsExist : false, null);
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation(msg));
            }
            pkg.WriteBoolean(result);
            pkg.WriteInt(id);
            client.Out.SendTCP(pkg);
            return 0;
        }
コード例 #29
0
        //private static readonly double[] rateItems = new double[] { 0.75, 3, 12, 48, 240, 768 };
        //public static int countConnect = 0;
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            //if (countConnect >= 3000)
            //{
            //    client.Disconnect();
            //    return 0;
            //}
            StringBuilder str = new StringBuilder();
            bool isBinds = false;
            bool consortia = packet.ReadBoolean();
            bool MultiSelected = packet.ReadBoolean();

            GSPacketIn pkg = packet.Clone();
            pkg.ClearContext();

            List<ItemInfo> stones = new List<ItemInfo>();
            ItemInfo stone = client.Player.StoreBag2.GetItemAt(0);
            ItemInfo item = client.Player.StoreBag2.GetItemAt(1);

            //ItemInfo luck = null;
            //ItemInfo god = null;
            string BeginProperty = null;
            string AddItem = "";
            using (ItemRecordBussiness db = new ItemRecordBussiness())
            {
                db.PropertyString(item, ref BeginProperty);
            }

            if (item != null && item.Template.CanStrengthen && item.Template.CategoryID < 18 && item.Count == 1)
            {
                isBinds = isBinds ? true : item.IsBinds;
                str.Append(item.ItemID + ":" + item.TemplateID + ",");
                double exp1 = 0;
                double exp2 = 0;
                double exp3 = 0;
                double totalExp = 0;

                if (stone != null && stone.Template.CategoryID == 11 && (stone.Template.Property1 == 2 || stone.Template.Property1 == 35))
                {
                    isBinds = isBinds ? true : stone.IsBinds;
                    AddItem += "," + stone.ItemID.ToString() + ":" + stone.Template.Name;
                    stones.Add(stone);
                    exp1 += stone.Template.Property2;
                }

                bool ConsortiaRate = false;
                ConsortiaInfo info = ConsortiaMgr.FindConsortiaInfo(client.Player.PlayerCharacter.ConsortiaID);
                //判断是公会铁匠铺还是铁匠铺??
                if (consortia)
                {
                    ConsortiaBussiness csbs = new ConsortiaBussiness();
                    ConsortiaEquipControlInfo cecInfo = csbs.GetConsortiaEuqipRiches(client.Player.PlayerCharacter.ConsortiaID, 0, 2);

                    if (info == null)
                    {
                        client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemStrengthenHandler.Fail"));
                    }
                    else
                    {
                        if (client.Player.PlayerCharacter.Riches < cecInfo.Riches)
                        {
                            client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("ItemStrengthenHandler.FailbyPermission"));
                            return 1;
                        }
                        ConsortiaRate = true;
                    }
                }
                if (ConsortiaRate)
                {
                    //ConsortiaRateManager.instance.getConsortiaStrengthenEx(PlayerManager.Instance.Self.consortiaInfo.SmithLevel)
                    //"ConsortiaStrengthenEx" Value="10|20|30|40|50|60|70|80|90|100"
                    List<double> ConsortiaStrengthenEx = new List<double> { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
                    exp2 = ConsortiaStrengthenEx[info.SmithLevel - 1] / 100 * exp1;
                }
                if (client.Player.PlayerCharacter.VIPExpireDay >= DateTime.Now)
                {
                    //_loc_4 = VipController.instance.getVIPStrengthenEx(PlayerManager.Instance.Self.VIPLevel)
                    //"VIPStrengthenEx" Value="25|25|25|35|35|50|50|50|50|50|50|50"
                    List<double> VIPStrengthenEx = new List<double> { 25, 25, 25, 35, 35, 50, 50, 50, 50, 50, 50, 50 };
                    exp3 = VIPStrengthenEx[client.Player.PlayerCharacter.VIPLevel - 1] / 100 * exp1;
                }
                totalExp += Math.Floor(exp1 + exp2 + exp3);
                str.Append("true");
                List<int> StrengThenExp = new List<int> { 0, 10, 50, 150, 350, 700, 1500, 2300, 3300, 4500, 6000, 7500, 9000 };

                //Console.WriteLine("-------Total: " + stone.Count.ToString() + "| Inject: " + MultiSelected);
                if (MultiSelected)// && stone.Count > 1)
                {
                    //for (int i = 0; i < stone.Count; i++)
                    //{
                    item.StrengthenExp += (int)totalExp * stone.Count;
                    client.Player.StoreBag2.RemoveTemplate(stone.TemplateID, stone.Count);
                    //}
                }
                else
                {
                    item.StrengthenExp += (int)totalExp;
                    client.Player.StoreBag2.RemoveTemplate(stone.TemplateID, 1);

                }

                if (item.StrengthenExp >= StrengThenExp[item.StrengthenLevel + 1])
                {
                    //for (int a = StrengThenExp[item.StrengthenLevel]; a < item.StrengthenExp; a++)
                    int a = StrengThenExp[item.StrengthenLevel];
                    do
                    {
                        if (item.StrengthenLevel < 13)
                        {
                            if (item.StrengthenExp >= StrengThenExp[item.StrengthenLevel + 1])
                            {
                                item.StrengthenLevel++;
                                item.StrengthenExp -= StrengThenExp[item.StrengthenLevel];
                                a = StrengThenExp[item.StrengthenLevel];

                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    while (item.StrengthenExp > a);
                    if (item.StrengthenLevel == 12 && (item.StrengthenExp / totalExp) > 0)
                    {
                        stone.Count = (int)Math.Floor(item.StrengthenExp / totalExp);
                        client.Player.StoreBag2.AddItemTo(stone, 0);
                        client.Player.StoreBag2.UpdateItem(stone);
                        //if (item.StrengthenLevel == 12)
                        item.StrengthenExp = 0;
                    }
                    pkg.WriteByte(1);

                    StrengthenGoodsInfo strengthenGoodsInfo = StrengthenMgr.FindStrengthenGoodsInfo(item.StrengthenLevel, item.TemplateID);
                    if (strengthenGoodsInfo != null && item.Template.CategoryID == 7)
                    {
                        ItemTemplateInfo Temp = Bussiness.Managers.ItemMgr.FindItemTemplate(strengthenGoodsInfo.GainEquip);
                        if (Temp != null)
                        {
                            ItemInfo newItem = ItemInfo.CreateFromTemplate(Temp, 1, (int)ItemAddType.Strengthen);
                            newItem.StrengthenLevel = item.StrengthenLevel;
                            newItem.StrengthenExp = item.StrengthenExp;
                            ItemInfo.OpenHole(ref newItem);
                            StrengthenMgr.InheritProperty(item, ref newItem);
                            client.Player.StoreBag2.RemoveItemAt(1);
                            client.Player.StoreBag2.AddItemTo(newItem, 1);
                            //client.Player.StoreBag2.UpdateItem(newItem);
                            item = newItem;
                            if ((item.StrengthenLevel == 3 || item.StrengthenLevel == 6 || item.StrengthenLevel == 9 || item.StrengthenLevel == 12) && item.Template.CategoryID != 17)
                            {
                                pkg.WriteBoolean(true);
                            }
                            else
                            {
                                pkg.WriteBoolean(false);
                            }
                        }
                    }
                    else
                    {

                        ItemInfo.OpenHole(ref item);
                        //client.Player.StoreBag2.AddItemTo(item, 1);
                        if ((item.StrengthenLevel == 3 || item.StrengthenLevel == 6 || item.StrengthenLevel == 9 || item.StrengthenLevel == 12) && item.Template.CategoryID != 17)
                        {
                            pkg.WriteBoolean(true);
                        }
                        else
                        {
                            pkg.WriteBoolean(false);
                        }
                    }

                    //系统广播
                    if (item.StrengthenLevel >= 7)
                    {
                        string msg = LanguageMgr.GetTranslation("ItemStrengthenHandler.congratulation", client.Player.PlayerCharacter.NickName, item.Template.Name, item.StrengthenLevel);
                        GSPacketIn sys_notice = WorldMgr.SendSysNotice(msg);
                        GameServer.Instance.LoginServer.SendPacket(sys_notice);

                    }
                }
                else
                {
                    pkg.WriteByte(1);
                    pkg.WriteBoolean(false);
                }

                client.Player.StoreBag2.UpdateItem(item);
                client.Player.OnItemStrengthen(item.Template.CategoryID, item.StrengthenLevel);//任务<强化>
                LogMgr.LogItemAdd(client.Player.PlayerCharacter.ID, LogItemType.Strengthen, BeginProperty, item, AddItem, 1);//强化日志

                //client.Player.SaveIntoDatabase();//保存到数据库
                client.Out.SendTCP(pkg);
                str.Append(item.StrengthenLevel);
                //client.Player.BeginChanges();
                //client.Player.CommitChanges();
            }
            else
            {
                client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ItemStrengthenHandler.Content1") + stone.Template.Name + LanguageMgr.GetTranslation("ItemStrengthenHandler.Content2"));
            }
            if (item.Place < 31)
            {
                client.Player.MainBag.UpdatePlayerProperties();
            }

            return 0;
        }
コード例 #30
0
        //修改:  Xiaov 
        //时间:  2009-11-9
        //描述:  登陆请求
        public int HandlePacket(GameClient client, GSPacketIn packet)
        {
            try
            {
                GSPacketIn pkg = packet.Clone();
                pkg.ClearContext();

                if (client.Player == null)
                {
                    int version = packet.ReadInt();
                    int clientType = packet.ReadInt();
                    byte[] tempKey = new byte[8];

                    byte[] src = packet.ReadBytes();
                  
                    //解密
                    try
                    {
                        src = WorldMgr.RsaCryptor.Decrypt(src,false);
                    }
                    catch (ExecutionEngineException e)
                    {
                        client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.RsaCryptorError"));
                        client.Disconnect();
                        GameServer.log.Error("ExecutionEngineException", e);
                        return 0;
                    }
                    catch (Exception ex)
                    {
                        //防止攻击,如果解密出错,直接断开连接
                        client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.RsaCryptorError"));
                        client.Disconnect();
                        GameServer.log.Error("RsaCryptor", ex);
                        return 0;
                    }
                    //DateTime date = new DateTime(src[0] * 256 + src[1], src[2], src[3], src[4], src[5], src[6]);
                    //int fms_key = (src[7] << 8) + src[8];
                    //client.SetFsm(fms_key, version);

                    //string edition = GameServer.Instance.Configuration.Edition;
                    string edition = GameServer.Edition;
                    //if (version.ToString() != edition && edition != "0")
                    //{
                    //    client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.EditionError"));
                    //    //client.Out.SendEditionError(LanguageMgr.GetTranslation("UserLoginHandler.EditionError"));
                    //    client.Disconnect();
                    //    return 0;
                    //}
                    for (int i = 0; i < 8; i++)
                    {
                        tempKey[i] = src[i+7];
                    }
                    client.setKey(tempKey);
                
                    string[] temp = Encoding.UTF8.GetString(src, 15, src.Length - 15).Split(',');
                    if (temp.Length == 2)
                    {
                        string user = temp[0];
                        string pass = temp[1];

                        //TimeSpan span = date - DateTime.UtcNow;
                        //if (Math.Abs(span.TotalMinutes) < 5)
                        //{
                        if (!LoginMgr.ContainsUser(user))
                        {
                            bool isFirst = false;
                            BaseInterface inter = BaseInterface.CreateInterface();
                            PlayerInfo cha = inter.LoginGame(user, pass, ref isFirst);

                            if (cha != null && cha.ID != 0)
                            {
                                if (cha.ID == -2)
                                {
                                    //帐号被禁用
                                    client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.Forbid"));
                                    client.Disconnect();
                                    return 0;
                                }

                                if (!isFirst)
                                {
                                    client.Player = new GamePlayer(cha.ID,user, client, cha);
                                    LoginMgr.Add(cha.ID, client);
                                    client.Server.LoginServer.SendAllowUserLogin(cha.ID);
                                    client.Version = version;
                                }
                                else
                                {
                                    client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.Register"));
                                    client.Disconnect();
                                }
                            }
                            else
                            {
                                //client.Out.SendLoginFailed("用户名密码错误");
                                client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.OverTime"));
                                client.Disconnect();
                            }
                        }
                        else
                        {
                            //避免攻击,有另外的客户端在登陆,则断掉次客户端。
                            client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.LoginError"));
                            client.Disconnect();
                        }
                    }
                    else
                    {
                        client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.LengthError"));
                        //验证格式错误,端口连接
                        client.Disconnect();
                    }
                }
            }
            catch (Exception ex)
            {
                client.Out.SendKitoff(LanguageMgr.GetTranslation("UserLoginHandler.ServerError"));
                client.Disconnect();
                GameServer.log.Error(LanguageMgr.GetTranslation("UserLoginHandler.ServerError"), ex);
            }

            return 1;
        }