1198 lines
39 KiB
Java
1198 lines
39 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.config.Formulae;
|
|
import org.moparscape.msc.gs.Instance;
|
|
import org.moparscape.msc.gs.Server;
|
|
import org.moparscape.msc.gs.connection.Packet;
|
|
import org.moparscape.msc.gs.event.MiniEvent;
|
|
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.World;
|
|
import org.moparscape.msc.gs.model.definition.EntityHandler;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemArrowHeadDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemBowStringDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemDartTipDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemGemDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemHerbDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemHerbSecondDef;
|
|
import org.moparscape.msc.gs.model.definition.skill.ItemLogCutDef;
|
|
import org.moparscape.msc.gs.model.snapshot.Activity;
|
|
import org.moparscape.msc.gs.phandler.PacketHandler;
|
|
import org.moparscape.msc.gs.tools.DataConversions;
|
|
|
|
public class InvUseOnItem implements PacketHandler {
|
|
static int[] capes = { 183, 209, 229, 511, 512, 513, 514 };
|
|
|
|
/**
|
|
* World instance
|
|
*/
|
|
public static final World world = Instance.getWorld();
|
|
int[] dye = { 238, 239, 272, 282, 515, 516 };
|
|
int[] newCapes = { 183, 512, 229, 513, 511, 514 };
|
|
|
|
private boolean attachFeathers(Player player, final InvItem feathers,
|
|
final InvItem item) {
|
|
int amount = 10;
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
if (feathers.getAmount() < amount) {
|
|
amount = feathers.getAmount();
|
|
}
|
|
if (item.getAmount() < amount) {
|
|
amount = item.getAmount();
|
|
}
|
|
InvItem newItem;
|
|
int exp;
|
|
ItemDartTipDef tipDef = null;
|
|
if (item.getID() == 280) {
|
|
newItem = new InvItem(637, amount);
|
|
exp = amount;
|
|
} else if ((tipDef = EntityHandler.getItemDartTipDef(item.getID())) != null) {
|
|
newItem = new InvItem(tipDef.getDartID(), amount);
|
|
exp = (int) (tipDef.getExp() * (double) amount);
|
|
} else {
|
|
return false;
|
|
}
|
|
final int amt = amount;
|
|
final int xp = exp;
|
|
final InvItem newItm = newItem;
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(feathers.getID(), amt) > -1
|
|
&& owner.getInventory().remove(item.getID(), amt) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You attach the feathers to the "
|
|
+ item.getDef().getName());
|
|
owner.getInventory().add(newItm);
|
|
owner.incExp(9, xp, true);
|
|
owner.getActionSender().sendStat(9);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean combineKeys(Player player, final InvItem firstHalf,
|
|
final InvItem secondHalf) {
|
|
if (secondHalf.getID() != 527) {
|
|
return false;
|
|
}
|
|
if (player.getInventory().remove(firstHalf) > -1
|
|
&& player.getInventory().remove(secondHalf) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You combine the key halves to make a crystal key.");
|
|
player.getInventory().add(new InvItem(525, 1));
|
|
player.getActionSender().sendInventory();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean doArrowHeads(Player player, final InvItem headlessArrows,
|
|
final InvItem arrowHeads) {
|
|
final ItemArrowHeadDef headDef = EntityHandler
|
|
.getItemArrowHeadDef(arrowHeads.getID());
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
|
|
if (headDef == null) {
|
|
return false;
|
|
}
|
|
if (player.getCurStat(9) < headDef.getReqLevel()) {
|
|
player.getActionSender().sendMessage(
|
|
"You need a fletching level of " + headDef.getReqLevel()
|
|
+ " to attach those.");
|
|
return true;
|
|
}
|
|
int amount = 10;
|
|
if (headlessArrows.getAmount() < amount) {
|
|
amount = headlessArrows.getAmount();
|
|
}
|
|
if (arrowHeads.getAmount() < amount) {
|
|
amount = arrowHeads.getAmount();
|
|
}
|
|
final int amt = amount;
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(headlessArrows.getID(), amt) > -1
|
|
&& owner.getInventory().remove(arrowHeads.getID(), amt) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You attach the heads to the arrows");
|
|
owner.getInventory().add(
|
|
new InvItem(headDef.getArrowID(), amt));
|
|
owner.incExp(9, (int) (headDef.getExp() * (double) amt),
|
|
true);
|
|
owner.getActionSender().sendStat(9);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean doBowString(Player player, final InvItem bowString,
|
|
final InvItem bow) {
|
|
final ItemBowStringDef stringDef = EntityHandler
|
|
.getItemBowStringDef(bow.getID());
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
|
|
if (stringDef == null) {
|
|
return false;
|
|
}
|
|
if (player.getCurStat(9) < stringDef.getReqLevel()) {
|
|
player.getActionSender().sendMessage(
|
|
"You need a fletching level of " + stringDef.getReqLevel()
|
|
+ " to do that.");
|
|
return true;
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(bowString) > -1
|
|
&& owner.getInventory().remove(bow) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You add the bow string to the bow");
|
|
owner.getInventory().add(
|
|
new InvItem(stringDef.getBowID(), 1));
|
|
owner.incExp(9, stringDef.getExp(), true);
|
|
owner.getActionSender().sendStat(9);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean doCutGem(Player player, final InvItem chisel,
|
|
final InvItem gem) {
|
|
final ItemGemDef gemDef = EntityHandler.getItemGemDef(gem.getID());
|
|
if (gemDef == null) {
|
|
return false;
|
|
}
|
|
if (player.getCurStat(12) < gemDef.getReqLevel()) {
|
|
player.getActionSender().sendMessage(
|
|
"You need a crafting level of " + gemDef.getReqLevel()
|
|
+ " to cut this gem");
|
|
return true;
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(gem) > -1) {
|
|
InvItem cutGem = new InvItem(gemDef.getGemID(), 1);
|
|
owner.getActionSender().sendMessage(
|
|
"You cut the " + cutGem.getDef().getName());
|
|
owner.getActionSender().sendSound("chisel");
|
|
owner.getInventory().add(cutGem);
|
|
owner.incExp(12, gemDef.getExp(), true);
|
|
owner.getActionSender().sendStat(12);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean doGlassBlowing(Player player, final InvItem pipe,
|
|
final InvItem glass) {
|
|
if (glass.getID() != 623) {
|
|
return false;
|
|
}
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
String[] options = new String[] { "Beer Glass", "Vial", "Orb",
|
|
"Cancel" };
|
|
owner.setMenuHandler(new MenuHandler(options) {
|
|
public void handleReply(final int option, final String reply) {
|
|
InvItem result;
|
|
int reqLvl, exp;
|
|
switch (option) {
|
|
case 0:
|
|
result = new InvItem(620, 1);
|
|
reqLvl = 1;
|
|
exp = 18;
|
|
break;
|
|
case 1:
|
|
result = new InvItem(465, 1);
|
|
reqLvl = 33;
|
|
exp = 35;
|
|
break;
|
|
case 2:
|
|
result = new InvItem(611, 1);
|
|
reqLvl = 46;
|
|
exp = 53;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
if (owner.getCurStat(12) < reqLvl) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need a crafting level of " + reqLvl
|
|
+ " to make a "
|
|
+ result.getDef().getName() + ".");
|
|
return;
|
|
}
|
|
if (owner.getInventory().remove(glass) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You make a " + result.getDef().getName());
|
|
owner.getInventory().add(result);
|
|
owner.incExp(12, exp, true);
|
|
owner.getActionSender().sendStat(12);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
owner.getActionSender().sendMenu(options);
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean doGrind(Player player, final InvItem mortar,
|
|
final InvItem item) {
|
|
int newID;
|
|
switch (item.getID()) {
|
|
case 466: // Unicorn Horn
|
|
newID = 473;
|
|
break;
|
|
case 467: // Blue dragon scale
|
|
newID = 472;
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
if (player.getInventory().remove(item) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You grind up the " + item.getDef().getName());
|
|
player.getInventory().add(new InvItem(newID, 1));
|
|
player.getActionSender().sendInventory();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean doHerblaw(Player player, final InvItem vial,
|
|
final InvItem herb) {
|
|
final ItemHerbDef herbDef = EntityHandler.getItemHerbDef(herb.getID());
|
|
if (herbDef == null) {
|
|
return false;
|
|
}
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
if (player.getCurStat(15) < herbDef.getReqLevel()) {
|
|
player.getActionSender().sendMessage(
|
|
"You need a herblaw level of " + herbDef.getReqLevel()
|
|
+ " to mix those.");
|
|
return true;
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(vial) > -1
|
|
&& owner.getInventory().remove(herb) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You add the " + herb.getDef().getName()
|
|
+ " to the water");
|
|
owner.getInventory().add(
|
|
new InvItem(herbDef.getPotionId(), 1));
|
|
// owner.incExp(15, herbDef.getExp(), true);
|
|
// owner.getActionSender().sendStat(15);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean doHerbSecond(Player player, final InvItem second,
|
|
final InvItem unfinished, final ItemHerbSecondDef def) {
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
if (unfinished.getID() != def.getUnfinishedID()) {
|
|
return false;
|
|
}
|
|
if (player.getCurStat(15) < def.getReqLevel()) {
|
|
player.getActionSender().sendMessage(
|
|
"You need a herblaw level of " + def.getReqLevel()
|
|
+ " to mix those");
|
|
return true;
|
|
}
|
|
if (player.getInventory().remove(second) > -1
|
|
&& player.getInventory().remove(unfinished) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You mix the " + second.getDef().getName() + " with the "
|
|
+ unfinished.getDef().getName());
|
|
player.getInventory().add(new InvItem(def.getPotionID(), 1));
|
|
player.incExp(15, def.getExp() * 2, true);
|
|
player.getActionSender().sendStat(15);
|
|
player.getActionSender().sendInventory();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean doLogCut(Player player, final InvItem knife,
|
|
final InvItem log) {
|
|
return doLogCut(player, knife, log,
|
|
((int) Math.ceil(player.getMaxStat(9) / 10)));
|
|
}
|
|
|
|
private boolean doLogCut(final Player player, final InvItem knife,
|
|
final InvItem log, int times) {
|
|
final int retries = --times;
|
|
final ItemLogCutDef cutDef = EntityHandler
|
|
.getItemLogCutDef(log.getID());
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
if (cutDef == null) {
|
|
return false;
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
String[] options = new String[] { "Arrow shafts", "Shortbow",
|
|
"Longbow", "Cancel" };
|
|
owner.setMenuHandler(new MenuHandler(options) {
|
|
public void handleReply(final int option, final String reply) {
|
|
InvItem result;
|
|
int reqLvl, exp;
|
|
switch (option) {
|
|
case 0:
|
|
result = new InvItem(280, cutDef.getShaftAmount());
|
|
reqLvl = cutDef.getShaftLvl();
|
|
exp = cutDef.getShaftExp();
|
|
break;
|
|
case 1:
|
|
result = new InvItem(cutDef.getShortbowID(), 1);
|
|
reqLvl = cutDef.getShortbowLvl();
|
|
exp = cutDef.getShortbowExp();
|
|
break;
|
|
case 2:
|
|
result = new InvItem(cutDef.getLongbowID(), 1);
|
|
reqLvl = cutDef.getLongbowLvl();
|
|
exp = cutDef.getLongbowExp();
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
if (owner.getCurStat(9) < reqLvl) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need a fletching level of " + reqLvl
|
|
+ " to cut that.");
|
|
return;
|
|
}
|
|
if (owner.getInventory().remove(log) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You make a " + result.getDef().getName());
|
|
owner.getInventory().add(result);
|
|
owner.incExp(9, exp, true);
|
|
owner.getActionSender().sendStat(9);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
if (retries > 0) {
|
|
doLogCut(player, knife, log, retries);
|
|
}
|
|
}
|
|
});
|
|
owner.getActionSender().sendMenu(options);
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
public void handlePacket(Packet p, IoSession session) throws Exception {
|
|
Player player = (Player) session.getAttachment();
|
|
if (player.isBusy()) {
|
|
player.resetPath();
|
|
return;
|
|
}
|
|
player.resetAll();
|
|
InvItem item1 = player.getInventory().get(p.readShort());
|
|
InvItem item2 = player.getInventory().get(p.readShort());
|
|
if (item1 == null || item2 == null) {
|
|
player.setSuspiciousPlayer(true);
|
|
return;
|
|
|
|
}
|
|
world.addEntryToSnapshots(new Activity(player.getUsername(), player
|
|
.getUsername()
|
|
+ " used item "
|
|
+ item1.getDef().getName()
|
|
+ "("
|
|
+ item1.getID()
|
|
+ ")"
|
|
+ " [CMD: "
|
|
+ item1.getDef().getCommand()
|
|
+ "] ON A ANOTHER INV ITEM "
|
|
+ item2.getDef().getName()
|
|
+ "("
|
|
+ item2.getID()
|
|
+ ")"
|
|
+ " [CMD: "
|
|
+ item2.getDef().getCommand()
|
|
+ "] at: " + player.getX() + "/" + player.getY()));
|
|
|
|
World.getQuestManager().handleUseItemOnItem(item1, item2, player);
|
|
|
|
ItemHerbSecondDef secondDef = null;
|
|
if ((secondDef = EntityHandler.getItemHerbSecond(item1.getID(),
|
|
item2.getID())) != null
|
|
&& doHerbSecond(player, item1, item2, secondDef)) {
|
|
return;
|
|
} else if ((secondDef = EntityHandler.getItemHerbSecond(item2.getID(),
|
|
item1.getID())) != null
|
|
&& doHerbSecond(player, item2, item1, secondDef)) {
|
|
return;
|
|
}
|
|
// water - empty water
|
|
/*
|
|
* int[][] jugs = { {50, 21}, {141, 140}, {342, 341} }; if(item1.getID()
|
|
* == 136 || item2.getID() == 136) { for(int i=0; i < jugs.length; i++)
|
|
* { if(item2.getID() == jugs[i][0]) {
|
|
* if(player.getInventory().remove(new InvItem(136)) > -1 &&
|
|
* player.getInventory().remove(new InvItem(jugs[i][0])) > -1) {
|
|
* player.getInventory().add(new InvItem(jugs[i][1]));
|
|
* player.getInventory().add(new InvItem(135));
|
|
* player.getInventory().add(new InvItem(250));
|
|
* player.getActionSender().sendInventory();
|
|
* player.getActionSender().sendMessage("You create pastry dough");
|
|
* return; } } } }
|
|
*/
|
|
// dish ingred id - uncooked dish id
|
|
int[][] stuff = { { 252, 254 }, { 132, 255 }, { 236, 256 } };
|
|
if (item1.getID() == 253 || item2.getID() == 253) {
|
|
for (int i = 0; i < stuff.length; i++) {
|
|
if (stuff[i][0] == item1.getID()
|
|
|| item2.getID() == stuff[i][0]) {
|
|
if (player.getInventory().remove(new InvItem(253)) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(stuff[i][0])) > -1) {
|
|
player.getInventory().add(new InvItem(stuff[i][1]));
|
|
player.getActionSender().sendMessage(
|
|
"You create an uncooked pie!");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (item1.getID() == 238 && item2.getID() == 239
|
|
|| item1.getID() == 239 && item2.getID() == 238) {
|
|
if (player.getInventory().remove(new InvItem(239)) > -1
|
|
&& player.getInventory().remove(new InvItem(238)) > -1) {
|
|
player.getInventory().add(new InvItem(282));
|
|
player.getActionSender().sendMessage("You mix the Dyes");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
// 1 dose on 2 dose str = 3 dose
|
|
if (item1.getID() == 224 && item2.getID() == 223
|
|
|| item1.getID() == 223 && item2.getID() == 224) {
|
|
if (player.getInventory().remove(new InvItem(224)) > -1
|
|
&& player.getInventory().remove(new InvItem(223)) > -1) {
|
|
player.getInventory().add(new InvItem(222));
|
|
player.getActionSender().sendMessage(
|
|
"You mix the strength potions");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
// 1 dose on 3 dose = 4 dose
|
|
if (item1.getID() == 224 && item2.getID() == 222
|
|
|| item1.getID() == 222 && item2.getID() == 224) {
|
|
if (player.getInventory().remove(new InvItem(224)) > -1
|
|
&& player.getInventory().remove(new InvItem(222)) > -1) {
|
|
player.getInventory().add(new InvItem(221));
|
|
player.getActionSender().sendMessage(
|
|
"You mix the strength potions");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// 2 dose on 2 dose = 4 dose
|
|
if (item1.getID() == 223 && item2.getID() == 223
|
|
|| item1.getID() == 223 && item2.getID() == 223) {
|
|
if (player.getInventory().remove(new InvItem(223)) > -1
|
|
&& player.getInventory().remove(new InvItem(223)) > -1) {
|
|
player.getInventory().add(new InvItem(221));
|
|
player.getActionSender().sendMessage(
|
|
"You mix the strength potions");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 224 && item2.getID() == 224
|
|
|| item1.getID() == 224 && item2.getID() == 224) {
|
|
if (player.getInventory().remove(new InvItem(224)) > -1
|
|
&& player.getInventory().remove(new InvItem(224)) > -1) {
|
|
player.getInventory().add(new InvItem(223));
|
|
player.getActionSender().sendMessage(
|
|
"You mix the strength potions");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 132 && item2.getID() == 342
|
|
|| item1.getID() == 342 && item2.getID() == 132) {
|
|
if (player.getInventory().remove(new InvItem(342)) > -1
|
|
&& player.getInventory().remove(new InvItem(132)) > -1) {
|
|
player.getInventory().add(new InvItem(344));
|
|
player.getActionSender().sendMessage(
|
|
"You start to create a stew");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 348 && item2.getID() == 342
|
|
|| item1.getID() == 342 && item2.getID() == 348) {
|
|
if (player.getInventory().remove(new InvItem(342)) > -1
|
|
&& player.getInventory().remove(new InvItem(348)) > -1) {
|
|
player.getInventory().add(new InvItem(343));
|
|
player.getActionSender().sendMessage(
|
|
"You start to create a stew");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 132 && item2.getID() == 343
|
|
|| item1.getID() == 343 && item2.getID() == 132) {
|
|
if (player.getInventory().remove(new InvItem(343)) > -1
|
|
&& player.getInventory().remove(new InvItem(132)) > -1) {
|
|
player.getInventory().add(new InvItem(345));
|
|
player.getActionSender().sendMessage(
|
|
"Your stew is now ready, but uncooked");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 348 && item2.getID() == 344
|
|
|| item1.getID() == 344 && item2.getID() == 348) {
|
|
if (player.getInventory().remove(new InvItem(344)) > -1
|
|
&& player.getInventory().remove(new InvItem(348)) > -1) {
|
|
player.getInventory().add(new InvItem(345));
|
|
player.getActionSender().sendMessage(
|
|
"our stew is now ready, but uncooked");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 337 && item2.getID() == 330
|
|
|| item1.getID() == 330 && item2.getID() == 337) {
|
|
if (player.getInventory().remove(new InvItem(337)) > -1
|
|
&& player.getInventory().remove(new InvItem(330)) > -1) {
|
|
player.getInventory().add(new InvItem(332));
|
|
player.getActionSender().sendMessage(
|
|
"You add chocolate to the cake");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
int egg = 19;
|
|
int milk = 22;
|
|
int flour = 136;
|
|
|
|
if (item1.getID() == 338 || item2.getID() == 338) {
|
|
if (player.getInventory().countId(egg) > -1
|
|
&& player.getInventory().countId(milk) > -1
|
|
&& player.getInventory().countId(flour) > -1) {
|
|
if (player.getInventory().remove(new InvItem(egg)) > -1
|
|
&& player.getInventory().remove(new InvItem(milk)) > -1
|
|
&& player.getInventory().remove(new InvItem(flour)) > -1
|
|
&& player.getInventory().remove(new InvItem(338)) > -1) {
|
|
player.getInventory().add(new InvItem(135));
|
|
player.getInventory().add(new InvItem(339));
|
|
player.getActionSender().sendInventory();
|
|
player.getActionSender().sendMessage(
|
|
"You create an uncooked cake");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (item1.getID() == 238 && item2.getID() == 239
|
|
|| item1.getID() == 239 && item2.getID() == 238) {
|
|
if (player.getInventory().remove(new InvItem(239)) > -1
|
|
&& player.getInventory().remove(new InvItem(238)) > -1) {
|
|
player.getInventory().add(new InvItem(282));
|
|
player.getActionSender().sendMessage("You mix the Dyes");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 250 && item2.getID() == 251
|
|
|| item1.getID() == 251 && item2.getID() == 250) {
|
|
if (player.getInventory().remove(new InvItem(251)) > -1
|
|
&& player.getInventory().remove(new InvItem(250)) > -1) {
|
|
player.getInventory().add(new InvItem(253));
|
|
player.getActionSender().sendMessage(
|
|
"You add the pastry dough in the dish");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 238 && item2.getID() == 272
|
|
|| item1.getID() == 272 && item2.getID() == 238) {
|
|
if (player.getInventory().remove(new InvItem(272)) > -1
|
|
&& player.getInventory().remove(new InvItem(238)) > -1) {
|
|
player.getInventory().add(new InvItem(516));
|
|
player.getActionSender().sendMessage("You mix the Dyes");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 239 && item2.getID() == 272
|
|
|| item1.getID() == 272 && item2.getID() == 239) {
|
|
if (player.getInventory().remove(new InvItem(272)) > -1
|
|
&& player.getInventory().remove(new InvItem(239)) > -1) {
|
|
player.getInventory().add(new InvItem(515));
|
|
player.getActionSender().sendMessage("You mix the Dyes");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
else if (item1.getID() == 1276 && item2.getID() == 1277) {
|
|
if (player.getInventory().remove(new InvItem(1276)) > -1
|
|
&& player.getInventory().remove(new InvItem(1277)) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You combine the two parts.");
|
|
player.getInventory().add(new InvItem(1278));
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}// here
|
|
else if (item1.getID() == 143 && item2.getID() == 141
|
|
|| item1.getID() == 141 && item2.getID() == 143) {
|
|
if (player.getCurStat(7) < 35) {
|
|
player.getActionSender().sendMessage(
|
|
"You need level 35 cooking to do this");
|
|
return;
|
|
}
|
|
if (player.getInventory().remove(new InvItem(141)) > -1
|
|
&& player.getInventory().remove(new InvItem(143)) > -1) {
|
|
int rand = Formulae.Rand(0, 4);
|
|
if (rand == 2) {
|
|
player.incExp(7, 55, true);
|
|
player.getInventory().add(new InvItem(180));
|
|
player.getActionSender()
|
|
.sendMessage(
|
|
"You mix the grapes, and accidentally create Bad wine!");
|
|
} else {
|
|
player.incExp(7, 110, true);
|
|
player.getInventory().add(new InvItem(142));
|
|
player.getActionSender()
|
|
.sendMessage(
|
|
"You mix the grapes with the water and create wine!");
|
|
}
|
|
player.getActionSender().sendStat(7);
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
for (Integer il : capes) {
|
|
if (il == item1.getID()) {
|
|
for (int i = 0; i < dye.length; i++) {
|
|
if (dye[i] == item2.getID()) {
|
|
if (player.getInventory().remove(
|
|
new InvItem(item1.getID())) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(item2.getID())) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You dye the Cape");
|
|
player.getInventory().add(new InvItem(newCapes[i]));
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
} else if (il == item2.getID()) {
|
|
for (int i = 0; i < dye.length; i++) {
|
|
if (dye[i] == item1.getID()) {
|
|
if (player.getInventory().remove(
|
|
new InvItem(item1.getID())) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(item2.getID())) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You dye the Cape");
|
|
player.getInventory().add(new InvItem(newCapes[i]));
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (item1.getID() == 141 && item2.getID() == 136
|
|
|| item1.getID() == 136 && item2.getID() == 141) {
|
|
player.getActionSender()
|
|
.sendMessage("What would you like to make?");
|
|
String[] optionsz = new String[] { "Bread Dough", "Pizza Base",
|
|
"Pastry Dough" };
|
|
|
|
player.setMenuHandler(new MenuHandler(optionsz) {
|
|
public void handleReply(final int option, final String reply) {
|
|
int newid = 0;
|
|
if (option == 0) {
|
|
newid = 137;
|
|
} else if (option == 1) {
|
|
newid = 321;
|
|
} else if (option == 2) {
|
|
newid = 250;
|
|
} else {
|
|
return;
|
|
}
|
|
if (owner.getInventory().remove(new InvItem(141)) > -1
|
|
&& owner.getInventory().remove(new InvItem(136)) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You create a " + reply);
|
|
owner.getInventory().add(new InvItem(140));
|
|
owner.getInventory().add(new InvItem(135));
|
|
owner.getInventory().add(new InvItem(newid));
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
|
|
}
|
|
});
|
|
player.getActionSender().sendMenu(optionsz);
|
|
return;
|
|
}
|
|
|
|
if (item1.getID() == 50 && item2.getID() == 136 || item1.getID() == 136
|
|
&& item2.getID() == 50) {
|
|
player.getActionSender()
|
|
.sendMessage("What would you like to make?");
|
|
String[] optionsz = new String[] { "Bread Dough", "Pizza Base",
|
|
"Pastry Dough" };
|
|
player.setMenuHandler(new MenuHandler(optionsz) {
|
|
public void handleReply(final int option, final String reply) {
|
|
int newid = 0;
|
|
if (option == 0) {
|
|
newid = 137;
|
|
} else if (option == 1) {
|
|
newid = 321;
|
|
} else if (option == 2) {
|
|
newid = 250;
|
|
} else {
|
|
return;
|
|
}
|
|
if (owner.getInventory().remove(new InvItem(50)) > -1
|
|
&& owner.getInventory().remove(new InvItem(136)) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You create a " + reply);
|
|
owner.getInventory().add(new InvItem(21));
|
|
owner.getInventory().add(new InvItem(135));
|
|
owner.getInventory().add(new InvItem(newid));
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
|
|
}
|
|
});
|
|
player.getActionSender().sendMenu(optionsz);
|
|
return;
|
|
}
|
|
|
|
if (item1.getID() == 273 && item2.getID() == 282
|
|
|| item1.getID() == 282 && item2.getID() == 273) {
|
|
if (player.getInventory().remove(new InvItem(282)) > -1
|
|
&& player.getInventory().remove(new InvItem(273)) > -1) {
|
|
player.getInventory().add(new InvItem(274));
|
|
player.getActionSender()
|
|
.sendMessage("You dye the goblin armor");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 273 && item2.getID() == 272
|
|
|| item1.getID() == 272 && item2.getID() == 273) {
|
|
if (player.getInventory().remove(new InvItem(272)) > -1
|
|
&& player.getInventory().remove(new InvItem(273)) > -1) {
|
|
player.getInventory().add(new InvItem(275));
|
|
player.getActionSender()
|
|
.sendMessage("You dye the goblin armor");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (item1.getID() == 320 && item2.getID() == 321
|
|
|| item1.getID() == 321 && item2.getID() == 320) {
|
|
if (player.getInventory().remove(new InvItem(321)) > -1
|
|
&& player.getInventory().remove(new InvItem(320)) > -1) {
|
|
player.getInventory().add(new InvItem(323));
|
|
player.getActionSender().sendMessage(
|
|
"You add the Tomato to the Pizza base");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 319 && item2.getID() == 323
|
|
|| item1.getID() == 323 && item2.getID() == 319) {
|
|
if (player.getInventory().remove(new InvItem(323)) > -1
|
|
&& player.getInventory().remove(new InvItem(319)) > -1) {
|
|
player.getInventory().add(new InvItem(324));
|
|
player.getActionSender().sendMessage(
|
|
"You add Cheese on the Unfinished Pizza");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 325 && item2.getID() == 352
|
|
|| item1.getID() == 352 && item2.getID() == 325) {
|
|
if (player.getCurStat(7) > 54) {
|
|
if (player.getInventory().remove(new InvItem(352)) > -1
|
|
&& player.getInventory().remove(new InvItem(325)) > -1) {
|
|
player.getInventory().add(new InvItem(327));
|
|
player.incExp(7, 110, true);
|
|
player.getActionSender().sendStat(7);
|
|
player.getActionSender().sendMessage(
|
|
"You create an Anchovie Pizza.");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
} else {
|
|
player.getActionSender().sendMessage(
|
|
"You need a cooking level of 55 to do this");
|
|
return;
|
|
}
|
|
}
|
|
if (item1.getID() == 325 && item2.getID() == 132
|
|
|| item1.getID() == 132 && item2.getID() == 325) {
|
|
if (player.getCurStat(7) > 44) {
|
|
if (player.getInventory().remove(new InvItem(132)) > -1
|
|
&& player.getInventory().remove(new InvItem(325)) > -1) {
|
|
player.getInventory().add(new InvItem(326));
|
|
player.incExp(7, 110, true);
|
|
player.getActionSender().sendStat(7);
|
|
player.getActionSender().sendMessage(
|
|
"You create a Meat Pizza.");
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
} else {
|
|
player.getActionSender().sendMessage(
|
|
"You need a cooking level of 44 to do this");
|
|
return;
|
|
}// doHerblaw
|
|
}
|
|
if (item2.getID() == 1276 && item1.getID() == 1277) {
|
|
if (player.getInventory().remove(new InvItem(1276)) > -1
|
|
&& player.getInventory().remove(new InvItem(1277)) > -1) {
|
|
player.getActionSender().sendMessage(
|
|
"You combine the two parts.");
|
|
player.getInventory().add(new InvItem(1278));
|
|
player.getActionSender().sendInventory();
|
|
return;
|
|
}
|
|
} else if (item1.getID() == 381 && attachFeathers(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 381 && attachFeathers(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 167 && doCutGem(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 167 && doCutGem(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 13 && doLogCut(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 13 && doLogCut(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 464 && doHerblaw(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 464 && doHerblaw(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 676 && doBowString(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 676 && doBowString(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 637 && doArrowHeads(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 637 && doArrowHeads(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 468 && doGrind(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 468 && doGrind(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 207 && useWool(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 207 && useWool(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 39 && makeLeather(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 39 && makeLeather(player, item2, item1)) {
|
|
return;
|
|
} else if (item1.getID() == 621 && doGlassBlowing(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 621 && doGlassBlowing(player, item2, item1)) {
|
|
return;
|
|
} else if ((item1.getID() == 50 || item1.getID() == 141 || item1
|
|
.getID() == 342) && useWater(player, item1, item2)) {
|
|
return;
|
|
} else if ((item2.getID() == 50 || item2.getID() == 141 || item2
|
|
.getID() == 342) && useWater(player, item2, item1)) {
|
|
return;
|
|
}
|
|
|
|
else if (item1.getID() == 526 && combineKeys(player, item1, item2)) {
|
|
return;
|
|
} else if (item2.getID() == 526 && combineKeys(player, item2, item1)) {
|
|
return;
|
|
} else if ((item1.getID() == 23 && item2.getID() == 135)
|
|
|| (item2.getID() == 23 && item1.getID() == 135)) {
|
|
if (player.getInventory().remove(new InvItem(23)) > -1
|
|
&& player.getInventory().remove(new InvItem(135)) > -1) {
|
|
player.getInventory().add(new InvItem(136));
|
|
player.getActionSender().sendInventory();
|
|
player.getActionSender().sendMessage(
|
|
"You pour the flour into the pot.");
|
|
return;
|
|
}
|
|
} else {
|
|
|
|
int[][] combinePotions = { { 475, 476, 474 }, // Attack potions.
|
|
{ 478, 479, 477 }, // Stat restore potions
|
|
{ 481, 482, 480 }, // Defense potions
|
|
{ 484, 485, 483 }, // Prayer potion
|
|
{ 487, 488, 486 }, // SAP
|
|
{ 490, 491, 489 }, // Fishing potion
|
|
{ 493, 494, 492 }, // SSP
|
|
{ 496, 497, 495 }, // SDP
|
|
{ 499, 500, 498 } // Range pot
|
|
};
|
|
|
|
for (int i = 0; i < combinePotions.length; i++) {
|
|
if ((item1.getID() == combinePotions[i][0] && item2.getID() == combinePotions[i][1])
|
|
|| (item2.getID() == combinePotions[i][0] && item1
|
|
.getID() == combinePotions[i][1])) {
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return;
|
|
}
|
|
if (player.getInventory().remove(
|
|
new InvItem(combinePotions[i][0])) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(combinePotions[i][1])) > -1) {
|
|
player.getInventory().add(
|
|
new InvItem(combinePotions[i][2]));
|
|
player.getActionSender().sendInventory();
|
|
player.getActionSender().sendMessage(
|
|
"You combine the Potions");
|
|
return;
|
|
}
|
|
} else if (item1.getID() == combinePotions[i][1]
|
|
&& item2.getID() == combinePotions[i][1]) {
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return;
|
|
}
|
|
if (player.getInventory().remove(
|
|
new InvItem(combinePotions[i][1])) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(combinePotions[i][1])) > -1) {
|
|
if (!Server.isMembers()) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return;
|
|
}
|
|
player.getInventory().add(
|
|
new InvItem(combinePotions[i][0]));
|
|
player.getActionSender().sendInventory();
|
|
player.getActionSender().sendMessage(
|
|
"You combine the Potions");
|
|
return;
|
|
} else if (item1.getID() == combinePotions[i][0]
|
|
&& item2.getID() == combinePotions[i][0]) {
|
|
if (!Config.members) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return;
|
|
}
|
|
if (player.getInventory().remove(
|
|
new InvItem(combinePotions[i][0])) > -1
|
|
&& player.getInventory().remove(
|
|
new InvItem(combinePotions[i][0])) > -1) {
|
|
player.getInventory().add(
|
|
new InvItem(combinePotions[i][2]));
|
|
player.getInventory().add(
|
|
new InvItem(combinePotions[i][1]));
|
|
player.getActionSender().sendInventory();
|
|
player.getActionSender().sendMessage(
|
|
"You combine the Potions");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
player.getActionSender().sendMessage("Nothing interesting happens");
|
|
}
|
|
}
|
|
|
|
private boolean makeLeather(Player player, final InvItem needle,
|
|
final InvItem leather) {
|
|
if (leather.getID() != 148) {
|
|
return false;
|
|
}
|
|
if (player.getInventory().countId(43) < 1) {
|
|
player.getActionSender().sendMessage(
|
|
"You need some thread to make anything out of leather");
|
|
return true;
|
|
}
|
|
if (DataConversions.random(0, 5) == 0) {
|
|
player.getInventory().remove(43, 1);
|
|
}
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
String[] options = new String[] { "Armour", "Gloves", "Boots",
|
|
"Cancel" };
|
|
owner.setMenuHandler(new MenuHandler(options) {
|
|
public void handleReply(final int option, final String reply) {
|
|
InvItem result;
|
|
int reqLvl, exp;
|
|
switch (option) {
|
|
case 0:
|
|
result = new InvItem(15, 1);
|
|
reqLvl = 14;
|
|
exp = 25;
|
|
break;
|
|
case 1:
|
|
result = new InvItem(16, 1);
|
|
reqLvl = 1;
|
|
exp = 14;
|
|
break;
|
|
case 2:
|
|
result = new InvItem(17, 1);
|
|
reqLvl = 7;
|
|
exp = 17;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
if (owner.getCurStat(12) < reqLvl) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need a crafting level of " + reqLvl
|
|
+ " to make "
|
|
+ result.getDef().getName() + ".");
|
|
return;
|
|
}
|
|
if (owner.getInventory().remove(leather) > -1) {
|
|
owner.getActionSender().sendMessage(
|
|
"You make some "
|
|
+ result.getDef().getName());
|
|
owner.getInventory().add(result);
|
|
owner.incExp(12, exp, true);
|
|
owner.getActionSender().sendStat(12);
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
owner.getActionSender().sendMenu(options);
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
private boolean useWater(Player player, final InvItem water,
|
|
final InvItem item) {
|
|
int jugID = Formulae.getEmptyJug(water.getID());
|
|
if (jugID == -1) { // This shouldn't happen
|
|
return false;
|
|
}
|
|
switch (item.getID()) {
|
|
case 149: // Clay
|
|
if (player.getInventory().remove(water) > -1
|
|
&& player.getInventory().remove(item) > -1) {
|
|
player.getActionSender().sendMessage("You soften the clay.");
|
|
player.getInventory().add(new InvItem(jugID, 1));
|
|
player.getInventory().add(new InvItem(243, 1));
|
|
player.getActionSender().sendInventory();
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean useWool(Player player, final InvItem woolBall,
|
|
final InvItem item) {
|
|
int newID;
|
|
switch (item.getID()) {
|
|
case 44: // Holy Symbol of saradomin
|
|
newID = 45;
|
|
break;
|
|
case 1027: // Unholy Symbol of Zamorak
|
|
newID = 1028;
|
|
break;
|
|
case 296: // Gold Amulet
|
|
newID = 301;
|
|
break;
|
|
case 297: // Sapphire Amulet
|
|
newID = 302;
|
|
break;
|
|
case 298: // Emerald Amulet
|
|
newID = 303;
|
|
break;
|
|
case 299: // Ruby Amulet
|
|
newID = 304;
|
|
break;
|
|
case 300: // Diamond Amulet
|
|
newID = 305;
|
|
break;
|
|
case 524: // Dragonstone Amulet
|
|
if (!Server.isMembers()) {
|
|
player.getActionSender().sendMessage(
|
|
"This feature is not avaliable in f2p");
|
|
return true;
|
|
}
|
|
newID = 610;
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
final int newId = newID;
|
|
Instance.getDelayedEventHandler().add(new MiniEvent(player) {
|
|
public void action() {
|
|
if (owner.getInventory().remove(woolBall) > -1
|
|
&& owner.getInventory().remove(item) > -1) {
|
|
owner.getActionSender()
|
|
.sendMessage("You string the amulet");
|
|
owner.getInventory().add(new InvItem(newId, 1));
|
|
owner.getActionSender().sendInventory();
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
}
|