diff --git a/Server/data/ObjectParser.xml b/Server/data/ObjectParser.xml index b10a0d445..547e2eaf1 100644 --- a/Server/data/ObjectParser.xml +++ b/Server/data/ObjectParser.xml @@ -25,4 +25,6 @@ + + diff --git a/Server/data/configs/drop_tables.json b/Server/data/configs/drop_tables.json index 8aff52d67..23b4ce721 100644 --- a/Server/data/configs/drop_tables.json +++ b/Server/data/configs/drop_tables.json @@ -29532,6 +29532,18 @@ "id": "1438", "maxAmount": "1" }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1456", + "maxAmount": "1" + }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1450", + "maxAmount": "1" + }, { "minAmount": "1", "weight": "25.0", @@ -29704,6 +29716,18 @@ "id": "1438", "maxAmount": "1" }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1456", + "maxAmount": "1" + }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1450", + "maxAmount": "1" + }, { "minAmount": "1", "weight": "25.0", @@ -29876,6 +29900,18 @@ "id": "1438", "maxAmount": "1" }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1456", + "maxAmount": "1" + }, + { + "minAmount": "1", + "weight": "25.0", + "id": "1450", + "maxAmount": "1" + }, { "minAmount": "1", "weight": "25.0", diff --git a/Server/data/configs/item_configs.json b/Server/data/configs/item_configs.json index 852a6fc39..08580edac 100644 --- a/Server/data/configs/item_configs.json +++ b/Server/data/configs/item_configs.json @@ -38817,7 +38817,7 @@ "name": "Crystal bow 9/10", "archery_ticket_price": "0", "id": "4215", - "bonuses": "0,0,0,0,96,0,0,0,0,0,0,0,0,0,68" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38838,7 +38838,7 @@ "name": "Crystal bow 8/10", "archery_ticket_price": "0", "id": "4216", - "bonuses": "0,0,0,0,92,0,0,0,0,0,0,0,0,0,66" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38859,7 +38859,7 @@ "name": "Crystal bow 7/10", "archery_ticket_price": "0", "id": "4217", - "bonuses": "0,0,0,0,88,0,0,0,0,0,0,0,0,0,64" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38880,7 +38880,7 @@ "name": "Crystal bow 6/10", "archery_ticket_price": "0", "id": "4218", - "bonuses": "0,0,0,0,84,0,0,0,0,0,0,0,0,0,62" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38901,7 +38901,7 @@ "name": "Crystal bow 5/10", "archery_ticket_price": "0", "id": "4219", - "bonuses": "0,0,0,0,80,0,0,0,0,0,0,0,0,0,60" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38922,7 +38922,7 @@ "name": "Crystal bow 4/10", "archery_ticket_price": "0", "id": "4220", - "bonuses": "0,0,0,0,76,0,0,0,0,0,0,0,0,0,58" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38943,7 +38943,7 @@ "name": "Crystal bow 3/10", "archery_ticket_price": "0", "id": "4221", - "bonuses": "0,0,0,0,72,0,0,0,0,0,0,0,0,0,56" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38964,7 +38964,7 @@ "name": "Crystal bow 2/10", "archery_ticket_price": "0", "id": "4222", - "bonuses": "0,0,0,0,68,0,0,0,0,0,0,0,0,0,54" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{4,70}-{16,50}", @@ -38985,7 +38985,7 @@ "name": "Crystal bow 1/10", "archery_ticket_price": "0", "id": "4223", - "bonuses": "0,0,0,0,64,0,0,0,0,0,0,0,0,0,52" + "bonuses": "0,0,0,0,100,0,0,0,0,0,0,0,0,0,70" }, { "requirements": "{1,70}-{16,50}", @@ -39028,7 +39028,7 @@ "archery_ticket_price": "0", "id": "4226", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,49,52,51,0,78,68,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39042,7 +39042,7 @@ "archery_ticket_price": "0", "id": "4227", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,47,50,49,0,76,66,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39056,7 +39056,7 @@ "archery_ticket_price": "0", "id": "4228", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,45,48,47,0,74,65,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39070,7 +39070,7 @@ "archery_ticket_price": "0", "id": "4229", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,43,46,45,0,72,63,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39084,7 +39084,7 @@ "archery_ticket_price": "0", "id": "4230", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,41,44,43,0,70,61,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39098,7 +39098,7 @@ "archery_ticket_price": "0", "id": "4231", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,39,42,41,0,68,59,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39112,7 +39112,7 @@ "archery_ticket_price": "0", "id": "4232", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,37,40,39,0,66,58,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39126,7 +39126,7 @@ "archery_ticket_price": "0", "id": "4233", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,35,38,37,0,64,56,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { @@ -39140,7 +39140,7 @@ "archery_ticket_price": "0", "id": "4234", "absorb": "6,0,12", - "bonuses": "0,0,0,-10,-10,33,36,35,0,62,54,0,0,0,0", + "bonuses": "0,0,0,-10,-10,51,54,53,0,80,70,0,0,0,0", "equipment_slot": "5" }, { diff --git a/Server/data/configs/shops.json b/Server/data/configs/shops.json index 714e32a73..2f6a5ff1f 100644 --- a/Server/data/configs/shops.json +++ b/Server/data/configs/shops.json @@ -213,7 +213,7 @@ "general_store": "true", "id": "25", "title": "Lumbridge General Store", - "stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}" + "stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}-{1939,1000,1}" }, { "npcs": "4716", @@ -1599,7 +1599,7 @@ "general_store": "false", "id": "181", "title": "MoonClan Fine Clothes", - "stock": "{9068,10,100}-{9069,10,100}-{9070,10,100}-{9071,10,100}-{9072,10,100}-{9073,10,100}-{9074,10,100}-{1733,50,100}-{1734,500,100}" + "stock": "{9068,10,100}-{9069,10,100}-{9070,10,100}-{9071,10,100}-{9072,10,100}-{9073,10,100}-{9074,10,100}-{1733,50,100}-{1734,500,100}-{9084,10,100}-{9096,10,100}-{9097,10,100}-{9098,10,100}-{9099,10,100}-{9100,10,100}-{9101,10,100}-{9102,10,100}-{9104,10,100}" }, { "npcs": "", diff --git a/Server/src/main/content/global/handlers/iface/SmeltingInterface.java b/Server/src/main/content/global/handlers/iface/SmeltingInterface.java index 4032ff524..b7fadd28c 100644 --- a/Server/src/main/content/global/handlers/iface/SmeltingInterface.java +++ b/Server/src/main/content/global/handlers/iface/SmeltingInterface.java @@ -49,7 +49,7 @@ public class SmeltingInterface extends ComponentPlugin { * @author 'Vexia */ public enum BarButton { - BRONZE_1(16, Bar.BRONZE, 1), BRONZE_5(15, Bar.BRONZE, 5), BRONZE_10(14, Bar.BRONZE, 10), BRONZE_X(13, Bar.BRONZE, -1), BLURITE_1(20, Bar.BLURITE, 1), BLURITE_5(19, Bar.BLURITE, 5), BLURITE_10(18, Bar.BLURITE, 10), BLURITE_X(17, Bar.BLURITE, -1), IRON_1(24, Bar.IRON, 1), IRON_5(23, Bar.IRON, 5), IRON_10(22, Bar.IRON, 10), IRON_X(21, Bar.IRON, -1), SILVER_1(28, Bar.SILVER, 1), SILVER_5(27, Bar.SILVER, 5), SILVER_10(26, Bar.SILVER, 10), SILVER_X(25, Bar.SILVER, -1), STEEL_1(32, Bar.STEEL, 1), STEEL_5(31, Bar.STEEL, 5), STEEL_10(30, Bar.STEEL, 10), STEEL_X(29, Bar.STEEL, -1), GOLD_1(36, Bar.GOLD, 1), GOLD_5(35, Bar.GOLD, 5), GOLD_10(34, Bar.GOLD, 10), GOLD_X(33, Bar.GOLD, -1), MITHRIL_1(40, Bar.MITHRIL, 1), MITHRIL_5(39, Bar.MITHRIL, 5), MITHRIL_10(38, Bar.MITHRIL, 10), MITHRIL_X(37, Bar.MITHRIL, -1), ADAMANT_1(44, Bar.ADAMANT, 1), ADAMANT_5(43, Bar.ADAMANT, 5), ADAMANT_10(42, Bar.ADAMANT, 10), ADAMANT_X(41, Bar.ADAMANT, -1), RUNE_1(48, Bar.RUNITE, 1), RUNE_5(47, Bar.RUNITE, 5), RUNE_10(46, Bar.RUNITE, 10), RUNE_X(45, Bar.RUNITE, -1); + BRONZE_1(16, Bar.BRONZE, 1), BRONZE_5(15, Bar.BRONZE, 5), BRONZE_10(14, Bar.BRONZE, 30), BRONZE_X(13, Bar.BRONZE, -1), BLURITE_1(20, Bar.BLURITE, 1), BLURITE_5(19, Bar.BLURITE, 5), BLURITE_10(18, Bar.BLURITE, 30), BLURITE_X(17, Bar.BLURITE, -1), IRON_1(24, Bar.IRON, 1), IRON_5(23, Bar.IRON, 5), IRON_10(22, Bar.IRON, 30), IRON_X(21, Bar.IRON, -1), SILVER_1(28, Bar.SILVER, 1), SILVER_5(27, Bar.SILVER, 5), SILVER_10(26, Bar.SILVER, 30), SILVER_X(25, Bar.SILVER, -1), STEEL_1(32, Bar.STEEL, 1), STEEL_5(31, Bar.STEEL, 5), STEEL_10(30, Bar.STEEL, 30), STEEL_X(29, Bar.STEEL, -1), GOLD_1(36, Bar.GOLD, 1), GOLD_5(35, Bar.GOLD, 5), GOLD_10(34, Bar.GOLD, 30), GOLD_X(33, Bar.GOLD, -1), MITHRIL_1(40, Bar.MITHRIL, 1), MITHRIL_5(39, Bar.MITHRIL, 5), MITHRIL_10(38, Bar.MITHRIL, 30), MITHRIL_X(37, Bar.MITHRIL, -1), ADAMANT_1(44, Bar.ADAMANT, 1), ADAMANT_5(43, Bar.ADAMANT, 5), ADAMANT_10(42, Bar.ADAMANT, 30), ADAMANT_X(41, Bar.ADAMANT, -1), RUNE_1(48, Bar.RUNITE, 1), RUNE_5(47, Bar.RUNITE, 5), RUNE_10(46, Bar.RUNITE, 30), RUNE_X(45, Bar.RUNITE, -1); /** * Constructs a new {@code BarButton} {@code Object}. diff --git a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt index 21a291360..45925a4e9 100644 --- a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt +++ b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt @@ -11,6 +11,8 @@ import core.game.node.item.Item import core.game.world.map.Location import core.api.hasRequirement; +import core.cache.def.impl.ItemDefinition; + class TeleTabsListener : InteractionListener { enum class TeleTabs(val item: Int, val location: Location, val exp: Double, val requirementCheck: (Player) -> Boolean = { true }) { @@ -18,22 +20,37 @@ class TeleTabsListener : InteractionListener { player -> hasRequirement(player, "Plague City"); }), AIR_ALTAR_TELEPORT(13599, Location.create(2978, 3296, 0), 0.0), - ASTRAL_ALTAR_TELEPORT(13611, Location.create(2156, 3862, 0), 0.0), - BLOOD_ALTAR_TELEPORT(13610, Location.create(3559, 9778, 0), 0.0), + ASTRAL_ALTAR_TELEPORT(13611, Location.create(2156, 3862, 0), 0.0, { + player -> hasRequirement(player, "Lunar Diplomacy"); + }), + BLOOD_ALTAR_TELEPORT(13610, Location.create(3559, 9778, 0), 0.0, { + player -> hasRequirement(player, "Legacy of Seergaze"); + }), BODY_ALTAR_TELEPORT(13604, Location.create(3055, 3443, 0), 0.0), CAMELOT_TELEPORT(8010, Location.create(2757, 3477, 0), 55.5), CHAOS_ALTAR_TELEPORT(13606, Location.create(3058, 3593, 0), 0.0), - COSMIC_ALTAR_TELEPORT(13605, Location.create(2411, 4380, 0), 0.0), - DEATH_ALTAR_TELEPORT(13609, Location.create(1863, 4639, 0), 0.0), + COSMIC_ALTAR_TELEPORT(13605, Location.create(2411, 4380, 0), 0.0, { + player -> hasRequirement(player, "Lost City"); + }), + DEATH_ALTAR_TELEPORT(13609, Location.create(1863, 4639, 0), 0.0, { + player -> hasRequirement(player, "Mourning's End Part II"); + }), EARTH_ALTAR_TELEPORT(13602, Location.create(3304, 3472, 0), 0.0), FALADOR_TELEPORT(8009, Location.create(2966, 3380, 0), 47.0), FIRE_ALTAR_TELEPORT(13603, Location.create(3311, 3252, 0), 0.0), - LAW_ALTAR_TELEPORT(13608, Location.create(2857, 3378, 0), 0.0), + LAW_ALTAR_TELEPORT(13608, Location.create(2857, 3378, 0), 0.0, { + player -> if (!ItemDefinition.canEnterEntrana(player)) (player.sendMessage("The power of Saradomin prevents you from taking armour or weaponry to Entrana.") !is Unit) else true; // ugly way of doing this, but the sendMessage function returns a Unit type, so by using !is Unit it becomes false. + }), LUMBRIDGE_TELEPORT(8008, Location.create(3222, 3218, 0), 41.0), MIND_ALTAR_TELEPORT(13600, Location.create(2979, 3510, 0), 0.0), NATURE_ALTAR_TELEPORT(13607, Location.create(2868, 3013, 0), 0.0), + TELEKINETIC_GRAB(8022, Location.create(2836, 3285, 0), 0.0, { + player -> hasRequirement(player, "Dragon Slayer"); + }), VARROCK_TELEPORT(8007, Location.create(3212, 3423, 0), 35.00), - WATCH_TOWER_TELEPORT(8012, Location.create(2548, 3114, 0), 68.00), + WATCH_TOWER_TELEPORT(8012, Location.create(2548, 3114, 0), 68.00, { + player -> hasRequirement(player, "Watchtower"); + }), WATER_ALTAR_TELEPORT(13601, Location.create(3182, 3162, 0), 0.0); companion object { diff --git a/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt b/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt index 2bb7bb48d..4504e9dfd 100644 --- a/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt +++ b/Server/src/main/content/global/handlers/item/equipment/CrystalEquipmentRegister.kt @@ -7,7 +7,7 @@ class CrystalEquipmentRegister : StartupListener { val shield: Array = arrayOf(Items.NEW_CRYSTAL_SHIELD_4224, Items.CRYSTAL_SHIELD_FULL_4225, Items.CRYSTAL_SHIELD_9_10_4226, Items.CRYSTAL_SHIELD_8_10_4227, Items.CRYSTAL_SHIELD_7_10_4228, Items.CRYSTAL_SHIELD_6_10_4229, Items.CRYSTAL_SHIELD_5_10_4230, Items.CRYSTAL_SHIELD_4_10_4231, Items.CRYSTAL_SHIELD_3_10_4232, Items.CRYSTAL_SHIELD_2_10_4233, Items.CRYSTAL_SHIELD_1_10_4234, Items.CRYSTAL_SEED_4207) val bow: Array = arrayOf(Items.NEW_CRYSTAL_BOW_4212, Items.CRYSTAL_BOW_FULL_4214, Items.CRYSTAL_BOW_9_10_4215, Items.CRYSTAL_BOW_8_10_4216, Items.CRYSTAL_BOW_7_10_4217, Items.CRYSTAL_BOW_6_10_4218, Items.CRYSTAL_BOW_5_10_4219, Items.CRYSTAL_BOW_4_10_4220, Items.CRYSTAL_BOW_3_10_4221, Items.CRYSTAL_BOW_2_10_4222, Items.CRYSTAL_BOW_1_10_4223, Items.CRYSTAL_SEED_4207) override fun startup() { - EquipmentDegrader.registerSet(250, shield) - EquipmentDegrader.registerSet(250, bow) + EquipmentDegrader.registerSet(1200, shield) + EquipmentDegrader.registerSet(1200, bow) } } \ No newline at end of file diff --git a/Server/src/main/content/global/skill/farming/Patch.kt b/Server/src/main/content/global/skill/farming/Patch.kt index c9f90b4a9..3ec029a89 100644 --- a/Server/src/main/content/global/skill/farming/Patch.kt +++ b/Server/src/main/content/global/skill/farming/Patch.kt @@ -350,6 +350,19 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl } fun clear(){ + if (isGrown()) { + var seedAmount = 1 + var seedMessage = "a seed" + if (patch.type == PatchType.ALLOTMENT || plantable!! == Plantable.JUTE_SEED) { + seedAmount = 3 + seedMessage = "some seeds" + } else if (patch.type == PatchType.HOPS_PATCH) { + seedAmount = 4 + seedMessage = "some seeds" + } + addItemOrDrop(player, plantable!!.itemID, seedAmount) + sendMessage(player, "You find $seedMessage in the patch as you clear it.") + } isCheckHealth = false isDiseased = false isDead = false diff --git a/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java b/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java index 50b969efd..a2612543d 100644 --- a/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java +++ b/Server/src/main/content/global/skill/firemaking/FireMakingPulse.java @@ -19,6 +19,8 @@ import org.rs09.consts.Items; import static core.api.ContentAPIKt.inInventory; import static core.api.ContentAPIKt.replaceSlot; +import static core.api.ContentAPIKt.removeItem; + /** * Represents the pulse used to light a log. * @author 'Vexia @@ -102,10 +104,12 @@ public final class FireMakingPulse extends SkillPulse { @Override public boolean reward() { + /* Snowscape: this section allows making a new fire without an animation if you're fast enough, but since we auto-repeat we don't need that if (getLastFire() >= GameWorld.getTicks()) { createFire(); return true; } + */ if (ticks == 0) { player.animate(ANIMATION); } @@ -119,7 +123,13 @@ public final class FireMakingPulse extends SkillPulse { return false; } createFire(); - return true; + // Snowscape: attempt to remove another log. If successful, the pulse continues and the player makes another fire + if (removeItem(player, new Item(node.getId(), 1), Container.INVENTORY)) { + return false; + } else { + return true; + } + } /** diff --git a/Server/src/main/content/global/skill/fletching/Fletching.java b/Server/src/main/content/global/skill/fletching/Fletching.java index de5a99e65..bc2b49f79 100644 --- a/Server/src/main/content/global/skill/fletching/Fletching.java +++ b/Server/src/main/content/global/skill/fletching/Fletching.java @@ -265,13 +265,13 @@ public class Fletching { } } private enum Items{ - STANDARD(1511,FletchingItems.ARROW_SHAFT, FletchingItems.SHORT_BOW, FletchingItems.LONG_BOW, FletchingItems.WOODEN_STOCK), + STANDARD(1511, FletchingItems.ARROW_SHAFT, FletchingItems.SHORT_BOW, FletchingItems.LONG_BOW, FletchingItems.WOODEN_STOCK), ACHEY(2862, FletchingItems.OGRE_ARROW_SHAFT), - OAK(1521, FletchingItems.OAK_SHORTBOW, FletchingItems.OAK_LONGBOW, FletchingItems.OAK_STOCK), - WILLOW(1519, FletchingItems.WILLOW_SHORTBOW, FletchingItems.WILLOW_LONGBOW, FletchingItems.WILLOW_STOCK), - MAPLE(1517, FletchingItems.MAPLE_SHORTOW, FletchingItems.MAPLE_LONGBOW, FletchingItems.MAPLE_STOCK), - YEW(1515, FletchingItems.YEW_SHORTBOW, FletchingItems.YEW_LONGBOW, FletchingItems.YEW_STOCK), - MAGIC(1513, FletchingItems.MAGIC_SHORTBOW, FletchingItems.MAGIC_LONGBOW), + OAK(1521, FletchingItems.OAK_ARROW_SHAFT, FletchingItems.OAK_SHORTBOW, FletchingItems.OAK_LONGBOW, FletchingItems.OAK_STOCK), + WILLOW(1519, FletchingItems.WILLOW_ARROW_SHAFT, FletchingItems.WILLOW_SHORTBOW, FletchingItems.WILLOW_LONGBOW, FletchingItems.WILLOW_STOCK), + MAPLE(1517, FletchingItems.MAPLE_ARROW_SHAFT, FletchingItems.MAPLE_SHORTOW, FletchingItems.MAPLE_LONGBOW, FletchingItems.MAPLE_STOCK), + YEW(1515, FletchingItems.YEW_ARROW_SHAFT, FletchingItems.YEW_SHORTBOW, FletchingItems.YEW_LONGBOW, FletchingItems.YEW_STOCK), + MAGIC(1513, FletchingItems.MAGIC_ARROW_SHAFT, FletchingItems.MAGIC_SHORTBOW, FletchingItems.MAGIC_LONGBOW), TEAK(6333, FletchingItems.TEAK_STOCK), MAHOGANY(6332, FletchingItems.MAHOGANY_STOCK); @@ -306,26 +306,31 @@ public class Fletching { OGRE_ARROW_SHAFT(2864, 6.4, 5, 4), //Oak logs + OAK_ARROW_SHAFT(52, 10, 15, 30), OAK_SHORTBOW(54, 16.5, 20, 1), OAK_LONGBOW(56,25,25,1), OAK_STOCK(9442, 16, 24, 1), //Willow logs + WILLOW_ARROW_SHAFT(52, 15, 30, 45), WILLOW_SHORTBOW(60, 33.3, 35, 1), WILLOW_LONGBOW(58, 41.5, 40, 1), WILLOW_STOCK(9444, 22, 39, 1), //Maple logs + MAPLE_ARROW_SHAFT(52, 20, 45, 60), MAPLE_SHORTOW(64, 50, 50, 1), MAPLE_LONGBOW(62, 58.3, 55, 1), MAPLE_STOCK(9448, 32, 54, 1), //Yew logs + YEW_ARROW_SHAFT(52, 25, 60, 75), YEW_SHORTBOW(68, 67.5, 65, 1), YEW_LONGBOW(66, 75, 70, 1), YEW_STOCK(9452, 50, 69, 1), //Magic logs + MAGIC_ARROW_SHAFT(52, 30, 75, 90), MAGIC_SHORTBOW(72, 83.3, 80,1), MAGIC_LONGBOW(70, 91.5, 85, 1), diff --git a/Server/src/main/content/global/skill/fletching/FletchingPulse.java b/Server/src/main/content/global/skill/fletching/FletchingPulse.java index 9c7d0d638..dbc18af9f 100644 --- a/Server/src/main/content/global/skill/fletching/FletchingPulse.java +++ b/Server/src/main/content/global/skill/fletching/FletchingPulse.java @@ -110,6 +110,16 @@ public final class FletchingPulse extends SkillPulse { switch (fletch) { case ARROW_SHAFT: return "You carefully cut the wood into 15 arrow shafts."; + case OAK_ARROW_SHAFT: + return "You carefully cut the wood into 30 arrow shafts."; + case WILLOW_ARROW_SHAFT: + return "You carefully cut the wood into 45 arrow shafts."; + case MAPLE_ARROW_SHAFT: + return "You carefully cut the wood into 60 arrow shafts."; + case YEW_ARROW_SHAFT: + return "You carefully cut the wood into 75 arrow shafts."; + case MAGIC_ARROW_SHAFT: + return "You carefully cut the wood into 90 arrow shafts."; default: return "You carefully cut the wood into " + (StringUtils.isPlusN(fletch.getItem().getName()) ? "an" : "a") + " " + fletch.getItem().getName().replace("(u)", "").trim() + "."; } diff --git a/Server/src/main/content/global/skill/gather/mining/MiningListener.kt b/Server/src/main/content/global/skill/gather/mining/MiningListener.kt index d744b0a8f..9233b836f 100644 --- a/Server/src/main/content/global/skill/gather/mining/MiningListener.kt +++ b/Server/src/main/content/global/skill/gather/mining/MiningListener.kt @@ -136,7 +136,7 @@ class MiningListener : InteractionListener { } // Transform ore to depleted version - if (!isEssence && resource!!.respawnRate != 0) { + if (!isEssence && resource!!.respawnRate != 0 && RandomFunction.roll(getDynLevel(player, Skills.MINING)*5/resource!!.respawnDuration + 1)) { SceneryBuilder.replace(node as Scenery, Scenery(resource!!.emptyId, node.getLocation(), node.type, node.rotation), resource!!.respawnDuration) node.setActive(false) return true diff --git a/Server/src/main/content/global/skill/gather/mining/MiningNode.java b/Server/src/main/content/global/skill/gather/mining/MiningNode.java index 5f7f00cf3..11a564cf8 100644 --- a/Server/src/main/content/global/skill/gather/mining/MiningNode.java +++ b/Server/src/main/content/global/skill/gather/mining/MiningNode.java @@ -522,21 +522,21 @@ public enum MiningNode{ experience = 80.0; rate = 0.70; reward = 447; - level = 55; + level = 50; break; case 11: respawnRate = 400 | 800 << 16; experience = 95.0; rate = 0.85; reward = 449; - level = 70; + level = 60; break; case 12: respawnRate = 1250 | 2500 << 16; experience = 125.0; rate = 0.95; reward = 451; - level = 85; + level = 70; break; case 13: respawnRate = 166 | 175 << 16; diff --git a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt index c73b135b6..4ca385088 100644 --- a/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt +++ b/Server/src/main/content/global/skill/gather/woodcutting/WoodcuttingListener.kt @@ -156,7 +156,7 @@ class WoodcuttingListener : InteractionListener { //OSRS: https://oldschool.runescape.wiki/w/Woodcutting scroll down to the mechanics section //RS3 : https://runescape.wiki/w/Woodcutting scroll down to the mechanics section, and expand the tree felling chances table if (resource.getRespawnRate() > 0) { - if (RandomFunction.roll(8) || listOf(1, 2, 3, 4, 6).contains(resource.identifier.toInt())){ + if (RandomFunction.roll(8) || listOf(2, 3, 4, 6).contains(resource.identifier.toInt())){ if (resource.isFarming()) { val fPatch = forObject(node.asScenery()) if (fPatch != null) { diff --git a/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt b/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt index 7ba8cfe5a..a2cd826d1 100644 --- a/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt +++ b/Server/src/main/content/global/skill/herblore/HerbCleanListener.kt @@ -7,6 +7,9 @@ import core.game.node.entity.skill.Skills import core.game.node.item.Item import java.util.* +import core.game.system.task.Pulse + + /** * Dirty herb cleaning listener * @author Woah @@ -24,11 +27,30 @@ class HerbCleanListener : InteractionListener { } val exp = herb.experience + + player.pulseManager.run(object : Pulse() { + var counter = 0 + override fun pulse(): Boolean { + if (amountInInventory(player, node.asItem().id) == 0 ) + return true + if(removeItem(player, node.asItem().id)) { + addItem(player, herb.product.id) + rewardXP(player, Skills.HERBLORE, exp) + playAudio(player, 5153) + //sendMessage(player, "You clean the dirt from the " + herb.product.name.lowercase(Locale.getDefault()).replace("clean", "").trim { it <= ' ' } + " leaf.") + } + return false + } + }) + return@on true + + /* Vanilla actions, replaced by pulse above replaceSlot(player, node.asItem().slot, herb.product, node.asItem()) rewardXP(player, Skills.HERBLORE, exp) playAudio(player, 5153) sendMessage(player, "You clean the dirt from the " + herb.product.name.lowercase(Locale.getDefault()).replace("clean", "").trim { it <= ' ' } + " leaf.") return@on true + */ } } } \ No newline at end of file diff --git a/Server/src/main/content/global/skill/herblore/HerbTarPulse.java b/Server/src/main/content/global/skill/herblore/HerbTarPulse.java index 45793be82..a63c5f4f5 100644 --- a/Server/src/main/content/global/skill/herblore/HerbTarPulse.java +++ b/Server/src/main/content/global/skill/herblore/HerbTarPulse.java @@ -25,7 +25,7 @@ public final class HerbTarPulse extends SkillPulse { /** * Represents the swamp tar item. */ - private static final Item SWAMP_TAR = new Item(1939, 15); + private static final Item SWAMP_TAR = new Item(1939, 45); /** * Represents the tar to make. @@ -65,7 +65,7 @@ public final class HerbTarPulse extends SkillPulse { return false; } if (!player.getInventory().containsItem(SWAMP_TAR)) { - player.getPacketDispatch().sendMessage("You need at least 15 swamp tar in order to do this."); + player.getPacketDispatch().sendMessage("You need at least 45 swamp tar in order to do this."); return false; } return true; @@ -83,7 +83,7 @@ public final class HerbTarPulse extends SkillPulse { return false; } if (player.getInventory().containsItem(SWAMP_TAR) && player.getInventory().containsItem(tar.getIngredient()) && player.getInventory().remove(SWAMP_TAR) && player.getInventory().remove(tar.getIngredient())) { - final Item item = new Item(tar.getTar().getId(), 15); + final Item item = new Item(tar.getTar().getId(), 45); player.getInventory().add(item); player.getSkills().addExperience(Skills.HERBLORE, tar.getExperience(), true); player.getPacketDispatch().sendMessage("You add the " + tar.getIngredient().getName().toLowerCase().replace("clean", "").trim() + " to the swamp tar."); diff --git a/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java b/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java index 800e342eb..a1cf25062 100644 --- a/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java +++ b/Server/src/main/content/global/skill/hunter/ImpBoxPlugin.java @@ -46,10 +46,16 @@ public class ImpBoxPlugin extends OptionHandler { public boolean handle(Player player, Node node, String option) { switch (option) { case "bank": + int boxSlot = node.asItem().getSlot(); + player.getInventory().replace(new Item(10025), boxSlot); + player.sendMessage("You free the imp in exchange for it taking some items to your bank."); + player.getBank().openDepositBox(); + /* Snowscape Custom: the normal imp interface is broken, so we fixed/buffed it by making it act as a one-time-use deposit box instead. Component component = new Component(478); component.setPlugin(new ImpInterfaceHandler((Item) node)); player.getInterfaceManager().open(component); PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 478, 61, 91, player.getInventory(), true)); + */ break; case "talk-to": player.getDialogueInterpreter().open("imp-box"); diff --git a/Server/src/main/content/global/skill/hunter/TrapWrapper.java b/Server/src/main/content/global/skill/hunter/TrapWrapper.java index 4cbe32987..b596d864c 100644 --- a/Server/src/main/content/global/skill/hunter/TrapWrapper.java +++ b/Server/src/main/content/global/skill/hunter/TrapWrapper.java @@ -102,7 +102,7 @@ public final class TrapWrapper { this.type = type; this.object = object; this.originalId = object.getId(); - this.ticks = GameWorld.getTicks() + (100); + this.ticks = GameWorld.getTicks() + (1000); this.instance = HunterManager.getInstance(player); this.object.getAttributes().setAttribute("trap-uid", instance.getUid()); } diff --git a/Server/src/main/content/global/skill/hunter/Traps.java b/Server/src/main/content/global/skill/hunter/Traps.java index f2151d660..e5e30ca34 100644 --- a/Server/src/main/content/global/skill/hunter/Traps.java +++ b/Server/src/main/content/global/skill/hunter/Traps.java @@ -21,12 +21,12 @@ import static core.api.ContentAPIKt.log; */ public enum Traps { BIRD_SNARE(new TrapSetting(10006, new int[] { 19175 }, new int[] {}, "lay", 19174, Animation.create(5208), Animation.create(5207), 1), - new TrapNode(new int[] { 5073 }, 1, 34, new int[] { 19179, 19180 }, new Item[] { new Item(10088, 8), new Item(9978), new Item(526) }), - new TrapNode(new int[] { 5075 }, 5, 48, new int[] { 19183, 19184 }, new Item[] { new Item(10090, 8), new Item(9978), new Item(526) }), - new TrapNode(new int[] { 5076 }, 9, 61, new int[] { 19185, 19186 }, new Item[] { new Item(10091, 8), new Item(9978), new Item(526) }), - new TrapNode(new int[] { 5074 }, 11, 64.7, new int[] { 19181, 19182 }, new Item[] { new Item(10089, 8), new Item(9978), new Item(526) }), - new TrapNode(new int[] { 5072 }, 19, 95.2, new int[] { 19177, 19178 }, new Item[] { new Item(10087, 8), new Item(9978), new Item(526) }), - new TrapNode(new int[] { 7031 }, 39, 167, new int[] { 28931, 28930 }, new Item[] { new Item(11525, 8), new Item(9978), new Item(526) }) { + new TrapNode(new int[] { 5073 }, 1, 34, new int[] { 19179, 19180 }, new Item[] { new Item(10088, 60), new Item(9978), new Item(526) }), + new TrapNode(new int[] { 5075 }, 5, 48, new int[] { 19183, 19184 }, new Item[] { new Item(10090, 60), new Item(9978), new Item(526) }), + new TrapNode(new int[] { 5076 }, 9, 61, new int[] { 19185, 19186 }, new Item[] { new Item(10091, 60), new Item(9978), new Item(526) }), + new TrapNode(new int[] { 5074 }, 11, 64.7, new int[] { 19181, 19182 }, new Item[] { new Item(10089, 60), new Item(9978), new Item(526) }), + new TrapNode(new int[] { 5072 }, 19, 95.2, new int[] { 19177, 19178 }, new Item[] { new Item(10087, 60), new Item(9978), new Item(526) }), + new TrapNode(new int[] { 7031 }, 39, 167, new int[] { 28931, 28930 }, new Item[] { new Item(11525, 60), new Item(9978), new Item(526) }) { @Override public boolean canCatch(TrapWrapper wrapper, final NPC npc) { return false; diff --git a/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java b/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java index 3944c3c7e..ec6c8999c 100644 --- a/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java +++ b/Server/src/main/content/global/skill/magic/ancient/AncientTeleportPlugin.java @@ -51,10 +51,12 @@ public final class AncientTeleportPlugin extends MagicSpell { @Override public boolean cast(Entity entity, Node target) { + /* Snowscape Custom to allow teleporting in wilderness. The teleport limitations are still checked later by the send() function, so this is not if (entity.isTeleBlocked() || !super.meetsRequirements(entity, true, false)) { entity.asPlayer().sendMessage("A magical force has stopped you from teleporting."); return false; } + */ if (entity.getTeleporter().send(location.transform(0, RandomFunction.random(3), 0), getSpellId() == 28 ? TeleportType.HOME : TeleportType.ANCIENT)) { if (!super.meetsRequirements(entity, true, true)) { entity.getTeleporter().getCurrentTeleport().stop(); diff --git a/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt b/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt index 1a89b9f85..a55a32bac 100644 --- a/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt +++ b/Server/src/main/content/global/skill/magic/lunar/LunarListeners.kt @@ -374,16 +374,26 @@ class LunarListeners : SpellListener("lunar"), Commands { setDelay(player, false) openSingleTab(player, Components.DREAM_MONSTER_STAT_522) - setInterfaceText(player, "Monster name : ${npc.definition.name}", Components.DREAM_MONSTER_STAT_522, 0) - setInterfaceText(player, "Combat Level : ${npc.definition.combatLevel}", Components.DREAM_MONSTER_STAT_522, 1) - setInterfaceText(player, "Hitpoints : ${npc.definition.handlers[NPCConfigParser.LIFEPOINTS] ?: 0}", Components.DREAM_MONSTER_STAT_522, 2) - setInterfaceText(player, "Max hit : ${npc.getSwingHandler(false).calculateHit(npc, player, 1.0)}", Components.DREAM_MONSTER_STAT_522, 3) + var bonuses = npc.properties.bonuses + setInterfaceText(player, "Monster name: ${npc.definition.name} (${npc.definition.combatLevel})", Components.DREAM_MONSTER_STAT_522, 0) + setInterfaceText(player, """ +Att:${npc.definition.handlers[NPCConfigParser.ATTACK_LEVEL] ?: 0} +Str:${npc.definition.handlers[NPCConfigParser.STRENGTH_LEVEL] ?: 0} +Ranged:${npc.definition.handlers[NPCConfigParser.RANGE_LEVEL] ?: 0} +Magic:${npc.definition.handlers[NPCConfigParser.MAGIC_LEVEL] ?: 0}""", Components.DREAM_MONSTER_STAT_522, 1) + setInterfaceText(player, """ +Defence:${npc.definition.handlers[NPCConfigParser.DEFENCE_LEVEL] ?: 0} +HP:${npc.definition.handlers[NPCConfigParser.LIFEPOINTS] ?: 0} +Max-hit:${npc.getSwingHandler(false).calculateHit(npc, player, 1.0)}""", Components.DREAM_MONSTER_STAT_522, 2) + setInterfaceText(player, "${bonuses[0]},${bonuses[1]},${bonuses[2]},${bonuses[3]},${bonuses[4]}, ${bonuses[5]},${bonuses[6]},${bonuses[7]},${bonuses[8]},${bonuses[9]}", Components.DREAM_MONSTER_STAT_522, 3) val poisonStatus = if(npc.definition.handlers.getOrDefault(NPCConfigParser.POISON_IMMUNE,false) == true){ - "This creature is immune to poison." - } else "This creature is not immune to poison." - - setInterfaceText(player, poisonStatus, Components.DREAM_MONSTER_STAT_522, 4) + "Immune to poison. " + } else "" + val poisonStatus2 = if(npc.definition.handlers.getOrDefault(NPCConfigParser.POISONOUS,false) == true){ + "Poisonous." + } else "" + setInterfaceText(player, poisonStatus + poisonStatus2, Components.DREAM_MONSTER_STAT_522, 4) } // Level 67 @@ -698,6 +708,24 @@ class LunarListeners : SpellListener("lunar"), Commands { sendMessage(player, "You need to use this spell on logs.") return } + player.pulseManager.run(object : Pulse() { + var counter = 0 + override fun pulse(): Boolean { + removeAttribute(player, "spell:runes") + if (amountInInventory(player, item.id) == 0 ) + return true + requires(player, 86, arrayOf(Item(Items.ASTRAL_RUNE_9075, 2), Item(Items.NATURE_RUNE_561, 1), Item(Items.EARTH_RUNE_557, 15))) + if(removeItem(player, item.id) && addItem(player, plankType.plank.id)) { + removeRunes(player, false) + if (counter % 6 == 0) + visualizeSpell(player, Animations.LUNAR_SPELLBOOK_PLANK_MAKE_6298, Graphics.LUNAR_SPELLBOOK_PLANK_MAKE_1063, 120, Sounds.LUNAR_MAKE_PLANK_3617) + addXP(player, 90.0) + } + counter++ + return false + } + }) + /* Vanilla Spell if (amountInInventory(player, Items.COINS_995) < plankType.price || !removeItem(player, Item(Items.COINS_995, plankType.price))) { sendMessage(player, "You need ${plankType.price} coins to convert that log into a plank.") return @@ -709,6 +737,7 @@ class LunarListeners : SpellListener("lunar"), Commands { replaceSlot(player, item.slot, plankType.plank) addXP(player, 90.0) showMagicTab(player) + */ } // Level 91 diff --git a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt index 262824d2c..d56b8230b 100644 --- a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt +++ b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt @@ -30,6 +30,8 @@ import org.rs09.consts.Items import org.rs09.consts.Scenery import org.rs09.consts.Sounds +import core.game.system.task.Pulse + class ModernListeners : SpellListener("modern"){ override fun defineListeners() { onCast(Modern.HOME_TELEPORT, NONE){ player, _ -> @@ -228,29 +230,66 @@ class ModernListeners : SpellListener("modern"){ return false } + var loop = true + + val ringOfWealth = intArrayOf(14646,14644,14642,14640,14638) + if(high && ringOfWealth.contains(item.id)){ + if (getAttribute(player, "ringofwealth:unlocked", false)) { + player.sendMessage("You have already unlocked the permanent Wealth effect and can no longer ") + player.sendMessage("alchemize this ring.") + return false + } else { + player.setAttribute("/save:ringofwealth:unlocked", true) + player.sendMessage("Combining the Alchemy spell with the Wealth enchantment causes a strange ") + player.sendMessage("interaction. You are now permanently enchanted with the Wealth effect and ") + player.sendMessage("no longer need to wear the ring to get the benefit of increased rare drops.") + loop = false + } + } + if (player.pulseManager.current !is MovementPulse) { player.pulseManager.clear() } - if (explorersRing) { - visualize(player, LOW_ALCH_ANIM, EXPLORERS_RING_GFX) - } else { - val weapon = getItemFromEquipment(player, EquipmentSlot.WEAPON) - if (weapon != null && weapon.id in MagicStaff.FIRE_RUNE.staves) { - visualize(player, if (high) HIGH_ALCH_STAFF_ANIM else LOW_ALCH_STAFF_ANIM, if (high) HIGH_ALCH_STAFF_GFX else LOW_ALCH_STAFF_GFX) - } else { - visualize(player, if (high) HIGH_ALCH_ANIM else LOW_ALCH_ANIM, if (high) HIGH_ALCH_GFX else LOW_ALCH_GFX) + player.pulseManager.run(object : Pulse(){ + var counter = 0 + override fun pulse(): Boolean { + if (amountInInventory(player, item.id) == 0 || counter >= 150) + return true + removeAttribute(player, "spell:runes") + if (counter % 5 == 0) { + if (explorersRing) { + visualize(player, LOW_ALCH_ANIM, EXPLORERS_RING_GFX) + } else { + val weapon = getItemFromEquipment(player, EquipmentSlot.WEAPON) + if (weapon != null && weapon.id in MagicStaff.FIRE_RUNE.staves) { + visualize(player, if (high) HIGH_ALCH_STAFF_ANIM else LOW_ALCH_STAFF_ANIM, if (high) HIGH_ALCH_STAFF_GFX else LOW_ALCH_STAFF_GFX) + } else { + visualize(player, if (high) HIGH_ALCH_ANIM else LOW_ALCH_ANIM, if (high) HIGH_ALCH_GFX else LOW_ALCH_GFX) + } + } + playAudio(player, if (high) Sounds.HIGH_ALCHEMY_97 else Sounds.LOW_ALCHEMY_98) + player.dispatch(ItemAlchemizationEvent(item.id, high)) + if (high) + requires(player,55, arrayOf(Item(Items.FIRE_RUNE_554,5),Item(Items.NATURE_RUNE_561,1))) + else + requires(player,21, arrayOf(Item(Items.FIRE_RUNE_554,3),Item(Items.NATURE_RUNE_561))) + removeRunes(player, false) + addXP(player, if (high) 65.0 else 31.0) + if (player.inventory.remove(Item(item.id, 1)) && coins.amount > 0) { + player.inventory.add(coins) + } + //showMagicTab(player) + setDelay(player, 5) + } + if (loop) { + counter++ + return false + } else { + return true + } } - } - playAudio(player, if (high) Sounds.HIGH_ALCHEMY_97 else Sounds.LOW_ALCHEMY_98) - player.dispatch(ItemAlchemizationEvent(item.id, high)) - if (player.inventory.remove(Item(item.id, 1)) && coins.amount > 0) { - player.inventory.add(coins) - } - removeRunes(player) - addXP(player, if (high) 65.0 else 31.0) - showMagicTab(player) - setDelay(player, 5) + }) return true } diff --git a/Server/src/main/content/global/skill/runecrafting/Altar.java b/Server/src/main/content/global/skill/runecrafting/Altar.java index 8be433efc..53f4773b0 100644 --- a/Server/src/main/content/global/skill/runecrafting/Altar.java +++ b/Server/src/main/content/global/skill/runecrafting/Altar.java @@ -6,6 +6,8 @@ import core.game.node.scenery.Scenery; import static core.api.ContentAPIKt.hasRequirement; +import core.game.world.map.Location; + /** * Represents an altar an it's relative information(corresponding ruin, etc) * @author 'Vexia @@ -82,6 +84,14 @@ public enum Altar { if (this == BLOOD) { if (!hasRequirement(player, "Legacy of Seergaze")) return; + } + if (this == SOUL) { + if (player.getQuestRepository().isComplete("Dragon Slayer")) { + player.getProperties().setTeleportLocation(Location.create(2836, 3285, 0)); + } else { + player.sendMessage("You need to have completed the Dragon Slayer quest in order to do that."); + return; + } } if (this == LAW) { if (!ItemDefinition.canEnterEntrana(player)) { diff --git a/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java b/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java index d32bea579..5006b52be 100644 --- a/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java +++ b/Server/src/main/content/global/skill/runecrafting/RuneCraftPulse.java @@ -40,6 +40,7 @@ public final class RuneCraftPulse extends SkillPulse { * Represents the pure essence item. */ private static final Item PURE_ESSENCE = new Item(7936); + private static final Item SOFT_CLAY = new Item(1761); /** * Represents the binding necklace item. @@ -119,12 +120,12 @@ public final class RuneCraftPulse extends SkillPulse { player.getPacketDispatch().sendMessage("You need pure essence to craft this rune."); return false; } - if (!altar.isOurania() && !rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE)) { - player.getPacketDispatch().sendMessage("You need pure essence to craft this rune."); + if (!altar.isOurania() && !rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE) && !player.getInventory().containsItem(SOFT_CLAY)) { + player.getPacketDispatch().sendMessage("You need pure essence to craft this rune, or soft clay to craft teleport tablets."); return false; } - if (!altar.isOurania() && rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE) && !player.getInventory().containsItem(RUNE_ESSENCE)) { - player.getPacketDispatch().sendMessage("You need rune essence or pure essence in order to craft this rune."); + if (!altar.isOurania() && rune.isNormal() && !player.getInventory().containsItem(PURE_ESSENCE) && !player.getInventory().containsItem(RUNE_ESSENCE) && !player.getInventory().containsItem(SOFT_CLAY)) { + player.getPacketDispatch().sendMessage("You need rune essence or pure essence in order to craft this rune, or soft clay to craft teleport tablets."); return false; } if (altar.isOurania() && !player.getInventory().containsItem(PURE_ESSENCE)) { @@ -160,6 +161,7 @@ public final class RuneCraftPulse extends SkillPulse { @Override public boolean reward() { if (!combination) { + craftTablet(); craft(); } else { combine(); @@ -177,7 +179,7 @@ public final class RuneCraftPulse extends SkillPulse { int total = 0; for(int j = 0; j < amount; j++) { // since getMultiplier is stochastic, roll `amount` independent copies - total += getMultiplier(); + total += getMultiplier(rune); } Item i = new Item(rune.getRune().getId(), total); @@ -215,7 +217,9 @@ public final class RuneCraftPulse extends SkillPulse { player.getPacketDispatch().sendMessage("You bind the temple's power into runes."); player.incrementAttribute("/save:" + STATS_BASE + ":" + STATS_RC, amount); for (int i = 0; i < amount; i++) { - Rune rune = null; + Rune rune = getOuraniaRune(player.getSkills().getLevel(Skills.RUNECRAFTING)); + /* Snowscape: removed this placeholder formula and implemented the real ourania probabilities. The multiplier on Orania runes is also a custom feature. + Rune rune = null; while (rune == null) { final Rune temp = Rune.values()[RandomFunction.random(Rune.values().length)]; if (player.getSkills().getLevel(Skills.RUNECRAFTING) >= temp.getLevel()) { @@ -226,17 +230,48 @@ public final class RuneCraftPulse extends SkillPulse { } } } + */ player.getSkills().addExperience(Skills.RUNECRAFTING, rune.getExperience() * 2, true); - Item runeItem = rune.getRune(); + Item runeItem = new Item(rune.getRune().getId(),getMultiplier(rune)); player.getInventory().add(runeItem); } } } } - /** - * Method used to combine runes. - */ + /** + * Method used to combine runes. Snowscape custom: you get multiple combination runes per essence (the opposite rune cost scales to match the multiplier) + */ + private final void combine() { + final Item remove = node.getName().contains("talisman") ? node : talisman != null ? talisman.getTalisman() : Talisman.forName(Rune.forItem(node).name()).getTalisman(); + boolean imbued = hasSpellImbue(); + if (!imbued ? player.getInventory().remove(remove) : imbued) { + int essenceAmt = player.getInventory().getAmount(PURE_ESSENCE); + int multiplier = getMultiplier(altar.getRune()); + final Item rune = node.getName().contains("rune") ? Rune.forItem(node).getRune() : Rune.forName(Talisman.forItem(node).name()).getRune(); + for (int i = 0; i < essenceAmt; i++) { + int runeAmt = player.getInventory().getAmount(rune); + if (runeAmt > 0 && player.getInventory().remove(new Item(PURE_ESSENCE.getId(),1))) { + if (runeAmt < multiplier) { + multiplier = runeAmt; + } + player.getInventory().remove(new Item(rune.getId(), multiplier)); + if (RandomFunction.random(2) == 1 || hasBindingNecklace()) { + player.getInventory().add(new Item(combo.getRune().getId(), multiplier)); + player.getSkills().addExperience(Skills.RUNECRAFTING, combo.getExperience(), true); + } + } + } + if (hasBindingNecklace()) { + player.getEquipment().get(EquipmentContainer.SLOT_AMULET).setCharge(player.getEquipment().get(EquipmentContainer.SLOT_AMULET).getCharge() - 1); + if (1000 - player.getEquipment().get(EquipmentContainer.SLOT_AMULET).getCharge() > 14) { + player.getEquipment().remove(BINDING_NECKLACE, true); + player.getPacketDispatch().sendMessage("Your binding necklace crumbles into dust."); + } + } + } + } + /* Original function, replaced by snowscape custom above private final void combine() { final Item remove = node.getName().contains("talisman") ? node : talisman != null ? talisman.getTalisman() : Talisman.forName(Rune.forItem(node).name()).getTalisman(); boolean imbued = hasSpellImbue(); @@ -267,6 +302,33 @@ public final class RuneCraftPulse extends SkillPulse { } } } +*/ + /** + * Method used to craft tablets. Custom for Snowscape + */ + private final void craftTablet() { + int amount = player.getInventory().getAmount(new Item(1761)); + Item clay = new Item(1761, amount); + Item tablet = null; + if (altar == Altar.AIR) { tablet = new Item(13599, amount); } + if (altar == Altar.MIND) { tablet = new Item(13600, amount); } + if (altar == Altar.WATER) { tablet = new Item(13601, amount); } + if (altar == Altar.EARTH) { tablet = new Item(13602, amount); } + if (altar == Altar.FIRE) { tablet = new Item(13603, amount); } + if (altar == Altar.BODY) { tablet = new Item(13604, amount); } + if (altar == Altar.COSMIC) { tablet = new Item(13605, amount); } + if (altar == Altar.CHAOS) { tablet = new Item(13606, amount); } + if (altar == Altar.ASTRAL) { tablet = new Item(13611, amount); } + if (altar == Altar.NATURE) { tablet = new Item(13607, amount); } + if (altar == Altar.LAW) { tablet = new Item(13608, amount); } + if (altar == Altar.DEATH) { tablet = new Item(13609, amount); } + if (altar == Altar.BLOOD) { tablet = new Item(13610, amount); } + if (altar == Altar.SOUL) { tablet = new Item(8022, amount); } + if (tablet != null && player.getInventory().remove(clay)) { + player.getInventory().add(tablet); + player.getPacketDispatch().sendMessage("You bind the temple's power into teleport tablets."); + } + } /** * Checks if the player has the spell imbue. @@ -318,10 +380,12 @@ public final class RuneCraftPulse extends SkillPulse { * * @return the amount. */ - public int getMultiplier() { + public int getMultiplier(Rune rune) { + /* if (altar.isOurania()) { return 1; } + */ int rcLevel = player.getSkills().getLevel(Skills.RUNECRAFTING); int runecraftingFormulaRevision = ServerConstants.RUNECRAFTING_FORMULA_REVISION; boolean lumbridgeDiary = player.getAchievementDiaryManager().getDiary(DiaryType.LUMBRIDGE).isComplete(1); @@ -365,6 +429,38 @@ public final class RuneCraftPulse extends SkillPulse { public boolean hasBindingNecklace() { return player.getEquipment().containsItem(BINDING_NECKLACE); } + + /** + * Method used to get a random rune for the Ourania altar based on runecrafting level. + * Todo: This should probably use a weighted table but I couldn't figure them out. + * @return the randomly selected rune. + */ + public static Rune getOuraniaRune(int rcLevel) { + int random = RandomFunction.random(10000); + if (rcLevel >= 99) { + if (random > 9100) { return Rune.SOUL; } else if (random > 7800) { return Rune.BLOOD; } else if (random > 6250) { return Rune.DEATH; } else if (random > 4800) { return Rune.LAW; } else if (random > 3450) { return Rune.NATURE; } else if (random > 2500) { return Rune.ASTRAL; } else if (random > 1900) { return Rune.CHAOS; } else if (random > 1400) { return Rune.COSMIC; } else if (random > 1000) { return Rune.BODY; } else if (random > 700) { return Rune.FIRE; } else if (random > 400) { return Rune.EARTH; } else if (random > 200) { return Rune.WATER; } else if (random > 100) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 90) { + if (random > 9350) { return Rune.SOUL; } else if (random > 8350) { return Rune.BLOOD; } else if (random > 6700) { return Rune.DEATH; } else if (random > 5250) { return Rune.LAW; } else if (random > 3900) { return Rune.NATURE; } else if (random > 2900) { return Rune.ASTRAL; } else if (random > 2200) { return Rune.CHAOS; } else if (random > 1600) { return Rune.COSMIC; } else if (random > 1100) { return Rune.BODY; } else if (random > 700) { return Rune.FIRE; } else if (random > 400) { return Rune.EARTH; } else if (random > 200) { return Rune.WATER; } else if (random > 100) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 80) { + if (random > 9600) { return Rune.SOUL; } else if (random > 9000) { return Rune.BLOOD; } else if (random > 7550) { return Rune.DEATH; } else if (random > 6100) { return Rune.LAW; } else if (random > 4750) { return Rune.NATURE; } else if (random > 3700) { return Rune.ASTRAL; } else if (random > 2900) { return Rune.CHAOS; } else if (random > 2200) { return Rune.COSMIC; } else if (random > 1600) { return Rune.BODY; } else if (random > 700) { return Rune.FIRE; } else if (random > 400) { return Rune.EARTH; } else if (random > 200) { return Rune.WATER; } else if (random > 100) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 70) { + if (random > 9800) { return Rune.SOUL; } else if (random > 9300) { return Rune.BLOOD; } else if (random > 8300) { return Rune.DEATH; } else if (random > 6500) { return Rune.LAW; } else if (random > 5000) { return Rune.NATURE; } else if (random > 3800) { return Rune.ASTRAL; } else if (random > 2900) { return Rune.CHAOS; } else if (random > 2200) { return Rune.COSMIC; } else if (random > 1700) { return Rune.BODY; } else if (random > 1300) { return Rune.FIRE; } else if (random > 900) { return Rune.EARTH; } else if (random > 600) { return Rune.WATER; } else if (random > 300) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 60) { + if (random > 9900) { return Rune.SOUL; } else if (random > 9700) { return Rune.BLOOD; } else if (random > 9300) { return Rune.DEATH; } else if (random > 8500) { return Rune.LAW; } else if (random > 6950) { return Rune.NATURE; } else if (random > 5550) { return Rune.ASTRAL; } else if (random > 4500) { return Rune.CHAOS; } else if (random > 3550) { return Rune.COSMIC; } else if (random > 2800) { return Rune.BODY; } else if (random > 2100) { return Rune.FIRE; } else if (random > 1500) { return Rune.EARTH; } else if (random > 950) { return Rune.WATER; } else if (random > 450) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 50) { + if (random > 9920) { return Rune.SOUL; } else if (random > 9750) { return Rune.BLOOD; } else if (random > 9400) { return Rune.DEATH; } else if (random > 8700) { return Rune.LAW; } else if (random > 7350) { return Rune.NATURE; } else if (random > 5850) { return Rune.ASTRAL; } else if (random > 4750) { return Rune.CHAOS; } else if (random > 3750) { return Rune.COSMIC; } else if (random > 3000) { return Rune.BODY; } else if (random > 2300) { return Rune.FIRE; } else if (random > 1650) { return Rune.EARTH; } else if (random > 1050) { return Rune.WATER; } else if (random > 500) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 40) { + if (random > 9960) { return Rune.SOUL; } else if (random > 9880) { return Rune.BLOOD; } else if (random > 9760) { return Rune.DEATH; } else if (random > 9500) { return Rune.LAW; } else if (random > 9000) { return Rune.NATURE; } else if (random > 8000) { return Rune.ASTRAL; } else if (random > 6000) { return Rune.CHAOS; } else if (random > 4500) { return Rune.COSMIC; } else if (random > 3500) { return Rune.BODY; } else if (random > 2700) { return Rune.FIRE; } else if (random > 1950) { return Rune.EARTH; } else if (random > 1250) { return Rune.WATER; } else if (random > 600) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 30) { + if (random > 9980) { return Rune.SOUL; } else if (random > 9940) { return Rune.BLOOD; } else if (random > 9880) { return Rune.DEATH; } else if (random > 9750) { return Rune.LAW; } else if (random > 9500) { return Rune.NATURE; } else if (random > 9000) { return Rune.ASTRAL; } else if (random > 8000) { return Rune.CHAOS; } else if (random > 6000) { return Rune.COSMIC; } else if (random > 4700) { return Rune.BODY; } else if (random > 3500) { return Rune.FIRE; } else if (random > 2400) { return Rune.EARTH; } else if (random > 1500) { return Rune.WATER; } else if (random > 700) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 20) { + if (random > 9992) { return Rune.SOUL; } else if (random > 9977) { return Rune.BLOOD; } else if (random > 9945) { return Rune.DEATH; } else if (random > 9890) { return Rune.LAW; } else if (random > 9780) { return Rune.NATURE; } else if (random > 9570) { return Rune.ASTRAL; } else if (random > 9150) { return Rune.CHAOS; } else if (random > 8350) { return Rune.COSMIC; } else if (random > 6750) { return Rune.BODY; } else if (random > 5250) { return Rune.FIRE; } else if (random > 3850) { return Rune.EARTH; } else if (random > 2500) { return Rune.WATER; } else if (random > 1200) { return Rune.MIND; } else { return Rune.AIR; } + } else if (rcLevel >= 10) { + if (random > 9997) { return Rune.SOUL; } else if (random > 9991) { return Rune.BLOOD; } else if (random > 9979) { return Rune.DEATH; } else if (random > 9955) { return Rune.LAW; } else if (random > 9915) { return Rune.NATURE; } else if (random > 9855) { return Rune.ASTRAL; } else if (random > 9775) { return Rune.CHAOS; } else if (random > 9600) { return Rune.COSMIC; } else if (random > 9000) { return Rune.BODY; } else if (random > 7800) { return Rune.FIRE; } else if (random > 5400) { return Rune.EARTH; } else if (random > 3300) { return Rune.WATER; } else if (random > 1500) { return Rune.MIND; } else { return Rune.AIR; } + } else { + if (random > 9998) { return Rune.SOUL; } else if (random > 9993) { return Rune.BLOOD; } else if (random > 9985) { return Rune.DEATH; } else if (random > 9970) { return Rune.LAW; } else if (random > 9940) { return Rune.NATURE; } else if (random > 9895) { return Rune.ASTRAL; } else if (random > 9835) { return Rune.CHAOS; } else if (random > 9750) { return Rune.COSMIC; } else if (random > 9600) { return Rune.BODY; } else if (random > 9300) { return Rune.FIRE; } else if (random > 8700) { return Rune.EARTH; } else if (random > 7500) { return Rune.WATER; } else if (random > 5000) { return Rune.MIND; } else { return Rune.AIR; } + } + } /** * Gets the altar. diff --git a/Server/src/main/content/global/skill/slayer/SlayerManager.kt b/Server/src/main/content/global/skill/slayer/SlayerManager.kt index 5542a7777..f0ff71ed5 100644 --- a/Server/src/main/content/global/skill/slayer/SlayerManager.kt +++ b/Server/src/main/content/global/skill/slayer/SlayerManager.kt @@ -13,6 +13,8 @@ import org.json.simple.JSONObject import java.util.* import org.rs09.consts.Items +import content.global.skill.hunter.HunterNPC + /** * Manages the players slayer data. * @author Ceikry @@ -101,9 +103,13 @@ class SlayerManager(val player: Player? = null) : LoginListener, PersistPlayer, val player = entity as? Player ?: return val slayer = getInstance(player) val flags = slayer.flags + var xp = npc.skills.maximumLifepoints.toDouble() + //Snowscape custom: grant a third of the normal slayer exp on all kills (this stacks with the exp from on-task kills) + if (npc !is HunterNPC) + rewardXP(player, Skills.SLAYER, xp/3) if (slayer.hasTask() && npc.id in slayer.task!!.npcs) { - var xp = npc.skills.maximumLifepoints.toDouble() + if (slayer.task!!.dragon && inEquipment(player, Items.DRAGON_SLAYER_GLOVES_12862)) { xp *= 1.15 FOGGlovesManager.updateCharges(player) diff --git a/Server/src/main/content/global/skill/smithing/Bars.java b/Server/src/main/content/global/skill/smithing/Bars.java index 7514693fe..0c8c36181 100644 --- a/Server/src/main/content/global/skill/smithing/Bars.java +++ b/Server/src/main/content/global/skill/smithing/Bars.java @@ -26,122 +26,122 @@ public enum Bars { /** * Bronze Mace */ - BRONZE_MACE(BarType.BRONZE, SmithingType.TYPE_MACE, 1422, 2), + BRONZE_MACE(BarType.BRONZE, SmithingType.TYPE_MACE, 1422, 1), /** * Bronze Medium helm */ - BRONZE_MED_HELM(BarType.BRONZE, SmithingType.TYPE_MEDIUM_HELM, 1139, 3), + BRONZE_MED_HELM(BarType.BRONZE, SmithingType.TYPE_MEDIUM_HELM, 1139, 1), /** * Bronze Crossbow Bolt */ - BRONZE_CROSSBOW_BOLT(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_BOLT, 9375, 3), + BRONZE_CROSSBOW_BOLT(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_BOLT, 9375, 1), /** * Bronze Sword */ - BRONZE_SWORD(BarType.BRONZE, SmithingType.TYPE_SWORD, 1277, 4), + BRONZE_SWORD(BarType.BRONZE, SmithingType.TYPE_SWORD, 1277, 1), /** * Bronze Dart Tips */ - BRONZE_DART_TIPS(BarType.BRONZE, SmithingType.TYPE_DART_TIP, 819, 4), + BRONZE_DART_TIPS(BarType.BRONZE, SmithingType.TYPE_DART_TIP, 819, 1), /** * Bronze Nails */ - BRONZE_NAILS(BarType.BRONZE, SmithingType.TYPE_NAIL, 4819, 4), + BRONZE_NAILS(BarType.BRONZE, SmithingType.TYPE_NAIL, 4819, 1), /** * Bronze Wire */ - BRONZE_WIRE(BarType.BRONZE, SmithingType.TYPE_WIRE, 1794, 4), + BRONZE_WIRE(BarType.BRONZE, SmithingType.TYPE_WIRE, 1794, 1), /** * Bronze Arrow Tips */ - BRONZE_ARROW_TIPS(BarType.BRONZE, SmithingType.TYPE_ARROW_TIP, 39, 5), + BRONZE_ARROW_TIPS(BarType.BRONZE, SmithingType.TYPE_ARROW_TIP, 39, 1), /** * Bronze Scimitar */ - BRONZE_SCIMITAR(BarType.BRONZE, SmithingType.TYPE_SCIMITAR, 1321, 5), + BRONZE_SCIMITAR(BarType.BRONZE, SmithingType.TYPE_SCIMITAR, 1321, 1), /** * Bronze Crossbow Limbs */ - BRONZE_CROSSBOW_LIMBS(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_LIMB, 9420, 6), + BRONZE_CROSSBOW_LIMBS(BarType.BRONZE, SmithingType.TYPE_CROSSBOW_LIMB, 9420, 1), /** * Bronze longsword */ - BRONZE_LONGSWORD(BarType.BRONZE, SmithingType.TYPE_LONGSWORD, 1291, 6), + BRONZE_LONGSWORD(BarType.BRONZE, SmithingType.TYPE_LONGSWORD, 1291, 1), /** * Bronze ThrowingKnife */ - BRONZE_THROWINGKNFIE(BarType.BRONZE, SmithingType.TYPE_THROWING_KNIFE, 864, 7), + BRONZE_THROWINGKNFIE(BarType.BRONZE, SmithingType.TYPE_THROWING_KNIFE, 864, 1), /** * Bronze Full helmet */ - BRONZE_FULL_HELM(BarType.BRONZE, SmithingType.TYPE_FULL_HELM, 1155, 7), + BRONZE_FULL_HELM(BarType.BRONZE, SmithingType.TYPE_FULL_HELM, 1155, 1), /** * Bronze Square Shield */ - BRONZE_SQUARE_SHIELD(BarType.BRONZE, SmithingType.TYPE_SQUARE_SHIELD, 1173, 8), + BRONZE_SQUARE_SHIELD(BarType.BRONZE, SmithingType.TYPE_SQUARE_SHIELD, 1173, 1), /** * Bronze Warhammer */ - BRONZE_WAR_HAMMER(BarType.BRONZE, SmithingType.TYPE_WARHAMMER, 1337, 9), + BRONZE_WAR_HAMMER(BarType.BRONZE, SmithingType.TYPE_WARHAMMER, 1337, 1), /** * Bronze BattleAxe */ - BRONZE_BATTLEAXE(BarType.BRONZE, SmithingType.TYPE_BATTLE_AXE, 1375, 10), + BRONZE_BATTLEAXE(BarType.BRONZE, SmithingType.TYPE_BATTLE_AXE, 1375, 1), /** * Bronze ChainBody */ - BRONZE_CHAINBODY(BarType.BRONZE, SmithingType.TYPE_CHAINBODY, 1103, 11), + BRONZE_CHAINBODY(BarType.BRONZE, SmithingType.TYPE_CHAINBODY, 1103, 1), /** * Bronze KitShield */ - BRONZE_KITESHIELD(BarType.BRONZE, SmithingType.TYPE_KITE_SHIELD, 1189, 12), + BRONZE_KITESHIELD(BarType.BRONZE, SmithingType.TYPE_KITE_SHIELD, 1189, 1), /** * Bronze Claws */ - BRONZE_CLAWS(BarType.BRONZE, SmithingType.TYPE_CLAWS, 3095, 13), + BRONZE_CLAWS(BarType.BRONZE, SmithingType.TYPE_CLAWS, 3095, 1), /** * Bronze 2h */ - BRONZE_TWO_HANDED(BarType.BRONZE, SmithingType.TYPE_TWO_HAND_SWORD, 1307, 14), + BRONZE_TWO_HANDED(BarType.BRONZE, SmithingType.TYPE_TWO_HAND_SWORD, 1307, 1), /** * Bronze PlateSkirt */ - BRONZE_PLATE_SKIRT(BarType.BRONZE, SmithingType.TYPE_PLATE_SKIRT, 1087, 16), + BRONZE_PLATE_SKIRT(BarType.BRONZE, SmithingType.TYPE_PLATE_SKIRT, 1087, 1), /** * Bronze PlateLegs */ - BRONZE_PLATELEGS(BarType.BRONZE, SmithingType.TYPE_PLATELEG, 1075, 16), + BRONZE_PLATELEGS(BarType.BRONZE, SmithingType.TYPE_PLATELEG, 1075, 1), /** * Bronze PlateBody */ - BRONZE_PLATEBODY(BarType.BRONZE, SmithingType.TYPE_PLATEBODY, 1117, 18), + BRONZE_PLATEBODY(BarType.BRONZE, SmithingType.TYPE_PLATEBODY, 1117, 1), /** * Bronze Pickaxe */ - BRONZE_PICKAXE(BarType.BRONZE, SmithingType.TYPE_PICKAXE, 1265, 5), + BRONZE_PICKAXE(BarType.BRONZE, SmithingType.TYPE_PICKAXE, 1265, 1), /** * Iron Dagger @@ -151,131 +151,131 @@ public enum Bars { /** * Iron Hatchet */ - IRON_AXE(BarType.IRON, SmithingType.TYPE_AXE, 1349, 16), + IRON_AXE(BarType.IRON, SmithingType.TYPE_AXE, 1349, 15), /** * Iron Mace */ - IRON_MACE(BarType.IRON, SmithingType.TYPE_MACE, 1420, 17), + IRON_MACE(BarType.IRON, SmithingType.TYPE_MACE, 1420, 15), /** * Iron Med Helm */ - IRON_MED_HELM(BarType.IRON, SmithingType.TYPE_MEDIUM_HELM, 1137, 18), + IRON_MED_HELM(BarType.IRON, SmithingType.TYPE_MEDIUM_HELM, 1137, 15), /** * Iron Bolt */ - IRON_BOLT(BarType.IRON, SmithingType.TYPE_CROSSBOW_BOLT, 9377, 18), + IRON_BOLT(BarType.IRON, SmithingType.TYPE_CROSSBOW_BOLT, 9377, 15), /** * Iron Sword */ - IRON_SWORD(BarType.IRON, SmithingType.TYPE_SWORD, 1279, 19), + IRON_SWORD(BarType.IRON, SmithingType.TYPE_SWORD, 1279, 15), /** * Iron Dart Tips */ - IRON_DART_TIPS(BarType.IRON, SmithingType.TYPE_DART_TIP, 820, 19), + IRON_DART_TIPS(BarType.IRON, SmithingType.TYPE_DART_TIP, 820, 15), /** * Iron Nails */ - IRON_NAILS(BarType.IRON, SmithingType.TYPE_NAIL, 4820, 19), + IRON_NAILS(BarType.IRON, SmithingType.TYPE_NAIL, 4820, 15), /** * Iron Split */ - IRON_SPIT(BarType.IRON, SmithingType.TYPE_SPIT_IRON, 7225, 16), + IRON_SPIT(BarType.IRON, SmithingType.TYPE_SPIT_IRON, 7225, 15), /** * Iron Arrow Tips */ - IRON_ARROW_TIPS(BarType.IRON, SmithingType.TYPE_ARROW_TIP, 40, 20), + IRON_ARROW_TIPS(BarType.IRON, SmithingType.TYPE_ARROW_TIP, 40, 15), /** * Iron Scimitar */ - IRON_SCIMITAR(BarType.IRON, SmithingType.TYPE_SCIMITAR, 1323, 20), + IRON_SCIMITAR(BarType.IRON, SmithingType.TYPE_SCIMITAR, 1323, 15), /** * Iron Crossbow Limbs */ - IRON_CROSSBOW_LimbS(BarType.IRON, SmithingType.TYPE_CROSSBOW_LIMB, 9423, 23), + IRON_CROSSBOW_LimbS(BarType.IRON, SmithingType.TYPE_CROSSBOW_LIMB, 9423, 15), /** * Iron LongSword */ - IRON_LONGSWORD(BarType.IRON, SmithingType.TYPE_LONGSWORD, 1293, 21), + IRON_LONGSWORD(BarType.IRON, SmithingType.TYPE_LONGSWORD, 1293, 15), /** * Iron Knife */ - IRON_KNIFE(BarType.IRON, SmithingType.TYPE_THROWING_KNIFE, 863, 22), + IRON_KNIFE(BarType.IRON, SmithingType.TYPE_THROWING_KNIFE, 863, 15), /** * Iron Full Helm */ - IRON_FULL_HELM(BarType.IRON, SmithingType.TYPE_FULL_HELM, 1153, 22), + IRON_FULL_HELM(BarType.IRON, SmithingType.TYPE_FULL_HELM, 1153, 15), /** * Iron Square Shield */ - IRON_SQUARE_SHIELD(BarType.IRON, SmithingType.TYPE_SQUARE_SHIELD, 1175, 23), + IRON_SQUARE_SHIELD(BarType.IRON, SmithingType.TYPE_SQUARE_SHIELD, 1175, 15), /** * Oil Lantern Frame */ - OIL_LANTERN_FRAME(BarType.IRON, SmithingType.TYPE_OIL_LANTERN, 4540, 26), + OIL_LANTERN_FRAME(BarType.IRON, SmithingType.TYPE_OIL_LANTERN, 4540, 15), /** * Iron WarHammer */ - IRON_WARHAMMER(BarType.IRON, SmithingType.TYPE_WARHAMMER, 1335, 24), + IRON_WARHAMMER(BarType.IRON, SmithingType.TYPE_WARHAMMER, 1335, 15), /** * Iron Battleaxe */ - IRON_BATTLEAXE(BarType.IRON, SmithingType.TYPE_BATTLE_AXE, 1363, 25), + IRON_BATTLEAXE(BarType.IRON, SmithingType.TYPE_BATTLE_AXE, 1363, 15), /** * Iron ChainBody */ - IRON_CHAINBODY(BarType.IRON, SmithingType.TYPE_CHAINBODY, 1101, 26), + IRON_CHAINBODY(BarType.IRON, SmithingType.TYPE_CHAINBODY, 1101, 15), /** * Iron Kite Shield */ - IRON_KITE_SHIELD(BarType.IRON, SmithingType.TYPE_KITE_SHIELD, 1191, 27), + IRON_KITE_SHIELD(BarType.IRON, SmithingType.TYPE_KITE_SHIELD, 1191, 15), /** * Iron Claws */ - IRON_CLAWS(BarType.IRON, SmithingType.TYPE_CLAWS, 3096, 28), + IRON_CLAWS(BarType.IRON, SmithingType.TYPE_CLAWS, 3096, 15), /** * Iron 2H */ - IRON_TWO_HANDED_SWORD(BarType.IRON, SmithingType.TYPE_TWO_HAND_SWORD, 1309, 29), + IRON_TWO_HANDED_SWORD(BarType.IRON, SmithingType.TYPE_TWO_HAND_SWORD, 1309, 15), /** * Iron PlateSkirt */ - IRON_PLATESKIRT(BarType.IRON, SmithingType.TYPE_PLATE_SKIRT, 1081, 31), + IRON_PLATESKIRT(BarType.IRON, SmithingType.TYPE_PLATE_SKIRT, 1081, 15), /** * Iron PlateLegs */ - IRON_PLATELEGS(BarType.IRON, SmithingType.TYPE_PLATELEG, 1067, 31), + IRON_PLATELEGS(BarType.IRON, SmithingType.TYPE_PLATELEG, 1067, 15), /** * Iron PlateBody */ - IRON_PLATEBODY(BarType.IRON, SmithingType.TYPE_PLATEBODY, 1115, 33), + IRON_PLATEBODY(BarType.IRON, SmithingType.TYPE_PLATEBODY, 1115, 15), /** * Iron PickAxe */ - IRON_PICKAXE(BarType.IRON, SmithingType.TYPE_PICKAXE, 1267, 20), + IRON_PICKAXE(BarType.IRON, SmithingType.TYPE_PICKAXE, 1267, 15), /** * Steel Dagger @@ -285,132 +285,132 @@ public enum Bars { /** * Steel Axe */ - STEEL_AXE(BarType.STEEL, SmithingType.TYPE_AXE, 1353, 31), + STEEL_AXE(BarType.STEEL, SmithingType.TYPE_AXE, 1353, 30), /** * Steel Mace */ - STEEL_MACE(BarType.STEEL, SmithingType.TYPE_MACE, 1424, 32), + STEEL_MACE(BarType.STEEL, SmithingType.TYPE_MACE, 1424, 30), /** * Steel Medium Helm */ - STEEL_MED_HELM(BarType.STEEL, SmithingType.TYPE_MEDIUM_HELM, 1141, 33), + STEEL_MED_HELM(BarType.STEEL, SmithingType.TYPE_MEDIUM_HELM, 1141, 30), /** * Steel CrossBow bolts */ - STEEL_CROSSBOW_BOLT(BarType.STEEL, SmithingType.TYPE_CROSSBOW_BOLT, 9378, 33), + STEEL_CROSSBOW_BOLT(BarType.STEEL, SmithingType.TYPE_CROSSBOW_BOLT, 9378, 30), /** * Steel Sword */ - STEEL_SWORD(BarType.STEEL, SmithingType.TYPE_SWORD, 1281, 34), + STEEL_SWORD(BarType.STEEL, SmithingType.TYPE_SWORD, 1281, 30), /** * Steel Dart Tips */ - STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 821, 34), + STEEL_DART_TIPS(BarType.STEEL, SmithingType.TYPE_DART_TIP, 821, 30), /** * Steel Nails */ - STEEL_NAILS(BarType.STEEL, SmithingType.TYPE_NAIL, 1539, 34), + STEEL_NAILS(BarType.STEEL, SmithingType.TYPE_NAIL, 1539, 30), /** * Steel ArrowTips */ - STEEL_ARROW_TIPS(BarType.STEEL, SmithingType.TYPE_ARROW_TIP, 41, 35), + STEEL_ARROW_TIPS(BarType.STEEL, SmithingType.TYPE_ARROW_TIP, 41, 30), /** * Steel Scimitar */ - STEEL_SCIMITAR(BarType.STEEL, SmithingType.TYPE_SCIMITAR, 1325, 35), + STEEL_SCIMITAR(BarType.STEEL, SmithingType.TYPE_SCIMITAR, 1325, 30), /** * Steel Crossbow Limbs */ - STEEL_CROSSBOW_LIMBS(BarType.STEEL, SmithingType.TYPE_CROSSBOW_LIMB, 9425, 36), + STEEL_CROSSBOW_LIMBS(BarType.STEEL, SmithingType.TYPE_CROSSBOW_LIMB, 9425, 30), /** * Steel LongSword */ - STEEL_LONGSWORD(BarType.STEEL, SmithingType.TYPE_LONGSWORD, 1295, 36), + STEEL_LONGSWORD(BarType.STEEL, SmithingType.TYPE_LONGSWORD, 1295, 30), /** * Steel Knife */ - STEEL_THROWING_KNIFE(BarType.STEEL, SmithingType.TYPE_THROWING_KNIFE, 865, 37), + STEEL_THROWING_KNIFE(BarType.STEEL, SmithingType.TYPE_THROWING_KNIFE, 865, 30), /** * Steel Full Helm */ - STEEL_FULL_HELM(BarType.STEEL, SmithingType.TYPE_FULL_HELM, 1157, 37), + STEEL_FULL_HELM(BarType.STEEL, SmithingType.TYPE_FULL_HELM, 1157, 30), /** * Steel Studs */ - STEEL_STUDS(BarType.STEEL, SmithingType.TYPE_STUDS, 2370, 36), + STEEL_STUDS(BarType.STEEL, SmithingType.TYPE_STUDS, 2370, 30), /** * Steel Square Shield */ - STEEL_SQUARE_SHIELD(BarType.STEEL, SmithingType.TYPE_SQUARE_SHIELD, 1177, 38), + STEEL_SQUARE_SHIELD(BarType.STEEL, SmithingType.TYPE_SQUARE_SHIELD, 1177, 30), /** * Steel Lantern */ - STEEL_BULLSEYE(BarType.STEEL, SmithingType.TYPE_BULLSEYE, 4544, 49), + STEEL_BULLSEYE(BarType.STEEL, SmithingType.TYPE_BULLSEYE, 4544, 30), /** * Steel WarHammer */ - STEEL_WARHAMMER(BarType.STEEL, SmithingType.TYPE_WARHAMMER, 1339, 39), + STEEL_WARHAMMER(BarType.STEEL, SmithingType.TYPE_WARHAMMER, 1339, 30), /** * Steel battle axe */ - STEEL_BATTLE_AXE(BarType.STEEL, SmithingType.TYPE_BATTLE_AXE, 1365, 40), + STEEL_BATTLE_AXE(BarType.STEEL, SmithingType.TYPE_BATTLE_AXE, 1365, 30), /** * Steel ChainBody */ - STEEL_CHAINBODY(BarType.STEEL, SmithingType.TYPE_CHAINBODY, 1105, 41), + STEEL_CHAINBODY(BarType.STEEL, SmithingType.TYPE_CHAINBODY, 1105, 30), /** * Steel Kite Shield */ - STEEL_KITE_SHIELD(BarType.STEEL, SmithingType.TYPE_KITE_SHIELD, 1193, 42), + STEEL_KITE_SHIELD(BarType.STEEL, SmithingType.TYPE_KITE_SHIELD, 1193, 30), /** * Steel Claws */ - STEEL_CLAWS(BarType.STEEL, SmithingType.TYPE_CLAWS, 3097, 43), + STEEL_CLAWS(BarType.STEEL, SmithingType.TYPE_CLAWS, 3097, 30), /** * Steel 2h */ - STEEL_TWO_HANDED_SWORD(BarType.STEEL, SmithingType.TYPE_TWO_HAND_SWORD, 1311, 44), + STEEL_TWO_HANDED_SWORD(BarType.STEEL, SmithingType.TYPE_TWO_HAND_SWORD, 1311, 30), /** * Steel plate skirt */ - STEEL_PLATE_SKIRT(BarType.STEEL, SmithingType.TYPE_PLATE_SKIRT, 1083, 46), + STEEL_PLATE_SKIRT(BarType.STEEL, SmithingType.TYPE_PLATE_SKIRT, 1083, 30), /** * Steel platelegs */ - STEEL_PLATELEGS(BarType.STEEL, SmithingType.TYPE_PLATELEG, 1069, 46), + STEEL_PLATELEGS(BarType.STEEL, SmithingType.TYPE_PLATELEG, 1069, 30), /** * Steel platebody */ - STEEL_PLATEBODY(BarType.STEEL, SmithingType.TYPE_PLATEBODY, 1119, 48), + STEEL_PLATEBODY(BarType.STEEL, SmithingType.TYPE_PLATEBODY, 1119, 30), /** * Steel pickaxe */ - STEEL_PICKAXE(BarType.STEEL, SmithingType.TYPE_PICKAXE, 1269, 35), + STEEL_PICKAXE(BarType.STEEL, SmithingType.TYPE_PICKAXE, 1269, 30), /** * Mithril Dagger @@ -420,377 +420,377 @@ public enum Bars { /** * Mithril Hatchet */ - MITHRIL_HATCHET(BarType.MITHRIL, SmithingType.TYPE_AXE, 1355, 51), + MITHRIL_HATCHET(BarType.MITHRIL, SmithingType.TYPE_AXE, 1355, 50), /** * Mithril Mace */ - MITHRIL_MACE(BarType.MITHRIL, SmithingType.TYPE_MACE, 1428, 52), + MITHRIL_MACE(BarType.MITHRIL, SmithingType.TYPE_MACE, 1428, 50), /** * Mithril Med Helm */ - MITHRIL_MED_HELM(BarType.MITHRIL, SmithingType.TYPE_MEDIUM_HELM, 1143, 53), + MITHRIL_MED_HELM(BarType.MITHRIL, SmithingType.TYPE_MEDIUM_HELM, 1143, 50), /** * Mithril Crossbow Bolt */ - MITHRIL_CROSSBOW_BOLT(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_BOLT, 9379, 53), + MITHRIL_CROSSBOW_BOLT(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_BOLT, 9379, 50), /** * Mithril Sword */ - MITHRIL_SWORD(BarType.MITHRIL, SmithingType.TYPE_SWORD, 1285, 54), + MITHRIL_SWORD(BarType.MITHRIL, SmithingType.TYPE_SWORD, 1285, 50), /** * Mithril Dart Tips */ - MITHRIL_DART_TIPS(BarType.MITHRIL, SmithingType.TYPE_DART_TIP, 822, 54), + MITHRIL_DART_TIPS(BarType.MITHRIL, SmithingType.TYPE_DART_TIP, 822, 50), /** * Mithril Nails */ - MITHRIL_NAILS(BarType.MITHRIL, SmithingType.TYPE_NAIL, 4822, 54), + MITHRIL_NAILS(BarType.MITHRIL, SmithingType.TYPE_NAIL, 4822, 50), /** * Mithril Arrow Tips */ - MITHRIL_ARROW_TIPS(BarType.MITHRIL, SmithingType.TYPE_ARROW_TIP, 42, 55), + MITHRIL_ARROW_TIPS(BarType.MITHRIL, SmithingType.TYPE_ARROW_TIP, 42, 50), /** * Mithril Scimitar */ - MITHRIL_SCIMITAR(BarType.MITHRIL, SmithingType.TYPE_SCIMITAR, 1329, 55), + MITHRIL_SCIMITAR(BarType.MITHRIL, SmithingType.TYPE_SCIMITAR, 1329, 50), /** * Mithril Crossbow Limbs */ - MITHRIL_CROSSBOW_LIMBS(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_LIMB, 9427, 56), + MITHRIL_CROSSBOW_LIMBS(BarType.MITHRIL, SmithingType.TYPE_CROSSBOW_LIMB, 9427, 50), /** * Mithril LongSword */ - MITHRIL_LONGSWORD(BarType.MITHRIL, SmithingType.TYPE_LONGSWORD, 1299, 56), + MITHRIL_LONGSWORD(BarType.MITHRIL, SmithingType.TYPE_LONGSWORD, 1299, 50), /** * Mithril Knife */ - MITHRIL_KNIFE(BarType.MITHRIL, SmithingType.TYPE_THROWING_KNIFE, 866, 57), + MITHRIL_KNIFE(BarType.MITHRIL, SmithingType.TYPE_THROWING_KNIFE, 866, 50), /** * Mithril Full Helm */ - MITHRIL_FULL_HELM(BarType.MITHRIL, SmithingType.TYPE_FULL_HELM, 1159, 57), + MITHRIL_FULL_HELM(BarType.MITHRIL, SmithingType.TYPE_FULL_HELM, 1159, 50), /** * Mithril SquareShield */ - MITHRIL_SQUARE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_SQUARE_SHIELD, 1181, 58), + MITHRIL_SQUARE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_SQUARE_SHIELD, 1181, 50), /** * Mithril Grapple Tips */ - MITHRIL_GRAPPLE_TIPS(BarType.MITHRIL, SmithingType.TYPE_GRAPPLE_TIP, 9416, 59), + MITHRIL_GRAPPLE_TIPS(BarType.MITHRIL, SmithingType.TYPE_GRAPPLE_TIP, 9416, 50), /** * Mithril Warhammer */ - MITHRIL_WARHAMMER(BarType.MITHRIL, SmithingType.TYPE_WARHAMMER, 1343, 59), + MITHRIL_WARHAMMER(BarType.MITHRIL, SmithingType.TYPE_WARHAMMER, 1343, 50), /** * Mithril BattleAxe */ - MITHRIL_BATTLEAXE(BarType.MITHRIL, SmithingType.TYPE_BATTLE_AXE, 1369, 60), + MITHRIL_BATTLEAXE(BarType.MITHRIL, SmithingType.TYPE_BATTLE_AXE, 1369, 50), /** * Mithril ChainBody */ - MITHRIL_CHAINBODY(BarType.MITHRIL, SmithingType.TYPE_CHAINBODY, 1109, 61), + MITHRIL_CHAINBODY(BarType.MITHRIL, SmithingType.TYPE_CHAINBODY, 1109, 50), /** * Mithril KiteShield */ - MITHRIL_KITE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_KITE_SHIELD, 1197, 62), + MITHRIL_KITE_SHIELD(BarType.MITHRIL, SmithingType.TYPE_KITE_SHIELD, 1197, 50), /** * Mithril Claws */ - MITHRIL_CLAWS(BarType.MITHRIL, SmithingType.TYPE_CLAWS, 3099, 63), + MITHRIL_CLAWS(BarType.MITHRIL, SmithingType.TYPE_CLAWS, 3099, 50), /** * Mithril 2H */ - MITHRIL_TWO_HANDED_SWORD(BarType.MITHRIL, SmithingType.TYPE_TWO_HAND_SWORD, 1315, 64), + MITHRIL_TWO_HANDED_SWORD(BarType.MITHRIL, SmithingType.TYPE_TWO_HAND_SWORD, 1315, 50), /** * Mithril PlateSkirt */ - MITHRIL_PLATESKIRT(BarType.MITHRIL, SmithingType.TYPE_PLATE_SKIRT, 1085, 66), + MITHRIL_PLATESKIRT(BarType.MITHRIL, SmithingType.TYPE_PLATE_SKIRT, 1085, 50), /** * Mithril PlateLegs */ - MITHRIL_PLATELEGS(BarType.MITHRIL, SmithingType.TYPE_PLATELEG, 1071, 66), + MITHRIL_PLATELEGS(BarType.MITHRIL, SmithingType.TYPE_PLATELEG, 1071, 50), /** * Mithril PlateBody */ - MITHRIL_PLATEBODY(BarType.MITHRIL, SmithingType.TYPE_PLATEBODY, 1121, 68), + MITHRIL_PLATEBODY(BarType.MITHRIL, SmithingType.TYPE_PLATEBODY, 1121, 50), /** * Mithril PickAxe */ - MITHRIL_PICKAXE(BarType.MITHRIL, SmithingType.TYPE_PICKAXE, 1273, 55), + MITHRIL_PICKAXE(BarType.MITHRIL, SmithingType.TYPE_PICKAXE, 1273, 50), /** * Adamant Dagger */ - ADAMANT_DAGGER(BarType.ADAMANT, SmithingType.TYPE_DAGGER, 1211, 70), + ADAMANT_DAGGER(BarType.ADAMANT, SmithingType.TYPE_DAGGER, 1211, 60), /** * Adamant Hatchet */ - ADAMANT_AXE(BarType.ADAMANT, SmithingType.TYPE_AXE, 1357, 71), + ADAMANT_AXE(BarType.ADAMANT, SmithingType.TYPE_AXE, 1357, 60), /** * Adamant Mace */ - ADAMANT_MACE(BarType.ADAMANT, SmithingType.TYPE_MACE, 1430, 72), + ADAMANT_MACE(BarType.ADAMANT, SmithingType.TYPE_MACE, 1430, 60), /** * Adamant Med Helm */ - ADAMANT_MEDIUM_HELM(BarType.ADAMANT, SmithingType.TYPE_MEDIUM_HELM, 1145, 73), + ADAMANT_MEDIUM_HELM(BarType.ADAMANT, SmithingType.TYPE_MEDIUM_HELM, 1145, 60), /** * Adamant Crossbow Bolt */ - ADAMANT_BOLT(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_BOLT, 9380, 73), + ADAMANT_BOLT(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_BOLT, 9380, 60), /** * Adamant Sword */ - ADAMANT_SWORD(BarType.ADAMANT, SmithingType.TYPE_SWORD, 1287, 74), + ADAMANT_SWORD(BarType.ADAMANT, SmithingType.TYPE_SWORD, 1287, 60), /** * Adamant Dart Tips */ - ADAMANT_DART_TIPS(BarType.ADAMANT, SmithingType.TYPE_DART_TIP, 823, 74), + ADAMANT_DART_TIPS(BarType.ADAMANT, SmithingType.TYPE_DART_TIP, 823, 60), /** * Adamant Nails */ - ADAMANT_NAILS(BarType.ADAMANT, SmithingType.TYPE_NAIL, 4823, 74), + ADAMANT_NAILS(BarType.ADAMANT, SmithingType.TYPE_NAIL, 4823, 60), /** * Adamant Arrow Tips */ - ADAMANT_ARROW_TIPS(BarType.ADAMANT, SmithingType.TYPE_ARROW_TIP, 43, 75), + ADAMANT_ARROW_TIPS(BarType.ADAMANT, SmithingType.TYPE_ARROW_TIP, 43, 60), /** * Adamant Scmitar */ - ADAMANT_SCIMITAR(BarType.ADAMANT, SmithingType.TYPE_SCIMITAR, 1331, 75), + ADAMANT_SCIMITAR(BarType.ADAMANT, SmithingType.TYPE_SCIMITAR, 1331, 60), /** * Adamant Crossbow Limbs */ - ADAMANT_LIMBS(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_LIMB, 9429, 76), + ADAMANT_LIMBS(BarType.ADAMANT, SmithingType.TYPE_CROSSBOW_LIMB, 9429, 60), /** * Adamant LongSword */ - ADAMANT_LONGSWORD(BarType.ADAMANT, SmithingType.TYPE_LONGSWORD, 1301, 76), + ADAMANT_LONGSWORD(BarType.ADAMANT, SmithingType.TYPE_LONGSWORD, 1301, 60), /** * Adamant Knife */ - ADAMANT_KNIFE(BarType.ADAMANT, SmithingType.TYPE_THROWING_KNIFE, 867, 77), + ADAMANT_KNIFE(BarType.ADAMANT, SmithingType.TYPE_THROWING_KNIFE, 867, 60), /** * Adamant Full Helm */ - ADAMANT_FULL_HELM(BarType.ADAMANT, SmithingType.TYPE_FULL_HELM, 1161, 77), + ADAMANT_FULL_HELM(BarType.ADAMANT, SmithingType.TYPE_FULL_HELM, 1161, 60), /** * Adamant Square Shield */ - ADAMANT_SQUARE_SHIELD(BarType.ADAMANT, SmithingType.TYPE_SQUARE_SHIELD, 1183, 78), + ADAMANT_SQUARE_SHIELD(BarType.ADAMANT, SmithingType.TYPE_SQUARE_SHIELD, 1183, 60), /** * Adamant Warhammer */ - ADAMANT_WARHAMMER(BarType.ADAMANT, SmithingType.TYPE_WARHAMMER, 1345, 79), + ADAMANT_WARHAMMER(BarType.ADAMANT, SmithingType.TYPE_WARHAMMER, 1345, 60), /** * Adamant BattleAxe */ - ADAMANT_BATTLEAXE(BarType.ADAMANT, SmithingType.TYPE_BATTLE_AXE, 1371, 80), + ADAMANT_BATTLEAXE(BarType.ADAMANT, SmithingType.TYPE_BATTLE_AXE, 1371, 60), /** * Adamant ChainBody */ - ADAMANT_CHAINBODY(BarType.ADAMANT, SmithingType.TYPE_CHAINBODY, 1111, 81), + ADAMANT_CHAINBODY(BarType.ADAMANT, SmithingType.TYPE_CHAINBODY, 1111, 60), /** * Adamant KiteShield */ - ADAMANT_KITESHIELD(BarType.ADAMANT, SmithingType.TYPE_KITE_SHIELD, 1199, 82), + ADAMANT_KITESHIELD(BarType.ADAMANT, SmithingType.TYPE_KITE_SHIELD, 1199, 60), /** * Adamant Claws */ - ADAMANT_CLAWS(BarType.ADAMANT, SmithingType.TYPE_CLAWS, 3100, 83), + ADAMANT_CLAWS(BarType.ADAMANT, SmithingType.TYPE_CLAWS, 3100, 60), /** * Adamant 2H */ - ADAMANT_TWO_HANDED_SWORD(BarType.ADAMANT, SmithingType.TYPE_TWO_HAND_SWORD, 1317, 84), + ADAMANT_TWO_HANDED_SWORD(BarType.ADAMANT, SmithingType.TYPE_TWO_HAND_SWORD, 1317, 60), /** * Adamant PlateSkirt */ - ADAMANT_PLATE_SKIRT(BarType.ADAMANT, SmithingType.TYPE_PLATE_SKIRT, 1091, 86), + ADAMANT_PLATE_SKIRT(BarType.ADAMANT, SmithingType.TYPE_PLATE_SKIRT, 1091, 60), /** * Adamant PlateLegs */ - ADAMANT_PLATE_LEGS(BarType.ADAMANT, SmithingType.TYPE_PLATELEG, 1073, 86), + ADAMANT_PLATE_LEGS(BarType.ADAMANT, SmithingType.TYPE_PLATELEG, 1073, 60), /** * Adamant PlateBody */ - ADAMANT_PLATE_BODY(BarType.ADAMANT, SmithingType.TYPE_PLATEBODY, 1123, 88), + ADAMANT_PLATE_BODY(BarType.ADAMANT, SmithingType.TYPE_PLATEBODY, 1123, 60), /** * Adamant PickAxe */ - ADAMANT_PICKAXE(BarType.ADAMANT, SmithingType.TYPE_PICKAXE, 1271, 75), + ADAMANT_PICKAXE(BarType.ADAMANT, SmithingType.TYPE_PICKAXE, 1271, 60), /** * Rune Dagger */ - RUNE_DAGGER(BarType.RUNITE, SmithingType.TYPE_DAGGER, 1213, 85), + RUNE_DAGGER(BarType.RUNITE, SmithingType.TYPE_DAGGER, 1213, 70), /** * Rune Hatchet */ - RUNITE_AXE(BarType.RUNITE, SmithingType.TYPE_AXE, 1359, 86), + RUNITE_AXE(BarType.RUNITE, SmithingType.TYPE_AXE, 1359, 70), /** * Rune Mace */ - RUNITE_MACE(BarType.RUNITE, SmithingType.TYPE_MACE, 1432, 87), + RUNITE_MACE(BarType.RUNITE, SmithingType.TYPE_MACE, 1432, 70), /** * Rune Med Helm */ - RUNITE_MEDIUM_HELM(BarType.RUNITE, SmithingType.TYPE_MEDIUM_HELM, 1147, 88), + RUNITE_MEDIUM_HELM(BarType.RUNITE, SmithingType.TYPE_MEDIUM_HELM, 1147, 70), /** * Rune Crossbow Bolt */ - RUNITE_BOLT(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_BOLT, 9381, 88), + RUNITE_BOLT(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_BOLT, 9381, 70), /** * Rune Sword */ - RUNITE_SWORD(BarType.RUNITE, SmithingType.TYPE_SWORD, 1289, 89), + RUNITE_SWORD(BarType.RUNITE, SmithingType.TYPE_SWORD, 1289, 70), /** * Rune Dart Tips */ - RUNITE_DART_TIPS(BarType.RUNITE, SmithingType.TYPE_DART_TIP, 824, 89), + RUNITE_DART_TIPS(BarType.RUNITE, SmithingType.TYPE_DART_TIP, 824, 70), /** * Rune Nails */ - RUNITE_NAILS(BarType.RUNITE, SmithingType.TYPE_NAIL, 4824, 89), + RUNITE_NAILS(BarType.RUNITE, SmithingType.TYPE_NAIL, 4824, 70), /** * Rune Arrow Tips */ - RUNITE_ARROW_TIPS(BarType.RUNITE, SmithingType.TYPE_ARROW_TIP, 44, 90), + RUNITE_ARROW_TIPS(BarType.RUNITE, SmithingType.TYPE_ARROW_TIP, 44, 70), /** * Rune Scmitar */ - RUNITE_SCIMITAR(BarType.RUNITE, SmithingType.TYPE_SCIMITAR, 1333, 90), + RUNITE_SCIMITAR(BarType.RUNITE, SmithingType.TYPE_SCIMITAR, 1333, 70), /** * Rune Crossbow Limbs */ - RUNITE_LIMBS(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_LIMB, 9431, 91), + RUNITE_LIMBS(BarType.RUNITE, SmithingType.TYPE_CROSSBOW_LIMB, 9431, 70), /** * Rune LongSword */ - RUNITE_LONGSWORD(BarType.RUNITE, SmithingType.TYPE_LONGSWORD, 1303, 91), + RUNITE_LONGSWORD(BarType.RUNITE, SmithingType.TYPE_LONGSWORD, 1303, 70), /** * Rune Knife */ - RUNITE_KNIFE(BarType.RUNITE, SmithingType.TYPE_THROWING_KNIFE, 868, 92), + RUNITE_KNIFE(BarType.RUNITE, SmithingType.TYPE_THROWING_KNIFE, 868, 70), /** * Rune Full Helm */ - RUNITE_FULL_HELM(BarType.RUNITE, SmithingType.TYPE_FULL_HELM, 1163, 92), + RUNITE_FULL_HELM(BarType.RUNITE, SmithingType.TYPE_FULL_HELM, 1163, 70), /** * Rune Square Shield */ - RUNITE_SQUARE_SHIELD(BarType.RUNITE, SmithingType.TYPE_SQUARE_SHIELD, 1185, 93), + RUNITE_SQUARE_SHIELD(BarType.RUNITE, SmithingType.TYPE_SQUARE_SHIELD, 1185, 70), /** * Rune Warhammer */ - RUNITE_WARHAMMER(BarType.RUNITE, SmithingType.TYPE_WARHAMMER, 1347, 94), + RUNITE_WARHAMMER(BarType.RUNITE, SmithingType.TYPE_WARHAMMER, 1347, 70), /** * Rune BattleAxe */ - RUNITE_BATTLEAXE(BarType.RUNITE, SmithingType.TYPE_BATTLE_AXE, 1373, 95), + RUNITE_BATTLEAXE(BarType.RUNITE, SmithingType.TYPE_BATTLE_AXE, 1373, 70), /** * Rune ChainBody */ - RUNITE_CHAINBODY(BarType.RUNITE, SmithingType.TYPE_CHAINBODY, 1113, 96), + RUNITE_CHAINBODY(BarType.RUNITE, SmithingType.TYPE_CHAINBODY, 1113, 70), /** * Rune KiteShield */ - RUNITE_KITESHIELD(BarType.RUNITE, SmithingType.TYPE_KITE_SHIELD, 1201, 97), + RUNITE_KITESHIELD(BarType.RUNITE, SmithingType.TYPE_KITE_SHIELD, 1201, 70), /** * Rune Claws */ - RUNITE_CLAWS(BarType.RUNITE, SmithingType.TYPE_CLAWS, 3101, 98), + RUNITE_CLAWS(BarType.RUNITE, SmithingType.TYPE_CLAWS, 3101, 70), /** * Rune 2H */ - RUNITE_TWO_HANDED_SWORD(BarType.RUNITE, SmithingType.TYPE_TWO_HAND_SWORD, 1319, 99), + RUNITE_TWO_HANDED_SWORD(BarType.RUNITE, SmithingType.TYPE_TWO_HAND_SWORD, 1319, 70), /** * Rune PlateSkirt */ - RUNITE_PLATE_SKIRT(BarType.RUNITE, SmithingType.TYPE_PLATE_SKIRT, 1093, 99), + RUNITE_PLATE_SKIRT(BarType.RUNITE, SmithingType.TYPE_PLATE_SKIRT, 1093, 70), /** * Rune PlateLegs */ - RUNITE_PLATE_LEGS(BarType.RUNITE, SmithingType.TYPE_PLATELEG, 1079, 99), + RUNITE_PLATE_LEGS(BarType.RUNITE, SmithingType.TYPE_PLATELEG, 1079, 70), /** * Rune PlateBody */ - RUNITE_PLATE_BODY(BarType.RUNITE, SmithingType.TYPE_PLATEBODY, 1127, 99), + RUNITE_PLATE_BODY(BarType.RUNITE, SmithingType.TYPE_PLATEBODY, 1127, 70), /** * Rune PickAxe */ - RUNITE_PICKAXE(BarType.RUNITE, SmithingType.TYPE_PICKAXE, 1275, 90), + RUNITE_PICKAXE(BarType.RUNITE, SmithingType.TYPE_PICKAXE, 1275, 70), /** * Blurite CrossBow bolts @@ -800,7 +800,7 @@ public enum Bars { /** * Blurite Crossbow Limbs */ - BLURITE_CROSSBOW_LIMBS(BarType.BLURITE, SmithingType.TYPE_CROSSBOW_LIMB, 9422, 13); + BLURITE_CROSSBOW_LIMBS(BarType.BLURITE, SmithingType.TYPE_CROSSBOW_LIMB, 9422, 8); /** * A map of object ids to primary ingredients. diff --git a/Server/src/main/content/global/skill/smithing/SmithingType.java b/Server/src/main/content/global/skill/smithing/SmithingType.java index fd38a6209..e4a05e640 100644 --- a/Server/src/main/content/global/skill/smithing/SmithingType.java +++ b/Server/src/main/content/global/skill/smithing/SmithingType.java @@ -32,7 +32,7 @@ public enum SmithingType { /** * Crossbow bolt */ - TYPE_CROSSBOW_BOLT(1, 50, 51, new int[] { 56, 55, 54, 53 }, 10), + TYPE_CROSSBOW_BOLT(1, 50, 51, new int[] { 56, 55, 54, 53 }, 30), /** * Sword @@ -42,7 +42,7 @@ public enum SmithingType { /** * Dart tips */ - TYPE_DART_TIP(1, 66, 67, new int[] { 72, 71, 70, 69 }, 10), + TYPE_DART_TIP(1, 66, 67, new int[] { 72, 71, 70, 69 }, 30), /** * Nails @@ -66,7 +66,7 @@ public enum SmithingType { /** * Arrow Tips */ - TYPE_ARROW_TIP(1, 106, 107, new int[] { 112, 111, 110, 109 }, 15), + TYPE_ARROW_TIP(1, 106, 107, new int[] { 112, 111, 110, 109 }, 45), /** * Scimitar @@ -86,7 +86,7 @@ public enum SmithingType { /** * Throwing Knife */ - TYPE_THROWING_KNIFE(1, 138, 139, new int[] { 144, 143, 142, 141 }, 5), + TYPE_THROWING_KNIFE(1, 138, 139, new int[] { 144, 143, 142, 141 }, 15), /** * Full helm diff --git a/Server/src/main/content/global/skill/smithing/smelting/Bar.java b/Server/src/main/content/global/skill/smithing/smelting/Bar.java index 04177c11a..88b4eea74 100644 --- a/Server/src/main/content/global/skill/smithing/smelting/Bar.java +++ b/Server/src/main/content/global/skill/smithing/smelting/Bar.java @@ -15,8 +15,8 @@ public enum Bar { STEEL(30, 17.5, new Item(2353, 1), new Item(453, 2), new Item(440, 1)), GOLD(40, 22.5, new Item(2357, 1), new Item(444, 1)), MITHRIL(50, 30, new Item(2359, 1), new Item(447, 1), new Item(453, 4)), - ADAMANT(70, 37.5, new Item(2361, 1), new Item(449, 1), new Item(453, 6)), - RUNITE(85, 50, new Item(2363, 1), new Item(451, 1), new Item(453, 8)); + ADAMANT(60, 37.5, new Item(2361, 1), new Item(449, 1), new Item(453, 6)), + RUNITE(70, 50, new Item(2363, 1), new Item(451, 1), new Item(453, 8)); /** * The ore required. diff --git a/Server/src/main/content/global/skill/summoning/SummoningPouch.java b/Server/src/main/content/global/skill/summoning/SummoningPouch.java index b91634318..90a502e6d 100644 --- a/Server/src/main/content/global/skill/summoning/SummoningPouch.java +++ b/Server/src/main/content/global/skill/summoning/SummoningPouch.java @@ -14,27 +14,27 @@ public enum SummoningPouch { /** * Represents a spirit wolf pouch. */ - SPIRIT_WOLF_POUCH(0, 12047, 1, 4.8, 6829, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2859), new Item(12183, 7)), + SPIRIT_WOLF_POUCH(0, 12047, 1, 4.8, 6829, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2859), new Item(12183, 1)), /** * Represents a dreadfowl pouch. */ - DREADFOWL_POUCH(1, 12043, 4, 9.3, 6825, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2138), new Item(12183, 8)), + DREADFOWL_POUCH(1, 12043, 4, 9.3, 6825, 0.1, 1, false, new Item(12158), new Item(12155), new Item(2138), new Item(12183, 1)), /** * Represents a spirit spider pouch. */ - SPIRIT_SPIDER_POUCH(2, 12059, 10, 12.6, 6841, 0.2, 2, false, new Item(12158), new Item(12155), new Item(6291), new Item(12183, 8)), + SPIRIT_SPIDER_POUCH(2, 12059, 10, 12.6, 6841, 0.2, 2, false, new Item(12158), new Item(12155), new Item(6291), new Item(12183, 1)), /** * Represents a thorny snail pouch. */ - THORNY_SNAIL_POUCH(3, 12019, 13, 12.6, 6806, 0.2, 2, false, new Item(12158), new Item(12155), new Item(3363), new Item(12183, 9)), + THORNY_SNAIL_POUCH(3, 12019, 13, 12.6, 6806, 0.2, 2, false, new Item(12158), new Item(12155), new Item(3363), new Item(12183, 1)), /** * Represents a granite crab pouch. */ - GRANITE_CRAB_POUCH(4, 12009, 16, 21.6, 6796, 0.2, 2, false, new Item(12158), new Item(12155), new Item(440), new Item(12183, 7)), + GRANITE_CRAB_POUCH(4, 12009, 16, 21.6, 6796, 0.2, 2, false, new Item(12158), new Item(12155), new Item(440), new Item(12183, 1)), /** * Represents a spirit mosquito pouch. @@ -44,97 +44,97 @@ public enum SummoningPouch { /** * Represents a desrrt wyrm pouch. */ - DESERT_WYRM_POUCH(6, 12049, 18, 31.2, 6831, 0.4, 1, false, new Item(12159), new Item(12155), new Item(1783), new Item(12183, 45)), + DESERT_WYRM_POUCH(6, 12049, 18, 31.2, 6831, 0.4, 1, false, new Item(12159), new Item(12155), new Item(1783), new Item(12183, 1)), /** * Represents a spirit scorpion pouch. */ - SPIRIT_SCORPION_POUCH(7, 12055, 19, 83.2, 6837, 0.9, 2, false, new Item(12160), new Item(12155), new Item(3095), new Item(12183, 57)), + SPIRIT_SCORPION_POUCH(7, 12055, 19, 83.2, 6837, 0.9, 2, false, new Item(12160), new Item(12155), new Item(3095), new Item(12183, 1)), /** * Represents a spirit tz-kih pouch. */ - SPIRIT_TZ_KIH_POUCH(8, 12808, 22, 96.8, 7361, 1.1, 3, false, new Item(12160), new Item(12168), new Item(12155), new Item(12183, 64)), + SPIRIT_TZ_KIH_POUCH(8, 12808, 22, 96.8, 7361, 1.1, 3, false, new Item(12160), new Item(12168), new Item(12155), new Item(12183, 1)), /** * Represents an albino rat pouch. */ - ALBINO_RAT_POUCH(9, 12067, 23, 202.4, 6847, 2.3, 1, false, new Item(12163), new Item(12155), new Item(2134), new Item(12183, 75)), + ALBINO_RAT_POUCH(9, 12067, 23, 202.4, 6847, 2.3, 1, false, new Item(12163), new Item(12155), new Item(2134), new Item(12183, 1)), /** * Represents a spirit kalphite pouch. */ - SPIRIT_KALPHITE_POUCH(10, 12063, 25, 220, 6994, 2.5, 3,false, new Item(12163), new Item(12155), new Item(3138), new Item(12183, 51)), + SPIRIT_KALPHITE_POUCH(10, 12063, 25, 220, 6994, 2.5, 3,false, new Item(12163), new Item(12155), new Item(3138), new Item(12183, 1)), /** * Represents a compost mound pouch. */ - COMPOST_MOUND_POUCH(11, 12091, 28, 49.8, 6871, 0.6, 6, false, new Item(12159), new Item(12155), new Item(6032), new Item(12183, 47)), + COMPOST_MOUND_POUCH(11, 12091, 28, 49.8, 6871, 0.6, 6, false, new Item(12159), new Item(12155), new Item(6032), new Item(12183, 1)), /** * Represents a giant chinchompa pouch. */ - GIANT_CHINCHOMPA_POUCH(12, 12800, 29, 255.2, 7353, 2.9, 1, false, new Item(12163), new Item(12155), new Item(10033), new Item(12183, 84)), + GIANT_CHINCHOMPA_POUCH(12, 12800, 29, 255.2, 7353, 2.9, 1, false, new Item(12163), new Item(12155), new Item(10033), new Item(12183, 1)), /** * Represents a vampire bat pouch. */ - VAMPIRE_BAT_POUCH(13, 12053, 31, 136, 6835, 1.5, 4, false, new Item(12160), new Item(12155), new Item(3325), new Item(12183, 81)), + VAMPIRE_BAT_POUCH(13, 12053, 31, 136, 6835, 1.5, 4, false, new Item(12160), new Item(12155), new Item(3325), new Item(12183, 1)), /** * Represents a honey badger pouch. */ - HONEY_BADGER_POUCH(14, 12065, 32, 140.8, 6845, 1.6, 4, false, new Item(12160), new Item(12155), new Item(12156), new Item(12183, 84)), + HONEY_BADGER_POUCH(14, 12065, 32, 140.8, 6845, 1.6, 4, false, new Item(12160), new Item(12155), new Item(12156), new Item(12183, 1)), /** * Represents a beaver pouch. */ - BEAVER_POUCH(15, 12021, 33, 57.6, 6808, 0.7, 4, true, new Item(12159), new Item(12155), new Item(1519), new Item(12183, 72)), + BEAVER_POUCH(15, 12021, 33, 57.6, 6808, 0.7, 4, true, new Item(12159), new Item(12155), new Item(1519), new Item(12183, 1)), /** * Represents a void ravager pouch. */ - VOID_RAVAGER_POUCH(16, 12818, 34, 59.6, 7370, 0.7, 4, false, new Item(12159), new Item(12164), new Item(12155), new Item(12183, 74)), + VOID_RAVAGER_POUCH(16, 12818, 34, 59.6, 7370, 0.7, 4, false, new Item(12159), new Item(12164), new Item(12155), new Item(12183, 1)), /** * Represents a void spinner pouch. */ - VOID_SPINNER_POUCH(17, 12780, 34, 59.6, 7333, 0.7, 4, true, new Item(12163), new Item(12166), new Item(12155), new Item(12183, 74)), + VOID_SPINNER_POUCH(17, 12780, 34, 59.6, 7333, 0.7, 4, true, new Item(12163), new Item(12166), new Item(12155), new Item(12183, 1)), /** * Represents a void torcher pouch. */ - VOID_TORCHER_POUCH(18, 12798, 34, 59.6, 7351, 0.7, 4, false, new Item(12163), new Item(12167), new Item(12155), new Item(12183, 74)), + VOID_TORCHER_POUCH(18, 12798, 34, 59.6, 7351, 0.7, 4, false, new Item(12163), new Item(12167), new Item(12155), new Item(12183, 1)), /** * Represents a void shifter pouch. */ - VOID_SHIFTER_POUCH(19, 12814, 34, 59.6, 7367, 0.7, 4, false, new Item(12163), new Item(12165), new Item(12155), new Item(12183, 74)), + VOID_SHIFTER_POUCH(19, 12814, 34, 59.6, 7367, 0.7, 4, false, new Item(12163), new Item(12165), new Item(12155), new Item(12183, 1)), /** * Represents a bronze minotaur pouch. */ - BRONZE_MINOTAUR_POUCH(64, 12073, 36, 316.8, 6853, 3.6, 3, false, new Item(12163), new Item(12155), new Item(2349), new Item(12183, 102)), + BRONZE_MINOTAUR_POUCH(64, 12073, 36, 316.8, 6853, 3.6, 3, false, new Item(12163), new Item(12155), new Item(2349), new Item(12183, 1)), /** * Represents an iron minotaur pouch. */ - IRON_MINOTAUR_POUCH(65, 12075, 46, 404.8, 6855, 4.6, 9, false, new Item(12163), new Item(12155), new Item(2351), new Item(12183, 125)), + IRON_MINOTAUR_POUCH(65, 12075, 46, 404.8, 6855, 4.6, 9, false, new Item(12163), new Item(12155), new Item(2351), new Item(12183, 1)), /** * Represents a steel minotaur pouch. */ - STEEL_MINOTAUR_POUCH(66, 12077, 56, 492.8, 6857, 5.6, 9, false, new Item(12163), new Item(12155), new Item(2353), new Item(12183, 141)), + STEEL_MINOTAUR_POUCH(66, 12077, 56, 492.8, 6857, 5.6, 9, false, new Item(12163), new Item(12155), new Item(2353), new Item(12183, 1)), /** * Represents a mithril minotaur pouch. */ - MITHRIL_MINOTAUR_POUCH(67, 12079, 66, 580.8, 6859, 6.6, 9,false, new Item(12163), new Item(12155), new Item(2359), new Item(12183, 152)), + MITHRIL_MINOTAUR_POUCH(67, 12079, 66, 580.8, 6859, 6.6, 9,false, new Item(12163), new Item(12155), new Item(2359), new Item(12183, 1)), /** * Represents an adamant minotaur pouch. */ - ADAMANT_MINOTAUR_POUCH(68, 12081, 76, 668.8, 6861, 7.6, 9, false, new Item(12163), new Item(12155), new Item(2361), new Item(12183, 144)), + ADAMANT_MINOTAUR_POUCH(68, 12081, 76, 668.8, 6861, 7.6, 9, false, new Item(12163), new Item(12155), new Item(2361), new Item(12183, 1)), /** * Represents a rune minotaur pouch. @@ -144,132 +144,132 @@ public enum SummoningPouch { /** * Represents a bull ant pouch. */ - BULL_ANT_POUCH(20, 12087, 40, 52.8, 6867, 0.6, 5, false, new Item(12158), new Item(12155), new Item(6010), new Item(12183, 11)), + BULL_ANT_POUCH(20, 12087, 40, 52.8, 6867, 0.6, 5, false, new Item(12158), new Item(12155), new Item(6010), new Item(12183, 1)), /** * Represents a macaw pouch. */ - MACAW_POUCH(21, 12071, 41, 72.4, 6851, 0.8, 5, true, new Item(12159), new Item(12155), new Item(249), new Item(12183, 78)), + MACAW_POUCH(21, 12071, 41, 72.4, 6851, 0.8, 5, true, new Item(12159), new Item(12155), new Item(249), new Item(12183, 1)), /** * Represents an evil turnip pouch. */ - EVIL_TURNIP_POUCH(22, 12051, 42, 184.8, 6833, 2.1, 5, false, new Item(12160), new Item(12155), new Item(12153), new Item(12183, 104)), + EVIL_TURNIP_POUCH(22, 12051, 42, 184.8, 6833, 2.1, 5, false, new Item(12160), new Item(12155), new Item(12153), new Item(12183, 1)), /** * Represents a spirit cockatrice pouch. */ - SPIRIT_COCKATRICE_POUCH(23, 12095, 43, 75.2, 6875, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12109), new Item(12183, 88)), + SPIRIT_COCKATRICE_POUCH(23, 12095, 43, 75.2, 6875, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12109), new Item(12183, 1)), /** * Represents a spirit guthatrice pouch. */ - SPIRIT_GUTHATRICE_POUCH(24, 12097, 43, 75.2, 6877, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12111), new Item(12183, 88)), + SPIRIT_GUTHATRICE_POUCH(24, 12097, 43, 75.2, 6877, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12111), new Item(12183, 1)), /** * Represents a spirit saratrice pouch. */ - SPIRIT_SARATRICE_POUCH(25, 12099, 43, 75.2, 6879, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12113), new Item(12183, 88)), + SPIRIT_SARATRICE_POUCH(25, 12099, 43, 75.2, 6879, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12113), new Item(12183, 1)), /** * Represents a spirit zamatrice pouch. */ - SPIRIT_ZAMATRICE_POUCH(26, 12101, 43, 75.2, 6881, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12115), new Item(12183, 88)), + SPIRIT_ZAMATRICE_POUCH(26, 12101, 43, 75.2, 6881, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12115), new Item(12183, 1)), /** * Represents a spirit pengatrice pouch. */ - SPIRIT_PENGATRICE_POUCH(27, 12103, 43, 75.2, 6883, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12117), new Item(12183, 88)), + SPIRIT_PENGATRICE_POUCH(27, 12103, 43, 75.2, 6883, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12117), new Item(12183, 1)), /** * Represents a coraxatrice pouch. */ - SPIRIT_CORAXATRICE_POUCH(28, 12105, 43, 75.2, 6885, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12119), new Item(12183, 88)), + SPIRIT_CORAXATRICE_POUCH(28, 12105, 43, 75.2, 6885, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12119), new Item(12183, 1)), /** * Represents a vulatrice pouch. */ - SPIRIT_VULATRICE(29, 12107, 43, 75.2, 6887, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12121), new Item(12183, 88)), + SPIRIT_VULATRICE(29, 12107, 43, 75.2, 6887, 0.9, 5, false, new Item(12159), new Item(12155), new Item(12121), new Item(12183, 1)), /** * Represents a pyrelord pouch. */ - PYRELORD_POUCH(30, 12816, 46, 202.4, 7377, 2.3, 5, false, new Item(12160), new Item(12155), new Item(590), new Item(12183, 111)), + PYRELORD_POUCH(30, 12816, 46, 202.4, 7377, 2.3, 5, false, new Item(12160), new Item(12155), new Item(590), new Item(12183, 1)), /** * Represents a magpie pouch. */ - MAGPIE_POUCH(31, 12041, 47, 83.2, 6824, 0.9, 5, true, new Item(12159), new Item(12155), new Item(1635), new Item(12183, 88)), + MAGPIE_POUCH(31, 12041, 47, 83.2, 6824, 0.9, 5, true, new Item(12159), new Item(12155), new Item(1635), new Item(12183, 1)), /** * Represents a bloated leech pouch. */ - BLOATED_LEECH_POUCH(32, 12061, 49, 215.2, 6843, 2.4, 5, false, new Item(12160), new Item(12155), new Item(2132), new Item(12183, 117)), + BLOATED_LEECH_POUCH(32, 12061, 49, 215.2, 6843, 2.4, 5, false, new Item(12160), new Item(12155), new Item(2132), new Item(12183, 1)), /** * Represents a spirit terrorbird pouch. */ - SPIRIT_TERRORBIRD_POUCH(33, 12007, 52, 68.4, 6794, 0.8, 6, true, new Item(12158), new Item(12155), new Item(9978), new Item(12183, 12)), + SPIRIT_TERRORBIRD_POUCH(33, 12007, 52, 68.4, 6794, 0.8, 6, true, new Item(12158), new Item(12155), new Item(9978), new Item(12183, 1)), /** * Represents an abyssal parasite pouch. */ - ABYSSAL_PARASITE_POUCH(34, true,12035, 54, 94.8, 6818, 1.1, 6, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 106)), + ABYSSAL_PARASITE_POUCH(34, true,12035, 54, 94.8, 6818, 1.1, 6, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 1)), /** * Represents a spirit jelly pouch. */ - SPIRIT_JELLY_POUCH(35, 12027, 55, 484, 6992, 5.5, 6, false, new Item(12163), new Item(12155), new Item(1937), new Item(12183, 151)), + SPIRIT_JELLY_POUCH(35, 12027, 55, 484, 6992, 5.5, 6, false, new Item(12163), new Item(12155), new Item(1937), new Item(12183, 1)), /** * Represents an ibis pouch. */ - IBIS_POUCH(36, 12531, 56, 98.8, 6991, 1.1, 6, true, new Item(12159), new Item(12155), new Item(311), new Item(12183, 109)), + IBIS_POUCH(36, 12531, 56, 98.8, 6991, 1.1, 6, true, new Item(12159), new Item(12155), new Item(311), new Item(12183, 1)), /** * Represents a spirit kyatt pouch. */ - SPIRIT_KYATT_POUCH(37, 12812, 57, 501.6, 7365, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10103), new Item(12183, 153)), + SPIRIT_KYATT_POUCH(37, 12812, 57, 501.6, 7365, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10103), new Item(12183, 1)), /** * Represents a spirit larupia pouch. */ - SPIRIT_LARUPIA_POUCH(38, 12784, 57, 501.6, 7337, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10095), new Item(12183, 155)), + SPIRIT_LARUPIA_POUCH(38, 12784, 57, 501.6, 7337, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10095), new Item(12183, 1)), /** * Represents a spirit graahk pouch. */ - SPIRIT_GRAAHK_POUCH(39, 12810, 57, 501.6, 7363, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10099), new Item(12183, 154)), + SPIRIT_GRAAHK_POUCH(39, 12810, 57, 501.6, 7363, 5.7, 6, false, new Item(12163), new Item(12155), new Item(10099), new Item(12183, 1)), /** * Represents a karamthulhu overlord pouch. */ - KARAMTHULHU_POUCH(40, 12023, 58, 510.4, 6809, 5.8, 6, false, new Item(12163), new Item(12155), new Item(6667), new Item(12183, 144)), + KARAMTHULHU_POUCH(40, 12023, 58, 510.4, 6809, 5.8, 6, false, new Item(12163), new Item(12155), new Item(6667), new Item(12183, 1)), /** * Represents a smoke devil pouch. */ - SMOKE_DEVIL_POUCH(41, 12085, 61, 268, 6865, 3, 7, false, new Item(12160), new Item(12155), new Item(9736), new Item(12183, 141)), + SMOKE_DEVIL_POUCH(41, 12085, 61, 268, 6865, 3, 7, false, new Item(12160), new Item(12155), new Item(9736), new Item(12183, 1)), /** * Represents an abyssal lurker pouch. */ - ABYSSAL_LUKRER(42, true,12037, 62, 109.6, 6820, 1.9, 9, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 119)), + ABYSSAL_LUKRER(42, true,12037, 62, 109.6, 6820, 1.9, 9, false, new Item(12159), new Item(12155), new Item(12161), new Item(12183, 1)), /** * Represents a spirit cobra pouch. */ - SPIRIT_COBRA_POUCH(43, 12015, 63, 276.8, 6802, 3.1, 6, false, new Item(12160), new Item(12155), new Item(6287), new Item(12183, 116)), + SPIRIT_COBRA_POUCH(43, 12015, 63, 276.8, 6802, 3.1, 6, false, new Item(12160), new Item(12155), new Item(6287), new Item(12183, 1)), /** * Represents a stranger plant pouch. */ - STRANGER_PLANT_POUCH(44, 12045, 64, 281.6, 6827, 3.2, 6, false, new Item(12160), new Item(12155), new Item(8431), new Item(12183, 128)), + STRANGER_PLANT_POUCH(44, 12045, 64, 281.6, 6827, 3.2, 6, false, new Item(12160), new Item(12155), new Item(8431), new Item(12183, 1)), /** * Represents a barker toad pouch. */ - BARKER_TOAD_POUCH(45, 12123, 66, 87, 6889, 1, 7, false, new Item(12158), new Item(12155), new Item(2150), new Item(12183, 11)), + BARKER_TOAD_POUCH(45, 12123, 66, 87, 6889, 1, 7, false, new Item(12158), new Item(12155), new Item(2150), new Item(12183, 1)), /** * Represents a war tortoise pouch. @@ -279,62 +279,62 @@ public enum SummoningPouch { /** * Represents a bunyip pouch. */ - BUNYIP_POUCH(47, 12029, 68, 119.2, 6813, 1.4, 7, true, new Item(12159), new Item(12155), new Item(383), new Item(12183, 110)), + BUNYIP_POUCH(47, 12029, 68, 119.2, 6813, 1.4, 7, true, new Item(12159), new Item(12155), new Item(383), new Item(12183, 1)), /** * Represents a fruit bat pouch. */ - FRUIT_BAT_POUCH(48, 12033, 69, 121.2, 6817, 1.4, 8, true, new Item(12159), new Item(12155), new Item(1963), new Item(12183, 130)), + FRUIT_BAT_POUCH(48, 12033, 69, 121.2, 6817, 1.4, 8, true, new Item(12159), new Item(12155), new Item(1963), new Item(12183, 1)), /** * Represents a ravenous locust pouch. */ - RAVENOUS_LOCUST_POUCH(49, 12820, 70, 132, 7372, 1.5, 4, false, new Item(12160), new Item(12155), new Item(1933), new Item(12183, 79)), + RAVENOUS_LOCUST_POUCH(49, 12820, 70, 132, 7372, 1.5, 4, false, new Item(12160), new Item(12155), new Item(1933), new Item(12183, 1)), /** * Represents an arctic bear pouch. */ - ARCTIC_BEAR_POUCH(50, 12057, 71, 93.2, 6839, 1.1, 8, false, new Item(12158), new Item(12155), new Item(10117), new Item(12183, 14)), + ARCTIC_BEAR_POUCH(50, 12057, 71, 93.2, 6839, 1.1, 8, false, new Item(12158), new Item(12155), new Item(10117), new Item(12183, 1)), /** * Represents a Phoenix */ - PHOENIX_POUCH(50, 14623, 72, 93.2, 8575, 1.1, 8, false, new Item(12160, 1), new Item(12183, 165), new Item(12155, 1), new Item(14616, 1)), + PHOENIX_POUCH(50, 14623, 72, 93.2, 8575, 1.1, 8, false, new Item(12160, 1), new Item(12183, 1), new Item(12155, 1), new Item(14616, 1)), /** * Represents an obsidian golem pouch. */ - OBSIDIAN_GOLEM_POUCH(51, 12792, 73, 642.4, 7345, 7.3, 8, false, new Item(12163), new Item(12155), new Item(12168), new Item(12183, 195)), + OBSIDIAN_GOLEM_POUCH(51, 12792, 73, 642.4, 7345, 7.3, 8, false, new Item(12163), new Item(12155), new Item(12168), new Item(12183, 1)), /** * Represents a granite lobster pouch. */ - GRANITE_LOBSTER_POUCH(52, 12069, 74, 325.6, 6849, 3.7, 8, false, new Item(12160), new Item(12155), new Item(6979), new Item(12183, 166)), + GRANITE_LOBSTER_POUCH(52, 12069, 74, 325.6, 6849, 3.7, 8, false, new Item(12160), new Item(12155), new Item(6979), new Item(12183, 1)), /** * Represents a praying mantis pouch. */ - PRAYING_MANTIS_POUCH(53, 12011, 75, 329.6, 6798, 3.6, 8, false, new Item(12160), new Item(12155), new Item(2460), new Item(12183, 168)), + PRAYING_MANTIS_POUCH(53, 12011, 75, 329.6, 6798, 3.6, 8, false, new Item(12160), new Item(12155), new Item(2460), new Item(12183, 1)), /** * Represents a forge regent pouch. */ - FORGE_REGENT_BEAST(54, 12782, 76, 134, 7335, 1.5, 9, false, new Item(12159), new Item(12155), new Item(10020), new Item(12183, 141)), + FORGE_REGENT_BEAST(54, 12782, 76, 134, 7335, 1.5, 9, false, new Item(12159), new Item(12155), new Item(10020), new Item(12183, 1)), /** * Represents a talon beast pouch. */ - TALON_BEAST_POUCH(55, 12794, 77, 1015.2, 7347, 3.8, 9, false, new Item(12160), new Item(12155), new Item(12162), new Item(12183, 174)), + TALON_BEAST_POUCH(55, 12794, 77, 1015.2, 7347, 3.8, 9, false, new Item(12160), new Item(12155), new Item(12162), new Item(12183, 1)), /** * Represents a giant ent pouch. */ - GIANT_ENT_POUCH(56, 12013, 78, 136.8, 6800, 1.6, 8, false, new Item(12159), new Item(5933), new Item(12155), new Item(12183, 124)), + GIANT_ENT_POUCH(56, 12013, 78, 136.8, 6800, 1.6, 8, false, new Item(12159), new Item(5933), new Item(12155), new Item(12183, 1)), /** * Represents a hydra pouch. */ - HYDRA_POUCH(60, 12025, 80, 140.8, 6811, 1.6, 9, false, new Item(12159), new Item(571), new Item(12155), new Item(12183, 128)), + HYDRA_POUCH(60, 12025, 80, 140.8, 6811, 1.6, 9, false, new Item(12159), new Item(571), new Item(12155), new Item(12183, 1)), /** * Represents a spirit dagannoth pouch. @@ -344,62 +344,62 @@ public enum SummoningPouch { /** * Represents a unicorn stallion pouch. */ - UNICORN_STALLION_POUCH(70, 12039, 88, 154.4, 6822, 1.8, 9, true, new Item(12159), new Item(237), new Item(12155), new Item(12183, 140)), + UNICORN_STALLION_POUCH(70, 12039, 88, 154.4, 6822, 1.8, 9, true, new Item(12159), new Item(237), new Item(12155), new Item(12183, 1)), /** * Represents a wolpertinger pouch. */ - WOLPERTINGER_POUCH(72, 12089, 92, 404.8, 6869, 4.5, 10, false, new Item(12160), new Item(2859), new Item(3226), new Item(12155), new Item(12183, 203)), + WOLPERTINGER_POUCH(72, 12089, 92, 404.8, 6869, 4.5, 10, false, new Item(12160), new Item(2859), new Item(3226), new Item(12155), new Item(12183, 1)), /** * Represents a pack yak pouch. */ - PACK_YAK_POUCH(75, 12093, 96, 422.4, 6873, 4.8, 10, true, new Item(12160), new Item(10818), new Item(12155), new Item(12183, 211)), + PACK_YAK_POUCH(75, 12093, 96, 422.4, 6873, 4.8, 10, true, new Item(12160), new Item(10818), new Item(12155), new Item(12183, 1)), /** * Represents a fire titan pouch. */ - FIRE_TITAN_POUCH(57, 12802, 79, 695.2, 7355, 7.9, 9, false, new Item(12163), new Item(1442), new Item(12155), new Item(12183, 198)), + FIRE_TITAN_POUCH(57, 12802, 79, 695.2, 7355, 7.9, 9, false, new Item(12163), new Item(1442), new Item(12155), new Item(12183, 1)), /** * Represents a moss titan pouch. */ - MOSS_TITAN_POUCH(58, 12804, 79, 695.2, 7357, 7.9, 9, false, new Item(12163), new Item(1440), new Item(12155), new Item(12183, 198)), + MOSS_TITAN_POUCH(58, 12804, 79, 695.2, 7357, 7.9, 9, false, new Item(12163), new Item(1440), new Item(12155), new Item(12183, 1)), /** * Represents an ice titan pouch. */ - ICE_TITAN_POUCH(59, 12806, 79, 695.2, 7359, 7.9, 9, false, new Item(12163), new Item(1438), new Item(1444), new Item(12155), new Item(12183, 198)), + ICE_TITAN_POUCH(59, 12806, 79, 695.2, 7359, 7.9, 9, false, new Item(12163), new Item(1438), new Item(1444), new Item(12155), new Item(12183, 1)), /** * Represents a lava titan pouch. */ - LAVA_TITAN_POUCH(62, 12788, 83, 730.4, 7341, 8.3, 9, false, new Item(12163), new Item(12168), new Item(12155), new Item(12183, 219)), + LAVA_TITAN_POUCH(62, 12788, 83, 730.4, 7341, 8.3, 9, false, new Item(12163), new Item(12168), new Item(12155), new Item(12183, 1)), /** * Represents a swamp titan pouch. */ - SWAMP_TITAN_POUCH(63, 12776, 85, 373.6, 7329, 4.2, 9, false, new Item(12160), new Item(10149), new Item(12155), new Item(12183, 150)), + SWAMP_TITAN_POUCH(63, 12776, 85, 373.6, 7329, 4.2, 9, false, new Item(12160), new Item(10149), new Item(12155), new Item(12183, 1)), /** * Represents a geyser titan pouch. */ - GEYSER_TITAN_POUCH(71, 12786, 89, 783.2, 7339, 8.9, 9, false, new Item(12163), new Item(1444), new Item(12155), new Item(12183, 222)), + GEYSER_TITAN_POUCH(71, 12786, 89, 783.2, 7339, 8.9, 9, false, new Item(12163), new Item(1444), new Item(12155), new Item(12183, 1)), /** * Represents an abyssal titan pouch. */ - ABYSSAL_TITAN_POUCH(73, true,12796, 93, 163.2, 7349, 1.9, 10, false, new Item(12159), new Item(12161), new Item(12155), new Item(12183, 113)), + ABYSSAL_TITAN_POUCH(73, true,12796, 93, 163.2, 7349, 1.9, 10, false, new Item(12159), new Item(12161), new Item(12155), new Item(12183, 1)), /** * Represents an iron titan pouch. */ - IRON_TITAN_POUCH(74, 12822, 95, 417.6, 7375, 4.7, 10, false, new Item(12160), new Item(1115), new Item(12155), new Item(12183, 198)), + IRON_TITAN_POUCH(74, 12822, 95, 417.6, 7375, 4.7, 10, false, new Item(12160), new Item(1115), new Item(12155), new Item(12183, 1)), /** * Represents a steel titan pouch. */ - STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, false, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 178)), + STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, false, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 1)), SACRED_CLAY_POUCH_1(-1, 14422, 1, 0, 8240, 0, 1, false, new Item(14182)), SACRED_CLAY_POUCH_2(-1, 14424, 20, 0, 8242, 0, 3, false, new Item(14184)), diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java b/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java index 9fb1effdc..b6184c4a8 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java +++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalLurkerNPC.java @@ -28,7 +28,7 @@ public class AbyssalLurkerNPC extends BurdenBeast { * @param id The id. */ public AbyssalLurkerNPC(Player owner, int id) { - super(owner, id, 4100, 12037, 3, 7, WeaponInterface.STYLE_CAST); + super(owner, id, 4100, 12037, 3, 24, WeaponInterface.STYLE_CAST); } @Override diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java b/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java index 795484722..551e2db9a 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java +++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalParasiteNPC.java @@ -36,7 +36,7 @@ public class AbyssalParasiteNPC extends BurdenBeast { * @param id The id. */ public AbyssalParasiteNPC(Player owner, int id) { - super(owner, id, 3000, 12035, 1, 7); + super(owner, id, 3000, 12035, 1, 18); } @Override diff --git a/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt b/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt index a7ed47a6d..eaeb73b45 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt +++ b/Server/src/main/content/global/skill/summoning/familiar/AbyssalTitanNPC.kt @@ -21,7 +21,7 @@ import org.rs09.consts.NPCs @Initializable class AbyssalTitanNPC constructor(owner: Player? = null, id: Int = NPCs.ABYSSAL_TITAN_7349) : - BurdenBeast(owner, id, 3200, Items.ABYSSAL_TITAN_POUCH_12796, 6, 7, WeaponInterface.STYLE_ACCURATE) { + BurdenBeast(owner, id, 3200, Items.ABYSSAL_TITAN_POUCH_12796, 6, 30, WeaponInterface.STYLE_ACCURATE) { override fun construct(owner: Player, id: Int): Familiar { return AbyssalTitanNPC(owner, id) } diff --git a/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java b/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java index d6a3100d0..628ff5077 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java +++ b/Server/src/main/content/global/skill/summoning/familiar/BurdenBeast.java @@ -83,6 +83,7 @@ public abstract class BurdenBeast extends Familiar { * @return {@code True} if so. */ public boolean isAllowed(Player owner, Item item) { + /* if (item.getValue() > 50000) { owner.getPacketDispatch().sendMessage("This item is too valuable to trust to this familiar."); return false; @@ -95,6 +96,7 @@ public abstract class BurdenBeast extends Familiar { owner.getPacketDispatch().sendMessage("You can't store " + item.getName().toLowerCase() + " in this familiar."); return false; } + */ if(SummoningPouch.get(this.getPouchId()).abyssal){ if(!item.getName().toLowerCase().contains("essence")) { owner.getPacketDispatch().sendMessage("You can only give unnoted essence to this familiar."); diff --git a/Server/src/main/content/global/skill/summoning/familiar/Familiar.java b/Server/src/main/content/global/skill/summoning/familiar/Familiar.java index b85c1ec16..4177e1d5c 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/Familiar.java +++ b/Server/src/main/content/global/skill/summoning/familiar/Familiar.java @@ -177,7 +177,9 @@ public abstract class Familiar extends NPC implements Plugin { if (pouchId == -1) { this.pointsPerTick = 0.0; } else { - int drain = pouch.getLevelRequired() - pouch.getSummonCost() + 1; + //int drain = pouch.getLevelRequired() - pouch.getSummonCost() + 1; + // Snowscape: removing the initial drain and making it drain over the life of the familiar. Removing the +1 makes the final drain happen on the last tick of the familiar's life. That works for our new system, as the familiar timer won't start until that final tick happens. + int drain = pouch.getLevelRequired(); this.pointsPerTick = (double) drain / maximumTicks; } } @@ -223,7 +225,10 @@ public abstract class Familiar extends NPC implements Plugin { @Override public void handleTickActions() { - ticks--; + //Snowscape: only count down the familiar timer if summoning points are zero + if (owner.getSkills().getLevel(Skills.SUMMONING) == 0) { + ticks--; + } fracDrain += pointsPerTick; if (fracDrain > 1.0 && ticks > 0) { fracDrain -= 1.0; diff --git a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java index 02bb0a403..61b97126e 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java +++ b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java @@ -187,10 +187,12 @@ public final class FamiliarManager { player.getPacketDispatch().sendMessage("You need a Summoning level of " + pouch.getLevelRequired() + " to summon this familiar."); return; } + /* Snowscape: removing the drain on summon. This drain will instead be added to the gradual drain over the familiar's life. if (player.getSkills().getLevel(Skills.SUMMONING) < pouch.getSummonCost()) { player.getPacketDispatch().sendMessage("You need at least " + pouch.getSummonCost() + " Summoning points to summon this familiar."); return; } + */ final int npcId = pouch.getNpcId(); Familiar fam = !renew ? FAMILIARS.get(npcId) : familiar; if (fam == null) { @@ -208,7 +210,7 @@ public final class FamiliarManager { if (!player.getInventory().remove(item)) { return; } - player.getSkills().updateLevel(Skills.SUMMONING, -pouch.getSummonCost(), 0); + //player.getSkills().updateLevel(Skills.SUMMONING, -pouch.getSummonCost(), 0); player.getSkills().addExperience(Skills.SUMMONING, pouch.getSummonExperience()); if (!renew) { familiar = fam; diff --git a/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java b/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java index 4f8d3fab5..817b0501c 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java +++ b/Server/src/main/content/global/skill/summoning/familiar/VoidFamiliarNPC.java @@ -195,8 +195,9 @@ public final class VoidFamiliarNPC implements Plugin { public void handleFamiliarTick() { super.handleFamiliarTick(); if (healDelay < GameWorld.getTicks()) { - getSkills().heal(1); + owner.getSkills().heal(1); healDelay = GameWorld.getTicks() + 25; + owner.graphics(Graphics.create(1507), 1); } } diff --git a/Server/src/main/content/global/skill/thieving/ThievingListeners.kt b/Server/src/main/content/global/skill/thieving/ThievingListeners.kt index d6123fcda..77a7f25dc 100644 --- a/Server/src/main/content/global/skill/thieving/ThievingListeners.kt +++ b/Server/src/main/content/global/skill/thieving/ThievingListeners.kt @@ -15,6 +15,9 @@ import core.game.node.entity.player.Player import core.game.node.item.Item import org.rs09.consts.Sounds +import core.game.interaction.InteractionListeners +import core.game.world.GameWorld + class ThievingListeners : InteractionListener { companion object { @@ -64,6 +67,9 @@ class ThievingListeners : InteractionListener { player.sendMessage("You don't have enough inventory space to do that.") return@on true } + + //Custom portion. Repeat pickpocket, only proceed if it has been long enough since the last pickpocket action + if (getAttribute(player, "pickpockettick", 0) <= GameWorld.ticks) { player.animator.animate(PICKPOCKET_ANIM) val lootTable = pickpocketRoll(player, pickpocketData.low, pickpocketData.high, pickpocketData.table) @@ -73,18 +79,24 @@ class ThievingListeners : InteractionListener { playHurtAudio(player, 20) - stun(player, pickpocketData.stunTime) + //stun(player, pickpocketData.stunTime) + stun(player, 0) + setAttribute(player, "pickpockettick", GameWorld.ticks + pickpocketData.stunTime) player.impactHandler.manualHit(node.asNpc(),RandomFunction.random(pickpocketData.stunDamageMin,pickpocketData.stunDamageMax),ImpactHandler.HitsplatType.NORMAL) node.asNpc().face(null) } else { playAudio(player, Sounds.PICK_2581) - player.lock(2) + //player.lock(2) + setAttribute(player, "pickpockettick", GameWorld.ticks + 2) lootTable.forEach { player.inventory.add(it) } player.skills.addExperience(Skills.THIEVING,pickpocketData.experience) } - + } + //pickpocket again. + InteractionListeners.run(node.id, IntType.NPC,"Pickpocket",player,node) + return@on true } } diff --git a/Server/src/main/content/minigame/mta/MTAShop.java b/Server/src/main/content/minigame/mta/MTAShop.java index beb64a1b2..d8db649a8 100644 --- a/Server/src/main/content/minigame/mta/MTAShop.java +++ b/Server/src/main/content/minigame/mta/MTAShop.java @@ -32,8 +32,8 @@ public class MTAShop { /** * The prices. */ - private static final int[][] PRICES = new int[][] { { 30, 30, 300, 30 }, { 60, 60, 600, 60 }, { 150, 200, 1500, 150 }, { 240, 240, 2400, 240 }, { 400, 450, 4000, 400 }, { 350, 400, 3000, 350 }, { 120, 120, 1200, 120 }, { 175, 225, 1500, 175 }, { 450, 500, 5000, 450 }, { 500, 550, 6000, 500 }, { 200, 300, 2000, 200 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 0, 0, 5, 0 }, { 0, 1, 5, 1 }, { 0, 1, 0, 1 }, { 2, 1, 20, 1 }, { 2, 0, 0, 0 }, { 2, 2, 25, 2 }, { 2, 2, 25, 2 } }; - + private static final int[][] PRICES = new int[][] { { 6, 6, 60, 6 }, { 12, 12, 120, 12 }, { 30, 40, 300, 30 }, { 48, 48, 480, 48 }, { 80, 90, 800, 80 }, { 70, 80, 600, 70 }, { 24, 24, 240, 24 }, { 35, 45, 300, 35 }, { 90, 100, 1000, 90 }, { 100, 110, 1200, 100 }, { 40, 60, 400, 40 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 1, 1, 15, 1 }, { 0, 0, 5, 0 }, { 0, 1, 5, 1 }, { 0, 1, 0, 1 }, { 2, 1, 20, 1 }, { 2, 0, 0, 0 }, { 2, 2, 25, 2 }, { 2, 2, 25, 2 } }; + /** * The container. */ diff --git a/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java b/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java index f1fb680a0..396d22355 100644 --- a/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java +++ b/Server/src/main/content/minigame/pestcontrol/PestControlActivityPlugin.java @@ -133,14 +133,14 @@ public final class PestControlActivityPlugin extends ActivityPlugin { // type, // default } else if (success && p.getAttribute("pc_zeal", 0) >= 50) { - int amount = type.ordinal() + 2; + int amount = type.ordinal() == 0 ? 10 : type.ordinal() == 1 ? 15 : 25; p.getSavedData().getActivityData().increasePestPoints(amount); Item coins = new Item(995, p.getProperties().getCurrentCombatLevel() * 10); if (!p.getInventory().add(coins)) { GroundItemManager.create(coins, p); } // default, type, name - p.getDialogueInterpreter().open(3781, true, 1, type.ordinal() == 0 ? "two" : type.ordinal() == 1 ? "three" : "four"); + p.getDialogueInterpreter().open(3781, true, 1, type.ordinal() == 0 ? "ten" : type.ordinal() == 1 ? "fifteen" : "twenty-five"); } else { // default type, default p.getDialogueInterpreter().open(3781, true, 2, true); diff --git a/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java b/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java index 9dc6aab16..1fd3c5ca7 100644 --- a/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java +++ b/Server/src/main/content/minigame/pestcontrol/reward/PCRewardInterface.java @@ -192,13 +192,13 @@ public final class PCRewardInterface extends ComponentPlugin { */ public static double calculateExperience(final Player player, final int skillId) { int level = player.getSkills().getStaticLevel(skillId); - double divideBy = 30;//17.5-33 ideal range + double multiplier = 35; if (skillId == Skills.PRAYER) { - divideBy = 67;// 34-75 ideal range + multiplier = 18; } else if (skillId == Skills.MAGIC || skillId == Skills.RANGE) { - divideBy = 29;//19.1-31 ideal range + multiplier = 32; } - return (int) ((level * level) / divideBy) * (player.getSkills().experienceMultiplier / 2); + return (int) ((level * level) / 600) * (multiplier) / 5; } /** diff --git a/Server/src/main/content/region/misthalin/lumbridge/handlers/CulinomancerShop.kt b/Server/src/main/content/region/misthalin/lumbridge/handlers/CulinomancerShop.kt index e82bcce41..727743512 100644 --- a/Server/src/main/content/region/misthalin/lumbridge/handlers/CulinomancerShop.kt +++ b/Server/src/main/content/region/misthalin/lumbridge/handlers/CulinomancerShop.kt @@ -14,9 +14,9 @@ import kotlin.collections.HashMap class CulinomancerShop : LoginListener { //Enable the chest if the player has 18 quest points or more override fun login(player: Player) { - if(player.questRepository.points >= 18){ + if(player.questRepository.points >= 10){ setVarbit(player, 1850, 5) - setAttribute(player, "culino-tier", player.questRepository.points / 18) //Set this, so we can check if the player has gained a tier during server runtime + setAttribute(player, "culino-tier", player.questRepository.points / 10) //Set this, so we can check if the player has gained a tier during server runtime //Restock pulse for this player (yes, this means the chest will only restock if the player has logged in. Shop system needs work in order to do otherwise.) val restockPulse = object : Pulse(100){ //Run once a minute @@ -49,7 +49,7 @@ class CulinomancerShop : LoginListener { fun getShop(player: Player, food: Boolean): Shop { val uid = player.details.uid val points = player.questRepository.points - val tier = (points / 18) + val tier = (points / 10) if (tier != getAttribute(player, "culino-tier", 0)) //If player tier has changed { foodShops.remove(uid) //Clear the previous shops, so they can regenerate with the new tier @@ -69,7 +69,7 @@ class CulinomancerShop : LoginListener { //Generate default food stock based on an amount of total QP. private fun generateFoodStock(points: Int): Array { val stock = Array(foodStock.size) { ShopItem(0, 0) } - val maxQty = when (val qpTier = (points / 18) - 1) { + val maxQty = when (val qpTier = (points / 10) - 1) { 0, 1, 2, 3, 4 -> 1 + qpTier else -> qpTier + (qpTier + (qpTier - 5)) //5 = 10, 6 = 13, 7 = 15, etc } @@ -83,14 +83,14 @@ class CulinomancerShop : LoginListener { //Generate default gear stock based on an amount of total QP. private fun generateGearStock(points: Int): Array { val stock = Array(gearStock.size) { ShopItem(0, 0) } - val qpTier = (points / 18) + val qpTier = (points / 10) for ((index, item) in stock.withIndex()) item.itemId = gearStock[index] for (i in 0 until min(qpTier, 10)) { stock[i].amount = 30 stock[i + 10].amount = 5 } - stock[9].amount = 1 + //stock[9].amount = 1 return stock } diff --git a/Server/src/main/content/region/morytania/quest/naturespirit/NSUtils.kt b/Server/src/main/content/region/morytania/quest/naturespirit/NSUtils.kt index 03263c6c4..c47754946 100644 --- a/Server/src/main/content/region/morytania/quest/naturespirit/NSUtils.kt +++ b/Server/src/main/content/region/morytania/quest/naturespirit/NSUtils.kt @@ -85,10 +85,12 @@ object NSUtils { fun castBloom(player: Player): Boolean{ var success = false val region = forId(player.location.regionId) + /* if (player.skills.prayerPoints < 1) { player.packetDispatch.sendMessage("You don't have enough prayer points to do this.") return false } + */ handleVisuals(player) val locs = player.location.surroundingTiles for (o in locs) { @@ -114,6 +116,17 @@ object NSUtils { } } } + if (success) { + player.skills.decrementPrayerPoints(RandomFunction.random(1, 3).toDouble()) + } else { + if (getAttribute(player, "bonecrusher:enabled", false)) { + setAttribute(player, "/save:bonecrusher:enabled",false) + player.packetDispatch.sendMessage("Automatic Bone Burial: Disabled.") + } else { + setAttribute(player, "/save:bonecrusher:enabled",true) + player.packetDispatch.sendMessage("Automatic Bone Burial: Enabled.") + } + } return success } @@ -122,7 +135,6 @@ object NSUtils { * animation. */ private fun handleVisuals(player: Player) { - player.skills.decrementPrayerPoints(RandomFunction.random(1, 3).toDouble()) playAudio(player, Sounds.CAST_BLOOM_1493) val AROUND_YOU = player.location.surroundingTiles for (location in AROUND_YOU) { diff --git a/Server/src/main/content/region/tirranwn/quest/rovingelves/IslwynDialogue.java b/Server/src/main/content/region/tirranwn/quest/rovingelves/IslwynDialogue.java index b24862a1f..e1bcd2184 100644 --- a/Server/src/main/content/region/tirranwn/quest/rovingelves/IslwynDialogue.java +++ b/Server/src/main/content/region/tirranwn/quest/rovingelves/IslwynDialogue.java @@ -235,7 +235,7 @@ public class IslwynDialogue extends DialoguePlugin { case 33: switch (buttonId) { case 1: - interpreter.sendDialogues(1680, FacialExpression.HALF_GUILTY, "Ah, very well.", "I will sell you a new bow or shield for 900,000 coins."); + interpreter.sendDialogues(1680, FacialExpression.HALF_GUILTY, "Ah, very well.", "I will make you a new bow from 3,600 Rune Arrows", "or a shield from 24 Rune Kiteshields."); stage = 37; break; case 2: @@ -245,7 +245,7 @@ public class IslwynDialogue extends DialoguePlugin { } break; case 34: - interpreter.sendOptions("Select an Option", "Recharge seed into bow", "Recharge seed into shield"); + interpreter.sendOptions("Select an Option", "Recharge seed into bow with 3000 Rune Arrows", "Recharge seed into shield with 20 Rune Kiteshields"); stage = 35; break; case 35: @@ -266,13 +266,13 @@ public class IslwynDialogue extends DialoguePlugin { stage = 500; } int timesRecharged = player.getAttribute("rovingelves:crystal-equip-recharges", 0); - int price = crystalWeaponPrice(timesRecharged); - if (!player.getInventory().contains(995, price)) { - interpreter.sendDialogue(String.format("You don't have enough coins, you need %d.", price)); + int price = crystalBowPrice(false); + if (!player.getInventory().contains(892, price)) { + interpreter.sendDialogue(String.format("You don't have enough Rune Arrows, you need %d.", price)); stage = 500; } - if (player.getInventory().contains(995, price) && player.getInventory().contains(RovingElves.CRYSTAL_SEED.getId(), 1)) { - if (player.getInventory().remove(RovingElves.CRYSTAL_SEED) && player.getInventory().remove(new Item(995, price))) { + if (player.getInventory().contains(892, price) && player.getInventory().contains(RovingElves.CRYSTAL_SEED.getId(), 1)) { + if (player.getInventory().remove(RovingElves.CRYSTAL_SEED) && player.getInventory().remove(new Item(892, price))) { player.getInventory().add(new Item(4214, 1)); player.incrementAttribute("/save:rovingelves:crystal-equip-recharges", 1); end(); @@ -285,13 +285,13 @@ public class IslwynDialogue extends DialoguePlugin { stage = 500; } timesRecharged = player.getAttribute("rovingelves:crystal-equip-recharges", 0); - price = crystalWeaponPrice(timesRecharged); - if (!player.getInventory().contains(995, price)) { - interpreter.sendDialogue("You don't have enough coins."); + price = crystalShieldPrice(false); + if (!player.getInventory().contains(1201, price)) { + interpreter.sendDialogue(String.format("You don't have enough Rune Kiteshields, you need %d.", price)); stage = 500; } - if (player.getInventory().contains(995, price) && player.getInventory().contains(RovingElves.CRYSTAL_SEED.getId(), 1)) { - if (player.getInventory().remove(RovingElves.CRYSTAL_SEED) && player.getInventory().remove(new Item(995, price))) { + if (player.getInventory().contains(1201, price) && player.getInventory().contains(RovingElves.CRYSTAL_SEED.getId(), 1)) { + if (player.getInventory().remove(RovingElves.CRYSTAL_SEED) && player.getInventory().remove(new Item(1201, price))) { player.getInventory().add(new Item(4225, 1)); player.incrementAttribute("/save:rovingelves:crystal-equip-recharges", 1); end(); @@ -315,13 +315,13 @@ public class IslwynDialogue extends DialoguePlugin { } break; case 39: - price = crystalWeaponPrice(0); - if (!player.getInventory().contains(995, price)) { - interpreter.sendDialogue("You don't have enough coins."); + price = crystalBowPrice(true); + if (!player.getInventory().contains(892, price)) { + interpreter.sendDialogue(String.format("You don't have enough Rune Arrows, you need %d.", price)); stage = 500; } - if (player.getInventory().contains(995, price)) { - if (player.getInventory().remove(new Item(995, price))) { + if (player.getInventory().contains(892, price)) { + if (player.getInventory().remove(new Item(892, price))) { if (!player.getInventory().add(new Item(4212, 1))) { GroundItemManager.create(new Item(4212, 1), player); } @@ -330,13 +330,13 @@ public class IslwynDialogue extends DialoguePlugin { } break; case 40: - price = crystalWeaponPrice(0); - if (!player.getInventory().contains(995, price)) { - interpreter.sendDialogue("You don't have enough coins."); + price = crystalShieldPrice(true); + if (!player.getInventory().contains(1201, price)) { + interpreter.sendDialogue(String.format("You don't have enough Rune Kiteshields, you need %d.", price)); stage = 500; } - if (player.getInventory().contains(995, price)) { - if (player.getInventory().remove(new Item(995, price))) { + if (player.getInventory().contains(1201, price)) { + if (player.getInventory().remove(new Item(1201, price))) { if (!player.getInventory().add(new Item(4224, 1))) { GroundItemManager.create(new Item(4224, 1), player); } @@ -377,7 +377,21 @@ public class IslwynDialogue extends DialoguePlugin { } // 900k for the 0th recharge (or for new bows), decreasing by 180k per recharge down to 180k - public int crystalWeaponPrice(int timesRecharged) { - return Math.max(900000 - 180000 * timesRecharged, 180000); + //public int crystalWeaponPrice(int timesRecharged) { + // return Math.max(900000 - 180000 * timesRecharged, 180000); + //} + public int crystalBowPrice(boolean isNew) { + if (isNew) { + return 3600; + } else { + return 3000; + } + } + public int crystalShieldPrice(boolean isNew) { + if (isNew) { + return 24; + } else { + return 20; + } } } diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index c0f395b69..5b1c89f4d 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -305,7 +305,16 @@ fun hasGodItem(player: Player, god: God): Boolean { */ fun shouldRemoveNothings(player: Player) : Boolean { val ring = getItemFromEquipment(player, EquipmentSlot.RING) - return ring != null && ring.id in Items.RING_OF_WEALTH_14638..Items.RING_OF_WEALTH4_14646 + if (getAttribute(player, "ringofwealth:unlocked", false)){ + player.sendMessage("Your Wealth enchantment coaxes a rare drop from your opponent.") + return true + } else if (ring != null && ring.id in Items.RING_OF_WEALTH_14638..Items.RING_OF_WEALTH4_14646) { + player.sendMessage("Your Ring of Wealth coaxes a rare drop from your opponent.") + player.sendMessage("The magic in the ring reminds you of the High Level Alchemy spell for some reason.") + return true + } else { + return false + } } /** diff --git a/Server/src/main/core/game/dialogue/SkillDialogueHandler.kt b/Server/src/main/core/game/dialogue/SkillDialogueHandler.kt index 58e692b23..ada3a4232 100644 --- a/Server/src/main/core/game/dialogue/SkillDialogueHandler.kt +++ b/Server/src/main/core/game/dialogue/SkillDialogueHandler.kt @@ -154,8 +154,8 @@ open class SkillDialogueHandler( // "Make 5 sets" Option 3 -> 5 // "Make 10 sets" Option - 2 -> 10 - else -> 10 + 2 -> 30 + else -> 30 } } }, @@ -182,7 +182,7 @@ open class SkillDialogueHandler( when (buttonId) { 6, 10 -> return 1 5, 9 -> return 5 - 4, 8 -> return 10 + 4, 8 -> return 30 3, 7 -> return -1 } return 1 @@ -211,7 +211,7 @@ open class SkillDialogueHandler( when (buttonId) { 7, 11, 15 -> return 1 6, 10, 14 -> return 5 - 5, 9, 13 -> return 10 + 5, 9, 13 -> return 30 4, 8, 12 -> return -1 } return 1 @@ -241,7 +241,7 @@ open class SkillDialogueHandler( when (buttonId) { 8, 12, 16, 20 -> return 1 7, 11, 15, 19 -> return 5 - 6, 10, 14, 18 -> return 10 + 6, 10, 14, 18 -> return 30 5, 9, 13, 17 -> return -1 } return 1 @@ -278,7 +278,7 @@ open class SkillDialogueHandler( when (buttonId) { 9, 13, 17, 21, 25 -> return 1 8, 12, 16, 20, 24 -> return 5 - 7, 11, 15, 19, 23 -> return 10 + 7, 11, 15, 19, 23 -> return 30 6, 10, 14, 18, 22 -> return -1 } return 1 diff --git a/Server/src/main/core/game/node/entity/combat/equipment/WeaponInterface.java b/Server/src/main/core/game/node/entity/combat/equipment/WeaponInterface.java index cb74f3fa6..6a38729fe 100644 --- a/Server/src/main/core/game/node/entity/combat/equipment/WeaponInterface.java +++ b/Server/src/main/core/game/node/entity/combat/equipment/WeaponInterface.java @@ -46,10 +46,20 @@ public final class WeaponInterface extends Component { private static final int[] SLAYER_STAFF_SPELL_IDS = { 22, 31, 45, 48, 52, 55 }; /** - * The void staff spell ids + * The void and guthix staff spell ids */ private static final int[] VOID_STAFF_SPELL_IDS = { 22, 42, 45, 48, 52, 55 }; + /** + * The saradomin staff spell ids + */ + private static final int[] SARADOMIN_STAFF_SPELL_IDS = { 22, 41, 45, 48, 52, 55 }; + + /** + * The zamorak staff spell ids + */ + private static final int[] ZAMORAK_STAFF_SPELL_IDS = { 22, 43, 45, 48, 52, 55 }; + /** * The default attack animations. */ @@ -333,13 +343,23 @@ public final class WeaponInterface extends Component { * @return The component id for the autocast select tab. */ public int getAutospellId(int spellId) { - boolean modern = player.getSpellBookManager().getSpellBook() == Components.MAGIC_192; - int[] data = modern ? MODERN_SPELL_IDS : ANCIENT_SPELL_IDS; - if (modern && player.getEquipment().getNew(3).getName().equalsIgnoreCase("Slayer's staff")) { + //boolean modern = player.getSpellBookManager().getSpellBook() == Components.MAGIC_192; + boolean modern = !player.getEquipment().getNew(3).getName().equalsIgnoreCase("Ancient Staff") && !player.getEquipment().getNew(3).getName().contains("uriel's staff"); + int[] data = MODERN_SPELL_IDS; + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Ancient Staff") || player.getEquipment().getNew(3).getName().contains("uriel's staff")) { + data = ANCIENT_SPELL_IDS; + } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Slayer's staff")) { data = SLAYER_STAFF_SPELL_IDS; } - if (modern && player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace")) { + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace") || player.getEquipment().getNew(3).getName().equalsIgnoreCase("Guthix Staff")) { data = VOID_STAFF_SPELL_IDS; + } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Saradomin Staff")) { + data = SARADOMIN_STAFF_SPELL_IDS; + } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Zamorak Staff")) { + data = ZAMORAK_STAFF_SPELL_IDS; } for (int i = 0; i < data.length; i++) { if (data[i] == spellId) { @@ -355,14 +375,24 @@ public final class WeaponInterface extends Component { * @param adjustAttackStyle If the attack style should be adjusted. */ public void selectAutoSpell(int buttonId, boolean adjustAttackStyle) { - boolean modern = player.getSpellBookManager().getSpellBook() == Components.MAGIC_192; - int[] data = modern ? MODERN_SPELL_IDS : ANCIENT_SPELL_IDS; - if (modern && player.getEquipment().getNew(3).getName().equalsIgnoreCase("Slayer's staff")) { + //boolean modern = player.getSpellBookManager().getSpellBook() == Components.MAGIC_192; + boolean modern = !player.getEquipment().getNew(3).getName().equalsIgnoreCase("Ancient Staff") && !player.getEquipment().getNew(3).getName().contains("uriel's staff"); + int[] data = MODERN_SPELL_IDS; + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Ancient staff") || player.getEquipment().getNew(3).getName().contains("uriel's staff")) { + data = ANCIENT_SPELL_IDS; + } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Slayer's staff")) { data = SLAYER_STAFF_SPELL_IDS; } - if (modern && player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace")) { + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace") || modern && player.getEquipment().getNew(3).getName().equalsIgnoreCase("Guthix Staff")) { data = VOID_STAFF_SPELL_IDS; } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Saradomin Staff")) { + data = SARADOMIN_STAFF_SPELL_IDS; + } + if (player.getEquipment().getNew(3).getName().equalsIgnoreCase("Zamorak Staff")) { + data = ZAMORAK_STAFF_SPELL_IDS; + } CombatSpell current = player.getProperties().getAutocastSpell(); if (buttonId >= data.length) { return; @@ -455,15 +485,20 @@ public final class WeaponInterface extends Component { return; } player.setAttribute("autocast_select", true); - int id = player.getSpellBookManager().getSpellBook() == 193 ? 797 : 319; + //int id = player.getSpellBookManager().getSpellBook() == 193 ? 797 : 319; + int id = 319; + boolean ancient = player.getEquipment().getNew(3).getName().equalsIgnoreCase("Ancient staff") || player.getEquipment().getNew(3).getName().contains("uriel's staff"); boolean slayer = player.getEquipment().getNew(3).getName().equalsIgnoreCase("Slayer's staff"); - boolean mace = player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace"); + boolean mace = player.getEquipment().getNew(3).getName().equalsIgnoreCase("Void knight mace") || player.getEquipment().getNew(3).getName().equalsIgnoreCase("Guthix Staff") || player.getEquipment().getNew(3).getName().equalsIgnoreCase("Saradomin Staff") || player.getEquipment().getNew(3).getName().equalsIgnoreCase("Zamorak Staff"); if (slayer) { id = 310; } if (mace) { id = 406; } + if (ancient) { + id = 797; + } Component component = new Component(id); component.getDefinition().setTabIndex(0); component.getDefinition().setType(InterfaceType.TAB); @@ -480,7 +515,7 @@ public final class WeaponInterface extends Component { if (current != WeaponInterfaces.STAFF) { return false; } - if (player.getSpellBookManager().getSpellBook() == SpellBookManager.SpellBook.LUNAR.getInterfaceId()) { + /* if (player.getSpellBookManager().getSpellBook() == SpellBookManager.SpellBook.LUNAR.getInterfaceId()) { if (message) { player.getPacketDispatch().sendMessage("You can't autocast Lunar magic."); } @@ -492,7 +527,7 @@ public final class WeaponInterface extends Component { player.getPacketDispatch().sendMessage("You can only autocast ancient magicks with an Ancient or Zuriel's staff."); } return false; - } + } */ return true; } diff --git a/Server/src/main/core/game/node/entity/combat/graves/GraveType.kt b/Server/src/main/core/game/node/entity/combat/graves/GraveType.kt index 7d4f7bc5b..f36c3ad1d 100644 --- a/Server/src/main/core/game/node/entity/combat/graves/GraveType.kt +++ b/Server/src/main/core/game/node/entity/combat/graves/GraveType.kt @@ -3,19 +3,19 @@ package core.game.node.entity.combat.graves import org.rs09.consts.NPCs enum class GraveType(val npcId: Int, val cost: Int, val durationMinutes: Int, val isMembers: Boolean, val requiredQuest: String = "", val text: String) { - MEM_PLAQUE(NPCs.GRAVE_MARKER_6565, 0, 2, false, text = "In memory of @name,
who died here."), - FLAG(NPCs.GRAVE_MARKER_6568, 50, 2, false, text = MEM_PLAQUE.text), - SMALL_GS(NPCs.GRAVESTONE_6571, 500, 2, false, text = "In loving memory of our dear friend @name,
who died in this place @mins ago."), - ORNATE_GS(NPCs.GRAVESTONE_6574, 5000, 3, false, text = SMALL_GS.text), - FONT_OF_LIFE(NPCs.GRAVESTONE_6577, 50000, 4, true, text = "In your travels,
pause awhile to remember @name,
who passed away at this spot."), - STELE(NPCs.STELE_6580, 50000, 4, true, text = FONT_OF_LIFE.text), - SARA_SYMBOL(NPCs.SARADOMIN_SYMBOL_6583, 50000, 4, true, text = "@name,
an enlightened servant of Saradomin,
perished in this place."), - ZAM_SYMBOL(NPCs.ZAMORAK_SYMBOL_6586, 50000, 4, true, text = "@name,
a most bloodthirsty follower of Zamorak,
perished in this place."), - GUTH_SYMBOL(NPCs.GUTHIX_SYMBOL_6589, 50000, 4, true, text = "@name,
who walked with the Balance of Guthix,
perished in this place."), - BAND_SYMBOL(NPCs.BANDOS_SYMBOL_6592, 50000, 4, true, requiredQuest = "Land of the Goblins", text = "@name,
a vicious warrior dedicated to Bandos,
perished in this place. "), - ARMA_SYMBOL(NPCs.ARMADYL_SYMBOL_6595, 50000, 4, true, requiredQuest = "Temple of Ikov", text = "@name,
a follower of the Law of Armadyl,
perished in this place."), - ZARO_SYMBOL(NPCs.MEMORIAL_STONE_6598, 50000, 4, true, requiredQuest = "Desert Treasure", text = "@name,
servant of the Unknown Power,
perished in this place."), - ANGEL_DEATH(NPCs.MEMORIAL_STONE_6601, 500000, 5, true, text = "Ye frail mortals who gaze upon this sight,
forget not the fate of @name, once mighty, now
surrendered to the inescapable grasp of destiny.
Requiescat in pace."); + MEM_PLAQUE(NPCs.GRAVE_MARKER_6565, 0, 5, false, text = "In memory of @name,
who died here."), + FLAG(NPCs.GRAVE_MARKER_6568, 50, 10, false, text = MEM_PLAQUE.text), + SMALL_GS(NPCs.GRAVESTONE_6571, 500, 15, false, text = "In loving memory of our dear friend @name,
who died in this place @mins ago."), + ORNATE_GS(NPCs.GRAVESTONE_6574, 5000, 30, false, text = SMALL_GS.text), + FONT_OF_LIFE(NPCs.GRAVESTONE_6577, 50000, 45, true, text = "In your travels,
pause awhile to remember @name,
who passed away at this spot."), + STELE(NPCs.STELE_6580, 50000, 45, true, text = FONT_OF_LIFE.text), + SARA_SYMBOL(NPCs.SARADOMIN_SYMBOL_6583, 50000, 45, true, text = "@name,
an enlightened servant of Saradomin,
perished in this place."), + ZAM_SYMBOL(NPCs.ZAMORAK_SYMBOL_6586, 50000, 45, true, text = "@name,
a most bloodthirsty follower of Zamorak,
perished in this place."), + GUTH_SYMBOL(NPCs.GUTHIX_SYMBOL_6589, 50000, 45, true, text = "@name,
who walked with the Balance of Guthix,
perished in this place."), + BAND_SYMBOL(NPCs.BANDOS_SYMBOL_6592, 50000, 45, true, requiredQuest = "Land of the Goblins", text = "@name,
a vicious warrior dedicated to Bandos,
perished in this place. "), + ARMA_SYMBOL(NPCs.ARMADYL_SYMBOL_6595, 50000, 45, true, requiredQuest = "Temple of Ikov", text = "@name,
a follower of the Law of Armadyl,
perished in this place."), + ZARO_SYMBOL(NPCs.MEMORIAL_STONE_6598, 50000, 45, true, requiredQuest = "Desert Treasure", text = "@name,
servant of the Unknown Power,
perished in this place."), + ANGEL_DEATH(NPCs.MEMORIAL_STONE_6601, 500000, 60, true, text = "Ye frail mortals who gaze upon this sight,
forget not the fate of @name, once mighty, now
surrendered to the inescapable grasp of destiny.
Requiescat in pace."); companion object { val ids = values().fold(ArrayList()) {list, type -> diff --git a/Server/src/main/core/game/node/entity/combat/spell/CombatSpell.java b/Server/src/main/core/game/node/entity/combat/spell/CombatSpell.java index 3601d6849..0db21b192 100644 --- a/Server/src/main/core/game/node/entity/combat/spell/CombatSpell.java +++ b/Server/src/main/core/game/node/entity/combat/spell/CombatSpell.java @@ -156,10 +156,20 @@ public abstract class CombatSpell extends MagicSpell { } if (entity.getProperties().getAutocastSpell() == this && (entity instanceof Player || animation == null)) { Player p = entity.asPlayer(); - if (p.getProperties().getAutocastSpell().getSpellId() == 31) { - entity.animate(new Animation(1576)); - } else { - entity.animate(AUTOCAST_ANIMATION); + switch(p.getProperties().getAutocastSpell().getSpellId()) { + case 31: + entity.animate(new Animation(1576, Priority.HIGH)); + break; + case 41: + case 42: + case 43: + entity.animate(new Animation(811, Priority.HIGH)); + break; + case 29: + entity.animate(new Animation(708, Priority.HIGH)); + break; + default: + entity.animate(AUTOCAST_ANIMATION); } } else { if (entity instanceof NPC) { diff --git a/Server/src/main/core/game/node/entity/combat/spell/MagicSpell.java b/Server/src/main/core/game/node/entity/combat/spell/MagicSpell.java index 12059a76c..86b7e1260 100644 --- a/Server/src/main/core/game/node/entity/combat/spell/MagicSpell.java +++ b/Server/src/main/core/game/node/entity/combat/spell/MagicSpell.java @@ -201,6 +201,7 @@ public abstract class MagicSpell implements Plugin { if (!checkLevelRequirement(caster, message)) { return false; } + /* Snowscape custom. Removing this allows guthix staff to autocast claws of guthix. if (caster instanceof Player) { CombatSpell spell = ((Player) caster).getProperties().getAutocastSpell(); if (spell != null) { @@ -212,6 +213,7 @@ public abstract class MagicSpell implements Plugin { } } } + */ if((spellId == 12 || spellId == 30 || spellId == 56) && caster instanceof Player){ if (caster.getAttribute("entangleDelay", 0) > GameWorld.getTicks()) { caster.asPlayer().sendMessage("You have recently cast a binding spell."); @@ -220,12 +222,12 @@ public abstract class MagicSpell implements Plugin { } if (caster instanceof Player) { Player p = (Player) caster; - if(p.getEquipment().get(3) != null && p.getEquipment().get(3).getId() == 14726){ - if(RandomFunction.getRandom(100) < 13){ - p.sendMessage("Your staff negates the rune requirement of the spell."); + //if(p.getEquipment().get(3) != null && p.getEquipment().get(3).getId() == 14726){ + if(this instanceof CombatSpell && RandomFunction.getRandom(100) > 33){ + //p.sendMessage("Your staff negates the rune requirement of the spell."); return true; } - } + //} if (runes == null) { return true; } diff --git a/Server/src/main/core/game/node/entity/combat/spell/SpellType.java b/Server/src/main/core/game/node/entity/combat/spell/SpellType.java index 828a88804..d58dd2887 100644 --- a/Server/src/main/core/game/node/entity/combat/spell/SpellType.java +++ b/Server/src/main/core/game/node/entity/combat/spell/SpellType.java @@ -47,7 +47,11 @@ public enum SpellType { CRUMBLE_UNDEAD(1.2) { @Override public int getImpactAmount(Entity e, Entity victim, int base) { - return 15; // Hits as high as Earth blast + if (((NPC) victim).getTask() != null && ((NPC) victim).getTask().undead) { + return 12 + (e.getSkills().getLevel(Skills.MAGIC) / 10); + } + ((Player) e).sendMessage("Your spell does almost no damage, as your target is not undead."); + return 1; } }, diff --git a/Server/src/main/core/game/node/entity/impl/WalkingQueue.java b/Server/src/main/core/game/node/entity/impl/WalkingQueue.java index fbd9d2e36..f20768b70 100644 --- a/Server/src/main/core/game/node/entity/impl/WalkingQueue.java +++ b/Server/src/main/core/game/node/entity/impl/WalkingQueue.java @@ -193,6 +193,9 @@ public final class WalkingQueue { if (hasTimerActive(player, "hamstrung")) { rate *= 4; } + //Snowscape custom: gain agility exp when running. getLevel returns int so we convert to double for the math + double experience = (Double.valueOf(player.getSkills().getLevel(Skills.AGILITY)) + 10)/50; + player.getSkills().addExperience(Skills.AGILITY, experience); return rate; } diff --git a/Server/src/main/core/game/node/entity/npc/agg/AggressiveHandler.java b/Server/src/main/core/game/node/entity/npc/agg/AggressiveHandler.java index c2a49842d..5ee281bb4 100644 --- a/Server/src/main/core/game/node/entity/npc/agg/AggressiveHandler.java +++ b/Server/src/main/core/game/node/entity/npc/agg/AggressiveHandler.java @@ -9,6 +9,8 @@ import core.game.node.entity.player.info.Rights; import core.game.world.GameWorld; import core.tools.RandomFunction; +import core.game.node.entity.player.link.prayer.PrayerType; + /** * Used to handle entity aggressiveness. * @author Emperor @@ -81,6 +83,9 @@ public final class AggressiveHandler { } Entity target = behavior.getLogicalTarget(entity, behavior.getPossibleTargets(entity, radius)); if (target instanceof Player) { + if (((Player) target).getPrayer().get(PrayerType.PROTECT_FROM_SUMMONING)) { + return false; + } if (target.getAttribute("ignore_aggression", false)) { return false; } diff --git a/Server/src/main/core/game/node/entity/npc/drop/NPCDropTables.java b/Server/src/main/core/game/node/entity/npc/drop/NPCDropTables.java index e4e1cd3b6..2ce42e98c 100644 --- a/Server/src/main/core/game/node/entity/npc/drop/NPCDropTables.java +++ b/Server/src/main/core/game/node/entity/npc/drop/NPCDropTables.java @@ -23,6 +23,11 @@ import core.api.utils.NPCDropTable; import core.game.ge.GrandExchange; import core.game.world.repository.Repository; +import content.global.skill.summoning.familiar.BurdenBeast; +import content.global.skill.summoning.familiar.Forager; +import content.global.skill.summoning.SummoningPouch; +import content.global.skill.summoning.familiar.PackYakNPC; + import java.util.ArrayList; import java.util.List; @@ -99,6 +104,9 @@ public final class NPCDropTables { if (handleBoneCrusher(player, item)) { return; } + if (handleCurrency(player, item)) { + return; + } if (item.hasItemPlugin() && player != null) { if (!item.getPlugin().createDrop(item, player, npc, l)) { return; @@ -106,9 +114,17 @@ public final class NPCDropTables { item = item.getPlugin().getItem(item, npc); } if (!item.getDefinition().isStackable() && item.getAmount() > 1) { + if (hasValidFamiliar(player)) { + for (int i = 0; i < item.getAmount(); i++) { + if (!addItemFamiliar(player, new Item(item.getId()))) { + GroundItemManager.create(new Item(item.getId()), l, player); + } + } + } else { for (int i = 0; i < item.getAmount(); i++) { GroundItemManager.create(new Item(item.getId()), l, player); } + } return; } announceIfRare(player, item); @@ -121,7 +137,11 @@ public final class NPCDropTables { GroundItemManager.create(item, l); } } else { - GroundItem groundItem = GroundItemManager.create(item, l, getLooter(player, npc, item)); + Player looter = getLooter(player, npc, item); + if (hasValidFamiliar(looter) && addItemFamiliar(looter, item)) { + return; + } + GroundItem groundItem = GroundItemManager.create(item, l, looter); if(player instanceof AIPlayer) { AIRepository.addItem(groundItem); } @@ -134,6 +154,37 @@ public final class NPCDropTables { } } + /** Snowlab custom looting + * Check if the player has a valid familiar that can loot. + * @param player The player + * @return true if they have a valid familiar. + */ + private boolean hasValidFamiliar(Player player) { + if (!(player instanceof AIPlayer) && player.getFamiliarManager().hasFamiliar() && player.getFamiliarManager().getFamiliar().isBurdenBeast() && !(player.getFamiliarManager().getFamiliar() instanceof Forager) && !SummoningPouch.get(player.getFamiliarManager().getFamiliar().getPouchId()).abyssal){ + return true; + } else { + return false; + } + } + /** Snowlab custom looting + * Attempt adding item to familiar inventory. + * @param player The player + * @return true if item was successfully added. + */ + private boolean addItemFamiliar(Player player, Item item) { + if ((player.getFamiliarManager().getFamiliar() instanceof PackYakNPC) && ((BurdenBeast) player.getFamiliarManager().getFamiliar()).getContainer().contains(12435, 1) && player.getBank().add(item)) { + ((BurdenBeast) player.getFamiliarManager().getFamiliar()).getContainer().remove(new Item(12435, 1)); + player.sendMessage("Your familiar picked up and banked " + item.getAmount() + " " + item.getName() + "."); + return true; + } + if (((BurdenBeast) player.getFamiliarManager().getFamiliar()).getContainer().add(item)) { + player.sendMessage("Your familiar picked up " + item.getAmount() + " " + item.getName() + "."); + return true; + } else { + return false; + } + } + /** * Gets the looting player. * @param player the player. @@ -206,12 +257,31 @@ public final class NPCDropTables { if (bone == null) { return false; } - if (!player.getGlobalData().isEnableBoneCrusher()) { + if (!player.getInventory().containsItem(new Item(2963, 1)) || !player.getAttribute("bonecrusher:enabled", false)) { return false; } player.getSkills().addExperience(Skills.PRAYER, item.getAmount() * bone.getExperience()); return true; } + + /** + * Snowscape custom: Automatically loot coins and tokkul if wearing a ring of wealth. + * @param player The player + * @param item The item + * @return true if successfully added items to player. + */ + private boolean handleCurrency(Player player, Item item) { + if (item.getId() == 995 || item.getId() == 6529) { + Item ring = player.getEquipment().get(12); + if (ring != null && ring.getId() >= 14638 && ring.getId() <=14646) { + if (player.getInventory().add(item)) { + player.sendMessage("Your Ring collected " + item.getAmount() + " " + item.getName() + "."); + return true; + } + } + } + return false; + } /** * Gets the ratio for stabilizing NPC combat difficulty & drop rates. diff --git a/Server/src/main/core/game/node/entity/player/link/TeleportManager.java b/Server/src/main/core/game/node/entity/player/link/TeleportManager.java index 140ecf405..147337cc5 100644 --- a/Server/src/main/core/game/node/entity/player/link/TeleportManager.java +++ b/Server/src/main/core/game/node/entity/player/link/TeleportManager.java @@ -99,7 +99,7 @@ public class TeleportManager { if (!entity.getZoneMonitor().teleport(teleportType, null)) { return false; } - if (teleportType != -1 && entity.isTeleBlocked()) { + if (teleportType != -1 && type != TeleportType.ANCIENT && entity.isTeleBlocked()) { if (entity.isPlayer()) entity.asPlayer().sendMessage("A magical force has stopped you from teleporting."); return false; diff --git a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java index e8fba525e..5b8b3e8a1 100644 --- a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java +++ b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java @@ -22,33 +22,33 @@ import static core.api.ContentAPIKt.*; * @author jamix77 */ public enum PrayerType { - THICK_SKIN(1, 12, 83, 5, PrayerCategory.BABY_BLUE, Sounds.THICK_SKIN_2690, new SkillBonus(Skills.DEFENCE, 0.05)), - BURST_OF_STRENGTH(4, 12, 84, 7, PrayerCategory.GREEN, Sounds.STRENGTH_BURST_2688, new SkillBonus(Skills.STRENGTH, 0.05)), - CLARITY_OF_THOUGHT(7, 12, 85, 9, PrayerCategory.PINK, Sounds.CLARITY_2664, new SkillBonus(Skills.ATTACK, 0.05)), - SHARP_EYE(8, 12, 862, 11, PrayerCategory.LIME_GREEN, Sounds.SHARP_EYE_2685, new SkillBonus(Skills.RANGE, 0.05)), - MYSTIC_WILL(9, 12, 863, 13, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_WILL_2670, new SkillBonus(Skills.MAGIC, 0.05)), - ROCK_SKIN(10, 6, 86, 15, PrayerCategory.BABY_BLUE, Sounds.ROCK_SKIN_2684, new SkillBonus(Skills.DEFENCE, 0.1)), - SUPERHUMAN_STRENGTH(13, 6, 87, 17, PrayerCategory.GREEN, Sounds.SUPERHUMAN_STRENGTH_2689, new SkillBonus(Skills.STRENGTH, 0.1)), - IMPROVED_REFLEXES(16, 6, 88, 19, PrayerCategory.PINK, Sounds.IMPROVED_REFLEXES_2662, new SkillBonus(Skills.ATTACK, 0.1)), - RAPID_RESTORE(19, 26, 89, 21, PrayerCategory.PURPLE, Sounds.RAPID_RESTORE_2679), - RAPID_HEAL(22, 18, 90, 23, PrayerCategory.PURPLE, Sounds.RAPID_HEAL_2678), - PROTECT_ITEMS(25, 18, 91, 25, PrayerCategory.DARK_GREEN, Sounds.PROTECT_ITEMS_1982), - HAWK_EYE(26, 6, 864, 27, PrayerCategory.LIME_GREEN, Sounds.HAWK_EYE_2666, new SkillBonus(Skills.RANGE, 0.1)), - MYSTIC_LORE(27, 6, 865, 29, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_2668, new SkillBonus(Skills.MAGIC, 0.1)), - STEEL_SKIN(28, 3, 92, 31, PrayerCategory.BABY_BLUE, Sounds.STEEL_SKIN_2687, new SkillBonus(Skills.DEFENCE, 0.15)), - ULTIMATE_STRENGTH(31, 3, 93, 33, PrayerCategory.GREEN, Sounds.ULTIMATE_STRENGTH_2691, new SkillBonus(Skills.STRENGTH, 0.15)), - INCREDIBLE_REFLEXES(34, 3, 94, 35, PrayerCategory.PINK, Sounds.INCREDIBLE_REFLEXES_2667, new SkillBonus(Skills.ATTACK, 0.15)), - PROTECT_FROM_SUMMONING(35, 2, 1168, 53, PrayerCategory.DARK_BROWN, PrayerCategory.MAGENTA, new Audio(4262)), + THICK_SKIN(1, 30, 83, 5, PrayerCategory.BABY_BLUE, Sounds.THICK_SKIN_2690, new SkillBonus(Skills.DEFENCE, 0.05)), + BURST_OF_STRENGTH(4, 60, 84, 7, PrayerCategory.GREEN, Sounds.STRENGTH_BURST_2688, new SkillBonus(Skills.STRENGTH, 0.05)), + CLARITY_OF_THOUGHT(7, 60, 85, 9, PrayerCategory.PINK, Sounds.CLARITY_2664, new SkillBonus(Skills.ATTACK, 0.05)), + SHARP_EYE(8, 30, 862, 11, PrayerCategory.LIME_GREEN, Sounds.SHARP_EYE_2685, new SkillBonus(Skills.RANGE, 0.05)), + MYSTIC_WILL(9, 30, 863, 13, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_WILL_2670, new SkillBonus(Skills.MAGIC, 0.05)), + ROCK_SKIN(10, 15, 86, 15, PrayerCategory.BABY_BLUE, Sounds.ROCK_SKIN_2684, new SkillBonus(Skills.DEFENCE, 0.1)), + SUPERHUMAN_STRENGTH(13, 30, 87, 17, PrayerCategory.GREEN, Sounds.SUPERHUMAN_STRENGTH_2689, new SkillBonus(Skills.STRENGTH, 0.1)), + IMPROVED_REFLEXES(16, 30, 88, 19, PrayerCategory.PINK, Sounds.IMPROVED_REFLEXES_2662, new SkillBonus(Skills.ATTACK, 0.1)), + RAPID_RESTORE(19, 30, 89, 21, PrayerCategory.PURPLE, Sounds.RAPID_RESTORE_2679), + RAPID_HEAL(22, 20, 90, 23, PrayerCategory.PURPLE, Sounds.RAPID_HEAL_2678), + PROTECT_ITEMS(25, 20, 91, 25, PrayerCategory.DARK_GREEN, Sounds.PROTECT_ITEMS_1982), + HAWK_EYE(26, 15, 864, 27, PrayerCategory.LIME_GREEN, Sounds.HAWK_EYE_2666, new SkillBonus(Skills.RANGE, 0.1)), + MYSTIC_LORE(27, 15, 865, 29, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_2668, new SkillBonus(Skills.MAGIC, 0.1)), + STEEL_SKIN(28, 10, 92, 31, PrayerCategory.BABY_BLUE, Sounds.STEEL_SKIN_2687, new SkillBonus(Skills.DEFENCE, 0.15)), + ULTIMATE_STRENGTH(31, 20, 93, 33, PrayerCategory.GREEN, Sounds.ULTIMATE_STRENGTH_2691, new SkillBonus(Skills.STRENGTH, 0.15)), + INCREDIBLE_REFLEXES(34, 20, 94, 35, PrayerCategory.PINK, Sounds.INCREDIBLE_REFLEXES_2667, new SkillBonus(Skills.ATTACK, 0.15)), + PROTECT_FROM_SUMMONING(35, 3, 1168, 53, PrayerCategory.DARK_BROWN, PrayerCategory.MAGENTA, new Audio(4262)), PROTECT_FROM_MAGIC(37, 3, 95, 37, PrayerCategory.LIGHT_BROWN, Sounds.PROTECT_FROM_MAGIC_2675), PROTECT_FROM_MISSILES(40, 3, 96, 39, PrayerCategory.LIGHT_BROWN, Sounds.PROTECT_FROM_MISSILES_2677), - PROTECT_FROM_MELEE(43, 4, 97, 41, PrayerCategory.LIGHT_BROWN, Sounds.PROTECT_FROM_MELEE_2676), - EAGLE_EYE(44, 3, 866, 43, PrayerCategory.LIME_GREEN, Sounds.EAGLE_EYE_2665, new SkillBonus(Skills.RANGE, 0.15)), - MYSTIC_MIGHT(45, 3, 867, 45, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_MIGHT_2669, new SkillBonus(Skills.MAGIC, 0.15)), + PROTECT_FROM_MELEE(43, 3, 97, 41, PrayerCategory.LIGHT_BROWN, Sounds.PROTECT_FROM_MELEE_2676), + EAGLE_EYE(44, 10, 866, 43, PrayerCategory.LIME_GREEN, Sounds.EAGLE_EYE_2665, new SkillBonus(Skills.RANGE, 0.15)), + MYSTIC_MIGHT(45, 10, 867, 45, PrayerCategory.LIME_GREEN, Sounds.MYSTIC_MIGHT_2669, new SkillBonus(Skills.MAGIC, 0.15)), RETRIBUTION(46, 12, 98, 47, PrayerCategory.LIGHT_BROWN, PrayerCategory.MAGENTA, new Audio(2682)), REDEMPTION(49, 6, 99, 49, PrayerCategory.LIGHT_BROWN, PrayerCategory.MAGENTA, new Audio(2680)), SMITE(52, 2, 100, 51, PrayerCategory.LIGHT_BROWN, PrayerCategory.MAGENTA, new Audio(2686)), - CHIVALRY(60, 2, 1052, 55, PrayerCategory.PINK, Sounds.KR_CHIVALRY_3826, 65, new SkillBonus(Skills.DEFENCE, 0.2), new SkillBonus(Skills.STRENGTH, 0.18), new SkillBonus(Skills.ATTACK, 0.15)), - PIETY(70, 2, 1053, 57, PrayerCategory.PINK, Sounds.KR_PIETY_3825, 70, new SkillBonus(Skills.DEFENCE, 0.25), new SkillBonus(Skills.STRENGTH, 0.23), new SkillBonus(Skills.ATTACK, 0.2)); + CHIVALRY(60, 4, 1052, 55, PrayerCategory.PINK, Sounds.KR_CHIVALRY_3826, 65, new SkillBonus(Skills.DEFENCE, 0.2), new SkillBonus(Skills.STRENGTH, 0.18), new SkillBonus(Skills.ATTACK, 0.15), new SkillBonus(Skills.MAGIC, 0.15), new SkillBonus(Skills.RANGE, 0.15)), + PIETY(70, 3, 1053, 57, PrayerCategory.PINK, Sounds.KR_PIETY_3825, 70, new SkillBonus(Skills.DEFENCE, 0.25), new SkillBonus(Skills.STRENGTH, 0.23), new SkillBonus(Skills.ATTACK, 0.2), new SkillBonus(Skills.MAGIC, 0.2), new SkillBonus(Skills.RANGE, 0.2)); /** * Represents the a cache of objects related to prayers in order to decide @@ -63,6 +63,7 @@ public enum PrayerType { /** * The drain rate. + * The drain rate X 2 is the number of seconds (not ticks) that it takes to drain 1 point at 0 prayer bonus */ private final int drain; diff --git a/Server/src/main/core/game/node/entity/skill/Skills.java b/Server/src/main/core/game/node/entity/skill/Skills.java index 9f550245a..fc3ed9191 100644 --- a/Server/src/main/core/game/node/entity/skill/Skills.java +++ b/Server/src/main/core/game/node/entity/skill/Skills.java @@ -290,7 +290,13 @@ public final class Skills { private double getExperienceMod(int slot, double experience, boolean playerMod, boolean multiplyer) { //Keywords for people ctrl + Fing the project //xprate xp rate xp multiplier skilling rate - return experienceMultiplier; + + //Snowscape Custom: experience multiplier starts at 1x and scales to the selected multiplier as level incrceases + double perLevel = (experienceMultiplier-1)/100; + double finalMult = staticLevels[slot]*perLevel+1; + return finalMult; + //return experienceMultiplier; + /*if (!(entity instanceof Player)) { return 1.0; } diff --git a/Server/src/main/core/game/system/timer/impl/AntiMacro.kt b/Server/src/main/core/game/system/timer/impl/AntiMacro.kt index 4f9ba872a..ab3c18394 100644 --- a/Server/src/main/core/game/system/timer/impl/AntiMacro.kt +++ b/Server/src/main/core/game/system/timer/impl/AntiMacro.kt @@ -16,7 +16,7 @@ import core.tools.colorize import org.json.simple.JSONObject class AntiMacro : PersistTimer(0, "antimacro", isAuto = true), Commands { - var paused = false + var paused = true var nextRandom: RandomEvents? = null override fun run(entity: Entity): Boolean { diff --git a/Server/src/main/core/game/world/map/zone/ZoneMonitor.java b/Server/src/main/core/game/world/map/zone/ZoneMonitor.java index 65b4a0322..4be51e122 100644 --- a/Server/src/main/core/game/world/map/zone/ZoneMonitor.java +++ b/Server/src/main/core/game/world/map/zone/ZoneMonitor.java @@ -238,7 +238,7 @@ public final class ZoneMonitor { * @return {@code True} if so. */ public boolean teleport(int type, Node node) { - if (type != -1 && entity.isTeleBlocked() && !canTeleportByJewellery(type, node)) { + if (type != -1 && entity.isTeleBlocked() && !canTeleportByJewellery(type, node)&& !canTeleportByAncient(type)) { if (entity.isPlayer()) { entity.asPlayer().sendMessage("A magical force has stopped you from teleporting."); } @@ -278,6 +278,32 @@ public final class ZoneMonitor { return false; } + /** + * Snowscape custom allowing teleports with Ancient Magicks in >= 1 <= 30 wilderness level + * @return {@code True} if so. + */ + private boolean canTeleportByAncient(int type) { + if (type != 0) { + return false; + } + if (entity.timers.getTimer("teleblock") != null) + return false; + + if (entity.getZoneMonitor().isRestricted(ZoneRestriction.TELEPORT)) { + return false; + } + + if (entity.getLocks().isTeleportLocked()) { + if (entity.isPlayer()) { + Player p = entity.asPlayer(); + if (p.getSpellBookManager().getSpellBook() == 193 && p.getSkullManager().getLevel() >= 1 && p.getSkullManager().getLevel() <= 48) { + return true; + } + } + } + + return false; + } /** * Checks if the death should start for an entity. diff --git a/Server/src/main/core/net/packet/PacketProcessor.kt b/Server/src/main/core/net/packet/PacketProcessor.kt index ca967213c..875d3693f 100644 --- a/Server/src/main/core/net/packet/PacketProcessor.kt +++ b/Server/src/main/core/net/packet/PacketProcessor.kt @@ -307,8 +307,24 @@ object PacketProcessor { pkt.player.interfaceManager.switchWindowMode(pkt.windowMode) } is Packet.TrackingAfkTimeout -> { - if (pkt.player.details.rights != Rights.ADMINISTRATOR) - pkt.player.packetDispatch.sendLogout() + /* After 5 minutes idle, the client sends an afk packet every 10 seconds. + *This code counts the number of afk packets recieved, resetting the count if they are more than 100 ticks apart. + *This allows us to customize the afk logout timer + */ + if (pkt.player.details.rights != Rights.ADMINISTRATOR) { + if (GameWorld.ticks - pkt.player.getAttribute("afk:lasttick", 0) > 100) { + pkt.player.setAttribute("afk:count", 0) + } else { + pkt.player.setAttribute("afk:count", pkt.player.getAttribute("afk:count", 0) + 1) + } + pkt.player.setAttribute("afk:lasttick", GameWorld.ticks) + if (pkt.player.getAttribute("afk:count", 0) == 300) { + pkt.player.sendMessage("You have been idle for 55 minutes and will be logged out soon.") + } + if (pkt.player.getAttribute("afk:count", 0) >= 330) { + pkt.player.packetDispatch.sendLogout() + } + } } is Packet.TrackingCameraPos -> { //TODO Refactor the player monitor to be actually useful and log this diff --git a/Server/worldprops/default.conf b/Server/worldprops/default.conf index 6024160fe..fd25dd94c 100644 --- a/Server/worldprops/default.conf +++ b/Server/worldprops/default.conf @@ -11,18 +11,18 @@ secret_key = "2009scape_development" write_logs = true msip = "127.0.0.1" #preload the map (Increases memory usage by 2GB but makes game ticks smoother) -preload_map = false +preload_map = true #--------Note: If both of the below are false, no database is required to run the server.-------------- #true = login requires password to be correct, passwords are hashed before stored. false = login does not care about the correctness of a password. -use_auth = false #NOTE: THIS MUST BE SET TO TRUE IN PRODUCTION! +use_auth = true #NOTE: THIS MUST BE SET TO TRUE IN PRODUCTION! #true - account data (credits, playtime, etc) is persisted, false - account data is purely temporary #NOTE: this does not affect actual save data, like stats, inventory, etc. -persist_accounts = false #NOTE: THIS MUST BE SET TO TRUE IN PRODUCTION! +persist_accounts = true #NOTE: THIS MUST BE SET TO TRUE IN PRODUCTION! noauth_default_admin = true #NOTE: If we are not using auth, this determines whether or not players are admins by default. #------------------------------------------------------------------------------------------------------ #The limit on how many different accounts a player can log into per day. -daily_accounts_per_ip = 3 -watchdog_enabled = true +daily_accounts_per_ip = 30 +watchdog_enabled = false connectivity_check_url = "https://google.com,https://2009scape.org" connectivity_timeout = 500 @@ -44,21 +44,21 @@ grafana_log_ttl_days = 7 [world] -name = "2009Scape" +name = "SnowScape" #name used for announcements of bots selling items on the GE -name_ge = "2009Scape" -debug = true -dev = true +name_ge = "SnowScape" +debug = false +dev = false start_gui = false -daily_restart = false +daily_restart = true #world number world_id = "1" country_id = "0" members = true #activity as displayed on the world list -activity = "2009Scape Classic." +activity = "SnowScape" pvp = false -default_xp_rate = 5.0 +default_xp_rate = 1.0 allow_slayer_reroll = false #enables a default clan for players to join automatically. Should be an account with the same name as @name, with a clan set up already. enable_default_clan = true @@ -81,14 +81,14 @@ enable_doubling_money_scammers = true wild_pvp_enabled = true jad_practice_enabled = true #minimum HA value for announcements of bots selling on ge -ge_announcement_limit = 500 -enable_castle_wars = false +ge_announcement_limit = 500000 +enable_castle_wars = true personalized_shops = true -bots_influence_ge_price = true +bots_influence_ge_price = false #verbose cutscene logging (for cutscenes in the new system) verbose_cutscene = false #show the rules the first time a player logs in -show_rules = true +show_rules = false #the number of revenants active at a time revenant_population = 30 #enable auto-buy/auto-sell on the GE. @@ -100,7 +100,7 @@ better_dfs = true #new player announcement new_player_announcement = true #enables holiday random events (no effect on normal random events) -holiday_event_randoms = true +holiday_event_randoms = false #force holiday randoms (can only force one at a time) force_halloween_randoms = false force_christmas_randoms = false @@ -108,6 +108,8 @@ force_christmas_randoms = false runecrafting_formula_revision = 581 #enable the enhanced deep wilderness, where the area past the members' fence applies a red skull that boosts brawler/pvp drop rates enhanced_deep_wilderness = true +#enable opening the bank on left-clicking the booth, instead of starting dialogue with the banker +bank_booth_quick_open = true [paths] #path to the data folder, which contains the cache subfolder and such diff --git a/run b/run index e1c4fdc10..ed57b2f4a 100755 --- a/run +++ b/run @@ -10,7 +10,7 @@ REFRESH_BUILD=1 GAMESERVER_ONLY=1 -GS_EXEC="cd $GS_SRC && java -Dnashorn.args=--no-deprecation-warning -jar $BUILD_DIR/server.jar" +GS_EXEC="cd $GS_SRC && java -Xmx7g -Dnashorn.args=--no-deprecation-warning -jar $BUILD_DIR/server.jar" MS_EXEC="cd $MS_SRC && java -Dnashorn.args=--no-deprecation-warning -jar $BUILD_DIR/ms.jar" # 0: parallel