public override void OnRead(RiftClient From) { try { XmlSerializer xmls = new XmlSerializer(typeof(ClientAuthCertificate)); ClientAuthCertificate Cert = xmls.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(Certificate))) as ClientAuthCertificate; if (Program.Config.UseCertificate) From.Acct = Program.AcctMgr.GetAccount(Cert.Sessionkey); else From.Acct = Program.AcctMgr.GetAccount(Cert.Username, Cert.Hash); } catch { From.Disconnect(); } if (From.Acct == null) { Log.Error("Authentication", "Failed !"); From.Disconnect(); } else { HandshakeAuthenticationResponse Rp = new HandshakeAuthenticationResponse(); Rp.SessionTicket = (long)BitConverter.ToUInt64(Guid.NewGuid().ToByteArray(), 0); From.Acct.SessionTicket = Rp.SessionTicket; From.Acct.Dirty = true; AccountMgr.AccountDB.SaveObject(From.Acct); From.SendSerialized(Rp); } }
public override void OnRead(RiftClient From) { Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID); Character Char = CharacterMgr.Instance.GetCharacter((int)GUID); if (Char.AccountId != From.Acct.Id) { From.Disconnect(); return; } From.Acct.PendingCharacter = GUID; From.Acct.Dirty = true; AccountMgr.AccountDB.SaveObject(From.Acct); LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse(); if (From.Realm != null) { Log.Success("Entering", "On : " + From.Realm.Address); Rp.Ips.Add(From.Realm.Address); } From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID); if (From.Acct == null || From.Rm == null) return; Character Char = From.Rm.GetObject<CharactersMgr>().GetCharacter(GUID); if (Char == null || Char.AccountId != From.Acct.Id) { Log.Error("SelectRequest", "Invalid CharacterId = " + GUID); From.Disconnect(); return; } MapServerInfo Info = From.Rm.GetObject<WorldMgr>().GetMapInfo(); if (Info == null) { Log.Error("SelectRequest", "No map loaded ! Run MapServer"); return; } Log.Success("SelectRequest", "Entering on Map : " + Info.MapAdress); Info.GetObject<MapMgr>().RegisterConnecting(From.Acct.Username,Char.CharacterId); LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse(); Rp.Ips.Add(Info.MapAdress); From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { if (From.Character != null) { Log.Success("WorldDisconnect", "Character disconnectig : " + From.Character.CharacterName); From.Disconnect(); } }
public override void OnRead(RiftClient From) { if (CharacterMgr.Instance.GetCharactersCount(From.Acct.Id, From.Realm.RealmId) >= 6) { Log.Error("CharacterCreate", "Hack From : " + From.GetIp); From.Disconnect(); return; } LobbyCharacterCreateResponse Rp = new LobbyCharacterCreateResponse(); Character Exist = CharacterMgr.CharacterDB.SelectObject <Character>("Name='" + CharacterMgr.CharacterDB.Escape(Name) + "' AND RealmID=" + From.Realm.RealmId); if (Exist != null) { Rp.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)6); } else { Rp.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)0); PacketOutStream Stream = new PacketOutStream(); PacketProcessor.WritePacket(ref Stream, Custom, false, true, true); CustomData = Stream.ToArray(); string Data = UTF8ByteArrayToString(CustomData); Character Char = new Character(); Char.Name = Name; Char.AccountId = From.Acct.Id; Char.RealmId = From.Realm.RealmId; Char.Race = Field1; Char.Sex = Field2; Char.Class = Field13; Char.HairModelID = HairID; Char.Level = 1; Char.Data = Data; CharacterMgr.Instance.AddObject(Char); Character CharEntry = CharacterMgr.Instance.GetCharacter(CharacterMgr.CharacterDB.Escape(Name)); Character_StartItems[] StartItems = CharacterMgr.Instance.GetStartItems(Field1, Field2, Field13); foreach (Character_StartItems Item in StartItems) { Character_Item It = new Character_Item(); It.ItemID = Item.ItemID; It.Bag = 0; It.Equiped = 1; It.GUID = CharEntry.Id; CharacterMgr.Instance.AddObject(It); } } From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { try { XmlSerializer xmls = new XmlSerializer(typeof(ClientAuthCertificate)); ClientAuthCertificate Cert = xmls.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(Certificate))) as ClientAuthCertificate; if (Program.Config.UseCertificate) { From.Acct = Program.AcctMgr.GetAccount(Cert.Sessionkey); } else { From.Acct = Program.AcctMgr.GetAccount(Cert.Username, Cert.Hash); } } catch (Exception e) { From.Disconnect(); } if (From.Acct == null) { Log.Error("Authentication", "Failled !"); From.Disconnect(); } else { HandshakeAuthenticationResponse Rp = new HandshakeAuthenticationResponse(); Rp.SessionTicket = (long)BitConverter.ToUInt64(Guid.NewGuid().ToByteArray(), 0); From.Acct.SessionTicket = Rp.SessionTicket; From.Acct.Dirty = true; AccountMgr.AccountDB.SaveObject(From.Acct); From.SendSerialized(Rp); } }
public override void OnRead(RiftClient From) { Realm Rm = Program.AcctMgr.GetRealm((int)RealmId); if (Rm != null) From.Rm = Rm; if (From.Rm == null) { Log.Error("WorldSelectRequest", "Realm null : " + From.GetIp); From.Disconnect(); return; } LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse(); From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { Realm Rm = Program.AcctMgr.GetRealm((int)RealmId); if (Rm != null) { From.Rm = Rm; } if (From.Rm == null) { Log.Error("WorldSelectRequest", "Realm null : " + From.GetIp); From.Disconnect(); return; } LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse(); From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { Realm Rm = CharacterMgr.Instance.GetRealm((int)RealmId); if (Rm != null) { From.Realm = Rm; } if (From.Realm == null) { Log.Error("LobbyWorldSelectRequest", "Invalid RealmId=" + RealmId); From.Disconnect(); } else { LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse(); From.SendSerialized(Rp); } }
public override void OnRead(RiftClient From) { if (From.Acct == null || From.Rm == null) return; CharactersMgr Mgr = From.Rm.GetObject<CharactersMgr>(); if (Mgr.GetCharactersCount(From.Acct.Id) >= 6) { From.Disconnect(); return; } ISerializablePacket Response = new ISerializablePacket(); Response.Opcode = (int)Opcodes.LobbyCharacterCreateResponse; if (Mgr.CharacterExist(Name)) Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)CharacterCreateResponses.INVALID_NAME); else { Character Char = new Character(); Char.AccountId = From.Acct.Id; Char.CharacterName = Name; Char.Email = From.Acct.Email; Char.Info = new CharacterInfo(); Char.Info.Class = Class; Char.Info.CustomPacket = this.CharacterCustom; Char.Info.Level = Mgr.StartingLevel; Char.Info.Race = Race; Char.Info.Sex = Sex; long CharacterID = Mgr.AddCharacter(Char); Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)CharacterCreateResponses.CREATE_OK); From.JustCreatedCharacter = CharacterID; } From.SendSerialized(Response); }
public override void OnRead(RiftClient From) { Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID); if (From.Acct == null || From.Rm == null) { Log.Error("LobbyCharacterSelectRequest", "Acct or Rm == null"); return; } Character Char = From.Rm.GetObject <CharactersMgr>().GetCharacter(GUID); if (Char == null || Char.AccountId != From.Acct.Id) { Log.Error("SelectRequest", "Invalid CharacterId = " + GUID); From.Disconnect(); return; } MapServerInfo Info = From.Rm.GetObject <WorldMgr>().GetMapInfo(); if (Info == null) { Log.Error("SelectRequest", "No map loaded ! Run MapServer"); return; } Log.Success("SelectRequest", "Entering on Map : " + Info.MapAdress); Info.GetObject <MapMgr>().RegisterConnecting(From.Acct.Username, Char.CharacterId); LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse(); Rp.Ips.Add(Info.MapAdress); From.SendSerialized(Rp); }
public override void OnRead(RiftClient From) { Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket); long Char = Program.Maps.GetConnecting(Email); if (Char == 0) { Log.Error("Authentification", "Not authentified email : " + Email); From.Disconnect(); return; } From.Acct = Program.Accounts.GetAccountByUsername(Email); if (From.Acct == null) { Log.Error("Authentification", "Not valid account :" + Email); From.Disconnect(); return; } From.Character = Program.Characters.GetCharacter(Char); if (From.Acct == null) { Log.Error("Authentification", "Not valid character :" + Char); From.Disconnect(); return; } WorldAuthenticationResponse Rp = new WorldAuthenticationResponse(); Rp.AddField(0, EPacketFieldType.True, (bool)true); From.SendSerialized(Rp); CacheTemplate[] Tmps = Program.World.GetTemplates(); foreach (CacheTemplate Tmp in Tmps) From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp)); CacheData[] Dts = Program.World.GetDatas(); foreach (CacheData Tmp in Dts) From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp)); WorldCacheUpdated Updated = new WorldCacheUpdated(); Updated.GUID = Char; From.SendSerialized(Updated); ///////////////////////////////////////////////////////////////////// // Send Inventory ///////////////////////////////////////////////////////////////////// WorldEntityUpdate Update = new WorldEntityUpdate(); Update.AddField(6, EPacketFieldType.Raw8Bytes, (long)Char); From.SendSerialized(Update); ////////////////////////////////////////////////////////////////////// ISerializablePacket Packet1 = new ISerializablePacket(); Packet1.Opcode = 0x03F6; Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] { 0x20, 0xB1, 0x59, 0x41 }); Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 }); byte[] UnkGuid = new byte[8] { 0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01 }; Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid); From.SendSerialized(Packet1); ISerializablePacket Packet2 = new ISerializablePacket(); Packet2.Opcode = 0x02E9; Packet2.AddField(0, EPacketFieldType.List, new List<long>() { 3605869292 }); From.SendSerialized(Packet2); ISerializablePacket Packet3 = new ISerializablePacket(); Packet3.Opcode = 0x2D7F; From.SendSerialized(Packet3); /********************************************/ WorldZoneInfo ZoneInfo = new WorldZoneInfo(); ZoneInfo.ZoneFileName = "Mathosia1"; ZoneInfo.Description = Program.World.GetText(290412351); ZoneInfo.DisplayName = Program.World.GetText(1647389394); From.SendSerialized(ZoneInfo); WorldStartingPosition StartPosition = new WorldStartingPosition(); StartPosition.MapName = "guardian_map"; From.SendSerialized(StartPosition); WorldPositionExtra ExtraPosition = new WorldPositionExtra(); ExtraPosition.MapName = "guardian_map"; ISerializablePacket Extra = new ISerializablePacket(); Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra; Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition); From.SendSerialized(Extra); }
public override void OnRead(RiftClient From) { Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket); long Char = Program.Maps.GetConnecting(Email); if (Char == 0) { Log.Error("Authentification", "Not authentified email : " + Email); From.Disconnect(); return; } From.Acct = Program.Accounts.GetAccountByUsername(Email); if (From.Acct == null) { Log.Error("Authentification", "Not valid account :" + Email); From.Disconnect(); return; } From.Character = Program.Characters.GetCharacter(Char); if (From.Acct == null) { Log.Error("Authentification", "Not valid character :" + Char); From.Disconnect(); return; } WorldAuthenticationResponse Rp = new WorldAuthenticationResponse(); Rp.AddField(0, EPacketFieldType.True, (bool)true); From.SendSerialized(Rp); CacheTemplate[] Tmps = Program.World.GetTemplates(); foreach (CacheTemplate Tmp in Tmps) { From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp)); } CacheData[] Dts = Program.World.GetDatas(); foreach (CacheData Tmp in Dts) { From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp)); } WorldCacheUpdated Updated = new WorldCacheUpdated(); Updated.GUID = Char; From.SendSerialized(Updated); ///////////////////////////////////////////////////////////////////// // Send Inventory ///////////////////////////////////////////////////////////////////// WorldEntityUpdate Update = new WorldEntityUpdate(); Update.AddField(6, EPacketFieldType.Raw8Bytes, (long)Char); From.SendSerialized(Update); ////////////////////////////////////////////////////////////////////// ISerializablePacket Packet1 = new ISerializablePacket(); Packet1.Opcode = 0x03F6; Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] { 0x20, 0xB1, 0x59, 0x41 }); Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 }); byte[] UnkGuid = new byte[8] { 0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01 }; Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid); From.SendSerialized(Packet1); ISerializablePacket Packet2 = new ISerializablePacket(); Packet2.Opcode = 0x02E9; Packet2.AddField(0, EPacketFieldType.List, new List <long>() { 3605869292 }); From.SendSerialized(Packet2); ISerializablePacket Packet3 = new ISerializablePacket(); Packet3.Opcode = 0x2D7F; From.SendSerialized(Packet3); /********************************************/ WorldZoneInfo ZoneInfo = new WorldZoneInfo(); ZoneInfo.ZoneFileName = "Mathosia1"; ZoneInfo.Description = Program.World.GetText(290412351); ZoneInfo.DisplayName = Program.World.GetText(1647389394); From.SendSerialized(ZoneInfo); WorldStartingPosition StartPosition = new WorldStartingPosition(); StartPosition.MapName = "guardian_map"; From.SendSerialized(StartPosition); WorldPositionExtra ExtraPosition = new WorldPositionExtra(); ExtraPosition.MapName = "guardian_map"; ISerializablePacket Extra = new ISerializablePacket(); Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra; Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition); From.SendSerialized(Extra); }
public override void OnRead(RiftClient From) { Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket); // TMP, Client must ALLWAYS provide SessionTicket, not sended because an invalid certificate probably Character PlrInfo = null; Account Acct = null; if (SessionTicket == 0) { Acct = AccountMgr.Instance.GetAccount(Email.ToUpper()); } else { Acct = AccountMgr.Instance.GetAccountBySessionTicket(SessionTicket); } if (Acct == null) { Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST"); From.Disconnect(); return; } PlrInfo = CharacterMgr.Instance.GetCharacter((int)Acct.PendingCharacter); if (PlrInfo == null) { Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST"); From.Disconnect(); return; } From.Char = PlrInfo; WorldAuthenticationResponse Rp = new WorldAuthenticationResponse(); Rp.AddField(0, EPacketFieldType.True, (bool)true); From.SendSerialized(Rp); WorldCacheUpdated Updated = new WorldCacheUpdated(); Updated.GUID = PlrInfo.Id; From.SendSerialized(Updated); ///////////////////////////////////////////////////////////////////// // Send Inventory ///////////////////////////////////////////////////////////////////// WorldEntityUpdate Inventory = new WorldEntityUpdate(); Inventory.BuildInventory(From, From.Char); From.SendSerialized(Inventory); WorldEntityUpdate Item = new WorldEntityUpdate(); Item.BuildItem(From, From.Char); From.SendSerialized(Item); ////////////////////////////////////////////////////////////////////// /**** One of them seem to delete object ***/ ISerializablePacket Packet1 = new ISerializablePacket(); Packet1.Opcode = 0x03F6; Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] { 0x20, 0xB1, 0x59, 0x41 }); Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 }); byte[] UnkGuid = new byte[8] { 0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01 }; //Array.Reverse(UnkGuid); Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid); From.SendSerialized(Packet1); ISerializablePacket Packet2 = new ISerializablePacket(); Packet2.Opcode = 0x02E9; Packet2.AddField(0, EPacketFieldType.List, new List <long>() { 3605869292 }); From.SendSerialized(Packet2); ISerializablePacket Packet3 = new ISerializablePacket(); Packet3.Opcode = 0x2D7F; From.SendSerialized(Packet3); /********************************************/ WorldZoneInfo ZoneInfo = CacheMgr.Instance.GetZoneInfoCache("Mathosia1"); From.SendSerialized(ZoneInfo); WorldStartingPosition StartPosition = new WorldStartingPosition(); StartPosition.MapName = "guardian_map"; From.SendSerialized(StartPosition); WorldPositionExtra ExtraPosition = new WorldPositionExtra(); ExtraPosition.MapName = "guardian_map"; ISerializablePacket Extra = new ISerializablePacket(); Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra; Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition); From.SendSerialized(Extra); }