static public 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); } }
public static void F_DUMP_STATICS(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } cclient.Plr.MoveBlock = false; uint Unk1 = packet.GetUint32(); ushort Unk2 = packet.GetUint16(); ushort OffX = packet.GetUint16(); ushort Unk3 = packet.GetUint16(); ushort OffY = packet.GetUint16(); //cclient.Plr.DebugMessage("DUMP_STATICS : OFFSETS "+OffX+", "+OffY); cclient.Plr.SetOffset(OffX, OffY); if (!cclient.Plr.IsActive) { cclient.Plr.IsActive = true; } if (cclient.Plr.PendingDumpStatic) { cclient.Plr.OnClientLoaded(); } }
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); } }
public static void F_SALVAGE_ITEM(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) { return; } ushort Slot = packet.GetUint16(); ushort Stat = packet.GetUint16(); cclient.Plr.GatherInterface.Salvage_Item(Slot, Stat); }
static public void F_REQUEST_CHAR(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; cclient.State = (int)eClientState.CharScreen; UInt16 Operation = packet.GetUint16(); if (Operation == 0x2D58) { PacketOut Out = new PacketOut((byte)Opcodes.F_REQUEST_CHAR_ERROR); Out.WriteByte((byte)CharMgr.GetAccountRealm(cclient._Account.AccountId)); cclient.SendTCP(Out); } else { PacketOut Out = new PacketOut((byte)Opcodes.F_REQUEST_CHAR_RESPONSE); Out.FillString(cclient._Account.Username, 25); // account name Out.WriteByte(0xFF); Out.WriteByte(CharMgr.MAX_SLOT); // Max characters 20 Out.WriteUInt16(0); // unk Out.WriteByte(0); // name changing tokens, 1 will enable button Out.WriteUInt16(0); //unk byte[] Chars = CharMgr.BuildCharactersList(cclient._Account.AccountId); Out.Write(Chars, 0, Chars.Length); cclient.SendTCP(Out); } }
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); } }
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[] 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 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_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_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); } }
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(); } }
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; } ; }
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(); // Log.Info("","move item " + cclient.Plr.ItmInterface.GetItemInSlot(From).Info.Entry + " slot " + From + " count "+Count+" to slot " + To +" item "+cclient.Plr.ItmInterface.GetItemInSlot(To).Info.Entry); cclient.Plr.ItmInterface.MoveSlot(From, To, Count); }
static public 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_FLIGHT(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; ushort targetOid = packet.GetUint16(); ushort state = packet.GetUint16(); if (state == 20) // Flight Master { Creature flightMaster = cclient.Plr.Region.GetObject(targetOid) as Creature; if (flightMaster == null || flightMaster.InteractType != InteractType.INTERACTTYPE_FLIGHT_MASTER || cclient.Plr.Get2DDistanceToObject(flightMaster, true) > FLIGHT_DISTANCE_TOLERANCE) { cclient.Plr.SendLocalizeString(ChatLogFilters.CHATLOGFILTERS_USER_ERROR, Localized_text.TEXT_FLIGHT_MASTER_RANGE_ERR); return; } ushort destId = packet.GetUint16(); List <Zone_Taxi> destinations = WorldMgr.GetTaxis(cclient.Plr); if (destinations.Count <= destId - 1) { return; } Zone_Taxi destination = destinations[destId - 1]; if (!cclient.Plr.RemoveMoney(destination.Info.Price)) { cclient.Plr.SendLocalizeString(ChatLogFilters.CHATLOGFILTERS_USER_ERROR, Localized_text.TEXT_FLIGHT_LACK_FUNDS); return; } Pet pet = cclient.Plr.CrrInterface.GetTargetOfInterest() as Pet; if (pet != null) { pet.Destroy(); } cclient.Plr.AbtInterface.ResetCooldowns(); cclient.Plr.Teleport(destination.ZoneID, destination.WorldX, destination.WorldY, destination.WorldZ, destination.WorldO); } }
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_AUCTION_POST_ITEM(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; if (!cclient.IsPlaying() || !cclient.Plr.IsInWorld()) { return; } Player plr = cclient.Plr; if (AuctionHouse.PlayerAuctionCount(plr.CharacterId) >= AuctionHouse.MAX_AUCTIONS_PER_CHAR) { plr.SendMessage("You have reached the maximum of " + AuctionHouse.MAX_AUCTIONS_PER_CHAR + " auctions.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); return; } ushort slot = packet.GetUint16(); packet.Skip(2); uint price = packet.GetUint32(); if (plr.ItmInterface.GetItemInSlot(slot) == null) { return; } if (plr.ItmInterface.GetItemInSlot(slot).BoundtoPlayer || plr.ItmInterface.GetItemInSlot(slot).Info.Bind == 1) { plr.SendLocalizeString(plr.ItmInterface.GetItemInSlot(slot).Info.Name, ChatLogFilters.CHATLOGFILTERS_USER_ERROR, GameData.Localized_text.TEXT_AUCTION_ITEM_IS_BOUND); return; } Auction auction = new Auction { Item = plr.ItmInterface.GetItemInSlot(slot).Info, ItemId = plr.ItmInterface.GetItemInSlot(slot).Info.Entry, _Talismans = plr.ItmInterface.GetItemInSlot(slot).GetTalismans(), PrimaryDye = plr.ItmInterface.GetItemInSlot(slot).GetPrimaryDye(), SecondaryDye = plr.ItmInterface.GetItemInSlot(slot).GetSecondaryDye(), Count = plr.ItmInterface.GetItemInSlot(slot).Count, Seller = plr.Info, SellerId = plr.CharacterId, SellPrice = price, StartTime = (uint)TCPManager.GetTimeStamp(), Realm = plr.Info.Realm, AuctionId = (uint)AuctionHouse.GenerateAuctionGUID() }; AuctionHouse.AddAuction(auction); plr.ItmInterface.DeleteItem(slot); }
public static void CL_LOGIN(BaseClient client, PacketIn packet) { Client cclient = client as Client; var username = packet.GetString16(); var hashLen = packet.GetUint16(); var hash = new byte[hashLen]; packet.Read(hash, 0, hashLen); var installID = packet.GetString(); cclient.Login(username, hash, installID); }
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); }
static public 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(); cclient.Plr.SetOffset(OffX, OffY); if (!cclient.Plr.IsActive) { cclient.Plr.IsActive = true; } }
public static void F_REQUEST_INIT_OBJECT(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; if (cclient.Plr == null) { return; } ushort oid = packet.GetUint16(); cclient.Plr.GetObjectInRange(oid)?.SendMeTo(cclient.Plr); }
public static void F_START_SIEGE_MULTIUSER(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null || !cclient.Plr.IsInWorld()) { return; } ushort siegeOid = packet.GetUint16(); cclient.Plr.CurrentSiege?.SiegeInterface?.SendSiegeMultiuser(); }
public static void F_PLAY_VOICE_OVER(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; packet.GetUint16(); // Unk ushort ZoneId = packet.GetUint16(); Player Plr = cclient.Plr; if (Plr.Region == null) { return; } ZoneMgr Zone = Plr.Zone; if (Zone == null) { return; } List <PublicQuest> PQuests = Zone.PQuests; PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_UPDATE, 64); Out.WriteUInt32(0); Out.WriteByte(6); Out.WriteUInt32(ZoneId); Out.WriteUInt16((ushort)PQuests.Count); foreach (PublicQuest PQuest in PQuests) { Out.WriteUInt32(PQuest.Info.Entry); Out.WriteUInt16((ushort)PQuest.ActivePlayers.Count); } cclient.Plr.SendPacket(Out); }
public static void F_CLIENT_DATA(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; Player plr = cclient.Plr; if (plr == null) { return; } ushort offset = packet.GetUint16(); ushort size = packet.GetUint16(); MemoryStream ms = new MemoryStream(plr.Info.ClientData.Data) { Position = offset }; ms.Write(packet.Read(size), 0, size); plr.Info.ClientData.Dirty = true; CharMgr.Database.SaveObject(plr.Info.ClientData); }
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_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 unk2 = packet.GetUint16(); ushort AbilityId = packet.GetUint16(); ushort Px = packet.GetUint16(); ushort Py = packet.GetUint16(); ushort ZoneId = packet.GetUint16(); //Log.Info("Ability", AbilityId + " Cast Ability At position : " + Px + "," + Py); cclient.Plr.AbtInterface.StartCast(AbilityId); }
private static void CommandSelectTitle(Player plr, PacketIn packet) { packet.ReadByte(); // Read the titleId ushort titleId = packet.GetUint16(); // Verify player has this title unlocked if (titleId != 0 && !plr.TokInterface.HasTok(titleId)) { plr.SendClientMessage("You attempted to select a title that you have not yet unlocked.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR); } else { plr.SetTitleId(titleId); } }
public static void F_REQUEST_QUEST(BaseClient client, PacketIn packet) { GameClient cclient = (GameClient)client; ushort 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.AbandonQuest(questID); } break; case 2: // Send To Group { if (cclient.Plr.WorldGroup != null) { foreach (Player member in cclient.Plr.WorldGroup.GetPlayersCloseTo(cclient.Plr, 25)) { if (member != cclient.Plr) { if (Services.World.QuestService._Quests[questID].Shareable) { member.QtsInterface.AcceptQuest(questID); cclient.Plr.SendClientMessage("You shared quest '" + Services.World.QuestService._Quests[questID].Name + "' with " + member.Name); member.SendClientMessage(cclient.Plr.Name + " shared quest '" + Services.World.QuestService._Quests[questID].Name + "' with you"); } else { member.SendClientMessage("Quest '" + Services.World.QuestService._Quests[questID].Name + "' cannot be shared."); cclient.Plr.SendClientMessage("You cannot share quest '" + Services.World.QuestService._Quests[questID].Name + "' with " + member.Name); } } } //WorldServer.Services.World.QuestService._Quests[questID].Shareable = 1; //WorldServer.Services.World.QuestService._ } } break; } }
static public 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_REQUEST_INIT_OBJECT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) { return; } ushort Oid = packet.GetUint16(); foreach (Object Obj in cclient.Plr._ObjectRanged) { if (Obj != null && !Obj.IsDisposed && Obj.Oid == Oid) { Obj.SendMeTo(cclient.Plr); } } }