Beispiel #1
0
        public static void GetFriends(TNLConnection session)
        {
            //return;
            var coid = session.CurrentCharacter.GetCOID();
            CheckCache(coid);

            var packet = new Packet(Opcode.GetFriendsResponse);
            var t = Cache[coid];

            var friendEntries = t.Item2.Where(e => e.Type == SocialType.Friend).ToList();
            var count = friendEntries.Count;

            packet.WriteInteger(count >= 20 ? 20 : count);
            var j = 0;

            foreach (var se in friendEntries)
            {
                packet.WriteLong(se.Character);
                packet.WriteLong(se.OtherCharacter);
                packet.WriteInteger(se.Level);
                packet.WriteInteger(se.LastContinentId);
                packet.WriteByte(se.Class);
                packet.WriteBoolean(se.Online);
                packet.WriteUtf8StringOn(se.Name, 17);
                packet.WritePadding(5);

                if (++j == 20)
                    break;
            }

            for (var i = 0; i < 20 - j; ++i)
                packet.WritePadding(48);

            session.SendPacket(packet, RPCGuaranteeType.RPCGuaranteedOrdered);
        }
Beispiel #2
0
        public static void RequestInfo(TNLConnection conn)
        {
            var resp = new Packet(Opcode.RequestClanInfoResponse); // todo: No response, if the character has no clan?

            resp.WriteInteger(-1); // Clan Id
            resp.WriteUtf8StringOn("", 51); // Clan Name
            resp.WriteUtf8StringOn("", 251); // Clan Motd
            resp.WriteUtf8StringOn("", 51); // Rank One
            resp.WriteUtf8StringOn("", 51); // Rank Two
            resp.WriteUtf8StringOn("", 51); // Rank Three
            resp.WritePadding(1);
            resp.WriteInteger(-1); // Monthly Dues
            resp.WriteInteger(-1); // Monthly Upkeep
            resp.WriteLong(-1L); // Clan Owner
            resp.WriteInteger(0); // Num members
            resp.WritePadding(4);

            for (var i = 0; i < 0; ++i)
            {
                resp.WriteLong(-1L); // Member Coid
                resp.WriteUtf8StringOn("", 17); // Character Name
                resp.WritePadding(3);
                resp.WriteInteger(0); // Continent Id
                resp.WriteInteger(0); // Xp
                resp.WriteInteger(0); // Clan Rank
                resp.WriteLong(0); // Last Paid Dues
                resp.WriteInteger(-1); // Cbid
                resp.WriteBoolean(false); // Online
                resp.WritePadding(3);
                resp.WriteLong(0); // Last Online
                resp.WriteLong(0); // Join Date
            }

            conn.SendPacket(resp, RPCGuaranteeType.RPCGuaranteedOrdered);
        }
Beispiel #3
0
        public static void HandleChat(TNLConnection conn, Packet packet)
        {
            var type = (ChatType) packet.ReadUInteger();
            var isGm = packet.ReadBoolean();
            var recipient = packet.ReadUtf8StringOn(17);
            var sender = packet.ReadUtf8StringOn(17);
            packet.ReadPadding(1);
            var msglen = packet.ReadUShort();

            var msg = packet.ReadUtf8StringOn(msglen);
            if (msg.StartsWith("/"))
            {
                if (msg.Equals("/save"))
                    conn.CurrentCharacter.SaveToDB();

                return;
            }

            var pack = ConstructChatPacket(type, isGm, recipient, sender, msg);

            switch (type)
            {
                default:
                    Logger.WriteLog("Unhandled ChatType in HandleChat: {0}", LogType.Error, type);
                    break;
            }
        }
        public static Boolean CreateCharacterFromRequest(TNLConnection connection, CreateCharacterModel model, out Int64 charCoid)
        {
            var container = AssetManager.AssetContainer;

            charCoid = -1L;

            Byte r, c;
            if (!GetRaceClassByCBID(model.CBid, out r, out c))
                return false;

            var newCharEntry = container.GetNewCharacterDataByRaceClass(r, c);
            if (newCharEntry == null)
                return false;

            var map = MapManager.GetMap((UInt32)newCharEntry.StartTown);
            if (map == null)
                return false;

            charCoid = COIDManager.NextCOID;
            var vehCoid = COIDManager.NextCOID;

            var character = ClonedObjectBase.AllocateNewObjectFromCBID(model.CBid);

            character.InitializeFromCBID(model.CBid, null);

            var charObj = character.GetAsCharacter();
            if (charObj == null)
                return false;

            charObj.SetOwner(connection);
            charObj.InitNewCharacter(model, newCharEntry, map, charCoid, vehCoid);

            var cpacket = new Packet(Opcode.CreateCharacter);

            character.WriteToCreatePacket(cpacket);

            var vehicle = ClonedObjectBase.AllocateNewObjectFromCBID(newCharEntry.Vehicle);

            vehicle.InitializeFromCBID(newCharEntry.Vehicle, null);

            var vehObj = vehicle.GetAsVehicle();
            if (vehObj == null)
                return false;

            vehObj.InitNewVehicle(model, newCharEntry, map, charCoid, vehCoid);

            var vpacket = new Packet(Opcode.CreateVehicle);

            vehObj.WriteToCreatePacket(vpacket);

            connection.SendPacket(cpacket, RPCGuaranteeType.RPCGuaranteedOrdered);
            connection.SendPacket(vpacket, RPCGuaranteeType.RPCGuaranteedOrdered);

            charObj.SaveToDB();
            vehObj.SaveToDB();

            return true;
        }
Beispiel #5
0
        public static void AddEntry(TNLConnection session, Packet packet, SocialType type)
        {
            packet.ReadPadding(4);
            var coid = packet.ReadLong();
            /*var name = */packet.ReadUtf8StringOn(17);
            packet.ReadPadding(7);

            DataAccess.Social.AddEntry(session.CurrentCharacter.GetCOID(), coid, type);
        }
Beispiel #6
0
        public static void MissionsRequest(TNLConnection conn)
        {
            var resp = new Packet(Opcode.ConvoyMissionsResponse);

            resp.WritePadding(4);
            resp.WriteLong(-1L); // Member coid
            resp.WriteShort(0); // Mission Num
            resp.WritePadding(6);

            for (var i = 0; i < 0; ++i)
                resp.WriteShort(0);

            conn.SendPacket(resp, RPCGuaranteeType.RPCGuaranteedOrdered);
        }
Beispiel #7
0
        public static void GetEnemies(TNLConnection session)
        {
            //return;
            var coid = session.CurrentCharacter.GetCOID();
            CheckCache(coid);

            var packet = new Packet(Opcode.GetEnemiesResponse);
            var t = Cache[coid];

            var enemyEntries = t.Item2.Where(e => e.Type == SocialType.Enemy).ToList();
            var count = enemyEntries.Count;

            packet.WriteInteger(count >= 20 ? 20 : count);

            var j = 0;
            foreach (var se in enemyEntries)
            {
                if (!(se is EnemyEntry)) // should never happen
                    continue;

                packet.WriteLong(se.Character);
                packet.WriteLong(se.OtherCharacter);
                packet.WriteInteger(se.Level);
                packet.WriteInteger(se.LastContinentId);
                packet.WriteInteger((se as EnemyEntry).TimesKilled);
                packet.WriteInteger((se as EnemyEntry).TimesKilledBy);
                packet.WriteByte((se as EnemyEntry).Race);
                packet.WriteByte(se.Class);
                packet.WriteBoolean(se.Online);
                packet.WriteUtf8StringOn(se.Name, 17);
                packet.WritePadding(4);

                if (++j == 20)
                    break;
            }

            for (var i = 0; i < 20 - j; ++i)
                packet.WritePadding(56);

            session.SendPacket(packet, RPCGuaranteeType.RPCGuaranteedOrdered);
        }
Beispiel #8
0
        public static void HandleBroadcast(TNLConnection conn, Packet packet)
        {
            var type = (ChatType) packet.ReadUInteger();
            var sendercoid = packet.ReadLong();
            var isGm = packet.ReadBoolean();

            packet.ReadPadding(1);

            var msglen = packet.ReadUShort();
            var sender = packet.ReadUtf8StringOn(17);

            var msg = packet.ReadUtf8StringOn(msglen);
            if (msg.StartsWith("/"))
            {
                if (msg.Equals("/save"))
                    conn.CurrentCharacter.SaveToDB();

                return;
            }

            conn.CurrentCharacter.GetMap().BroadcastChat(type, ConstructBroadcastPacket(type, isGm, sender, sendercoid, msg), conn.CurrentCharacter);
        }
Beispiel #9
0
 public static void RemoveEntry(TNLConnection session, Int64 coid, SocialType type)
 {
     DataAccess.Social.RemoveEntry(session.CurrentCharacter.GetCOID(), coid, type);
 }
Beispiel #10
0
        public static void GetIgnored(TNLConnection session)
        {
            //return;
            var coid = session.CurrentCharacter.GetCOID();
            CheckCache(coid);

            var packet = new Packet(Opcode.GetIgnoredResponse);
            var t = Cache[coid];

            var ignoredEntries = t.Item2.Where(e => e.Type == SocialType.Ignore).ToList();
            var count = ignoredEntries.Count;

            packet.WriteInteger(count >= 20 ? 20 : count);

            var j = 0;

            foreach (var se in ignoredEntries)
            {
                packet.WriteLong(se.OtherCharacter);

                if (++j == 20)
                    break;
            }

            for (var i = 0; i < 20 - j; ++i)
                packet.WritePadding(8);

            packet.WriteUtf8StringOn("", 17);
            packet.WritePadding(7);

            session.SendPacket(packet, RPCGuaranteeType.RPCGuaranteedOrdered);
        }
Beispiel #11
0
 public static void LogoutCharacter(TNLConnection conn)
 {
     lock (Lock)
         ActiveCharacters.Remove(conn.GetPlayerCOID());
 }
Beispiel #12
0
 public static void LoginCharacter(TNLConnection conn, Character character)
 {
     lock (Lock)
         ActiveCharacters.Add(conn.GetPlayerCOID(), character);
 }