private static void harvestCrop(Player p, Patch patch) { if (patch.getPatchType().Equals(PatchType.VEGATABLE) || patch.getPatchType().Equals(PatchType.VEGATABLE_1)) { if (!p.getInventory().hasItem(TOOLS[3])) { p.getPackets().sendMessage("You need a spade to harvest your crops."); return; } } PatchType patchType = patch.getPatchType(); int emote = (patchType.Equals(PatchType.HERB) || patchType.Equals(PatchType.FLOWER)) ? 2282 : 830; int delay = patchType.Equals(PatchType.HERB) ? 2250 : 1500; int amount = patchType.Equals(PatchType.FLOWER) ? 1 : (int)PATCHES[patch.getPatchIndex()][8] + misc.random(10); string s = patchType.Equals(PatchType.FLOWER) ? "flower patch" : patchType.Equals(PatchType.HERB) ? "herb patch" : "allotment"; string s1 = patchType.Equals(PatchType.FLOWER) || patchType.Equals(PatchType.HERB) ? "pick" : "harvest"; p.setLastAnimation(new Animation(emote)); p.setTemporaryAttribute("harvesting", true); Event startHarvestCropEvent = new Event(delay); startHarvestCropEvent.setAction(() => { int i = 1; if (p.getTemporaryAttribute("harvesting") == null) { startHarvestCropEvent.stop(); return; } p.setLastAnimation(new Animation(emote)); Event doHarvestCropEvent = new Event(800); doHarvestCropEvent.setAction(() => { doHarvestCropEvent.stop(); p.getSkills().addXp(Skills.SKILL.FARMING, (double)SEEDS[patch.getSeedIndex()][5]); p.getInventory().addItemOrGround((int)SEEDS[patch.getSeedIndex()][2], 1); p.getPackets().sendMessage("You " + s1 + " " + (string)SEEDS[patch.getSeedIndex()][8] + " " + (string)SEEDS[patch.getSeedIndex()][7] + " from the " + s + " ."); if (i++ >= amount) { p.getPackets().sendMessage("The patch has been cleared."); patch.setStatus(2); patch.setConfigArray(WEEDS_CONFIG); setConfig(p, patch); } }); Server.registerEvent(doHarvestCropEvent); if (i >= amount) { startHarvestCropEvent.stop(); return; } }); Server.registerEvent(startHarvestCropEvent); }
public static int getCutTime(Player p, Patch patch) { int standardTime = (int)SEEDS[patch.getSeedIndex()][12]; int randomTime = standardTime + misc.random(standardTime); int axeTime = WoodcuttingData.AXE_DELAY[Woodcutting.getUsedAxe(p)]; int finalTime = randomTime -= axeTime; if (finalTime <= 1000 || finalTime <= 0) { finalTime = 1000; } return(finalTime); }
private static void harvestFruit(Player p, Patch patch) { if (p.getTemporaryAttribute("unmovable") != null) { return; } p.setLastAnimation(new Animation(2282)); p.setTemporaryAttribute("unmovable", true); patch.setWeeding(true); Event harvestFruitEvent = new Event(1700); harvestFruitEvent.setAction(() => { if (patch.getStatus() == patch.chopStatus() || p.isDisconnected() || p.isDestroyed() || p.isDead() || p.getTemporaryAttribute("teleporting") != null) { harvestFruitEvent.stop(); return; } p.setLastAnimation(new Animation(2282)); string s = patch.getSeedIndex() == 41 ? "leaf " : ""; Event harvestingFruitEvent = new Event(800); harvestingFruitEvent.setAction(() => { harvestingFruitEvent.stop(); p.getPackets().sendMessage("You pick " + (string)SEEDS[patch.getSeedIndex()][9] + " " + (string)SEEDS[patch.getSeedIndex()][7] + s + " from the tree."); p.getSkills().addXp(Skills.SKILL.FARMING, (double)SEEDS[patch.getSeedIndex()][8]); p.getInventory().addItemOrGround((int)SEEDS[patch.getSeedIndex()][2], 1); patch.setStatus(patch.getStatus() - 1); if (patch.getStatus() == 5) // We have taken all the fruit (it is 5 after we lower the status above) { patch.setStatus(13); // Chop option p.removeTemporaryAttribute("unmovable"); patch.setWeeding(false); } setConfig(p, patch); }); Server.registerEvent(harvestingFruitEvent); }); Server.registerEvent(harvestFruitEvent); }
private static void checkTreeHealth(Player p, Patch patch) { patch.setHealthChecked(true); if (patch.isFruitTree()) { patch.setStatus(11); } else { patch.setStatus(patch.getConfigLength() - 2); } p.getPackets().sendMessage("You check the health of the tree."); setConfig(p, patch); p.getSkills().addXp(Skills.SKILL.FARMING, (double)SEEDS[patch.getSeedIndex()][5]); }
private static void plantCrop(Player p, Patch patch, int seedId) { if (p.getTemporaryAttribute("unmovable") != null) { return; } for (int i = 0; i < SEEDS.Length; i++) { if (seedId == (int)SEEDS[i][1]) { PatchType type = patch.getPatchType(); bool sapling = type.Equals(PatchType.TREE) || type.Equals(PatchType.FRUIT_TREE); string s = sapling ? "sapling" : "seeds."; string s1 = s.Equals("sapling") ? patch.getSeedIndex() == 33 || patch.getSeedIndex() == 38 || patch.getSeedIndex() == 40 ? "an " : "a " : ""; if (!patch.getPatchType().Equals(PatchType.VEGATABLE) && !patch.getPatchType().Equals(PatchType.VEGATABLE_1)) { if (!patch.getPatchType().Equals((PatchType)SEEDS[i][0])) { string s2 = !((PatchType)SEEDS[i][0]).Equals(PatchType.FRUIT_TREE) && !((PatchType)SEEDS[i][0]).Equals(PatchType.TREE)? "seed" : "tree"; p.getPackets().sendMessage("This type of " + s2 + " cannot be planted here."); return; } } else if (patch.getPatchType().Equals(PatchType.VEGATABLE) || patch.getPatchType().Equals(PatchType.VEGATABLE_1)) { if (!SEEDS[i][0].Equals(PatchType.VEGATABLE) && !SEEDS[i][0].Equals(PatchType.VEGATABLE_1)) { p.getPackets().sendMessage("This type of seed cannot be planted here."); return; } } int[] data = getDataForPatch(patch, i); if (data == null) { return; } patch.setSeedIndex(i); if (p.getSkills().getGreaterLevel(Skills.SKILL.FARMING) < (int)SEEDS[patch.getSeedIndex()][6]) { p.getPackets().sendMessage("You need a Farming level of " + (int)SEEDS[patch.getSeedIndex()][6] + " to plant " + s1 + "" + (string)SEEDS[patch.getSeedIndex()][7] + " seeds."); return; } int seedAmount = (int)PATCHES[patch.getPatchIndex()][8]; if (!p.getInventory().hasItemAmount((int)SEEDS[i][1], seedAmount)) { p.getPackets().sendMessage("This patch requires " + seedAmount + " seeds."); return; } if (!sapling) { if (!p.getInventory().hasItem(TOOLS[1])) { p.getPackets().sendMessage("You need a seed dibber to plant seeds."); return; } } else { if (!p.getInventory().hasItem(TOOLS[2])) { p.getPackets().sendMessage("You need a trowel to transfer the sapling from the pot to a farming patch."); return; } if (!p.getInventory().hasItem(TOOLS[3])) { p.getPackets().sendMessage("You need a spade to plant the salping."); return; } } int j = i; p.setLastAnimation(new Animation(2291)); p.setTemporaryAttribute("unmovable", true); Event plantCropEvent = new Event(1000); plantCropEvent.setAction(() => { plantCropEvent.stop(); if (p.getInventory().deleteItem((int)SEEDS[j][1], seedAmount)) { if (sapling) { p.getInventory().addItemOrGround(TOOLS[4]); } patch.setStatus(0); patch.setConfigArray(data); patch.setTimeToGrow((long)SEEDS[j][3]); setConfig(p, patch); p.removeTemporaryAttribute("unmovable"); string prefix = seedAmount > 1 ? "" + seedAmount : "a"; string suffix = seedAmount > 1 ? "seeds." : "seed."; if ((patch.getPatchType().Equals(PatchType.HERB) && (patch.getSeedIndex() == 20 || patch.getSeedIndex() == 21))) { prefix = "an"; } string message = sapling ? "You plant the " + (string)SEEDS[patch.getSeedIndex()][7] + " sapling." : "You plant " + prefix + " " + (string)SEEDS[patch.getSeedIndex()][7] + " " + suffix; p.getPackets().sendMessage(message); p.getSkills().addXp(Skills.SKILL.FARMING, (double)SEEDS[patch.getSeedIndex()][4]); } }); Server.registerEvent(plantCropEvent); break; } } }
private static bool hasLevelToCutTree(Player p, Patch patch) { if (patch.isFruitTree()) { return(true); } return(p.getSkills().getGreaterLevel(Skills.SKILL.WOODCUTTING) >= (int)SEEDS[patch.getSeedIndex()][10]); }
private static void chopTree(Player p, Patch patch) { if (patch.isFruitTree()) { chopFruitTree(p, patch); return; } if (!Woodcutting.hasAxe(p)) { p.getPackets().sendMessage("You don't have an axe."); return; } if (!hasLevelToCutTree(p, patch)) { p.getPackets().sendMessage("You will recieve no logs from this tree, due to your Woodcutting level."); } Tree newTree = new Tree(0, 0, null, (int)SEEDS[patch.getSeedIndex()][2], 0, (string)SEEDS[patch.getSeedIndex()][7], (double)SEEDS[patch.getSeedIndex()][11], 0); p.setTemporaryAttribute("cuttingTree", newTree); p.setLastAnimation(new Animation(Woodcutting.getAxeAnimation(p))); p.getPackets().sendMessage("You begin to swing your axe at the tree.."); long delay = getCutTime(p, patch); bool canRecieveLog = hasLevelToCutTree(p, patch); Event chopTreeEvent = new Event(delay); chopTreeEvent.setAction(() => { long timeSinceLastAnimation = Environment.TickCount; if (!Woodcutting.hasAxe(p)) { p.getPackets().sendMessage("You don't have an axe."); Woodcutting.resetWoodcutting(p); chopTreeEvent.stop(); return; } if (p.getTemporaryAttribute("cuttingTree") == null) { Woodcutting.resetWoodcutting(p); chopTreeEvent.stop(); return; } Tree tree = (Tree)p.getTemporaryAttribute("cuttingTree"); if (!newTree.Equals(tree)) { chopTreeEvent.stop(); return; } if (canRecieveLog) { string s = tree.getLog() == 1521 ? "an" : "a"; if (p.getInventory().addItem(tree.getLog())) { p.getSkills().addXp(Skills.SKILL.WOODCUTTING, tree.getXp()); p.getPackets().sendMessage("You cut down " + s + " " + tree.getName() + " log."); } else { p.getPackets().sendChatboxInterface(210); p.getPackets().modifyText("Your inventory is too full to carry any logs.", 210, 1); p.setLastAnimation(new Animation(65535)); chopTreeEvent.stop(); return; } } if (misc.random(canRecieveLog ? 2 : 0) == 0) { p.setLastAnimation(new Animation(65535)); patch.setStatus(patch.getConfigLength() - 1); setConfig(p, patch); chopTreeEvent.stop(); return; } if (Environment.TickCount - timeSinceLastAnimation >= 2550) { p.setLastAnimation(new Animation(Woodcutting.getAxeAnimation(p))); timeSinceLastAnimation = Environment.TickCount; } }); Server.registerEvent(chopTreeEvent); }