Refactor mining, add all the rocks and ores (#104)

* add blurite ore

* update randomness

* remove randomness

* refactor mining

* add gems
This commit is contained in:
Danial
2019-10-25 17:08:53 +13:00
committed by Daniel Ginovker
parent b5c2a8fa59
commit 20135d096f
4 changed files with 149 additions and 215 deletions
@@ -17,66 +17,126 @@ public class Mining {
{1271, 31, 5, 629}, //Addy {1271, 31, 5, 629}, //Addy
{1273, 21, 4, 628}, //Mithril {1273, 21, 4, 628}, //Mithril
{1275, 41, 6, 624}, //Rune {1275, 41, 6, 624}, //Rune
}; };
public final int[][] Rock_Settings = { public static enum gems {
{2091, 1, 18, 3, 436}, //Copper OPAL(1625, 60),
{2095, 1, 18, 3, 438}, //Tin JADE(1627, 30),
{2093, 15, 35, 7, 440}, //Iron RED_TOPAZ(1629, 15),
{2097, 30, 50, 38, 453}, //Coal SAPHIRE(1623, 9),
{2103, 55, 80, 155, 447}, //Mithril EMERALD(1621, 5),
{2105, 70, 95, 315, 449}, //Addy RUBY(1619, 5),
{2107, 85, 125, 970, 451}, //Rune DIAMOND(1617, 4);
{2090, 1, 18, 3, 436}, //Copper
{2094, 1, 18, 3, 438}, //Tin
{2092, 15, 35, 7, 440}, //Iron
{2096, 30, 50, 38, 453}, //Coal
{2102, 55, 80, 155, 447}, //Mithril
{2104, 70, 95, 315, 449}, //Addy
{2106, 85, 125, 970, 451}, //Rune
{2100, 20, 40, 78, 442}, //Silver
{2101, 20, 40, 78, 442}, //Silver
{2098, 40, 65, 78, 444}, //Gold
{2099, 40, 65, 78, 444}, //Gold
{3042, 1, 18, 3, 436}, //Copper
{3043, 1, 18, 3, 438}, //Tin
{2109, 1, 18, 3, 434}, //Clay
{2108, 1, 18, 3, 434}, //Clay
{2491, 1, 5, 0, 1436}, // Rune Essence
{2491, 30, 5, 0, 7936}, // Pure Rune Essence
};
public int getRandomAdd() { public final int itemID;
int random = 0; public final int chance;
for (int i = 0; i < Rock_Settings.length; i++) {
if (Rock_Settings[i][3] == 3) { gems(int itemID, int chance){
random = Misc.random(3); this.itemID = itemID;
} else if (Rock_Settings[i][3] == 7) { this.chance = chance;
random = Misc.random(7); }
} else if (Rock_Settings[i][3] == 38) {
random = Misc.random(38);
} else if (Rock_Settings[i][3] == 78) { public static int getRandom(){
random = Misc.random(78); final int maxChance = 128;
} else if (Rock_Settings[i][3] == 155) { int random = (int) Math.floor(Math.random() * maxChance);
random = Misc.random(155); int index = 0;
} else if (Rock_Settings[i][3] == 315) { for (gems gem: gems.values()){
random = Misc.random(315); index += gem.chance;
} else if (Rock_Settings[i][3] == 970) { if (index >= random)
random = Misc.random(970); return gem.itemID;
} }
return gems.OPAL.itemID;
} }
return random;
} }
int a = -1; public static enum rockData {
ESSENCE(new int[] { 2491 }, 1, 5, 2, 0, new int[] { 1436, 7936 }),
CLAY(new int[] { 2108, 2109, 11189, 11190, 11191, 9713, 9711, 14905, 14904 }, 1, 5, 1, 2, new int[] { 434 }),
COPPER(new int[] { 3042, 2091, 2090, 9708, 9709, 9710, 11960, 14906, 14907 }, 1, 18, 1, 4, new int[] { 436 }),
TIN(new int[] { 2094, 2095, 3043, 9716, 9714, 11958, 11957, 11959, 11933, 11934, 11935, 14903, 14902 }, 1, 18, 1, 4, new int[] { 438 }),
BLURITE(new int[] { 10574, 10583, 2110 }, 10, 20, 1, 42, new int[] { 668 }),
IRON(new int[] { 2093, 2092, 9717, 9718, 9719, 11962, 11956, 11954, 14856, 14857, 14858, 14914, 14913 }, 15, 35, 2, 9, new int[] { 440 }),
SILVER(new int[] { 2101, 11186, 11187, 11188, 2100 }, 20, 40, 3, 100, new int[] { 442 }),
COAL(new int[] { 2096, 2097, 11963, 11964, 14850, 14851, 14852, 11930, 11931 }, 30, 50, 4, 50, new int[] { 453 }),
GOLD(new int[] { 2099, 2098, 11183, 11184, 11185, 9720, 9722 }, 40, 65, 6, 100, new int[] { 444 }),
MITHRIL(new int[] { 2103, 2102, 14853, 14854, 14855 }, 55, 80, 8, 200, new int[] { 447 }),
ADAMANT(new int[] { 2104, 2105, 14862, 14863, 14864 }, 70, 95, 10, 400, new int[] { 449 }),
RUNE(new int[] { 14859, 14860, 2106, 2107 }, 85, 125, 20, 1200, new int[] { 451 }),
GRANITE(new int[] { 10947 }, 45, 75, 10, 8, new int[] { 6979, 6981, 6983 }),
SANDSTONE(new int[] { 10946 }, 35, 60, 5, 8, new int[] { 6971, 6973, 6975, 6977 }),
GEM(new int[] {2111}, 40, 65, 6, 175, new int[] {});
private final int levelReq, mineTimer, respawnTimer, xp;
private final int[] oreIds;
private final int[] objectId;
private rockData(final int[] objectId, final int levelReq, final int xp, final int mineTimer, final int respawnTimer, final int... oreIds) {
this.objectId = objectId;
this.levelReq = levelReq;
this.xp = xp;
this.mineTimer = mineTimer;
this.respawnTimer = respawnTimer;
this.oreIds = oreIds;
}
public int getObject(final int object) {
for (int element : objectId) {
if (object == element) {
return element;
}
}
return -1;
}
public static rockData getRock(final int object) {
for (final rockData rock : rockData.values()) {
if (object == rock.getObject(object)) {
return rock;
}
}
return null;
}
public int getRequiredLevel() {
return levelReq;
}
public int getXp() {
return xp;
}
public int getTimer() {
return mineTimer;
}
public int getRespawnTimer() {
return respawnTimer;
}
public int[] getOreIds() {
return oreIds;
}
public int getOre(int playerLevel){
if (this == this.ESSENCE)
return playerLevel < 30 ? oreIds[0] : oreIds[1];
if (this == this.GEM)
return gems.getRandom();
// return a random ore from the possibilities
return oreIds[(int) Math.floor(Math.random() * oreIds.length)];
}
}
int pickaxe = -1;
public void repeatAnimation(final Client c) { public void repeatAnimation(final Client c) {
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() { CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override @Override
public void execute(CycleEventContainer container) { public void execute(CycleEventContainer container) {
if (c.isMining) { if (c.isMining) {
c.startAnimation(Pick_Settings[a][3]); c.startAnimation(Pick_Settings[pickaxe][3]);
} else { } else {
container.stop(); container.stop();
} }
@@ -90,26 +150,27 @@ public class Mining {
}, 3); }, 3);
} }
public void startMining(final Client player, final int objectNumber, final int objectX, final int objectY, final int type) { public void startMining(final Client player, final int objectID, final int objectX, final int objectY, final int type) {
if (player.isMining) if (player.isMining || player.miningRock) return;
return;
if (player.miningRock)
return;
int miningLevel = player.playerLevel[player.playerMining]; int miningLevel = player.playerLevel[player.playerMining];
a = -1; rockData rock = rockData.getRock(objectID);
pickaxe = -1;
player.turnPlayerTo(objectX, objectY); player.turnPlayerTo(objectX, objectY);
if (Rock_Settings[objectNumber][1] > miningLevel) { // check if the player has required level for this rock
player.getActionSender().sendMessage("You need a Mining level of " + Rock_Settings[objectNumber][1] + " to mine this rock."); if (rock.getRequiredLevel() > miningLevel) {
player.getActionSender().sendMessage("You need a Mining level of " + rock.getRequiredLevel() + " to mine this rock.");
return; return;
} }
// check id the player has a pickaxe they can use on them
for (int i = 0; i < Pick_Settings.length; i++) { for (int i = 0; i < Pick_Settings.length; i++) {
if (player.getItemAssistant().playerHasItem(Pick_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Pick_Settings[i][0]) { if (player.getItemAssistant().playerHasItem(Pick_Settings[i][0]) || player.playerEquipment[player.playerWeapon] == Pick_Settings[i][0]) {
if (Pick_Settings[i][1] <= miningLevel) { if (Pick_Settings[i][1] <= miningLevel) {
a = i; pickaxe = i;
} }
} }
} }
if (a == -1) { if (pickaxe == -1) {
player.getActionSender().sendMessage("You need a pickaxe to mine this rock."); player.getActionSender().sendMessage("You need a pickaxe to mine this rock.");
return; return;
} }
@@ -117,12 +178,15 @@ public class Mining {
player.getActionSender().sendMessage("You do not have enough inventory slots to do that."); player.getActionSender().sendMessage("You do not have enough inventory slots to do that.");
return; return;
} }
player.startAnimation(Pick_Settings[a][3]);
player.startAnimation(Pick_Settings[pickaxe][3]);
player.isMining = true; player.isMining = true;
repeatAnimation(player); repeatAnimation(player);
player.rockX = objectX; player.rockX = objectX;
player.rockY = objectY; player.rockY = objectY;
player.miningRock = true; player.miningRock = true;
// Tutorial only stuff
if (player.tutorialProgress == 17 || player.tutorialProgress == 18) { if (player.tutorialProgress == 17 || player.tutorialProgress == 18) {
player.getActionSender().chatbox(6180); player.getActionSender().chatbox(6180);
player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to mine the rock.", "This should only take a few seconds.", "", "Please wait"); player.getDialogueHandler().chatboxText(player, "", "Your character is now attempting to mine the rock.", "This should only take a few seconds.", "", "Please wait");
@@ -130,21 +194,23 @@ public class Mining {
} else { } else {
player.getActionSender().sendMessage("You swing your pick at the rock."); player.getActionSender().sendMessage("You swing your pick at the rock.");
} }
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() { CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override @Override
public void execute(CycleEventContainer container) { public void execute(CycleEventContainer container) {
int oreID = rock.getOre(miningLevel);
if (!player.isMining) { if (!player.isMining) {
container.stop(); container.stop();
player.startAnimation(65535); player.startAnimation(65535);
return; return;
} }
if (player.isMining) { if (player.isMining) {
player.getItemAssistant().addItem(Rock_Settings[objectNumber][4], 1); player.getItemAssistant().addItem(oreID, 1);
player.getPlayerAssistant().addSkillXP(Rock_Settings[objectNumber][2], player.playerMining); player.getPlayerAssistant().addSkillXP(rock.getXp(), player.playerMining);
player.getActionSender().sendMessage("You manage to mine some " + ItemAssistant.getItemName(Rock_Settings[objectNumber][4]).toLowerCase() + "."); player.getActionSender().sendMessage("You manage to mine some " + ItemAssistant.getItemName(oreID).toLowerCase() + ".");
} }
if (player.tutorialProgress == 17) { if (player.tutorialProgress == 17) {
if (objectNumber == 18) { if (rock != rockData.TIN) {
player.getDialogueHandler().sendStatement("You should mine tin first."); player.getDialogueHandler().sendStatement("You should mine tin first.");
resetMining(player); resetMining(player);
return; return;
@@ -155,7 +221,7 @@ public class Mining {
player.tutorialProgress = 18; player.tutorialProgress = 18;
} }
} else if (player.tutorialProgress == 18) { } else if (player.tutorialProgress == 18) {
if (objectNumber == 19) { if (rock != rockData.COPPER) {
player.getDialogueHandler().sendStatement("You have already mined this type of ore, now try the other."); player.getDialogueHandler().sendStatement("You have already mined this type of ore, now try the other.");
resetMining(player); resetMining(player);
return; return;
@@ -169,10 +235,10 @@ public class Mining {
player.getActionSender().sendMessage("You have ran out of inventory slots."); player.getActionSender().sendMessage("You have ran out of inventory slots.");
container.stop(); container.stop();
} }
mineRock(Rock_Settings[objectNumber][3] + getRandomAdd(), objectX, objectY, type, Rock_Settings[objectNumber][0]); mineRock(rock.getRespawnTimer(), objectX, objectY, type, objectID);
container.stop(); container.stop();
if (objectNumber == 22 || objectNumber == 23) if (rock == rockData.ESSENCE)
startMining(player, objectNumber, objectX, objectY, type); startMining(player, objectID, objectX, objectY, type);
} }
@Override @Override
public void stop() { public void stop() {
@@ -184,7 +250,7 @@ public class Mining {
player.miningRock = false; player.miningRock = false;
return; return;
} }
}, getTimer(objectNumber, a, miningLevel)); }, getTimer(rock, pickaxe, miningLevel));
} }
public static void resetMining(Client c) { public static void resetMining(Client c) {
@@ -196,8 +262,8 @@ public class Mining {
c.miningRock = false; c.miningRock = false;
} }
public int getTimer(int b, int c, int level) { public int getTimer(rockData rock, int pick, int level) {
double timer = (int)((Rock_Settings[b][1] * 2) + 20 + Misc.random(20))-((Pick_Settings[c][2] * (Pick_Settings[c][2] * 0.75)) + level); double timer = (int)((rock.getRequiredLevel() * 2) + 20 + Misc.random(20))-((Pick_Settings[pick][2] * (Pick_Settings[pick][2] * 0.75)) + level);
if (timer < 2.0) { if (timer < 2.0) {
return 2; return 2;
} else { } else {
@@ -316,74 +382,13 @@ public class Mining {
}, 2); }, 2);
} }
public static enum rockData { public static boolean rockExists(int rockID) {
ESSENCE(new int[] { 2491 }, 1, 5, 3, 1, new int[] { 1436 }), for (final rockData rock : rockData.values()) {
CLAY(new int[] { 2108, 2109, 11189, 11190, 11191, 9713, 9711, 14905, 14904 }, 1, 5, 1, 5, new int[] { 434 }), if (rockID == rock.getObject(rockID)) {
COPPER(new int[] { 3042, 2091, 2090, 9708, 9709, 9710, 11960, 14906, 14907 }, 1, 18, 1, 8, new int[] { 436 }), return true;
TIN(new int[] { 2094, 2095, 3043, 9716, 9714, 11958, 11957, 11959, 11933, 11934, 11935, 14903, 14902 }, 1, 18, 1, 8, new int[] { 438 }),
BLURITE(new int[] { 10574, 10583, 2110 }, 10, 20, 1, 8, new int[] { 668 }),
IRON(new int[] { 2093, 2092, 9717, 9718, 9719, 11962, 11956, 11954, 14856, 14857, 14858, 14914, 14913 }, 15, 35, 2, 5, new int[] { 440 }),
SILVER(new int[] { 2101, 11186, 11187, 11188, 2100 }, 20, 40, 3, 20, new int[] { 442 }),
COAL(new int[] { 2096, 2097, 11963, 11964, 14850, 14851, 14852, 11930, 11931 }, 30, 50, 4, 25, new int[] { 453 }),
GOLD(new int[] { 2099, 2098, 11183, 11184, 11185, 9720, 9722 }, 40, 65, 6, 33, new int[] { 444 }),
MITHRIL(new int[] { 2103, 2102, 14853, 14854, 14855 }, 55, 80, 8, 50, new int[] { 447 }),
ADAMANT(new int[] { 2104, 2105, 14862, 14863, 14864 }, 70, 95, 10, 83, new int[] { 449 }),
RUNE(new int[] { 14859, 14860, 2106, 2107 }, 85, 125, 20, 166, new int[] { 451 }),
GRANITE(new int[] { 10947 }, 45, 75, 10, 10, new int[] { 6979, 6981, 6983 }),
SANDSTONE(new int[] { 10946 }, 35, 60, 5, 5, new int[] { 6971, 6973, 6975, 6977 }),
GEM(new int[] {2111}, 40, 65, 6, 120, new int[] {1});
private final int levelReq, mineTimer, respawnTimer, xp;
private final int[] oreIds;
private final int[] objectId;
private rockData(final int[] objectId, final int levelReq, final int xp, final int mineTimer, final int respawnTimer, final int... oreIds) {
this.objectId = objectId;
this.levelReq = levelReq;
this.xp = xp;
this.mineTimer = mineTimer;
this.respawnTimer = respawnTimer;
this.oreIds = oreIds;
}
public int getObject(final int object) {
for (int element : objectId) {
if (object == element) {
return element;
}
}
return -1;
}
public int getLevel() {
return levelReq;
}
public int getXp() {
return xp;
}
public int getTimer() {
return mineTimer;
}
public int getResapwn() {
return respawnTimer;
}
public int[] getOreIds() {
return oreIds;
}
}
public static boolean rockExists(Client c, int rockExist) {
boolean rockExists = false;
for (final rockData a : rockData.values()) {
if (rockExist == a.getObject(rockExist)) {
rockExists = true;
} }
} }
return rockExists; return false;
} }
} }
@@ -117,84 +117,13 @@ public class ObjectsActions {
SingleGates.useSingleGate(player, objectType); SingleGates.useSingleGate(player, objectType);
DoubleGates.useDoubleGate(player, objectType); DoubleGates.useDoubleGate(player, objectType);
PassDoor.processDoor(player, objectType); PassDoor.processDoor(player, objectType);
// if its a rock we can mine, mine it
if (Mining.rockExists(objectType))
player.getMining().startMining(player, objectType, player.objectX, player.objectY, player.clickObjectType);
switch (objectType) { switch (objectType) {
case 6: case 6:
player.getCannon().clickCannon(objectX, objectY); player.getCannon().clickCannon(objectX, objectY);
break; break;
case 2091:
player.getMining().startMining(player, 0, player.objectX, player.objectY, player.clickObjectType);
break;
case 2095:
player.getMining().startMining(player, 1, player.objectX, player.objectY, player.clickObjectType);
break;
case 2093:
player.getMining().startMining(player, 2, player.objectX, player.objectY, player.clickObjectType);
break;
case 2097:
player.getMining().startMining(player, 3, player.objectX, player.objectY, player.clickObjectType);
break;
case 2103:
player.getMining().startMining(player, 4, player.objectX, player.objectY, player.clickObjectType);
break;
case 2105:
player.getMining().startMining(player, 5, player.objectX, player.objectY, player.clickObjectType);
break;
case 2107:
player.getMining().startMining(player, 6, player.objectX, player.objectY, player.clickObjectType);
break;
case 2090:
player.getMining().startMining(player, 7, player.objectX, player.objectY, player.clickObjectType);
break;
case 2094:
player.getMining().startMining(player, 8, player.objectX, player.objectY, player.clickObjectType);
break;
case 2092:
player.getMining().startMining(player, 9, player.objectX, player.objectY, player.clickObjectType);
break;
case 2096:
player.getMining().startMining(player, 10, player.objectX, player.objectY, player.clickObjectType);
break;
case 2102:
player.getMining().startMining(player, 11, player.objectX, player.objectY, player.clickObjectType);
break;
case 2104:
player.getMining().startMining(player, 12, player.objectX, player.objectY, player.clickObjectType);
break;
case 2106:
player.getMining().startMining(player, 13, player.objectX, player.objectY, player.clickObjectType);
break;
case 2100:
player.getMining().startMining(player, 14, player.objectX, player.objectY, player.clickObjectType);
break;
case 2101:
player.getMining().startMining(player, 15, player.objectX, player.objectY, player.clickObjectType);
break;
case 2109:
case 2108:
if (objectType == 2109)
player.getMining().startMining(player, 20, player.objectX, player.objectY, player.clickObjectType);
if (objectType == 2108)
player.getMining().startMining(player, 21, player.objectX, player.objectY, player.clickObjectType);
break;
case 2098:
player.getMining().startMining(player, 16, player.objectX, player.objectY, player.clickObjectType);
break;
case 2099:
player.getMining().startMining(player, 17, player.objectX, player.objectY, player.clickObjectType);
break;
case 3042:
player.getMining().startMining(player, 18, player.objectX, player.objectY, player.clickObjectType);
break;
case 3043:
player.getMining().startMining(player, 19, player.objectX, player.objectY, player.clickObjectType);
break;
case 2491:
if (player.playerLevel[player.playerMining] < 30)
player.getMining().startMining(player, 22, player.objectX, player.objectY, player.clickObjectType);
else
player.getMining().startMining(player, 23, player.objectX, player.objectY, player.clickObjectType);
break;
case 6702: case 6702:
case 6703: case 6703:
case 6704: case 6704:
@@ -62,7 +62,7 @@ public class ClickObject implements PacketType {
player.resetWalkingQueue(); player.resetWalkingQueue();
break; break;
} }
if (Mining.rockExists(player, player.objectId)) { if (Mining.rockExists(player.objectId)) {
player.objectDistance = 5; player.objectDistance = 5;
} }
if (Woodcutting.playerTrees(player, player.objectId)) { if (Woodcutting.playerTrees(player, player.objectId)) {
@@ -121,11 +121,11 @@ public class ObjectHandler {
for (Objects o : globalObjects) { for (Objects o : globalObjects) {
if (c != null) { if (c != null) {
if (c.heightLevel == 0 && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { if (c.heightLevel == 0 && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) {
if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(c, o.getObjectId())) { if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(o.getObjectId())) {
c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), 0, o.getObjectFace(), o.getObjectType()); c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), 0, o.getObjectFace(), o.getObjectType());
} }
} }
if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(c, o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) { if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) {
c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), c.heightLevel, o.getObjectFace(), o.getObjectType()); c.getActionSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), c.heightLevel, o.getObjectFace(), o.getObjectType());
} }
} }