internal static void OnZoneUpdate(RealmServerSession session, PacketReader handler) { if (handler.BaseStream.Length < 8) { return; } uint zoneId = handler.ReadUInt32(); session.Character.MapZone = (int)zoneId; session.SendMessageMotd( $"Zone Update ID: {session.Character.MapZone} => {MainForm.AreaTableReader.GetArea(session.Character.MapZone).AreaName} " + $"[{MainForm.AreaTableReader.GetArea(session.Character.MapZone).AreaName.ToCamelCase()}]"); // CheckZone // Send Weather }
internal static void OnPlayerLogin(RealmServerSession session, CmsgPlayerLogin handler) { session.Character = MainForm.Database.GetCharacter(handler.Guid); // Change Player Status Online // Part One session.SendPacket(new SmsgLoginVerifyWorld(session.Character)); // DONE session.SendPacket(new SmsgAccountDataTimes()); // DONE session.SendMessageMotd("Welcome to World of Warcraft."); // DONE session.SendMessageMotd("Servidor do caralho vai curintia ...."); // DONE // Part Two session.SendPacket(new SmsgSetRestStart()); session.SendPacket(new SmsgBindpointupdate(session.Character)); // DONE session.SendPacket(new SmsgTutorialFlags()); session.SendPacket(new SmsgLoginSettimespeed()); // DONE session.SendPacket(new SmsgInitialSpells(session.Character)); session.SendPacket(new SmsgActionButtons(session.Character)); // DONE session.SendPacket(new SmsgInitializeFactions(session.Character)); // DONE // Send Cinematic if first time if (session.Character.is_movie_played == false) { ChrRaces chrRaces = MainForm.ChrRacesReader.GetData(session.Character.race); session.SendPacket(new SmsgTriggerCinematic(chrRaces.CinematicId)); // DONE } // Part Three session.SendPacket(new SmsgCorpseReclaimDelay()); // DONE // Spawn Player session.SendPacket(new SmsgInitWorldStates(session.Character)); session.SendPacket(UpdateObject.CreateOwnCharacterUpdate(session.Character, out session.Entity)); // Set Sesstion Player session.Entity.Session = session; WorldManager.DispatchOnPlayerSpawn(session.Entity); // Generate Inventory foreach (var inventory in MainForm.Database.GetInventory(session.Character)) { session.SendPacket(UpdateObject.CreateItem(inventory, session.Character)); } /* * // Cast talents and racial passive spells * * /////////////////////////////// PT1 * // Setting instance ID * * // Set player to transport * * // If we have changed map * * // Loading map cell if not loaded * * // SMSG_SET_PROFICIENCY * * // SMSG_UPDATE_AURA_DURATION * * //FillAllUpdateFlags(); * //SendUpdate() -> Contem ao envio dos itens * * // Adding to World * // AddToWorld(Me) * * // Enable client moving * // SendTimeSyncReq(client) * * // Send update on aura durations * * /////////////////////////////// PT2 * // Update character status in database * * // Guild Message Of The Day * * // Social lists * * // Send "Friend online" * * // Send online notify for guild * * // Put back character in group if disconnected */ }
public CommandsHelper(RealmServerSession session, string message) { string[] splitMessage = message.Split(' '); Console.WriteLine($@"[Comando]: {splitMessage[0].ToLower()}"); if (splitMessage[0].ToLower() == "db") { XmlReader.Boot(); } if (splitMessage[0].ToLower() == "obj") { session.SendPacket(UpdateObject.CreateGameObject(session.Character.MapX, session.Character.MapY, session.Character.MapZ)); } if (splitMessage[0].ToLower() == "unt") { session.SendPacket(UpdateObject.CreateUnit(session.Character.MapX, session.Character.MapY, session.Character.MapZ, session.Character.MapO)); } if (splitMessage[0].ToLower() == "item") { Console.WriteLine($@"Veio item aqui {Aba} => {int.Parse(splitMessage[1].ToLower())}"); MainForm.Database.ItemUpdate(int.Parse(splitMessage[1].ToLower())); Thread.Sleep(1500); var inventory = MainForm.Database.GetInventory(session.Character); for (int j = 0; j < 112; j++) { if (inventory.Find(item => item.slot == j) != null) { if (j < 19) { session.Entity.SetUpdateField((int)PlayerFields.PLAYER_VISIBLE_ITEM_1_0 + (int)inventory.Find(item => item.slot == j).slot * 12, inventory.Find(item => item.slot == j).item); session.Entity.SetUpdateField((int)PlayerFields.PLAYER_VISIBLE_ITEM_1_PROPERTIES + j * 12, 0); } session.Entity.SetUpdateField((int)PlayerFields.PLAYER_FIELD_INV_SLOT_HEAD + j * 2, inventory.Find(item => item.slot == j).item); session.SendPacket(UpdateObject.CreateItem(inventory.Find(item => item.slot == j), session.Character)); } else { if (j < 19) { session.Entity.SetUpdateField((int)PlayerFields.PLAYER_VISIBLE_ITEM_1_0 + j * 12, 0); session.Entity.SetUpdateField((int)PlayerFields.PLAYER_VISIBLE_ITEM_1_PROPERTIES + j * 12, 0); } session.Entity.SetUpdateField((int)PlayerFields.PLAYER_FIELD_INV_SLOT_HEAD + j * 2, 0); } } Aba++; } if (splitMessage[0].ToLower() == "gps") { session.SendMessageMotd( $"MapX: {session.Character.MapX} = MapY: {session.Character.MapY} = MapZ: {session.Character.MapZ} = MapO: {session.Character.MapO}"); Console.WriteLine($@"MapX: {session.Character.MapX} = MapY: {session.Character.MapY} = MapZ: {session.Character.MapZ} = MapO: {session.Character.MapO}"); Console.WriteLine($@"----------------------------"); Console.WriteLine($@"Players: {session.Entity.KnownPlayers.Count}"); Console.WriteLine($@"Objects: {session.Entity.KnownGameObjects.Count} "); // Creatures // Corpses // You are seen by: } if (splitMessage[0].ToLower() == "a") { //session.SendPacket(new SmsgSetRestStart()); session.SendPacket(new SmsgTriggerCinematic(int.Parse(splitMessage[1].ToLower()))); } if (splitMessage[0].ToLower() == "c") { session.Entity.SetUpdateField((int)UnitFields.UNIT_NPC_EMOTESTATE, int.Parse(splitMessage[1].ToLower())); } if (splitMessage[0].ToLower() == "b") { // Disable Movement session.Entity.SetUpdateField((int)UnitFields.UNIT_FIELD_FLAGS, UnitFlags.UNIT_FLAG_STUNTED); // UNIT_FLAG_STUNTED Console.WriteLine($@"Atual: [{Value}] NEW {Enum.GetValues(typeof(UnitFlags)).Cast<UnitFlags>().SkipWhile(e => e != Value).Skip(1).First()}"); Value = Enum.GetValues(typeof(UnitFlags)).Cast <UnitFlags>().SkipWhile(e => e != Value).Skip(1).First(); // StandState -> Sit session.Entity.SetUpdateField((int)UnitFields.UNIT_FIELD_BYTES_1, 1); //StandStates.STANDSTATE_SIT); Thread.Sleep(1000); session.SendPacket(new SmsgStandstateUpdate(1)); Console.WriteLine(Aba); Aba++; } if (splitMessage[0].ToLower() == "emote") { session.SendPacket(new SmsgTextEmote((int)session.Entity.ObjectGuid.RawGuid, Convert.ToUInt32(splitMessage[2]), Convert.ToInt32(splitMessage[1]))); } if (splitMessage[0].ToLower() == "vai") { string attributeName = splitMessage[1].ToLower(); string attributeValue = splitMessage[2]; switch (attributeName) { case "l": session.Entity.SetUpdateField((int)UnitFields.UNIT_FIELD_LEVEL, int.Parse(attributeValue)); break; case "s": session.Entity.Scale = float.Parse(attributeValue); break; case "g": session.Entity.SetUpdateField((int)UnitFields.UNIT_FIELD_BYTES_0, (byte)int.Parse(attributeValue), 2); break; case "m": session.Entity.SetUpdateField((int)UnitFields.UNIT_FIELD_DISPLAYID, int.Parse(attributeValue)); break; case "e": session.Entity.SetUpdateField((int)UnitFields.UNIT_NPC_EMOTESTATE, (byte)int.Parse(attributeValue)); break; } } }