static public void F_USE_ITEM(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying()) return; Player Plr = cclient.Plr; ushort slot = packet.GetUint16(); Item item = Plr.ItmInterface.GetItemInSlot(slot); if (Plr.Level < item.Info.MinRank) { Plr.SendLocalizeString("", GameData.Localized_text.TEST_ITEM_PLAYER_LEVEL_TOO_LOW); return; } else if (Plr.Rank < item.Info.MinRenown) { Plr.SendLocalizeString("", GameData.Localized_text.TEST_ITEM_PLAYER_RENOWN_TOO_LOW); return; } if (item.Info.Type == 31 && item.Info.ScriptName == "HealthPotion") // Potion { Plr.DealHeal(Plr, (uint)item.Info.MinRank * 100); Plr.ItmInterface.DeleteItem(slot, 1, true); } }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; UInt32 WorldUid = packet.GetUint32R(); string Name = packet.GetUnicodeString(); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_NAME_CHECK); if (CheckName(Name) == 0) { cclient.CreateChar = new DBCharacter(); cclient.CreateChar.AcctId = cclient.Account.Id; cclient.CreateChar.Name = Name; if (cclient.Account.WorldId != WorldUid) Program.CharMgr.SetAccountWorld(cclient.Account.Id, (int)WorldUid); Out.WriteUInt32(0); } else { cclient.CreateChar = null; Out.WriteUInt32(1); } cclient.SendTCP(Out); }
public static void F_INTERFACE_COMMAND(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; byte CommandId = packet.GetUint8(); switch (CommandId) { case 1: // ???? { } break; case 2: // Resurrect Button { cclient.Plr.PreRespawnPlayer(); Log.Success("Interface Command", "Respawn Player"); } break; case 10: // Talisman Fuse { } break; }; }
public static void F_FLIGHT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; UInt16 TargetOID = packet.GetUint16(); UInt16 State = packet.GetUint16(); Log.Info("F_FLIGHT", "TargetOid = " + TargetOID + ",State=" + State); if (State == 20) // Flight Master { Object Obj = cclient.Plr.Zone.GetObject(TargetOID); if (Obj == null || !Obj.IsCreature()) { Log.Error("F_FLIGHT", "Invalid Creature OID : " + TargetOID); return; } UInt16 FlyID = packet.GetUint16(); List<Zone_Taxi> Taxis = WorldMgr.GetTaxis(cclient.Plr); if (Taxis.Count <= FlyID - 1) return; if (!cclient.Plr.RemoveMoney(Taxis[FlyID - 1].Info.Price)) { cclient.Plr.SendLocalizeString("", GameData.Localized_text.TEXT_MERCHANT_INSUFFICIENT_MONEY_TO_BUY); return; } cclient.Plr.Teleport(Taxis[FlyID - 1].ZoneID, Taxis[FlyID - 1].WorldX, Taxis[FlyID - 1].WorldY, Taxis[FlyID - 1].WorldZ, Taxis[FlyID - 1].WorldO); } }
static public void CMSG_VerifyProtocolReq(BaseClient client, PacketIn packet) { Client cclient = client as Client; PacketOut Out = new PacketOut((byte)Opcodes.SMSG_VerifyProtocolReply); byte[] IV_HASH1 = { 0x01, 0x53, 0x21, 0x4d, 0x4a, 0x04, 0x27, 0xb7, 0xb4, 0x59, 0x0f, 0x3e, 0xa7, 0x9d, 0x29, 0xe9 }; byte[] IV_HASH2 = { 0x49, 0x18, 0xa1, 0x2a, 0x64, 0xe1, 0xda, 0xbd, 0x84, 0xd9, 0xf4, 0x8a, 0x8b, 0x3c, 0x27, 0x20 }; ByteString iv1 = ByteString.CopyFrom(IV_HASH1); ByteString iv2 = ByteString.CopyFrom(IV_HASH2); VerifyProtocolReply.Builder verify = VerifyProtocolReply.CreateBuilder(); verify.SetResultCode(VerifyProtocolReply.Types.ResultCode.RES_SUCCESS); verify.SetIv1(ByteString.CopyFrom(IV_HASH1)); verify.SetIv2(ByteString.CopyFrom(IV_HASH2)); Out.Write(verify.Build().ToByteArray()); cclient.SendTCPCuted(Out); }
static public void CL_CHECK(BaseClient client, PacketIn packet) { Client cclient = client as Client; uint Version = packet.GetUint32(); Log.Debug("CL_CHECK", "Launcher Version : " + Version); PacketOut Out = new PacketOut((byte)Opcodes.LCR_CHECK); if (Version != Program.Version) { Out.WriteByte((byte)CheckResult.LAUNCHER_VERSION); // Version incorrect + message Out.WriteString(Program.Message); client.SendPacket(Out); cclient.Disconnect(); return; } byte File = packet.GetUint8(); UInt64 Len = 0; if (File >= 1) Len = packet.GetUint64(); if ((long)Len != Program.Info.Length) { Out.WriteByte((byte)CheckResult.LAUNCHER_FILE); Out.WriteString(Program.StrInfo); } else Out.WriteByte((byte)CheckResult.LAUNCHER_OK); cclient.SendPacket(Out); }
public static void F_BAG_INFO(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying()) return; byte Type = packet.GetUint8(); Player Plr = cclient.Plr; switch (Type) { case 3: // Toggle Pvp Plr.CbtInterface.TogglePvp(); break; case 16: // Buy more bag space byte Price = packet.GetUint8(); if (!Plr.ItmInterface.HasMaxBag()) { if (Plr.HaveMoney(Plr.ItmInterface.GetBagPrice())) { if (Plr.RemoveMoney(Plr.ItmInterface.GetBagPrice())) { ++Plr.ItmInterface.BagBuy; Plr.ItmInterface.SendMaxInventory(Plr); } } } break; } }
public static void F_INTERACT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) return; Log.Dump("F_INTERACT", packet.ToArray(), 0, packet.ToArray().Length); InteractMenu Menu = new InteractMenu(); Menu.Unk = packet.GetUint16(); Menu.Oid = packet.GetUint16(); Menu.Menu = packet.GetUint16(); Menu.Page = packet.GetUint8(); Menu.Num = packet.GetUint8(); Menu.SellCount = packet.GetUint16(); Menu.Count = packet.GetUint16(); Object Obj = cclient.Plr.Region.GetObject(Menu.Oid); if (Obj == null) return; if (Obj.GetDistanceTo(cclient.Plr) > 20) { Log.Error("F_INTERACT", "Distance = " + Obj.GetDistanceTo(cclient.Plr)); return; } Obj.SendInteract(cclient.Plr, Menu); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte freeslot = Program.CharMgr.GetFreeSlot(cclient.Account.Id); if (freeslot == 0 || cclient.CreateChar == null) ANS_CHARACTER_CREATE.Send(cclient); else { cclient.CreateChar.SlotId = freeslot; cclient.CreateChar.Faction = packet.GetUint8(); cclient.CreateChar.Gender = packet.GetUint8(); cclient.CreateChar.Version = (int)packet.GetUint32R(); cclient.CreateChar.Seconds = (int)packet.GetUint32R(); byte[] Custom = new byte[packet.Length - packet.Position]; packet.Read(Custom, 0, Custom.Length); cclient.CreateChar.Custom = BitConverter.ToString(Custom); Program.CharMgr.CreateCharacter(cclient.CreateChar); ANS_CHARACTER_CREATE.Send(cclient); } }
protected override void OnReceive(byte[] Packet) { lock (this) { PacketIn packet = new PacketIn(Packet, 0, Packet.Length); long byteLeft = packet.Length; while (byteLeft > 0) { if (!m_expectData) { long StartPos = packet.Position; m_expectSize = packet.DecodeMythicSize(); long EndPos = packet.Position; long Diff = EndPos - StartPos; byteLeft -= Diff; if (m_expectSize <= 0) { packet.Opcode = packet.GetUint8(); packet.Size = (ulong)m_expectSize; _srvr.HandlePacket(this, packet); return; } if (byteLeft <= 0) return; Opcode = packet.GetUint8(); byteLeft -= 1; m_expectData = true; } else { m_expectData = false; if (byteLeft >= m_expectSize) { long Pos = packet.Position; packet.Opcode = Opcode; packet.Size = (ulong)m_expectSize; _srvr.HandlePacket(this, packet); byteLeft -= m_expectSize; packet.Position = Pos; packet.Skip(m_expectSize); } else { Log.Error("OnReceive", "Data count incorrect :" + byteLeft + " != " + m_expectSize); } } } packet.Dispose(); } }
static public void F_SWITCH_ATTACK_MODE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.HasPlayer()) return; cclient.Plr.CbtInterface.Attacking = true; }
public static void F_TRADE_STATUS(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying()) return; cclient.Plr.ItmInterface.HandleTrade(packet); }
public static void F_INTERRUPT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; cclient.Plr.AbtInterface.StopCast(); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; Program.CharMgr.DeleteCharacter(cclient.Account.Id, packet.GetUint8()); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_DELETE); Out.WriteUInt32R(0); cclient.SendTCP(Out); }
static public void CMSG_GetAcctPropListReq(BaseClient client, PacketIn packet) { Client cclient = client as Client; PacketOut Out = new PacketOut((byte)Opcodes.SMSG_GetAcctPropListReply); byte[] val = { 0x08, 0x00 }; Out.Write(val); cclient.SendTCPCuted(Out); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; packet.Skip(24); string Email = packet.GetUnicodeString().ToUpper(); Log.Notice("ASK_LOGIN", "Authentification de : " + Email); SendLoginResult(cclient, Email,Program.CharMgr.LoadAccount(Email)); }
protected override void OnReceive(byte[] Packet) { lock (this) { PacketIn packet = new PacketIn(Packet, 0, Packet.Length); packet.Size = packet.GetUint32R(); packet = DeCrypt(packet); packet.Opcode = packet.GetUint32R(); Server.HandlePacket(this, packet); } }
static public void F_TEXT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; byte Unk = packet.GetUint8(); string Text = packet.GetString((int)(packet.Length - packet.Position)); CommandMgr.HandleText(cclient.Plr, Text); }
static public void F_SOCIAL_NETWORK(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying() || !cclient.Plr.IsInWorld()) return; Player Plr = cclient.Plr; byte Type = packet.GetUint8(); switch (Type) { case 11: // Inspection { Player Target = Plr.CbtInterface.GetTarget(GameData.TargetTypes.TARGETTYPES_TARGET_ALLY) as Player; if (Target == null) Plr.SendLocalizeString("", GameData.Localized_text.TEXT_SN_LISTS_ERR_PLAYER_NOT_FOUND); else Target.ItmInterface.SendInspect(Plr); } break; case 8: { packet.Skip(1); byte NameSize = packet.GetUint8(); packet.Skip(1); string Name = packet.GetString(NameSize); byte GuildSize = packet.GetUint8(); packet.Skip(1); string GuildName = packet.GetString(GuildSize); packet.Skip(1); UInt16 Career = packet.GetUint16(); packet.Skip(4); UInt16 ZoneId = packet.GetUint16(); while (ZoneId > 256) ZoneId -= 256; while (packet.GetUint8() != 0xFF) ; packet.Skip(2 + (ZoneId == 255 ? 0 : 1)); byte MinLevel = packet.GetUint8(); byte MaxLevel = packet.GetUint8(); Plr.SocInterface.SendPlayers(Player.GetPlayers(Name, GuildName, Career, ZoneId, MinLevel, MaxLevel)); } break; } }
public static void F_DISCONNECT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient._Account == null) return; Log.Success("F_DISCONNECT", "MeId=" + cclient.Id); GameClient OtherClient = (client.Server as TCPServer).GetClientByAccount(cclient, cclient._Account.AccountId); if (OtherClient != null) OtherClient.Disconnect(); }
static public void F_PLAYER_INFO(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) return; packet.GetUint16(); UInt16 Oid = packet.GetUint16(); byte Unk = packet.GetUint8(); byte TargetType = packet.GetUint8(); cclient.Plr.CbtInterface.SetTarget(Oid, (GameData.TargetTypes)TargetType); }
static public void F_PING(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; uint Timestamp = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.S_PONG); Out.WriteUInt32(Timestamp); Out.WriteUInt64((UInt64)TCPManager.GetTimeStamp()); Out.WriteUInt32((UInt32)(cclient.SequenceID+1)); Out.WriteUInt32(0); cclient.SendPacket(Out); }
public static void F_TRANSFER_ITEM(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) return; ushort Oid = packet.GetUint16(); ushort To = packet.GetUint16(); ushort From = packet.GetUint16(); ushort Count = packet.GetUint16(); cclient.Plr.ItmInterface.MoveSlot(From, To, Count); }
static public void F_CONNECT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; packet.Skip(8); UInt32 Tag = packet.GetUint32(); string Token = packet.GetString(80); packet.Skip(21); string Username = packet.GetString(23); // TODO AuthResult Result = Program.AcctMgr.CheckToken(Username, Token); if (Result != AuthResult.AUTH_SUCCESS) { Log.Error("F_CONNECT", "Invalid Token =" + Username); cclient.Disconnect(); } else { cclient._Account = Program.AcctMgr.GetAccount(Username); if (cclient._Account == null) { Log.Error("F_CONNECT", "Invalid Account =" + Username); cclient.Disconnect(); } else { //Log.Success("F_CONNECT", "MeId=" + cclient.Id); GameClient Other = (cclient.Server as TCPServer).GetClientByAccount(cclient, cclient._Account.AccountId); if (Other != null) Other.Disconnect(); { PacketOut Out = new PacketOut((byte)Opcodes.S_CONNECTED); Out.WriteUInt32(0); Out.WriteUInt32(Tag); Out.WriteByte(Program.Rm.RealmId); Out.WriteUInt32(1); Out.WritePascalString(Username); Out.WritePascalString(Program.Rm.Name); Out.WriteByte(0); Out.WriteUInt16(0); cclient.SendPacket(Out); } } } }
public static void F_DUMP_STATICS(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) return; UInt32 Unk1 = packet.GetUint32(); UInt16 Unk2 = packet.GetUint16(); UInt16 OffX = packet.GetUint16(); UInt16 Unk3 = packet.GetUint16(); UInt16 OffY = packet.GetUint16(); Log.Success("F_DUMP_STATIC", "X=" + OffX + ",Y=" + OffY); cclient.Plr.SetOffset(OffX, OffY); }
public static void F_EMOTE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; UInt32 emote = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.F_EMOTE); Out.WriteUInt16(cclient.Plr.Oid); Out.WriteUInt16((UInt16)emote); if (cclient.Plr.CbtInterface.HasTarget()) Out.WriteUInt16(cclient.Plr.CbtInterface.CurrentTarget.Target.Oid); cclient.Plr.DispatchPacket(Out, false); cclient.Plr.SendPacket(Out); }
static public void F_EMOTE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; UInt32 emote = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.F_EMOTE); Out.WriteUInt16(cclient.Plr.Oid); Out.WriteUInt16((UInt16)emote); if (cclient.Plr.CbtInterface.HasTarget(GameData.TargetTypes.TARGETTYPES_TARGET_ALLY)) Out.WriteUInt16(cclient.Plr.CbtInterface.Targets[(int)GameData.TargetTypes.TARGETTYPES_TARGET_ALLY]); cclient.Plr.DispatchPacket(Out, false); cclient.Plr.SendPacket(Out); }
protected override void OnReceive(byte[] Packet) { lock (this) { PacketIn pack = new PacketIn(Packet, 0, Packet.Length); pack.Size = pack.GetUint32(); pack.Opcode = pack.GetUint8(); if (!Enum.IsDefined(typeof(Opcodes), (byte)pack.Opcode)) { Log.Error("OnReceive", "Opcode invalide : " + pack.Opcode); return; } Server.HandlePacket((BaseClient)this, pack); } }
public static void F_DO_ABILITY(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; UInt32 Unk, Unk2, Unk3 = 0; UInt16 AbilityID = 0; Unk = packet.GetUint32(); Unk2 = packet.GetUint32(); Unk3 = packet.GetUint32(); AbilityID = packet.GetUint16(); cclient.Plr.AbtInterface.StartCast(AbilityID); }
static public void F_ZONEJUMP(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) return; //Log.Dump("Jump", packet, true); UInt32 Id = packet.GetUint32(); Log.Info("Jump", "Jump to :" + Id); Zone_jump Jump = WorldMgr.GetZoneJump(Id); if (Jump != null) { cclient.Plr.Teleport(Jump.ZoneID, Jump.WorldX, Jump.WorldY, Jump.WorldZ, Jump.WorldO); } else Log.Error("Jump", "Invalid Jump"); }