Example #1
0
        public void HandleGameRoomCreate(GSPacketIn pkg)
        {
            int  totalLevel      = 0;
            int  totalFightPower = 0;
            int  roomId          = pkg.ReadInt();
            int  gameType        = pkg.ReadInt();
            int  guildId         = pkg.ReadInt();
            int  areaId          = pkg.ReadInt();
            bool IsArea          = pkg.ReadBoolean();
            int  count           = pkg.ReadInt();

            IGamePlayer[] players = new IGamePlayer[count];
            for (int i = 0; i < count; i++)
            {
                PlayerInfo      info            = new PlayerInfo();
                ProxyPlayerInfo proxyPlayerInfo = new ProxyPlayerInfo();
                proxyPlayerInfo.m_AreaID   = pkg.ReadInt();
                proxyPlayerInfo.m_AreaName = pkg.ReadString();
                info.ID              = pkg.ReadInt();
                info.NickName        = pkg.ReadString();
                info.Sex             = pkg.ReadBoolean();
                info.Hide            = pkg.ReadInt();
                info.Style           = pkg.ReadString();
                info.Colors          = pkg.ReadString();
                info.Skin            = pkg.ReadString();
                info.Offer           = pkg.ReadInt();
                info.GP              = pkg.ReadInt();
                info.Grade           = pkg.ReadInt();
                info.Repute          = pkg.ReadInt();
                info.Nimbus          = pkg.ReadInt();
                info.ConsortiaID     = pkg.ReadInt();
                info.ConsortiaName   = pkg.ReadString();
                info.ConsortiaLevel  = pkg.ReadInt();
                info.ConsortiaRepute = pkg.ReadInt();
                info.Win             = pkg.ReadInt();
                info.Total           = pkg.ReadInt();
                info.Attack          = pkg.ReadInt();
                info.Defence         = pkg.ReadInt();
                info.Agility         = pkg.ReadInt();
                info.Luck            = pkg.ReadInt();
                info.FightPower      = pkg.ReadInt();
                info.IsMarried       = pkg.ReadBoolean();
                if (info.IsMarried)
                {
                    info.SpouseID   = pkg.ReadInt();
                    info.SpouseName = pkg.ReadString();
                }
                totalFightPower                      += info.FightPower;
                proxyPlayerInfo.BaseAttack            = pkg.ReadDouble();
                proxyPlayerInfo.BaseDefence           = pkg.ReadDouble();
                proxyPlayerInfo.BaseAgility           = pkg.ReadDouble();
                proxyPlayerInfo.BaseBlood             = pkg.ReadDouble();
                proxyPlayerInfo.TemplateId            = pkg.ReadInt();
                proxyPlayerInfo.CanUserProp           = pkg.ReadBoolean();
                proxyPlayerInfo.SecondWeapon          = pkg.ReadInt();
                proxyPlayerInfo.StrengthLevel         = pkg.ReadInt();
                proxyPlayerInfo.GPAddPlus             = pkg.ReadDouble();
                proxyPlayerInfo.GMExperienceRate      = pkg.ReadFloat();
                proxyPlayerInfo.AuncherExperienceRate = pkg.ReadFloat();
                proxyPlayerInfo.OfferAddPlus          = pkg.ReadDouble();
                proxyPlayerInfo.GMOfferRate           = pkg.ReadFloat();
                proxyPlayerInfo.AuncherOfferRate      = pkg.ReadFloat();
                proxyPlayerInfo.GMRichesRate          = pkg.ReadFloat();
                proxyPlayerInfo.AuncherRichesRate     = pkg.ReadFloat();
                proxyPlayerInfo.AntiAddictionRate     = pkg.ReadDouble();
                List <BufferInfo> infos = new List <BufferInfo>();
                int buffercout          = pkg.ReadInt();
                for (int j = 0; j < buffercout; j++)
                {
                    BufferInfo buffinfo = new BufferInfo();
                    buffinfo.Type      = pkg.ReadInt();
                    buffinfo.IsExist   = pkg.ReadBoolean();
                    buffinfo.BeginDate = pkg.ReadDateTime();
                    buffinfo.ValidDate = pkg.ReadInt();
                    buffinfo.Value     = pkg.ReadInt();
                    if (info != null)
                    {
                        infos.Add(buffinfo);
                    }
                }
                players[i]            = new ProxyPlayer(this, info, proxyPlayerInfo, infos);
                players[i].CanUseProp = proxyPlayerInfo.CanUserProp;
                int ec = pkg.ReadInt();
                for (int j = 0; j < ec; j++)
                {
                    players[i].EquipEffect.Add(pkg.ReadInt());
                }
                totalLevel += info.Grade;
            }
            if (players.Length != 0)
            {
                ProxyRoom room = new ProxyRoom(ProxyRoomMgr.NextRoomId(), roomId, players, this, totalLevel, totalFightPower, IsArea);
                room.GuildId  = guildId;
                room.AreaID   = areaId;
                room.GameType = (eGameType)gameType;
                ProxyRoom oldroom = null;
                Dictionary <int, ProxyRoom> rooms;
                Monitor.Enter(rooms = this.m_rooms);
                try
                {
                    if (this.m_rooms.ContainsKey(roomId))
                    {
                        oldroom = this.m_rooms[roomId];
                        this.m_rooms.Remove(roomId);
                    }
                }
                finally
                {
                    Monitor.Exit(rooms);
                }
                if (oldroom != null)
                {
                    ProxyRoomMgr.RemoveRoom(oldroom);
                }
                Monitor.Enter(rooms = this.m_rooms);
                try
                {
                    if (!this.m_rooms.ContainsKey(roomId))
                    {
                        this.m_rooms.Add(roomId, room);
                        this.SendFightRoomID(roomId, room.RoomId);
                    }
                    else
                    {
                        room = null;
                    }
                }
                finally
                {
                    Monitor.Exit(rooms);
                }
                if (room != null)
                {
                    ProxyRoomMgr.AddRoom(room);
                }
                else
                {
                    ServerClient.log.ErrorFormat("Room already exists:{0}", roomId);
                }
            }
        }