static bool GossipSelectOption(LoginClient client, CMSG msgID, BinReader data) { ulong vendorGUID = data.ReadUInt64(); uint msgid = data.ReadUInt32(); BinWriter pkg = LoginClient.NewPacket(SMSG.GOSSIP_MESSAGE); string message = "Welcome to World of WoWCraft! Please report bugs on our Home-Page: http://www.worldofwowcraft.com"; string message2 = "Visit our Page for the list of known bugs: http://www.worldofwowcraft.com"; pkg.Write(vendorGUID); // Vendor GUID pkg.Write(msgid); // Message ID pkg.Write((int)1); // Counter pkg.Write((int)1); // Counter Number pkg.Write((int)7); // Message Type if (msgid == 1) { pkg.Write(message); // Message Text 1 } if (msgid == 2) { pkg.Write(message2); // Message Text 2 } pkg.Write(0); // ? client.Send(pkg); return(true); }
static bool GossipHello(LoginClient client, CMSG msgID, BinReader data) { ulong vendorGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.GOSSIP_MESSAGE); string message = "Welcome to World of WoWCraft!"; string message2 = "Known Bugs: Read this!"; pkg.Write(vendorGUID); // Vendor GUID pkg.Write((int)1); // Message ID pkg.Write((int)2); // Counter pkg.Write((int)1); // Counter Number pkg.Write((int)7); // Message Type pkg.Write(message); // Message Text pkg.Write((int)2); // Counter Number pkg.Write((int)2); // Message Type pkg.Write(message2); // Message Text pkg.Write(0); // ? client.Send(pkg); return(true); }
static bool PetitionList(LoginClient client, CMSG msgID, BinReader data) { ulong vendorGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.PETITION_SHOWLIST); string msg = "This is a test msg for petition"; pkg.Write(vendorGUID); pkg.Write((ulong)client.Character.ObjectId); pkg.Write("TestString"); pkg.Write((byte)1); pkg.Write((byte)1); pkg.Write((byte)1); pkg.Write((byte)1); pkg.Write((int)1); pkg.Write((int)1); pkg.Write((string)"TestGuild"); pkg.Write((int)1); pkg.Write((int)1); pkg.Write((int)1); pkg.Write(msg); client.Send(pkg); Chat.System(client, "Petition Query Working :" + vendorGUID); return(true); }
static bool HandleCharDelete(LoginClient client, CMSG msgID, BinReader data) { uint id = data.ReadUInt32(); if (client.Account.Characters == null) { client.Close(client.Account.Name + " tried to delete a character when there was none on the account."); return(true); } foreach (DBCharacter c in client.Account.Characters) { if (id == c.ObjectId) { try { DataServer.Database.DeleteObject(c); } catch (Exception e) { Console.WriteLine("Deleting character " + c.ObjectId + " failed! " + e.Message); } client.Account.Characters = null; DataServer.Database.FillObjectRelations(client.Account); BinWriter w = LoginClient.NewPacket(SMSG.CHAR_DELETE); w.Write((byte)0x28); client.Send(w); return(true); } } client.Close(client.Account.Name + " tried to delete a character that didn't belong to him."); return(true); }
static bool Quest(LoginClient client, CMSG msgID, BinReader data) { BinWriter pkg = LoginClient.NewPacket(SMSG.QUESTGIVER_QUEST_LIST); ulong quester = data.ReadUInt64(); string greets = ("Hy, " + client.Character.Name + ", the " + client.Character.Class + "!"); int lenght = DataServer.Database.GetObjectCount(typeof(DBQuest)); pkg.Write(quester); pkg.Write(greets); pkg.Write((int)5); // Quester Emote Delay (5 is default) pkg.Write((int)3); // Quester Emote pkg.Write((byte)lenght); // Quest Counter int i = 1; while (i <= lenght) { DBQuest quest = null; quest = (DBQuest)DataServer.Database.FindObjectByKey(typeof(DBQuest), i); pkg.Write(i); // Quest ID pkg.Write(quest.RequiredLevel); // Quest Level pkg.Write((int)5); // ?? pkg.Write(quest.Title); // Quest Description i++; } client.Send(pkg); return(true); }
static bool OnGuildQuery(LoginClient client, CMSG msgID, BinReader data) { uint guildId = data.ReadUInt32(); BinWriter pkg = LoginClient.NewPacket(SMSG.GUILD_QUERY_RESPONSE); Chat.System(client, "Guild Query"); DBGuild guild = (DBGuild)DataServer.Database.FindObjectByKey(typeof(DBGuild), guildId); if (guild == null) { return(true); } else { pkg.Write(guild.ObjectId); pkg.Write(guild.Name); for (uint i = 0; i < 10; i++) { pkg.Write(guild.getRankName(i)); } pkg.Write((uint)guild.Icon); pkg.Write((uint)guild.IconColor); pkg.Write((uint)guild.Border); pkg.Write((uint)guild.BorderColor); pkg.Write((uint)guild.Color); } client.Send(pkg); return(true); } //OnGuildQuery
static bool OnGuildInvite(LoginClient client, CMSG msgID, BinReader data) { DBGuild guild = client.Character.Guild; if (guild == null || client.Character.GuildID == 0) { SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD); return(true); } if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.INVITE) != (uint)GUILDFLAGS.INVITE) { SendResult(client, 1, " ", (int)GUILDRESULT.PERMISSIONS); ; return(true); } string name = data.ReadString(); DBCharacter character = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name.ToLower()); if (character == null) { SendResult(client, 1, name, (int)GUILDRESULT.NOT_FOUND); } else { LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(character.ObjectId); if (targetClient != null) { // targetClient.Character.LastGuildID=client.Character.GuildID; if (targetClient.Character.LastGuildInviterID != 0) { SendResult(client, 1, name, (int)GUILDRESULT.ALREADY_INVITED_TO_GUILD_S); return(true); } if (targetClient.Character.GuildID != 0) { SendResult(client, 1, targetClient.Character.Name, (int)GUILDRESULT.ALREADY_IN_GUILD_S); return(true); } targetClient.Character.LastGuildInviterID = client.Character.ObjectId; BinWriter gpkg = LoginClient.NewPacket(SMSG.GUILD_INVITE); gpkg.Write(client.Character.Name); gpkg.Write(guild.Name); targetClient.Send(gpkg); SendResult(client, 1, name, (int)GUILDRESULT.SUCCESS); } else { Chat.System(client, name + " is not currently online"); } } return(true); } //OnGuildInvite
static bool OnTabardVendor(LoginClient client, CMSG msgID, BinReader data) { BinWriter TestPacket = LoginClient.NewPacket(SMSG.TABARDVENDOR_ACTIVATE); TestPacket.Write(client.Character.Selected); client.Send(TestPacket); return(true); } //OnTabardVendor
static bool HandlePing(LoginClient client, CMSG msgID, BinReader data) { BinWriter w = LoginClient.NewPacket(SMSG.PONG); w.Write(data.ReadUInt32()); client.Send(w); return(true); }
} //AddMember public static void SendResult(LoginClient client, int operation, string sparam, int result) { BinWriter w = LoginClient.NewPacket(SMSG.GUILD_COMMAND_RESULT); w.Write(operation); w.Write(sparam); w.Write(result); client.Send(w); return; } //SendResult
static bool Tabard(LoginClient client, CMSG msgID, BinReader data) { ulong vendorGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.TABARDVENDOR_ACTIVATE); pkg.Write(vendorGUID); client.Send(pkg); return(true); }
static bool Hello(LoginClient client, CMSG msgID, BinReader data) { ulong quester = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.QUESTGIVER_STATUS); pkg.Write(quester); pkg.Write((int)3); client.Send(pkg); return(true); }
static bool BankActivate(LoginClient client, CMSG msgID, BinReader data) { ulong vendorGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.SHOW_BANK); pkg.Write(vendorGUID); client.Send(pkg); Chat.System(client, "Bank Working on : " + vendorGUID); return(true); }
static bool HandleAuthSession(LoginClient client, CMSG msgID, BinReader data) { data.BaseStream.Position += 8; string name = data.ReadString().ToLower(); if (name.Length < 3) { client.Close("Too short account name"); return(true); } if (client.Account != null) { client.Close(client.Account.Name + " tried to log in again as " + name); return(true); } BinWriter w = LoginClient.NewPacket(SMSG.AUTH_RESPONSE); if (LoginClient.IsAccountLoggedIn(name)) { w.Write((byte)0x19); client.Send(w); client.Close("Client tried to log in with an already logged in account."); return(true); } DBAccount account = null; try { account = (DBAccount)DataServer.Database.FindObjectByKey(typeof(DBAccount), name); } catch (WoWDaemon.Database.DatabaseException e) { client.Close(e.Message); return(true); } if (account == null) { account = new DBAccount(); account.Name = name; DataServer.Database.AddNewObject(account); Console.WriteLine("Created account: " + name); } client.Account = account; Console.WriteLine("Account " + name + " logged in from " + client.RemoteEndPoint); w.Write((byte)0x0C); client.Send(w); return(true); }
static bool OnGuildDecline(LoginClient client, CMSG msgID, BinReader data) { LoginClient inviter = LoginServer.GetLoginClientByCharacterID(client.Character.LastGuildInviterID); client.Character.LastGuildInviterID = 0; BinWriter pkg = LoginClient.NewPacket(SMSG.GUILD_DECLINE); pkg.Write(client.Character.Name); inviter.Send(pkg); // Chat.GuildSay(0, inviter, client.Character.Name+" has declined your offer to join "+client.Character.GuildName, CHATMESSAGETYPE.GUILD); return(true); } //OnGuildDecline
static bool TaxiQuery(LoginClient client, CMSG msgID, BinReader data) { ulong taxiGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.TAXINODE_STATUS); pkg.Write(taxiGUID); pkg.Write((byte)2); // Taxi Status client.Send(pkg); Chat.System(client, "Taxi NPC status query working"); return(true); }
static bool OnGuildInfo(LoginClient client, CMSG msgID, BinReader data) { DBGuild tguild = client.Character.Guild; tguild.GuildInfo = data.ReadString(); DataServer.Database.SaveObject(tguild); BinWriter gpkg = LoginClient.NewPacket(SMSG.GUILD_INFO); gpkg.Write(tguild.ObjectId); gpkg.Write(tguild.GuildInfo); // gpkg.Write(rankname); client.Send(gpkg); return(true); } //OnGuildRoster
static bool TaxiQueryNodes(LoginClient client, CMSG msgID, BinReader data) { ulong taxiGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.SHOWTAXINODES); pkg.Write((int)1); // Show Map pkg.Write(taxiGUID); pkg.Write((int)11); // Node Location* client.Send(pkg); Chat.System(client, "Query Avaliable Nodes Working"); return(true); }
static bool GroupDecline(LoginClient client, CMSG msgID, BinReader data) { LoginClient inviter = LoginServer.GetLoginClientByCharacterID(client.Character.LastGroupInviterID); client.Character.LastGroupInviterID = 0; if (inviter == null) { return(true); } BinWriter pkg = LoginClient.NewPacket(SMSG.GROUP_DECLINE); pkg.Write(client.Character.Name); inviter.Send(pkg); return(true); }
static bool TaxiActivate(LoginClient client, CMSG msgID, BinReader data) { ulong taxiGUID = data.ReadUInt64(); uint startnode = data.ReadUInt32(); uint destnode = data.ReadUInt32(); BinWriter pkg = LoginClient.NewPacket(SMSG.ACTIVATETAXIREPLY); pkg.Write((int)10); // Code* client.Send(pkg); Chat.System(client, "Activate Taxi Working..."); return(true); }
static bool CancelTrade(LoginClient client, CMSG msgID, BinReader data) { uint inviteeGUID = client.Character.LastTradeID; LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID); client.Character.LastTradeID = 0; invitee.Character.LastTradeID = 0; BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS); pkg.Write((int)3); invitee.Send(pkg); invitee.Character.TradeCompleted = false; return(true); }
static bool AcceptTrade(LoginClient client, CMSG msgID, BinReader data) { uint flag = data.ReadUInt32(); uint inviteeGUID = client.Character.LastTradeID; LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID); BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS); if (invitee.Character.TradeCompleted == true) { ScriptPacket Money = new ScriptPacket(SCRMSG.TRADEMONEY); Money.Write(client.Character.ObjectId); Money.Write(invitee.Character.ObjectId); Money.Write(client.Character.TradeMoney); Money.Write(invitee.Character.TradeMoney); client.WorldConnection.Send(Money); pkg.Write((int)8); invitee.Send(pkg); client.Send(pkg); client.Character.LastTradeID = 0; client.Character.TradeMoney = 0; client.Character.TradeCompleted = false; invitee.Character.LastTradeID = 0; invitee.Character.TradeMoney = 0; invitee.Character.TradeCompleted = false; } else { pkg.Write((int)4); client.Character.TradeCompleted = true; invitee.Send(pkg); } return(true); }
static bool QuestDetails(LoginClient client, CMSG msgID, BinReader data) { ulong quester = data.ReadUInt64(); int questid = data.ReadInt32(); DBQuest quest = null; quest = (DBQuest)DataServer.Database.FindObjectByKey(typeof(DBQuest), questid); BinWriter q1 = LoginClient.NewPacket(SMSG.QUESTGIVER_QUEST_DETAILS); q1.Write(quester); // Quester GUID q1.Write(questid); // Quest ID q1.Write(quest.Title); // Quest Title q1.Write(quest.Description); // Quest Details q1.Write(quest.Objectives); // Quest Objectives q1.Write((int)0); //? q1.Write((int)1); // Choice Reward Item Counter - TODO: ADD ARRAY ON DB q1.Write(quest.ChooseRewardID); // Choice Reward Item Template_ID q1.Write(quest.ChooseQuantity); // Choice Reward Item Quantity q1.Write(quest.ChooseDisplayID); // Choice Reward Item Display_ID q1.Write((int)1); // Always Reward Item Counter - TODO: ADD ARRAY ON DB q1.Write(quest.AlwaysRewardID); // Always Reward Template_ID q1.Write(quest.AlwaysRewardQuantity); // Always Reward Item Quantity q1.Write(quest.AlwaysDisplayID); // Always Reward Item Display_ID q1.Write(quest.MoneyReward); // Money Reward q1.Write((int)0); // ? q1.Write((int)0); // ? client.Send(q1); Chat.System(client, "Quest Details for quest id " + questid + " from quester " + quester); return(true); }
static bool GossipTextQuery(LoginClient client, CMSG msgID, BinReader data) { uint msgid = data.ReadUInt32(); ulong vendorGUID = data.ReadUInt64(); BinWriter pkg = LoginClient.NewPacket(SMSG.NPC_TEXT_UPDATE); string topic = "Out team welcome you!"; string message = "Please, visit us in irc.gotwow.net #wowcraft"; pkg.Write(msgid); // Message ID pkg.Write(1); // ? pkg.Write(topic); // Topic Message pkg.Write(message); // Message 1 pkg.Write((int)0); // Lenguage ID client.Send(pkg); return(true); }
static bool VendorLisr(LoginClient client, CMSG msgID, BinReader data) { BinWriter pkg2 = LoginClient.NewPacket(SMSG.LIST_INVENTORY); ulong vendorGUID = data.ReadUInt64(); DataObject[] obj = DataServer.Database.SelectObjects(typeof(DBVendor), "GUID = '" + vendorGUID + "'"); if (obj.Length == 0) { Chat.System(client, "Vendor not found"); return(true); } DBVendor tvendor = (DBVendor)obj[0]; pkg2.Write(tvendor.GUID); // Vendor GUID (OK) if (tvendor.VendorItems == null) { pkg2.Write((int)0); client.Send(pkg2); return(true); } int Lenght = tvendor.VendorItems.Length; int i = 1; pkg2.Write((byte)Lenght); // item counter (OK) foreach (DBVendorItem item in tvendor.VendorItems) { pkg2.Write((int)i); // item counter number (OK) pkg2.Write((int)item.TemplateID); // item template (OK) pkg2.Write((int)item.Template.DisplayID); // item icon display_id (OK) pkg2.Write((int)item.CurrentQty); // Quantity (OK) pkg2.Write((int)item.Price); // Price (OK) pkg2.Write(0); // Dunno pkg2.Write((int)item.Template.ReqLevel); // Item Level (OK) i++; } client.Send(pkg2); return(true); }
static bool OnGuildTabard(LoginClient client, CMSG msgID, BinReader data) { DBGuild tguild = client.Character.Guild; ulong vGUID = data.ReadUInt64(); tguild.Icon = data.ReadUInt32(); tguild.IconColor = data.ReadUInt32(); tguild.Border = data.ReadUInt32(); tguild.BorderColor = data.ReadUInt32(); tguild.Color = data.ReadUInt32(); DataServer.Database.SaveObject(tguild); SendToWorld(client, client.Character); DBItem newItem = new DBItem(); newItem.OwnerID = client.Character.ObjectId; newItem.OwnerSlot = 18; newItem.TemplateID = 343; DataServer.Database.AddNewObject(newItem); DataServer.Database.FillObjectRelations(newItem); client.WorldConnection.Send(newItem); ScriptPacket Item = new ScriptPacket(SCRMSG.BUYITEM); Item.Write(client.Character.ObjectId); Item.Write(newItem.ObjectId); Item.Write((int)100000); client.WorldConnection.Send(Item); BinWriter tpkg = LoginClient.NewPacket(SMSG.TABARDVENDOR_ACTIVATE); tpkg.Write(client.Character.Selected); client.Send(tpkg); string gmsg = "Congratulations on your purchase, You may now give them to your members using !givetabard <member>"; Chat.GuildSay(0, client, gmsg, CHATMESSAGETYPE.GUILD); return(true); } //OnGuildTabard
public static void SendRoster(LoginClient client, DBGuild tGuild) { BinWriter pkg = LoginClient.NewPacket(SMSG.GUILD_ROSTER); pkg.Write((int)tGuild.Members.Length); pkg.Write((string)tGuild.MOTD); //Guild.MOTD); pkg.Write((uint)tGuild.MaxRank + 1); //# of ranks for (uint i = 0; i < tGuild.MaxRank + 1; i++) { pkg.Write((uint)tGuild.getRankFlags(i)); //Rank Flags for each rank } foreach (DBGuildMembers member in tGuild.Members) { DataServer.Database.FillObjectRelations(member); pkg.Write((ulong)member.MemberID); //((LoginClient)e.Current).Character.Race); bool online = false; if (LoginServer.GetLoginClientByCharacterID(member.MemberID) != null) { online = true; } pkg.Write((bool)online); //Online? 0-no/1-yes pkg.Write((string)member.Character.Name); //Name pkg.Write((int)member.Character.GuildRank); //Rank pkg.Write((byte)member.Character.Level); //Level pkg.Write((byte)member.Character.Class); //Class((LoginClient)e.Current).Character.Level); pkg.Write((uint)member.Character.Zone); //Zone if (online) { pkg.Write((byte)member.Character.GroupLook); // Group (0-No/1-Yes) Only if online } else { pkg.Write((uint)member.Character.GuildTimeStamp); // GuildTimeStamp } pkg.Write((string)(member.Note == null?" ":member.Note)); //Player Note pkg.Write((string)(member.Note == null?" ":member.OfficerNote)); //Officer's Note } client.Send(pkg); return; } //SendRoster
static bool GroupInvite(LoginClient client, CMSG msgID, BinReader data) { string inviteeName = data.ReadString(); string inviter = client.Character.Name; if (client.Character.Name == inviteeName) { Chat.System(client, "You cannot invite yourself to a group"); return(true); } DBCharacter invitee = null; invitee = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), inviteeName); if (invitee == null) { Chat.System(client, "Player not found"); return(true); } LoginClient invited = LoginServer.GetLoginClientByCharacterID(invitee.ObjectId); if (invited == null) { Chat.System(client, "Player is not online"); return(true); } if (invited.Character.LastGroupInviterID != 0) { Chat.System("That player has already been invited to a group"); return(true); } invited.Character.LastGroupInviterID = client.Character.ObjectId; BinWriter pkg = LoginClient.NewPacket(SMSG.GROUP_INVITE); pkg.Write(inviter); invited.Send(pkg); return(true); }
static bool TradeItem(LoginClient client, CMSG msgID, BinReader data) { byte tradeslot = data.ReadByte(); byte sourcebag = data.ReadByte(); byte sourceslot = data.ReadByte(); client.Character.TradeItemCount++; uint itemcount = client.Character.TradeItemCount; uint inviteeGUID = client.Character.LastTradeID; LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID); BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS_EXTENDED); pkg.Write((byte)1); // 0 for giving, 1 for recieving pkg.Write((int)1); // Message Count pkg.Write(client.Character.TradeMoney); // Money Amount pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write(tradeslot); // Trade Slot pkg.Write((int)1); // Item Template ID pkg.Write((int)1542); // Item Display ID pkg.Write((int)0); // Item Count pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? pkg.Write((int)0); // ? invitee.Send(pkg); return(true); }
static bool ListFriend(LoginClient client, CMSG msgID, BinReader data) { BinWriter flist = LoginClient.NewPacket(SMSG.FRIEND_LIST); if (client.Character.Friends == null) { flist.Write((byte)0); client.Send(flist); } else { byte tmpByte = (byte)client.Character.Friends.Length; flist.Write((char)tmpByte); LoginClient FriendOnline = null; foreach (DBFriendList Friend in client.Character.Friends) { FriendOnline = LoginServer.GetLoginClientByCharacterID(Friend.Friend_ID); if (FriendOnline == null) { flist.Write((ulong)Friend.Friend_ID); flist.Write((char)0x00); } else { flist.Write((ulong)Friend.Friend_ID); flist.Write((char)0x02); flist.Write((int)FriendOnline.Character.Zone); flist.Write((int)FriendOnline.Character.Level); flist.Write((int)FriendOnline.Character.Class); } FriendOnline = null; } client.Send(flist); } return(true); }