From 36ca5ccb9a9f8fd50b1d9c469022e7e395b90cd4 Mon Sep 17 00:00:00 2001 From: Jamix77 Date: Tue, 25 Feb 2020 10:09:36 +0000 Subject: [PATCH 1/2] Fixed teleport to house. As Sia mentioned, all now fixed with a new teleport class. --- .../skill/magic/HouseTeleportPlugin.java | 56 +++++++++++++++++++ .../skill/magic/ModernTeleportPlugin.java | 4 +- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 Server/src/plugin/skill/magic/HouseTeleportPlugin.java diff --git a/Server/src/plugin/skill/magic/HouseTeleportPlugin.java b/Server/src/plugin/skill/magic/HouseTeleportPlugin.java new file mode 100644 index 000000000..d65fb8ce7 --- /dev/null +++ b/Server/src/plugin/skill/magic/HouseTeleportPlugin.java @@ -0,0 +1,56 @@ +package plugin.skill.magic; + +import org.crandor.game.content.skill.free.magic.MagicSpell; +import org.crandor.game.content.skill.free.magic.Runes; +import org.crandor.game.node.Node; +import org.crandor.game.node.entity.Entity; +import org.crandor.game.node.entity.combat.equipment.SpellType; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.link.SpellBookManager.SpellBook; +import org.crandor.game.node.entity.player.link.TeleportManager.TeleportType; +import org.crandor.game.node.item.Item; +import org.crandor.game.world.GameWorld; +import org.crandor.game.world.map.Location; +import org.crandor.plugin.Plugin; +import org.crandor.tools.RandomFunction; + +/** + * + * For house teleportation. + * + * @author Jamix77 + * + */ +public class HouseTeleportPlugin extends MagicSpell { + + public HouseTeleportPlugin(final int level, final double experience, final Item... items) { + super(SpellBook.MODERN, level, experience, null, null, null, items); + } + + @Override + public Plugin newInstance(SpellType arg) throws Throwable { + + return this; + } + + @Override + public boolean cast(Entity entity, Node target) { + System.out.println("Casting house tele"); + if (((Player)entity).getHouseManager().getLocation().getExitLocation() == null) { + ((Player)entity).sendMessage("You must have a house to teleport to before attempting that."); + return false; + } + Location location = ((Player)entity).getHouseManager().getLocation().getExitLocation(); + if (entity.getLocks().isTeleportLocked() || !super.meetsRequirements(entity, true, false)) { + return false; + } + if (entity.getTeleporter().send(location.transform(0, RandomFunction.random(3), 0), TeleportType.NORMAL)) { + + entity.setAttribute("teleport:items", super.runes); + entity.setAttribute("magic-delay", GameWorld.getTicks() + 5); + return true; + } + return false; + } + +} diff --git a/Server/src/plugin/skill/magic/ModernTeleportPlugin.java b/Server/src/plugin/skill/magic/ModernTeleportPlugin.java index 6e0f94c47..9a8e30be6 100644 --- a/Server/src/plugin/skill/magic/ModernTeleportPlugin.java +++ b/Server/src/plugin/skill/magic/ModernTeleportPlugin.java @@ -87,10 +87,10 @@ public final class ModernTeleportPlugin extends MagicSpell { SpellBook.MODERN.register(18, new ModernTeleportPlugin(31, 41, Location.create(3221, 3219, 0), new Item(Runes.EARTH_RUNE.getId()), new Item(Runes.AIR_RUNE.getId(), 3), new Item(Runes.LAW_RUNE.getId(), 1))); // fally SpellBook.MODERN.register(21, new ModernTeleportPlugin(37, 47, Location.create(2965, 3378, 0), new Item(Runes.WATER_RUNE.getId()), new Item(Runes.AIR_RUNE.getId(), 3), new Item(Runes.LAW_RUNE.getId(), 1))); - // house - SpellBook.MODERN.register(23, new ModernTeleportPlugin(40, 50, ServerConstants.HOME_LOCATION, new Item(Runes.LAW_RUNE.getId()), new Item(Runes.AIR_RUNE.getId(), 1), new Item(Runes.EARTH_RUNE.getId(), 1))); // camelot SpellBook.MODERN.register(26, new ModernTeleportPlugin(45, 55.5, Location.create(2758, 3478, 0), new Item(Runes.AIR_RUNE.getId(), 5), new Item(Runes.LAW_RUNE.getId(), 1))); + // house + SpellBook.MODERN.register(23, new HouseTeleportPlugin(40, 50, new Item(Runes.LAW_RUNE.getId()), new Item(Runes.AIR_RUNE.getId(), 1), new Item(Runes.EARTH_RUNE.getId(), 1))); // ardougne SpellBook.MODERN.register(32, new ModernTeleportPlugin(51, 61, Location.create(2662, 3307, 0), new Item(Runes.WATER_RUNE.getId(), 2), new Item(Runes.LAW_RUNE.getId(), 2))); // watchtower From 8559398e83466ea6e81f2799667d501d5bf1703d Mon Sep 17 00:00:00 2001 From: Jamix77 Date: Tue, 25 Feb 2020 17:35:58 +0000 Subject: [PATCH 2/2] Added limestone chiseling. Needed for construction. Limestone can only be chiseled when the player has reached level 12, and will give 6 (30 because of x5, unless the player has chosen x10 it will be 60) xp per cut stone. --- .../limestone/ChiselLimestonePulse.java | 70 +++++++++++++++++++ .../skill/crafting/ChiselLimestonePlugin.java | 38 ++++++++++ 2 files changed, 108 insertions(+) create mode 100644 Server/src/org/crandor/game/content/skill/free/crafting/limestone/ChiselLimestonePulse.java create mode 100644 Server/src/plugin/skill/crafting/ChiselLimestonePlugin.java diff --git a/Server/src/org/crandor/game/content/skill/free/crafting/limestone/ChiselLimestonePulse.java b/Server/src/org/crandor/game/content/skill/free/crafting/limestone/ChiselLimestonePulse.java new file mode 100644 index 000000000..6160320b4 --- /dev/null +++ b/Server/src/org/crandor/game/content/skill/free/crafting/limestone/ChiselLimestonePulse.java @@ -0,0 +1,70 @@ +package org.crandor.game.content.skill.free.crafting.limestone; + +import org.crandor.game.content.skill.SkillPulse; +import org.crandor.game.content.skill.Skills; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.Item; +import org.crandor.game.world.update.flag.context.Animation; + +/** + * + * The skill pulse for chiseling a limestone into a limestone brick. + * + * @author Jamix77 + * + */ +public class ChiselLimestonePulse extends SkillPulse { + + /** + * Represents the chisel item. + */ + private static final Item CHISEL = new Item(1755); + + /** + * Represents the ticks passed. + */ + private int ticks; + + public ChiselLimestonePulse(Player player, Item node) { + super(player, node); + this.resetAnimation= false; + } + + @Override + public boolean checkRequirements() { + if (!player.getInventory().containsItem(CHISEL)) { + return false; + } + if (!player.getInventory().containsItem(new Item(3211))) { + return false; + } + if (player.getSkills().getLevel(Skills.CRAFTING) < 12) { + player.getPacketDispatch().sendMessage("You need a crafting level of 12 to make limestone bricks."); + return false; + } + return true; + } + + @Override + public void animate() { + if (ticks % 5 == 0 || ticks < 1) { + player.getAudioManager().send(2586); + player.animate(Animation.create(4470)); + } + } + + @Override + public boolean reward() { + if (++ticks % 2 != 0) { + return false; + } + if (player.getInventory().remove(new Item(3211))) { + + player.getInventory().add(new Item(3420)); + + player.getSkills().addExperience(Skills.CRAFTING, 6, true); + } + return !player.getInventory().containsItem(new Item(3211)); + } + +} diff --git a/Server/src/plugin/skill/crafting/ChiselLimestonePlugin.java b/Server/src/plugin/skill/crafting/ChiselLimestonePlugin.java new file mode 100644 index 000000000..35bf7b9f4 --- /dev/null +++ b/Server/src/plugin/skill/crafting/ChiselLimestonePlugin.java @@ -0,0 +1,38 @@ +package plugin.skill.crafting; + +import org.crandor.game.content.skill.free.crafting.limestone.ChiselLimestonePulse; +import org.crandor.game.interaction.NodeUsageEvent; +import org.crandor.game.interaction.UseWithHandler; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.item.Item; +import org.crandor.plugin.InitializablePlugin; +import org.crandor.plugin.Plugin; + +/** + * The plugin that starts the chisel limestone cutting pulse. + * @author Jamix77 + */ +@InitializablePlugin +public final class ChiselLimestonePlugin extends UseWithHandler { + + /** + * Constructs a new {@code GemCutPlugin} {@Code Object} + */ + public ChiselLimestonePlugin() { + super(3211); + } + + @Override + public Plugin newInstance(Object arg) throws Throwable { + addHandler(1755, ITEM_TYPE, this); + return null; + } + + @Override + public boolean handle(NodeUsageEvent event) { + final Player player = event.getPlayer(); + player.getPulseManager().run(new ChiselLimestonePulse(player, new Item(3211))); + return true; + } + +}