diff --git a/Server/src/main/java/core/game/content/quest/members/lostcity/LostCityPlugin.java b/Server/src/main/java/core/game/content/quest/members/lostcity/LostCityPlugin.java index d26823730..c7bb339a7 100644 --- a/Server/src/main/java/core/game/content/quest/members/lostcity/LostCityPlugin.java +++ b/Server/src/main/java/core/game/content/quest/members/lostcity/LostCityPlugin.java @@ -10,7 +10,6 @@ import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.TeleportManager.TeleportType; import core.game.node.entity.player.link.quest.Quest; -import core.game.node.entity.skill.gather.GatheringSkillPulse; import core.game.node.entity.skill.gather.SkillingTool; import core.game.node.item.Item; import core.game.node.scenery.Scenery; @@ -44,7 +43,6 @@ public final class LostCityPlugin extends OptionHandler { ItemDefinition.forId(5680).getHandlers().put("option:wield", this); SceneryDefinition.forId(2409).getHandlers().put("option:chop", this); SceneryDefinition.forId(2406).getHandlers().put("option:open", this); - SceneryDefinition.forId(1292).getHandlers().put("option:chop down", this); return this; } @@ -55,29 +53,6 @@ public final class LostCityPlugin extends OptionHandler { case 2409: handleShamusTree(player, quest); break; - case 1292: - if (SkillingTool.getHatchet(player) == null) { - player.getPacketDispatch().sendMessage("You do not have an axe which you have the level to use."); - return true; - } - if (quest.getStage(player) < 20) { - return true; - } - if (quest.getStage(player) == 20) { - if (player.getAttribute("treeSpawned", false)) { - return true; - } - TreeSpiritNPC spirit = (TreeSpiritNPC) TreeSpiritNPC.create(655, Location.create(2862, 9734, 0)); - spirit.setPlayer(player); - spirit.setRespawn(false); - spirit.init(); - spirit.attack(player); - player.setAttribute("treeSpawned", true); - spirit.sendChat("You must defeat me before touching the tree!"); - return true; - } - player.getPulseManager().run(new GatheringSkillPulse(player, (Scenery) node)); - break; case 2406: final boolean dramenTeleport = player.getEquipment().containsItem(DRAMEN_STAFF) && quest.getStage(player) > 20 && player.getLocation().getX() <= 3201; DoorActionHandler.handleAutowalkDoor(player, (Scenery) node); diff --git a/Server/src/main/java/core/game/node/entity/player/link/GlobalData.java b/Server/src/main/java/core/game/node/entity/player/link/GlobalData.java index f851a51e0..c0f59a0ea 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/GlobalData.java +++ b/Server/src/main/java/core/game/node/entity/player/link/GlobalData.java @@ -152,11 +152,6 @@ public final class GlobalData { */ private int ectoCharges; - /** - * The bracelet of clay uses. - */ - private int braceletClayUses; - /** * The abbyss data. */ @@ -344,7 +339,6 @@ public final class GlobalData { } forgingUses = Integer.parseInt( data.get("forgingUses").toString()); ectoCharges = Integer.parseInt( data.get("ectoCharges").toString()); - braceletClayUses = Integer.parseInt( data.get("braceletClayUses").toString()); dropDelay = Long.parseLong(data.get("dropDelay").toString()); JSONArray ad = (JSONArray) data.get("abyssData"); for(int i = 0; i < ad.size(); i++){ @@ -904,21 +898,6 @@ public final class GlobalData { this.ectoCharges = ectoCharges; } - /** - * Gets the braceletClayUses. - * @return The braceletClayUses. - */ - public int getBraceletClayUses() { - return braceletClayUses; - } - - /** - * Increments the bracelet of clay uses. - */ - public void incrementBraceletOfClay() { - this.braceletClayUses += 1; - } - /** * Resets the abyss data. */ @@ -945,14 +924,6 @@ public final class GlobalData { return abyssData[ordinal]; } - /** - * Sets the braceletClayUses. - * @param braceletClayUses The braceletClayUses to set. - */ - public void setBraceletClayUses(int braceletClayUses) { - this.braceletClayUses = braceletClayUses; - } - /** * Gets the dropDelay. * @return The dropDelay. diff --git a/Server/src/main/java/core/game/node/entity/skill/gather/GatheringSkillPulse.java b/Server/src/main/java/core/game/node/entity/skill/gather/GatheringSkillPulse.java deleted file mode 100644 index 141ca92f4..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/gather/GatheringSkillPulse.java +++ /dev/null @@ -1,338 +0,0 @@ -package core.game.node.entity.skill.gather; - -import core.cache.def.impl.ItemDefinition; -import core.game.container.impl.EquipmentContainer; -import core.game.content.dialogue.FacialExpression; -import core.game.content.global.BirdNest; -import core.game.content.global.SkillingPets; -import core.game.node.entity.impl.Projectile; -import core.game.node.entity.player.Player; -import core.game.node.entity.skill.SkillPulse; -import core.game.node.entity.skill.Skills; -import core.game.node.item.Item; -import core.game.node.scenery.Scenery; -import core.game.node.scenery.SceneryBuilder; -import core.game.world.map.Location; -import core.tools.RandomFunction; -import core.tools.StringUtils; -import rs09.game.world.GameWorld; - -import java.util.ArrayList; -import java.util.List; - -/** - * Handles a gathering skill, such as woodcutting, mining, ... - * @author Emperor - */ -public final class GatheringSkillPulse extends SkillPulse { - - /** - * The gem rewards. - */ - private static final Item[] GEM_REWARDS = { new Item(1623), new Item(1621), new Item(1619), new Item(1617) }; - - /** - * Is the player is mining. - */ - private boolean isMining; - - /** - * Is the player is mining essence. - */ - private boolean isMiningEssence; - - /** - * Is the player is mining gems. - */ - private boolean isMiningGems; - - /** - * Is the player is woodcutting. - */ - private boolean isWoodcutting; - - /** - * The amount of ticks it takes to get a log. - */ - private int ticks; - - /** - * Constructs a new {@code GatheringSkillPulse} {@code Object}. - * @param player The player. - * @param node The gathering resource. - */ - public GatheringSkillPulse(Player player, Scenery node) { - super(player, node); - } - - @Override - public void start() { - resource = SkillingResource.forId( - node.getId()); - if (SkillingResource.isEmpty(node.getId())) { - player.getPacketDispatch().sendMessage("This rock contains no ore."); - return; - } - if (resource == null) { - return; - } - isMining = resource.getSkillId() == Skills.MINING; - isMiningEssence = resource == SkillingResource.RUNE_ESSENCE; - isMiningGems = resource.getReward() == SkillingResource.GEM_ROCK_0.getReward(); - isWoodcutting = resource.getSkillId() == Skills.WOODCUTTING; - super.start(); - } - - @Override - public boolean checkRequirements() { - if (player.getSkills().getLevel(resource.getSkillId()) < resource.getLevel()) { - player.getPacketDispatch().sendMessage("You need a " + Skills.SKILL_NAME[resource.getSkillId()] + " level of " + resource.getLevel() + " to " + (isMining ? "mine this rock." : "cut this tree.")); - return false; - } - if (setTool() == null) { - player.getPacketDispatch().sendMessage("You do not have a" + (isMining ? " pickaxe" : "n axe") + " to use."); - return false; - } - if (player.getInventory().freeSlots() < 1) { - player.getDialogueInterpreter().sendDialogue("Your inventory is too full to hold any more " + ItemDefinition.forId(resource.getReward()).getName().toLowerCase() + "."); - return false; - } - return true; - } - - @Override - public void animate() { - if (resource.getAnimation() != null) { - player.animate(resource.getAnimation()); - } else if (tool.getAnimation() != null) { - player.animate(tool.getAnimation()); - } - } - - @Override - public boolean reward() { - if (++ticks % (isMiningEssence ? 3 : 4) != 0) { - return false; - } - if (node.getId() == 10041) { - player.getDialogueInterpreter().sendDialogues(2574, FacialExpression.FURIOUS, RandomFunction.random(2) == 1 ? "You'll blow my cover! I'm meant to be hidden!" : "Will you stop that?"); - return true; - } - if (!checkReward()) { - return false; - } - // 20% chance to auto burn logs when using "inferno adze" item - if (isWoodcutting && tool.getId() == 13661 && RandomFunction.random(100) < 20){ - player.sendMessage("Your chop some logs. The heat of the inferno adze incinerates them."); - Projectile.create(player, null, 1776, 35, 30, 20, 25).transform(player, new Location(player.getLocation().getX() + 2, player.getLocation().getY()), true, 25, 25).send(); - player.getSkills().addExperience(Skills.WOODCUTTING, resource.getExperience()); - player.getSkills().addExperience(Skills.FIREMAKING, resource.getExperience()); - return false; - } - int reward = resource.getReward(); - if (reward > 0) { - reward = calculateReward(reward); - applyAchievementTask(reward); - // Give the player the items - int rewardAmount = calculateRewardAmount(reward); - Item item = new Item(reward, rewardAmount); - player.getInventory().add(item); - // Apply the experience points - double experience = calculateExperience(reward, rewardAmount); - player.getSkills().addExperience(resource.getSkillId(), experience, true); - // Send a message to the player - if (isMiningGems) { - String gemName = ItemDefinition.forId(reward).getName().toLowerCase(); - player.sendMessage("You get " + (StringUtils.isPlusN(gemName) ? "an" : "a") + " " + gemName + "."); - } else if (resource == SkillingResource.DRAMEN_TREE) { - player.getPacketDispatch().sendMessage("You cut a branch from the Dramen tree."); - } else { - player.getPacketDispatch().sendMessage("You get some " + ItemDefinition.forId(reward).getName().toLowerCase() + "."); - } - // Calculate if the player should receive a bonus gem or bonus ore or both - if (!isMiningEssence && isMining) { - //check for bonus ore from shooting star buff - if(isMining && (player.getAttribute("SS Mining Bonus", GameWorld.getTicks()) > GameWorld.getTicks())){ - if(RandomFunction.getRandom(7) == 5) { - player.getPacketDispatch().sendMessage("...you manage to mine a second ore thanks to the Star Sprite."); - player.getInventory().add(item); - } - } - int chance = 282; - boolean altered = false; - if (new Item(player.getEquipment().getId(12)).getName().toLowerCase().contains("ring of wealth")) { - chance /= 1.5; - altered = true; - } - Item necklace = player.getEquipment().get(EquipmentContainer.SLOT_AMULET); - if (necklace != null && (necklace.getId() > 1705 && necklace.getId() < 1713)) { - chance /= 1.5; - altered = true; - } - if (RandomFunction.random(chance) == 0) { - Item gem = RandomFunction.getRandomElement(GEM_REWARDS); - player.getPacketDispatch().sendMessage("You find a " + gem.getName() + "!"); - if (!player.getInventory().add(gem, player)) { - player.getPacketDispatch().sendMessage("You do not have enough space in your inventory, so you drop the gem on the floor."); - } - } - } - // Calculate if the player should receive a bonus birds nest - if (isWoodcutting) { - int chance = 282; - if (RandomFunction.random(chance) == 0) { - BirdNest.drop(player); - } - } - } - // not sure what this is exactly - if (resource.getRespawnRate() != 0) { - int charge = 1000 / resource.getRewardAmount(); - node.setCharge(node.getCharge() - RandomFunction.random(charge, charge << 2)); - if (node.getCharge() < 1) { - node.setCharge(1000); -// if (resource.isFarming()) { -// PatchWrapper tree = player.getFarmingManager().getPatchWrapper(node.getWrapper().getId()); -// tree.addConfigValue(tree.getNode().getStumpBase()); -// tree.getCycle().setGrowthTime(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(resource.getRespawnDuration() + 10)); -// return true; -// } - if (resource.getEmptyId() > -1) { - SceneryBuilder.replace(node, node.transform(resource.getEmptyId()), resource.getRespawnDuration()); - } else { - SceneryBuilder.replace(node, node.transform(0), resource.getRespawnDuration()); - } - node.setActive(false); - return true; - } - } - return false; - } - - /** - * Checks if the has completed any achievements from their diary - */ - private void applyAchievementTask(int reward) { - } - - /** - * Checks if the player gets rewarded. - * @return {@code True} if so. - */ - private boolean checkReward() { - int skill = isMining ? Skills.MINING : Skills.WOODCUTTING; - int level = 1 + player.getSkills().getLevel(skill) + player.getFamiliarManager().getBoost(skill); - double hostRatio = Math.random() * (100.0 * resource.getRate()); - double clientRatio = Math.random() * ((level - resource.getLevel()) * (1.0 + tool.getRatio())); - return hostRatio < clientRatio; - } - - private int calculateReward(int reward) { - // If the player is mining sandstone or granite, then i'm not sure what this does? - if (resource == SkillingResource.SANDSTONE || resource == SkillingResource.GRANITE) { - int value = RandomFunction.randomize(resource == SkillingResource.GRANITE ? 3 : 4); - reward += value << 1; - player.getSkills().addExperience(resource.getSkillId(), value * 10, true); - } - - // If the player is mining clay - else if (reward == SkillingResource.CLAY_0.getReward()) { - // Check if they have a bracelet of clay equiped - if (player.getEquipment().contains(11074, 1)) { - player.getSavedData().getGlobalData().incrementBraceletOfClay(); - if (player.getSavedData().getGlobalData().getBraceletClayUses() >= 28) { - player.getSavedData().getGlobalData().setBraceletClayUses(0); - player.getEquipment().remove(new Item(11074)); - player.sendMessage("Your bracelet of clay has disinegrated."); - } - // Give soft clay - reward = 1761; - } - } - - // Convert rune essence to pure essence if the player is above level 30 mining - else if (isMiningEssence && player.getSkills().getLevel(Skills.MINING) >= 30) { - reward = 7936; - } - - // Calculate a random gem for the player - else if (isMiningGems) { - int random = RandomFunction.random(100); - List gems = new ArrayList<>(20); - if (random < 2) { - gems.add(1617); - } else if (random < 25) { - gems.add(1619); - gems.add(1623); - gems.add(1621); - } else if (random < 40) { - gems.add(1629); - } else { - gems.add(1627); - gems.add(1625); - } - reward = gems.get(RandomFunction.random(gems.size())); - } - - return reward; - } - - /** - * Calculate the total amount of items the player should receive - * @return amount of items - */ - private int calculateRewardAmount(int reward) { - int amount = 1; - - // 3239: Hollow tree (bark) 10% chance of obtaining - if (reward == 3239 && RandomFunction.random(100) >= 10) { - amount = 0; - } - - SkillingPets.checkPetDrop(player, isMining ? SkillingPets.GOLEM : SkillingPets.BEAVER); - - return amount; - } - - /** - * Calculate the total experience the player should receive - * @return amount of experience - */ - private double calculateExperience(int reward, int amount) { - double experience = resource.getExperience(); - - // Bark - if (reward == 3239) { - // If we receive the item, give the full experience points otherwise give the base amount - if (amount >= 1) { - experience = 275.2; - } else { - amount = 1; - } - } - - return experience * amount; - } - - - @Override - public void message(int type) { - switch (type) { - case 0: - player.getPacketDispatch().sendMessage("You swing your " + (isMining ? "pickaxe at the rock..." : "axe at the tree...")); - break; - } - } - - /** - * Sets the tool used. - */ - private SkillingTool setTool() { - if (!isMining) { - tool = SkillingTool.getHatchet(player); - } else { - tool = SkillingTool.getPickaxe(player); - } - return tool; - } -} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thelostcity/DramenTreeListener.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thelostcity/DramenTreeListener.kt index a631ee612..fa18e472a 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thelostcity/DramenTreeListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thelostcity/DramenTreeListener.kt @@ -2,7 +2,7 @@ package rs09.game.content.quest.members.thelostcity import core.game.content.quest.members.lostcity.TreeSpiritNPC import core.game.node.scenery.Scenery -import core.game.node.entity.skill.gather.GatheringSkillPulse +import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse import core.game.node.entity.skill.gather.SkillingTool import core.game.world.map.Location import rs09.game.interaction.InteractionListener @@ -35,10 +35,10 @@ class DramenTreeListener : InteractionListener { spirit.sendChat("You must defeat me before touching the tree!") return@on true } - player.getPulseManager().run(GatheringSkillPulse(player, node as Scenery?)) + player.getPulseManager().run(WoodcuttingSkillPulse(player, node as Scenery?)) return@on true } } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt index ebaf37557..44b49a248 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt @@ -386,7 +386,6 @@ class PlayerSaver (val player: Player){ globalData.put("readPlaques",readPlaques) globalData.put("forgingUses",player.savedData.globalData.forgingUses.toString()) globalData.put("ectoCharges",player.savedData.globalData.ectoCharges.toString()) - globalData.put("braceletClayUses",player.savedData.globalData.braceletClayUses.toString()) globalData.put("dropDelay",player.savedData.globalData.dropDelay.toString()) val abyssData = JSONArray() player.savedData.globalData.abyssData.map { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt index 5bd0718fd..2fe97d3d9 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt @@ -122,10 +122,6 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul if (++ticks % (if (isMiningEssence) 3 else 4) != 0) { return false } - if (node.id == 10041) { - sendNPCDialogue(player, NPCs.BANK_GUARD_2574,if (RandomFunction.random(2) == 1) "You'll blow my cover! I'm meant to be hidden!" else "Will you stop that?", FacialExpression.FURIOUS) - return true - } if (!checkReward()) { return false } @@ -148,15 +144,17 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul if(reward == Items.CLAY_434){ val bracelet = getItemFromEquipment(player, EquipmentSlot.HANDS) if(bracelet != null && bracelet.id == Items.BRACELET_OF_CLAY_11074){ - if(bracelet.charge > 28) bracelet.charge = 28 - bracelet.charge-- + var charges = player.getAttribute("jewellery-charges:bracelet-of-clay", 28); + charges-- reward = Items.SOFT_CLAY_1761 sendMessage(player, "Your bracelet of clay softens the clay for you.") - if(bracelet.charge <= 0){ - if(removeItem(player, bracelet)) { + if(charges <= 0) { + if(removeItem(player, bracelet, Container.EQUIPMENT)) { sendMessage(player, "Your bracelet of clay crumbles to dust.") + charges = 28 } } + player.setAttribute("/save:jewellery-charges:bracelet-of-clay", charges) } } val rewardName = getItemName(reward).lowercase() @@ -275,4 +273,4 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul init { super.stop() } -} \ No newline at end of file +}