MoparClassic/GameServer/src/org/moparscape/msc/gs/phandler/client/InvActionHandler.java

792 lines
30 KiB
Java

package org.moparscape.msc.gs.phandler.client;
import org.apache.mina.common.IoSession;
import org.moparscape.msc.config.Config;
import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.Server;
import org.moparscape.msc.gs.connection.Packet;
import org.moparscape.msc.gs.core.GameEngine;
import org.moparscape.msc.gs.event.DelayedEvent;
import org.moparscape.msc.gs.event.MiniEvent;
import org.moparscape.msc.gs.event.SingleEvent;
import org.moparscape.msc.gs.external.ItemUnIdentHerbDef;
import org.moparscape.msc.gs.model.ActiveTile;
import org.moparscape.msc.gs.model.Bubble;
import org.moparscape.msc.gs.model.GameObject;
import org.moparscape.msc.gs.model.InvItem;
import org.moparscape.msc.gs.model.MenuHandler;
import org.moparscape.msc.gs.model.Player;
import org.moparscape.msc.gs.model.Point;
import org.moparscape.msc.gs.model.World;
import org.moparscape.msc.gs.model.snapshot.Activity;
import org.moparscape.msc.gs.phandler.PacketHandler;
import org.moparscape.msc.gs.tools.DataConversions;
public class InvActionHandler implements PacketHandler {
/**
* World instance
*/
public static final World world = Instance.getWorld();
public void handlePacket(Packet p, IoSession session) throws Exception {
int INFECTED_BLOOD = 1322;
Player player = (Player) session.getAttachment();
int idx = (int) p.readShort();
if (idx < 0 || idx >= player.getInventory().size()) {
player.setSuspiciousPlayer(true);
return;
}
final InvItem item = player.getInventory().get(idx);
if (item == null || item.getDef().getCommand().equals("")) {
player.setSuspiciousPlayer(true);
return;
}
if(item.getDef().isMembers() && Config.f2pWildy && player.getLocation().inWilderness() && item.getID() != 814) {
player.getActionSender().sendMessage("Can not use a Member item in the wilderness");
return;
}
world.addEntryToSnapshots(new Activity(player.getUsername(), player.getUsername() + " used item " + item.getDef().getName() + "(" + item.getID() + ")" + " [CMD: "+item.getDef().getCommand()+"] at: " + player.getX() + "/" + player.getY()));
if (item.getID() == 1263) {
//player.resetPath(); // This isn't how it's done in RSC
//player.setBusy(true); // Shouldn't be here
player.getActionSender().sendMessage("You rest in the sleeping bag");
showBubble(player, item);
player.getActionSender().sendEnterSleep();
// player.setFatigue(0);
// player.getActionSender().sendFatigue();
// player.getActionSender().sendMessage("You wake up - feeling refreshed");
// player.isSleeping = true;
// player.setBusy(false);
return;
}
if (player.isBusy()) {
if (player.inCombat()) {
player.getActionSender().sendMessage("You cannot do that whilst fighting!");
}
return;
}//sip
player.resetAll();
if (world.getQuestManager().handleUseItem(item, player))
return;
if (item.getDef().getCommand().equalsIgnoreCase("identify")) {
if (!Server.isMembers()) {
player.getActionSender().sendMessage("This feature is only avaliable on a members server");
return;
}
ItemUnIdentHerbDef herb = item.getUnIdentHerbDef();
if (herb == null) {
return;
}
if (player.getMaxStat(15) < herb.getLevelRequired()) {
player.getActionSender().sendMessage("Your herblaw ability is not high enough to clean this herb.");
return;
}
player.setBusy(true);
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
ItemUnIdentHerbDef herb = item.getUnIdentHerbDef();
InvItem newItem = new InvItem(herb.getNewId());
owner.getInventory().remove(item);
owner.getInventory().add(newItem);
owner.getActionSender().sendMessage("You clean the mud off the " + newItem.getDef().getName() + ".");
owner.incExp(15, herb.getExp(), true);
owner.getActionSender().sendStat(15);
owner.getActionSender().sendInventory();
owner.setBusy(false);
return;
}
});
return;
}
if (item.isEdible()) {
if (item.getDef().isMembers() && !World.isMembers()) {
player.getActionSender().sendMessage("This feature is only avaliable on a members server");
return;
}
player.setBusy(true);
player.getActionSender().sendSound("eat");
if (item.getID() == 228 || item.getID() == 18)
player.getActionSender().sendMessage("You eat the " + item.getDef().getName() + ". Yuck!");
else
player.getActionSender().sendMessage("You eat the " + item.getDef().getName() + ".");
// 1263
final boolean heals = player.getCurStat(3) < player.getMaxStat(3);
if (heals) {
int newHp = player.getCurStat(3) + item.eatingHeals();
if (newHp > player.getMaxStat(3)) {
newHp = player.getMaxStat(3);
}
player.setCurStat(3, newHp);
player.getActionSender().sendStat(3);
}
Instance.getDelayedEventHandler().add(new SingleEvent(player, 185) {
public void action() {
if (heals) {
owner.getActionSender().sendMessage("It heals some health.");
}
owner.getInventory().remove(item);
switch (item.getID()) {
case 326: // Meat pizza
owner.getInventory().add(new InvItem(328));
break;
case 327: // Anchovie pizza
owner.getInventory().add(new InvItem(329));
break;
case 330: // Cake
owner.getInventory().add(new InvItem(333));
break;
case 333: // Partical cake
owner.getInventory().add(new InvItem(335));
break;
case 332: // Choc cake
owner.getInventory().add(new InvItem(334));
break;
case 334: // Partical choc cake
owner.getInventory().add(new InvItem(336));
break;
case 257: // Apple pie
owner.getInventory().add(new InvItem(263));
break;
case 261: // Half apple pie
owner.getInventory().add(new InvItem(251));
break;
case 258: // Redberry pie
owner.getInventory().add(new InvItem(262));
break;
case 262: // Half redberry pie
owner.getInventory().add(new InvItem(251));
break;
case 259: // Meat pie
owner.getInventory().add(new InvItem(261));
break;
case 263: // Half meat pie
owner.getInventory().add(new InvItem(251));
break;
}
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
} else if (item.getDef().getCommand().equalsIgnoreCase("open")) {
if(item.getID() == INFECTED_BLOOD) {
if(!player.isInfected()) { player.setInfected(); return; }
long lastUsed = GameEngine.getTime() - player.lastInfected();
long remaining = 5 - lastUsed / 1000;
InvItem INFECTED_BLOOD_I = new InvItem(1322, 1);
if(lastUsed / 1000 <= 5) { player.getActionSender().sendMessage("You have to wait " + remaining + " seconds before using that again."); return; }
showBubble(player, INFECTED_BLOOD_I);
player.getActionSender().sendMessage("Pools of blood spurt our around you.");
for (Player v : player.infectedBlood()) {
if(v == player) continue;
int bloodChance = DataConversions.random(0,99);
if(bloodChance >= 15) {
showBubble(v, INFECTED_BLOOD_I);
v.setInfected();
player.getActionSender().sendMessage("You have infected " + v.getUsername() + " >:D ");
}
}
player.setLastInfected();
return;
}
if(item.getID() == 1321) {
int win;
int Roll = DataConversions.random(0,99);
if(player.getInventory().remove(1321,1) > -1) {
if(Roll <= 10) { win = 795; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 30) { win = 81; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 40) { win = 828; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 43) { win = 831; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 47) { win = 832; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 55) { win = 576; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 60) { win = 577; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 63) { win = 578; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 67) { win = 579; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 71) { win = 580; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 76) { win = 581; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
if(Roll <= 85) { win = 10; player.getInventory().add(new InvItem(win, 200000)); player.getActionSender().sendInventory(); return; }
if(Roll <= 100) { win = 1289; player.getInventory().add(new InvItem(win)); player.getActionSender().sendInventory(); return; }
}
}
if(item.getID() == 1323) { return; }
} else if (item.getDef().getCommand().equalsIgnoreCase("open") && item.getID() == 796) {
final ActiveTile tile = world.getTile(player.getLocation());
if (tile.hasGameObject()) {
player.getActionSender().sendMessage("You cannot do that here, please move to a new area.");
return;
}
if (player.getInventory().remove(796, 1) > -1) {
player.getActionSender().sendInventory();
player.setBusy(true);
player.getActionSender().sendMessage("You open and plant the seed.");
world.registerGameObject(new GameObject(player.getLocation(), 490, 0, 0));
final Point location = player.getLocation();
Instance.getDelayedEventHandler().add(new DelayedEvent(null, 180000) {
GameObject object = world.getTile(location).getGameObject();
public void run() {
if (object != null) {
world.unregisterGameObject(object);
}
}
});
}
player.setBusy(false);
return;
}
else if (item.getDef().getCommand().equalsIgnoreCase("bury")) {
player.setBusy(true);
player.getActionSender().sendMessage("You dig a hole in the ground.");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You bury the " + item.getDef().getName() + ".");
owner.getInventory().remove(item);
switch (item.getID()) {
case 20: // Bones
case 604: // Bat bones
owner.incExp(5, 8, true);
break;
case 413: // Big bones
owner.incExp(5, 24, true);
break;
case 814: // Dragon bones
owner.incExp(5, 90, true);
break;
}
owner.getActionSender().sendStat(5);
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});// f2p
} else if (item.getDef().getCommand().equalsIgnoreCase("drink")) {
switch (item.getID()) {
case 180: // bad wine
player.getActionSender().sendMessage("You drink the bad wine");
showBubble(player, item);
player.getInventory().remove(item);
player.getInventory().add(new InvItem(140));
int atk = player.getCurStat(0);
atk -= 3;
if (atk < 0)
atk = 0;
player.setCurStat(0, atk);
player.getActionSender().sendStat(0);
player.getActionSender().sendInventory();
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You start to feel sick");
}
});
break;
case 142:
player.getActionSender().sendMessage("You drink the wine");
showBubble(player, item);
player.getInventory().remove(item);
player.getInventory().add(new InvItem(140));
int hp = player.getCurStat(3);
atk = player.getCurStat(0);
atk -= 3;
hp += 11;
if (atk < 0)
atk = 0;
if (hp > player.getMaxStat(3))
hp = player.getMaxStat(3);
player.setCurStat(3, hp);
player.setCurStat(0, atk);
player.getActionSender().sendStat(0);
player.getActionSender().sendStat(3);
player.getActionSender().sendInventory();
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You start to feel dizzy");
}
});
break;
case 739: // Tea
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("It's nice and refreshing.");
owner.getInventory().remove(item);
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 193: // Beer
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You feel slightly dizzy.");
int k = owner.getCurStat(0);
k = k - 1;
if (k < 1)
k = 0;
owner.setCurStat(0, k);
owner.getActionSender().sendStat(0);
if (owner.getCurStat(2) <= owner.getMaxStat(2)) {
owner.setCurStat(2, owner.getCurStat(2) + 2);
owner.getActionSender().sendStat(2);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 830: // Greenmans Ale
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("It has a strange taste.");
for (int stat = 0; stat < 3; stat++) {
owner.setCurStat(stat, owner.getCurStat(stat) - 4);
owner.getActionSender().sendStat(stat);
}
if (owner.getCurStat(15) <= owner.getMaxStat(15)) {
owner.setCurStat(15, owner.getCurStat(15) + 1);
owner.getActionSender().sendStat(15);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 268: // Mind Bomb
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You feel very strange.");
for (int stat = 0; stat < 3; stat++) {
owner.setCurStat(stat, owner.getCurStat(stat) - 4);
owner.getActionSender().sendStat(stat);
}
int change = (owner.getMaxStat(6) > 55 ? 3 : 2);
int maxWithBomb = (owner.getMaxStat(6) + change);
if(maxWithBomb - owner.getCurStat(6) < change) {
change = maxWithBomb - owner.getCurStat(6);
}
if (owner.getCurStat(6) <= (owner.getMaxStat(6) + (owner.getMaxStat(6) > 55 ? 3 : 2))) {
owner.setCurStat(6, owner.getCurStat(6) + change);
owner.getActionSender().sendStat(6);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 269: // Dwarven Stout
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("It tastes foul.");
for (int stat = 0; stat < 3; stat++) {
owner.setCurStat(stat, owner.getCurStat(stat) - 4);
owner.getActionSender().sendStat(stat);
}
if (owner.getCurStat(13) <= owner.getMaxStat(13)) {
owner.setCurStat(13, owner.getCurStat(13) + 1);
owner.getActionSender().sendStat(13);
}
if (owner.getCurStat(14) <= owner.getMaxStat(14)) {
owner.setCurStat(14, owner.getCurStat(14) + 1);
owner.getActionSender().sendStat(14);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 267: // Asgarnian Ale
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You feel slightly reinvigorated");
owner.getActionSender().sendMessage("And slightly dizzy too.");
owner.setCurStat(0, owner.getCurStat(0) - 4);
owner.getActionSender().sendStat(0);
if (owner.getCurStat(2) <= owner.getMaxStat(2)) {
owner.setCurStat(2, owner.getCurStat(2) + 2);
owner.getActionSender().sendStat(2);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
case 829: // Dragon Bitter
player.setBusy(true);
player.getActionSender().sendMessage("You drink the " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You feel slightly dizzy.");
owner.setCurStat(0, owner.getCurStat(0) - 4);
owner.getActionSender().sendStat(0);
if (owner.getCurStat(2) <= owner.getMaxStat(2)) {
owner.setCurStat(2, owner.getCurStat(2) + 2);
owner.getActionSender().sendStat(2);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(620));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
showBubble(player, item);
break;
/** HANDLE WINE+ CURE POISON AND ANTIDOTE AND ZAMAROCK POTIONS **/
case 221: // Strength Potion - 4 dose
useNormalPotion(player, item, 2, 10, 2, 222, 3);
break;
case 222: // Strength Potion - 3 dose
useNormalPotion(player, item, 2, 10, 2, 223, 2);
break;
case 223: // Strength Potion - 2 dose
useNormalPotion(player, item, 2, 10, 2, 224, 1);
break;
case 224: // Strength Potion - 1 dose
useNormalPotion(player, item, 2, 10, 2, 465, 0);
break;
case 474: // attack Potion - 3 dose
useNormalPotion(player, item, 0, 10, 2, 475, 2);
break;
case 475: // attack Potion - 2 dose
useNormalPotion(player, item, 0, 10, 2, 476, 1);
break;
case 476: // attack Potion - 1 dose
useNormalPotion(player, item, 0, 10, 2, 465, 0);
break;
case 477: // stat restoration Potion - 3 dose
useStatRestorePotion(player, item, 478, 2);
break;
case 478: // stat restoration Potion - 2 dose
useStatRestorePotion(player, item, 479, 1);
break;
case 479: // stat restoration Potion - 1 dose
useStatRestorePotion(player, item, 465, 0);
break;
case 480: // defense Potion - 3 dose
useNormalPotion(player, item, 1, 10, 2, 481, 2);
break;
case 481: // defense Potion - 2 dose
useNormalPotion(player, item, 1, 10, 2, 482, 1);
break;
case 482: // defense Potion - 1 dose
useNormalPotion(player, item, 1, 10, 2, 465, 0);
break;
case 483: // restore prayer Potion - 3 dose
usePrayerPotion(player, item, 484, 2);
break;
case 484: // restore prayer Potion - 2 dose
usePrayerPotion(player, item, 485, 1);
break;
case 485: // restore prayer Potion - 1 dose
usePrayerPotion(player, item, 465, 0);
break;
case 486: // Super attack Potion - 3 dose
useNormalPotion(player, item, 0, 15, 4, 487, 2);
break;
case 487: // Super attack Potion - 2 dose
useNormalPotion(player, item, 0, 15, 4, 488, 1);
break;
case 488: // Super attack Potion - 1 dose
useNormalPotion(player, item, 0, 15, 4, 465, 0);
break;
case 489: // fishing Potion - 3 dose
useFishingPotion(player, item, 490, 2);
break;
case 490: // fishing Potion - 2 dose
useFishingPotion(player, item, 491, 1);
break;
case 491: // fishing Potion - 1 dose
useFishingPotion(player, item, 465, 0);
break;
case 492: // Super strength Potion - 3 dose
useNormalPotion(player, item, 2, 15, 4, 493, 2);
break;
case 493: // Super strength Potion - 2 dose
useNormalPotion(player, item, 2, 15, 4, 494, 1);
break;
case 494: // Super strength Potion - 1 dose
useNormalPotion(player, item, 2, 15, 4, 465, 0);
break;
case 495: // Super defense Potion - 3 dose
useNormalPotion(player, item, 1, 15, 4, 496, 2);
break;
case 496: // Super defense Potion - 2 dose
useNormalPotion(player, item, 1, 15, 4, 497, 1);
break;
case 497: // Super defense Potion - 1 dose
useNormalPotion(player, item, 1, 15, 4, 465, 0);
break;
case 498: // ranging Potion - 3 dose
useNormalPotion(player, item, 4, 10, 2, 499, 2);
break;
case 499: // ranging Potion - 2 dose
useNormalPotion(player, item, 4, 10, 2, 500, 1);
break;
case 500: // ranging Potion - 1 dose
useNormalPotion(player, item, 4, 10, 2, 465, 0);
break;
default:
player.getActionSender().sendMessage("Nothing interesting happens");
return;
}
} else {
switch (item.getID()) {
case 597: // Charged Dragonstone amulet
if (!Server.isMembers()) {
player.getActionSender().sendMessage("This feature is only avaliable on a members server");
return;
}
player.getActionSender().sendMessage("You rub the amulet...");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
String[] options = new String[] { "Edgeville", "Karamja", "Draynor Village", "Al Kharid", "Seers", "Yanille" };
owner.setMenuHandler(new MenuHandler(options) {
public void handleReply(final int option, final String reply) {
if (owner.isBusy() || owner.inCombat() || owner.getInventory().get(item) == null) {
return;
}
if (owner.getLocation().inModRoom() && !owner.isMod()) {
owner.getActionSender().sendMessage("A magical force stops you from teleporting.");
return;
}
owner.getActionSender().sendSound("spellok");
switch (option) {
case 0: // Edgeville
owner.teleport(193, 435, true);
break;
case 1: // Karamja
owner.teleport(360, 696, true);
break;
case 2: // Draynor Village
owner.teleport(214, 632, true);
break;
case 3: // Al Kharid
owner.teleport(72, 696, true);
break;
case 4: // Seers
owner.teleport(516, 460, true);
break;
case 5: // Yanille
owner.teleport(587, 761, true);
break;
default:
return;
}
if (DataConversions.random(0, 5) == 1 && owner.getInventory().remove(item) > -1) {
owner.getInventory().add(new InvItem(522, 1));
owner.getActionSender().sendInventory();
}
}
});
owner.getActionSender().sendMenu(options);
}
});
break;
case 316: // Ruby ammy
case 317: // Diamond ammy
if(!player.canLogout() || System.currentTimeMillis() - player.getLastMoved() < 10000) {
player.getActionSender().sendMessage("You must stand peacefully in one place for 10 seconds!");
return;
}
player.getActionSender().sendMessage("You rub the amulet... be careful!");
player.getActionSender().sendMessage("All who use this cursed amulet automatically skull!");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
String[] options = new String[] { "Altar", "Castle" };
owner.setMenuHandler(new MenuHandler(options) {
public void handleReply(final int option, final String reply) {
if (owner.isBusy() || owner.inCombat() || owner.getInventory().get(item) == null) {
return;
}
if (owner.getLocation().inModRoom() && !owner.isMod()) {
owner.getActionSender().sendMessage("A magical force stops you from teleporting.");
return;
}
owner.getActionSender().sendSound("spellok");
switch (option) {
case 0: // altar
int x = DataConversions.random(311, 327);
int y = DataConversions.random(210, 222);
while(world.getTile(x, y).hasGameObject()) {
x = DataConversions.random(311, 327);
y = DataConversions.random(210, 222);
}
owner.teleport(x, y, true);
owner.addSkull(1200000);
break;
case 1: // castle
x = DataConversions.random(271, 283);
y = DataConversions.random(352, 363);
while(world.getTile(x, y).hasGameObject()) {
x = DataConversions.random(271, 283);
y = DataConversions.random(352, 363);
}
owner.teleport(x, y, true);
owner.addSkull(1200000);
break;
default:
return;
}
}
});
owner.getActionSender().sendMenu(options);
}
});
break;
case 387: // Disk of Returning
if (player.getLocation().wildernessLevel() >= 30 || (player.getLocation().inModRoom() && !player.isMod())) {
player.getActionSender().sendMessage("The disk doesn't seem to work here.");
return;
}
player.getActionSender().sendMessage("The disk starts to spin...");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.resetPath();
owner.teleport(131, 508, true);
owner.getInventory().remove(item);
owner.getActionSender().sendMessage("You find yourself back in Varrock");
owner.getActionSender().sendMessage("The disk has now gone");
owner.getActionSender().sendInventory();
}
});
break;
default:
player.getActionSender().sendMessage("Nothing interesting happens");
return;
}
}
}
private void showBubble(Player player, InvItem item) {
Bubble bubble = new Bubble(player, item.getID());
for (Player p1 : player.getViewArea().getPlayersInView()) {
p1.informOfBubble(bubble);
}
}
private void useFishingPotion(Player player, final InvItem item, final int newItem, final int left) {
if (!Server.isMembers()) {
player.getActionSender().sendMessage("This feature is only avaliable on a members server");
return;
}
player.setBusy(true);
player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You have " + left + " doses left.");
owner.setCurStat(10, owner.getMaxStat(10) + 3);
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(newItem));
owner.getActionSender().sendStat(10);
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
}
private void useNormalPotion(Player player, final InvItem item, final int affectedStat, final int percentageIncrease, final int modifier, final int newItem, final int left) {
player.setBusy(true);
player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You have " + left + " doses left.");
int baseStat = owner.getCurStat(affectedStat) > owner.getMaxStat(affectedStat) ? owner.getMaxStat(affectedStat) : owner.getCurStat(affectedStat);
int newStat = baseStat + DataConversions.roundUp((owner.getMaxStat(affectedStat) / 100D) * percentageIncrease) + modifier;
if (newStat > owner.getCurStat(affectedStat)) {
owner.setCurStat(affectedStat, newStat);
owner.getActionSender().sendStat(affectedStat);
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(newItem));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
}
private void usePrayerPotion(Player player, final InvItem item, final int newItem, final int left) {
player.setBusy(true);
player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You have " + left + " doses left.");
int newPrayer = owner.getCurStat(5) + 21;
if (newPrayer > owner.getMaxStat(5)) {
newPrayer = owner.getMaxStat(5);
}
owner.setCurStat(5, newPrayer);
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(newItem));
owner.getActionSender().sendStat(5);
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
}
private void useStatRestorePotion(Player player, final InvItem item, final int newItem, final int left) {
if (!Server.isMembers()) {
player.getActionSender().sendMessage("This feature is only avaliable on a members server");
return;
}
player.setBusy(true);
player.getActionSender().sendMessage("You drink some of your " + item.getDef().getName() + ".");
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
public void action() {
owner.getActionSender().sendMessage("You have " + left + " doses left.");
for (int i = 0; i < 18; i++) {
if (i == 3 || i == 5) {
continue;
}
int max = owner.getMaxStat(i);
if (owner.getCurStat(i) < max) {
owner.setCurStat(i, max);
owner.getActionSender().sendStat(i);
}
}
owner.getInventory().remove(item);
owner.getInventory().add(new InvItem(newItem));
owner.getActionSender().sendInventory();
owner.setBusy(false);
}
});
}
}