private static void HandleLearnEmote(GameSession session, PacketReader packet) { long emoteItemUid = packet.ReadLong(); // TODO grab emoteId from emoteItemUid session.Send(EmotePacket.LearnEmote()); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; player.Levels.SetLevel(90); player.Levels.SetPrestigeLevel(100); player.Wallet.Meso.SetAmount(10000000000); // 10B player.Account.Meret.SetAmount(10000000000); // 10B // Stickers for (int i = 1; i < 7; i++) { if (player.ChatSticker.Any(x => x.GroupId == i)) { continue; } trigger.Session.Send(ChatStickerPacket.AddSticker(21100000 + i, i)); player.ChatSticker.Add(new((byte)i, 9223372036854775807)); } List <int> emotes = SkillMetadataStorage.GetEmotes(); foreach (int emoteId in emotes) { // Broken emotes if (emoteId is >= 90200032 and <= 90200036) { continue; } if (player.Emotes.Contains(emoteId)) { continue; } player.Emotes.Add(emoteId); trigger.Session.Send(EmotePacket.LearnEmote(emoteId)); } List <TitleMetadata> titles = TitleMetadataStorage.GetAll(); foreach (TitleMetadata title in titles) { int titleId = title.Id; if (player.Titles.Contains(titleId)) { continue; } player.Titles.Add(titleId); trigger.Session.Send(UserEnvPacket.AddTitle(titleId)); } DatabaseManager.Characters.Update(player); trigger.Session.Send(NoticePacket.Notice("Done!", NoticeType.Chat)); }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self Player player = session.Player; Account account = player.Account; session.EnterField(player); session.Send(StatPacket.SetStats(player.FieldPlayer)); session.Send(StatPointPacket.WriteTotalStatPoints(player)); session.Send(StatPointPacket.WriteTotalStatPoints(player)); // This packet is sent twice on GMS, not sure why session.Send(StatPointPacket.WriteStatPointDistribution(player)); if (account.IsVip()) { session.Send(BuffPacket.SendBuff(0, new(100000014, player.FieldPlayer.ObjectId, player.FieldPlayer.ObjectId, 1, (int)account.VIPExpiration, 1))); session.Send(PremiumClubPacket.ActivatePremium(player.FieldPlayer, account.VIPExpiration)); } session.Send(EmotePacket.LoadEmotes(player)); session.Send(ChatStickerPacket.LoadChatSticker(player)); session.Send(HomeCommandPacket.LoadHome(player)); session.Send(ResponseCubePacket.DecorationScore(account.Home)); session.Send(ResponseCubePacket.LoadHome(player.FieldPlayer.ObjectId, player.Account.Home)); session.Send(ResponseCubePacket.ReturnMap(player.ReturnMapId)); session.Send(LapenshardPacket.Load(player.Inventory.LapenshardStorage)); IEnumerable <Cube> cubes = session.FieldManager.State.Cubes.Values .Where(x => x.Value.PlotNumber == 1 && x.Value.Item.HousingCategory is ItemHousingCategory.Farming or ItemHousingCategory.Ranching) .Select(x => x.Value); foreach (Cube cube in cubes) { session.Send(FunctionCubePacket.UpdateFunctionCube(cube.CoordF.ToByte(), 2, 1)); } if (player.Party is not null) { session.Send(PartyPacket.UpdatePlayer(player)); } session.Send(KeyTablePacket.SendHotbars(player.GameOptions)); List <GameEvent> gameEvents = DatabaseManager.Events.FindAll(); session.Send(GameEventPacket.Load(gameEvents)); TrophyManager.OnMapEntered(player, player.MapId); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; // Stickers for (int i = 1; i < 7; i++) { if (player.ChatSticker.Any(x => x.GroupId == i)) { continue; } trigger.Session.Send(ChatStickerPacket.AddSticker(21100000 + i, i, 9223372036854775807)); player.ChatSticker.Add(new ChatSticker((byte)i, 9223372036854775807)); } // Emotes for (int i = 1; i < 146; i++) { int emoteId = 90200000 + i; if (player.Emotes.Contains(emoteId)) { continue; } player.Emotes.Add(emoteId); trigger.Session.Send(EmotePacket.LearnEmote(emoteId)); } // Titles for (int i = 1; i < 854; i++) { int titleId = 10000000 + i; if (player.Titles.Contains(titleId)) { continue; } player.Titles.Add(titleId); trigger.Session.Send(UserEnvPacket.AddTitle(titleId)); } DatabaseManager.Characters.Update(player); trigger.Session.Send(NoticePacket.Notice("Done!", NoticeType.Chat)); }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self session.EnterField(session.Player.MapId); session.Send(StatPacket.SetStats(session.FieldPlayer)); session.Send(StatPointPacket.WriteTotalStatPoints(session.Player)); foreach (MasteryExp mastery in session.Player.Levels.MasteryExp) { session.Send(MasteryPacket.SetExp(mastery.Type, mastery.CurrentExp)); } if (session.Player.IsVip()) { session.Send(PremiumClubPacket.ActivatePremium(session.FieldPlayer, session.Player.VIPExpiration)); } session.Send(EmotePacket.LoadEmotes(session.Player)); session.Send(ChatStickerPacket.LoadChatSticker(session.Player)); session.Send(ResponseCubePacket.LoadHome(session.FieldPlayer)); // Normally skill layout would be loaded from a database QuickSlot arrowStream = QuickSlot.From(10500001); QuickSlot arrowBarrage = QuickSlot.From(10500011); QuickSlot eagleGlide = QuickSlot.From(10500151); QuickSlot testSkill = QuickSlot.From(10500153); if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar)) { /* * mainHotbar.MoveQuickSlot(4, arrowStream); * mainHotbar.MoveQuickSlot(5, arrowBarrage); * mainHotbar.MoveQuickSlot(6, eagleGlide); * mainHotbar.MoveQuickSlot(7, testSkill); */ session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions)); } session.Send(GameEventPacket.Load()); }
public static EmotePacket ParseEmotePacket(string[] lines, long index, BuildVersions buildVersion) { EmotePacket emotePacket = new EmotePacket("", 0, LineGetters.GetTimeSpanFromLine(lines[index])); do { if (GetGuidFromLine(lines[index]) != "") { emotePacket.guid = GetGuidFromLine(lines[index]); } if (GetEmoteIdFromLine(lines[index]) != 0) { emotePacket.emoteId = GetEmoteIdFromLine(lines[index]); } index++; }while (lines[index] != ""); return(emotePacket); }
private static void HandleLearnEmote(GameSession session, PacketReader packet) { long itemUid = packet.ReadLong(); if (!session.Player.Inventory.Items.ContainsKey(itemUid)) { return; } Item item = session.Player.Inventory.Items[itemUid]; if (session.Player.Emotes.Contains(item.SkillId)) { return; } session.Player.Emotes.Add(item.SkillId); session.Send(EmotePacket.LearnEmote(item.SkillId)); InventoryController.Consume(session, item.Uid, 1); }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self session.EnterField(session.Player.MapId); session.Send(FieldObjectPacket.SetStats(session.FieldPlayer)); session.Send(EmotePacket.LoadEmotes()); // Normally skill layout would be loaded from a database QuickSlot arrowStream = QuickSlot.From(10500001); QuickSlot arrowBarrage = QuickSlot.From(10500011); QuickSlot eagleGlide = QuickSlot.From(10500151); QuickSlot testSkill = QuickSlot.From(10500153); if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar)) { /* * mainHotbar.MoveQuickSlot(4, arrowStream); * mainHotbar.MoveQuickSlot(5, arrowBarrage); * mainHotbar.MoveQuickSlot(6, eagleGlide); * mainHotbar.MoveQuickSlot(7, testSkill); */ session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions)); } // Add catalysts for testing /* * int[] catalysts = { 40100001, 40100002, 40100003, 40100021, 40100023, 40100024, 40100026 }; * foreach (int catalyst in catalysts) { * var item = new Item(catalyst) { Amount = 99999, Uid = catalyst }; * session.Inventory.Add(item); * session.Send(ItemInventoryPacket.Add(item)); * } */ }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self Player player = session.Player; Account account = player.Account; session.EnterField(player); session.Send(StatPacket.SetStats(session.FieldPlayer)); session.Send(StatPointPacket.WriteTotalStatPoints(player)); if (account.IsVip()) { session.Send(BuffPacket.SendBuff(0, new Status(100000014, session.FieldPlayer.ObjectId, session.FieldPlayer.ObjectId, 1, (int)account.VIPExpiration, 1))); session.Send(PremiumClubPacket.ActivatePremium(session.FieldPlayer, account.VIPExpiration)); } session.Send(EmotePacket.LoadEmotes(player)); session.Send(ChatStickerPacket.LoadChatSticker(player)); session.Send(HomeCommandPacket.LoadHome(player)); session.Send(ResponseCubePacket.DecorationScore(account.Home)); session.Send(ResponseCubePacket.LoadHome(session.FieldPlayer)); session.Send(ResponseCubePacket.ReturnMap(player.ReturnMapId)); if (player.Party != null) { session.Send(PartyPacket.UpdatePlayer(player)); } session.Send(KeyTablePacket.SendHotbars(player.GameOptions)); List <GameEvent> gameEvents = DatabaseManager.Events.FindAll(); session.Send(GameEventPacket.Load(gameEvents)); }
public void CreateScriptsForCreatureWithGuid(string guid) { if (guid == "") { return; } List <object> creaturePacketsList = packetsList.Where(x => ((Packet)x).guid == guid).ToList(); foreach (UpdateObjectPacket updatePacket in packetsList.Where(x => typeof(UpdateObjectPacket) == x.GetType() && ((UpdateObjectPacket)x).objectType == UpdateObjectPacket.ObjectType.Conversation)) { if (updatePacket.conversationActors.FirstOrDefault(x => x == guid) != null) { creaturePacketsList.Add(updatePacket); } } creaturePacketsList.AddRange(packetsList.Where(x => x.GetType() == typeof(SpellStartPacket) && ((SpellStartPacket)x).guid != guid && ((SpellStartPacket)x).targetGuids != null && ((SpellStartPacket)x).targetGuids.Contains(guid))); AuraUpdatePacket.FilterAuraPacketsForCreature(creaturePacketsList); creaturePacketsList = creaturePacketsList.OrderBy(x => ((Packet)x).number).ToList(); for (int i = 0; i < creaturePacketsList.Count; i++) { Packet packet = (Packet)creaturePacketsList[i]; if (packet.type == Packet.PacketTypes.SMSG_EMOTE) { bool emoteRelatedToChat = false; foreach (Packet chatPacket in creaturePacketsList.Where(x => x.GetType() == typeof(ChatPacket))) { if ((Math.Round(packet.time.TotalSeconds) == Math.Round(chatPacket.time.TotalSeconds) || Math.Round(packet.time.TotalSeconds) + 1 == Math.Round(chatPacket.time.TotalSeconds)) && IsEmoteRelatedToText(((ChatPacket)chatPacket).creatureText, ((EmotePacket)packet).emoteId)) { emoteRelatedToChat = true; break; } } if (emoteRelatedToChat) { creaturePacketsList.RemoveAt(i); } } } uint creatureEntry = GetCreatureEntryUsingGuid(packetsList, guid); string creatureName = GetCreatureNameFromDb(creatureEntry); string output = ""; output += "Parsed packet sequence for " + creatureName + " (Entry: " + creatureEntry + ") " + "(Guid: " + guid + ")" + "\r\n\r\n"; output += "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" + "\r\n"; output += "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" + "\r\n"; for (int i = 0; i < creaturePacketsList.Count; i++) { Packet packet = (Packet)creaturePacketsList[i]; if (i > 0) { output += "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + "\r\n"; output += "Time passed after previous packet: " + (packet.time - ((Packet)creaturePacketsList[i - 1]).time).TotalSeconds + " -- " + "Time passed after first packet: " + (packet.time - ((Packet)creaturePacketsList[0]).time).TotalSeconds + "\r\n"; } output += "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + "\r\n"; output += "Packet Type: " + packet.type.ToString() + " -- " + "Packet Number: " + packet.number + "\r\n"; output += "Packet Time: " + packet.time.Hours + ":" + packet.time.Minutes + ":" + packet.time.Seconds + ":" + packet.time.Milliseconds + "\r\n"; switch (packet.type) { case Packet.PacketTypes.SMSG_UPDATE_OBJECT: { UpdateObjectPacket updateObjectPacket = (UpdateObjectPacket)packet; if (updateObjectPacket.updateType == UpdateObjectPacket.UpdateType.CreateObject) { if (updateObjectPacket.objectType == UpdateObjectPacket.ObjectType.Creature) { output += "Spawn Position: " + updateObjectPacket.spawnPosition.ToString() + "\r\n"; output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "SpawnPosition = { " + updateObjectPacket.spawnPosition.ToString() + " };" + "\r\n"; if (updateObjectPacket.isSummonedByPlayer) { if (updateObjectPacket.hasReplacedObject) { output += "if (Creature* l_" + ConverNameToCoreFormat(creatureName) + " = " + "l_Player->SummonCreature(me->GetEntry(), me->GetPosition(), TempSummonType::TEMPSUMMON_TIMED_DESPAWN, " + GetDespawnTimerForCreatureWithGuid(guid) * 1000 + ", 0, " + "l_Player->GetObjectGuid()))" + "\r\n" + "{" + "\r\n" + AddSpacesCount(4) + "\r\n" + "}" + "\r\n"; } else { output += ConverNameToCoreFormat(creatureName) + " = " + creatureEntry + "\r\n"; output += "if (Creature* l_" + ConverNameToCoreFormat(creatureName) + " = " + "l_Player->SummonCreature(eCreatures::" + ConverNameToCoreFormat(creatureName) + ", " + "Positions::g_" + ConverNameToCoreFormat(creatureName) + ", TempSummonType::TEMPSUMMON_TIMED_DESPAWN, " + GetDespawnTimerForCreatureWithGuid(guid) * 1000 + ", 0, " + "l_Player->GetObjectGuid()))" + "\r\n" + "{" + "\r\n" + AddSpacesCount(4) + "\r\n" + "}" + "\r\n"; } } if (updateObjectPacket.moveData.waypoints.Count() != 0) { output += "Move Time: " + updateObjectPacket.moveData.moveTime + "\r\n"; if (!updateObjectPacket.moveData.HasJump()) { output += "Velocity: " + Convert.ToString(updateObjectPacket.moveData.GetWaypointsVelocity()).Replace(",", ".") + "f" + "\r\n"; output += updateObjectPacket.moveData.GetSetSpeedString() + "\r\n"; if (updateObjectPacket.moveData.waypoints.Count() == 1) { switch (updateObjectPacket.moveData.moveType) { case MonsterMovePacket.MoveTypes.WALK: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "MovePos = { " + updateObjectPacket.moveData.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "MovePos" + ");" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.RUN: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "MovePos = { " + updateObjectPacket.moveData.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "MovePos" + ");" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.FLY: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "FlyPos = { " + updateObjectPacket.moveData.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothFlyPath(ePoints::FlyEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "FlyPos" + ");" + "\r\n"; break; } default: break; } } else { switch (updateObjectPacket.moveData.moveType) { case MonsterMovePacket.MoveTypes.WALK: { output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ", true);" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.RUN: { output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ", false);" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.FLY: { output += "me->GetMotionMaster()->MoveSmoothFlyPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ");" + "\r\n"; break; } default: break; } output += "std::vector<G3D::Vector3> const g_Path" + ConverNameToCoreFormat(creatureName) + " =" + "\r\n"; output += "{" + "\r\n"; for (int j = 0; j < updateObjectPacket.moveData.waypoints.Count; j++) { Position waypoint = updateObjectPacket.moveData.waypoints[j]; if (j < (updateObjectPacket.moveData.waypoints.Count - 1)) { output += "{ " + waypoint.x.GetValueWithoutComma() + "f, " + waypoint.y.GetValueWithoutComma() + "f, " + waypoint.z.GetValueWithoutComma() + "f },\r\n"; } else { output += "{ " + waypoint.x.GetValueWithoutComma() + "f, " + waypoint.y.GetValueWithoutComma() + "f, " + waypoint.z.GetValueWithoutComma() + "f }\r\n"; } } output += "};" + "\r\n"; } } else { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "JumpPos = { " + updateObjectPacket.moveData.jumpInfo.jumpPos.ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveReverseJump(g_" + ConverNameToCoreFormat(creatureName) + "JumpPos" + ", " + updateObjectPacket.moveData.moveTime + ", " + updateObjectPacket.moveData.jumpInfo.jumpGravity.GetValueWithoutComma() + "f, " + "ePoints::" + ConverNameToCoreFormat(creatureName) + "JumpEnd);" + "\r\n"; break; } break; } } else if (updateObjectPacket.objectType == Packets.UpdateObjectPacket.ObjectType.Conversation) { output += "Creature is part of conversation: " + updateObjectPacket.conversationEntry + " (" + updateObjectPacket.guid + ")" + "\r\n"; } } else if (updateObjectPacket.updateType == UpdateObjectPacket.UpdateType.Values) { if (updateObjectPacket.sheatheState != null) { output += "me->SetSheath(" + (UpdateObjectPacket.SheathState)updateObjectPacket.sheatheState + ");" + "\r\n"; } if (updateObjectPacket.standState != null) { output += "me->SetStandState(" + (UpdateObjectPacket.UnitStandStateType)updateObjectPacket.standState + ");" + "\r\n"; } if (updateObjectPacket.emoteStateId != null) { output += "me->SetEmoteState(" + (EmotePacket.Emote)updateObjectPacket.emoteStateId + ");" + "\r\n"; } } else if (updateObjectPacket.updateType == UpdateObjectPacket.UpdateType.Destroy) { output += "me->DespawnOrUnsummon();" + "\r\n"; } break; } case Packet.PacketTypes.SMSG_SPELL_START: case Packet.PacketTypes.SMSG_SPELL_GO: { SpellStartPacket spellStartPacket = (SpellStartPacket)packet; if (spellStartPacket.guid != guid) { uint entry = GetCreatureEntryUsingGuid(packetsList, spellStartPacket.guid); string spellName = GetSpellName(spellStartPacket.spellId); output += "Hitted by spell: " + spellStartPacket.spellId + " (" + spellName + ")" + "\r\n"; if (spellName != "Unknown") { output += ConverNameToCoreFormat(spellName) + " = " + spellStartPacket.spellId + "\r\n"; } if (entry != 0) { output += "Caster: " + GetCreatureNameFromDb(entry) + " (Entry: " + entry + ") " + "(Guid: " + spellStartPacket.guid + ")" + "\r\n"; } else { output += "Caster: Player " + "(Guid: " + spellStartPacket.guid + ")" + "\r\n"; } } else { string spellName = GetSpellName(spellStartPacket.spellId); output += "Spell Id: " + spellStartPacket.spellId + " (" + spellName + ")" + "\r\n"; if (spellName != "Unknown") { output += ConverNameToCoreFormat(spellName) + " = " + spellStartPacket.spellId + "\r\n"; output += "me->CastSpell(me, eSpells::" + ConverNameToCoreFormat(spellName) + ", true);" + "\r\n"; } if (spellStartPacket.destination.IsValid()) { output += "Destination: " + spellStartPacket.destination.ToString() + "\r\n"; } if (spellStartPacket.targetGuids != null) { if (spellStartPacket.targetGuids.Count == 1 && spellStartPacket.targetGuids.First() == spellStartPacket.guid) { break; } else { for (int j = 0; j < spellStartPacket.targetGuids.Count; j++) { uint entry = GetCreatureEntryUsingGuid(packetsList, spellStartPacket.targetGuids[j]); output += "Hit Target " + j + ": " + GetCreatureNameFromDb(entry) + " (Entry: " + entry + ") " + "(Guid: " + spellStartPacket.targetGuids[j] + ")" + "\r\n"; } } } } break; } case Packet.PacketTypes.SMSG_ON_MONSTER_MOVE: { MonsterMovePacket monsterMovePacket = (MonsterMovePacket)packet; if (monsterMovePacket.HasOrientation()) { output += "me->SetFacingTo(" + monsterMovePacket.creatureOrientation.GetValueWithoutComma() + "f);" + "\r\n"; } if (monsterMovePacket.hasFacingToPlayer) { output += "if (Unit* l_Owner = me->GetAnyOwner())" + "\r\n" + "{" + "\r\n" + AddSpacesCount(4) + "me->SetFacingToObject(l_Owner);" + "\r\n" + "}" + "\r\n"; } if (monsterMovePacket.waypoints.Count() != 0) { output += "Move Time: " + monsterMovePacket.moveTime + "\r\n"; if (!monsterMovePacket.HasJump()) { output += "Velocity: " + Convert.ToString(monsterMovePacket.GetWaypointsVelocity()).Replace(",", ".") + "f" + "\r\n"; output += monsterMovePacket.GetSetSpeedString() + "\r\n"; if (monsterMovePacket.waypoints.Count() == 1) { switch (monsterMovePacket.moveType) { case MonsterMovePacket.MoveTypes.WALK: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "MovePos = { " + monsterMovePacket.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "MovePos" + ");" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.RUN: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "MovePos = { " + monsterMovePacket.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "MovePos" + ");" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.FLY: { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "FlyPos = { " + monsterMovePacket.waypoints.First().ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveSmoothFlyPath(ePoints::FlyEnd, Positions::g_" + ConverNameToCoreFormat(creatureName) + "FlyPos" + ");" + "\r\n"; break; } default: break; } } else { switch (monsterMovePacket.moveType) { case MonsterMovePacket.MoveTypes.WALK: { output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ", true);" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.RUN: { output += "me->GetMotionMaster()->MoveSmoothPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ", false);" + "\r\n"; break; } case MonsterMovePacket.MoveTypes.FLY: { output += "me->GetMotionMaster()->MoveSmoothFlyPath(ePoints::MoveEnd, Waypoints::g_Path" + ConverNameToCoreFormat(creatureName) + ");" + "\r\n"; break; } default: break; } output += "std::vector<G3D::Vector3> const g_Path" + ConverNameToCoreFormat(creatureName) + " =" + "\r\n"; output += "{" + "\r\n"; for (int j = 0; j < monsterMovePacket.waypoints.Count; j++) { Position waypoint = monsterMovePacket.waypoints[j]; if (j < (monsterMovePacket.waypoints.Count - 1)) { output += "{ " + waypoint.x.GetValueWithoutComma() + "f, " + waypoint.y.GetValueWithoutComma() + "f, " + waypoint.z.GetValueWithoutComma() + "f },\r\n"; } else { output += "{ " + waypoint.x.GetValueWithoutComma() + "f, " + waypoint.y.GetValueWithoutComma() + "f, " + waypoint.z.GetValueWithoutComma() + "f }\r\n"; } } output += "};" + "\r\n"; } } else { output += "Position const g_" + ConverNameToCoreFormat(creatureName) + "JumpPos = { " + monsterMovePacket.jumpInfo.jumpPos.ToString() + " };" + "\r\n"; output += "me->GetMotionMaster()->MoveReverseJump(g_" + ConverNameToCoreFormat(creatureName) + "JumpPos" + ", " + monsterMovePacket.moveTime + ", " + monsterMovePacket.jumpInfo.jumpGravity.GetValueWithoutComma() + "f, " + "ePoints::" + ConverNameToCoreFormat(creatureName) + "JumpEnd);" + "\r\n"; break; } break; } break; } case Packet.PacketTypes.SMSG_PLAY_ONE_SHOT_ANIM_KIT: { PlayOneShotAnimKit monsterMovePacket = (PlayOneShotAnimKit)packet; output += "me->PlayOneShotAnimKitId(" + monsterMovePacket.AnimKitId + ");" + "\r\n"; break; } case Packet.PacketTypes.SMSG_CHAT: { ChatPacket chatPacket = (ChatPacket)packet; output += "Text: " + chatPacket.creatureText + "\r\n"; break; } case Packet.PacketTypes.SMSG_EMOTE: { EmotePacket emotePacket = (EmotePacket)packet; output += "me->HandleEmoteCommand(" + (EmotePacket.Emote)emotePacket.emoteId + ");" + "\r\n"; break; } case Packet.PacketTypes.SMSG_AURA_UPDATE: { AuraUpdatePacket auraPacket = (AuraUpdatePacket)packet; string spellName = ConverNameToCoreFormat(GetSpellName(auraPacket.spellId)); output += spellName + " = " + auraPacket.spellId + "\r\n"; output += "me->RemoveAura(eSpells::" + spellName + ");" + "\r\n"; break; } case Packet.PacketTypes.SMSG_SET_AI_ANIM_KIT: { SetAiAnimKit animKitPacket = (SetAiAnimKit)packet; output += "me->SetAIAnimKitId(" + animKitPacket.AiAnimKitId + ");" + "\r\n"; break; } case Packet.PacketTypes.SMSG_PLAY_SPELL_VISUAL_KIT: { PlaySpellVisualKit playSpellVisualKitPacket = (PlaySpellVisualKit)packet; output += "me->SendPlaySpellVisualKit(" + playSpellVisualKitPacket.KitRecId + ", " + playSpellVisualKitPacket.KitType + ", " + playSpellVisualKitPacket.Duration + ");" + "\r\n"; break; } default: break; } output += "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + "\r\n"; output += "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" + "\r\n"; output += "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" + "\r\n"; } mainForm.textBox_Output.Text = output; }
public static WaypointScript GetScriptsFromEmotePacket(EmotePacket emotePacket) { return(new WaypointScript(0, 0, ScriptType.Emote, emotePacket.emoteId, 0, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0, emotePacket.packetSendTime)); }
public bool GetDataFromSniffFile(string fileName) { mainForm.SetCurrentStatus("Loading DBC..."); DBC.DBC.Load(); mainForm.SetCurrentStatus("Getting lines..."); var lines = File.ReadAllLines(fileName); SortedDictionary <long, Packet> updateObjectPacketsDict = new SortedDictionary <long, Packet>(); SortedDictionary <long, Packet> movementPacketsDict = new SortedDictionary <long, Packet>(); SortedDictionary <long, Packet> spellPacketsDict = new SortedDictionary <long, Packet>(); SortedDictionary <long, Packet> auraPacketsDict = new SortedDictionary <long, Packet>(); SortedDictionary <long, Packet> emotePacketsDict = new SortedDictionary <long, Packet>(); buildVersion = LineGetters.GetBuildVersion(lines); if (buildVersion == BuildVersions.BUILD_UNKNOWN) { MessageBox.Show(fileName + " has non-supported build.", "File Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return(false); } mainForm.SetCurrentStatus("Searching for packet indexes in lines..."); Parallel.For(0, lines.Length, index => { if (Packet.GetPacketTypeFromLine(lines[index]) == Packet.PacketTypes.SMSG_UPDATE_OBJECT) { TimeSpan sendTime = LineGetters.GetTimeSpanFromLine(lines[index]); if (sendTime != TimeSpan.Zero) { lock (updateObjectPacketsDict) { if (!updateObjectPacketsDict.ContainsKey(index)) { updateObjectPacketsDict.Add(index, new Packet(Packet.PacketTypes.SMSG_UPDATE_OBJECT, sendTime, index, new List <object>())); } } } } else if (Packet.GetPacketTypeFromLine(lines[index]) == Packet.PacketTypes.SMSG_ON_MONSTER_MOVE) { TimeSpan sendTime = LineGetters.GetTimeSpanFromLine(lines[index]); if (sendTime != TimeSpan.Zero) { lock (movementPacketsDict) { if (!movementPacketsDict.ContainsKey(index)) { movementPacketsDict.Add(index, new Packet(Packet.PacketTypes.SMSG_ON_MONSTER_MOVE, sendTime, index, new List <object>())); } } } } else if (Properties.Settings.Default.Scripts && Packet.GetPacketTypeFromLine(lines[index]) == Packet.PacketTypes.SMSG_SPELL_START) { TimeSpan sendTime = LineGetters.GetTimeSpanFromLine(lines[index]); if (sendTime != TimeSpan.Zero) { lock (spellPacketsDict) { if (!spellPacketsDict.ContainsKey(index)) { spellPacketsDict.Add(index, new Packet(Packet.PacketTypes.SMSG_SPELL_START, sendTime, index, new List <object>())); } } } } else if (Properties.Settings.Default.Scripts && Packet.GetPacketTypeFromLine(lines[index]) == Packet.PacketTypes.SMSG_AURA_UPDATE) { TimeSpan sendTime = LineGetters.GetTimeSpanFromLine(lines[index]); if (sendTime != TimeSpan.Zero) { lock (auraPacketsDict) { if (!auraPacketsDict.ContainsKey(index)) { auraPacketsDict.Add(index, new Packet(Packet.PacketTypes.SMSG_AURA_UPDATE, sendTime, index, new List <object>())); } } } } else if (Properties.Settings.Default.Scripts && Packet.GetPacketTypeFromLine(lines[index]) == Packet.PacketTypes.SMSG_EMOTE) { TimeSpan sendTime = LineGetters.GetTimeSpanFromLine(lines[index]); if (sendTime != TimeSpan.Zero) { lock (emotePacketsDict) { if (!emotePacketsDict.ContainsKey(index)) { emotePacketsDict.Add(index, new Packet(Packet.PacketTypes.SMSG_EMOTE, sendTime, index, new List <object>())); } } } } }); creaturesDict.Clear(); mainForm.SetCurrentStatus("Parsing SMSG_UPDATE_OBJECT packets..."); Parallel.ForEach(updateObjectPacketsDict.Values.AsEnumerable(), packet => { Parallel.ForEach(UpdateObjectPacket.ParseObjectUpdatePacket(lines, packet.index, buildVersion).AsEnumerable(), updatePacket => { lock (updateObjectPacketsDict) { updateObjectPacketsDict.AddSourceFromUpdatePacket(updatePacket, packet.index); } lock (creaturesDict) { if (!creaturesDict.ContainsKey(updatePacket.creatureGuid)) { creaturesDict.Add(updatePacket.creatureGuid, new Creature(updatePacket)); } else { creaturesDict[updatePacket.creatureGuid].UpdateCreature(updatePacket); } } }); }); mainForm.SetCurrentStatus("Parsing SMSG_ON_MONSTER_MOVE packets..."); Parallel.ForEach(movementPacketsDict.Values.AsEnumerable(), packet => { MonsterMovePacket movePacket = MonsterMovePacket.ParseMovementPacket(lines, packet.index, buildVersion); if (movePacket.creatureGuid != "" && (movePacket.HasWaypoints() || movePacket.HasOrientation() || movePacket.HasJump())) { lock (movementPacketsDict) { movementPacketsDict.AddSourceFromMovementPacket(movePacket, packet.index); } lock (creaturesDict) { if (creaturesDict.ContainsKey(movePacket.creatureGuid)) { Creature creature = creaturesDict[movePacket.creatureGuid]; if (!creature.HasWaypoints() && movePacket.HasWaypoints()) { creature.AddWaypointsFromMovementPacket(movePacket); } else if (creature.HasWaypoints() && movePacket.HasOrientation() && !movePacket.HasWaypoints()) { creature.SortWaypoints(); creature.waypoints.Last().SetOrientation(movePacket.creatureOrientation); creature.waypoints.Last().SetOrientationSetTime(movePacket.packetSendTime); } else if (creature.HasWaypoints() && movePacket.HasWaypoints()) { if (creature.waypoints.Last().HasOrientation()) { creature.waypoints.Last().SetDelay((uint)((movePacket.packetSendTime - creature.waypoints.Last().orientationSetTime).TotalMilliseconds)); } creature.AddWaypointsFromMovementPacket(movePacket); } } } } }); if (Properties.Settings.Default.Scripts) { mainForm.SetCurrentStatus("Parsing SMSG_SPELL_START packets..."); Parallel.ForEach(spellPacketsDict.Values.AsEnumerable(), packet => { SpellStartPacket spellPacket = SpellStartPacket.ParseSpellStartPacket(lines, packet.index, buildVersion); if (spellPacket.spellId == 0) { return; } lock (spellPacketsDict) { spellPacketsDict.AddSourceFromSpellPacket(spellPacket, packet.index); } }); mainForm.SetCurrentStatus("Parsing SMSG_AURA_UPDATE packets..."); Parallel.ForEach(auraPacketsDict.Values.AsEnumerable(), packet => { Parallel.ForEach(AuraUpdatePacket.ParseAuraUpdatePacket(lines, packet.index, buildVersion).AsEnumerable(), auraPacket => { lock (auraPacketsDict) { auraPacketsDict.AddSourceFromAuraUpdatePacket(auraPacket, packet.index); } lock (creaturesDict) { if (creaturesDict.ContainsKey(auraPacket.unitGuid)) { Creature creature = creaturesDict[auraPacket.unitGuid]; creature.auras.Add(new Aura((uint)auraPacket.slot, (bool)auraPacket.HasAura, auraPacket.packetSendTime, auraPacket.spellId)); } } }); }); mainForm.SetCurrentStatus("Parsing SMSG_EMOTE packets..."); Parallel.ForEach(emotePacketsDict.Values.AsEnumerable(), packet => { EmotePacket emotePacket = EmotePacket.ParseEmotePacket(lines, packet.index, buildVersion); if (emotePacket.guid == "" || emotePacket.emoteId == 0) { return; } lock (emotePacketsDict) { emotePacketsDict.AddSourceFromEmotePacket(emotePacket, packet.index); } }); mainForm.SetCurrentStatus("Creating waypoint scripts for creatures..."); Parallel.ForEach(creaturesDict.Values.AsEnumerable(), creature => { if (creature.HasWaypoints()) { SortedDictionary <long, Packet> creaturePacketsDict = new SortedDictionary <long, Packet>(); foreach (var packet in updateObjectPacketsDict.Values.Where(packet => packet.HasCreatureWithGuid(creature.guid))) { creaturePacketsDict.Add(packet.index, packet); } foreach (var packet in movementPacketsDict.Values.Where(packet => packet.HasCreatureWithGuid(creature.guid))) { creaturePacketsDict.Add(packet.index, packet); } foreach (var packet in spellPacketsDict.Values.Where(packet => packet.HasCreatureWithGuid(creature.guid))) { creaturePacketsDict.Add(packet.index, packet); } foreach (var packet in auraPacketsDict.Values.Where(packet => packet.HasCreatureWithGuid(creature.guid))) { creaturePacketsDict.Add(packet.index, packet); } foreach (var packet in emotePacketsDict.Values.Where(packet => packet.HasCreatureWithGuid(creature.guid))) { creaturePacketsDict.Add(packet.index, packet); } List <WaypointScript> scriptsList = new List <WaypointScript>(); MonsterMovePacket startMovePacket = new MonsterMovePacket(); bool scriptsParsingStarted = false; foreach (Packet packet in creaturePacketsDict.Values) { switch (packet.packetType) { case Packet.PacketTypes.SMSG_ON_MONSTER_MOVE: { MonsterMovePacket movePacket = (MonsterMovePacket)packet.parsedPacketsList.First(); if (movePacket.HasWaypoints() && !scriptsParsingStarted) { startMovePacket = movePacket; scriptsParsingStarted = true; } else if (movePacket.HasWaypoints() && scriptsParsingStarted) { if (scriptsList.Count != 0) { creature.AddScriptsForWaypoints(scriptsList, startMovePacket, movePacket); scriptsList.Clear(); } startMovePacket = movePacket; } else if ((movePacket.HasOrientation() || movePacket.HasJump()) && scriptsParsingStarted) { scriptsList.Add(WaypointScript.GetScriptsFromMovementPacket(movePacket)); } break; } case Packet.PacketTypes.SMSG_UPDATE_OBJECT: { if (scriptsParsingStarted && packet.parsedPacketsList.Count != 0) { if (packet.parsedPacketsList.GetUpdatePacketForCreatureWithGuid(creature.guid) != null) { UpdateObjectPacket updatePacket = (UpdateObjectPacket)packet.parsedPacketsList.GetUpdatePacketForCreatureWithGuid(creature.guid); List <WaypointScript> updateScriptsList = WaypointScript.GetScriptsFromUpdatePacket(updatePacket); if (updateScriptsList.Count != 0) { scriptsList.AddRange(updateScriptsList); } } } break; } case Packet.PacketTypes.SMSG_SPELL_START: { if (scriptsParsingStarted) { SpellStartPacket spellPacket = (SpellStartPacket)packet.parsedPacketsList.First(); scriptsList.Add(WaypointScript.GetScriptsFromSpellPacket(spellPacket)); } break; } case Packet.PacketTypes.SMSG_AURA_UPDATE: { if (scriptsParsingStarted) { AuraUpdatePacket auraPacket = (AuraUpdatePacket)packet.parsedPacketsList.First(); if (auraPacket.HasAura == false) { scriptsList.Add(WaypointScript.GetScriptsFromAuraUpdatePacket(auraPacket, creature)); } } break; } case Packet.PacketTypes.SMSG_EMOTE: { if (scriptsParsingStarted) { EmotePacket emotePacket = (EmotePacket)packet.parsedPacketsList.First(); scriptsList.Add(WaypointScript.GetScriptsFromEmotePacket(emotePacket)); } break; } } } } }); } mainForm.SetCurrentStatus(""); return(true); }
public static void AddSourceFromEmotePacket(this SortedDictionary <long, Packet> dict, EmotePacket emotePacket, long index) { foreach (var packet in dict.Values.Where(packet => packet.packetType == Packet.PacketTypes.SMSG_EMOTE && packet.index == index)) { packet.parsedPacketsList.Add(emotePacket); return; } }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self session.EnterField(session.Player.MapId); session.Send(StatPacket.SetStats(session.FieldPlayer)); session.Send(StatPointPacket.WriteTotalStatPoints(session.Player)); session.Send(EmotePacket.LoadEmotes(session.Player)); session.Send(ChatStickerPacket.LoadChatSticker(session.Player)); // Normally skill layout would be loaded from a database QuickSlot arrowStream = QuickSlot.From(10500001); QuickSlot arrowBarrage = QuickSlot.From(10500011); QuickSlot eagleGlide = QuickSlot.From(10500151); QuickSlot testSkill = QuickSlot.From(10500153); if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar)) { /* * mainHotbar.MoveQuickSlot(4, arrowStream); * mainHotbar.MoveQuickSlot(5, arrowBarrage); * mainHotbar.MoveQuickSlot(6, eagleGlide); * mainHotbar.MoveQuickSlot(7, testSkill); */ session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions)); } // Add catalysts for testing Item item = new Item(40100001) { Amount = 99999 }; Item item2 = new Item(40100001) { Amount = 90000 }; Item item3 = new Item(20302228) { Amount = 1 }; InventoryController.Add(session, item, true); InventoryController.Add(session, item2, true); InventoryController.Add(session, item3, true); //Add mail for testing //System mail without any item Mail sysMail = new Mail ( 101, session.Player.CharacterId, "50000002", "", "", 0, DateTimeOffset.UtcNow.ToUnixTimeSeconds(), null ); // System mail with an item List <Item> items = new List <Item> { new Item(40100001) // 20302228 { CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), Owner = session.Player, Amount = 10000 } }; Mail sysItemMail = new Mail ( 101, session.Player.CharacterId, "53000042", "", "", 0, DateTimeOffset.UtcNow.ToUnixTimeSeconds(), items ); // Regular mail Mail regMail = new Mail ( 1, session.Player.CharacterId, session.Player.Name, "Test Title", "Test Body", 0, DateTimeOffset.UtcNow.ToUnixTimeSeconds(), null ); session.Player.Mailbox.AddOrUpdate(sysItemMail); session.Player.Mailbox.AddOrUpdate(sysMail); session.Player.Mailbox.AddOrUpdate(regMail); }
public override void Handle(GameSession session, PacketReader packet) { packet.ReadInt(); // ? // Liftable: 00 00 00 00 00 // SendBreakable // Self Player player = session.Player; Account account = player.Account; session.EnterField(player); session.Send(StatPacket.SetStats(player.FieldPlayer)); session.Send(StatPointPacket.WriteTotalStatPoints(player)); session.Send(StatPointPacket.WriteTotalStatPoints(player)); // This packet is sent twice on GMS, not sure why session.Send(StatPointPacket.WriteStatPointDistribution(player)); session.Send(SkillPointPacket.ExtraSkillPoints(player)); if (player.ActivePet is not null) { player.ActivePet.SetMetadataValues(); Pet pet = session.FieldManager.RequestPet(player.ActivePet, player.FieldPlayer); if (pet is not null) { player.FieldPlayer.ActivePet = pet; session.Send(ResponsePetPacket.LoadPetSettings(pet)); session.Send(NoticePacket.Notice(SystemNotice.PetSummonOn, NoticeType.Chat | NoticeType.FastText)); } } if (account.IsVip()) { session.Send(BuffPacket.SendBuff(0, new(100000014, player.FieldPlayer.ObjectId, player.FieldPlayer.ObjectId, 1, (int)account.VIPExpiration, 1))); session.Send(PremiumClubPacket.ActivatePremium(player.FieldPlayer, account.VIPExpiration)); } session.Send(EmotePacket.LoadEmotes(player)); session.Send(MacroPacket.LoadControls(player.Macros)); session.Send(ChatStickerPacket.LoadChatSticker(player)); session.Send(ResponseCubePacket.DecorationScore(account.Home)); session.Send(ResponseCubePacket.LoadHome(player.FieldPlayer.ObjectId, player.Account.Home)); session.Send(ResponseCubePacket.ReturnMap(player.ReturnMapId)); session.Send(LapenshardPacket.Load(player.Inventory.LapenshardStorage)); IEnumerable <Cube> cubes = session.FieldManager.State.Cubes.Values .Where(x => x.Value.PlotNumber == 1 && x.Value.Item.HousingCategory is ItemHousingCategory.Farming or ItemHousingCategory.Ranching) .Select(x => x.Value); foreach (Cube cube in cubes) { session.Send(FunctionCubePacket.UpdateFunctionCube(cube.CoordF.ToByte(), 2, 1)); } if (player.Party is not null) { session.Send(PartyPacket.UpdatePlayer(player)); } GlobalEvent globalEvent = GameServer.GlobalEventManager.GetCurrentEvent(); if (globalEvent is not null && !MapMetadataStorage.MapIsInstancedOnly(player.MapId)) { session.Send(GlobalPortalPacket.Notice(globalEvent)); } FieldWar fieldWar = GameServer.FieldWarManager.CurrentFieldWar; if (fieldWar is not null && !MapMetadataStorage.MapIsInstancedOnly(player.MapId) && fieldWar.MapId != player.MapId) { session.Send(FieldWarPacket.LegionPopup(fieldWar.Id, fieldWar.EntryClosureTime.ToUnixTimeSeconds())); } session.Send(KeyTablePacket.SendHotbars(player.GameOptions)); TrophyManager.OnMapEntered(player, player.MapId); QuestManager.OnMapEnter(player, player.MapId); player.InitializeEffects(); }
public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; // Reset stats to default player.Stats = new(player.Job); player.Stats.AddBaseStats(player, 90); trigger.Session.Send(StatPacket.SetStats(player.FieldPlayer)); trigger.Session.FieldManager.BroadcastPacket(StatPacket.SetStats(player.FieldPlayer), trigger.Session); player.Levels.SetLevel(90); player.Levels.SetPrestigeLevel(100); player.Wallet.Meso.SetAmount(10_000_000_000); // 10B player.Account.Meret.SetAmount(10_000_000_000); // 10B PremiumClubHandler.ActivatePremium(trigger.Session, 2592000); // 30 days in seconds // Stickers for (int i = 1; i < 7; i++) { if (player.ChatSticker.Any(x => x.GroupId == i)) { continue; } trigger.Session.Send(ChatStickerPacket.AddSticker(21100000 + i, i, long.MaxValue)); player.ChatSticker.Add(new((byte)i, long.MaxValue)); } List <int> emotes = SkillMetadataStorage.GetEmotes(); foreach (int emoteId in emotes) { // Broken emotes if (emoteId is >= 90200032 and <= 90200036) { continue; } if (player.Emotes.Contains(emoteId)) { continue; } player.Emotes.Add(emoteId); trigger.Session.Send(EmotePacket.LearnEmote(emoteId)); } List <TitleMetadata> titles = TitleMetadataStorage.GetAll(); foreach (TitleMetadata title in titles) { int titleId = title.Id; if (player.Titles.Contains(titleId)) { continue; } player.Titles.Add(titleId); trigger.Session.Send(UserEnvPacket.AddTitle(titleId)); } DatabaseManager.Characters.Update(player); trigger.Session.Send(NoticePacket.Notice("Done!", NoticeType.Chat)); }
private List <object> GetDataFromPackets(string[] lines, SynchronizedCollection <Packet> packets) { mainForm.toolStripStatusLabel_FileStatus.Text = "Current status: Getting data from packets..."; mainForm.Update(); List <object> packetsList = new List <object>(); foreach (Packet packet in packets) { switch (packet.type) { case Packet.PacketTypes.SMSG_UPDATE_OBJECT: { foreach (var updatePacket in UpdateObjectPacket.ParseObjectUpdatePacket(lines, packet)) { packetsList.Add(updatePacket); } break; } case Packet.PacketTypes.SMSG_SPELL_START: case Packet.PacketTypes.SMSG_SPELL_GO: { SpellStartPacket spellPacket = SpellStartPacket.ParseSpellStartPacket(lines, packet); if (spellPacket.guid != "") { packetsList.Add(spellPacket); } break; } case Packet.PacketTypes.SMSG_ON_MONSTER_MOVE: { MonsterMovePacket monsterMovePacket = MonsterMovePacket.ParseMovementPacket(lines, packet); if (monsterMovePacket.guid != "" && (monsterMovePacket.waypoints.Count() != 0 || monsterMovePacket.HasJump() || monsterMovePacket.HasOrientation() || monsterMovePacket.hasFacingToPlayer)) { packetsList.Add(monsterMovePacket); } break; } case Packet.PacketTypes.SMSG_PLAY_ONE_SHOT_ANIM_KIT: { PlayOneShotAnimKit playOneShotAnimKitPacket = PlayOneShotAnimKit.ParsePlayOneShotAnimKitPacket(lines, packet); if (playOneShotAnimKitPacket.guid != "") { packetsList.Add(playOneShotAnimKitPacket); } break; } case Packet.PacketTypes.SMSG_CHAT: { ChatPacket chatPacket = ChatPacket.ParseChatPacket(lines, packet); if (chatPacket.guid != "") { packetsList.Add(chatPacket); } break; } case Packet.PacketTypes.SMSG_EMOTE: { EmotePacket emotePacket = EmotePacket.ParseEmotePacket(lines, packet); if (emotePacket.guid != "") { packetsList.Add(emotePacket); } break; } case Packet.PacketTypes.SMSG_AURA_UPDATE: { foreach (var auraPacket in AuraUpdatePacket.ParseAuraUpdatePacket(lines, packet)) { packetsList.Add(auraPacket); } break; } case Packet.PacketTypes.SMSG_SET_AI_ANIM_KIT: { SetAiAnimKit setAiAnimKitPacket = SetAiAnimKit.ParseSetAiAnimKitPacket(lines, packet); if (setAiAnimKitPacket.guid != "") { packetsList.Add(setAiAnimKitPacket); } break; } case Packet.PacketTypes.SMSG_PLAY_SPELL_VISUAL_KIT: { PlaySpellVisualKit playSpellVisualKitPacket = PlaySpellVisualKit.ParsePlaySpellVisualKitPacket(lines, packet); if (playSpellVisualKitPacket.guid != "") { packetsList.Add(playSpellVisualKitPacket); } break; } default: break; } } SpellStartPacket.FilterSpellPackets(packetsList); return(packetsList); }