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",
"loc_data": "{1,2672,3433,0,7209050}"
},
{
"item_id": "41",
"loc_data": "{1,3125,9997,0,7209050}"
},
{
"item_id": "88",
"loc_data": "{1,2654,9767,0,4587583}"
@ -37,7 +41,7 @@
},
{
"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",
@ -97,7 +101,7 @@
},
{
"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",
@ -109,7 +113,7 @@
},
{
"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",
@ -169,7 +173,7 @@
},
{
"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",
@ -185,7 +189,7 @@
},
{
"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",
@ -201,12 +205,16 @@
},
{
"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",
"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",
"loc_data": "{1,3242,3385,1,7209050}-{1,3097,3486,0,7864410}-{1,3148,3177,0,5898270}"
@ -283,6 +291,10 @@
"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}"
},
{
"item_id": "1590",
"loc_data": "{1,2900,9766,0,7209050}"
},
{
"item_id": "1592",
"loc_data": "{1,2935,3283,1,7209050}"
@ -407,6 +419,14 @@
"item_id": "1993",
"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",
"loc_data": "{1,2971,3382,1,5898270}"

View file

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

File diff suppressed because it is too large Load diff

View file

@ -201,7 +201,7 @@
},
{
"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",
@ -405,7 +405,7 @@
},
{
"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",
@ -421,7 +421,7 @@
},
{
"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",
@ -509,7 +509,7 @@
},
{
"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",
@ -557,7 +557,7 @@
},
{
"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",
@ -869,7 +869,7 @@
},
{
"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",
@ -1047,9 +1047,13 @@
"npc_id": "385",
"loc_data": "{2549,3568,0,1,6}"
},
{
"npc_id": "386",
"loc_data": "{2877,9797,0,1,0}"
},
{
"npc_id": "387",
"loc_data": "{3000,3440,1,0,0}"
"loc_data": "{3058,3488,1,0,0}"
},
{
"npc_id": "388",
@ -1633,7 +1637,7 @@
},
{
"npc_id": "601",
"loc_data": "{2482,3509,1,1,3}"
"loc_data": "{2482,3510,1,1,0}"
},
{
"npc_id": "602",
@ -2151,6 +2155,10 @@
"npc_id": "848",
"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",
"loc_data": "{2439,3502,1,0,4}"
@ -3481,7 +3489,7 @@
},
{
"npc_id": "1597",
"loc_data": "{3146,9913,0,1,6}"
"loc_data": "{3147,9914,0,1,6}"
},
{
"npc_id": "1598",
@ -4344,8 +4352,8 @@
"loc_data": "{3310,3107,0,1,4}-{3181,3043,0,1,3}"
},
{
"npc_id": "2304",
"loc_data": "{3038,3292,0,1,6}"
"npc_id": "2304",
"loc_data": "{3039,3292,0,1,6}"
},
{
"npc_id": "2305",
@ -4425,7 +4433,7 @@
},
{
"npc_id": "2330",
"loc_data": "{2766,3211,0,0,0}"
"loc_data": "{2766,3211,0,1,0}"
},
{
"npc_id": "2331",
@ -4453,11 +4461,11 @@
},
{
"npc_id": "2337",
"loc_data": "{2615,3855,0,0,3}"
"loc_data": "{2589,3861,0,1,0}"
},
{
"npc_id": "2338",
"loc_data": "{2615,3229,0,0,0}"
"loc_data": "{2615,3229,0,1,0}"
},
{
"npc_id": "2339",
@ -4469,7 +4477,7 @@
},
{
"npc_id": "2341",
"loc_data": "{3229,3456,0,0,0}"
"loc_data": "{3229,3456,0,1,0}"
},
{
"npc_id": "2342",
@ -4835,6 +4843,10 @@
"npc_id": "2620",
"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",
"loc_data": "{4689,5173,0,0,0}-{2464,5149,0,0,7}"
@ -5221,7 +5233,7 @@
},
{
"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",
@ -6619,6 +6631,14 @@
"npc_id": "4560",
"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",
"loc_data": "{3003,9798,0,1,3}"
@ -8611,6 +8631,18 @@
"npc_id": "6116",
"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",
"loc_data": "{3254,3427,0,1,1}"
@ -9859,10 +9891,6 @@
"npc_id": "7312",
"loc_data": "{2950,3268,0,0,0}"
},
{
"npc_id": "7363",
"loc_data": "{2793,2996,0,0,0}"
},
{
"npc_id": "7420",
"loc_data": "{3168,3334,0,0,3}"
@ -10011,6 +10039,10 @@
"npc_id": "7969",
"loc_data": "{3205,3240,0,0,0}"
},
{
"npc_id": "8041",
"loc_data": "{2794,3100,0,1,0}"
},
{
"npc_id": "8082",
"loc_data": "{3552,5590,2,1,2}"
@ -10415,10 +10447,6 @@
"npc_id": "2155",
"loc_data": "{2871,10199,0,1,0}"
},
{
"npc_id": "603",
"loc_data": "{2450,3510,1,1,0}"
},
{
"npc_id": "8065",
"loc_data": "{3399,3464,0,0,1}"
@ -10601,11 +10629,11 @@
},
{
"npc_id": "2861",
"loc_data": "{2347,3165,0,0,3}"
"loc_data": "{2347,3165,0,1,3}"
},
{
"npc_id": "4965",
"loc_data": "{2824,3685,0,0,1}"
"loc_data": "{2826,3685,0,0,1}"
},
{
"npc_id": "2790",
@ -10813,6 +10841,6 @@
},
{
"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",
"id": "61",
"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",
@ -599,8 +599,8 @@
"currency": "995",
"general_store": "false",
"id": "68",
"title": "Grand Season 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}"
"title": "Grand Tree Groceries",
"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",
@ -608,8 +608,8 @@
"currency": "995",
"general_store": "false",
"id": "69",
"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}"
"title": "Frenita's Cookery Shop.",
"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",
@ -729,7 +729,7 @@
"stock": "{361,20}-{329,20}-{339,20}-{379,10}-{373,0}-{385,0}"
},
{
"npcs": "",
"npcs": "851",
"high_alch": "0",
"currency": "995",
"general_store": "false",
@ -1977,7 +1977,7 @@
"general_store": "false",
"id": "223",
"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",
@ -2149,5 +2149,14 @@
"id": "242",
"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}"
},
{
"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;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.diary.DiaryType;
import core.game.node.item.Item;
import core.game.system.task.Pulse;
import rs09.game.world.GameWorld;
import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics;
/**
* Represents an enchanted jewellery.
* @author Vexia
*/
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_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_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),
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),
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);
/**
* Represents the teleport animation.
*/
private static final Animation ANIMATION = new Animation(714);
/**
* Represents the graphics to use.
*/
private static final Graphics GRAPHICS = new Graphics(308, 100, 50);
/**
* Represents the charge numbers.
*/
private static final char[] NUMBERS = new char[] { '1', '2', '3', '4', '5', '6', '7', '8' };
/**
* Represents the teleport options.
*/
private final String[] options;
/**
* Represents the locations.
*/
private final Location[] locations;
/**
* Represents the ids of the jewellery.
*/
private final int[] ids;
/**
* Represents if it crumbles away into nothing.
*/
private final boolean crumble;
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options.
* @param locations the locations.
* @parma crumble if it crumbles.
* @param ids the ids.
*/
EnchantedJewellery(final String[] options, final Location[] locations, final boolean crumble, final int... ids) {
this.options = options;
this.locations = locations;
this.ids = ids;
this.crumble = crumble;
}
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options.
* @param locations the locations.
* @param ids the ids.
*/
EnchantedJewellery(final String[] options, final Location[] locations, final int... ids) {
this(options, locations, false, ids);
}
/**
* Method used to teleport the player to the desired location.
* @param player the player.
* @param item the item.
* @param index the index.
* @param operate If the player is operating.
*/
public void use(final Player player, final Item item, final int index, boolean operate) {
if ((index + 1) == getIds().length || item.getSlot() < 0) {
return;
}
if (index > getLocations().length - 1) {
return;
}
int itemIndex = getItemIndex(item);
Item replace = item;
if (!isLast(itemIndex)) {
if (!(isCrumble() && itemIndex == getIds().length - 1)) {
replace = getReplace(getNext(itemIndex));
}
} else {
if (!isCrumble()) {
replace = getReplace(getIds()[getIds().length - 1]);
}
}
if (index > getLocations().length - 1) {
return;
}
if (!operate && !player.getInventory().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)");
return;
} else if (operate && !player.getEquipment().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)");
return;
}
if (teleport(player, itemIndex, replace, getLocation(index))) {
if (!isLast(itemIndex) && !(isCrumble() && itemIndex == getIds().length - 1)) {
if (operate) {
player.getEquipment().replace(replace, item.getSlot());
} else {
player.getInventory().replace(replace, item.getSlot());
}
} else {
if (isCrumble()) {
if (operate) {
player.getEquipment().replace(null, item.getSlot());
} else {
if(item.getName().contains("slaying")){
player.getInventory().replace(new Item(4155, 1), item.getSlot());
player.sendMessage("Your Ring of Slaying reverts back into a regular enchanted gem.");
} else {
player.getInventory().replace(null, item.getSlot());
}
}
}
}
if (getLocation(index).withinDistance(new Location(2657,3439,0))) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE,2,0);
}
}
}
/**
* Method used to teleport to a location.
* @param player the player.
* @param itemIndex the old item index.
* @param item the item.
* @param location the location.
*/
private boolean teleport(final Player player, final int itemIndex, final Item item, final Location location) {
if (player.isTeleBlocked()) {
player.sendMessage("A magical force has stopped you from teleporting.");
return false;
}
if (!player.getZoneMonitor().teleport(1, item)) {
return false;
}
player.lock();
player.visualize(ANIMATION, GRAPHICS);
player.getImpactHandler().setDisabledTicks(4);
GameWorld.getPulser().submit(new Pulse(4, player) {
@Override
public boolean pulse() {
player.unlock();
player.getProperties().setTeleportLocation(location);
player.getAnimator().reset();
return true;
}
});
return true;
}
/**
* Gets the charges of an item.
* @param item the item.
* @return the charges.
*/
public static String getCharges(Item item) {
String[] tokens = item.getName().replace("(t", "(").replace("(", " ").replace(")", "").split(" ");
return tokens[tokens.length - 1];
}
/**
* Gets the replacement item.
* @param id the id.
* @return the item.
*/
public Item getReplace(int id) {
return new Item(id);
}
/**
* Gets the name.
* @param item the item.
* @return the name.
*/
public String getName(Item item) {
String name = item.getName().toLowerCase().replace("(t", "(").replace("(", "").replace(")", "");
for (char number : NUMBERS) {
name = name.replace(number, '/');
}
return name.trim().replace("/", "");
}
/**
* Gets the name type.
* @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];
}
/**
* Checks if the index is last.
* @param index the index.
* @return {@code True} if so.
*/
public boolean isLast(int index) {
return !isCrumble() ? index == (ids.length - 1) : index == ids.length;
}
/**
* Gets the next index.
* @param index the index.
* @return the new id
*/
public int getNext(int index) {
return ids[index + 1];
}
/**
* Gets the location.
* @param index the index.
* @return the location.
*/
public Location getLocation(int index) {
if (index > locations.length) {
index = locations.length - 1;
}
return locations[index];
}
/**
* Gets the options.
* @return The options.
*/
public String[] getOptions() {
return options;
}
/**
* Gets the locations.
* @return The locations.
*/
public Location[] getLocations() {
return locations;
}
/**
* Gets the ids.
* @return The ids.
*/
public int[] getIds() {
return ids;
}
public boolean isCrumble() {
return crumble;
}
/**
* Gets the enchanted jewellery.
* @param item the item.
* @return {@code EnchantedJewellery}.
*/
public static EnchantedJewellery forItem(final Item item) {
for (EnchantedJewellery jewellery : values()) {
for (int i : jewellery.getIds()) {
if (i == item.getId()) {
return jewellery;
}
}
}
return null;
}
/**
* Gets the index.
* @param item the item.
* @return the item index.
*/
public int getItemIndex(Item item) {
for (int i = 0; i < getIds().length; i++) {
if (getIds()[i] == item.getId()) {
return i;
}
}
return -1;
}
package core.game.content.global;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.diary.DiaryType;
import core.game.node.item.Item;
import core.game.system.task.Pulse;
import rs09.game.world.GameWorld;
import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.game.world.update.flag.context.Graphics;
/**
* Represents an enchanted jewellery.
* @author Vexia
*/
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_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_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),
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),
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);
/**
* Represents the teleport animation.
*/
private static final Animation ANIMATION = new Animation(714);
/**
* Represents the graphics to use.
*/
private static final Graphics GRAPHICS = new Graphics(308, 100, 50);
/**
* Represents the charge numbers.
*/
private static final char[] NUMBERS = new char[] { '1', '2', '3', '4', '5', '6', '7', '8' };
/**
* Represents the teleport options.
*/
private final String[] options;
/**
* Represents the locations.
*/
private final Location[] locations;
/**
* Represents the ids of the jewellery.
*/
private final int[] ids;
/**
* Represents if it crumbles away into nothing.
*/
private final boolean crumble;
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options.
* @param locations the locations.
* @parma crumble if it crumbles.
* @param ids the ids.
*/
EnchantedJewellery(final String[] options, final Location[] locations, final boolean crumble, final int... ids) {
this.options = options;
this.locations = locations;
this.ids = ids;
this.crumble = crumble;
}
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param options the options.
* @param locations the locations.
* @param ids the ids.
*/
EnchantedJewellery(final String[] options, final Location[] locations, final int... ids) {
this(options, locations, false, ids);
}
/**
* Method used to teleport the player to the desired location.
* @param player the player.
* @param item the item.
* @param index the index.
* @param operate If the player is operating.
*/
public void use(final Player player, final Item item, final int index, boolean operate) {
if ((index + 1) == getIds().length || item.getSlot() < 0) {
return;
}
if (index > getLocations().length - 1) {
return;
}
int itemIndex = getItemIndex(item);
Item replace = item;
if (!isLast(itemIndex)) {
if (!(isCrumble() && itemIndex == getIds().length - 1)) {
replace = getReplace(getNext(itemIndex));
}
} else {
if (!isCrumble()) {
replace = getReplace(getIds()[getIds().length - 1]);
}
}
if (index > getLocations().length - 1) {
return;
}
if (!operate && !player.getInventory().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)");
return;
} else if (operate && !player.getEquipment().containsItem(item)) {
player.sendMessage("Ooops, you don't have it anymore ;)");
return;
}
if (teleport(player, itemIndex, replace, getLocation(index))) {
if (!isLast(itemIndex) && !(isCrumble() && itemIndex == getIds().length - 1)) {
if (operate) {
player.getEquipment().replace(replace, item.getSlot());
} else {
player.getInventory().replace(replace, item.getSlot());
}
} else {
if (isCrumble()) {
if (operate) {
player.getEquipment().replace(null, item.getSlot());
} else {
if(item.getName().contains("slaying")){
player.getInventory().replace(new Item(4155, 1), item.getSlot());
player.sendMessage("Your Ring of Slaying reverts back into a regular enchanted gem.");
} else {
player.getInventory().replace(null, item.getSlot());
}
}
}
}
if (getLocation(index).withinDistance(new Location(2657,3439,0))) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.SEERS_VILLAGE,2,0);
}
}
}
/**
* Method used to teleport to a location.
* @param player the player.
* @param itemIndex the old item index.
* @param item the item.
* @param location the location.
*/
private boolean teleport(final Player player, final int itemIndex, final Item item, final Location location) {
if (player.isTeleBlocked()) {
player.sendMessage("A magical force has stopped you from teleporting.");
return false;
}
if (!player.getZoneMonitor().teleport(1, item)) {
return false;
}
player.lock();
player.visualize(ANIMATION, GRAPHICS);
player.getAudioManager().send(200);
player.getImpactHandler().setDisabledTicks(4);
GameWorld.getPulser().submit(new Pulse(4, player) {
@Override
public boolean pulse() {
player.unlock();
player.getProperties().setTeleportLocation(location);
player.getAnimator().reset();
return true;
}
});
return true;
}
/**
* Gets the charges of an item.
* @param item the item.
* @return the charges.
*/
public static String getCharges(Item item) {
String[] tokens = item.getName().replace("(t", "(").replace("(", " ").replace(")", "").split(" ");
return tokens[tokens.length - 1];
}
/**
* Gets the replacement item.
* @param id the id.
* @return the item.
*/
public Item getReplace(int id) {
return new Item(id);
}
/**
* Gets the name.
* @param item the item.
* @return the name.
*/
public String getName(Item item) {
String name = item.getName().toLowerCase().replace("(t", "(").replace("(", "").replace(")", "");
for (char number : NUMBERS) {
name = name.replace(number, '/');
}
return name.trim().replace("/", "");
}
/**
* Gets the name type.
* @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];
}
/**
* Checks if the index is last.
* @param index the index.
* @return {@code True} if so.
*/
public boolean isLast(int index) {
return !isCrumble() ? index == (ids.length - 1) : index == ids.length;
}
/**
* Gets the next index.
* @param index the index.
* @return the new id
*/
public int getNext(int index) {
return ids[index + 1];
}
/**
* Gets the location.
* @param index the index.
* @return the location.
*/
public Location getLocation(int index) {
if (index > locations.length) {
index = locations.length - 1;
}
return locations[index];
}
/**
* Gets the options.
* @return The options.
*/
public String[] getOptions() {
return options;
}
/**
* Gets the locations.
* @return The locations.
*/
public Location[] getLocations() {
return locations;
}
/**
* Gets the ids.
* @return The ids.
*/
public int[] getIds() {
return ids;
}
public boolean isCrumble() {
return crumble;
}
/**
* Gets the enchanted jewellery.
* @param item the item.
* @return {@code EnchantedJewellery}.
*/
public static EnchantedJewellery forItem(final Item item) {
for (EnchantedJewellery jewellery : values()) {
for (int i : jewellery.getIds()) {
if (i == item.getId()) {
return jewellery;
}
}
}
return null;
}
/**
* Gets the index.
* @param item the item.
* @return the item index.
*/
public int getItemIndex(Item item) {
for (int i = 0; i < getIds().length; i++) {
if (getIds()[i] == item.getId()) {
return i;
}
}
return -1;
}
}

View file

@ -125,6 +125,7 @@ public final class AnimalMagnetismPlugin extends OptionHandler {
player.getInventory().replace(new Item(4252), item.getSlot());
player.sendMessage("...and the world changes around you.", 4);
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.getPulseManager().run(new Pulse(9, player) {
@Override

View file

@ -1,5 +1,6 @@
package core.game.content.zone.phasmatys;
import api.ContentAPI;
import core.game.content.global.Bones;
import core.game.content.global.action.ClimbActionHandler;
import core.game.interaction.Option;
@ -75,16 +76,16 @@ public final class PhasmatysZone extends MapZone implements Plugin<Object> {
return true;
case 5267:
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));
return true;
case 5268:
if (option.getName().equals("Close")) {
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));
} 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));
}
return true;

View file

@ -1,5 +1,6 @@
package core.game.interaction.city;
import api.ContentAPI;
import core.cache.def.impl.SceneryDefinition;
import core.game.content.global.action.ClimbActionHandler;
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.SceneryBuilder;
import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation;
import core.plugin.Initializable;
import core.plugin.Plugin;
/**
* Represents the plugin used to handle edgeville related interactions.
* Represents the plugin used to handle Edgeville related interactions.
*
* @author 'Vexia
* @version 1.0
@ -31,6 +33,7 @@ public final class EdgevilleNodePlugin extends OptionHandler {
SceneryDefinition.forId(26933).getHandlers().put("option:open", this);
SceneryDefinition.forId(26934).getHandlers().put("option:close", this);
SceneryDefinition.forId(26934).getHandlers().put("option:climb-down", this);
return this;
}
@ -41,7 +44,7 @@ public final class EdgevilleNodePlugin extends OptionHandler {
case 9262:
case 9261:
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;
case 12265:
ClimbActionHandler.climb(player, null, Location.create(3078, 3493, 0));
@ -53,14 +56,21 @@ public final class EdgevilleNodePlugin extends OptionHandler {
player.getConfigManager().set(680, 0);
}
break;
case 26933: // Trapdoors at edgeville dungeon entrance
case 26933: // Edgeville Dungeon trapdoor (when closed)
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;
case 26934: // Trapdoors at edgeville dungeon entrance
case 26934: // Edgeville Dungeon trapdoor (when open)
if (option.equalsIgnoreCase("close")) {
player.animate(Animation.create(535));
ContentAPI.sendMessage(player, "You close the trapdoor.");
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;

View file

@ -244,14 +244,14 @@ public final class TrollheimPlugin extends OptionHandler {
case "climb-up":
switch (id) {
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;
case "climb-down":
switch (id) {
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;
@ -741,7 +741,7 @@ public final class TrollheimPlugin extends OptionHandler {
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
npc("Hello traveller. What can I do for you?");
npc("Hello traveler. What can I do for you?");
stage = 1;
break;
case 1:
@ -794,7 +794,7 @@ public final class TrollheimPlugin extends OptionHandler {
break;
case 13:
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;
return true;
}

View file

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

View file

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

View file

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

View file

@ -1,5 +1,6 @@
package rs09.game.node.entity.skill.agility
import api.ContentAPI
import core.cache.def.impl.ItemDefinition
import core.cache.def.impl.NPCDefinition
import core.cache.def.impl.SceneryDefinition
@ -61,14 +62,22 @@ class BarbarianOutpostCourse
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
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)
}
455 -> player.barcrawlManager.read()
385 -> {
player.packetDispatch.sendMessage("The scorpion stings you!")
ContentAPI.sendMessage(player, "The scorpion stings you!")
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
}
@ -80,15 +89,15 @@ class BarbarianOutpostCourse
*/
private fun handleRopeSwing(player: Player, `object`: Scenery) {
if (player.location.y < 3554) {
player.packetDispatch.sendMessage("You cannot do that from here.")
ContentAPI.sendMessage(player, "You cannot do that from here.")
return
}
if (ropeDelay > GameWorld.ticks) {
player.packetDispatch.sendMessage("The rope is being used.")
ContentAPI.sendMessage(player, "The rope is being used.")
return
}
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
}
ropeDelay = GameWorld.ticks + 2
@ -104,7 +113,7 @@ class BarbarianOutpostCourse
private fun handleLogBalance(player: Player, `object`: Scenery) {
val failed = AgilityHandler.hasFailed(player, 1, 0.5)
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.")
if (failed) {
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 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.")
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) {
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
}
}
@ -169,6 +178,8 @@ class BarbarianOutpostCourse
SceneryDefinition.forId(1948).handlers["option:climb-over"] = this
ItemDefinition.forId(455).handlers["option:read"] = 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())
}
@ -226,7 +237,7 @@ class BarbarianOutpostCourse
}
1 -> when (buttonId) {
1 -> {
player("I want to come throught his gate.")
player("I want to come through this gate.")
stage = 5
}
2 -> {

View file

@ -1,5 +1,6 @@
package rs09.game.node.entity.skill.agility
import api.ContentAPI
import core.cache.def.impl.SceneryDefinition
import core.game.node.Node
import core.game.node.scenery.Scenery
@ -34,41 +35,41 @@ class GnomeStrongholdCourse
when (`object`.id) {
2295 -> {
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.")
return true
}
2285 -> {
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)
return true
}
35970 -> {
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.")
return true
}
2312 -> {
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)
return true
}
4059 -> {
player.packetDispatch.sendMessage("You can't do that from here.")
ContentAPI.sendMessage(player, "You can't do that from here.")
return true
}
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.")
return true
}
2286 -> {
TRAINERS[4]!!.sendChat("My Granny can move faster than you.")
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)
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 x = 2484 + index * 3 //change the x coordinates for walking/animations depending on index multiplier
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
}
if (USED_PIPES[index] > GameWorld.ticks) {
player.packetDispatch.sendMessage("The pipe is being used.")
ContentAPI.sendMessage(player, "The pipe is being used.")
return true
}
USED_PIPES[index] = GameWorld.ticks + 10

View file

@ -76,8 +76,8 @@ class WildernessCourse
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 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...")
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...")
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 lose your footing and fail into the wolf pit." else "You skillfully balance across the ridge...")
}
9 -> {
if (fail) {
@ -104,7 +104,7 @@ class WildernessCourse
*/
private fun handlePipe(player: Player, `object`: Scenery) {
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
}
if (player.skills.getLevel(Skills.AGILITY) < 49) {
@ -153,15 +153,15 @@ class WildernessCourse
*/
private fun handleRopeSwing(player: Player, `object`: Scenery) {
if (player.location.y < 3554) {
player.packetDispatch.sendMessage("You cannot do that from here.")
ContentAPI.sendMessage(player, "You cannot do that from here.")
return
}
if (ropeDelay > GameWorld.ticks) {
player.packetDispatch.sendMessage("The rope is being used.")
ContentAPI.sendMessage(player, "The rope is being used.")
return
}
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
}
ropeDelay = GameWorld.ticks + 2
@ -206,7 +206,7 @@ class WildernessCourse
private fun handleLogBalance(player: Player, `object`: Scenery) {
val failed = AgilityHandler.hasFailed(player, 1, 0.5)
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.")
if (failed) {
GameWorld.Pulser.submit(object : Pulse(5, player) {