mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-11 09:00:23 -07:00
Merge branch 'master' into 'master'
Add: JSON Monolith #1 See merge request 2009scape/2009scape!298
This commit is contained in:
commit
eaaeb04069
18 changed files with 2634 additions and 7233 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
|
@ -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}"
|
||||
}
|
||||
]
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 -> {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue