public static void On_SMSG_CHAR_ENUM(ref Packets.PacketClass Packet) { Console.WriteLine("[{0}][World] Received Character List.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss")); var NumChars = Packet.GetInt8(); if (NumChars > 0) { for (byte i = 1, loopTo = NumChars; i <= loopTo; i++) { var GUID = Packet.GetUInt64(); var Name = Packet.GetString(); var Race = Packet.GetInt8(); var Classe = Packet.GetInt8(); var Gender = Packet.GetInt8(); var Skin = Packet.GetInt8(); var Face = Packet.GetInt8(); var HairStyle = Packet.GetInt8(); var HairColor = Packet.GetInt8(); var FacialHair = Packet.GetInt8(); var Level = Packet.GetInt8(); var Zone = Packet.GetInt32(); var Map = Packet.GetInt32(); var PosX = Packet.GetFloat(); var PosY = Packet.GetFloat(); var PosZ = Packet.GetFloat(); var GuildID = Packet.GetUInt32(); var PlayerState = Packet.GetUInt32(); var RestState = Packet.GetInt8(); var PetInfoID = Packet.GetUInt32(); var PetLevel = Packet.GetUInt32(); var PetFamilyID = Packet.GetUInt32(); Console.WriteLine("[{0}][World] Logging in with character [{1}].", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"), Name); Worldserver.CharacterGUID = GUID; Packets.PacketClass Response = new(OPCODES.CMSG_PLAYER_LOGIN); Response.AddUInt64(GUID); Worldserver.Send(Response); Response.Dispose(); break; // Skip the equipment Packet.Offset += 20 * 9; } } else { Console.WriteLine("[{0}][World] No characters found.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss")); } }
public static void On_SMSG_MESSAGECHAT(ref Packets.PacketClass Packet) { ChatMsg msgType = (ChatMsg)Packet.GetInt8(); LANGUAGES msgLanguage = (LANGUAGES)Packet.GetInt32(); switch (msgType) { case ChatMsg.CHAT_MSG_WHISPER: { var SenderGuid = (ulong)Packet.GetInt64(); var ByteCount = Packet.GetInt32(); var Message = Packet.GetString(); var ChatFlag = Packet.GetInt8(); Console.WriteLine("Answer: " + Message); break; } } }
public void On_CMSG_PETITION_QUERY(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 < 17) { return; } packet.GetInt16(); int PetitionGUID = packet.GetInt32(); ulong itemGuid = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_QUERY [pGUID={3} iGUID={2:X}]", client.IP, client.Port, itemGuid, PetitionGUID); DataTable MySQLQuery = new(); WorldServiceLocator._WorldServer.CharacterDatabase.Query("SELECT * FROM petitions WHERE petition_itemGuid = " + Conversions.ToString(itemGuid - WorldServiceLocator._Global_Constants.GUID_ITEM) + ";", ref MySQLQuery); if (MySQLQuery.Rows.Count != 0) { Packets.PacketClass response = new(Opcodes.SMSG_PETITION_QUERY_RESPONSE); response.AddInt32(MySQLQuery.Rows[0].As <int>("petition_id")); response.AddUInt64(MySQLQuery.Rows[0].As <ulong>("petition_owner")); response.AddString(MySQLQuery.Rows[0].As <string>("petition_name")); response.AddInt8(0); if (MySQLQuery.Rows[0].As <byte>("petition_type") == 9) { response.AddInt32(9); response.AddInt32(9); response.AddInt32(0); } else { response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type") - 1); response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type") - 1); response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type")); } response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt16(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); if (MySQLQuery.Rows[0].As <byte>("petition_type") == 9) { response.AddInt32(0); } else { response.AddInt32(1); } client.Send(ref response); response.Dispose(); } } }
public void On_CMSG_TUTORIAL_FLAG(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 >= 9) { packet.GetInt16(); var Flag = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_TUTORIAL_FLAG [flag={2}]", client.IP, client.Port, Flag); client.Character.TutorialFlags[Flag / 8] = (byte)(client.Character.TutorialFlags[Flag / 8] + (1 << (7 - (Flag % 8)))); client.Character.SaveCharacter(); } } }
public void On_CMSG_MAIL_MARK_AS_READ(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 >= 17) { packet.GetInt16(); var GameObjectGUID = packet.GetUInt64(); var MailID = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MAIL_MARK_AS_READ [MailID={2}]", client.IP, client.Port, MailID); var MailTime = (int)(WorldServiceLocator._Functions.GetTimestamp(DateAndTime.Now) + 259200L); WorldServiceLocator._WorldServer.CharacterDatabase.Update(string.Format("UPDATE characters_mail SET mail_read = 1, mail_time = {1} WHERE mail_id = {0} AND mail_read < 2;", MailID, MailTime)); } } }
public void On_CMSG_WORLD_TELEPORT(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_WORLD_TELEPORT", client.IP, client.Port); if (client.Access >= AccessLevel.GameMaster) { packet.GetInt16(); int Time = packet.GetInt32(); uint Map = packet.GetUInt32(); float X = packet.GetFloat(); float Y = packet.GetFloat(); float Z = packet.GetFloat(); float O = packet.GetFloat(); client.Character.Teleport(X, Y, Z, O, checked ((int)Map)); } }
public void On_CMSG_MAIL_DELETE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 17) { packet.GetInt16(); var GameObjectGUID = packet.GetUInt64(); var MailID = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MAIL_DELETE [MailID={2}]", client.IP, client.Port, MailID); WorldServiceLocator._WorldServer.CharacterDatabase.Update($"DELETE FROM characters_mail WHERE mail_id = {MailID};"); Packets.PacketClass response = new(Opcodes.SMSG_SEND_MAIL_RESULT); response.AddInt32(MailID); response.AddInt32(4); response.AddInt32(0); client.Send(ref response); response.Dispose(); } }
public void On_CMSG_OFFER_PETITION(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 21) { packet.GetInt16(); int PetitionType = packet.GetInt32(); ulong itemGuid = packet.GetUInt64(); ulong GUID = packet.GetUInt64(); if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(GUID) && WorldServiceLocator._WorldServer.CHARACTERs[GUID].IsHorde == client.Character.IsHorde) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_OFFER_PETITION [GUID={2:X} Petition={3}]", client.IP, client.Port, GUID, itemGuid); Dictionary <ulong, WS_PlayerData.CharacterObject> cHARACTERs; ulong key; WS_PlayerData.CharacterObject objCharacter = (cHARACTERs = WorldServiceLocator._WorldServer.CHARACTERs)[key = GUID]; SendPetitionSignatures(ref objCharacter, itemGuid); cHARACTERs[key] = objCharacter; } } }
public void On_CMSG_EMOTE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 9) { packet.GetInt16(); var emoteID = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_EMOTE [{2}]", client.IP, client.Port, emoteID); Packets.PacketClass response = new(Opcodes.SMSG_EMOTE); try { response.AddInt32(emoteID); response.AddUInt64(client.Character.GUID); client.Character.SendToNearPlayers(ref response); } finally { response.Dispose(); } } }
public void On_CMSG_MAIL_RETURN_TO_SENDER(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 >= 17) { packet.GetInt16(); var GameObjectGUID = packet.GetUInt64(); var MailID = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MAIL_RETURN_TO_SENDER [MailID={2}]", client.IP, client.Port, MailID); var MailTime = (int)(WorldServiceLocator._Functions.GetTimestamp(DateAndTime.Now) + 2592000L); WorldServiceLocator._WorldServer.CharacterDatabase.Update(string.Format("UPDATE characters_mail SET mail_time = {1}, mail_read = 0, mail_receiver = (mail_receiver + mail_sender), mail_sender = (mail_receiver - mail_sender), mail_receiver = (mail_receiver - mail_sender) WHERE mail_id = {0};", MailID, MailTime)); Packets.PacketClass response = new(Opcodes.SMSG_SEND_MAIL_RESULT); response.AddInt32(MailID); response.AddInt32(3); response.AddInt32(0); client.Send(ref response); response.Dispose(); } } }
public void On_CMSG_MAIL_TAKE_ITEM(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 < 17) { return; } packet.GetInt16(); var GameObjectGUID = packet.GetUInt64(); var MailID = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MAIL_TAKE_ITEM [MailID={2}]", client.IP, client.Port, MailID); try { DataTable MySQLQuery = new(); WorldServiceLocator._WorldServer.CharacterDatabase.Query($"SELECT mail_cod, mail_sender, item_guid FROM characters_mail WHERE mail_id = {MailID} AND mail_receiver = {client.Character.GUID};", ref MySQLQuery); if (MySQLQuery.Rows.Count == 0) { Packets.PacketClass response4 = new(Opcodes.SMSG_SEND_MAIL_RESULT); response4.AddInt32(MailID); response4.AddInt32(2); response4.AddInt32(6); client.Send(ref response4); response4.Dispose(); return; } if (!Operators.ConditionalCompareObjectNotEqual(MySQLQuery.Rows[0]["mail_cod"], 0, TextCompare: false)) { goto IL_02b9; } if (Operators.ConditionalCompareObjectLess(client.Character.Copper, MySQLQuery.Rows[0]["mail_cod"], TextCompare: false)) { Packets.PacketClass noMoney = new(Opcodes.SMSG_SEND_MAIL_RESULT); noMoney.AddInt32(MailID); noMoney.AddInt32(0); noMoney.AddInt32(3); client.Send(ref noMoney); noMoney.Dispose(); return; } ref var copper = ref client.Character.Copper; copper = Conversions.ToUInteger(Operators.SubtractObject(copper, MySQLQuery.Rows[0]["mail_cod"])); WorldServiceLocator._WorldServer.CharacterDatabase.Update($"UPDATE characters_mail SET mail_cod = 0 WHERE mail_id = {MailID};"); var MailTime = (int)(WorldServiceLocator._Functions.GetTimestamp(DateAndTime.Now) + 2592000L); WorldServiceLocator._WorldServer.CharacterDatabase.Update(string.Format("INSERT INTO characters_mail (mail_sender, mail_receiver, mail_subject, mail_body, mail_item_guid, mail_money, mail_COD, mail_time, mail_read, mail_type) VALUES \r\n ({0},{1},'{2}','{3}',{4},{5},{6},{7},{8},{9});", client.Character.GUID, MySQLQuery.Rows[0]["mail_sender"], "", "", 0, MySQLQuery.Rows[0]["mail_cod"], 0, MailTime, MailReadInfo.COD, 0)); IL_02b9: if (Operators.ConditionalCompareObjectEqual(MySQLQuery.Rows[0]["item_guid"], 0, TextCompare: false)) { Packets.PacketClass response3 = new(Opcodes.SMSG_SEND_MAIL_RESULT); response3.AddInt32(MailID); response3.AddInt32(2); response3.AddInt32(6); client.Send(ref response3); response3.Dispose(); return; } var tmpItem = WorldServiceLocator._WS_Items.LoadItemByGUID(MySQLQuery.Rows[0].As <ulong>("item_guid")); tmpItem.OwnerGUID = client.Character.GUID; tmpItem.Save(); if (client.Character.ItemADD(ref tmpItem)) { WorldServiceLocator._WorldServer.CharacterDatabase.Update($"UPDATE characters_mail SET item_guid = 0 WHERE mail_id = {MailID};"); WorldServiceLocator._WorldServer.CharacterDatabase.Update($"DELETE FROM mail_items WHERE mail_id = {MailID};"); Packets.PacketClass response2 = new(Opcodes.SMSG_SEND_MAIL_RESULT); response2.AddInt32(MailID); response2.AddInt32(2); response2.AddInt32(0); client.Send(ref response2); response2.Dispose(); } else { tmpItem.Dispose(); Packets.PacketClass response = new(Opcodes.SMSG_SEND_MAIL_RESULT); response.AddInt32(MailID); response.AddInt32(2); response.AddInt32(1); client.Send(ref response); response.Dispose(); } client.Character.Save(); }
public void On_CMSG_MESSAGECHAT(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MESSAGECHAT", client.IP, client.Port); if (checked (packet.Data.Length - 1) < 14 && client.Character != null) { return; } packet.GetInt16(); ChatMsg msgType = (ChatMsg)packet.GetInt32(); LANGUAGES msgLanguage = (LANGUAGES)packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_MESSAGECHAT [{2}:{3}]", client.IP, client.Port, msgType, msgLanguage); if (client.Character.Spell_Language != (LANGUAGES)(-1)) { msgLanguage = client.Character.Spell_Language; } switch (msgType) { case ChatMsg.CHAT_MSG_SAY: case ChatMsg.CHAT_MSG_YELL: case ChatMsg.CHAT_MSG_WHISPER: case ChatMsg.CHAT_MSG_EMOTE: { string Message3 = packet.GetString(); if (Message3.StartsWith(WorldServiceLocator._ConfigurationProvider.GetConfiguration().CommandCharacter) && client.Character.Access > AccessLevel.Player) { Message3 = Message3.Remove(0, 1); Packets.PacketClass toCommand = WorldServiceLocator._Functions.BuildChatMessage(2147483647uL, Message3, ChatMsg.CHAT_MSG_SYSTEM, LANGUAGES.LANG_GLOBAL); try { client.Send(ref toCommand); } finally { toCommand.Dispose(); } WorldServiceLocator._WS_Commands.OnCommand(ref client, Message3); } else { client.Character.SendChatMessage(ref client.Character, Message3, msgType, (int)msgLanguage, "", SendToMe: true); } break; } case ChatMsg.CHAT_MSG_AFK: { string Message = packet.GetString(); if ((Operators.CompareString(Message, "", TextCompare: false) == 0 || !client.Character.AFK) && !client.Character.IsInCombat) { client.Character.AFK = !client.Character.AFK; if (client.Character.AFK && client.Character.DND) { client.Character.DND = false; } client.Character.SetUpdateFlag(190, (int)client.Character.cPlayerFlags); client.Character.SendCharacterUpdate(); } break; } case ChatMsg.CHAT_MSG_DND: { string Message2 = packet.GetString(); if (Operators.CompareString(Message2, "", TextCompare: false) == 0 || !client.Character.DND) { client.Character.DND = !client.Character.DND; if (client.Character.DND && client.Character.AFK) { client.Character.AFK = false; } client.Character.SetUpdateFlag(190, (int)client.Character.cPlayerFlags); client.Character.SendCharacterUpdate(); } break; } case ChatMsg.CHAT_MSG_PARTY: case ChatMsg.CHAT_MSG_RAID: case ChatMsg.CHAT_MSG_CHANNEL: case ChatMsg.CHAT_MSG_RAID_LEADER: case ChatMsg.CHAT_MSG_RAID_WARNING: WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "This chat message type should not be here!"); break; default: WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "[{0}:{1}] Unknown chat message [msgType={2}, msgLanguage={3}]", client.IP, client.Port, msgType, msgLanguage); WorldServiceLocator._Packets.DumpPacket(packet.Data, client); break; } }
public void On_CMSG_PETITION_BUY(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 < 26) { return; } packet.GetInt16(); ulong GUID = packet.GetUInt64(); packet.GetInt64(); packet.GetInt32(); string Name = packet.GetString(); if (packet.Data.Length - 1 < 26 + Name.Length + 40 + 2 + 1 + 4 + 4) { return; } packet.GetInt64(); packet.GetInt64(); packet.GetInt64(); packet.GetInt64(); packet.GetInt64(); packet.GetInt16(); packet.GetInt8(); int Index = packet.GetInt32(); packet.GetInt32(); if (!WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(GUID) || (WorldServiceLocator._WorldServer.WORLD_CREATUREs[GUID].CreatureInfo.cNpcFlags & 0x200) == 0) { return; } WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_BUY [GuildName={2}]", client.IP, client.Port, Name); if ((ulong)client.Character.GuildID != 0) { return; } int CharterID = WorldServiceLocator._Global_Constants.PETITION_GUILD; int CharterPrice = WorldServiceLocator._Global_Constants.PETITION_GUILD_PRICE; DataTable q = new(); WorldServiceLocator._WorldServer.CharacterDatabase.Query($"SELECT guild_id FROM guilds WHERE guild_name = '{Name}'", ref q); if (q.Rows.Count > 0) { SendGuildResult(ref client, GuildCommand.GUILD_CREATE_S, GuildError.GUILD_NAME_EXISTS, Name); } q.Clear(); if (!WorldServiceLocator._Functions.ValidateGuildName(Name)) { SendGuildResult(ref client, GuildCommand.GUILD_CREATE_S, GuildError.GUILD_NAME_INVALID, Name); } if (!WorldServiceLocator._WorldServer.ITEMDatabase.ContainsKey(CharterID)) { Packets.PacketClass response2 = new(Opcodes.SMSG_BUY_FAILED); response2.AddUInt64(GUID); response2.AddInt32(CharterID); response2.AddInt8(0); client.Send(ref response2); response2.Dispose(); return; } if (client.Character.Copper < CharterPrice) { Packets.PacketClass response = new(Opcodes.SMSG_BUY_FAILED); response.AddUInt64(GUID); response.AddInt32(CharterID); response.AddInt8(2); client.Send(ref response); response.Dispose(); return; } ref uint copper = ref client.Character.Copper; copper = (uint)(copper - CharterPrice); client.Character.SetUpdateFlag(1176, client.Character.Copper); client.Character.SendCharacterUpdate(toNear: false); ItemObject tmpItem = new(CharterID, client.Character.GUID) { StackCount = 1 }; tmpItem.AddEnchantment((int)(tmpItem.GUID - WorldServiceLocator._Global_Constants.GUID_ITEM), 0); if (client.Character.ItemADD(ref tmpItem)) { WorldServiceLocator._WorldServer.CharacterDatabase.Update(string.Format("INSERT INTO petitions (petition_id, petition_itemGuid, petition_owner, petition_name, petition_type, petition_signedMembers) VALUES ({0}, {0}, {1}, '{2}', {3}, 0);", tmpItem.GUID - WorldServiceLocator._Global_Constants.GUID_ITEM, client.Character.GUID - WorldServiceLocator._Global_Constants.GUID_PLAYER, Name, 9)); } else { tmpItem.Delete(); } } }
public void On_CMSG_ACTIVATETAXI(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) < 21) { return; } packet.GetInt16(); var guid = packet.GetUInt64(); var srcNode = packet.GetInt32(); var dstNode = packet.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_ACTIVATETAXI [taxiGUID={2:X} srcNode={3} dstNode={4}]", client.IP, client.Port, guid, srcNode, dstNode); if (!WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(guid) || (WorldServiceLocator._WorldServer.WORLD_CREATUREs[guid].CreatureInfo.cNpcFlags & 8) == 0) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXINOVENDORNEARBY); return; } if (client.Character.LogoutTimer != null) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXIPLAYERBUSY); return; } if (((uint)client.Character.cUnitFlags & 4u) != 0) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXINOTSTANDING); return; } if ((int)client.Character.ShapeshiftForm > 0 && client.Character.ShapeshiftForm != ShapeshiftForm.FORM_BERSERKERSTANCE && client.Character.ShapeshiftForm != ShapeshiftForm.FORM_BATTLESTANCE && client.Character.ShapeshiftForm != ShapeshiftForm.FORM_DEFENSIVESTANCE && client.Character.ShapeshiftForm != ShapeshiftForm.FORM_SHADOW) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXIPLAYERSHAPESHIFTED); return; } if (client.Character.Mount != 0) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXIPLAYERALREADYMOUNTED); return; } if (!WorldServiceLocator._WS_DBCDatabase.TaxiNodes.ContainsKey(srcNode) || !WorldServiceLocator._WS_DBCDatabase.TaxiNodes.ContainsKey(dstNode)) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXINOSUCHPATH); return; } int mount; if (client.Character.IsHorde) { if (!WorldServiceLocator._WorldServer.CREATURESDatabase.ContainsKey(WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].HordeMount)) { mount = new CreatureInfo(WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].HordeMount).GetFirstModel; } else { mount = WorldServiceLocator._WorldServer.CREATURESDatabase[WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].HordeMount].ModelA1; } } else if (!WorldServiceLocator._WorldServer.CREATURESDatabase.ContainsKey(WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].AllianceMount)) { mount = new CreatureInfo(WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].AllianceMount).GetFirstModel; } else { mount = WorldServiceLocator._WorldServer.CREATURESDatabase[WorldServiceLocator._WS_DBCDatabase.TaxiNodes[srcNode].AllianceMount].ModelA2; } if (mount == 0) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXIUNSPECIFIEDSERVERERROR); return; } checked { int totalCost = default; var discountMod = client.Character.GetDiscountMod(WorldServiceLocator._WorldServer.WORLD_CREATUREs[guid].Faction); foreach (var taxiPath in WorldServiceLocator._WS_DBCDatabase.TaxiPaths) { if (taxiPath.Value.TFrom == srcNode && taxiPath.Value.TTo == dstNode) { totalCost = (int)Math.Round(totalCost + (taxiPath.Value.Price * discountMod)); break; } } if (client.Character.Copper < totalCost) { SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXINOTENOUGHMONEY); return; } ref var copper = ref client.Character.Copper; copper = (uint)(copper - totalCost); client.Character.TaxiNodes.Clear(); client.Character.TaxiNodes.Enqueue(srcNode); client.Character.TaxiNodes.Enqueue(dstNode); SendActivateTaxiReply(ref client, ActivateTaxiReplies.ERR_TAXIOK); TaxiTake(client.Character, mount); TaxiMove(client.Character, discountMod); }
public void HandleResponse(ref Packets.PacketClass p) { foreach (CheatCheck Check in Checks) { switch (Check.Type) { case CheckTypes.MEM_CHECK: { byte result = p.GetInt8(); byte[] bytes = p.GetByteArray(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Bytes=0x{2}", Check.Type, result, BitConverter.ToString(bytes).Replace("-", "")); break; } case CheckTypes.PAGE_CHECK_A_B: { byte result2 = p.GetInt8(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result2); break; } case CheckTypes.MPQ_CHECK: { byte result3 = p.GetInt8(); byte[] hash = p.GetByteArray(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Hash=0x{2}", Check.Type, result3, BitConverter.ToString(hash).Replace("-", "")); break; } case CheckTypes.LUA_STR_CHECK: { byte unk = p.GetInt8(); string data = p.GetString2(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Data={2}", Check.Type, unk, data); break; } case CheckTypes.DRIVER_CHECK: { byte result4 = p.GetInt8(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result4); break; } case CheckTypes.TIMING_CHECK: { byte result5 = p.GetInt8(); int time = p.GetInt32(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Time={2}", Check.Type, result5, time); break; } case CheckTypes.PROC_CHECK: { byte result6 = p.GetInt8(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result6); break; } case CheckTypes.MODULE_CHECK: WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}]", Check.Type); break; } } Reset(); }
public void On_CMSG_TEXT_EMOTE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 < 21 && client.Character != null) { return; } packet.GetInt16(); var TextEmote = packet.GetInt32(); var Unk = packet.GetInt32(); var GUID = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_TEXT_EMOTE [TextEmote={2} Unk={3}]", client.IP, client.Port, TextEmote, Unk); if (WorldServiceLocator._CommonGlobalFunctions.GuidIsCreature(GUID) && WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(GUID)) { ref var character = ref client.Character; ulong key; Dictionary <ulong, WS_Creatures.CreatureObject> WORLD_CREATUREs; var creature = (WORLD_CREATUREs = WorldServiceLocator._WorldServer.WORLD_CREATUREs)[key = GUID]; WorldServiceLocator._WorldServer.ALLQUESTS.OnQuestDoEmote(ref character, ref creature, TextEmote); WORLD_CREATUREs[key] = creature; if (WorldServiceLocator._WorldServer.WORLD_CREATUREs[GUID].aiScript is not null and WS_Creatures_AI.GuardAI) { ((WS_Creatures_AI.GuardAI)WorldServiceLocator._WorldServer.WORLD_CREATUREs[GUID].aiScript).OnEmote(TextEmote); } } if (WorldServiceLocator._WS_DBCDatabase.EmotesText.ContainsKey(TextEmote)) { switch (WorldServiceLocator._WS_DBCDatabase.EmotesState[WorldServiceLocator._WS_DBCDatabase.EmotesText[TextEmote]]) { case 0: client.Character.DoEmote(WorldServiceLocator._WS_DBCDatabase.EmotesText[TextEmote]); break; case 2: client.Character.cEmoteState = WorldServiceLocator._WS_DBCDatabase.EmotesText[TextEmote]; client.Character.SetUpdateFlag(148, client.Character.cEmoteState); client.Character.SendCharacterUpdate(); break; default: break; } } var secondName = ""; if (decimal.Compare(new decimal(GUID), 0m) > 0) { if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(GUID)) { secondName = WorldServiceLocator._WorldServer.CHARACTERs[GUID].Name; } else if (WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(GUID)) { secondName = WorldServiceLocator._WorldServer.WORLD_CREATUREs[GUID].Name; } } Packets.PacketClass SMSG_TEXT_EMOTE = new(Opcodes.SMSG_TEXT_EMOTE); try { SMSG_TEXT_EMOTE.AddUInt64(client.Character.GUID); SMSG_TEXT_EMOTE.AddInt32(TextEmote); SMSG_TEXT_EMOTE.AddInt32(255); SMSG_TEXT_EMOTE.AddInt32(secondName.Length + 1); SMSG_TEXT_EMOTE.AddString(secondName); client.Character.SendToNearPlayers(ref SMSG_TEXT_EMOTE); } finally { SMSG_TEXT_EMOTE.Dispose(); } }