public void addFriend(long name) { Player friend = null; if (friends.Count >= 200) { player.getPackets().sendMessage("Your friends list is full."); return; } if (friends.Contains((long)name)) { player.getPackets().sendMessage(Misc.formatPlayerNameForDisplay(Misc.longToPlayerName(name)) + " is already on your friends list."); return; } friends.Add((long)name); foreach (Player p in Server.getPlayerList()) { if (p != null) { if (p.getLoginDetails().getLongName() == name) { friend = p; } } } if (friend != null) { if (privateStatus != STATUS.OFF) { friend.getFriends().registered(player); } Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername()); if (clan != null) { clan.getOwnerFriends().Add(name); if (clan.getUser(friend) != null) { if (clan.getUser(friend).getClanRights() == Clan.ClanRank.NO_RANK) { clan.getUser(friend).setClanRights(Clan.ClanRank.FRIEND); Server.getClanManager().updateClan(clan); } } } if (friend.getFriends().getPrivateStatus() == STATUS.OFF || (friend.getFriends().getPrivateStatus() == STATUS.FRIENDS && !friend.getFriends().isFriend(player))) { return; } player.getPackets().sendFriend(name, getWorld(name)); } }
private void handleAddIgnore(Player player, Packet packet) { long name = packet.readLong(); if (name > 0) { player.getFriends().addIgnore(name); } }
public Clan(Player p, string name, string owner) { this.name = name; this.owner = owner; this.own = p; this.users = new List<ClanUser>(100); this.ownerFriends = p.getFriends().getFriendsList(); this.usersWithRank = new Dictionary<string, ClanRank>(250); this.kickRights = ClanRank.OWNER; this.enterRights = ClanRank.NO_RANK; this.talkRights = ClanRank.NO_RANK; }
public void removeFriend(long name) { Player friend = null; foreach (Player p in Server.getPlayerList()) { if (p != null) { if (p.getLoginDetails().getLongName() == name) { friend = p; } } } if (friend == null) { return; } if (privateStatus == STATUS.FRIENDS) { friend.getFriends().unregistered(player); } Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername()); if (clan != null) { clan.getOwnerFriends().Remove(name); if (clan.getUser(friend) != null) { if (clan.getUser(friend).getClanRights() == Clan.ClanRank.FRIEND) { clan.getUser(friend).setClanRights(Clan.ClanRank.NO_RANK); Server.getClanManager().updateClan(clan); } } } friends.Remove((long)name); }
/** * Unregister a player. * @param p as Player */ public static void unregister(Player p) { if (p.getTrade() != null) { p.getTrade().decline(); p.setTrade(null); } minigames.getFightPits().removeWaitingPlayer(p); minigames.getFightPits().removePlayingPlayer(p); if (p.getTemporaryAttribute("cantDoAnything") != null && Location.inFightPits(p.getLocation())) { minigames.getFightPits().useOrb(p, 5); return; } if (Location.inFightPits(p.getLocation())) { Server.getMinigames().getFightPits().teleportToWaitingRoom(p, false); return; } if (p.getFightCave() != null) { if (!p.getFightCave().isGamePaused()) { p.getFightCave().teleFromCave(true); return; } else { p.setLocation(new Location(2439, 5169, 0)); } } if (!Combat.isXSecondsSinceCombat(p, p.getLastAttacked(), 10000) || p.isDead() || p.getTemporaryAttribute("unmovable") != null) { return; } if (p.getDuel() != null) { if (p.getDuel().getStatus() == 8) { if (p.getDuel().getWinner().Equals(p)) { p.getDuel().recieveWinnings(p); } } else { if (p.getDuel().getStatus() == 5 || p.getDuel().getStatus() == 6) { p.getDuel().finishDuel(true, true); } } } removeAllPlayersNPCs(p); foreach (Player p2 in players) { if (p == p2) continue; //Remove me from anyone who has Seen me.. or attempting to see me (new players). if (p2.getLocalEnvironment().getSeenPlayers().Contains(p) || p2.getLocalEnvironment().getNewPlayers().Contains(p)) p2.getLocalEnvironment().getRemovedPlayers().Add(p); } clanManager.leaveChannel(p); loginHandler.addSavePlayer(p); players.Remove(p); p.getFriends().unregistered(); Console.WriteLine("Unregistered " + p.getLoginDetails().getUsername() + " [online = " + players.Count + "]"); }
public bool savePlayer(Player p) { if (p == null) return false; try { string username = p.getLoginDetails().getUsername().ToLower(); /* Character saving code goes here */ XmlTextWriter writer = new XmlTextWriter(Misc.getServerPath() + @"\accounts\" + username + ".xml", null); writer.Formatting = Formatting.Indented; writer.WriteStartElement("Player"); writer.WriteStartElement("Login"); writer.WriteElementString("Password", p.getLoginDetails().getPassword()); writer.WriteElementString("Rights", p.getRights().ToString()); writer.WriteElementString("BankPin", p.getBank().getBankPin()); writer.WriteEndElement(); writer.WriteStartElement("Position"); writer.WriteElementString("X", p.getLocation().getX().ToString()); writer.WriteElementString("Y", p.getLocation().getY().ToString()); writer.WriteElementString("Z", p.getLocation().getZ().ToString()); writer.WriteEndElement(); writer.WriteStartElement("Settings"); writer.WriteElementString("RunEnergy", p.getRunEnergy().ToString()); writer.WriteStartElement("PrivacySettings"); writer.WriteElementString("Public", p.getFriends().getPrivacyOption(0).ToString()); writer.WriteElementString("Private", p.getFriends().getPrivacyOption(1).ToString()); writer.WriteElementString("Trade", p.getFriends().getPrivacyOption(2).ToString()); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteStartElement("Friends"); foreach (long friend in p.getFriends().getFriendsList()) writer.WriteElementString("Friend", friend.ToString()); writer.WriteEndElement(); writer.WriteStartElement("Ignores"); foreach (long ignore in p.getFriends().getIgnoresList()) writer.WriteElementString("Ignore", ignore.ToString()); writer.WriteEndElement(); writer.WriteStartElement("Stats"); foreach (Skills.SKILL skill in Enum.GetValues(typeof(Skills.SKILL))) { writer.WriteStartElement(skill.ToString()); //skill name. writer.WriteElementString("CurrentLevel", p.getSkills().getCurLevel(skill).ToString()); writer.WriteElementString("XP", p.getSkills().getXp(skill).ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); Item item; writer.WriteStartElement("EquipmentItems"); foreach (ItemData.EQUIP equip in Enum.GetValues(typeof(ItemData.EQUIP))) { if (equip == ItemData.EQUIP.NOTHING) continue; item = p.getEquipment().getSlot(equip); if (item.getItemId() == -1) continue; //empty slot. writer.WriteStartElement(equip.ToString()); writer.WriteElementString("Id", item.getItemId().ToString()); writer.WriteElementString("Amount", item.getItemAmount().ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteStartElement("InventoryItems"); for (int i = 0; i < Inventory.MAX_INVENTORY_SLOTS; i++) { item = p.getInventory().getSlot(i); if (item.getItemId() == -1) continue; //empty slot. writer.WriteStartElement("Item"); writer.WriteElementString("Slot", i.ToString()); writer.WriteElementString("Id", item.getItemId().ToString()); writer.WriteElementString("Amount", item.getItemAmount().ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteStartElement("BankItems"); for (int i = 0; i < Bank.MAX_BANK_SLOTS; i++) { item = p.getBank().getSlot(i); if (item.getItemId() == -1) continue; //empty slot. writer.WriteStartElement("Item"); writer.WriteElementString("Slot", i.ToString()); writer.WriteElementString("Id", item.getItemId().ToString()); writer.WriteElementString("Amount", item.getItemAmount().ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); //Write the XML to file and close the writer writer.Close(); } catch (Exception) { return false; } return true; }
public ReturnCode loadPlayer(Connection connection) { if (connection == null) return ReturnCode.COULD_NOT_COMPLETE; LoginDetails loginDetails = connection.getLoginDetails(); if (loginDetails == null || loginDetails.getUsername() == "" || loginDetails.getLongName() == 0) return ReturnCode.INVALID_PASSWORD;//ReturnCode.INVALID_PASSWORD; foreach (char c in loginDetails.getUsername().ToCharArray()) { if (!char.IsLetterOrDigit(c) && !char.IsWhiteSpace(c)) return ReturnCode.INVALID_PASSWORD; } Player createdPlayer = new Player(connection); connection.setPlayer(createdPlayer); //player finally created. createdPlayer.setLoginDetails(loginDetails); if (!File.Exists(Misc.getServerPath() + @"\accounts\" + loginDetails.getUsername() + ".xml")) { createdPlayer.setRights(2); //all new users admins atm (change later). createdPlayer.setLocation(new Location(2323, 3174, 0)); return ReturnCode.LOGIN_OK; //new user. } //Yeah reading XML files is a bit h**o. try { int temp; long lTemp; string username = createdPlayer.getLoginDetails().getUsername().ToLower(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(Misc.getServerPath() + @"\accounts\" + username + ".xml"); XmlNode xmlNode = xmlDocument.SelectSingleNode("/Player/Login/Password"); if (xmlNode == null) return ReturnCode.INVALID_PASSWORD; //no password node. if (createdPlayer.getLoginDetails().getPassword() != xmlNode.InnerText) return ReturnCode.INVALID_PASSWORD; XmlNode loginElement = xmlDocument.SelectSingleNode("/Player/Login"); if (loginElement != null && loginElement.HasChildNodes) { XmlNodeList childs = loginElement.ChildNodes; foreach (XmlElement element in childs) { switch (element.Name) { case "Rights": if (!int.TryParse(element.InnerText, out temp)) temp = 0; createdPlayer.setRights(temp); break; case "BankPin": if (element.InnerText == "") continue; createdPlayer.getBank().setBankPin(element.InnerText); break; } } } loginElement = xmlDocument.SelectSingleNode("/Player/Position"); if (loginElement != null && loginElement.HasChildNodes) { XmlNodeList childs = loginElement.ChildNodes; Location location = new Location(); foreach (XmlElement element in childs) { switch (element.Name) { case "X": if (!int.TryParse(element.InnerText, out temp)) { createdPlayer.setLocation(Constants.HOME_SPAWN_LOCATION); break; } location.setX(temp); break; case "Y": if (!int.TryParse(element.InnerText, out temp)) { createdPlayer.setLocation(Constants.HOME_SPAWN_LOCATION); break; } location.setY(temp); break; case "Z": if (!int.TryParse(element.InnerText, out temp)) temp = 0; location.setZ(temp); break; } } createdPlayer.setLocation(location); if (Location.atDuelArena(createdPlayer.getLocation())) DuelSession.teleportDuelArenaHome(createdPlayer); } xmlNode = xmlDocument.SelectSingleNode("/Player/Settings/RunEnergy"); if (xmlNode == null) { temp = 100; } else { if (!int.TryParse(xmlNode.InnerText, out temp)) temp = 100; } createdPlayer.setRunEnergyLoad(temp); loginElement = xmlDocument.SelectSingleNode("/Player/Settings/PrivacySettings"); if (loginElement != null && loginElement.HasChildNodes) { XmlNodeList childs = loginElement.ChildNodes; Friends.STATUS publicStatus = Friends.STATUS.ON, privateStatus = Friends.STATUS.ON, tradeStatus = Friends.STATUS.ON; foreach (XmlElement element in childs) { switch (element.Name) { case "Public": publicStatus = (Friends.STATUS)Enum.Parse(typeof(Friends.STATUS), element.InnerText, true); break; case "Private": privateStatus = (Friends.STATUS)Enum.Parse(typeof(Friends.STATUS), element.InnerText, true); break; case "Trade": tradeStatus = (Friends.STATUS)Enum.Parse(typeof(Friends.STATUS), element.InnerText, true); break; } } createdPlayer.getFriends().setPrivacyOptions(publicStatus, privateStatus, tradeStatus); } loginElement = xmlDocument.SelectSingleNode("/Player/Friends"); if (loginElement != null && loginElement.HasChildNodes) { XmlNodeList childs = loginElement.ChildNodes; //number of Friends foreach (XmlElement element in childs) { if (element.Name == "Friend") { if (long.TryParse(element.InnerText, out lTemp)) createdPlayer.getFriends().getFriendsList().Add(lTemp); } } } loginElement = xmlDocument.SelectSingleNode("/Player/Ignores"); if (loginElement != null && loginElement.HasChildNodes) { XmlNodeList childs = loginElement.ChildNodes; //number of Friends foreach (XmlElement element in childs) { if (element.Name == "Ignore") { if (long.TryParse(element.InnerText, out lTemp)) createdPlayer.getFriends().getIgnoresList().Add(lTemp); } } } loginElement = xmlDocument.SelectSingleNode("/Player/Stats"); if (loginElement != null && loginElement.HasChildNodes) { XmlNode skillNode; foreach (Skills.SKILL skill in Enum.GetValues(typeof(Skills.SKILL))) { skillNode = loginElement.SelectSingleNode("/Player/Stats/" + skill.ToString()); foreach (XmlElement element in skillNode.ChildNodes) { //CurrentLevel/XP switch (element.Name) { case "CurrentLevel": if (!int.TryParse(element.InnerText, out temp)) { if (skill != Skills.SKILL.HITPOINTS) createdPlayer.getSkills().setCurLevel(skill, 1); else createdPlayer.getSkills().setCurLevel(skill, 10); break; } createdPlayer.getSkills().setCurLevel(skill, temp); break; case "XP": if (!int.TryParse(element.InnerText, out temp)) { if (skill != Skills.SKILL.HITPOINTS) createdPlayer.getSkills().setXp(skill, 0); else createdPlayer.getSkills().setXp(skill, 1184); break; } createdPlayer.getSkills().setXp(skill, temp); break; } } } } loginElement = xmlDocument.SelectSingleNode("/Player/EquipmentItems"); if (loginElement != null && loginElement.HasChildNodes) { XmlNode skillNode; foreach (ItemData.EQUIP equip in Enum.GetValues(typeof(ItemData.EQUIP))) { if (equip == ItemData.EQUIP.NOTHING) continue; skillNode = loginElement.SelectSingleNode("/Player/EquipmentItems/" + equip.ToString()); if (skillNode == null) continue; int id = -1, amount = 0; foreach (XmlElement element in skillNode.ChildNodes) { switch (element.Name) { case "Id": if (!int.TryParse(element.InnerText, out id)) id = -1; break; case "Amount": if (!int.TryParse(element.InnerText, out amount)) amount = 0; break; } } if (id != -1) { createdPlayer.getEquipment().getEquipment()[(int)equip].setItemId(id); createdPlayer.getEquipment().getEquipment()[(int)equip].setItemAmount(amount); } } } loginElement = xmlDocument.SelectSingleNode("/Player/InventoryItems"); if (loginElement != null && loginElement.HasChildNodes) { int slot = -1, id = 0, amount = 0; foreach (XmlElement itemElement in loginElement.ChildNodes) //each item. { foreach (XmlElement itemDef in itemElement.ChildNodes) //each item. { switch (itemDef.Name) { case "Slot": if (!int.TryParse(itemDef.InnerText, out slot)) slot = -1; if (slot < 0 || slot > Inventory.MAX_INVENTORY_SLOTS) slot = -1; break; case "Id": if (!int.TryParse(itemDef.InnerText, out id)) slot = -1; break; case "Amount": if (!int.TryParse(itemDef.InnerText, out amount)) slot = -1; break; } } if (slot != -1) { createdPlayer.getInventory().getItems()[slot].setItemId(id); createdPlayer.getInventory().getItems()[slot].setItemAmount(amount); } } } loginElement = xmlDocument.SelectSingleNode("/Player/BankItems"); if (loginElement != null && loginElement.HasChildNodes) { int slot = -1, id = 0, amount = 0; foreach (XmlElement itemElement in loginElement.ChildNodes) //each item. { foreach (XmlElement itemDef in itemElement.ChildNodes) //each item. { switch (itemDef.Name) { case "Slot": if (!int.TryParse(itemDef.InnerText, out slot)) slot = -1; if (slot < 0 || slot > Inventory.MAX_INVENTORY_SLOTS) slot = -1; break; case "Id": if (!int.TryParse(itemDef.InnerText, out id)) slot = -1; break; case "Amount": if (!int.TryParse(itemDef.InnerText, out amount)) slot = -1; break; } } if (slot != -1) { createdPlayer.getBank().getBank()[slot].setItemId(id); createdPlayer.getBank().getBank()[slot].setItemAmount(amount); } } } return ReturnCode.LOGIN_OK; //new user. } catch (Exception e) { Misc.WriteError(e.Message); return ReturnCode.COULD_NOT_COMPLETE; } }
private void handleSendPm(Player player, Packet packet) { long name = packet.readLong(); byte[] privateMsgPacked = packet.getRemainingData(); string privateMsg = Misc.textUnpack(privateMsgPacked); if (privateMsg != null && name > 0) { player.getFriends().sendMessage(name, privateMsg, privateMsgPacked); } }
private void handlePrivacySettings(Player player, Packet packet) { int publicStatus = packet.readByte(); int privateStatus = packet.readByte(); int tradeStatus = packet.readByte(); player.getFriends().setPrivacyOption((Friends.STATUS)publicStatus, (Friends.STATUS)privateStatus, (Friends.STATUS)tradeStatus); }
private void handleDeleteFriend(Player player, Packet packet) { long name = packet.readLong(); if (name > 0) { player.getFriends().removeFriend(name); } }
private void handleActionButton(Player player, Packet packet) { int interfaceId = packet.readUShort(); ushort buttonId = packet.readUShort(); ushort buttonId2 = 0; if (packet.getLength() >= 6) { buttonId2 = packet.readUShort(); } if (buttonId2 == 65535) { buttonId2 = 0; } Console.WriteLine("button = " + interfaceId + " " + buttonId + " " + buttonId2); switch (interfaceId) { case 389: // GE Item Search if (player.getGESession() != null) { if (player.getGESession().getCurrentOffer() != null) { if (player.getGESession().getCurrentOffer() is BuyOffer) { player.getPackets().sendInterface(0, 752, 6, 137); // Removes the item search } } } break; case 374: // Tzhaar fight pits viewing orb Server.getMinigames().getFightPits().useOrb(player, buttonId); break; case 107: // GE Sell inventory. if (player.getGESession() == null) { break; } switch (buttonId) { case 18: // Offer player.getGESession().offerSellItem(buttonId2); break; } break; case 105: // GE interface if (player.getGESession() == null) { break; } switch (buttonId) { case 209: // Collect-notes player.getGESession().collectSlot1(true); break; case 203: // Abort offer player.getGESession().abortOffer(); break; case 31: // Sell, box 1 player.getGESession().newSellOffer(0); break; case 30: // Buy, box 1 player.getGESession().newBuyOffer(0); break; case 18: // Check status, box 1 player.getGESession().checkOffer(0); break; case 46: // Buy, box 2 player.getGESession().newBuyOffer(1); break; case 47: // Sell, box 2 player.getGESession().newSellOffer(1); break; case 34: // Check status, box 2 player.getGESession().checkOffer(1); break; case 62: // Buy, box 3 player.getGESession().newBuyOffer(2); break; case 63: // Sell, box 3 player.getGESession().newSellOffer(2); break; case 50: // Check status, box 3 player.getGESession().checkOffer(2); break; case 81: // Buy, box 4 player.getGESession().newBuyOffer(3); break; case 82: // Sell, box 4 player.getGESession().newSellOffer(3); break; case 69: // Check status, box 4 player.getGESession().checkOffer(3); break; case 100: // Buy, box 5 player.getGESession().newBuyOffer(4); break; case 101: // Sell, box 5 player.getGESession().newSellOffer(4); break; case 88: // Check status, box 5 player.getGESession().checkOffer(4); break; case 119: // Buy, box 6 player.getGESession().newBuyOffer(5); break; case 120: // Sell, box 6 player.getGESession().newSellOffer(5); break; case 107: // Check status, box 6 player.getGESession().checkOffer(5); break; case 127: // The "back" button player.getPackets().closeInterfaces(); player.setGESession(new GESession(player)); break; case 194: // Search for item player.getGESession().openItemSearch(); break; case 159: // Increment amount by 1 player.getGESession().incrementAmount(1); break; case 157: // Decrease amount by 1 player.getGESession().decreaseAmount(1); break; case 162: // Increase amount by +1 player.getGESession().incrementAmount(1); break; case 164: // Increase amount by +10 player.getGESession().incrementAmount(10); break; case 166: // Increase amount by +100 player.getGESession().incrementAmount(100); break; case 168: // Increase amount by +1k (or All if selling) player.getGESession().incrementAmount(1000); break; case 170: //custom enter quantity player.getPackets().displayEnterAmount(); player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 0)); break; case 185: //custom enter per price player.getPackets().displayEnterAmount(); player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 1)); break; case 177: // Set price to minimum player.getGESession().setPrice(0); break; case 180: // Set price to medium player.getGESession().setPrice(1); break; case 183: // Set price to maximum player.getGESession().setPrice(2); break; case 171: // Set price -1 player.getGESession().setPrice(3); break; case 173: // Set price +1 player.getGESession().setPrice(4); break; case 190: // Confirm offer player.getGESession().confirmOffer(); break; } break; case 161: // Slayer points interfaces case 163: case 164: Slayer.handlePointsInterface(player, interfaceId, buttonId); break; case 675: // Craft jewellery: player.getPackets().displayEnterAmount(); player.setTemporaryAttribute("interfaceVariable", new EnterVariable(675, buttonId)); break; case 154: // Craft normal leather. Leather.craftNormalLeather(player, buttonId, 1, true); break; case 542: // Craft glass. switch (buttonId) { case 40: // Make 1 beer glass. Glass.craftGlass(player, 1, 0, true); break; case 41: // Make 1 candle lantern. Glass.craftGlass(player, 1, 1, true); break; case 42: // Make 1 oil lamp. Glass.craftGlass(player, 1, 2, true); break; case 38: // Make 1 vial. Glass.craftGlass(player, 1, 3, true); break; case 44: // Make 1 Fishbowl Glass.craftGlass(player, 1, 4, true); break; case 39: // Make 1 orb. Glass.craftGlass(player, 1, 5, true); break; case 43: // Make 1 lantern lens Glass.craftGlass(player, 1, 6, true); break; case 45: // Make 1 dorgeshuun light orb. Glass.craftGlass(player, 1, 7, true); break; } break; case 271: // Prayer tab. if (!Prayer.canUsePrayer(player, buttonId)) { Prayer.deactivateAllPrayers(player); break; } switch (buttonId) { case 5: // Thick skin. Prayer.togglePrayer(player, 1, 1); break; case 15: // Rock skin. Prayer.togglePrayer(player, 1, 2); break; case 31: // Steel skin. Prayer.togglePrayer(player, 1, 3); break; case 7: // Burst of strength. Prayer.togglePrayer(player, 2, 1); break; case 17: // Superhuman strength. Prayer.togglePrayer(player, 2, 2); break; case 33: // Ultimate strength. Prayer.togglePrayer(player, 2, 3); break; case 9: // Clarity of thought. Prayer.togglePrayer(player, 3, 1); break; case 19: // Improved reflexes. Prayer.togglePrayer(player, 3, 2); break; case 35: // Incredible reflexes. Prayer.togglePrayer(player, 3, 3); break; case 37: // Magic protect. Prayer.togglePrayer(player, 4, 1); break; case 39: // Ranged protect. Prayer.togglePrayer(player, 4, 2); break; case 41: // Melee protect. Prayer.togglePrayer(player, 4, 3); break; case 47: // Retribution. Prayer.togglePrayer(player, 4, 4); break; case 49: // Redemption. Prayer.togglePrayer(player, 4, 5); break; case 51: // Smite. Prayer.togglePrayer(player, 4, 6); break; case 55: // Chivalry. Prayer.togglePrayer(player, 5, 1); break; case 57: // Piety. Prayer.togglePrayer(player, 5, 2); break; case 25: // Protect item. Prayer.togglePrayer(player, 6, 1); break; case 21: // Rapid restore Prayer.togglePrayer(player, 7, 1); break; case 23: // Rapid heal. Prayer.togglePrayer(player, 7, 2); break; case 11: // Sharp eye. Prayer.togglePrayer(player, 8, 1); break; case 27: // Hawk Eye. Prayer.togglePrayer(player, 8, 2); break; case 43: // Eagle Eye. Prayer.togglePrayer(player, 8, 3); break; case 13: // Mystic will. Prayer.togglePrayer(player, 9, 1); break; case 29: // Mystic Lore. Prayer.togglePrayer(player, 9, 2); break; case 45: // Mystic Might. Prayer.togglePrayer(player, 9, 3); break; } break; case 90: // Staff attack interface. switch (buttonId) { case 5: // Select spell (Magic XP) MagicData.configureSelectSpellInterface(player); break; case 9: // Auto retaliate. player.toggleAutoRetaliate(); break; default: MagicData.cancelAutoCast(player, true); AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 388: // Ancient magic autocast select spell. switch (buttonId) { case 0: // Smoke rush. MagicData.setAutoCastSpell(player, 16, 8, true); break; case 1: // Shadow rush. MagicData.setAutoCastSpell(player, 17, 12, true); break; case 2: // Blood rush. MagicData.setAutoCastSpell(player, 18, 4, true); break; case 3: // Ice rush. MagicData.setAutoCastSpell(player, 19, 0, true); break; case 4: // Smoke burst. MagicData.setAutoCastSpell(player, 20, 10, true); break; case 5: // Shadow burst. MagicData.setAutoCastSpell(player, 21, 14, true); break; case 6: // Blood burst. MagicData.setAutoCastSpell(player, 22, 6, true); break; case 7: // Ice burst. MagicData.setAutoCastSpell(player, 23, 2, true); break; case 8: // Smoke blitz. MagicData.setAutoCastSpell(player, 24, 9, true); break; case 9: // Shadow blitz. MagicData.setAutoCastSpell(player, 25, 13, true); break; case 10: // Blood blitz. MagicData.setAutoCastSpell(player, 26, 5, true); break; case 11: // Ice blitz. MagicData.setAutoCastSpell(player, 27, 1, true); break; case 12: // Smoke barrage. MagicData.setAutoCastSpell(player, 28, 11, true); break; case 13: // Shadow barrage. MagicData.setAutoCastSpell(player, 29, 15, true); break; case 14: // Blood barrage. MagicData.setAutoCastSpell(player, 30, 7, true); break; case 15: // Ice barrage. MagicData.setAutoCastSpell(player, 31, 3, true); break; case 16: // Cancel. MagicData.cancelAutoCast(player, false); break; } break; case 406: // Void knight mace autocast select spell. switch (buttonId) { case 0: // Crumble undead. MagicData.setAutoCastSpell(player, 32, 22, false); break; case 1: // Guthix claws. MagicData.setAutoCastSpell(player, 34, 42, false); break; case 2: // Wind wave. MagicData.setAutoCastSpell(player, 12, 45, false); break; case 3: // Water wave. MagicData.setAutoCastSpell(player, 13, 48, false); break; case 4: // Earth wave. MagicData.setAutoCastSpell(player, 14, 52, false); break; case 5: // Fire wave. MagicData.setAutoCastSpell(player, 15, 55, false); break; case 6: // Cancel. MagicData.cancelAutoCast(player, false); break; } break; case 310: // Slayer staff autocast select spell. switch (buttonId) { case 0: // Crumble undead. MagicData.setAutoCastSpell(player, 32, 22, false); break; case 1: // Slayer dart. MagicData.setAutoCastSpell(player, 33, 31, false); break; case 2: // Wind wave. MagicData.setAutoCastSpell(player, 12, 45, false); break; case 3: // Water wave. MagicData.setAutoCastSpell(player, 13, 48, false); break; case 4: // Earth wave. MagicData.setAutoCastSpell(player, 14, 52, false); break; case 5: // Fire wave. MagicData.setAutoCastSpell(player, 15, 55, false); break; case 6: // Cancel. MagicData.cancelAutoCast(player, false); break; } break; case 319: // Normal magic autocast select spell. switch (buttonId) { case 0: // Wind strike. MagicData.setAutoCastSpell(player, 0, 1, false); break; case 1: // Water strike. MagicData.setAutoCastSpell(player, 1, 4, false); break; case 2: // Earth strike. MagicData.setAutoCastSpell(player, 2, 6, false); break; case 3: // Fire strike. MagicData.setAutoCastSpell(player, 3, 8, false); break; case 4: // Wind bolt. MagicData.setAutoCastSpell(player, 4, 10, false); break; case 5: // Water bolt. MagicData.setAutoCastSpell(player, 5, 14, false); break; case 6: // Earth bolt. MagicData.setAutoCastSpell(player, 6, 17, false); break; case 7: // Fire bolt. MagicData.setAutoCastSpell(player, 7, 20, false); break; case 8: // Wind blast. MagicData.setAutoCastSpell(player, 8, 24, false); break; case 9: // Water blast. MagicData.setAutoCastSpell(player, 9, 27, false); break; case 10: // Earth blast. MagicData.setAutoCastSpell(player, 10, 33, false); break; case 11: // Fire blast. MagicData.setAutoCastSpell(player, 11, 38, false); break; case 12: // Wind wave. MagicData.setAutoCastSpell(player, 12, 45, false); break; case 13: // Water wave. MagicData.setAutoCastSpell(player, 13, 48, false); break; case 14: // Earth wave. MagicData.setAutoCastSpell(player, 14, 52, false); break; case 15: // Fire wave. MagicData.setAutoCastSpell(player, 15, 55, false); break; case 16: // Cancel. MagicData.cancelAutoCast(player, false); break; } break; case 182: // Logout tab. player.getPackets().logout(); break; case 261: // Settings tab. switch (buttonId) { case 16: // Display settings. player.getPackets().displayInterface(742); break; case 18: // Audio settings. player.getPackets().displayInterface(743); break; case 3: // Run toggle. if (!player.getWalkingQueue().isRunToggled()) { player.getWalkingQueue().setRunToggled(true); player.getPackets().sendConfig(173, 1); } else { player.getWalkingQueue().setRunToggled(false); player.getPackets().sendConfig(173, 0); } break; case 4: // Chat effect toggle. if (!player.isChatEffectsEnabled()) { player.setChatEffectsEnabled(true); player.getPackets().sendConfig(171, 0); } else { player.setChatEffectsEnabled(false); player.getPackets().sendConfig(171, 1); } break; case 5: // Split private chat toggle. if (!player.isPrivateChatSplit()) { player.setPrivateChatSplit(true); player.getPackets().sendConfig(287, 1); } else { player.setPrivateChatSplit(false); player.getPackets().sendConfig(287, 0); } break; case 7: // Accept aid toggle. if (!player.isAcceptAidEnabled()) { player.setAcceptAidEnabled(true); player.getPackets().sendConfig(427, 1); } else { player.setAcceptAidEnabled(false); player.getPackets().sendConfig(427, 0); } break; case 6: // Mouse buttons toggle. if (!player.isMouseTwoButtons()) { player.setMouseTwoButtons(true); player.getPackets().sendConfig(170, 0); } else { player.setMouseTwoButtons(false); player.getPackets().sendConfig(170, 1); } break; } break; case 589: // Clan chat if (buttonId == 9) { foreach (long friend in player.getFriends().getFriendsList()) { player.getPackets().sendFriend(friend, player.getFriends().getWorld(friend)); } Server.getClanManager().openClanSetup(player); break; } break; case 590: // Clan chat setup Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername()); if (clan == null) { break; } switch (buttonId) { case 22: // Clan name player.getPackets().displayEnterText("Enter clan name :"); player.setTemporaryAttribute("interfaceVariable", new EnterVariable(590, 0)); break; case 23: // "Who can enter chat" - anyone. clan.setEnterRights(Clan.ClanRank.NO_RANK); player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23); break; case 24: // "Who can talk in chat" - anyone. clan.setTalkRights(Clan.ClanRank.NO_RANK); player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24); break; case 26: // "Who can share loot" - anyone. clan.setLootRights(Clan.ClanRank.NO_RANK); player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26); break; } break; case 763: // Bank inventory switch (buttonId) { case 0: // Deposit 1. player.getBank().deposit(buttonId2, 1); player.getBank().refreshBank(); break; } break; case 762: // Bank switch (buttonId) { case 73: // withdraw 1. player.getBank().withdraw(buttonId2, 1); player.getBank().refreshBank(); break; case 16: // Note item. player.getBank().asNote(); break; case 41: // first (main) bank tab player.getBank().setCurrentTab(10); break; case 39: // first bank tab player.getBank().setCurrentTab(2); break; case 37: // second bank tab player.getBank().setCurrentTab(3); break; case 35: // third bank tab player.getBank().setCurrentTab(4); break; case 33: // fourth bank tab player.getBank().setCurrentTab(5); break; case 31: // fifth bank tab player.getBank().setCurrentTab(6); break; case 29: // sixth bank tab player.getBank().setCurrentTab(7); break; case 27: // seventh bank tab player.getBank().setCurrentTab(8); break; case 25: // eighth bank tab player.getBank().setCurrentTab(9); break; } break; case 626: // Stake duel confirmation interface. if (buttonId == 53) { if (player.getDuel() != null) { player.getDuel().acceptDuel(); break; } } break; case 631: // Stake duel first interface. if (player.getDuel() != null) { if (buttonId == 103) { player.getDuel().removeItem(buttonId2, 1); break; } else { player.getDuel().toggleDuelRules(buttonId); break; } } break; case 387: // Equipment tab. switch (buttonId) { case 55: // Character display. player.getEquipment().displayEquipmentScreen(); break; case 52: // Items kept on death. ProtectedItems.displayItemsInterface(player); break; } break; case 274: // Quest tab. switch (buttonId) { case 3: // Achievment diary toggle. player.getPackets().sendTab(85, 259); player.setAchievementDiaryTab(true); break; } break; case 259: // Achievment diary tab. switch (buttonId) { case 8: // Quest tab toggle. player.getPackets().sendTab(85, 274); player.setAchievementDiaryTab(false); break; } break; case 620: // Shop interface. if (player.getShopSession() == null) { return; } switch (buttonId) { case 26: // Player stock tab. player.getShopSession().openPlayerShop(); break; case 25: // Main stock tab. player.getShopSession().openMainShop(); break; case 23: // Value (main stock) case 24: // Value (player stock) player.getShopSession().valueItem(buttonId2, false); break; } break; case 621: // Shop inventory. if (player.getShopSession() == null) { return; } switch (buttonId) { case 0: // Value (player stock) player.getShopSession().valueItem(buttonId2, true); break; } break; case 192: // Normal Magic tab. switch (buttonId) { case 0: // Home Teleport. Teleport.homeTeleport(player); break; case 15: // Varrock teleport. Teleport.teleport(player, 0); break; case 18: // Lumbridge teleport. Teleport.teleport(player, 1); break; case 21: // Falador teleport. Teleport.teleport(player, 2); break; case 23: // POH teleport. player.getPackets().sendMessage("This teleport is unavailable."); break; case 26: // Camelot teleport. Teleport.teleport(player, 3); break; case 32: // Ardougne teleport. Teleport.teleport(player, 4); break; case 37: // Watchtower teleport. player.getPackets().sendMessage("This teleport is unavailable."); //Teleport.teleport(player, 5); break; case 44: // Trollheim teleport. Teleport.teleport(player, 6); break; case 47: // Ape Atoll teleport. player.getPackets().sendMessage("This teleport is unavailable."); break; case 58: // Charge. MagicCombat.castCharge(player); break; } break; case 193: // Ancient magic tab. switch (buttonId) { case 20: // Paddewwa teleport. Teleport.teleport(player, 7); break; case 21: // Senntisten teleport. Teleport.teleport(player, 8); break; case 22: // Kharyrll teleport. Teleport.teleport(player, 9); break; case 23: // Lassar teleport. Teleport.teleport(player, 10); break; case 24: // Dareeyak teleport. Teleport.teleport(player, 11); break; case 25: // Carrallanger teleport. Teleport.teleport(player, 12); break; case 27: // Ghorrock teleport. Teleport.teleport(player, 14); break; case 26: // Annakarl teleport. Teleport.teleport(player, 13); break; case 28: // Ancients Home teleport. Teleport.homeTeleport(player); break; } break; case 13: // Bank pin buttons. if (buttonId == 29) { player.getBank().forgotPin(); break; } player.getBank().handleEnterPin(buttonId); break; case 14: // Bank pin settings. switch (buttonId) { case 60: // Set new bank pin. player.getBank().displayFirstConfirmation(); break; case 61: // Change recovery delay. player.getBank().changePinDelay(); break; case 91: // "No, I might forget it!". if (player.getBank().isPinPending()) { player.getBank().cancelPendingPin(); break; } player.getBank().openPinSettings(2); break; case 89: // Yes i want to set a pin. if (player.getBank().isPinPending()) { player.getBank().verifyPin(true); break; } player.getBank().openEnterPin(); break; case 65: // Cancel pin that's pending. player.getBank().openPinSettings(4); break; case 62: // Change pin. player.getBank().changePin(); break; case 63: // Delete pin. player.getBank().deletePin(); break; } break; case 464: // Emote tab. Emotes.emote(player, buttonId); break; case 320: // Skills Tab. SkillMenu.display(player, buttonId); break; case 499: // Skill menu side menu. SkillMenu.subMenu(player, buttonId); break; case 336: // Trade/duel inventory - trade 1. if (player.getTrade() != null) { player.getTrade().tradeItem(buttonId2, 1); break; } if (player.getDuel() != null) { player.getDuel().stakeItem(buttonId2, 1); break; } break; case 335: // Trade interface. if (player.getTrade() == null) { break; } switch (buttonId) { case 16: // Accept trade. player.getTrade().accept(); break; case 18: // Decline trade. player.getTrade().decline(); break; case 30: // Offer 1 player.getTrade().removeItem(buttonId2, 1); break; } break; case 334: // Trade confirmation. if (player.getTrade() == null) { break; } switch (buttonId) { case 21: // Decline trade. player.getTrade().decline(); break; case 20: // Accept trade. player.getTrade().accept(); break; } break; case 750: // Run button if (!player.getWalkingQueue().isRunToggled()) { player.getWalkingQueue().setRunToggled(true); player.getPackets().sendConfig(173, 1); } else { player.getWalkingQueue().setRunToggled(false); player.getPackets().sendConfig(173, 0); } break; case 667: // Equipment/bonuses interface. if (buttonId == 14) { player.getEquipment().unequipItem((ItemData.EQUIP)buttonId2); break; } break; case 771: // Character design interface. ConfigureAppearance.sortButton(player, buttonId); break; case 311: // Smelt interface. Smelting.smeltOre(player, buttonId, true, -1); break; case 300: // Bar smithing interface. Smithing.smithItem(player, buttonId, 1, true); break; case 92: // Unarmed attack interface. switch (buttonId) { case 24: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 85: // Spear attack interface. switch (buttonId) { case 8: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 24: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 93: // Whip attack interface. switch (buttonId) { case 8: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 24: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 89: // Dagger attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 82: // Longsword/scimitar attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 78: // Claw attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 81: // Godsword attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 88: // Mace attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 76: // Granite maul attack interface. switch (buttonId) { case 8: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 24: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 77: // Bow attack interface. switch (buttonId) { case 11: // Special attack. player.getSpecialAttack().toggleSpecBar(); break; case 27: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 75: // Battleaxe attack interface. switch (buttonId) { case 10: // Special attack. player.getSpecialAttack().toggleSpecBar(); player.getSpecialAttack().dragonBattleaxe(); break; case 26: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 91: // Thrown weapon switch (buttonId) { case 24: // Auto retaliate. player.toggleAutoRetaliate(); break; default: AttackInterface.configureButton(player, interfaceId, buttonId); break; } break; case 430: // Lunar interface switch (buttonId) { case 14: // Vengeance Lunar.castLunarSpell(player, buttonId); break; } break; case 102: // Items on death interface if (buttonId == 18) player.getPackets().sendMessage("You will keep this item if you should you die."); else player.getPackets().sendMessage("You will lose this item if you should you die."); break; default: if (interfaceId != 548 && interfaceId != 751) { Console.WriteLine("Unhandled ActionButton : " + interfaceId + " " + buttonId + " " + buttonId2); } break; } }