Merge pull request 'Initial build of Snowscape' (#1) from dev into master

Reviewed-on: #1
This commit is contained in:
randy 2024-11-17 15:51:17 -07:00
commit 3f8828457b
61 changed files with 1000 additions and 460 deletions

View file

@ -25,4 +25,6 @@
<ObjectAction mode="add" id="21301" x="2662" y="3162" z="0" direction="e"/>
<ObjectAction mode="add" id="4176" x="2629" y="3661" z="2" type="4" direction="e"/>
<ObjectAction mode="add" id="2489" x="2839" y="3282" z="0" direction="w"/>
</parsing>

View file

@ -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",

View file

@ -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"
},
{

View file

@ -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": "",

View file

@ -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}.

View file

@ -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 {

View file

@ -7,7 +7,7 @@ class CrystalEquipmentRegister : StartupListener {
val shield: Array<Int> = 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<Int> = 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)
}
}

View file

@ -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

View file

@ -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<Item> {
@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<Item> {
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;
}
}
/**

View file

@ -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),

View file

@ -110,6 +110,16 @@ public final class FletchingPulse extends SkillPulse<Item> {
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() + ".";
}

View file

@ -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

View file

@ -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;

View file

@ -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) {

View file

@ -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
*/
}
}
}

View file

@ -25,7 +25,7 @@ public final class HerbTarPulse extends SkillPulse<Item> {
/**
* 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<Item> {
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<Item> {
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.");

View file

@ -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");

View file

@ -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());
}

View file

@ -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;

View file

@ -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();

View file

@ -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

View file

@ -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
}

View file

@ -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)) {

View file

@ -40,6 +40,7 @@ public final class RuneCraftPulse extends SkillPulse<Item> {
* 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<Item> {
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<Item> {
@Override
public boolean reward() {
if (!combination) {
craftTablet();
craft();
} else {
combine();
@ -177,7 +179,7 @@ public final class RuneCraftPulse extends SkillPulse<Item> {
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<Item> {
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<Item> {
}
}
}
*/
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<Item> {
}
}
}
*/
/**
* 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<Item> {
*
* @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<Item> {
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.

View file

@ -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)

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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)),

View file

@ -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

View file

@ -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

View file

@ -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)
}

View file

@ -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.");

View file

@ -177,7 +177,9 @@ public abstract class Familiar extends NPC implements Plugin<Object> {
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<Object> {
@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;

View file

@ -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;

View file

@ -195,8 +195,9 @@ public final class VoidFamiliarNPC implements Plugin<Object> {
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);
}
}

View file

@ -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
}
}

View file

@ -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.
*/

View file

@ -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);

View file

@ -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;
}
/**

View file

@ -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<ShopItem> {
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<ShopItem> {
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
}

View file

@ -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) {

View file

@ -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;
}
}
}

View file

@ -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("<col=ffd700>Your Wealth enchantment coaxes a rare drop from your opponent.</col>")
return true
} else if (ring != null && ring.id in Items.RING_OF_WEALTH_14638..Items.RING_OF_WEALTH4_14646) {
player.sendMessage("<col=ffd700>Your Ring of Wealth coaxes a rare drop from your opponent.</col>")
player.sendMessage("The magic in the ring reminds you of the High Level Alchemy spell for some reason.")
return true
} else {
return false
}
}
/**

View file

@ -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

View file

@ -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;
}

View file

@ -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,<br>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,<br>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,<br>pause awhile to remember @name,<br>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,<br>an enlightened servant of Saradomin,<br>perished in this place."),
ZAM_SYMBOL(NPCs.ZAMORAK_SYMBOL_6586, 50000, 4, true, text = "@name,<br>a most bloodthirsty follower of Zamorak,<br>perished in this place."),
GUTH_SYMBOL(NPCs.GUTHIX_SYMBOL_6589, 50000, 4, true, text = "@name,<br>who walked with the Balance of Guthix,<br>perished in this place."),
BAND_SYMBOL(NPCs.BANDOS_SYMBOL_6592, 50000, 4, true, requiredQuest = "Land of the Goblins", text = "@name,<br>a vicious warrior dedicated to Bandos,<br>perished in this place. "),
ARMA_SYMBOL(NPCs.ARMADYL_SYMBOL_6595, 50000, 4, true, requiredQuest = "Temple of Ikov", text = "@name,<br>a follower of the Law of Armadyl,<br>perished in this place."),
ZARO_SYMBOL(NPCs.MEMORIAL_STONE_6598, 50000, 4, true, requiredQuest = "Desert Treasure", text = "@name,<br>servant of the Unknown Power,<br>perished in this place."),
ANGEL_DEATH(NPCs.MEMORIAL_STONE_6601, 500000, 5, true, text = "Ye frail mortals who gaze upon this sight,<br>forget not the fate of @name, once mighty, now<br>surrendered to the inescapable grasp of destiny.<br><i>Requiescat in pace.</i>");
MEM_PLAQUE(NPCs.GRAVE_MARKER_6565, 0, 5, false, text = "In memory of @name,<br>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,<br>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,<br>pause awhile to remember @name,<br>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,<br>an enlightened servant of Saradomin,<br>perished in this place."),
ZAM_SYMBOL(NPCs.ZAMORAK_SYMBOL_6586, 50000, 45, true, text = "@name,<br>a most bloodthirsty follower of Zamorak,<br>perished in this place."),
GUTH_SYMBOL(NPCs.GUTHIX_SYMBOL_6589, 50000, 45, true, text = "@name,<br>who walked with the Balance of Guthix,<br>perished in this place."),
BAND_SYMBOL(NPCs.BANDOS_SYMBOL_6592, 50000, 45, true, requiredQuest = "Land of the Goblins", text = "@name,<br>a vicious warrior dedicated to Bandos,<br>perished in this place. "),
ARMA_SYMBOL(NPCs.ARMADYL_SYMBOL_6595, 50000, 45, true, requiredQuest = "Temple of Ikov", text = "@name,<br>a follower of the Law of Armadyl,<br>perished in this place."),
ZARO_SYMBOL(NPCs.MEMORIAL_STONE_6598, 50000, 45, true, requiredQuest = "Desert Treasure", text = "@name,<br>servant of the Unknown Power,<br>perished in this place."),
ANGEL_DEATH(NPCs.MEMORIAL_STONE_6601, 500000, 60, true, text = "Ye frail mortals who gaze upon this sight,<br>forget not the fate of @name, once mighty, now<br>surrendered to the inescapable grasp of destiny.<br><i>Requiescat in pace.</i>");
companion object {
val ids = values().fold(ArrayList<Int>()) {list, type ->

View file

@ -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) {

View file

@ -201,6 +201,7 @@ public abstract class MagicSpell implements Plugin<SpellType> {
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<SpellType> {
}
}
}
*/
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<SpellType> {
}
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;
}

View file

@ -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;
}
},

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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.

View file

@ -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;

View file

@ -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;

View file

@ -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;
}

View file

@ -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 {

View file

@ -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.

View file

@ -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("<col=990000>You have been idle for 55 minutes and will be logged out soon.</col>")
}
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

View file

@ -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

2
run
View file

@ -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