792 lines
30 KiB
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);
|
|
}
|
|
});
|
|
}
|
|
}
|