static public void F_BAG_INFO(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying()) { return; } byte SlotCount = packet.GetUint8(); byte Price = packet.GetUint8(); Player Plr = cclient.Plr; if (!Plr.ItmInterface.HasMaxBag()) { if (Plr.HaveMoney(Plr.ItmInterface.GetBagPrice())) { if (Plr.RemoveMoney(Plr.ItmInterface.GetBagPrice())) { ++Plr.ItmInterface.BagBuy; Plr.ItmInterface.SendMaxInventory(Plr); } } } }
public static Dictionary <string, object> readProfile(ref PacketIn packet) { Dictionary <string, object> computerProfile = new Dictionary <string, object>(); int count = packet.GetUint8(); for (int i = 0; i < count; i++) { string key = packet.GetString(); switch (packet.GetUint8()) { case 0: // string { computerProfile[key] = packet.GetString(); } break; case 1: // list { computerProfile[key] = readProfile(ref packet); } break; } } return(computerProfile); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte[] clientModulus = new byte[64]; for (int i = 0; i < 64; ++i) clientModulus[i] = packet.GetUint8(); cclient.clientModulus = new FrameWork.NetWork.Crypto.BigInteger(1, clientModulus); UInt16 unk = packet.GetUint16(); byte[] Proof = new byte[20]; for (int i = 0; i < 20; ++i) Proof[i] = packet.GetUint8(); cclient.Proof = Proof; if (IsBanned(cclient)) { ANS_LOGIN_FAILED.Send(cclient, (int)ResponseCodes.RC_LOGIN_ACCOUNT_BLOCKED); cclient.Disconnect(); } else { if (IsValid(cclient)) { ANS_LOGIN_SUCCES.Send(cclient); cclient.ECrypt = new TCP.Encryption(cclient.SessionId); ANS_CHARACTER_INFO.Send(cclient); } else { ANS_LOGIN_FAILED.Send(cclient, (int)ResponseCodes.RC_LOGIN_INVALID_ACCOUNT); cclient.Disconnect(); } } return 0; }
static public 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); } }
static public void F_PLAYER_ENTER_FULL(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; UInt16 SID; byte unk1, serverID, characterSlot; SID = packet.GetUint16(); unk1 = packet.GetUint8(); serverID = packet.GetUint8(); string CharName = packet.GetString(24); packet.Skip(2); string Language = packet.GetString(2); packet.Skip(4); characterSlot = packet.GetUint8(); Log.Success("F_PLAYER_ENTER_FULL", "Entrer en jeu de : " + CharName + ",Slot=" + characterSlot); if (Program.Rm.RealmId != serverID) { cclient.Disconnect(); } else { PacketOut Out = new PacketOut((byte)Opcodes.S_PID_ASSIGN); Out.WriteUInt16R((ushort)cclient.Id); cclient.SendTCP(Out); } }
public static void F_OBJECTIVE_UPDATE(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; uint pQuestID = packet.GetUint32(); byte op = packet.GetUint8(); switch (op) { case 8: // switch opt out state byte optOutType = packet.GetUint8(); PublicQuest pQuest = cclient.Plr.QtsInterface.PublicQuest; if (pQuest == null || pQuest.Info.Entry != pQuestID) { return; } pQuest.ProcessOptOut(cclient.Plr, optOutType); break; default: Log.Error("F_OBJECTIVE_UPDATE", $"Received unknown op {op} from client"); break; } }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; PacketOut Out = new PacketOut((uint)Opcodes.ANS_CHARACTER_CREATE); byte freeSlot = GetFreeSlot(cclient); if (freeSlot == 0) { Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED); } else { cclient.Pending.Slot = freeSlot; cclient.Pending.Faction = packet.GetUint8(); cclient.Pending.Gender = packet.GetUint8(); cclient.Pending.Version = (byte)packet.GetUint32Reversed(); packet.GetUint32Reversed(); packet.GetUint32Reversed(); byte[] Custom = new byte[packet.Length - packet.Position]; packet.Read(Custom, 0, Custom.Length); byte[] ActualCustom = new byte[Custom.Length + 4]; ActualCustom[0] = 0x36; ActualCustom[1] = 0x00; ActualCustom[2] = 0x00; ActualCustom[3] = 0x00; Buffer.BlockCopy(Custom, 0, ActualCustom, 4, Custom.Length); cclient.Pending.Appearance = BitConverter.ToString(ActualCustom); Databases.CharacterTable.Add(cclient.Pending); Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS); Out.WriteInt32Reverse(cclient.Pending.Slot); } cclient.Send(Out); return(0); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; PacketOut Out = new PacketOut((uint)Opcodes.ANS_CHARACTER_CREATE); byte freeSlot = GetFreeSlot(cclient); if (freeSlot == 0) { Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED); } else { cclient.Pending.Slot = freeSlot; cclient.Pending.Faction = packet.GetUint8(); cclient.Pending.Gender = packet.GetUint8(); cclient.Pending.Version = (byte)packet.GetUint32Reversed(); packet.GetUint32Reversed(); byte[] Custom = new byte[packet.Length - packet.Position]; packet.Read(Custom, 0, Custom.Length); cclient.Pending.Appearance = BitConverter.ToString(Custom); Databases.CharacterTable.Add(cclient.Pending); Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS); Out.WriteInt32Reverse(cclient.Pending.Slot); } cclient.Send(Out); System.Threading.Thread.Sleep(500); cclient.Pending = default(CharacterEntry); System.Threading.Thread.Sleep(500); cclient.Disconnect(); return(0); }
static public 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.TurnPvp(); 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_PLAYER_INFO(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } packet.GetUint16(); ushort Oid = packet.GetUint16(); byte LOS = packet.GetUint8(); // line of sight updates 96 if in los 32 if targeting someone out of los 0 if channiling a spell and target runs out of los byte TargetType = packet.GetUint8(); //cclient.Plr.DebugMessage("F_PLAYER_INFO: SetTarget: "+Oid); if (TargetType == (byte)TargetTypes.TARGETTYPES_TARGET_SELF) { TargetType = (byte)TargetTypes.TARGETTYPES_TARGET_ALLY; } cclient.Plr.CbtInterface.SetTarget(Oid, (TargetTypes)TargetType); if (LOS == 0) { cclient.Plr.AbtInterface.Cancel(true, (ushort)AbilityResult.ABILITYRESULT_NOTVISIBLECLIENT); } }
static public void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte[] PublicKey = new byte[64]; for (int i = 0; i < 64; ++i) { PublicKey[i] = packet.GetUint8(); } Reverse(PublicKey, 64); cclient.A = PublicKey; UInt16 unk = packet.GetUint16(); byte[] Proof = new byte[20]; for (int i = 0; i < 20; ++i) { Proof[i] = packet.GetUint8(); } Reverse(Proof, 20); cclient.Proof = Proof; if (IsValid(cclient)) { ANS_LOGIN_SUCCES.Send(cclient); } else { cclient.Disconnect(); } }
public static void F_FIRE_SIEGE_WEAPON(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } ushort siegeOid = packet.GetUint16(); ushort targetID = packet.GetUint16(); var targetX = packet.GetUint16(); var targetY = packet.GetUint16(); var targetZ = packet.GetUint16(); var targetZoneID = packet.GetUint16(); var power = packet.GetUint8(); // ram power var unk2 = packet.GetUint8(); var siege = (Creature)cclient.Plr.Region.GetObject(siegeOid); if (siege != null) { if (siege.Spawn.Proto.CreatureSubType == (byte)GameData.CreatureSubTypes.SIEGE_RAM) { siege.SiegeInterface.RamSwing(cclient.Plr, targetID, power); } else { siege.SiegeInterface.Fire(cclient.Plr, targetID, targetX, targetY, targetZ, targetZoneID, power); } } }
public static void F_BUY_CAREER_PACKAGE(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; if (cclient.Plr == null) { return; } AbilityInterface abInterface = cclient.Plr.AbtInterface; byte value = packet.GetUint8(); byte resource = packet.GetUint8(); byte unk1 = packet.GetUint8(); byte tree = packet.GetUint8(); if (resource != 7) // renown training { cclient.Plr.RenInterface.PurchaseRenownAbility(resource, tree); return; } if (tree <= 3) { if (!abInterface.AddPointToTree(tree)) { return; } } else if (tree <= 24) { byte targetTree = 1; tree -= 3; while (tree > 7) { tree -= 7; targetTree++; } abInterface.ActivateSkillInTree(targetTree, tree); } else { return; } abInterface.SaveMastery(); abInterface.ReloadMastery(); abInterface.MasteryChanged = true; }
public static void CL_REQUEST_MANIFEST(BaseClient client, PacketIn packet) { Client cclient = client as Client; List <Archive> archiveList = new List <Archive>(); var count = packet.GetUint8(); for (int i = 0; i < count; i++) { archiveList.Add((Archive)packet.GetUint8()); } cclient.OnRequestManifest(archiveList); }
public static void F_MAIL(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying() || !cclient.Plr.IsInWorld()) { return; } Player Plr = cclient.Plr; Plr.MlInterface.CheckMailExpired(); byte Type = packet.GetUint8(); switch (Type) { case 0: // Mailbox closed { if (Plr.GldInterface.IsInGuild() && Plr.GldInterface.Guild.GuildVaultUser.Contains(Plr)) { Plr.GldInterface.Guild.GuildVaultClosed(Plr); } if (Plr.CurrentSiege != null && Plr.CurrentSiege.SiegeInterface.IsDeployed) { Plr.CurrentSiege.SiegeInterface.RemovePlayer(Plr); } } break; case 1: // Mail sent { Plr.MlInterface.SendPacketMail(packet); } break; case 2: // Open mail case 3: // Return mail case 4: // Delete mail case 5: // Mark as read/unread case 7: // Take Item case 8: // Take money { byte page = packet.GetUint8(); uint guid = ByteOperations.ByteSwap.Swap(packet.GetUint32()); Plr.MlInterface.MailInteract((MailInteractType)Type, guid, packet); } break; } }
public static void F_TROPHY_SETLOCATION(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.IsPlaying()) { return; } packet.GetUint8(); byte Trophyslot = packet.GetUint8(); ushort value = packet.GetUint16(); cclient.Plr.ItmInterface.AssignTrophy(Trophyslot, value); }
static public void F_REQUEST_QUEST(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; Log.Success("HandlePacket", "Handle F_REQUEST_QUEST"); UInt16 QuestID = packet.GetUint16(); byte State = packet.GetUint8(); switch (State) { case 0: // Show Quest { Log.Info("F_REQUEST_QUEST", "Show Quest : " + QuestID); cclient.Plr.QtsInterface.SendQuest(QuestID); } break; case 1: // Decline Quest { Log.Info("F_REQUEST_QUEST", "Decline Quest : " + QuestID); cclient.Plr.QtsInterface.DeclineQuest(QuestID); } break; case 2: // Send To Group { } break; } ; }
static public void F_REQUEST_QUEST(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; UInt16 QuestID = packet.GetUint16(); byte State = packet.GetUint8(); switch (State) { case 0: // Show Quest { cclient.Plr.QtsInterface.SendQuest(QuestID); } break; case 1: // Decline Quest { cclient.Plr.QtsInterface.DeclineQuest(QuestID); } break; case 2: // Send To Group { } break; } ; }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte slotId = packet.GetUint8(); Character Info = cclient.Characters.Get(slotId); MySqlCommand cmd = new MySqlCommand("DELETE FROM `clientstatus` WHERE `name` = @name", Connection.Instance); try { cmd.Prepare(); cmd.Parameters.AddWithValue("@name", Info.Name); cmd.ExecuteNonQuery(); } catch (MySqlException) { } finally { cmd.Dispose(); } PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_INFO); if (Info == null) Out.WriteUInt32Reverse((uint)ResponseCodes.RC_FAILED); else { Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(Info.Slot); Out.WriteByte(Info.Gender); Out.WriteUInt32Reverse(Info.Playtime); Out.WriteUInt32Reverse(Info.Rank); Out.WriteByte(Info.Threat); Out.WriteUInt32Reverse(Info.Money); Out.WriteParsedString("APB-EMU", 60); byte[] Custom = Info.getCustom(); Out.Write(Custom, 0, Custom.Length); } cclient.Send(Out); return 0; }
static public 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 int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte slotId = packet.GetUint8(); CharacterEntry Info = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == cclient.Account.Index && c.Slot == slotId); PacketOut Out = new PacketOut((uint)Opcodes.ANS_CHARACTER_INFO); if (Info.Index < 1) { Out.WriteUInt32Reverse((uint)ResponseCodes.RC_FAILED); } else { Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(Info.Slot); Out.WriteByte(Info.Gender); Out.WriteUInt32Reverse((uint)Info.Playtime); Out.WriteUInt32Reverse((uint)Info.Rank); Out.WriteByte(Info.Threat); Out.WriteUInt32Reverse((uint)Info.Money); Out.WriteParsedString(Info.Clan, 60); byte[] Custom = getCustom(Info); Out.Write(Custom, 0, Custom.Length); } cclient.Send(Out); return(0); }
static public void F_DUMP_ARENAS_LARGE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.HasAccount()) { cclient.Disconnect(); return; } byte CharacterSlot = packet.GetUint8(); Character Char = CharMgr.GetAccountChar(cclient._Account.AccountId).GetCharacterBySlot(CharacterSlot); if (Char == null) { Log.Error("F_DUMP_ARENAS_LARGE", "Can not find character on slot : " + CharacterSlot); cclient.Disconnect(); return; } if (cclient.Plr == null) { cclient.Plr = Player.CreatePlayer(cclient, Char); } PacketOut Out = new PacketOut((byte)Opcodes.F_WORLD_ENTER); Out.WriteUInt16(0x0608); // TODO Out.Fill(0, 20); Out.WriteString("38699", 5); Out.WriteString("38700", 5); Out.WriteString("0.0.0.0", 20); cclient.SendTCP(Out); }
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); }
public static void F_DO_ABILITY_AT_POS(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) { return; } ushort unk = packet.GetUint16(); ushort Oid = packet.GetUint16(); ushort CastPx = packet.GetUint16(); ushort CastPy = packet.GetUint16(); ushort CastZoneId = packet.GetUint16(); ushort CastPz = packet.GetUint16(); ushort AbilityId = packet.GetUint16(); ushort Px = packet.GetUint16(); ushort Py = packet.GetUint16(); ushort Pz = packet.GetUint16(); ushort targetZoneId = packet.GetUint16(); byte abGroup = packet.GetUint8(); if (Px == 0 && Py == 0 && Pz == 0) { cclient.Plr.SendClientMessage("Target position out of range", ChatLogFilters.CHATLOGFILTERS_C_ABILITY_ERROR); } cclient.Plr.AbtInterface.StartCastAtPos(cclient.Plr, AbilityId, ZoneService.GetWorldPosition(cclient.Plr.Zone.Info, Px, Py, Pz), CastZoneId, abGroup); }
static public void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; byte sloid = packet.GetUint8(); Program.CharMgr.SetEnter(cclient.Account.Id, sloid); WorldInfo Info = Program.CharMgr.GetWorldInfo(cclient.Account.WorldId); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER); if (Info == null) { Out.WriteUInt32R(1); } else { Out.WriteUInt32R(0); Out.WriteInt32R(Info.Ip); // WorldServerIp Out.WriteUInt16R((UInt16)Info.Port); // Port Out.WriteInt64R(TCPManager.GetTimeStamp()); } cclient.SendTCP(Out); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; Byte slotId = packet.GetUint8(); Character character = cclient.Characters.Get(slotId); if (character == null) Log.Error(cclient.Account.Email, "Wrong slot specified!"); World.World info = null; lock (Program.worldListener.Worlds) { Program.worldListener.Worlds.TryGetValue(character.WorldId, out info); } PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER); if (info == null) Out.WriteUInt32Reverse(1); else { info.Send(new AccountEnter(cclient.Account.Id, character.Id, cclient.SessionId)); Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(info.IP1); Out.WriteByte(info.IP2); Out.WriteByte(info.IP3); Out.WriteByte(info.IP4); Out.WriteUInt16Reverse((UInt16)info.Port); Out.WriteInt64Reverse(TCPManager.GetTimeStamp()); } cclient.Send(Out); return 0; }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; Byte slotId = packet.GetUint8(); CharacterEntry character = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == cclient.Account.Index && c.Slot == slotId); if (character.Index < 1) Log.Error(cclient.Account.Username, "Wrong slot specified!"); World.World info = null; lock (Program.worldListener.Worlds) { Program.worldListener.Worlds.TryGetValue((uint)character.World, out info); } PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER); if (info == null) Out.WriteUInt32Reverse(1); else { info.Send(new AccountEnter((uint)cclient.Account.Index, (uint)character.Index, cclient.SessionId)); Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(info.IP1); Out.WriteByte(info.IP2); Out.WriteByte(info.IP3); Out.WriteByte(info.IP4); Out.WriteUInt16Reverse((UInt16)info.Port); Out.WriteInt64Reverse(TCPManager.GetTimeStamp()); } cclient.Send(Out); return 0; }
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) { 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(); } }
public static void F_DUMP_ARENAS_LARGE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.HasAccount()) { cclient.Disconnect("No Account in F_DUMP_ARENAS_LARGE"); return; } if (Program.Rm.OnlinePlayers >= Program.Rm.MaxPlayers && cclient._Account.GmLevel == 1) { PacketOut Out = new PacketOut((byte)Opcodes.F_LOGINQUEUE); client.SendPacket(Out); return; } byte CharacterSlot = packet.GetUint8(); Character Char = CharMgr.GetAccountChar(cclient._Account.AccountId).GetCharacterBySlot(CharacterSlot); if (Char == null) { Log.Error("F_DUMP_ARENAS_LARGE", "Can not find character on slot : " + CharacterSlot); cclient.Disconnect("Character not found in F_DUMP_ARENAS_LARGE"); return; } { if (cclient.Plr == null) { cclient.Plr = Player.CreatePlayer(cclient, Char); } if (cclient.Plr == null) { cclient.Disconnect("NULL Player from CreatePlayer?"); return; } if (cclient.Plr.Client != cclient) { cclient.Plr.Client?.Disconnect("Ghost client"); cclient.Plr.Destroy(); cclient.Disconnect("Player already exists"); return; } PacketOut Out = new PacketOut((byte)Opcodes.F_WORLD_ENTER, 64); Out.WriteUInt16(0x0608); // TODO Out.Fill(0, 20); Out.WriteString("38699", 5); Out.WriteString("38700", 5); Out.WriteString("0.0.0.0", 20); cclient.SendPacket(Out); } }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; cclient.Characters.Delete(packet.GetUint8()); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_DELETE); Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); cclient.Send(Out); return 0; }
static public 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); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; Byte freeSlot = GetFreeSlot(cclient); if (freeSlot == 0) ANS_CHARACTER_CREATE.Send(cclient); else { cclient.Pending.Slot = freeSlot; cclient.Pending.Faction = packet.GetUint8(); cclient.Pending.Gender = packet.GetUint8(); cclient.Pending.Version = (Byte)packet.GetUint32Reversed(); packet.GetUint32Reversed(); Byte[] Custom = new Byte[packet.Length - packet.Position]; packet.Read(Custom, 0, Custom.Length); cclient.Pending.Appearance = BitConverter.ToString(Custom); Databases.CharacterTable.Add(cclient.Pending); ANS_CHARACTER_CREATE.Send(cclient); } return 0; }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; byte FileId = packet.GetUint8(); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CONFIGFILE_LOAD); Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS); Out.WriteByte(FileId); byte[] Result = ZlibMgr.Compress(Program.FileMgr.GetFileByte((int)cclient.Account.Id, FileId, true, "", "")); cclient.Send(Out); return 0; }
public static void F_DO_ABILITY(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) { return; } byte LOS = packet.GetUint8(); bool Moving = Convert.ToBoolean(packet.GetUint8()); ushort Heading = packet.GetUint16(); ushort X = packet.GetUint16(); ushort Y = packet.GetUint16(); ushort ZoneID = packet.GetUint16(); ushort Z = packet.GetUint16(); ushort AbilityID = packet.GetUint16(); // prevent ability when banner is out if (cclient.Plr.WeaponStance == WeaponStance.Standard && !(AbilityID == 14508 || AbilityID == 14524 || AbilityID == 14527 || AbilityID == 14526)) { return; } byte abGroup = packet.GetUint8(); byte unk = packet.GetUint8(); uint unk2 = packet.GetUint32(); bool enemyVisible = Convert.ToBoolean(LOS & 128); bool friendlyVisible = Convert.ToBoolean(LOS & 8); cclient.Plr.SetPosition(X, Y, Z, Heading, ZoneID); cclient.Plr.AbtInterface.StartCast(cclient.Plr, AbilityID, abGroup, 0, 0, enemyVisible, friendlyVisible, Moving); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; byte FileId = packet.GetUint8(); PacketOut Out = new PacketOut((uint)Opcodes.ANS_CONFIGFILE_LOAD); Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS); Out.WriteByte(FileId); byte[] Result = ZlibMgr.Compress(Program.FileMgr.GetFileByte(cclient.Account.Index, FileId, true, "", "")); cclient.Send(Out); return(0); }
static public void F_INTERACT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } if (cclient.Plr.IsDead) { return; } 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.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; } Menu.Packet = packet; Obj.SendInteract(cclient.Plr, Menu); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte[] clientModulus = new byte[64]; for (int i = 0; i < 64; ++i) { clientModulus[i] = packet.GetUint8(); } cclient.clientModulus = new FrameWork.NetWork.Crypto.BigInteger(1, clientModulus); ushort unk = packet.GetUint16(); byte[] Proof = new byte[20]; for (int i = 0; i < 20; ++i) { Proof[i] = packet.GetUint8(); } cclient.Proof = Proof; if (IsBanned(cclient)) { LOGIN_FAILED.Send(cclient, (int)ResponseCodes.RC_LOGIN_ACCOUNT_BLOCKED); cclient.Disconnect(); } else { if (IsValid(cclient)) { LOGIN_SUCCES.Send(cclient); cclient.ECrypt = new Encryption(cclient.SessionId); CHARACTER_LIST.Send(cclient); } else { LOGIN_FAILED.Send(cclient, (int)ResponseCodes.RC_LOGIN_INVALID_ACCOUNT); cclient.Disconnect(); } } return(0); }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; byte FileId = packet.GetUint8(); UInt32 Version = packet.GetUint32Reversed(); byte[] File = new byte[packet.Length - packet.Position]; packet.Read(File, 0, File.Length); File = ZlibMgr.Decompress(File); Log.Debug("ConfigSave", "Config saved! FileId = " + FileId + " | Version = " + Version + " | Size = " + File.Length); Program.FileMgr.SaveInfo((int)cclient.Account.Index, FileId, File); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CONFIGFILE_SAVE); Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(FileId); Out.Write(File, 0, File.Length); cclient.Send(Out); return 0; }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; Byte slot = packet.GetUint8(); foreach(CharacterEntry ch in cclient.Characters) { if(ch.Slot == slot) { cclient.Characters.Remove(ch); Databases.CharacterTable.Remove(ch); break; } } PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_DELETE); Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); cclient.Send(Out); return 0; }
public int HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; byte slotId = packet.GetUint8(); CharacterEntry Info = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == cclient.Account.Index && c.Slot == slotId); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_INFO); if (Info.Index < 1) Out.WriteUInt32Reverse((uint)ResponseCodes.RC_FAILED); else { Out.WriteUInt32Reverse((uint)ResponseCodes.RC_SUCCESS); Out.WriteByte(Info.Slot); Out.WriteByte(Info.Gender); Out.WriteUInt32Reverse((uint)Info.Playtime); Out.WriteUInt32Reverse((uint)Info.Rank); Out.WriteByte(Info.Threat); Out.WriteUInt32Reverse((uint)Info.Money); Out.WriteParsedString(Info.Clan, 60); byte[] Custom = getCustom(Info); Out.Write(Custom, 0, Custom.Length); } cclient.Send(Out); return 0; }