198 lines
5.5 KiB
Java
198 lines
5.5 KiB
Java
package org.moparscape.msc.gs.plugins.plugs.skills;
|
|
|
|
import org.moparscape.msc.config.Formulae;
|
|
import org.moparscape.msc.gs.Instance;
|
|
import org.moparscape.msc.gs.event.ShortEvent;
|
|
import org.moparscape.msc.gs.event.SingleEvent;
|
|
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.Player;
|
|
import org.moparscape.msc.gs.model.definition.EntityHandler;
|
|
import org.moparscape.msc.gs.model.definition.skill.ObjectMiningDef;
|
|
import org.moparscape.msc.gs.plugins.listeners.ObjectListener;
|
|
import org.moparscape.msc.gs.tools.DataConversions;
|
|
|
|
public class Mining implements ObjectListener {
|
|
|
|
@Override
|
|
public int[] getAssociatedIDS() {
|
|
// rock ID's
|
|
return new int[] { 176, 100, 101, 102, 103, 104, 105, 106, 107, 108,
|
|
109, 110, 111, 112, 113, 114, 115, 195, 196, 210, 211 };
|
|
}
|
|
|
|
@Override
|
|
public boolean onObjectAction(final GameObject object, String command,
|
|
Player owner) {
|
|
|
|
owner.setSkillLoops(0);
|
|
handleMining(object, owner, owner.getClick());
|
|
return true;
|
|
}
|
|
|
|
// just picks the best pickaxe the player can use.
|
|
public int getAxe(Player p) {
|
|
int lv = p.getCurStat(14);
|
|
for (int i = 0; i < Formulae.miningAxeIDs.length; i++) {
|
|
if (p.getInventory().countId(Formulae.miningAxeIDs[i]) > 0) {
|
|
if (lv >= Formulae.miningAxeLvls[i]) {
|
|
return Formulae.miningAxeIDs[i];
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public void handleMining(final GameObject object, Player owner, int click) {
|
|
if (owner.isBusy() && !owner.inCombat()) {
|
|
return;
|
|
}
|
|
if (!owner.withinRange(object, 1))
|
|
return;
|
|
final GameObject newobject = Instance.getWorld()
|
|
.getTile(object.getX(), object.getY()).getGameObject();
|
|
final ObjectMiningDef def = EntityHandler.getObjectMiningDef(newobject
|
|
.getID());
|
|
if (def == null || def.getRespawnTime() < 1) {
|
|
owner.getActionSender().sendMessage(
|
|
"There is currently no ore available in this rock.");
|
|
return;
|
|
}
|
|
final InvItem ore = new InvItem(def.getOreId());
|
|
if (owner.getClick() == 1) {
|
|
owner.getActionSender().sendMessage(
|
|
"This rock contains " + ore.getDef().getName() + ".");
|
|
return;
|
|
}
|
|
|
|
if (owner.getCurStat(14) < def.getReqLevel()) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need a mining level of " + def.getReqLevel()
|
|
+ " to mine this rock.");
|
|
return;
|
|
}
|
|
int axeId = getAxe(owner);
|
|
|
|
if (axeId < 0) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need a pickaxe to mine this rock.");
|
|
return;
|
|
}
|
|
final int axeID = axeId;
|
|
int retrytimes = -1;
|
|
final int swings = owner.getSkillLoops();
|
|
final int mineLvl = owner.getCurStat(14);
|
|
int reqlvl = 1;
|
|
switch (axeID) {
|
|
case 1258:
|
|
retrytimes = 2;
|
|
break;
|
|
case 1259:
|
|
retrytimes = 4;
|
|
reqlvl = 6;
|
|
break;
|
|
case 1260:
|
|
retrytimes = 6;
|
|
reqlvl = 21;
|
|
break;
|
|
case 1261:
|
|
retrytimes = 8;
|
|
reqlvl = 31;
|
|
break;
|
|
case 1262:
|
|
retrytimes = 12;
|
|
reqlvl = 41;
|
|
break;
|
|
|
|
}
|
|
|
|
if (reqlvl > mineLvl) {
|
|
owner.getActionSender().sendMessage(
|
|
"You need to be level " + reqlvl + " to use this pick.");
|
|
return;
|
|
}
|
|
owner.setBusy(true);
|
|
//owner.isMining(true);
|
|
|
|
owner.getActionSender().sendSound("mine");
|
|
Bubble bubble = new Bubble(owner, axeId);
|
|
for (Player p : owner.getViewArea().getPlayersInView()) {
|
|
p.informOfBubble(bubble);
|
|
}
|
|
|
|
final int retrytime = retrytimes;
|
|
//owner.setLastMineTimer(GameEngine.getTime());
|
|
owner.getActionSender().sendMessage(
|
|
"You swing your pick at the rock...");
|
|
Instance.getDelayedEventHandler().add(new ShortEvent(owner) {
|
|
public void action() {
|
|
//if(!owner.isMining()) {
|
|
//owner.setBusy(false);
|
|
//return;
|
|
//}
|
|
if (Formulae.getOre(def, owner.getCurStat(14), axeID)) {
|
|
if (DataConversions.random(0, 200) == 0) {
|
|
InvItem gem = new InvItem(Formulae.getGem(), 1);
|
|
owner.incExp(14, 100, true);
|
|
owner.getInventory().add(gem);
|
|
owner.getActionSender().sendMessage("You found a gem!");
|
|
} else {
|
|
owner.getInventory().add(ore);
|
|
owner.getActionSender().sendMessage(
|
|
"You manage to obtain some "
|
|
+ ore.getDef().getName() + ".");
|
|
owner.incExp(14, def.getExp(), true);
|
|
owner.getActionSender().sendStat(14);
|
|
world.registerGameObject(new GameObject(object
|
|
.getLocation(), 98, object.getDirection(),
|
|
object.getType()));
|
|
world.delayedSpawnObject(newobject.getLoc(),
|
|
def.getRespawnTime() * 1000);
|
|
}
|
|
//owner.isMining(false);
|
|
//owner.setSkillLoops(0);
|
|
owner.getActionSender().sendInventory();
|
|
} else {
|
|
boolean retry = false;
|
|
if (retrytime - swings > 0)
|
|
retry = true;
|
|
owner.getActionSender().sendMessage(
|
|
"You only succeed in scratching the rock.");
|
|
if (retry) {
|
|
world.getDelayedEventHandler().add(
|
|
|
|
new SingleEvent(owner, 500) {
|
|
public void action() {
|
|
if(!owner.isMining() || owner.inCombat()) {
|
|
return;
|
|
}
|
|
owner.setSkillLoops(swings + 1);
|
|
handleMining(object, owner,
|
|
owner.getClick());
|
|
}
|
|
});
|
|
}
|
|
//if (!retry) {
|
|
// owner.isMining(false);
|
|
// owner.setSkillLoops(0);
|
|
//}
|
|
}
|
|
owner.setBusy(false);
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public boolean onObjectCreation(GameObject obj, Player player) {
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean onObjectRemoval(GameObject obj) {
|
|
|
|
return true;
|
|
}
|
|
|
|
} |