Esempio n. 1
0
        public static void LoadCharThread(Packet packet)
        {
            string characterName = packet.Reader.ReadUnicode();
            uint   serial        = packet.Reader.ReadUInt32();

            var character = CharacterModel.Retrieve(GameServer.Instance.Database.Connection, characterName);
            var team      = TeamModel.Retrieve(GameServer.Instance.Database.Connection, character.Tid);

            character.TeamId        = team.TeamId;
            character.TeamName      = team.TeamName;
            character.TeamMarkId    = team.TeamMarkId;
            character.TeamCloseDate = (int)team.CloseDate;
            character.TeamRank      = 1;
            var user = AccountModel.Retrieve(GameServer.Instance.Database.Connection, character.Uid);

            packet.Sender.User = user;
            packet.Sender.User.ActiveCharacterId = character.Uid;
            packet.Sender.User.ActiveCharacter   = CharacterModel.RetrieveOne(GameServer.Instance.Database.Connection, character.Uid);
            packet.Sender.User.ActiveCarId       = character.CurrentCarId;
            packet.Sender.User.ActiveTeam        = team;
            packet.Sender.User.Characters        = CharacterModel.Retrieve(GameServer.Instance.Database.Connection, user.UID);

            var vehicles = VehicleModel.Retrieve(GameServer.Instance.Database.Connection, character.Cid);

            var ack = new Packet(Packets.LoadCharThreadAck);

            ack.Writer.Write((uint)0); // ServerId
            ack.Writer.Write((uint)0); // ServerStartTime

            // Character
            character.Serialize(ack.Writer);

            ack.Writer.Write((uint)vehicles.Count);

            foreach (var vehicle in vehicles)
            {
                if (vehicle.CarID == character.CurrentCarId)
                {
                    packet.Sender.User.ActiveCar = vehicle;
                }
                ack.Writer.Write(vehicle.CarID);
                ack.Writer.Write(vehicle.CarType);
                ack.Writer.Write(vehicle.BaseColor);
                ack.Writer.Write(vehicle.Grade);
                ack.Writer.Write(vehicle.SlotType);
                ack.Writer.Write(vehicle.AuctionCnt);
                ack.Writer.Write(vehicle.Mitron);
                ack.Writer.Write(vehicle.Kmh);

                ack.Writer.Write(vehicle.Color);
                ack.Writer.Write(vehicle.Color2);
                ack.Writer.Write(vehicle.MitronCapacity);
                ack.Writer.Write(vehicle.MitronEfficiency);
                ack.Writer.Write(vehicle.AuctionOn);
                ack.Writer.Write(vehicle.SBBOn);
            }
            packet.Sender.Send(ack);

            /*var character = Rice.Game.Character.Retrieve(characterName); // TODO: verify this
             * var user = Rice.Game.User.Retrieve(character.UID);
             *
             * packet.Sender.Player = new Rice.Game.Player(user);
             * packet.Sender.Player.Characters = Rice.Game.Character.Retrieve(user.UID);
             * packet.Sender.Player.ActiveCharacter = character;
             *
             * var ack = new RicePacket(124);
             *
             * var cars = Rice.Game.Vehicle.Retrieve(character.CID);
             *
             * var ackStruct = new Structures.LoadCharAck
             * {
             *  CharInfo = character.GetInfo(),
             *  nCarSize = (uint)cars.Count,
             *  CarInfo = cars,
             * };
             * ack.Writer.Write(ackStruct);
             *
             * packet.Sender.Send(ack);
             * Log.WriteLine("Sent LoadCharAck");*/
        }
Esempio n. 2
0
        public static void UserInfo(Packet packet)
        {
            var username = packet.Reader.ReadUnicodeStatic(32); // username
            var ticket   = packet.Reader.ReadUInt32();          // Ticket

            Log.Debug("UserInfo request. (Username: {0}, Ticket: {1})", username, ticket);

            if (ticket != packet.Sender.User.Ticket)
            {
                Log.Error("Rejecting packet from {0} (ticket {1}) for invalid user-ticket combination.", username,
                          ticket);
                packet.Sender.Error("Invalid ticket-user combination.");
            }

            var ack = new Packet(Packets.GameSettingsAck);

            ack.Writer.Write(GameSettings);

            /*ack.Writer.Write(new byte[90]);
            *  ack.Writer.Write((short) 50); // Max Level?
            *  ack.Writer.Write(new byte[12]);*/
            packet.Sender.Send(ack);

            packet.Sender.User.Characters = CharacterModel.Retrieve(LobbyServer.Instance.Database.Connection,
                                                                    packet.Sender.User.UID);

            ack = new Packet(Packets.UserInfoAck);
            ack.Writer.Write(0);                                        // Permissions
            ack.Writer.Write(packet.Sender.User.Characters.Count);      // Characters count
            ack.Writer.WriteUnicodeStatic(packet.Sender.User.Name, 18); // Username

            ack.Writer.Write((long)0);
            ack.Writer.Write((long)0);
            ack.Writer.Write((long)0);
            ack.Writer.Write(0);

            foreach (var character in packet.Sender.User.Characters)
            {
                Vehicle v    = VehicleModel.Retrieve(LobbyServer.Instance.Database.Connection, character.CurrentCarId);
                var     team = TeamModel.Retrieve(LobbyServer.Instance.Database.Connection, character.Tid);
                character.TeamId        = team.TeamId;
                character.TeamName      = team.TeamName;
                character.TeamMarkId    = team.TeamMarkId;
                character.TeamCloseDate = (int)team.CloseDate;
                character.TeamRank      = 1;

                ack.Writer.WriteUnicodeStatic(character.Name, 21); // Name
                ack.Writer.Write(character.Cid);                   // ID
                ack.Writer.Write((int)character.Avatar);           // Avatar
                ack.Writer.Write((int)character.Level);            // Level
                ack.Writer.Write(character.CurrentCarId);          // CarID
                ack.Writer.Write(v.CarType);                       // CarType
                ack.Writer.Write(v.BaseColor);                     // CarColor
                ack.Writer.Write(character.CreationDate);          // Creation Date
                ack.Writer.Write(character.Tid);                   // Crew ID
                ack.Writer.Write(character.TeamMarkId);            // Crew Image
                ack.Writer.WriteUnicodeStatic("Staff", 13);        // Crew Name
                ack.Writer.Write((short)1);                        // Guild
                ack.Writer.Write((short)-1);
            }

            packet.Sender.Send(ack);
        }