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); }
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); }
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; }
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); }
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); }
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); }
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); }
public static void RemoveEntry(TNLConnection session, Int64 coid, SocialType type) { DataAccess.Social.RemoveEntry(session.CurrentCharacter.GetCOID(), coid, type); }
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); }
public static void LogoutCharacter(TNLConnection conn) { lock (Lock) ActiveCharacters.Remove(conn.GetPlayerCOID()); }
public static void LoginCharacter(TNLConnection conn, Character character) { lock (Lock) ActiveCharacters.Add(conn.GetPlayerCOID(), character); }