Merge branch 'master' into 'master'

Add: JSON Monolith #1

See merge request 2009scape/2009scape!298
This commit is contained in:
Ceikry 2021-10-13 02:05:56 +00:00
commit eaaeb04069
18 changed files with 2634 additions and 7233 deletions

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,10 @@
"item_id": "39", "item_id": "39",
"loc_data": "{1,2672,3433,0,7209050}" "loc_data": "{1,2672,3433,0,7209050}"
}, },
{
"item_id": "41",
"loc_data": "{1,3125,9997,0,7209050}"
},
{ {
"item_id": "88", "item_id": "88",
"loc_data": "{1,2654,9767,0,4587583}" "loc_data": "{1,2654,9767,0,4587583}"
@ -37,7 +41,7 @@
}, },
{ {
"item_id": "243", "item_id": "243",
"loc_data": "{1,2912,9809,0,3932190}-{1,2914,9802,0,3932190}-{1,2912,9800,0,3932190}-{1,2908,9807,0,3932190}-{1,2911,9804,0,3932190}-{1,2904,9798,0,3932190}-{1,2905,9804,0,3932190}-{1,2901,9806,0,3932190}-{1,2909,9799,0,3932190}" "loc_data": "{1,2910,9809,0,196610}-{1,2908,9805,0,196610}-{1,2902,9806,0,196610}-{1,2906,9796,0,196610}-{1,2905,9801,0,196610}"
}, },
{ {
"item_id": "245", "item_id": "245",
@ -97,7 +101,7 @@
}, },
{ {
"item_id": "401", "item_id": "401",
"loc_data": "{1,2803,3382,0,11796640}-{1,2804,3380,0,11796640}-{1,2805,3381,0,11796640}-{1,2805,3384,0,11796640}-{1,2804,3385,0,11796640}-{1,2810,3387,0,11796640}-{1,2809,3388,0,11796640}-{1,2807,3384,0,11796640}-{1,2807,3386,0,11796640}-{1,2809,33885,0,11796640}-{1,2864,3195,0,11796640}-{1,2764,3131,0,11796640}-{1,2753,3125,0,11796640}-{1,2757,3109,0,11796640}-{1,2896,3119,0,5898290}" "loc_data": "{1,2810,3387,0,11796640}-{1,2809,3388,0,11796640}-{1,2809,3385,0,11796640}-{1,2807,3386,0,11796640}-{1,2804,3385,0,11796640}-{1,2807,3384,0,11796640}-{1,2805,3384,0,11796640}-{1,2802,3382,0,11796640}-{1,2805,3381,0,11796640}-{1,2804,3380,0,11796640}-{1,3829,3053,0,11796640}-{1,3813,3066,0,11796640}-{1,3814,3064,0,11796640}-{1,3808,3060,0,11796640}-{1,2693,3727,0,11796640}-{1,2698,3729,0,11796640}-{1,2700,3731,0,11796640}-{1,2708,3728,0,11796640}-{1,2725,3731,0,11796640}-{1,2721,3730,0,11796640}-{1,2719,3733,0,11796640}-{1,2714,3733,0,11796640}-{1,2712,3732,0,11796640}-{1,2896,3119,0,11796640}-{1,2914,3111,0,11796640}-{1,2926,3110,0,11796640}-{1,2939,3102,0,11796640}-{1,2938,3073,0,11796640}-{1,2945,3068,0,11796640}-{1,2975,3013,0,11796640}-{1,2955,3010,0,11796640}-{1,2959,2959,0,11796640}-{1,2943,2950,0,11796640}-{1,2866,2976,0,11796640}-{1,2854,2977,0,11796640}-{1,2840,2974,0,11796640}-{1,2757,2947,0,11796640}-{1,2755,2952,0,11796640}-{1,2786,2960,0,11796640}-{1,2782,2987,0,11796640}-{1,2771,2995,0,11796640}-{1,2761,3000,0,11796640}-{1,2755,3008,0,11796640}-{1,2754,3017,0,11796640}-{1,2756,3060,0,11796640}-{1,2755,3070,0,11796640}-{1,2756,3074,0,11796640}-{1,2806,3128,0,11796640}-{1,2864,3195,0,11796640}-{1,2764,3131,0,11796640}-{1,2753,3125,0,11796640}-{1,2757,3109,0,11796640}"
}, },
{ {
"item_id": "444", "item_id": "444",
@ -109,7 +113,7 @@
}, },
{ {
"item_id": "526", "item_id": "526",
"loc_data": "{1,2831,9766,0,7864410}-{1,2829,9764,0,7864410}-{1,2510,3080,0,5898270}-{1,2516,3084,0,5898270}-{1,2509,3090,0,5898270}-{1,2512,3084,0,5898270}-{1,2510,3084,0,5898270}-{1,2505,3114,0,5898270}-{1,2507,3116,0,5898270}-{1,2503,3118,0,5898270}-{1,2510,3114,0,5898270}-{1,3238,3606,0,9830500}-{1,3236,3605,0,9830500}-{1,3238,3603,0,9830500}-{1,3240,3603,0,9830500}-{1,3242,3604,0,9830500}-{1,3244,3611,0,9830500}-{1,3247,3614,0,9830500}-{1,3238,3610,0,9830500}-{1,3238,3608,0,9830500}" "loc_data": "{1,2917,9796,0,7864410}-{1,2914,9796,0,7864410}-{1,2910,9797,0,7864410}-{1,2908,9794,0,7864410}-{1,3103,9953,0,7864410}-{1,3104,9950,0,7864410}-{1,3110,9952,0,7864410}-{1,3111,9956,0,7864410}-{1,3110,9958,0,7864410}-{1,3111,9959,0,7864410}-{1,3116,9950,0,7864410}-{1,3127,9957,0,7864410}-{1,2926,9801,0,7864410}-{1,2924,9801,0,7864410}-{1,2924,9804,0,7864410}-{1,2927,9805,0,7864410}-{1,2929,9807,0,7864410}-{1,2938,9792,0,7864410}-{1,2938,9796,0,7864410}-{1,2935,9799,0,7864410}-{1,2930,9794,0,7864410}-{1,2932,9792,0,7864410}-{1,2966,9772,0,7864410}-{1,2968,9771,0,7864410}-{1,2903,9826,0,7864410}-{1,2906,9823,0,7864410}-{1,2906,9825,0,7864410}-{1,2907,9824,0,7864410}-{1,2910,9825,0,7864410}-{1,3101,9825,0,7864410}-{1,3107,9823,0,7864410}-{1,3109,9823,0,7864410}-{1,3110,9825,0,7864410}-{1,3138,9880,0,7864410}-{1,3141,9879,0,7864410}-{1,3142,9880,0,7864410}-{1,3143,9878,0,7864410}-{1,3097,9902,0,7864410}-{1,3094,9907,0,7864410}-{1,3093,9884,0,7864410}-{1,3098,9886,0,7864410}-{1,3093,9879,0,7864410}-{1,3122,9891,0,7864410}-{1,3116,9891,0,7864410}-{1,3119,9894,0,7864410}-{1,3120,9894,0,7864410}-{1,2831,9766,0,7864410}-{1,2829,9764,0,7864410}-{1,2510,3080,0,5898270}-{1,2516,3084,0,5898270}-{1,2509,3090,0,5898270}-{1,2512,3084,0,5898270}-{1,2510,3084,0,5898270}-{1,2505,3114,0,5898270}-{1,2507,3116,0,5898270}-{1,2503,3118,0,5898270}-{1,2510,3114,0,5898270}-{1,3238,3606,0,9830500}-{1,3236,3605,0,9830500}-{1,3238,3603,0,9830500}-{1,3240,3603,0,9830500}-{1,3242,3604,0,9830500}-{1,3244,3611,0,9830500}-{1,3247,3614,0,9830500}-{1,3238,3610,0,9830500}-{1,3238,3608,0,9830500}"
}, },
{ {
"item_id": "528", "item_id": "528",
@ -169,7 +173,7 @@
}, },
{ {
"item_id": "882", "item_id": "882",
"loc_data": "{1,3205,3227,0,10485900}-{1,2957,3205,0,5898270}-{1,2944,3332,0,5898270}-{1,3104,3599,0,13107300}-{1,3103,3596,0,13107300}-{1,3100,3593,0,13107300}-{1,3096,3595,0,13107300}-{1,3094,3598,0,13107300}-{1,3100,3609,0,13107300}-{1,3104,3610,0,13107300}-{1,3107,3611,0,13107300}-{1,3108,3603,0,13107300}" "loc_data": "{1,3135,9916,0,10485900}-{3,3130,9903,0,10485900}-{1,3205,3227,0,10485900}-{1,2957,3205,0,5898270}-{1,2944,3332,0,5898270}-{1,3104,3599,0,13107300}-{1,3103,3596,0,13107300}-{1,3100,3593,0,13107300}-{1,3096,3595,0,13107300}-{1,3094,3598,0,13107300}-{1,3100,3609,0,13107300}-{1,3104,3610,0,13107300}-{1,3107,3611,0,13107300}-{1,3108,3603,0,13107300}"
}, },
{ {
"item_id": "946", "item_id": "946",
@ -185,7 +189,7 @@
}, },
{ {
"item_id": "960", "item_id": "960",
"loc_data": "{1,2846,3383,0,11796640}-{1,2848,3383,0,11796640}-{1,2851,3239,0,11796640}-{1,2847,3238,0,11796640}-{1,2845,3232,0,11796640}-{1,2856,3231,0,11796640}-{1,2857,3236,0,11796640}-{1,3216,3665,0,16384200}-{1,3224,3668,0,16384200}-{1,3245,3678,0,16384200}-{1,3230,3686,0,16384200}-{1,3216,3677,0,16384200}-{1,3219,3680,0,16384200}" "loc_data": "{1,2846,3384,0,11796640}-{1,2848,3383,0,11796640}-{1,2851,3239,0,11796640}-{1,2847,3238,0,11796640}-{1,2845,3232,0,11796640}-{1,2856,3231,0,11796640}-{1,2857,3236,0,11796640}-{1,3216,3665,0,16384200}-{1,3224,3668,0,16384200}-{1,3245,3678,0,16384200}-{1,3230,3686,0,16384200}-{1,3216,3677,0,16384200}-{1,3219,3680,0,16384200}"
}, },
{ {
"item_id": "966", "item_id": "966",
@ -201,12 +205,16 @@
}, },
{ {
"item_id": "995", "item_id": "995",
"loc_data": "{3,3195,9834,0,11141270}-{4,3195,9820,0,11141270}-{66,3191,9821,0,11141270}-{56,3190,9819,0,11141270}-{26,3188,9819,0,11141270}-{26,3188,9820,0,11141270}-{35,3189,9819,0,11141270}-{384,3224,3830,0,6553650}-{384,3220,3824,0,6553650}-{2,3106,3547,0,13107300}-{1,3104,3558,0,13107300}-{1,3106,3534,0,13107300}-{2,3101,3564,0,13107300}-{4,3103,3579,0,13107300}-{2,3234,3560,0,13107300}" "loc_data": "{1,2909,9800,0,11141270}-{4,2912,9801,0,11141270}-{8,2910,9803,0,11141270}-{5,2907,9807,0,11141270}-{6,2913,9806,0,11141270}-{1,2922,9820,0,11141270}-{1,2934,9834,0,11141270}-{1,2917,9850,0,11141270}-{1,2914,9849,0,11141270}-{4,3088,9898,0,11141270}-{1,3088,9899,0,11141270}-{1,3091,9899,0,11141270}-{3,3195,9834,0,11141270}-{4,3195,9820,0,11141270}-{66,3191,9821,0,11141270}-{56,3190,9819,0,11141270}-{26,3188,9819,0,11141270}-{26,3188,9820,0,11141270}-{35,3189,9819,0,11141270}-{384,3224,3830,0,6553650}-{384,3220,3824,0,6553650}-{2,3106,3547,0,13107300}-{1,3104,3558,0,13107300}-{1,3106,3534,0,13107300}-{2,3101,3564,0,13107300}-{4,3103,3579,0,13107300}-{2,3234,3560,0,13107300}"
}, },
{ {
"item_id": "1005", "item_id": "1005",
"loc_data": "{1,3014,3227,0,3276830}-{1,3009,3204,0,3276830}" "loc_data": "{1,3014,3227,0,3276830}-{1,3009,3204,0,3276830}"
}, },
{
"item_id": "1009",
"loc_data": "{1,3122,9881,0,3276830}"
},
{ {
"item_id": "1059", "item_id": "1059",
"loc_data": "{1,3242,3385,1,7209050}-{1,3097,3486,0,7864410}-{1,3148,3177,0,5898270}" "loc_data": "{1,3242,3385,1,7209050}-{1,3097,3486,0,7864410}-{1,3148,3177,0,5898270}"
@ -283,6 +291,10 @@
"item_id": "1573", "item_id": "1573",
"loc_data": "{1,2740,3637,0,5898270}-{1,2736,3638,0,5898270}-{1,2735,3636,0,5898270}-{1,2743,3636,0,5898270}-{1,2739,3634,0,5898270}-{1,2743,3640,0,5898270}-{1,2741,3639,0,5898270}-{1,2736,3641,0,5898270}-{1,2738,3641,0,5898270}-{1,2734,3640,0,5898270}-{1,2738,3636,0,5898270}" "loc_data": "{1,2740,3637,0,5898270}-{1,2736,3638,0,5898270}-{1,2735,3636,0,5898270}-{1,2743,3636,0,5898270}-{1,2739,3634,0,5898270}-{1,2743,3640,0,5898270}-{1,2741,3639,0,5898270}-{1,2736,3641,0,5898270}-{1,2738,3641,0,5898270}-{1,2734,3640,0,5898270}-{1,2738,3636,0,5898270}"
}, },
{
"item_id": "1590",
"loc_data": "{1,2900,9766,0,7209050}"
},
{ {
"item_id": "1592", "item_id": "1592",
"loc_data": "{1,2935,3283,1,7209050}" "loc_data": "{1,2935,3283,1,7209050}"
@ -407,6 +419,14 @@
"item_id": "1993", "item_id": "1993",
"loc_data": "{1,3291,3033,1,7864410}" "loc_data": "{1,3291,3033,1,7864410}"
}, },
{
"item_id": "2025",
"loc_data": "{1,2449,3510,1,7864410}"
},
{
"item_id": "2026",
"loc_data": "{1,2483,3482,1,7864410}-{1,2489,3489,1,7864410}"
},
{ {
"item_id": "2140", "item_id": "2140",
"loc_data": "{1,2971,3382,1,5898270}" "loc_data": "{1,2971,3382,1,5898270}"

View file

@ -5261,6 +5261,7 @@
"shop_price": "190", "shop_price": "190",
"ge_buy_limit": "10000", "ge_buy_limit": "10000",
"grand_exchange_price": "190", "grand_exchange_price": "190",
"examine": "Bones are for burying!",
"durability": null, "durability": null,
"name": "Bones", "name": "Bones",
"tradeable": "true", "tradeable": "true",
@ -5515,7 +5516,7 @@
"id": "551" "id": "551"
}, },
{ {
"examine": "Normal: It lets me talk to ghosts.", "examine": "It lets me talk to ghosts.",
"durability": null, "durability": null,
"name": "Ghostspeak amulet", "name": "Ghostspeak amulet",
"tradeable": "false", "tradeable": "false",
@ -18313,7 +18314,7 @@
"tradeable": "true", "tradeable": "true",
"low_alchemy": "140", "low_alchemy": "140",
"high_alchemy": "210", "high_alchemy": "210",
"destroy": "true", "destroy": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "1635", "id": "1635",
"equipment_slot": "12" "equipment_slot": "12"
@ -41660,7 +41661,7 @@
"id": "4249" "id": "4249"
}, },
{ {
"examine": "Normal: It lets me talk to ghosts.", "examine": "The amulet of ghostspeak glows green from the crone's enchantment.",
"durability": null, "durability": null,
"name": "Ghostspeak amulet", "name": "Ghostspeak amulet",
"low_alchemy": "14", "low_alchemy": "14",
@ -112331,7 +112332,7 @@
"durability": null, "durability": null,
"name": "Red dragon egg", "name": "Red dragon egg",
"tradeable": "false", "tradeable": "false",
"destroy": "true", "destroy": "false",
"weight": "1", "weight": "1",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "12477" "id": "12477"
@ -112341,7 +112342,7 @@
"durability": null, "durability": null,
"name": "Blue dragon egg", "name": "Blue dragon egg",
"tradeable": "false", "tradeable": "false",
"destroy": "true", "destroy": "false",
"weight": "1", "weight": "1",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "12478" "id": "12478"
@ -112351,7 +112352,7 @@
"durability": null, "durability": null,
"name": "Green dragon egg", "name": "Green dragon egg",
"tradeable": "false", "tradeable": "false",
"destroy": "true", "destroy": "false",
"weight": "1", "weight": "1",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "12479" "id": "12479"
@ -112361,7 +112362,7 @@
"durability": null, "durability": null,
"name": "Black dragon egg", "name": "Black dragon egg",
"tradeable": "false", "tradeable": "false",
"destroy": "true", "destroy": "false",
"weight": "1", "weight": "1",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "12480" "id": "12480"
@ -113606,17 +113607,18 @@
"low_alchemy": "8", "low_alchemy": "8",
"high_alchemy": "12", "high_alchemy": "12",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"weight": "0",
"id": "12624" "id": "12624"
}, },
{ {
"destroy_message": "You can reclaim this item from the place you found it.", "destroy_message": "You will need to obtain more flags from Mrs. Winkin or Farmer Blinkin if you have lost all of the flags you have.",
"shop_price": "500", "shop_price": "500",
"examine": "A flag to put in the ground.", "examine": "A flag to put in the ground.",
"durability": null, "durability": null,
"name": "Flag", "name": "Flag",
"tradeable": "false", "tradeable": "false",
"destroy": "true", "destroy": "true",
"weight": "2", "weight": "0",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "12625" "id": "12625"
}, },
@ -121013,11 +121015,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(8)", "name": "Ring of slaying(8)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121030,11 +121032,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(7)", "name": "Ring of slaying(7)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121047,11 +121049,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(6)", "name": "Ring of slaying(6)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121064,11 +121066,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(5)", "name": "Ring of slaying(5)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121081,11 +121083,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(4)", "name": "Ring of slaying(4)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121098,11 +121100,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(3)", "name": "Ring of slaying(3)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121115,11 +121117,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(2)", "name": "Ring of slaying(2)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121132,11 +121134,11 @@
"durability": null, "durability": null,
"low_alchemy": "60", "low_alchemy": "60",
"high_alchemy": "90", "high_alchemy": "90",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"equipment_slot": "12", "equipment_slot": "12",
"destroy_message": "Drop", "destroy_message": "",
"name": "Ring of slaying(1)", "name": "Ring of slaying(1)",
"tradeable": "false", "tradeable": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
@ -121155,9 +121157,10 @@
"defence_anim": "397", "defence_anim": "397",
"equipment_slot": "3", "equipment_slot": "3",
"attack_anims": "381,381,390,381", "attack_anims": "381,381,390,381",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "43082", "grand_exchange_price": "43082",
"stand_anim": "813", "stand_anim": "813",
"tradeable": "true",
"run_anim": "824", "run_anim": "824",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"id": "13290", "id": "13290",
@ -121167,7 +121170,7 @@
"shop_price": "68000", "shop_price": "68000",
"durability": null, "durability": null,
"high_alchemy": "40800", "high_alchemy": "40800",
"destroy": "true", "destroy": "false",
"weapon_interface": "5", "weapon_interface": "5",
"attack_audios": "2500,2500,2517,2500", "attack_audios": "2500,2500,2517,2500",
"name": "Leaf-bladed sword" "name": "Leaf-bladed sword"
@ -121178,9 +121181,9 @@
"durability": null, "durability": null,
"low_alchemy": "27200", "low_alchemy": "27200",
"high_alchemy": "40800", "high_alchemy": "40800",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "43082", "grand_exchange_price": "43082",
"name": "Leaf-bladed sword", "name": "Leaf-bladed sword",
"tradeable": "true", "tradeable": "true",
@ -137860,11 +137863,11 @@
"durability": null, "durability": null,
"low_alchemy": "48000", "low_alchemy": "48000",
"high_alchemy": "72000", "high_alchemy": "72000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "3,1,0", "absorb": "3,1,0",
"equipment_slot": "4", "equipment_slot": "4",
"destroy_message": "Drop", "destroy_message": "",
"remove_sleeves": "true", "remove_sleeves": "true",
"grand_exchange_price": "71098", "grand_exchange_price": "71098",
"name": "Dagon'hai robe top", "name": "Dagon'hai robe top",
@ -137879,9 +137882,9 @@
"durability": null, "durability": null,
"low_alchemy": "48000", "low_alchemy": "48000",
"high_alchemy": "72000", "high_alchemy": "72000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "71098", "grand_exchange_price": "71098",
"name": "Dagon'hai robe top", "name": "Dagon'hai robe top",
"tradeable": "true", "tradeable": "true",
@ -137895,11 +137898,11 @@
"durability": null, "durability": null,
"low_alchemy": "6000", "low_alchemy": "6000",
"high_alchemy": "9000", "high_alchemy": "9000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "1,0,0", "absorb": "1,0,0",
"equipment_slot": "0", "equipment_slot": "0",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "9580", "grand_exchange_price": "9580",
"name": "Dagon'hai hat", "name": "Dagon'hai hat",
"tradeable": "true", "tradeable": "true",
@ -137913,9 +137916,9 @@
"durability": null, "durability": null,
"low_alchemy": "6000", "low_alchemy": "6000",
"high_alchemy": "9000", "high_alchemy": "9000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "9580", "grand_exchange_price": "9580",
"name": "Dagon'hai hat", "name": "Dagon'hai hat",
"tradeable": "true", "tradeable": "true",
@ -137929,11 +137932,11 @@
"durability": null, "durability": null,
"low_alchemy": "32000", "low_alchemy": "32000",
"high_alchemy": "48000", "high_alchemy": "48000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "2,1,0", "absorb": "2,1,0",
"equipment_slot": "7", "equipment_slot": "7",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "45691", "grand_exchange_price": "45691",
"name": "Dagon'hai robe bottom", "name": "Dagon'hai robe bottom",
"tradeable": "true", "tradeable": "true",
@ -137947,9 +137950,9 @@
"durability": null, "durability": null,
"low_alchemy": "32000", "low_alchemy": "32000",
"high_alchemy": "48000", "high_alchemy": "48000",
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "45691", "grand_exchange_price": "45691",
"name": "Dagon'hai robe bottom", "name": "Dagon'hai robe bottom",
"tradeable": "true", "tradeable": "true",
@ -138196,10 +138199,10 @@
"shop_price": "20", "shop_price": "20",
"examine": "Grand Exchange set containing a hat, top and bottoms.", "examine": "Grand Exchange set containing a hat, top and bottoms.",
"durability": null, "durability": null,
"destroy": "true", "destroy": "false",
"attack_speed": "4", "attack_speed": "4",
"absorb": "0,0,0", "absorb": "0,0,0",
"destroy_message": "Drop", "destroy_message": "",
"grand_exchange_price": "193541", "grand_exchange_price": "193541",
"name": "Dagon'hai robes set", "name": "Dagon'hai robes set",
"tradeable": "true", "tradeable": "true",
@ -138208,14 +138211,14 @@
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
}, },
{ {
"destroy_message": "Drop", "destroy_message": "",
"shop_price": "20", "shop_price": "20",
"examine": "Grand Exchange set containing a hat, top and bottoms.", "examine": "Grand Exchange set containing a hat, top and bottoms.",
"grand_exchange_price": "193541", "grand_exchange_price": "193541",
"durability": null, "durability": null,
"name": "Dagon'hai robes set", "name": "Dagon'hai robes set",
"tradeable": "true", "tradeable": "true",
"destroy": "true", "destroy": "false",
"archery_ticket_price": "0", "archery_ticket_price": "0",
"attack_speed": "4", "attack_speed": "4",
"id": "14526" "id": "14526"

File diff suppressed because it is too large Load diff

View file

@ -201,7 +201,7 @@
}, },
{ {
"npc_id": "63", "npc_id": "63",
"loc_data": "{3118,9950,0,1,6}-{3116,9956,0,1,0}-{3127,9953,0,1,7}-{3122,9955,0,1,4}-{3124,9951,0,1,4}-{3124,9950,0,1,3}-{3074,3892,0,1,3}-{3071,3894,0,1,7}-{3062,3897,0,1,3}-{3058,3889,0,1,4}-{3054,3880,0,1,2}-{3054,3895,0,1,7}-{3051,3879,0,1,6}-{3051,3886,0,1,6}-{3047,3893,0,1,1}-{3047,3881,0,1,4}-{3044,3893,0,1,5}-{3041,3894,0,1,1}-{3038,3890,0,1,1}-{3046,3872,0,1,4}-{3165,9891,0,1,6}-{3177,9886,0,1,4}-{3175,9889,0,1,4}-{3177,9879,0,1,4}-{3177,9888,0,1,1}-{3178,9895,0,1,4}-{3182,9884,0,1,3}-{2841,9583,0,1,4}-{2841,9582,0,1,4}-{2839,9582,0,1,1}-{2837,9572,0,1,6}-{2832,9580,0,1,1}-{3164,9888,0,1,3}-{3169,9892,0,1,6}-{3258,5560,0,1,2}-{3258,5555,0,1,3}-{3260,5557,0,1,3}-{3257,5552,0,1,1}-{3260,5558,0,1,5}-{3258,5556,0,1,6}-{3257,5555,0,1,6}-{3260,5559,0,1,7}-{3257,5561,0,1,1}" "loc_data": "{3128,9954,0,1,0}-{3127,9956,0,1,0}-{3125,9958,0,1,0}-{3117,9956,0,1,0}-{3122,9956,0,1,0}-{3120,9952,0,1,0}-{3123,9951,0,1,0}-{3125,9948,0,1,0}-{3118,9950,0,1,0}-{3074,3892,0,1,3}-{3071,3894,0,1,7}-{3062,3897,0,1,3}-{3058,3889,0,1,4}-{3054,3880,0,1,2}-{3054,3895,0,1,7}-{3051,3879,0,1,6}-{3051,3886,0,1,6}-{3047,3893,0,1,1}-{3047,3881,0,1,4}-{3044,3893,0,1,5}-{3041,3894,0,1,1}-{3038,3890,0,1,1}-{3046,3872,0,1,4}-{3165,9891,0,1,6}-{3177,9886,0,1,4}-{3175,9889,0,1,4}-{3177,9879,0,1,4}-{3177,9888,0,1,1}-{3178,9895,0,1,4}-{3182,9884,0,1,3}-{2841,9583,0,1,4}-{2841,9582,0,1,4}-{2839,9582,0,1,1}-{2837,9572,0,1,6}-{2832,9580,0,1,1}-{3164,9888,0,1,3}-{3169,9892,0,1,6}-{3258,5560,0,1,2}-{3258,5555,0,1,3}-{3260,5557,0,1,3}-{3257,5552,0,1,1}-{3260,5558,0,1,5}-{3258,5556,0,1,6}-{3257,5555,0,1,6}-{3260,5559,0,1,7}-{3257,5561,0,1,1}"
}, },
{ {
"npc_id": "64", "npc_id": "64",
@ -405,7 +405,7 @@
}, },
{ {
"npc_id": "124", "npc_id": "124",
"loc_data": "{3118,9974,0,1,6}-{3119,9971,0,1,3}-{3120,9976,0,1,3}-{3124,9974,0,1,6}-{3142,5532,0,1,6}-{3141,5531,0,1,6}-{3139,5526,0,1,3}-{3143,5524,0,1,3}-{3148,5523,0,1,4}-{3148,5531,0,1,4}" "loc_data": "{3121,9997,0,1,0}-{3124,9996,0,1,0}-{3125,9993,0,1,0}-{3121,9993,0,1,0}-{3115,9992,0,1,0}-{3118,9990,0,1,0}-{3122,9989,0,1,0}-{3124,9974,0,1,0}-{3119,9976,0,1,0}-{3116,9974,0,1,0}-{3118,9971,0,1,0}-{3142,5532,0,1,6}-{3141,5531,0,1,6}-{3139,5526,0,1,3}-{3143,5524,0,1,3}-{3148,5523,0,1,4}-{3148,5531,0,1,4}"
}, },
{ {
"npc_id": "125", "npc_id": "125",
@ -421,7 +421,7 @@
}, },
{ {
"npc_id": "128", "npc_id": "128",
"loc_data": "{2610,3274,0,0,0}-{2610,3275,0,0,0}-{2615,3276,0,0,0}-{2616,3275,0,0,0}-{2616,3276,0,0,0}-{3193,3958,0,0,0}-{2877,3154,0,0,0}-{2878,3153,0,0,0}-{2870,3161,0,0,0}-{2822,3192,0,1,5}-{2770,3213,0,0,0}-{2759,3179,0,0,0}-{2741,3173,0,0,0}-{2757,3170,0,0,0}-{2746,3167,0,0,0}-{2784,3173,0,0,0}-{2746,3147,0,0,0}-{2733,3162,0,0,0}-{2730,3146,0,0,0}-{2782,3104,0,0,0}-{2782,3103,0,0,0}-{2777,3090,0,0,0}-{2773,3089,0,0,0}-{2803,3115,0,0,0}-{2808,3112,0,0,0}-{2887,3145,0,0,0}-{2824,3084,0,0,0}-{2821,3078,0,0,0}-{2817,3078,0,0,0}-{2837,3076,0,0,0}-{2844,3040,0,0,0}-{2840,3049,0,0,0}-{2837,3043,0,0,0}-{2834,3042,0,0,0}-{2827,3026,0,0,0}-{2824,3018,0,0,0}-{2830,3021,0,0,0}-{2832,3018,0,0,0}-{2925,2969,0,0,0}-{2939,2977,0,0,0}-{2936,2980,0,0,0}-{2933,2976,0,0,0}-{2930,2971,0,0,0}-{2928,2984,0,0,0}-{2942,2983,0,0,0}-{2936,2989,0,0,0}" "loc_data": "{2610,3274,0,1,0}-{2610,3275,0,1,0}-{2615,3276,0,1,0}-{2616,3275,0,1,0}-{2616,3276,0,1,0}-{3193,3958,0,1,0}-{2877,3154,0,1,0}-{2878,3153,0,1,0}-{2870,3161,0,1,0}-{2822,3192,0,1,5}-{2770,3213,0,0,0}-{2759,3179,0,0,0}-{2741,3173,0,0,0}-{2757,3170,0,0,0}-{2746,3167,0,0,0}-{2781,3173,0,1,0}-{2746,3147,0,1,0}-{2733,3162,0,1,0}-{2730,3146,0,1,0}-{2782,3104,0,1,0}-{2782,3103,0,1,0}-{2777,3090,0,1,0}-{2773,3089,0,1,0}-{2803,3115,0,1,0}-{2808,3112,0,1,0}-{2887,3145,0,1,0}-{2824,3084,0,1,0}-{2821,3078,0,1,0}-{2817,3078,0,1,0}-{2837,3076,0,1,0}-{2844,3040,0,1,0}-{2840,3049,0,1,0}-{2837,3043,0,1,0}-{2834,3042,0,1,0}-{2827,3026,0,1,0}-{2824,3018,0,1,0}-{2830,3021,0,1,0}-{2832,3018,0,1,0}-{2925,2969,0,1,0}-{2939,2977,0,1,0}-{2936,2980,0,1,0}-{2933,2976,0,1,0}-{2930,2971,0,1,0}-{2928,2984,0,1,0}-{2942,2983,0,1,0}-{2936,2989,0,1,0}"
}, },
{ {
"npc_id": "131", "npc_id": "131",
@ -509,7 +509,7 @@
}, },
{ {
"npc_id": "178", "npc_id": "178",
"loc_data": "{2892,9709,0,1,6}-{2915,9708,0,1,7}-{2899,9702,0,1,1}-{2907,9711,0,1,4}-{2938,9811,0,1,6}-{3096,3220,0,1,1}-{3273,3507,0,1,6}" "loc_data": "{2909,9690,0,1,0}-{2911,9689,0,1,0}-{2905,9687,0,1,0}-{2912,9682,0,1,0}-{2917,9681,0,1,0}-{2918,9679,0,1,0}-{2916,9677,0,1,0}-{2911,9675,0,1,0}-{2906,9675,0,1,0}-{2905,9673,0,1,0}-{2897,9675,0,1,0}-{2899,9678,0,1,0}-{2898,9682,0,1,0}-{2897,9687,0,1,0}-{2903,9690,0,1,0}-{2904,9692,0,1,0}-{2902,9693,0,1,0}-{2915,9691,0,1,0}-{2916,9694,0,1,0}-{2913,9694,0,1,0}-{2908,9694,0,1,0}-{2908,9702,0,1,0}-{2906,9706,0,1,0}-{2915,9703,0,1,0}-{2915,9711,0,1,0}-{2899,9700,0,1,0}-{2898,9703,0,1,0}-{2898,9708,0,1,0}-{2900,9710,0,1,0}-{2907,9711,0,1,0}-{2923,9710,0,1,0}-{2920,9708,0,1,0}-{2919,9703,0,1,0}-{2891,9679,0,1,0}-{2891,9682,0,1,0}-{2890,9692,0,1,0}-{2891,9695,0,1,0}-{2892,9701,0,1,0}-{2893,9701,0,1,0}-{2892,9709,0,1,0}-{2895,9710,0,1,0}-{2942,9801,0,1,0}-{2938,9812,0,1,0}-{3096,3220,0,1,1}-{3273,3507,0,1,6}"
}, },
{ {
"npc_id": "179", "npc_id": "179",
@ -557,7 +557,7 @@
}, },
{ {
"npc_id": "191", "npc_id": "191",
"loc_data": "{2730,3161,0,0,0}-{2729,3159,0,0,0}-{2727,3163,0,0,0}-{2725,3157,0,0,0}-{2726,3161,0,0,0}-{2725,3161,0,0,0}-{2723,3155,0,0,0}-{2723,3156,0,0,0}-{2725,3162,0,0,0}-{2775,3066,0,0,0}-{2802,3071,0,0,0}-{2868,3053,0,0,0}-{2770,3018,0,0,0}-{2770,3014,0,0,0}-{2840,3018,0,0,0}-{2919,2983,0,0,0}-{2937,2993,0,0,0}-{2940,2994,0,0,0}-{2940,2997,0,0,0}-{2942,2997,0,0,0}" "loc_data": "{2730,3161,0,1,0}-{2729,3159,0,1,0}-{2727,3163,0,1,0}-{2725,3157,0,1,0}-{2726,3161,0,1,0}-{2725,3161,0,1,0}-{2723,3155,0,1,0}-{2723,3156,0,1,0}-{2725,3162,0,1,0}-{2775,3066,0,1,0}-{2802,3071,0,1,0}-{2868,3053,0,1,0}-{2770,3018,0,1,0}-{2770,3014,0,1,0}-{2840,3018,0,1,0}-{2919,2983,0,1,0}-{2937,2993,0,1,0}-{2940,2994,0,1,0}-{2940,2997,0,1,0}-{2942,2997,0,1,0}"
}, },
{ {
"npc_id": "192", "npc_id": "192",
@ -869,7 +869,7 @@
}, },
{ {
"npc_id": "333", "npc_id": "333",
"loc_data": "{2845,3429,0,0,6}-{2923,3178,0,0,6}-{2923,3180,0,0,6}-{2926,3180,0,0,6}-{2602,3411,0,0,3}-{2605,3413,0,0,3}-{2609,3416,0,0,3}-{2610,3413,0,0,3}-{2605,3421,0,0,1}-{2602,3423,0,0,1}-{2603,3426,0,0,1}-{3128,3510,0,0,1}" "loc_data": "{2845,3429,0,0,6}-{2923,3178,0,0,6}-{2923,3180,0,0,6}-{2926,3180,0,0,6}-{2602,3411,0,0,3}-{2605,3413,0,0,3}-{2609,3416,0,0,3}-{2610,3413,0,0,3}-{2605,3421,0,0,1}-{2602,3423,0,0,1}-{2603,3426,0,0,1}"
}, },
{ {
"npc_id": "334", "npc_id": "334",
@ -1047,9 +1047,13 @@
"npc_id": "385", "npc_id": "385",
"loc_data": "{2549,3568,0,1,6}" "loc_data": "{2549,3568,0,1,6}"
}, },
{
"npc_id": "386",
"loc_data": "{2877,9797,0,1,0}"
},
{ {
"npc_id": "387", "npc_id": "387",
"loc_data": "{3000,3440,1,0,0}" "loc_data": "{3058,3488,1,0,0}"
}, },
{ {
"npc_id": "388", "npc_id": "388",
@ -1633,7 +1637,7 @@
}, },
{ {
"npc_id": "601", "npc_id": "601",
"loc_data": "{2482,3509,1,1,3}" "loc_data": "{2482,3510,1,1,0}"
}, },
{ {
"npc_id": "602", "npc_id": "602",
@ -2151,6 +2155,10 @@
"npc_id": "848", "npc_id": "848",
"loc_data": "{2480,3489,1,1,3}" "loc_data": "{2480,3489,1,1,3}"
}, },
{
"npc_id": "849",
"loc_data": "{2482,3487,1,1,0}-{2482,3489,1,1,0}-{2417,3498,1,1,0}"
},
{ {
"npc_id": "850", "npc_id": "850",
"loc_data": "{2439,3502,1,0,4}" "loc_data": "{2439,3502,1,0,4}"
@ -3481,7 +3489,7 @@
}, },
{ {
"npc_id": "1597", "npc_id": "1597",
"loc_data": "{3146,9913,0,1,6}" "loc_data": "{3147,9914,0,1,6}"
}, },
{ {
"npc_id": "1598", "npc_id": "1598",
@ -4344,8 +4352,8 @@
"loc_data": "{3310,3107,0,1,4}-{3181,3043,0,1,3}" "loc_data": "{3310,3107,0,1,4}-{3181,3043,0,1,3}"
}, },
{ {
"npc_id": "2304", "npc_id": "2304",
"loc_data": "{3038,3292,0,1,6}" "loc_data": "{3039,3292,0,1,6}"
}, },
{ {
"npc_id": "2305", "npc_id": "2305",
@ -4425,7 +4433,7 @@
}, },
{ {
"npc_id": "2330", "npc_id": "2330",
"loc_data": "{2766,3211,0,0,0}" "loc_data": "{2766,3211,0,1,0}"
}, },
{ {
"npc_id": "2331", "npc_id": "2331",
@ -4453,11 +4461,11 @@
}, },
{ {
"npc_id": "2337", "npc_id": "2337",
"loc_data": "{2615,3855,0,0,3}" "loc_data": "{2589,3861,0,1,0}"
}, },
{ {
"npc_id": "2338", "npc_id": "2338",
"loc_data": "{2615,3229,0,0,0}" "loc_data": "{2615,3229,0,1,0}"
}, },
{ {
"npc_id": "2339", "npc_id": "2339",
@ -4469,7 +4477,7 @@
}, },
{ {
"npc_id": "2341", "npc_id": "2341",
"loc_data": "{3229,3456,0,0,0}" "loc_data": "{3229,3456,0,1,0}"
}, },
{ {
"npc_id": "2342", "npc_id": "2342",
@ -4835,6 +4843,10 @@
"npc_id": "2620", "npc_id": "2620",
"loc_data": "{4701,5153,0,1,0}-{2478,5146,0,1,2}" "loc_data": "{4701,5153,0,1,0}-{2478,5146,0,1,2}"
}, },
{
"npc_id": "2621",
"loc_data": "{2724,3729,0,0,6}"
},
{ {
"npc_id": "2622", "npc_id": "2622",
"loc_data": "{4689,5173,0,0,0}-{2464,5149,0,0,7}" "loc_data": "{4689,5173,0,0,0}-{2464,5149,0,0,7}"
@ -5221,7 +5233,7 @@
}, },
{ {
"npc_id": "3021", "npc_id": "3021",
"loc_data": "{2815,3466,0,0,3}-{2859,3431,0,0,0}-{2933,3434,0,1,4}-{3182,3354,0,0,0}-{3087,3352,0,0,0}-{3065,3255,0,0,0}-{3192,3229,0,0,0}-{3232,3459,0,0,3}-{3451,3475,0,0,6}-{2812,3333,0,1,4}-{3007,3371,0,1,2}-{3053,3304,0,0,1}-{2663,3374,0,0,4}-{3603,3529,0,0,6}-{2474,3446,0,1,4}-{2611,3859,0,0,6}-{2434,3415,0,1,3}-{2764,3210,0,1,1}-{2940,3225,0,0,6}-{2614,3226,0,0,4}-{3315,3205,0,0,6}-{2666,3521,0,1,4}-{2491,3177,0,0,1}" "loc_data": "{2796,3104,0,1,0}-{2815,3466,0,1,3}-{2856,3435,0,1,0}-{2933,3434,0,1,4}-{3182,3354,0,1,0}-{3088,3357,0,1,0}-{3060,3263,0,1,0}-{3189,3234,0,1,0}-{3232,3459,0,1,3}-{3449,3471,0,1,6}-{2812,3333,0,1,4}-{3007,3371,0,1,2}-{3053,3304,0,1,1}-{2663,3374,0,1,4}-{3603,3529,0,1,6}-{2474,3446,0,1,4}-{2611,3859,0,1,6}-{2589,3863,0,1,0}-{2434,3415,0,1,3}-{2764,3210,0,1,1}-{2940,3225,0,1,6}-{2614,3226,0,1,4}-{3315,3205,0,1,6}-{2666,3521,0,1,4}-{2491,3177,0,1,1}-{2572,3105,0,1,0}"
}, },
{ {
"npc_id": "3029", "npc_id": "3029",
@ -6619,6 +6631,14 @@
"npc_id": "4560", "npc_id": "4560",
"loc_data": "{3062,3260,0,1,6}" "loc_data": "{3062,3260,0,1,6}"
}, },
{
"npc_id": "4561",
"loc_data": "{2615,3855,0,1,0}"
},
{
"npc_id": "4562",
"loc_data": "{2799,3200,0,1,0}"
},
{ {
"npc_id": "4563", "npc_id": "4563",
"loc_data": "{3003,9798,0,1,3}" "loc_data": "{3003,9798,0,1,3}"
@ -8611,6 +8631,18 @@
"npc_id": "6116", "npc_id": "6116",
"loc_data": "{3030,3244,0,1,0}-{3025,3203,0,1,3}-{3034,3204,0,1,4}" "loc_data": "{3030,3244,0,1,0}-{3025,3203,0,1,3}-{3034,3204,0,1,4}"
}, },
{
"npc_id": "6127",
"loc_data": "{2467,3183,0,0,3}"
},
{
"npc_id": "6128",
"loc_data": "{2465,3183,0,0,4}"
},
{
"npc_id": "6129",
"loc_data": "{2470,3185,0,0,6}"
},
{ {
"npc_id": "6135", "npc_id": "6135",
"loc_data": "{3254,3427,0,1,1}" "loc_data": "{3254,3427,0,1,1}"
@ -9859,10 +9891,6 @@
"npc_id": "7312", "npc_id": "7312",
"loc_data": "{2950,3268,0,0,0}" "loc_data": "{2950,3268,0,0,0}"
}, },
{
"npc_id": "7363",
"loc_data": "{2793,2996,0,0,0}"
},
{ {
"npc_id": "7420", "npc_id": "7420",
"loc_data": "{3168,3334,0,0,3}" "loc_data": "{3168,3334,0,0,3}"
@ -10011,6 +10039,10 @@
"npc_id": "7969", "npc_id": "7969",
"loc_data": "{3205,3240,0,0,0}" "loc_data": "{3205,3240,0,0,0}"
}, },
{
"npc_id": "8041",
"loc_data": "{2794,3100,0,1,0}"
},
{ {
"npc_id": "8082", "npc_id": "8082",
"loc_data": "{3552,5590,2,1,2}" "loc_data": "{3552,5590,2,1,2}"
@ -10415,10 +10447,6 @@
"npc_id": "2155", "npc_id": "2155",
"loc_data": "{2871,10199,0,1,0}" "loc_data": "{2871,10199,0,1,0}"
}, },
{
"npc_id": "603",
"loc_data": "{2450,3510,1,1,0}"
},
{ {
"npc_id": "8065", "npc_id": "8065",
"loc_data": "{3399,3464,0,0,1}" "loc_data": "{3399,3464,0,0,1}"
@ -10601,11 +10629,11 @@
}, },
{ {
"npc_id": "2861", "npc_id": "2861",
"loc_data": "{2347,3165,0,0,3}" "loc_data": "{2347,3165,0,1,3}"
}, },
{ {
"npc_id": "4965", "npc_id": "4965",
"loc_data": "{2824,3685,0,0,1}" "loc_data": "{2826,3685,0,0,1}"
}, },
{ {
"npc_id": "2790", "npc_id": "2790",
@ -10813,6 +10841,6 @@
}, },
{ {
"npc_id": "7130", "npc_id": "7130",
"loc_data": "{1625,4689,0,1,0}-{1614,4704,0,1,0}-{1631,4719,0,1,0}-{1651,4705,0,1,0}" "loc_data": "{1625,4689,0,1,0}-{1614,4704,0,1,0}-{1631,4719,0,1,0}-{1651,4705,0,1,0}"
} }
] ]

File diff suppressed because it is too large Load diff

View file

@ -537,7 +537,7 @@
"general_store": "false", "general_store": "false",
"id": "61", "id": "61",
"title": "Fine Fashions", "title": "Fine Fashions",
"stock": "{646,30}-{648,30}-{650,30}-{652,30}-{654,30}-{656,30}-{658,30}-{660,30}-{662,30}-{664,30}-{636,30}-{638,30}-{640,30}-{642,30}-{644,30}-{626,30}-{628,30}-{630,30}-{632,30}-{634,30}" "stock": "{646,5}-{648,5}-{650,5}-{652,5}-{654,5}-{656,5}-{658,5}-{660,5}-{662,5}-{664,5}-{636,5}-{638,5}-{640,5}-{642,5}-{644,5}-{626,5}-{628,5}-{630,30}-{632,30}-{634,30}"
}, },
{ {
"npcs": "1301", "npcs": "1301",
@ -599,8 +599,8 @@
"currency": "995", "currency": "995",
"general_store": "false", "general_store": "false",
"id": "68", "id": "68",
"title": "Grand Season Groceries", "title": "Grand Tree Groceries",
"stock": "{2171,10}-{2128,10}-{1933,10}-{2169,10}-{1957,10}-{1965,10}-{1982,10}-{1985,10}-{2120,10}-{2108,10}-{2102,10}-{2114,10}-{2126,10}-{2025,10}-{1973,10}-{1975,10}-{2130,10}-{1927,10}-{946,10}-{2167,10}-{2164,10}-{2165,10}-{2166,10}" "stock": "{2171,10}-{2128,10}-{1933,10}-{2169,10}-{1957,10}-{1942,10}-{1965,10}-{1982,10}-{1985,10}-{2120,10}-{2108,10}-{2102,10}-{2114,10}-{2126,10}-{2025,10}-{1973,10}-{1975,10}-{2130,10}-{1927,10}-{946,10}-{2167,10}-{2164,10}-{2165,10}-{2166,10}"
}, },
{ {
"npcs": "593", "npcs": "593",
@ -608,8 +608,8 @@
"currency": "995", "currency": "995",
"general_store": "false", "general_store": "false",
"id": "69", "id": "69",
"title": "Frenita's Cookery Shop", "title": "Frenita's Cookery Shop.",
"stock": "{2313,10}-{1955,0}-{1887,10}-{1923,10}-{590,10}-{1935,10}-{1931,30}-{1973,10}-{1933,500}-{1980,10}" "stock": "{2313,5}-{1955,2}-{1887,2}-{1923,2}-{1942,5}-{590,4}-{1935,1}-{1931,8}-{1973,2}-{1933,8}-{1980,20}"
}, },
{ {
"npcs": "545", "npcs": "545",
@ -729,7 +729,7 @@
"stock": "{361,20}-{329,20}-{339,20}-{379,10}-{373,0}-{385,0}" "stock": "{361,20}-{329,20}-{339,20}-{379,10}-{373,0}-{385,0}"
}, },
{ {
"npcs": "", "npcs": "851",
"high_alch": "0", "high_alch": "0",
"currency": "995", "currency": "995",
"general_store": "false", "general_store": "false",
@ -1977,7 +1977,7 @@
"general_store": "false", "general_store": "false",
"id": "223", "id": "223",
"title": "Funch's Fine Groceries", "title": "Funch's Fine Groceries",
"stock": "{2021,10}-{2019,10}-{2015,10}-{2017,10}-{2114,10}-{2128,20}-{2108,20}-{2102,20}-{2126,5}-{2026,20}-{2017,10}-{2114,10}-{2128,10}-{2108,10}" "stock": "{2021,10}-{2019,10}-{2015,10}-{2017,10}-{2114,10}-{2128,20}-{2108,20}-{2102,20}-{2126,5}-{2025,10}-{1973,20}-{1975,10}-{2130,5}-{1927,5}-{946,5}-{2026,20}"
}, },
{ {
"npcs": "578", "npcs": "578",
@ -2149,5 +2149,14 @@
"id": "242", "id": "242",
"title": "Leprechaun Larry's Farming Supplies.", "title": "Leprechaun Larry's Farming Supplies.",
"stock": "{5341,10}-{5343,10}-{5329,10}-{952,10}-{5325,10}-{5331,10}-{1925,10}-{6036,10}-{2026,10}-{1480,10}" "stock": "{5341,10}-{5343,10}-{5329,10}-{952,10}-{5325,10}-{5331,10}-{1925,10}-{6036,10}-{2026,10}-{1480,10}"
},
{
"npcs": "849",
"high_alch": "0",
"currency": "995",
"general_store": "false",
"id": "243",
"title": "Blurberry Bar",
"stock": "{2028,10}-{2030,10}-{2032,10}-{2034,10}-{2036,10}-{2038,10}-{2040,10}"
} }
] ]

View file

@ -1,306 +1,307 @@
package core.game.content.global; package core.game.content.global;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.diary.DiaryType; import core.game.node.entity.player.link.diary.DiaryType;
import core.game.node.item.Item; import core.game.node.item.Item;
import core.game.system.task.Pulse; import core.game.system.task.Pulse;
import rs09.game.world.GameWorld; import rs09.game.world.GameWorld;
import core.game.world.map.Location; import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics; import core.game.world.update.flag.context.Graphics;
/** /**
* Represents an enchanted jewellery. * Represents an enchanted jewellery.
* @author Vexia * @author Vexia
*/ */
public enum EnchantedJewellery { public enum EnchantedJewellery {
RING_OF_SLAYING(new String[] { "Slayer Tower.", "Fremmenik Slayer Dungeon.", "Pollniveach Slayer Dungeon.", "Nowhere." }, new Location[] { Location.create(3429, 3533, 0), Location.create(2793, 3615, 0), Location.create(3313, 2960, 0) }, true, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288), RING_OF_SLAYING(new String[] { "Slayer Tower.", "Fremmenik Slayer Dungeon.", "Pollniveach Slayer Dungeon.", "Nowhere." }, new Location[] { Location.create(3429, 3533, 0), Location.create(2793, 3615, 0), Location.create(3313, 2960, 0) }, true, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288),
RING_OF_DUELING(new String[] { "Al Kharid Duel Arena.", "Castle Wars Arena.", "Nowhere." }, new Location[] { Location.create(3314, 3235, 0), Location.create(2442, 3089, 0) }, true, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566), RING_OF_DUELING(new String[] { "Al Kharid Duel Arena.", "Castle Wars Arena.", "Nowhere." }, new Location[] { Location.create(3314, 3235, 0), Location.create(2442, 3089, 0) }, true, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566),
AMULET_OF_GLORY(new String[] { "Edgeville", "Karamja", "Draynor Village", "Al-Kharid", "Nowhere." }, new Location[] { Location.create(3087, 3495, 0), Location.create(2919, 3175, 0), Location.create(3104, 3249, 0), Location.create(3304, 3124, 0) }, 1712, 1710, 1708, 1706, 1704), AMULET_OF_GLORY(new String[] { "Edgeville", "Karamja", "Draynor Village", "Al-Kharid", "Nowhere." }, new Location[] { Location.create(3087, 3495, 0), Location.create(2919, 3175, 0), Location.create(3104, 3249, 0), Location.create(3304, 3124, 0) }, 1712, 1710, 1708, 1706, 1704),
AMULET_OF_GLORY_T(new String[] { "Edgeville", "Karamja", "Draynor Village", "Al-Kharid", "Nowhere." }, new Location[] { Location.create(3087, 3495, 0), Location.create(2919, 3175, 0), Location.create(3081, 3250, 0), Location.create(3304, 3124, 0) }, 10354, 10356, 10358, 10360, 10362), AMULET_OF_GLORY_T(new String[] { "Edgeville", "Karamja", "Draynor Village", "Al-Kharid", "Nowhere." }, new Location[] { Location.create(3087, 3495, 0), Location.create(2919, 3175, 0), Location.create(3081, 3250, 0), Location.create(3304, 3124, 0) }, 10354, 10356, 10358, 10360, 10362),
GAMES_NECKLACE(new String[] { "Burthorpe", "Barbarian Assault", "Clan Wars", "Bounty Hunter", "Corporeal Beast" }, new Location[] { Location.create(2899, 3563, 0), Location.create(2520, 3571, 0), Location.create(3266, 3686, 0), Location.create(3179, 3685, 0), Location.create(2885, 4372, 2) }, true, 3853, 3855, 3857, 3859, 3861, 3863, 3865, 3867), GAMES_NECKLACE(new String[] { "Burthorpe", "Barbarian Assault", "Clan Wars", "Bounty Hunter", "Corporeal Beast" }, new Location[] { Location.create(2899, 3563, 0), Location.create(2520, 3571, 0), Location.create(3266, 3686, 0), Location.create(3179, 3685, 0), Location.create(2885, 4372, 2) }, true, 3853, 3855, 3857, 3859, 3861, 3863, 3865, 3867),
DIGSITE_PENDANT(new String[] {}, new Location[] { Location.create(3342, 3445, 0) }, true, 11194, 11193, 11192, 11191, 11190), DIGSITE_PENDANT(new String[] {}, new Location[] { Location.create(3342, 3445, 0) }, true, 11194, 11193, 11192, 11191, 11190),
COMBAT_BRACELET(new String[] { "Champions' Guild", "Monastery", "Ranging Guild", "Warriors' Guild", "Nowhere." }, new Location[] { Location.create(3191, 3365, 0), Location.create(3052, 3472, 0), Location.create(2657, 3439, 0), Location.create(2878, 3546, 0) }, 11118, 11120, 11122, 11124, 11126), COMBAT_BRACELET(new String[] { "Champions' Guild", "Monastery", "Ranging Guild", "Warriors' Guild", "Nowhere." }, new Location[] { Location.create(3191, 3365, 0), Location.create(3052, 3472, 0), Location.create(2657, 3439, 0), Location.create(2878, 3546, 0) }, 11118, 11120, 11122, 11124, 11126),
SKILLS_NECKLACE(new String[] { "Fishing Guild", "Mining Guild", "Crafting Guild", "Cooking Guild", "Nowhere." }, new Location[] { Location.create(2611, 3392, 0), Location.create(3016, 3338, 0), Location.create(2933, 3290, 0), Location.create(3143, 3442, 0) }, 11105, 11107, 11109, 11111, 11113), SKILLS_NECKLACE(new String[] { "Fishing Guild", "Mining Guild", "Crafting Guild", "Cooking Guild", "Nowhere." }, new Location[] { Location.create(2611, 3392, 0), Location.create(3016, 3338, 0), Location.create(2933, 3290, 0), Location.create(3143, 3442, 0) }, 11105, 11107, 11109, 11111, 11113),
RING_OF_WEALTH(new String[] {"Grand Exchange","Nowhere."}, new Location[] {Location.create(3163, 3464, 0)},14646,14644,14642,14640,14638); RING_OF_WEALTH(new String[] {"Grand Exchange","Nowhere."}, new Location[] {Location.create(3163, 3464, 0)},14646,14644,14642,14640,14638);
/** /**
* Represents the teleport animation. * Represents the teleport animation.
*/ */
private static final Animation ANIMATION = new Animation(714); private static final Animation ANIMATION = new Animation(714);
/** /**
* Represents the graphics to use. * Represents the graphics to use.
*/ */
private static final Graphics GRAPHICS = new Graphics(308, 100, 50); private static final Graphics GRAPHICS = new Graphics(308, 100, 50);
/** /**
* Represents the charge numbers. * Represents the charge numbers.
*/ */
private static final char[] NUMBERS = new char[] { '1', '2', '3', '4', '5', '6', '7', '8' }; private static final char[] NUMBERS = new char[] { '1', '2', '3', '4', '5', '6', '7', '8' };
/** /**
* Represents the teleport options. * Represents the teleport options.
*/ */
private final String[] options; private final String[] options;
/** /**
* Represents the locations. * Represents the locations.
*/ */
private final Location[] locations; private final Location[] locations;
/** /**
* Represents the ids of the jewellery. * Represents the ids of the jewellery.
*/ */
private final int[] ids; private final int[] ids;
/** /**
* Represents if it crumbles away into nothing. * Represents if it crumbles away into nothing.
*/ */
private final boolean crumble; private final boolean crumble;
/** /**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}. * Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options. * @param options the options.
* @param locations the locations. * @param locations the locations.
* @parma crumble if it crumbles. * @parma crumble if it crumbles.
* @param ids the ids. * @param ids the ids.
*/ */
EnchantedJewellery(final String[] options, final Location[] locations, final boolean crumble, final int... ids) { EnchantedJewellery(final String[] options, final Location[] locations, final boolean crumble, final int... ids) {
this.options = options; this.options = options;
this.locations = locations; this.locations = locations;
this.ids = ids; this.ids = ids;
this.crumble = crumble; this.crumble = crumble;
} }
/** /**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}. * Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options. * @param options the options.
* @param locations the locations. * @param locations the locations.
* @param ids the ids. * @param ids the ids.
*/ */
EnchantedJewellery(final String[] options, final Location[] locations, final int... ids) { EnchantedJewellery(final String[] options, final Location[] locations, final int... ids) {
this(options, locations, false, ids); this(options, locations, false, ids);
} }
/** /**
* Method used to teleport the player to the desired location. * Method used to teleport the player to the desired location.
* @param player the player. * @param player the player.
* @param item the item. * @param item the item.
* @param index the index. * @param index the index.
* @param operate If the player is operating. * @param operate If the player is operating.
*/ */
public void use(final Player player, final Item item, final int index, boolean operate) { public void use(final Player player, final Item item, final int index, boolean operate) {
if ((index + 1) == getIds().length || item.getSlot() < 0) { if ((index + 1) == getIds().length || item.getSlot() < 0) {
return; return;
} }
if (index > getLocations().length - 1) { if (index > getLocations().length - 1) {
return; return;
} }
int itemIndex = getItemIndex(item); int itemIndex = getItemIndex(item);
Item replace = item; Item replace = item;
if (!isLast(itemIndex)) { if (!isLast(itemIndex)) {
if (!(isCrumble() && itemIndex == getIds().length - 1)) { if (!(isCrumble() && itemIndex == getIds().length - 1)) {
replace = getReplace(getNext(itemIndex)); replace = getReplace(getNext(itemIndex));
} }
} else { } else {
if (!isCrumble()) { if (!isCrumble()) {
replace = getReplace(getIds()[getIds().length - 1]); replace = getReplace(getIds()[getIds().length - 1]);
} }
} }
if (index > getLocations().length - 1) { if (index > getLocations().length - 1) {
return; return;
} }
if (!operate && !player.getInventory().containsItem(item)) { if (!operate && !player.getInventory().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)"); player.sendMessage("Ooops, you don't have it anymore ;)");
return; return;
} else if (operate && !player.getEquipment().containsItem(item)) { } else if (operate && !player.getEquipment().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)"); player.sendMessage("Ooops, you don't have it anymore ;)");
return; return;
} }
if (teleport(player, itemIndex, replace, getLocation(index))) { if (teleport(player, itemIndex, replace, getLocation(index))) {
if (!isLast(itemIndex) && !(isCrumble() && itemIndex == getIds().length - 1)) { if (!isLast(itemIndex) && !(isCrumble() && itemIndex == getIds().length - 1)) {
if (operate) { if (operate) {
player.getEquipment().replace(replace, item.getSlot()); player.getEquipment().replace(replace, item.getSlot());
} else { } else {
player.getInventory().replace(replace, item.getSlot()); player.getInventory().replace(replace, item.getSlot());
} }
} else { } else {
if (isCrumble()) { if (isCrumble()) {
if (operate) { if (operate) {
player.getEquipment().replace(null, item.getSlot()); player.getEquipment().replace(null, item.getSlot());
} else { } else {
if(item.getName().contains("slaying")){ if(item.getName().contains("slaying")){
player.getInventory().replace(new Item(4155, 1), item.getSlot()); player.getInventory().replace(new Item(4155, 1), item.getSlot());
player.sendMessage("Your Ring of Slaying reverts back into a regular enchanted gem."); player.sendMessage("Your Ring of Slaying reverts back into a regular enchanted gem.");
} else { } else {
player.getInventory().replace(null, item.getSlot()); player.getInventory().replace(null, item.getSlot());
} }
} }
} }
} }
if (getLocation(index).withinDistance(new Location(2657,3439,0))) { if (getLocation(index).withinDistance(new Location(2657,3439,0))) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE,2,0); player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE,2,0);
} }
} }
} }
/** /**
* Method used to teleport to a location. * Method used to teleport to a location.
* @param player the player. * @param player the player.
* @param itemIndex the old item index. * @param itemIndex the old item index.
* @param item the item. * @param item the item.
* @param location the location. * @param location the location.
*/ */
private boolean teleport(final Player player, final int itemIndex, final Item item, final Location location) { private boolean teleport(final Player player, final int itemIndex, final Item item, final Location location) {
if (player.isTeleBlocked()) { if (player.isTeleBlocked()) {
player.sendMessage("A magical force has stopped you from teleporting."); player.sendMessage("A magical force has stopped you from teleporting.");
return false; return false;
} }
if (!player.getZoneMonitor().teleport(1, item)) { if (!player.getZoneMonitor().teleport(1, item)) {
return false; return false;
} }
player.lock(); player.lock();
player.visualize(ANIMATION, GRAPHICS); player.visualize(ANIMATION, GRAPHICS);
player.getImpactHandler().setDisabledTicks(4); player.getAudioManager().send(200);
GameWorld.getPulser().submit(new Pulse(4, player) { player.getImpactHandler().setDisabledTicks(4);
@Override GameWorld.getPulser().submit(new Pulse(4, player) {
public boolean pulse() { @Override
player.unlock(); public boolean pulse() {
player.getProperties().setTeleportLocation(location); player.unlock();
player.getAnimator().reset(); player.getProperties().setTeleportLocation(location);
return true; player.getAnimator().reset();
} return true;
}); }
return true; });
} return true;
}
/**
* Gets the charges of an item. /**
* @param item the item. * Gets the charges of an item.
* @return the charges. * @param item the item.
*/ * @return the charges.
public static String getCharges(Item item) { */
String[] tokens = item.getName().replace("(t", "(").replace("(", " ").replace(")", "").split(" "); public static String getCharges(Item item) {
return tokens[tokens.length - 1]; String[] tokens = item.getName().replace("(t", "(").replace("(", " ").replace(")", "").split(" ");
} return tokens[tokens.length - 1];
}
/**
* Gets the replacement item. /**
* @param id the id. * Gets the replacement item.
* @return the item. * @param id the id.
*/ * @return the item.
public Item getReplace(int id) { */
return new Item(id); public Item getReplace(int id) {
} return new Item(id);
}
/**
* Gets the name. /**
* @param item the item. * Gets the name.
* @return the name. * @param item the item.
*/ * @return the name.
public String getName(Item item) { */
String name = item.getName().toLowerCase().replace("(t", "(").replace("(", "").replace(")", ""); public String getName(Item item) {
for (char number : NUMBERS) { String name = item.getName().toLowerCase().replace("(t", "(").replace("(", "").replace(")", "");
name = name.replace(number, '/'); for (char number : NUMBERS) {
} name = name.replace(number, '/');
return name.trim().replace("/", ""); }
} return name.trim().replace("/", "");
}
/**
* Gets the name type. /**
* @param item the item. * Gets the name type.
* @return * @param item the item.
*/ * @return
public String getNameType(Item item) { */
return this == GAMES_NECKLACE ? "games necklace" : this == DIGSITE_PENDANT ? "necklace" : this == COMBAT_BRACELET ? "bracelet" : this == SKILLS_NECKLACE ? "necklace" : item.getName().toLowerCase().split(" ")[0]; public String getNameType(Item item) {
} return this == GAMES_NECKLACE ? "games necklace" : this == DIGSITE_PENDANT ? "necklace" : this == COMBAT_BRACELET ? "bracelet" : this == SKILLS_NECKLACE ? "necklace" : item.getName().toLowerCase().split(" ")[0];
}
/**
* Checks if the index is last. /**
* @param index the index. * Checks if the index is last.
* @return {@code True} if so. * @param index the index.
*/ * @return {@code True} if so.
public boolean isLast(int index) { */
return !isCrumble() ? index == (ids.length - 1) : index == ids.length; public boolean isLast(int index) {
} return !isCrumble() ? index == (ids.length - 1) : index == ids.length;
}
/**
* Gets the next index. /**
* @param index the index. * Gets the next index.
* @return the new id * @param index the index.
*/ * @return the new id
public int getNext(int index) { */
return ids[index + 1]; public int getNext(int index) {
} return ids[index + 1];
}
/**
* Gets the location. /**
* @param index the index. * Gets the location.
* @return the location. * @param index the index.
*/ * @return the location.
public Location getLocation(int index) { */
if (index > locations.length) { public Location getLocation(int index) {
index = locations.length - 1; if (index > locations.length) {
} index = locations.length - 1;
return locations[index]; }
} return locations[index];
}
/**
* Gets the options. /**
* @return The options. * Gets the options.
*/ * @return The options.
public String[] getOptions() { */
return options; public String[] getOptions() {
} return options;
}
/**
* Gets the locations. /**
* @return The locations. * Gets the locations.
*/ * @return The locations.
public Location[] getLocations() { */
return locations; public Location[] getLocations() {
} return locations;
}
/**
* Gets the ids. /**
* @return The ids. * Gets the ids.
*/ * @return The ids.
public int[] getIds() { */
return ids; public int[] getIds() {
} return ids;
}
public boolean isCrumble() {
return crumble; public boolean isCrumble() {
} return crumble;
}
/**
* Gets the enchanted jewellery. /**
* @param item the item. * Gets the enchanted jewellery.
* @return {@code EnchantedJewellery}. * @param item the item.
*/ * @return {@code EnchantedJewellery}.
public static EnchantedJewellery forItem(final Item item) { */
for (EnchantedJewellery jewellery : values()) { public static EnchantedJewellery forItem(final Item item) {
for (int i : jewellery.getIds()) { for (EnchantedJewellery jewellery : values()) {
if (i == item.getId()) { for (int i : jewellery.getIds()) {
return jewellery; if (i == item.getId()) {
} return jewellery;
} }
} }
return null; }
} return null;
}
/**
* Gets the index. /**
* @param item the item. * Gets the index.
* @return the item index. * @param item the item.
*/ * @return the item index.
public int getItemIndex(Item item) { */
for (int i = 0; i < getIds().length; i++) { public int getItemIndex(Item item) {
if (getIds()[i] == item.getId()) { for (int i = 0; i < getIds().length; i++) {
return i; if (getIds()[i] == item.getId()) {
} return i;
} }
return -1; }
} return -1;
}
} }

View file

@ -125,6 +125,7 @@ public final class AnimalMagnetismPlugin extends OptionHandler {
player.getInventory().replace(new Item(4252), item.getSlot()); player.getInventory().replace(new Item(4252), item.getSlot());
player.sendMessage("...and the world changes around you.", 4); player.sendMessage("...and the world changes around you.", 4);
player.getTeleporter().send(Location.create(3658, 3517, 0), TeleportType.ECTOPHIAL); player.getTeleporter().send(Location.create(3658, 3517, 0), TeleportType.ECTOPHIAL);
player.getAudioManager().send(4580);
player.sendMessage("You empty the ectoplasm onto the ground around your feet..."); player.sendMessage("You empty the ectoplasm onto the ground around your feet...");
player.getPulseManager().run(new Pulse(9, player) { player.getPulseManager().run(new Pulse(9, player) {
@Override @Override

View file

@ -1,5 +1,6 @@
package core.game.content.zone.phasmatys; package core.game.content.zone.phasmatys;
import api.ContentAPI;
import core.game.content.global.Bones; import core.game.content.global.Bones;
import core.game.content.global.action.ClimbActionHandler; import core.game.content.global.action.ClimbActionHandler;
import core.game.interaction.Option; import core.game.interaction.Option;
@ -75,16 +76,16 @@ public final class PhasmatysZone extends MapZone implements Plugin<Object> {
return true; return true;
case 5267: case 5267:
player.animate(Animation.create(536)); player.animate(Animation.create(536));
player.getPacketDispatch().sendMessage("The trapdoor opens..."); ContentAPI.sendMessage(player, "The trapdoor opens...");
SceneryBuilder.replace((Scenery) target, ((Scenery) target).transform(5268)); SceneryBuilder.replace((Scenery) target, ((Scenery) target).transform(5268));
return true; return true;
case 5268: case 5268:
if (option.getName().equals("Close")) { if (option.getName().equals("Close")) {
player.animate(Animation.create(535)); player.animate(Animation.create(535));
player.getPacketDispatch().sendMessage("You close the trapdoor."); ContentAPI.sendMessage(player, "You close the trapdoor.");
SceneryBuilder.replace((Scenery) target, ((Scenery) target).transform(5267)); SceneryBuilder.replace((Scenery) target, ((Scenery) target).transform(5267));
} else { } else {
player.getPacketDispatch().sendMessage("You climb down through the trapdoor..."); ContentAPI.sendMessage(player, "You climb down through the trapdoor...");
player.getProperties().setTeleportLocation(Location.create(3669, 9888, 3)); player.getProperties().setTeleportLocation(Location.create(3669, 9888, 3));
} }
return true; return true;

View file

@ -1,5 +1,6 @@
package core.game.interaction.city; package core.game.interaction.city;
import api.ContentAPI;
import core.cache.def.impl.SceneryDefinition; import core.cache.def.impl.SceneryDefinition;
import core.game.content.global.action.ClimbActionHandler; import core.game.content.global.action.ClimbActionHandler;
import core.game.interaction.OptionHandler; import core.game.interaction.OptionHandler;
@ -8,11 +9,12 @@ import core.game.node.entity.player.Player;
import core.game.node.scenery.Scenery; import core.game.node.scenery.Scenery;
import core.game.node.scenery.SceneryBuilder; import core.game.node.scenery.SceneryBuilder;
import core.game.world.map.Location; import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
/** /**
* Represents the plugin used to handle edgeville related interactions. * Represents the plugin used to handle Edgeville related interactions.
* *
* @author 'Vexia * @author 'Vexia
* @version 1.0 * @version 1.0
@ -31,6 +33,7 @@ public final class EdgevilleNodePlugin extends OptionHandler {
SceneryDefinition.forId(26933).getHandlers().put("option:open", this); SceneryDefinition.forId(26933).getHandlers().put("option:open", this);
SceneryDefinition.forId(26934).getHandlers().put("option:close", this); SceneryDefinition.forId(26934).getHandlers().put("option:close", this);
SceneryDefinition.forId(26934).getHandlers().put("option:climb-down", this);
return this; return this;
} }
@ -41,7 +44,7 @@ public final class EdgevilleNodePlugin extends OptionHandler {
case 9262: case 9262:
case 9261: case 9261:
case 30806: case 30806:
player.getPacketDispatch().sendMessage("There doesn't seem to be any seeds on this rosebush."); ContentAPI.sendMessage(player, "There doesn't seem to be any seeds on this rosebush.");
break; break;
case 12265: case 12265:
ClimbActionHandler.climb(player, null, Location.create(3078, 3493, 0)); ClimbActionHandler.climb(player, null, Location.create(3078, 3493, 0));
@ -53,14 +56,21 @@ public final class EdgevilleNodePlugin extends OptionHandler {
player.getConfigManager().set(680, 0); player.getConfigManager().set(680, 0);
} }
break; break;
case 26933: // Trapdoors at edgeville dungeon entrance case 26933: // Edgeville Dungeon trapdoor (when closed)
if (option.equalsIgnoreCase("open")) { if (option.equalsIgnoreCase("open")) {
SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(26934), 500); player.animate(Animation.create(536));
ContentAPI.sendMessage(player, "The trapdoor opens...");
SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(26934), 500);
} }
break; break;
case 26934: // Trapdoors at edgeville dungeon entrance case 26934: // Edgeville Dungeon trapdoor (when open)
if (option.equalsIgnoreCase("close")) { if (option.equalsIgnoreCase("close")) {
player.animate(Animation.create(535));
ContentAPI.sendMessage(player, "You close the trapdoor.");
SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(26933)); SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(26933));
} else if (option.equalsIgnoreCase("climb-down")) {
ContentAPI.sendMessage(player, "You climb down through the trapdoor...");
ClimbActionHandler.climbLadder(player, (Scenery) node, option);
} }
} }
return true; return true;

View file

@ -244,14 +244,14 @@ public final class TrollheimPlugin extends OptionHandler {
case "climb-up": case "climb-up":
switch (id) { switch (id) {
case 18834: case 18834:
ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, new Location(2828, 3678), "You climb up the ladder to the surface."); ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, new Location(2828, 3678), "You clamber onto the windswept roof of the Troll Stronghold.");
break; break;
} }
break; break;
case "climb-down": case "climb-down":
switch (id) { switch (id) {
case 18833: case 18833:
ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, new Location(2831, 10076, 2), "You climb down the ladder."); ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, new Location(2831, 10076, 2), "You clamber back inside the Troll Stronghold.");
break; break;
} }
break; break;
@ -741,7 +741,7 @@ public final class TrollheimPlugin extends OptionHandler {
public boolean handle(int interfaceId, int buttonId) { public boolean handle(int interfaceId, int buttonId) {
switch (stage) { switch (stage) {
case 0: case 0:
npc("Hello traveller. What can I do for you?"); npc("Hello traveler. What can I do for you?");
stage = 1; stage = 1;
break; break;
case 1: case 1:
@ -794,7 +794,7 @@ public final class TrollheimPlugin extends OptionHandler {
break; break;
case 13: case 13:
if (!player.getInventory().hasSpaceFor(CLIMBING_BOOTS)) { if (!player.getInventory().hasSpaceFor(CLIMBING_BOOTS)) {
player("I don't have enough space in my backback right", "this second."); player("I don't have enough space in my backpack right", "this second.");
stage = 50; stage = 50;
return true; return true;
} }

View file

@ -1,51 +1,51 @@
package core.game.interaction.item.withobject; package core.game.interaction.item.withobject;
import core.game.interaction.NodeUsageEvent; import core.game.interaction.NodeUsageEvent;
import core.game.interaction.UseWithHandler; import core.game.interaction.UseWithHandler;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.item.Item; import core.game.node.item.Item;
import core.game.system.task.Pulse; import core.game.system.task.Pulse;
import rs09.game.world.GameWorld; import rs09.game.world.GameWorld;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
/** /**
* Fills an ectophial. * Fills an ectophial.
* @author Vexia * @author Vexia
*/ */
@Initializable @Initializable
public class EctophialFillPlugin extends UseWithHandler { public class EctophialFillPlugin extends UseWithHandler {
/** /**
* Constructs a new {@code EctophialFillPlugin} {@code Object} * Constructs a new {@code EctophialFillPlugin} {@code Object}
*/ */
public EctophialFillPlugin() { public EctophialFillPlugin() {
super(4252); super(4252);
} }
@Override @Override
public Plugin<Object> newInstance(Object arg) throws Throwable { public Plugin<Object> newInstance(Object arg) throws Throwable {
addHandler(5282, OBJECT_TYPE, this); addHandler(5282, OBJECT_TYPE, this);
return this; return this;
} }
@Override @Override
public boolean handle(NodeUsageEvent event) { public boolean handle(NodeUsageEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
player.lock(3); player.lock(3);
player.animate(Animation.create(1652)); player.animate(Animation.create(1652));
GameWorld.getPulser().submit(new Pulse(3, player) { GameWorld.getPulser().submit(new Pulse(3, player) {
@Override @Override
public boolean pulse() { public boolean pulse() {
if (player.getInventory().remove(new Item(4252))) { if (player.getInventory().remove(new Item(4252))) {
player.getInventory().add(new Item(4251)); player.getInventory().add(new Item(4251));
} }
player.sendMessage("You refill the ectophial."); player.sendMessage("You refill the ectophial from the Ectofuntus.");
return true; return true;
} }
}); });
return true; return true;
} }
} }

View file

@ -78,6 +78,7 @@ public class MountedGloryPlugin extends OptionHandler {
} }
player.lock(); player.lock();
player.visualize(ANIMATION, GRAPHICS); player.visualize(ANIMATION, GRAPHICS);
player.getAudioManager().send(200);
player.getImpactHandler().setDisabledTicks(4); player.getImpactHandler().setDisabledTicks(4);
GameWorld.getPulser().submit(new Pulse(4, player) { GameWorld.getPulser().submit(new Pulse(4, player) {
@Override @Override

View file

@ -1,139 +1,139 @@
package core.game.node.entity.skill.herblore; package core.game.node.entity.skill.herblore;
import core.game.node.entity.skill.SkillPulse; import core.game.node.entity.skill.SkillPulse;
import core.game.node.entity.skill.Skills; import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.item.Item; import core.game.node.item.Item;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.tools.StringUtils; import core.tools.StringUtils;
/** /**
* Represents the skill pulse used to handle the creating of potions. * Represents the skill pulse used to handle the creating of potions.
* @author 'Vexia * @author 'Vexia
*/ */
public final class HerblorePulse extends SkillPulse<Item> { public final class HerblorePulse extends SkillPulse<Item> {
/** /**
* Represents the vial of water item. * Represents the vial of water item.
*/ */
public static final Item VIAL_OF_WATER = new Item(227); public static final Item VIAL_OF_WATER = new Item(227);
/** /**
* Represents the coonut milk item. * Represents the coonut milk item.
*/ */
public static final Item COCONUT_MILK = new Item(5935); public static final Item COCONUT_MILK = new Item(5935);
/** /**
* Represents the animation to use when making a potion. * Represents the animation to use when making a potion.
*/ */
private static final Animation ANIMATION = new Animation(363); private static final Animation ANIMATION = new Animation(363);
/** /**
* Represents the generic potion. * Represents the generic potion.
*/ */
private final GenericPotion potion; private final GenericPotion potion;
/** /**
* Represents the amount to make. * Represents the amount to make.
*/ */
private int amount; private int amount;
/** /**
* Represents the initial amount to make. * Represents the initial amount to make.
*/ */
private int initialAmount; private int initialAmount;
/** /**
* Represents the cycles. * Represents the cycles.
*/ */
private int cycles; private int cycles;
/** /**
* Constructs a new {@code HerblorePulse} {@code Object}. * Constructs a new {@code HerblorePulse} {@code Object}.
* @param player the player. * @param player the player.
* @param node the node. * @param node the node.
*/ */
public HerblorePulse(final Player player, final Item node, final int amount, final GenericPotion potion) { public HerblorePulse(final Player player, final Item node, final int amount, final GenericPotion potion) {
super(player, node); super(player, node);
this.amount = amount; this.amount = amount;
this.initialAmount = amount; this.initialAmount = amount;
this.potion = potion; this.potion = potion;
} }
@Override @Override
public boolean checkRequirements() { public boolean checkRequirements() {
if (!player.getQuestRepository().isComplete("Druidic Ritual")) { if (!player.getQuestRepository().isComplete("Druidic Ritual")) {
player.getPacketDispatch().sendMessage("You must complete the Druidic Ritual quest before you can use Herblore."); player.getPacketDispatch().sendMessage("You must complete the Druidic Ritual quest before you can use Herblore.");
return false; return false;
} }
if (player.getSkills().getLevel(Skills.HERBLORE) < potion.getLevel()) { if (player.getSkills().getLevel(Skills.HERBLORE) < potion.getLevel()) {
player.getPacketDispatch().sendMessage("You need a Herblore level of at least " + potion.getLevel() + " in order to do this."); player.getPacketDispatch().sendMessage("You need a Herblore level of at least " + potion.getLevel() + " in order to do this.");
return false; return false;
} }
if (!player.getInventory().containsItem(potion.getBase()) || !player.getInventory().containsItem(potion.getIngredient())) { if (!player.getInventory().containsItem(potion.getBase()) || !player.getInventory().containsItem(potion.getIngredient())) {
return false; return false;
} }
return true; return true;
} }
@Override @Override
public void animate() { public void animate() {
} }
@Override @Override
public boolean reward() { public boolean reward() {
if (potion.getBase().getId() == VIAL_OF_WATER.getId()) { if (potion.getBase().getId() == VIAL_OF_WATER.getId()) {
if (initialAmount == 1 && getDelay() == 1) { if (initialAmount == 1 && getDelay() == 1) {
player.animate(ANIMATION); player.animate(ANIMATION);
setDelay(3); setDelay(3);
return false; return false;
} }
handleUnfinished(); handleUnfinished();
} else { } else {
if (initialAmount == 1 && getDelay() == 1) { if (initialAmount == 1 && getDelay() == 1) {
player.animate(ANIMATION); player.animate(ANIMATION);
setDelay(3); setDelay(3);
return false; return false;
} }
if (getDelay() == 1) { if (getDelay() == 1) {
setDelay(3); setDelay(3);
player.animate(ANIMATION); player.animate(ANIMATION);
return false; return false;
} }
handleFinished(); handleFinished();
} }
amount--; amount--;
return amount == 0; return amount == 0;
} }
/** /**
* Method used to handle the potion making of an unf-potion. * Method used to handle the potion making of an unf-potion.
*/ */
public void handleUnfinished() { public void handleUnfinished() {
if (cycles == 0) { if (cycles == 0) {
player.animate(ANIMATION); player.animate(ANIMATION);
} }
if ((player.getInventory().containsItem(potion.getBase()) && player.getInventory().containsItem(potion.getIngredient())) && player.getInventory().remove(potion.getBase(), potion.getIngredient())) { if ((player.getInventory().containsItem(potion.getBase()) && player.getInventory().containsItem(potion.getIngredient())) && player.getInventory().remove(potion.getBase(), potion.getIngredient())) {
final Item item = potion.getProduct(); final Item item = potion.getProduct();
player.getInventory().add(item); player.getInventory().add(item);
player.getPacketDispatch().sendMessage("You put the" + StringUtils.formatDisplayName(potion.getIngredient().getName().replace("Clean", "")) + " Leaf into the vial of water."); player.getPacketDispatch().sendMessage("You put the" + StringUtils.formatDisplayName(potion.getIngredient().getName().toLowerCase().replace("clean", "")) + " leaf into the vial of water.");
if (cycles++ == 3) { if (cycles++ == 3) {
player.animate(ANIMATION); player.animate(ANIMATION);
cycles = 0; cycles = 0;
} }
} }
} }
/** /**
* Method used to handle the finished potion making. * Method used to handle the finished potion making.
*/ */
public void handleFinished() { public void handleFinished() {
if ((player.getInventory().containsItem(potion.getBase()) && player.getInventory().containsItem(potion.getIngredient())) && player.getInventory().remove(potion.getBase(), potion.getIngredient())) { if ((player.getInventory().containsItem(potion.getBase()) && player.getInventory().containsItem(potion.getIngredient())) && player.getInventory().remove(potion.getBase(), potion.getIngredient())) {
final Item item = potion.getProduct(); final Item item = potion.getProduct();
player.getInventory().add(item); player.getInventory().add(item);
player.getSkills().addExperience(Skills.HERBLORE, potion.getExperience(), true); player.getSkills().addExperience(Skills.HERBLORE, potion.getExperience(), true);
player.getPacketDispatch().sendMessage("You mix the " + potion.getIngredient().getName().toLowerCase() + " into your potion."); player.getPacketDispatch().sendMessage("You mix the " + potion.getIngredient().getName().toLowerCase() + " into your potion.");
player.animate(ANIMATION); player.animate(ANIMATION);
} }
} }
} }

View file

@ -1,5 +1,6 @@
package rs09.game.node.entity.skill.agility package rs09.game.node.entity.skill.agility
import api.ContentAPI
import core.cache.def.impl.ItemDefinition import core.cache.def.impl.ItemDefinition
import core.cache.def.impl.NPCDefinition import core.cache.def.impl.NPCDefinition
import core.cache.def.impl.SceneryDefinition import core.cache.def.impl.SceneryDefinition
@ -61,14 +62,22 @@ class BarbarianOutpostCourse
player.packetDispatch.sendMessage("You cannot climb from this side.") player.packetDispatch.sendMessage("You cannot climb from this side.")
} }
val flag = if (node.location == Location(2536, 3553, 0)) 4 else if (node.location == Location(2539, 3553, 0)) 5 else 6 val flag = if (node.location == Location(2536, 3553, 0)) 4 else if (node.location == Location(2539, 3553, 0)) 5 else 6
player.packetDispatch.sendMessage("You climb the low wall...") ContentAPI.sendMessage(player, "You climb the low wall...")
AgilityHandler.forceWalk(player, flag, node.location.transform(-1, 0, 0), node.location.transform(1, 0, 0), Animation.create(839), 10, 13.5, null) AgilityHandler.forceWalk(player, flag, node.location.transform(-1, 0, 0), node.location.transform(1, 0, 0), Animation.create(839), 10, 13.5, null)
} }
455 -> player.barcrawlManager.read() 455 -> player.barcrawlManager.read()
385 -> { 385 -> {
player.packetDispatch.sendMessage("The scorpion stings you!") ContentAPI.sendMessage(player, "The scorpion stings you!")
player.impactHandler.manualHit(player, 3, HitsplatType.NORMAL) player.impactHandler.manualHit(player, 3, HitsplatType.NORMAL)
} }
386 -> {
ContentAPI.sendMessage(player, "The scorpion stings you!")
player.impactHandler.manualHit(player, 3, HitsplatType.NORMAL)
}
387 -> {
ContentAPI.sendMessage(player, "The scorpion stings you!")
player.impactHandler.manualHit(player, 3, HitsplatType.NORMAL)
}
} }
return true return true
} }
@ -80,15 +89,15 @@ class BarbarianOutpostCourse
*/ */
private fun handleRopeSwing(player: Player, `object`: Scenery) { private fun handleRopeSwing(player: Player, `object`: Scenery) {
if (player.location.y < 3554) { if (player.location.y < 3554) {
player.packetDispatch.sendMessage("You cannot do that from here.") ContentAPI.sendMessage(player, "You cannot do that from here.")
return return
} }
if (ropeDelay > GameWorld.ticks) { if (ropeDelay > GameWorld.ticks) {
player.packetDispatch.sendMessage("The rope is being used.") ContentAPI.sendMessage(player, "The rope is being used.")
return return
} }
if (AgilityHandler.hasFailed(player, 1, 0.1)) { if (AgilityHandler.hasFailed(player, 1, 0.1)) {
AgilityHandler.fail(player, 0, Location.create(2549, 9951, 0), null, getHitAmount(player), "You slip and fall to the pit bellow.") AgilityHandler.fail(player, 0, Location.create(2549, 9951, 0), null, getHitAmount(player), "You slip and fall to the pit below.")
return return
} }
ropeDelay = GameWorld.ticks + 2 ropeDelay = GameWorld.ticks + 2
@ -104,7 +113,7 @@ class BarbarianOutpostCourse
private fun handleLogBalance(player: Player, `object`: Scenery) { private fun handleLogBalance(player: Player, `object`: Scenery) {
val failed = AgilityHandler.hasFailed(player, 1, 0.5) val failed = AgilityHandler.hasFailed(player, 1, 0.5)
val end = if (failed) Location.create(2545, 3546, 0) else Location.create(2541, 3546, 0) val end = if (failed) Location.create(2545, 3546, 0) else Location.create(2541, 3546, 0)
player.packetDispatch.sendMessage("You walk carefully across the slippery log...") ContentAPI.sendMessage(player, "You walk carefully across the slippery log...")
AgilityHandler.walk(player, if (failed) -1 else 1, Location.create(2551, 3546, 0), end, Animation.create(155), if (failed) 0.0 else 13.5, if (failed) null else "...You make it safely to the other side.") AgilityHandler.walk(player, if (failed) -1 else 1, Location.create(2551, 3546, 0), end, Animation.create(155), if (failed) 0.0 else 13.5, if (failed) null else "...You make it safely to the other side.")
if (failed) { if (failed) {
AgilityHandler.walk(player, -1, player.location, Location.create(2545, 3546, 0), Animation.create(155), 0.0, null) AgilityHandler.walk(player, -1, player.location, Location.create(2545, 3546, 0), Animation.create(155), 0.0, null)
@ -152,9 +161,9 @@ class BarbarianOutpostCourse
val failed = AgilityHandler.hasFailed(player, 1, 0.3) val failed = AgilityHandler.hasFailed(player, 1, 0.3)
val end = if (failed) Location.create(2534, 3547, 1) else Location.create(2532, 3547, 1) val end = if (failed) Location.create(2534, 3547, 1) else Location.create(2532, 3547, 1)
AgilityHandler.walk(player, if (failed) -1 else 3, Location.create(2536, 3547, 1), end, Animation.create(157), if (failed) 0.0 else 22.0, if (failed) null else "You skillfully edge across the gap.") AgilityHandler.walk(player, if (failed) -1 else 3, Location.create(2536, 3547, 1), end, Animation.create(157), if (failed) 0.0 else 22.0, if (failed) null else "You skillfully edge across the gap.")
player.packetDispatch.sendMessage("You put your foot on the ledge and try to edge across..") ContentAPI.sendMessage(player, "You put your foot on the ledge and try to edge across..")
if (failed) { if (failed) {
AgilityHandler.fail(player, 3, Location.create(2534, 3545, 0), Animation(760), getHitAmount(player), "You slip and fall to the pit bellow.") AgilityHandler.fail(player, 3, Location.create(2534, 3545, 0), Animation(760), getHitAmount(player), "You slip and fall to the pit below.")
return return
} }
} }
@ -169,6 +178,8 @@ class BarbarianOutpostCourse
SceneryDefinition.forId(1948).handlers["option:climb-over"] = this SceneryDefinition.forId(1948).handlers["option:climb-over"] = this
ItemDefinition.forId(455).handlers["option:read"] = this ItemDefinition.forId(455).handlers["option:read"] = this
NPCDefinition.forId(385).handlers["option:pick-up"] = this NPCDefinition.forId(385).handlers["option:pick-up"] = this
NPCDefinition.forId(386).handlers["option:pick-up"] = this
NPCDefinition.forId(387).handlers["option:pick-up"] = this
PluginManager.definePlugin(BarbarianGuardDialogue()) PluginManager.definePlugin(BarbarianGuardDialogue())
} }
@ -226,7 +237,7 @@ class BarbarianOutpostCourse
} }
1 -> when (buttonId) { 1 -> when (buttonId) {
1 -> { 1 -> {
player("I want to come throught his gate.") player("I want to come through this gate.")
stage = 5 stage = 5
} }
2 -> { 2 -> {

View file

@ -1,5 +1,6 @@
package rs09.game.node.entity.skill.agility package rs09.game.node.entity.skill.agility
import api.ContentAPI
import core.cache.def.impl.SceneryDefinition import core.cache.def.impl.SceneryDefinition
import core.game.node.Node import core.game.node.Node
import core.game.node.scenery.Scenery import core.game.node.scenery.Scenery
@ -34,41 +35,41 @@ class GnomeStrongholdCourse
when (`object`.id) { when (`object`.id) {
2295 -> { 2295 -> {
TRAINERS[0]!!.sendChat("Okay get over that log, quick quick!") TRAINERS[0]!!.sendChat("Okay get over that log, quick quick!")
player.packetDispatch.sendMessage("You walk carefully across the slippery log...") ContentAPI.sendMessage(player, "You walk carefully across the slippery log...")
AgilityHandler.walk(player, 0, Location.create(2474, 3436, 0), Location.create(2474, 3429, 0), Animation.create(155), 7.5, "...You make it safely to the other side.") AgilityHandler.walk(player, 0, Location.create(2474, 3436, 0), Location.create(2474, 3429, 0), Animation.create(155), 7.5, "...You make it safely to the other side.")
return true return true
} }
2285 -> { 2285 -> {
TRAINERS[1]!!.sendChat("Move it, move it, move it!") TRAINERS[1]!!.sendChat("Move it, move it, move it!")
player.packetDispatch.sendMessage("You climb the netting...") ContentAPI.sendMessage(player, "You climb the netting...")
AgilityHandler.climb(player, 1, Animation.create(828), `object`.location.transform(0, -1, 1), 7.5, null) AgilityHandler.climb(player, 1, Animation.create(828), `object`.location.transform(0, -1, 1), 7.5, null)
return true return true
} }
35970 -> { 35970 -> {
TRAINERS[2]!!.sendChat("That's it - straight up.") TRAINERS[2]!!.sendChat("That's it - straight up.")
player.packetDispatch.sendMessage("You climb the tree..") ContentAPI.sendMessage(player, "You climb the tree..")
AgilityHandler.climb(player, 2, Animation.create(828), Location.create(2473, 3420, 2), 5.0, "...To the platform above.") AgilityHandler.climb(player, 2, Animation.create(828), Location.create(2473, 3420, 2), 5.0, "...To the platform above.")
return true return true
} }
2312 -> { 2312 -> {
TRAINERS[3]!!.sendChat("Come on scaredy cat, get across that rope!") TRAINERS[3]!!.sendChat("Come on scaredy cat, get across that rope!")
player.packetDispatch.sendMessage("You carefully cross the tightrope.") ContentAPI.sendMessage(player, "You carefully cross the tightrope.")
AgilityHandler.walk(player, 3, Location.create(2477, 3420, 2), Location.create(2483, 3420, 2), Animation.create(155), 7.5, null) AgilityHandler.walk(player, 3, Location.create(2477, 3420, 2), Location.create(2483, 3420, 2), Animation.create(155), 7.5, null)
return true return true
} }
4059 -> { 4059 -> {
player.packetDispatch.sendMessage("You can't do that from here.") ContentAPI.sendMessage(player, "You can't do that from here.")
return true return true
} }
2314, 2315 -> { 2314, 2315 -> {
player.packetDispatch.sendMessage("You climb down the tree..") ContentAPI.sendMessage(player, "You climb down the tree..")
AgilityHandler.climb(player, 4, Animation.create(828), Location.create(2487, 3420, 0), 5.0, "You land on the ground.") AgilityHandler.climb(player, 4, Animation.create(828), Location.create(2487, 3420, 0), 5.0, "You land on the ground.")
return true return true
} }
2286 -> { 2286 -> {
TRAINERS[4]!!.sendChat("My Granny can move faster than you.") TRAINERS[4]!!.sendChat("My Granny can move faster than you.")
player.faceLocation(player.location.transform(0, 2, 0)) player.faceLocation(player.location.transform(0, 2, 0))
player.packetDispatch.sendMessage("You climb the netting...") ContentAPI.sendMessage(player, "You climb the netting...")
AgilityHandler.climb(player, 5, Animation.create(828), player.location.transform(0, 2, 0), 7.5, null) AgilityHandler.climb(player, 5, Animation.create(828), player.location.transform(0, 2, 0), 7.5, null)
return true return true
} }
@ -76,11 +77,11 @@ class GnomeStrongholdCourse
val index = if (`object`.id == 154) 0 else 1 //If the player clicks on the left pipe, set index to 0, otherwise 1 val index = if (`object`.id == 154) 0 else 1 //If the player clicks on the left pipe, set index to 0, otherwise 1
val x = 2484 + index * 3 //change the x coordinates for walking/animations depending on index multiplier val x = 2484 + index * 3 //change the x coordinates for walking/animations depending on index multiplier
if (`object`.location.y == 3435) { if (`object`.location.y == 3435) {
player.packetDispatch.sendMessage("You can't do that from here.") ContentAPI.sendMessage(player, "You can't do that from here.")
return true return true
} }
if (USED_PIPES[index] > GameWorld.ticks) { if (USED_PIPES[index] > GameWorld.ticks) {
player.packetDispatch.sendMessage("The pipe is being used.") ContentAPI.sendMessage(player, "The pipe is being used.")
return true return true
} }
USED_PIPES[index] = GameWorld.ticks + 10 USED_PIPES[index] = GameWorld.ticks + 10

View file

@ -76,8 +76,8 @@ class WildernessCourse
2 -> { 2 -> {
val end = if (fail) Location.create(2998, 3924, 0) else if (`object`.id < 2309) Location.create(2998, 3917, 0) else Location.create(2998, 3930, 0) val end = if (fail) Location.create(2998, 3924, 0) else if (`object`.id < 2309) Location.create(2998, 3917, 0) else Location.create(2998, 3930, 0)
val start = if (`object`.id < 2309) player.location else Location.create(2998, 3917, 0) val start = if (`object`.id < 2309) player.location else Location.create(2998, 3917, 0)
player.packetDispatch.sendMessage("You go through the gate and try to edge over the ridge...") ContentAPI.sendMessage(player, "You go through the gate and try to edge over the ridge...")
AgilityHandler.walk(player, -1, start, end, Animation.create(155), if (fail) 0.0 else 15.00, if (fail) "You loose your footing and fail into the wolf pit." else "You skillfully balance across the ridge...") AgilityHandler.walk(player, -1, start, end, Animation.create(155), if (fail) 0.0 else 15.00, if (fail) "You lose your footing and fail into the wolf pit." else "You skillfully balance across the ridge...")
} }
9 -> { 9 -> {
if (fail) { if (fail) {
@ -104,7 +104,7 @@ class WildernessCourse
*/ */
private fun handlePipe(player: Player, `object`: Scenery) { private fun handlePipe(player: Player, `object`: Scenery) {
if (`object`.location.y == 3948) { if (`object`.location.y == 3948) {
player.packetDispatch.sendMessage("You can't do that from here.") ContentAPI.sendMessage(player, "You can't do that from here.")
return return
} }
if (player.skills.getLevel(Skills.AGILITY) < 49) { if (player.skills.getLevel(Skills.AGILITY) < 49) {
@ -153,15 +153,15 @@ class WildernessCourse
*/ */
private fun handleRopeSwing(player: Player, `object`: Scenery) { private fun handleRopeSwing(player: Player, `object`: Scenery) {
if (player.location.y < 3554) { if (player.location.y < 3554) {
player.packetDispatch.sendMessage("You cannot do that from here.") ContentAPI.sendMessage(player, "You cannot do that from here.")
return return
} }
if (ropeDelay > GameWorld.ticks) { if (ropeDelay > GameWorld.ticks) {
player.packetDispatch.sendMessage("The rope is being used.") ContentAPI.sendMessage(player, "The rope is being used.")
return return
} }
if (AgilityHandler.hasFailed(player, 1, 0.1)) { if (AgilityHandler.hasFailed(player, 1, 0.1)) {
AgilityHandler.fail(player, 0, Location.create(3005, 10357, 0), null, getHitAmount(player), "You slip and fall to the pit bellow.") AgilityHandler.fail(player, 0, Location.create(3005, 10357, 0), null, getHitAmount(player), "You slip and fall to the pit below.")
return return
} }
ropeDelay = GameWorld.ticks + 2 ropeDelay = GameWorld.ticks + 2
@ -206,7 +206,7 @@ class WildernessCourse
private fun handleLogBalance(player: Player, `object`: Scenery) { private fun handleLogBalance(player: Player, `object`: Scenery) {
val failed = AgilityHandler.hasFailed(player, 1, 0.5) val failed = AgilityHandler.hasFailed(player, 1, 0.5)
val end = if (failed) Location.create(2998, 3945, 0) else Location.create(2994, 3945, 0) val end = if (failed) Location.create(2998, 3945, 0) else Location.create(2994, 3945, 0)
player.packetDispatch.sendMessage("You walk carefully across the slippery log...") ContentAPI.sendMessage(player, "You walk carefully across the slippery log...")
AgilityHandler.walk(player, if (failed) -1 else 3, player.location, end, Animation.create(155), if (failed) 0.0 else 20.0, if (failed) null else "You skillfully edge across the gap.") AgilityHandler.walk(player, if (failed) -1 else 3, player.location, end, Animation.create(155), if (failed) 0.0 else 20.0, if (failed) null else "You skillfully edge across the gap.")
if (failed) { if (failed) {
GameWorld.Pulser.submit(object : Pulse(5, player) { GameWorld.Pulser.submit(object : Pulse(5, player) {