diff --git a/Server/data/configs/drop_tables.json b/Server/data/configs/drop_tables.json
index db135d222..c0f25df89 100644
--- a/Server/data/configs/drop_tables.json
+++ b/Server/data/configs/drop_tables.json
@@ -11426,47 +11426,11 @@
"weight": "100.0",
"id": "526",
"maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "1506",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6065",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6067",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6069",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6068",
- "maxAmount": "1"
- },
- {
- "minAmount": "1",
- "weight": "100.0",
- "id": "6070",
- "maxAmount": "1"
}
],
"charm": [],
- "ids": "347,348,357,369,370,371,372,717,718,719,2349,2350,2351,2373,2374,2784,3216",
- "description": "",
+ "ids": "370,357,348,369,347,371",
+ "description": "all combat mourners",
"main": []
},
{
@@ -18161,7 +18125,7 @@
"maxAmount": "1"
}
],
- "ids": "1183,1184,1201,2359,2360,2361,2362,7438,7439,7440,7441",
+ "ids": "1183,1184,1201,2359,2360,2361,2362,2373,7438,7439,7440,7441",
"description": "",
"main": [
{
diff --git a/Server/data/configs/interface_configs.json b/Server/data/configs/interface_configs.json
index 50a5a64ed..95087003a 100644
--- a/Server/data/configs/interface_configs.json
+++ b/Server/data/configs/interface_configs.json
@@ -95,6 +95,30 @@
"walkable": "false",
"tabIndex": "-1"
},
+ {
+ "id": "68",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "69",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "70",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "71",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
{
"id": "74",
"interfaceType": "4",
@@ -365,6 +389,30 @@
"walkable": "false",
"tabIndex": "-1"
},
+ {
+ "id": "245",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "246",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "247",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
+ {
+ "id": "248",
+ "interfaceType": "4",
+ "walkable": "false",
+ "tabIndex": "-1"
+ },
{
"id": "256",
"interfaceType": "8",
diff --git a/Server/data/configs/item_configs.json b/Server/data/configs/item_configs.json
index 83abfeadb..c7da93ae9 100644
--- a/Server/data/configs/item_configs.json
+++ b/Server/data/configs/item_configs.json
@@ -16309,6 +16309,7 @@
"examine": "Maybe I should read this...",
"durability": null,
"name": "A magic scroll",
+ "tradeable": "false",
"archery_ticket_price": "0",
"id": "1505"
},
@@ -16324,7 +16325,7 @@
"equipment_slot": "0"
},
{
- "examine": "Quite a small key (Plague City).",
+ "examine": "Quite a small key.",
"durability": null,
"name": "A small key",
"archery_ticket_price": "0",
@@ -55738,7 +55739,7 @@
"equipment_slot": "4"
},
{
- "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.",
+ "examine": "These are in need of a good tailor.",
"durability": null,
"name": "Mourner trousers",
"weight": "2.25",
@@ -55746,7 +55747,7 @@
"id": "6066"
},
{
- "examine": "Damaged: These are in need of a good tailor.Repaired: A pair of mourner trousers.",
+ "examine": "A pair of mourner trousers.",
"durability": null,
"name": "Mourner trousers",
"weight": "2.25",
diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json
index 9faf44635..5e11828b8 100644
--- a/Server/data/configs/npc_configs.json
+++ b/Server/data/configs/npc_configs.json
@@ -4784,131 +4784,130 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "347",
- "range_level": "1",
- "attack_level": "24"
- },
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "348",
- "range_level": "1",
- "attack_level": "24"
- },
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,513,512",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Man",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "351",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "10",
+ "strength_level": "1",
"id": "352",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "353",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "0",
+ "range_animation": "",
"combat_audio": "511,506,505",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "attack_speed": "4",
+ "respawn_delay": "50",
+ "defence_animation": "404",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "2",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "2",
+ "lifepoints": "13",
+ "strength_level": "1",
"id": "354",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0",
"range_level": "1",
"attack_level": "2"
},
{
"examine": "A child of West Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "magic_level": "",
+ "defence_animation": "",
+ "poison_amount": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Child",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "movement_radius": "",
+ "lifepoints": "",
+ "strength_level": "",
"id": "355",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
+ },
+ {
+ "examine": "A child of West Ardougne.",
+ "melee_animation": "",
+ "range_animation": "",
+ "magic_level": "",
+ "defence_animation": "",
+ "poison_amount": "",
+ "magic_animation": "",
+ "death_animation": "",
+ "name": "Child",
+ "defence_level": "",
+ "safespot": null,
+ "movement_radius": "",
+ "lifepoints": "",
+ "strength_level": "",
+ "id": "356",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A holy man.",
@@ -4951,22 +4950,24 @@
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "1",
"safespot": null,
- "lifepoints": "7",
+ "lifepoints": "13",
"strength_level": "1",
"id": "360",
- "clue_level": "0",
+ "clue_level": "",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "2"
},
{
"examine": "One of Gielinor's many citizens.",
@@ -4974,56 +4975,62 @@
"range_animation": "422",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "10",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "1",
+ "lifepoints": "13",
+ "strength_level": "10",
"id": "361",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "10"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "2",
"safespot": null,
- "lifepoints": "7",
+ "lifepoints": "10",
"strength_level": "1",
"id": "362",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "1"
},
{
"examine": "One of Gielinor's many citizens.",
"melee_animation": "422",
- "range_animation": "422",
+ "range_animation": "",
"combat_audio": "511,506,505",
"attack_speed": "4",
+ "respawn_delay": "50",
"defence_animation": "404",
- "weakness": "9",
- "magic_animation": "422",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Woman",
- "defence_level": "3",
+ "defence_level": "10",
"safespot": null,
- "lifepoints": "7",
- "strength_level": "1",
+ "lifepoints": "23",
+ "strength_level": "10",
"id": "363",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"range_level": "1",
- "attack_level": "3"
+ "attack_level": "10"
},
{
"examine": "King Lathas of East Ardougne.",
@@ -5087,23 +5094,6 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "422",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
- "death_animation": "836",
- "name": "Mourner",
- "defence_level": "24",
- "safespot": null,
- "lifepoints": "34",
- "strength_level": "24",
- "id": "369",
- "range_level": "1",
- "attack_level": "24"
- },
{
"examine": "She's quite a looker!",
"melee_animation": "0",
@@ -8071,32 +8061,43 @@
"attack_level": "1"
},
{
- "slayer_exp": "0",
+ "slayer_exp": "",
"examine": "A local civilian.",
"name": "Edmond",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
"id": "714",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
- "examine": "In charge of people with silly outfits.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
- "name": "Head mourner",
- "defence_level": "1",
+ "slayer_exp": "",
+ "examine": "A local civilian.",
+ "name": "Edmond",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
- "id": "716",
- "range_level": "1",
- "attack_level": "1"
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
+ "id": "3213",
+ "range_level": "",
+ "attack_level": ""
+ },
+ {
+ "slayer_exp": "",
+ "examine": "A local civilian.",
+ "name": "Edmond",
+ "defence_level": "",
+ "safespot": null,
+ "lifepoints": "",
+ "combat_audio": "",
+ "strength_level": "",
+ "id": "3214",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A member of the Ardougne Royal Army.",
@@ -8142,39 +8143,42 @@
},
{
"examine": "One of Gielinor's many citizens.",
- "melee_animation": "0",
- "range_animation": "0",
- "combat_audio": "511,513,512",
+ "melee_animation": "",
+ "range_animation": "",
+ "combat_audio": "",
+ "protect_style": "",
+ "respawn_delay": "",
"defence_animation": "0",
- "magic_animation": "0",
+ "slayer_exp": "",
+ "magic_animation": "",
"death_animation": "0",
"name": "Man",
"defence_level": "1",
- "safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "safespot": "",
+ "lifepoints": "",
+ "strength_level": "",
"id": "728",
- "clue_level": "0",
- "range_level": "1",
- "attack_level": "1"
+ "clue_level": "",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "One of Gielinor's many citizens.",
- "melee_animation": "0",
- "range_animation": "0",
- "combat_audio": "511,513,512",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "combat_audio": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Man",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "729",
- "clue_level": "0",
- "range_level": "1",
- "attack_level": "1"
+ "clue_level": "",
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "One of Gielinor's many citizens.",
@@ -8498,51 +8502,51 @@
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "785",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "786",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A citizen of Ardougne.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Civilian",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "787",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A gnome who's supposed to be cleaning up a mess.",
@@ -24275,36 +24279,37 @@
},
{
"examine": "A Mourner showing his true identity.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Head mourner",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2372",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "A mourner, or plague healer.",
"melee_animation": "428",
- "range_animation": "0",
- "defence_animation": "0",
- "weakness": "9",
- "magic_animation": "0",
+ "range_animation": "",
+ "attack_speed": "4",
+ "defence_animation": "",
+ "weakness": "",
+ "magic_animation": "",
"death_animation": "836",
"name": "Mourner",
- "defence_level": "61",
+ "defence_level": "80",
"safespot": null,
"lifepoints": "87",
"strength_level": "61",
"id": "2373",
"aggressive": "true",
- "range_level": "1",
+ "range_level": "",
"attack_level": "61"
},
{
@@ -27188,51 +27193,51 @@
},
{
"examine": "Digging.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2785",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Digging.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2786",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Confused.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
+ "melee_animation": "",
+ "range_animation": "",
+ "defence_animation": "",
+ "magic_animation": "",
+ "death_animation": "",
"name": "Slave",
- "defence_level": "1",
+ "defence_level": "",
"safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
+ "lifepoints": "",
+ "strength_level": "",
"id": "2787",
- "range_level": "1",
- "attack_level": "1"
+ "range_level": "",
+ "attack_level": ""
},
{
"examine": "Drill Sergeant from heck!",
@@ -30714,22 +30719,6 @@
"range_level": "1",
"attack_level": "1"
},
- {
- "examine": "A mourner, or plague healer.",
- "melee_animation": "0",
- "range_animation": "0",
- "defence_animation": "0",
- "magic_animation": "0",
- "death_animation": "0",
- "name": "Mourner",
- "defence_level": "1",
- "safespot": null,
- "lifepoints": "10",
- "strength_level": "1",
- "id": "3216",
- "range_level": "1",
- "attack_level": "1"
- },
{
"examine": "Loves mining.",
"melee_animation": "99",
@@ -87739,5 +87728,143 @@
"examine": "A nature impling. Right on, maaan.",
"name": "Nature Impling",
"id": "1034"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner (boss)",
+ "defence_level": "10",
+ "lifepoints": "19",
+ "melee_animation": "428",
+ "attack_speed": "4",
+ "strength_level": "10",
+ "id": "370",
+ "bonuses": "0,0,0,0,0,3,2,4,0,0,0,0,0,0,0",
+ "attack_level": "10"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "717"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "718"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "719"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "3216"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "14",
+ "melee_animation": "428",
+ "lifepoints": "24",
+ "attack_speed": "4",
+ "strength_level": "14",
+ "id": "357",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "14"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "19",
+ "melee_animation": "422",
+ "lifepoints": "30",
+ "attack_speed": "4",
+ "strength_level": "19",
+ "id": "348",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "19"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "19",
+ "melee_animation": "422",
+ "lifepoints": "30",
+ "attack_speed": "4",
+ "strength_level": "19",
+ "id": "369",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "19"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "8",
+ "lifepoints": "18",
+ "melee_animation": "428",
+ "strength_level": "8",
+ "attack_speed": "4",
+ "id": "347",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "8"
+ },
+ {
+ "examine": "A Mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "2374"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "372"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "death_animation": "836",
+ "name": "Mourner",
+ "defence_level": "8",
+ "lifepoints": "20",
+ "melee_animation": "422",
+ "attack_speed": "4",
+ "strength_level": "8",
+ "id": "371",
+ "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+ "attack_level": "8"
+ },
+ {
+ "examine": "In charge of people with silly outfits.",
+ "name": "Head Mourner",
+ "id": "716"
+ },
+ {
+ "examine": "A mourner, or plague healer.",
+ "name": "Mourner",
+ "id": "2784"
+ },
+ {
+ "examine": "She looks concerned.",
+ "name": "Elena",
+ "id": "3215"
+ },
+ {
+ "examine": "She looks concerned.",
+ "name": "Elena",
+ "id": "715"
+ },
+ {
+ "examine": "She doesn't look too happy.",
+ "name": "Elena",
+ "id": "3209"
+ },
+ {
+ "name": "Elena",
+ "id": "335",
+ "examine": "She doesn't look too happy."
}
]
\ No newline at end of file
diff --git a/Server/data/configs/npc_spawns.json b/Server/data/configs/npc_spawns.json
index 6a550f27b..e2534a0b6 100644
--- a/Server/data/configs/npc_spawns.json
+++ b/Server/data/configs/npc_spawns.json
@@ -213,7 +213,7 @@
},
{
"npc_id": "64",
- "loc_data": "{2684,9798,0,1,2}-{2959,3917,0,1,0}-{2960,3925,0,1,0}-{2961,3920,0,1,0}-{2962,3915,0,1,0}-{2962,3933,0,1,0}-{2963,3923,0,1,0}-{2963,3929,0,1,0}-{2965,3927,0,1,0}-{2965,3931,0,1,0}-{2691,9814,0,1,5}-{2694,9819,0,1,6}-{2696,9831,0,1,3}-{2702,9837,0,1,6}-{2709,9844,0,1,3}-{2720,9847,0,1,4}-{2724,9843,0,1,6}-{2733,9846,0,1,4}-{2740,9841,0,1,3}-{2745,9836,0,1,4}-{2745,9828,0,1,5}-{2747,9826,0,1,1}-{2819,9950,0,1,0}-{2824,9934,0,1,0}-{2827,9925,0,1,0}-{2828,9956,0,1,0}-{2857,9969,0,1,0}-{2872,9972,0,1,0}-{2869,9912,0,1,0}-{2885,9962,0,1,0}-{2887,9936,0,1,0}-"
+ "loc_data": "{2869,9912,0,1,0}-{2819,9950,0,1,0}-{2824,9934,0,1,0}-{2827,9925,0,1,0}-{2828,9956,0,1,0}-{2857,9969,0,1,0}-{2872,9972,0,1,0}-{2684,9798,0,1,2}-{2885,9962,0,1,0}-{2887,9936,0,1,0}-{2959,3917,0,1,0}-{2960,3925,0,1,0}-{2961,3920,0,1,0}-{2962,3915,0,1,0}-{2962,3933,0,1,0}-{2963,3923,0,1,0}-{2963,3929,0,1,0}-{2965,3927,0,1,0}-{2965,3931,0,1,0}-{2691,9814,0,1,5}-{2694,9819,0,1,6}-{2696,9831,0,1,3}-{2702,9837,0,1,6}-{2709,9844,0,1,3}-{2720,9847,0,1,4}-{2724,9843,0,1,6}-{2733,9846,0,1,4}-{2740,9841,0,1,3}-{2745,9836,0,1,4}-{2745,9828,0,1,5}-{2747,9826,0,1,1}-"
},
{
"npc_id": "66",
@@ -369,7 +369,7 @@
},
{
"npc_id": "111",
- "loc_data": "{2811,3506,0,1,0}-{2883,9932,0,1,0}-{2883,9965,0,1,0}-{2920,3800,0,1,3}-{2952,3902,0,1,6}-{2953,3889,0,1,6}-{2947,3921,0,1,6}-{3043,9581,0,1,1}-{3055,9577,0,1,6}-{3061,9576,0,1,4}-{3055,9571,0,1,7}-{3052,9566,0,1,6}-"
+ "loc_data": "{2920,3800,0,1,3}-{2883,9932,0,1,0}-{2883,9965,0,1,0}-{2952,3902,0,1,6}-{2953,3889,0,1,6}-{2947,3921,0,1,6}-{2811,3506,0,1,0}-{3043,9581,0,1,1}-{3055,9577,0,1,6}-{3061,9576,0,1,4}-{3055,9571,0,1,7}-{3052,9566,0,1,6}-"
},
{
"npc_id": "112",
@@ -417,7 +417,7 @@
},
{
"npc_id": "125",
- "loc_data": "{2845,3517,0,1,4}-{2848,3515,0,1,4}-{2958,3867,0,1,3}-{2956,3857,0,1,6}-{2952,3862,0,1,3}-{2949,3858,0,1,4}-{2955,3875,0,1,7}-{2954,3874,0,1,5}-{2962,3876,0,1,1}-{2961,3877,0,1,3}-{2947,3878,0,1,6}-{2959,3884,0,1,4}-{2956,3885,0,1,3}-{2956,3886,0,1,3}-{2948,3886,0,1,1}-{2947,3934,0,1,0}-{2948,3917,0,1,0}-{2949,3926,0,1,0}-{2952,3913,0,1,0}-{2952,3936,0,1,0}-{2954,3921,0,1,0}-{2956,3930,0,1,0}-{2964,3944,0,1,0}-{2970,3947,0,1,0}-{2971,3938,0,1,0}-{2977,3953,0,1,0}-{2978,3942,0,1,0}-{2984,3933,0,1,0}-{3227,5443,0,1,5}-{3220,5448,0,1,5}-{3208,5443,0,1,6}-{3207,5448,0,1,4}-{3050,9570,0,1,3}-{3043,9579,0,1,2}-{3056,9585,0,1,0}-{3058,9575,0,1,1}-{3052,9582,0,1,0}-{3049,9577,0,1,4}-{3042,9586,0,1,6}-{3052,9588,0,1,1}-{3049,9590,0,1,5}-{3060,9578,0,1,3}-{3054,9566,0,1,7}-{2834,9940,0,1,0}-{2836,9953,0,1,0}-{2844,9944,0,1,0}-{2822,9901,0,1,0}-{2836,9905,0,1,0}-{2838,9917,0,1,0}-{2847,9919,0,1,0}-{2848,9912,0,1,0}-"
+ "loc_data": "{2845,3517,0,1,4}-{2848,3515,0,1,4}-{2822,9901,0,1,0}-{2836,9905,0,1,0}-{2838,9917,0,1,0}-{2847,9919,0,1,0}-{2848,9912,0,1,0}-{2834,9940,0,1,0}-{2836,9953,0,1,0}-{2844,9944,0,1,0}-{2958,3867,0,1,3}-{2956,3857,0,1,6}-{2952,3862,0,1,3}-{2949,3858,0,1,4}-{2955,3875,0,1,7}-{2954,3874,0,1,5}-{2962,3876,0,1,1}-{2961,3877,0,1,3}-{2947,3878,0,1,6}-{2959,3884,0,1,4}-{2956,3885,0,1,3}-{2956,3886,0,1,3}-{2948,3886,0,1,1}-{2947,3934,0,1,0}-{2948,3917,0,1,0}-{2949,3926,0,1,0}-{2952,3913,0,1,0}-{2952,3936,0,1,0}-{2954,3921,0,1,0}-{2956,3930,0,1,0}-{2964,3944,0,1,0}-{2970,3947,0,1,0}-{2971,3938,0,1,0}-{2977,3953,0,1,0}-{2978,3942,0,1,0}-{2984,3933,0,1,0}-{3227,5443,0,1,5}-{3220,5448,0,1,5}-{3208,5443,0,1,6}-{3207,5448,0,1,4}-{3050,9570,0,1,3}-{3043,9579,0,1,2}-{3056,9585,0,1,0}-{3058,9575,0,1,1}-{3052,9582,0,1,0}-{3049,9577,0,1,4}-{3042,9586,0,1,6}-{3052,9588,0,1,1}-{3049,9590,0,1,5}-{3060,9578,0,1,3}-{3054,9566,0,1,7}-"
},
{
"npc_id": "126",
@@ -991,6 +991,10 @@
"npc_id": "334",
"loc_data": "{2612,3411,0,0,0}-{2165,3268,0,0,4}-{2162,3274,0,0,4}-{2627,3415,0,0,0}-{2639,3698,0,0,4}-{2642,3698,0,0,4}-{2699,2702,0,0,4}-{2694,2706,0,0,4}-{2700,2702,0,0,4}-{2707,2698,0,0,4}-{2700,2702,0,0,0}-{2700,2702,0,0,0}-{2700,2702,0,0,0}-{2707,2698,0,0,0}-{2707,2698,0,0,0}-{2707,2698,0,0,0}-"
},
+ {
+ "npc_id": "335",
+ "loc_data": "{2592,3336,0,1,0}-"
+ },
{
"npc_id": "336",
"loc_data": "{2928,3218,0,1,4}-"
@@ -1025,11 +1029,11 @@
},
{
"npc_id": "347",
- "loc_data": "{2523,3292,0,1,0}-{2536,3294,0,1,0}-{2538,3321,0,1,0}-"
+ "loc_data": "{2524,3292,0,1,3}-{2536,3294,0,1,3}-{2538,3321,0,1,3}-"
},
{
"npc_id": "348",
- "loc_data": "{2501,3315,0,1,0}-{2513,3325,0,1,0}-{2526,3279,0,1,0}-{2528,3297,0,1,0}-{2535,3288,0,1,0}-{2548,3287,0,1,0}-"
+ "loc_data": "{2501,3315,0,1,3}-{2513,3325,0,1,3}-{2526,3279,0,1,3}-{2528,3297,0,1,3}-{2535,3288,0,1,3}-{2548,3287,0,1,3}-"
},
{
"npc_id": "349",
@@ -1041,31 +1045,31 @@
},
{
"npc_id": "351",
- "loc_data": "{2507,3325,0,1,4}-"
+ "loc_data": "{2465,3307,0,1,0}-{2482,3293,0,1,0}-{2509,3325,0,1,0}-"
},
{
"npc_id": "352",
- "loc_data": "{2511,3322,0,1,2}-{2540,3279,0,1,6}-"
+ "loc_data": "{2453,3307,0,1,0}-{2480,3300,0,1,0}-{2511,3322,0,1,0}-{2540,3279,0,1,0}-"
},
{
"npc_id": "353",
- "loc_data": "{2504,3326,0,1,1}-{2509,3314,0,1,3}-{2545,3278,0,1,3}-"
+ "loc_data": "{2473,3288,0,1,0}-{2504,3326,0,1,0}-{2509,3314,0,1,0}-{2546,3277,0,1,0}-"
},
{
"npc_id": "354",
- "loc_data": "{2510,3318,0,1,6}-{2524,3271,0,1,3}-"
+ "loc_data": "{2470,3290,0,1,0}-{2472,3296,0,1,0}-{2483,3318,0,1,0}-{2483,3323,0,1,0}-{2490,3293,0,1,0}-{2510,3318,0,1,0}-{2524,3271,0,1,0}-"
},
{
"npc_id": "355",
- "loc_data": "{2504,3318,0,1,0}-"
+ "loc_data": "{2464,3302,0,1,0}-{2466,3300,0,1,0}-{2466,3307,0,1,0}-{2467,3306,0,1,0}-{2468,3315,0,1,0}-{2469,3319,0,1,0}-{2471,3323,0,1,0}-{2473,3305,0,1,0}-{2474,3296,0,1,0}-{2476,3307,0,1,0}-{2478,3323,0,1,0}-{2480,3296,0,1,0}-{2481,3313,0,1,0}-{2485,3312,0,1,0}-{2504,3318,0,1,0}-{2547,3277,0,1,0}-"
},
{
"npc_id": "356",
- "loc_data": "{2523,3307,0,1,0}-"
+ "loc_data": "{2462,3306,0,1,0}-{2465,3305,0,1,0}-{2469,3295,0,1,0}-{2477,3320,0,1,0}-{2482,3311,0,1,0}-{2518,3275,0,1,0}-{2523,3307,0,1,0}-"
},
{
"npc_id": "357",
- "loc_data": "{2518,3309,0,1,0}-{2526,3303,0,1,0}-{2543,3309,0,1,0}-{2550,3319,0,1,0}-{2552,3319,0,1,0}-"
+ "loc_data": "{2518,3309,0,1,3}-{2526,3303,0,1,3}-{2543,3309,0,1,3}-{2552,3320,0,1,3}-"
},
{
"npc_id": "358",
@@ -1073,19 +1077,19 @@
},
{
"npc_id": "360",
- "loc_data": "{2550,3272,0,1,4}-"
+ "loc_data": "{2472,3307,0,1,0}-{2492,3314,0,1,0}-{2553,3275,0,1,0}-"
},
{
"npc_id": "361",
- "loc_data": "{2519,3277,0,1,6}-"
+ "loc_data": "{2463,3317,0,1,0}-{2482,3296,0,1,0}-{2485,3315,0,1,0}-{2519,3277,0,1,0}-"
},
{
"npc_id": "362",
- "loc_data": "{2537,3324,0,1,6}-"
+ "loc_data": "{2482,3286,0,1,0}-{2489,3295,0,1,0}-{2537,3324,0,1,0}-"
},
{
"npc_id": "363",
- "loc_data": "{2513,3315,0,1,4}-"
+ "loc_data": "{2468,3290,0,1,0}-{2475,3325,0,1,0}-{2479,3312,0,1,0}-{2513,3315,0,1,0}-"
},
{
"npc_id": "364",
@@ -1105,19 +1109,19 @@
},
{
"npc_id": "369",
- "loc_data": "{2542,3326,0,1,0}-{2545,3324,0,1,0}-{2545,3327,0,1,0}-{2552,3326,0,1,0}-{2553,3322,0,1,0}-{2553,3324,0,1,0}-"
+ "loc_data": "{2548,3324,0,1,3}-{2550,3326,0,1,3}-{2553,3325,0,1,3}-"
},
{
"npc_id": "370",
- "loc_data": "{2551,3324,1,1,0}-{2551,3327,1,1,0}-"
+ "loc_data": "{2549,3325,1,1,0}-{2550,3327,1,1,0}-"
},
{
"npc_id": "371",
- "loc_data": "{2547,3326,0,1,0}-{2549,3322,0,1,0}-{2550,3326,0,1,0}-{2552,3323,0,1,0}-"
+ "loc_data": "{2545,3326,0,1,3}-{2551,3322,0,1,3}-{2555,3324,0,1,3}-"
},
{
"npc_id": "372",
- "loc_data": "{2561,3303,0,1,6}-{2561,3305,0,1,4}-{2559,3303,0,1,6}-{2559,3305,0,1,1}-"
+ "loc_data": "{2561,3305,0,1,2}-{2561,3303,0,1,7}-{2559,3304,0,1,3}-"
},
{
"npc_id": "373",
@@ -2104,20 +2108,24 @@
"loc_data": "{2526,3319,0,0,6}-"
},
{
- "npc_id": "714",
- "loc_data": "{2569,3333,0,1,0}-{2517,9755,0,1,0}-"
+ "npc_id": "715",
+ "loc_data": "{2541,9672,0,1,0}-"
},
{
"npc_id": "716",
- "loc_data": "{2540,3286,0,0,1}-"
+ "loc_data": "{2542,3286,0,1,3}-"
},
{
"npc_id": "717",
- "loc_data": "{2513,3294,0,1,0}-{2518,3320,0,1,0}-{2539,3273,0,0,1}-{2535,3296,0,1,0}-"
+ "loc_data": "{2513,3294,0,1,0}-{2518,3320,0,1,0}-{2530,3274,0,1,0}-{2535,3296,0,1,0}-"
+ },
+ {
+ "npc_id": "718",
+ "loc_data": "{2582,3329,0,1,2}-"
},
{
"npc_id": "719",
- "loc_data": "{2560,3288,0,0,0}-{2026,4619,0,1,6}-{2026,4615,0,0,6}-{2020,4614,0,1,1}-{2021,4614,0,1,6}-{2008,4612,0,1,3}-{2002,4613,0,1,4}-"
+ "loc_data": "{2560,3288,0,1,2}-"
},
{
"npc_id": "720",
@@ -2145,11 +2153,11 @@
},
{
"npc_id": "728",
- "loc_data": "{2540,3308,0,1,6}-"
+ "loc_data": "{2540,3308,0,1,0}-"
},
{
"npc_id": "729",
- "loc_data": "{2536,3308,0,1,4}-"
+ "loc_data": "{2536,3308,0,1,0}-"
},
{
"npc_id": "731",
@@ -2273,15 +2281,15 @@
},
{
"npc_id": "785",
- "loc_data": "{2470,3312,0,1,0}-{2479,3315,0,1,0}-"
+ "loc_data": "{2468,3304,0,1,0}-{2476,3317,0,1,0}-{2478,3291,0,1,0}-{2492,3312,0,1,0}-"
},
{
"npc_id": "786",
- "loc_data": "{2482,3313,0,1,0}-{2477,3311,0,1,0}-"
+ "loc_data": "{2469,3309,0,1,0}-{2475,3298,0,1,0}-{2487,3308,0,1,0}-{2490,3289,0,1,0}-"
},
{
"npc_id": "787",
- "loc_data": "{2486,3315,0,1,0}-{2479,3313,0,1,0}-"
+ "loc_data": "{2476,3313,0,1,0}-{2481,3289,0,1,0}-{2490,3313,0,1,0}-{2491,3300,0,1,0}-"
},
{
"npc_id": "788",
@@ -2707,6 +2715,10 @@
"npc_id": "970",
"loc_data": "{3081,3247,0,0,1}-"
},
+ {
+ "npc_id": "971",
+ "loc_data": "{2464,3287,0,1,0}-"
+ },
{
"npc_id": "1005",
"loc_data": "{3057,3905,0,1,3}-"
@@ -5609,11 +5621,15 @@
},
{
"npc_id": "2372",
- "loc_data": "{2044,4632,0,1,3}-"
+ "loc_data": "{2044,4628,0,1,0}-"
+ },
+ {
+ "npc_id": "2373",
+ "loc_data": "{2037,4636,0,1,0}-{2038,4644,0,1,0}-{2041,4638,0,1,0}-{2044,4642,0,1,0}-"
},
{
"npc_id": "2374",
- "loc_data": "{2041,4632,0,1,3}-{2037,4630,0,1,3}-{2041,4644,0,1,4}-"
+ "loc_data": "{2036,4633,0,0,6}-"
},
{
"npc_id": "2381",
@@ -6209,7 +6225,23 @@
},
{
"npc_id": "2783",
- "loc_data": "{1995,4660,0,1,7}-{1989,4660,0,1,0}-{1989,4664,0,1,7}-{1995,4660,0,1,2}-{1997,4664,0,1,3}-{1989,4658,0,1,0}-{2001,4646,0,1,4}-{2000,4645,0,1,3}-{1997,4644,0,1,1}-{2006,4639,0,1,6}-{1999,4636,0,1,3}-"
+ "loc_data": "{1995,4660,0,1,7}-{1989,4660,0,1,0}-{1989,4664,0,1,7}-{1997,4664,0,1,3}-{1989,4658,0,1,0}-{2001,4646,0,1,4}-{2000,4645,0,1,3}-{1997,4644,0,1,1}-{1999,4636,0,1,3}-{2022,4665,0,1,0}-{2024,4662,0,1,0}-{2020,4660,0,1,0}-{2023,4656,0,1,0}-{2029,4660,0,1,0}-{2031,4665,0,1,0}-{2034,4661,0,1,0}-{2032,4658,0,1,0}-{1991,4653,0,1,0}-{1995,4651,0,1,0}-"
+ },
+ {
+ "npc_id": "2784",
+ "loc_data": "{2022,4616,0,1,5}-{2024,4620,0,1,5}-"
+ },
+ {
+ "npc_id": "2785",
+ "loc_data": "{2000,4613,0,0,0}-{2000,4611,0,0,5}-"
+ },
+ {
+ "npc_id": "2786",
+ "loc_data": "{2008,4613,0,1,0}-"
+ },
+ {
+ "npc_id": "2787",
+ "loc_data": "{2023,4612,0,1,0}-"
},
{
"npc_id": "2790",
@@ -6692,12 +6724,16 @@
"loc_data": "{3139,3448,0,1,3}-"
},
{
- "npc_id": "3215",
- "loc_data": "{2541,9672,0,1,3}-"
+ "npc_id": "3213",
+ "loc_data": "{2568,3334,0,1,0}-"
+ },
+ {
+ "npc_id": "3214",
+ "loc_data": "{2517,9755,0,1,0}-"
},
{
"npc_id": "3216",
- "loc_data": "{2581,3332,0,1,3}-{2534,3273,0,0,1}-"
+ "loc_data": "{2534,3273,0,0,1}-{2539,3273,0,0,1}-"
},
{
"npc_id": "3217",
@@ -8141,7 +8177,7 @@
},
{
"npc_id": "4686",
- "loc_data": "{2804,3507,0,1,0}-{2880,9927,0,1,0}-{2887,9955,0,1,0}-{2891,9941,0,1,0}-{2824,3510,0,1,5}-{2954,3894,0,1,4}-{2950,3932,0,1,0}-{2955,3945,0,1,0}-{3213,5548,0,1,4}-"
+ "loc_data": "{2824,3510,0,1,5}-{2880,9927,0,1,0}-{2887,9955,0,1,0}-{2891,9941,0,1,0}-{2954,3894,0,1,4}-{2950,3932,0,1,0}-{2955,3945,0,1,0}-{3213,5548,0,1,4}-{2804,3507,0,1,0}-"
},
{
"npc_id": "4687",
@@ -10663,14 +10699,6 @@
"npc_id": "6283",
"loc_data": "{2877,5326,2,1,2}-{2857,5328,2,1,3}-{2861,5315,2,1,7}-"
},
- {
- "npc_id": "6339",
- "loc_data": "{2547,3277,0,0,0}-"
- },
- {
- "npc_id": "6345",
- "loc_data": "{2518,3275,0,1,0}-"
- },
{
"npc_id": "6346",
"loc_data": "{2799,3186,0,1,7}-{2797,3169,0,0,0}-{2793,3161,0,1,3}-"
diff --git a/Server/src/main/content/global/dialogue/ManDialoguePlugin.java b/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
index 36785504e..aeff88be1 100644
--- a/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
+++ b/Server/src/main/content/global/dialogue/ManDialoguePlugin.java
@@ -22,7 +22,7 @@ public class ManDialoguePlugin extends DialoguePlugin {
/**
* The NPC ids that use this dialogue plugin.
*/
- private static final int[] NPC_IDS = {1, 2, 3, 4, 5, 6, 16, 24, 25, 170, 351, 352, 353, 354, 359, 360, 361, 362, 363, 726, 727, 728, 729, 730, 1086, 2675, 2776, 3224, 3225, 3227, 5923, 5924,};
+ private static final int[] NPC_IDS = {1, 2, 3, 4, 5, 6, 16, 24, 25, 170, 1086, 2675, 2776, 3224, 3225, 3227, 5923, 5924,};
public ManDialoguePlugin() {
}
diff --git a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
index 6b0b7c0d3..9cc72f6c2 100644
--- a/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
+++ b/Server/src/main/content/global/handlers/item/TeleTabsListener.kt
@@ -1,22 +1,19 @@
package content.global.handlers.item
-import core.api.inInventory
-import core.api.removeItem
-import core.api.teleport
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.Companion.ARDOUGNE_TELE_ATTRIBUTE
+import core.api.*
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager
import core.game.node.item.Item
import core.game.world.map.Location
-import core.api.hasRequirement;
-import content.data.Quests
class TeleTabsListener : InteractionListener {
enum class TeleTabs(val item: Int, val location: Location, val exp: Double, val requirementCheck: (Player) -> Boolean = { true }) {
ADDOUGNE_TELEPORT(8011, Location.create(2662, 3307, 0), 61.0, {
- player -> hasRequirement(player, Quests.PLAGUE_CITY);
+ player -> getAttribute(player, ARDOUGNE_TELE_ATTRIBUTE, false)
}),
AIR_ALTAR_TELEPORT(13599, Location.create(2978, 3296, 0), 0.0),
ASTRAL_ALTAR_TELEPORT(13611, Location.create(2156, 3862, 0), 0.0),
@@ -52,9 +49,17 @@ class TeleTabsListener : InteractionListener {
val tabEnum = TeleTabs.forId(tab)
if (tabEnum != null && inInventory(player,tab)) {
val tabloc = tabEnum.location
- if (inInventory(player, tab) && tabEnum.requirementCheck(player)) {
- if (teleport(player, tabloc, TeleportManager.TeleportType.TELETABS)) {
- removeItem(player, Item(node.id, 1))
+ if (inInventory(player, tab)) {
+ if (tabEnum.requirementCheck(player)){
+ if (teleport(player, tabloc, TeleportManager.TeleportType.TELETABS)) {
+ removeItem(player, Item(node.id, 1))
+ }
+ }
+ else {
+ when (tabEnum){
+ TeleTabs.ADDOUGNE_TELEPORT -> sendMessage(player, "You need to complete Plague City to use this tablet.")
+ else -> sendMessage(player, "You do not have the requirements to use this tablet.")
+ }
}
}
}
diff --git a/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt b/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
index eee377bf4..e69de29bb 100644
--- a/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
+++ b/Server/src/main/content/global/handlers/item/withnpc/CatOnArdougneCivilian.kt
@@ -1,56 +0,0 @@
-package content.global.handlers.item.withnpc
-
-import core.api.Container
-import core.api.*
-import org.rs09.consts.Items
-import org.rs09.consts.NPCs
-import core.game.interaction.InteractionListener
-import core.game.interaction.IntType
-
-class CatOnArdougneCivilian: InteractionListener {
-
- private val civilians = intArrayOf(
- NPCs.CIVILIAN_785,
- NPCs.CIVILIAN_786,
- NPCs.CIVILIAN_787
- )
-
- private val cats = intArrayOf(
- Items.PET_CAT_1561,
- Items.PET_CAT_1562,
- Items.PET_CAT_1563,
- Items.PET_CAT_1564,
- Items.PET_CAT_1565,
- Items.PET_CAT_1566,
- Items.OVERGROWN_CAT_1567,
- Items.OVERGROWN_CAT_1568,
- Items.OVERGROWN_CAT_1569,
- Items.OVERGROWN_CAT_1570,
- Items.OVERGROWN_CAT_1571,
- Items.OVERGROWN_CAT_1572,
- Items.LAZY_CAT_6551,
- Items.LAZY_CAT_6552,
- Items.LAZY_CAT_6553,
- Items.LAZY_CAT_6554,
- Items.WILY_CAT_6555,
- Items.WILY_CAT_6556,
- Items.WILY_CAT_6557,
- Items.WILY_CAT_6558,
- Items.WILY_CAT_6559,
- Items.WILY_CAT_6560,
- Items.HELL_CAT_7582,
- Items.OVERGROWN_HELLCAT_7581,
- Items.LAZY_HELL_CAT_7584,
- Items.WILY_HELLCAT_7585,
- )
-
- override fun defineListeners() {
- onUseWith(IntType.NPC,cats,*civilians){ player, used, _ ->
- sendItemDialogue(player,Items.DEATH_RUNE_560,"You hand over the cat.
You are given 100 Death Runes.")
- player.familiarManager.removeDetails(used.id)
- removeItem(player,used,Container.INVENTORY)
- addItem(player,Items.DEATH_RUNE_560,100)
- return@onUseWith true
- }
- }
-}
\ No newline at end of file
diff --git a/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java b/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
index 3c658fec2..ad8c68db8 100644
--- a/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
+++ b/Server/src/main/content/global/skill/construction/decoration/portalchamber/PortalChamberPlugin.java
@@ -17,6 +17,8 @@ import core.plugin.Initializable;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
+import static content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE;
+
/**
* PortalChamberPlugin
* @author Clayton Williams
@@ -87,6 +89,12 @@ public class PortalChamberPlugin extends OptionHandler {
}
for (Locations l : Locations.values()) {
if (l.name().contains(identifier)) {
+ if (l == Locations.ARDOUGNE){
+ if (player.getAttribute(ARDOUGNE_TELE_ATTRIBUTE, false)){
+ player.sendMessage("You do not have the requirements to direct the portal there");
+ return;
+ }
+ }
Item[] runes = l.runes;
if (!player.getInventory().containsItems(runes)) {
player.sendMessage("You do not have the required runes to build this portal");
@@ -130,6 +138,12 @@ public class PortalChamberPlugin extends OptionHandler {
case "enter":
String objectName = object.getName();
for (Locations l : Locations.values()) {
+ if (l == Locations.ARDOUGNE){
+ if (player.getAttribute(ARDOUGNE_TELE_ATTRIBUTE, false)){
+ player.sendMessage("You do not have the requirements to enter this portal.");
+ return false;
+ }
+ }
if (objectName.toLowerCase().contains(l.name().toLowerCase())) {
player.teleport(l.location);
if (player.getHouseManager().isInHouse(player) && node.getId() == 13635) {
diff --git a/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt b/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
index 826056ce3..eb4accf67 100644
--- a/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
+++ b/Server/src/main/content/global/skill/construction/decoration/study/LecternPlugin.kt
@@ -10,6 +10,7 @@ import core.game.node.entity.player.Player
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
import content.global.skill.construction.Decoration
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners.Companion.ARDOUGNE_TELE_ATTRIBUTE
import core.game.node.entity.combat.spell.MagicStaff
import core.game.node.item.Item
import core.game.system.task.Pulse
@@ -84,6 +85,11 @@ class LecternPlugin : OptionHandler() {
player.sendMessages("You need the Bones to Peaches ability purchased from MTA before making these.", "This requirement doesn't apply to actually using the tabs.")
return false
}
+ if(this == ARDOUGNE && !getAttribute(player, ARDOUGNE_TELE_ATTRIBUTE, false)){
+ sendMessage(player, "You need to unlock Ardougne teleport before you can make a tablet.")
+ return false
+
+ }
var found = false
for (d in requiredDecorations) if (d.objectId == objectId) found = true
if (!found) {
diff --git a/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt b/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt
new file mode 100644
index 000000000..063b85ce4
--- /dev/null
+++ b/Server/src/main/content/global/skill/cooking/recipe/HangoverRecipe.kt
@@ -0,0 +1,44 @@
+package content.global.skill.cooking.recipe
+
+import core.api.*
+import core.game.interaction.IntType
+import core.game.interaction.InteractionListener
+import core.game.node.entity.skill.Skills
+import org.rs09.consts.Items
+
+class HangoverRecipe : InteractionListener {
+
+ companion object{
+ private const val SNAPE_GRASS = Items.SNAPE_GRASS_231
+ private const val HANGOVER_CURE = Items.HANGOVER_CURE_1504
+ private const val BUCKET_OF_MILK = Items.BUCKET_OF_MILK_1927
+ private const val CHOCOLATE_DUST = Items.CHOCOLATE_DUST_1975
+ private const val CHOCOLATE_MILK = Items.CHOCOLATEY_MILK_1977
+ }
+
+ override fun defineListeners() {
+ onUseWith(IntType.ITEM, CHOCOLATE_DUST, BUCKET_OF_MILK) { player, _, _ ->
+ if(hasLevelDyn(player, Skills.COOKING, 4)){
+ if(removeItem(player, CHOCOLATE_DUST) and removeItem(player, BUCKET_OF_MILK)){
+ addItem(player, CHOCOLATE_MILK)
+ sendItemDialogue(player, CHOCOLATE_MILK, "You mix the chocolate into the bucket.")
+ }
+ }
+ else {
+ sendDialogue(player, "You need a Cooking level of at least 4 to make chocolate milk.")
+ }
+ return@onUseWith true
+ }
+
+ onUseWith(IntType.ITEM, SNAPE_GRASS, CHOCOLATE_MILK) { player, _, _ ->
+ if (removeItem(player, SNAPE_GRASS) && removeItem(player, CHOCOLATE_MILK))
+ {
+ sendItemDialogue(player, HANGOVER_CURE, "You mix the snape grass into the bucket.")
+ addItem(player, HANGOVER_CURE)
+ return@onUseWith true
+ }
+ return@onUseWith false
+ }
+
+ }
+}
diff --git a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
index 1ae76e091..085f447bd 100644
--- a/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
+++ b/Server/src/main/content/global/skill/magic/modern/ModernListeners.kt
@@ -1,5 +1,6 @@
package content.global.skill.magic.modern
+import content.data.Quests
import content.global.skill.magic.SpellListener
import content.global.skill.magic.SpellUtils.hasRune
import content.global.skill.magic.TeleportMethod
@@ -22,6 +23,7 @@ import core.game.node.entity.player.Player
import core.game.node.entity.player.link.TeleportManager
import core.game.node.entity.player.link.diary.DiaryType
import core.game.node.entity.skill.Skills
+import content.region.kandarin.ardougne.quest.plaguecity.PlagueCityListeners
import core.game.node.item.Item
import core.game.world.map.Location
import core.game.world.update.flag.context.Animation
@@ -29,7 +31,6 @@ import core.game.world.update.flag.context.Graphics
import org.rs09.consts.Items
import org.rs09.consts.Scenery
import org.rs09.consts.Sounds
-import content.data.Quests
class ModernListeners : SpellListener("modern"){
override fun defineListeners() {
@@ -66,10 +67,15 @@ class ModernListeners : SpellListener("modern"){
}
onCast(Modern.ARDOUGNE_TELEPORT, NONE){ player, _ ->
- if (!hasRequirement(player, Quests.PLAGUE_CITY))
- return@onCast
- requires(player,51, arrayOf(Item(Items.WATER_RUNE_555,2),Item(Items.LAW_RUNE_563,2)))
- sendTeleport(player,61.0, Location.create(2662, 3307, 0))
+ if (getAttribute(player, PlagueCityListeners.ARDOUGNE_TELE_ATTRIBUTE, false)){
+ requires(player,51, arrayOf(Item(Items.WATER_RUNE_555,2),Item(Items.LAW_RUNE_563,2)))
+ sendTeleport(player,61.0, Location.create(2662, 3307, 0))
+ }
+ else {
+ // source https://runescape.salmoneus.net/forums/topic/289818-ardougne-teleport-help/
+ sendDialogue(player, "You haven\'t learnt how to cast this spell yet")
+ }
+ return@onCast
}
onCast(Modern.WATCHTOWER_TELEPORT, NONE){ player, _ ->
diff --git a/Server/src/main/content/global/skill/slayer/SlayerPlugin.java b/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
index 4e93e4fe0..53e426aa3 100644
--- a/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
+++ b/Server/src/main/content/global/skill/slayer/SlayerPlugin.java
@@ -28,7 +28,6 @@ public class SlayerPlugin extends OptionHandler {
@Override
public Plugin