mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-09 16:45:44 -07:00
Implemented Observatory Quest
This commit is contained in:
parent
2239168074
commit
da7c62d10c
20 changed files with 2242 additions and 199 deletions
|
|
@ -207,6 +207,10 @@
|
|||
"item_id": "590",
|
||||
"loc_data": "{1,2368,3135,0,140}-{1,2431,3072,0,140}-{1,3112,3369,2,140}-{1,3209,3734,0,100}-"
|
||||
},
|
||||
{
|
||||
"item_id": "600",
|
||||
"loc_data": "{1,2438,3187,0,200}-"
|
||||
},
|
||||
{
|
||||
"item_id": "677",
|
||||
"loc_data": "{1,3369,3378,0,150}-"
|
||||
|
|
@ -671,6 +675,10 @@
|
|||
"item_id": "11065",
|
||||
"loc_data": "{1,2928,3289,0,90}-"
|
||||
},
|
||||
{
|
||||
"item_id": "11656",
|
||||
"loc_data": "{1,2438,3185,0,200}-"
|
||||
},
|
||||
{
|
||||
"item_id": "12494",
|
||||
"loc_data": "{1,2762,2973,0,60}-"
|
||||
|
|
|
|||
|
|
@ -5575,7 +5575,7 @@
|
|||
"id": "601"
|
||||
},
|
||||
{
|
||||
"destroy_message": "You'll have to get another down in the Dungeon",
|
||||
"destroy_message": "You'll have to get another down in the dungeon.",
|
||||
"examine": "An unusual clay mould in the shape of a disc.",
|
||||
"durability": null,
|
||||
"name": "Lens mould",
|
||||
|
|
|
|||
|
|
@ -6227,6 +6227,22 @@
|
|||
"range_level": "1",
|
||||
"attack_level": "1"
|
||||
},
|
||||
{
|
||||
"examine": "A man, learned in the ways of the stars.",
|
||||
"melee_animation": "0",
|
||||
"range_animation": "0",
|
||||
"defence_animation": "0",
|
||||
"magic_animation": "0",
|
||||
"death_animation": "0",
|
||||
"name": "Observatory professor",
|
||||
"defence_level": "1",
|
||||
"safespot": null,
|
||||
"lifepoints": "10",
|
||||
"strength_level": "1",
|
||||
"id": "488",
|
||||
"range_level": "1",
|
||||
"attack_level": "1"
|
||||
},
|
||||
{
|
||||
"examine": "He doesn't look like he'd trust his own mother.",
|
||||
"melee_animation": "6199",
|
||||
|
|
@ -6237,13 +6253,13 @@
|
|||
"magic_animation": "0",
|
||||
"death_animation": "6190",
|
||||
"name": "Goblin guard",
|
||||
"defence_level": "20",
|
||||
"defence_level": "37",
|
||||
"safespot": null,
|
||||
"lifepoints": "28",
|
||||
"strength_level": "20",
|
||||
"lifepoints": "43",
|
||||
"strength_level": "37",
|
||||
"id": "489",
|
||||
"range_level": "1",
|
||||
"attack_level": "20"
|
||||
"attack_level": "32"
|
||||
},
|
||||
{
|
||||
"examine": "If the mummy is at school",
|
||||
|
|
@ -10518,13 +10534,13 @@
|
|||
"death_animation": "5329",
|
||||
"name": "Poison spider",
|
||||
"safespot": null,
|
||||
"defence_level": "52",
|
||||
"lifepoints": "64",
|
||||
"strength_level": "65",
|
||||
"defence_level": "28",
|
||||
"lifepoints": "25",
|
||||
"strength_level": "28",
|
||||
"id": "1009",
|
||||
"aggressive": "true",
|
||||
"range_level": "1",
|
||||
"attack_level": "50"
|
||||
"attack_level": "28"
|
||||
},
|
||||
{
|
||||
"examine": "A green skinned croaker",
|
||||
|
|
@ -53255,6 +53271,7 @@
|
|||
"attack_level": "1"
|
||||
},
|
||||
{
|
||||
"examine": "An ugly green creature.",
|
||||
"name": "Goblin",
|
||||
"defence_level": "1",
|
||||
"safespot": null,
|
||||
|
|
@ -73515,10 +73532,6 @@
|
|||
"name": "Kalron",
|
||||
"id": "486"
|
||||
},
|
||||
{
|
||||
"name": "Observatory professor",
|
||||
"id": "488"
|
||||
},
|
||||
{
|
||||
"name": "Hajedy",
|
||||
"id": "510"
|
||||
|
|
@ -82651,6 +82664,7 @@
|
|||
"id": "6114"
|
||||
},
|
||||
{
|
||||
"examine": "A man, learned in the ways of the stars.",
|
||||
"name": "Observatory professor",
|
||||
"id": "6119"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "47",
|
||||
"loc_data": "{2821,3170,0,1,1}-{3341,3267,0,1,5}-{3076,3282,0,1,5}-{3089,3266,0,1,4}-{3091,3266,0,1,4}-{3097,3364,0,1,3}-{3102,3363,0,1,5}-{3127,3487,0,1,4}-{3125,3486,0,1,6}-{3127,3486,0,1,4}-{2603,9480,0,1,1}-{2600,9477,0,1,0}-{2579,9496,0,1,4}-{2580,9508,0,1,0}-{2571,9522,0,1,4}-{2565,9505,0,1,1}-{2566,9510,0,1,6}-{2594,9497,0,1,4}-{2852,9642,0,1,6}-{2858,9632,0,1,3}-{2568,9620,0,1,0}-{2573,9612,0,1,0}-{2579,9631,0,1,0}-{2580,9600,0,1,0}-{2580,9614,0,1,0}-{2580,9620,0,1,0}-{2580,9626,0,1,0}-{2583,9632,0,1,0}-{2584,9625,0,1,0}-{2584,9637,0,1,0}-{2589,9644,0,1,0}-{2590,9601,0,1,0}-{2590,9638,0,1,0}-{2591,9601,0,1,0}-{2591,9621,0,1,0}-{2594,9636,0,1,0}-{2594,9644,0,1,0}-{2597,9604,0,1,0}-{2607,9615,0,1,0}-{2608,9628,0,1,0}-{2614,9651,0,1,0}-{2614,9656,0,1,0}-{2615,9647,0,1,0}-{2615,9661,0,1,0}-{2616,9633,0,1,0}-{2618,9630,0,1,0}-{3108,9754,0,1,5}-{3110,9754,0,1,5}-{3108,9750,0,1,5}-{2592,9831,0,1,3}-{2588,9825,0,1,6}-{2583,9829,0,1,4}-{2581,9841,0,1,0}-{2597,9823,0,1,2}-{2579,9805,0,1,3}-{2576,9804,0,1,0}-{2573,9805,0,1,5}-{2571,9808,0,1,3}-{2576,9810,0,1,2}-{2587,9802,0,1,2}-{2592,9800,0,1,4}-{2596,9805,0,1,6}-{2601,9802,0,1,5}-{2585,9801,0,1,7}-{2594,9803,0,1,0}-{2590,9806,0,1,3}-{2612,9808,0,1,6}-{2604,9810,0,1,6}-{2579,9821,0,1,2}-{2576,9812,0,1,6}-{2580,9813,0,1,6}-{2600,9813,0,1,4}-{2599,9809,0,1,4}-{3158,3226,0,1,5}-{3160,3202,0,1,4}-{3192,3203,0,1,0}-{3194,3204,0,1,0}-{3196,3206,0,1,0}-{3197,3204,0,1,0}-{2654,9640,0,1,6}-{2655,9637,0,1,4}-{2656,9639,0,1,7}-{2651,9636,0,1,5}-{2648,9637,0,1,4}-{2651,9642,0,1,1}-{2654,9640,0,1,0}-{2654,9635,0,1,6}-{2655,9635,0,1,3}-{2664,9626,0,1,6}-{2664,9624,0,1,1}-{2661,9623,0,1,1}-{2663,9623,0,1,3}-{2664,9626,0,1,6}-{2930,9699,0,1,0}-{2933,9697,0,1,0}-{2932,9685,0,1,0}-{2930,9693,0,1,0}-{3235,3224,0,1,3}-{3229,3220,0,1,4}-{3211,3211,0,1,3}-{3225,3220,0,1,1}-{3237,3215,0,1,5}-{3211,3210,0,1,7}-{3227,3220,0,1,7}-{3233,3227,0,1,5}-{3227,3210,0,1,6}-{3228,3222,0,1,4}-{3229,3226,0,1,0}-{3236,3217,0,1,4}-{3259,3230,0,1,4}-{3233,3237,0,1,7}-{3205,3204,0,1,0}-{3206,3204,0,1,0}-{3205,3203,0,1,0}-{3206,3202,0,1,0}-{3207,3202,0,1,0}-{3208,3203,0,1,0}-{3001,3202,0,1,5}-{3243,3687,0,1,5}-{3249,3669,0,1,3}-{3252,3675,0,1,4}-{3252,3680,0,1,3}-{3259,3683,0,1,0}-{3475,9840,0,1,6}-{3481,9842,0,1,1}-{3486,9843,0,1,7}-{3483,9824,0,1,4}-{3496,9808,0,0,5}-{3490,9815,0,1,1}-{3478,9834,0,0,3}-{3490,9824,0,1,4}-{3225,9862,0,1,4}-{3222,9861,0,1,6}-{3220,9860,0,1,6}-{3219,9865,0,1,6}-{3237,9862,0,1,4}-{2536,2982,0,1,3}-{2531,2980,0,1,0}-{2522,2981,0,1,4}-{2545,2989,0,1,4}-{2523,2970,0,1,2}-{3026,3174,0,1,5}-{3019,3176,0,1,7}-{2801,3158,0,1,2}-{2514,3193,0,1,6}-{2518,3192,0,1,3}-{2507,3181,0,1,3}-{2508,3178,0,1,6}-{2511,3183,0,1,3}-{2515,3182,0,1,1}-{3021,3205,0,1,6}-{3019,3292,0,1,7}-{3018,3295,0,1,7}-{2531,3325,0,1,3}-{2530,3327,0,1,5}-{2521,3331,0,1,3}-{2526,3328,0,1,3}-{2523,3331,0,1,4}-{2523,3334,0,1,1}-{2531,3329,0,1,5}-{2532,3333,0,1,5}-{3276,9871,0,1,1}-{3277,9871,0,1,3}-"
|
||||
"loc_data": "{2821,3170,0,1,1}-{3341,3267,0,1,5}-{3076,3282,0,1,5}-{3089,3266,0,1,4}-{3091,3266,0,1,4}-{3097,3364,0,1,3}-{3102,3363,0,1,5}-{3127,3487,0,1,4}-{3125,3486,0,1,6}-{3127,3486,0,1,4}-{2339,9356,0,1,0}-{2354,9390,0,1,0}-{2361,9403,0,1,0}-{2362,9347,0,1,0}-{2603,9480,0,1,1}-{2600,9477,0,1,0}-{2579,9496,0,1,4}-{2580,9508,0,1,0}-{2571,9522,0,1,4}-{2565,9505,0,1,1}-{2566,9510,0,1,6}-{2594,9497,0,1,4}-{2852,9642,0,1,6}-{2858,9632,0,1,3}-{2568,9620,0,1,0}-{2573,9612,0,1,0}-{2579,9631,0,1,0}-{2580,9600,0,1,0}-{2580,9614,0,1,0}-{2580,9620,0,1,0}-{2580,9626,0,1,0}-{2583,9632,0,1,0}-{2584,9625,0,1,0}-{2584,9637,0,1,0}-{2589,9644,0,1,0}-{2590,9601,0,1,0}-{2590,9638,0,1,0}-{2591,9601,0,1,0}-{2591,9621,0,1,0}-{2594,9636,0,1,0}-{2594,9644,0,1,0}-{2597,9604,0,1,0}-{2607,9615,0,1,0}-{2608,9628,0,1,0}-{2614,9651,0,1,0}-{2614,9656,0,1,0}-{2615,9647,0,1,0}-{2615,9661,0,1,0}-{2616,9633,0,1,0}-{2618,9630,0,1,0}-{3108,9754,0,1,5}-{3110,9754,0,1,5}-{3108,9750,0,1,5}-{2592,9831,0,1,3}-{2588,9825,0,1,6}-{2583,9829,0,1,4}-{2581,9841,0,1,0}-{2597,9823,0,1,2}-{2579,9805,0,1,3}-{2576,9804,0,1,0}-{2573,9805,0,1,5}-{2571,9808,0,1,3}-{2576,9810,0,1,2}-{2587,9802,0,1,2}-{2592,9800,0,1,4}-{2596,9805,0,1,6}-{2601,9802,0,1,5}-{2585,9801,0,1,7}-{2594,9803,0,1,0}-{2590,9806,0,1,3}-{2612,9808,0,1,6}-{2604,9810,0,1,6}-{2579,9821,0,1,2}-{2576,9812,0,1,6}-{2580,9813,0,1,6}-{2600,9813,0,1,4}-{2599,9809,0,1,4}-{3158,3226,0,1,5}-{3160,3202,0,1,4}-{3192,3203,0,1,0}-{3194,3204,0,1,0}-{3196,3206,0,1,0}-{3197,3204,0,1,0}-{2654,9640,0,1,6}-{2655,9637,0,1,4}-{2656,9639,0,1,7}-{2651,9636,0,1,5}-{2648,9637,0,1,4}-{2651,9642,0,1,1}-{2654,9640,0,1,0}-{2654,9635,0,1,6}-{2655,9635,0,1,3}-{2664,9626,0,1,6}-{2664,9624,0,1,1}-{2661,9623,0,1,1}-{2663,9623,0,1,3}-{2664,9626,0,1,6}-{2930,9699,0,1,0}-{2933,9697,0,1,0}-{2932,9685,0,1,0}-{2930,9693,0,1,0}-{3235,3224,0,1,3}-{3229,3220,0,1,4}-{3211,3211,0,1,3}-{3225,3220,0,1,1}-{3237,3215,0,1,5}-{3211,3210,0,1,7}-{3227,3220,0,1,7}-{3233,3227,0,1,5}-{3227,3210,0,1,6}-{3228,3222,0,1,4}-{3229,3226,0,1,0}-{3236,3217,0,1,4}-{3259,3230,0,1,4}-{3233,3237,0,1,7}-{3205,3204,0,1,0}-{3206,3204,0,1,0}-{3205,3203,0,1,0}-{3206,3202,0,1,0}-{3207,3202,0,1,0}-{3208,3203,0,1,0}-{3001,3202,0,1,5}-{3243,3687,0,1,5}-{3249,3669,0,1,3}-{3252,3675,0,1,4}-{3252,3680,0,1,3}-{3259,3683,0,1,0}-{3475,9840,0,1,6}-{3481,9842,0,1,1}-{3486,9843,0,1,7}-{3483,9824,0,1,4}-{3496,9808,0,0,5}-{3490,9815,0,1,1}-{3478,9834,0,0,3}-{3490,9824,0,1,4}-{3225,9862,0,1,4}-{3222,9861,0,1,6}-{3220,9860,0,1,6}-{3219,9865,0,1,6}-{3237,9862,0,1,4}-{2536,2982,0,1,3}-{2531,2980,0,1,0}-{2522,2981,0,1,4}-{2545,2989,0,1,4}-{2523,2970,0,1,2}-{3026,3174,0,1,5}-{3019,3176,0,1,7}-{2801,3158,0,1,2}-{2514,3193,0,1,6}-{2518,3192,0,1,3}-{2507,3181,0,1,3}-{2508,3178,0,1,6}-{2511,3183,0,1,3}-{2515,3182,0,1,1}-{3021,3205,0,1,6}-{3019,3292,0,1,7}-{3018,3295,0,1,7}-{2531,3325,0,1,3}-{2530,3327,0,1,5}-{2521,3331,0,1,3}-{2526,3328,0,1,3}-{2523,3331,0,1,4}-{2523,3334,0,1,1}-{2531,3329,0,1,5}-{2532,3333,0,1,5}-{3276,9871,0,1,1}-{3277,9871,0,1,3}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "48",
|
||||
|
|
@ -193,7 +193,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "59",
|
||||
"loc_data": "{3082,3362,0,1,4}-{2602,9640,0,1,0}-{2603,9635,0,1,0}-{2603,9638,0,1,0}-{2605,9637,0,1,0}-{2605,9639,0,1,0}-{2606,9635,0,1,0}-{2606,9646,0,1,0}-{2607,9637,0,1,0}-{2607,9641,0,1,0}-{2607,9644,0,1,0}-{2607,9648,0,1,0}-{2608,9635,0,1,0}-{2608,9642,0,1,0}-{2609,9639,0,1,0}-{2609,9643,0,1,0}-{3102,9881,0,1,3}-{3095,9883,0,1,2}-{3182,3244,0,1,1}-{3162,3223,0,1,7}-{3164,3242,0,1,0}-{3169,3246,0,1,0}-{3170,3250,0,1,0}-{3166,3247,0,1,0}-{3164,3249,0,1,0}-{3157,3226,0,1,0}-{3163,3227,0,1,0}-{3165,3223,0,1,0}-{3194,3236,0,1,0}-{3146,3347,0,1,3}-{2648,9766,0,1,4}-{2653,9761,0,1,3}-{2483,2877,0,1,3}-{2481,2876,0,1,4}-{2457,2867,0,1,4}-{2481,2847,0,1,0}-{2475,2854,0,1,3}-{2482,2873,0,1,3}-{2485,2876,0,1,2}-{2449,2865,0,1,1}-{2461,2880,0,1,5}-{2489,2935,0,1,7}-{2492,2907,0,1,1}-{2487,2894,0,1,2}-{2487,2888,0,1,7}-{2478,2916,0,1,5}-{2485,2902,0,1,3}-{2487,2902,0,1,2}-{2489,2894,0,1,2}-{2490,2905,0,1,7}-{2490,2917,0,1,5}-{2484,2890,0,1,1}-{2491,2927,0,1,1}-{3250,3239,0,1,1}-{3241,3241,0,1,1}-{3249,3249,0,1,1}-{3218,9890,0,1,3}-{3220,9887,0,1,0}-{3218,9887,0,1,1}-{3218,9889,0,1,5}-{3213,9890,0,1,1}-{2496,2890,0,1,4}-{2503,2889,0,1,1}-{2497,2939,0,1,2}-{2369,3374,0,1,0}-{2372,3379,0,1,0}-{2378,3366,0,1,0}-{2379,3378,0,1,0}-{2387,3370,0,1,0}-{2394,3365,0,1,0}-{2402,3386,0,1,0}-{2405,3381,0,1,0}-{2407,3387,0,1,0}-{2412,3384,0,1,0}-"
|
||||
"loc_data": "{3082,3362,0,1,4}-{2602,9640,0,1,0}-{2603,9635,0,1,0}-{2603,9638,0,1,0}-{2605,9637,0,1,0}-{2605,9639,0,1,0}-{2606,9635,0,1,0}-{2606,9646,0,1,0}-{2607,9637,0,1,0}-{2607,9641,0,1,0}-{2607,9644,0,1,0}-{2607,9648,0,1,0}-{2608,9635,0,1,0}-{2608,9642,0,1,0}-{2609,9639,0,1,0}-{2609,9643,0,1,0}-{3102,9881,0,1,3}-{3095,9883,0,1,2}-{3182,3244,0,1,1}-{3162,3223,0,1,7}-{3164,3242,0,1,0}-{3169,3246,0,1,0}-{3170,3250,0,1,0}-{3166,3247,0,1,0}-{3164,3249,0,1,0}-{3157,3226,0,1,0}-{3163,3227,0,1,0}-{3165,3223,0,1,0}-{3194,3236,0,1,0}-{3146,3347,0,1,3}-{2369,3374,0,1,0}-{2372,3379,0,1,0}-{2378,3366,0,1,0}-{2379,3378,0,1,0}-{2387,3370,0,1,0}-{2394,3365,0,1,0}-{2402,3386,0,1,0}-{2405,3381,0,1,0}-{2407,3387,0,1,0}-{2412,3384,0,1,0}-{2648,9766,0,1,4}-{2653,9761,0,1,3}-{2483,2877,0,1,3}-{2481,2876,0,1,4}-{2457,2867,0,1,4}-{2481,2847,0,1,0}-{2475,2854,0,1,3}-{2482,2873,0,1,3}-{2485,2876,0,1,2}-{2449,2865,0,1,1}-{2461,2880,0,1,5}-{2489,2935,0,1,7}-{2492,2907,0,1,1}-{2487,2894,0,1,2}-{2487,2888,0,1,7}-{2478,2916,0,1,5}-{2485,2902,0,1,3}-{2487,2902,0,1,2}-{2489,2894,0,1,2}-{2490,2905,0,1,7}-{2490,2917,0,1,5}-{2484,2890,0,1,1}-{2491,2927,0,1,1}-{3250,3239,0,1,1}-{3241,3241,0,1,1}-{3249,3249,0,1,1}-{3218,9890,0,1,3}-{3220,9887,0,1,0}-{3218,9887,0,1,1}-{3218,9889,0,1,5}-{3213,9890,0,1,1}-{2496,2890,0,1,4}-{2503,2889,0,1,1}-{2497,2939,0,1,2}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "60",
|
||||
|
|
@ -217,15 +217,15 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "66",
|
||||
"loc_data": "{2417,3493,1,1,0}-{2418,3495,1,1,0}-{2383,3452,0,1,0}-{2401,3417,0,1,0}-{2402,3422,0,1,0}-{2402,3441,0,1,0}-{2403,3430,0,1,0}-{2408,3441,0,1,0}-{2409,3430,0,1,0}-{2423,3426,0,1,0}-{2427,3428,0,1,0}-{2427,3440,0,1,0}-{2526,3168,0,1,0}-{2529,3163,0,1,0}-{2530,3172,0,1,0}-{2536,3169,0,1,0}-{2435,3460,0,1,0}-{2440,3470,0,1,0}-{2447,3502,0,1,0}-{2457,3462,0,1,0}-{2478,3502,0,1,0}-{2449,3492,1,1,0}-{2450,3490,1,1,0}-{2474,3490,1,1,0}-{2482,3492,1,1,0}-{2482,3498,1,1,0}-{2399,3356,0,1,0}-"
|
||||
"loc_data": "{2399,3356,0,1,0}-{2383,3452,0,1,0}-{2401,3417,0,1,0}-{2402,3422,0,1,0}-{2402,3441,0,1,0}-{2403,3430,0,1,0}-{2408,3441,0,1,0}-{2409,3430,0,1,0}-{2423,3426,0,1,0}-{2427,3428,0,1,0}-{2427,3440,0,1,0}-{2417,3493,1,1,0}-{2418,3495,1,1,0}-{2435,3460,0,1,0}-{2440,3470,0,1,0}-{2447,3502,0,1,0}-{2457,3462,0,1,0}-{2478,3502,0,1,0}-{2449,3492,1,1,0}-{2450,3490,1,1,0}-{2474,3490,1,1,0}-{2482,3492,1,1,0}-{2482,3498,1,1,0}-{2526,3168,0,1,0}-{2529,3163,0,1,0}-{2530,3172,0,1,0}-{2536,3169,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "67",
|
||||
"loc_data": "{2556,3226,0,1,0}-{2456,3425,0,1,0}-{2459,3421,0,1,0}-{2462,3431,0,1,0}-{2394,3500,1,1,0}-{2417,3483,1,1,0}-{2377,3442,0,1,0}-{2380,3425,0,1,0}-{2383,3433,0,1,0}-{2405,3447,0,1,0}-{2406,3440,0,1,0}-{2393,3451,1,1,0}-{2408,3437,1,1,0}-{2521,3169,0,1,0}-{2521,3171,0,1,0}-{2033,5530,1,1,0}-{2437,3478,0,1,0}-{2442,3465,0,1,0}-{2456,3467,0,1,0}-{2471,3496,0,1,0}-{2474,3508,0,1,0}-{2475,3471,0,1,0}-{2479,3468,0,1,0}-{2486,3470,0,1,0}-{2492,3474,0,1,0}-{2443,3464,1,1,0}-{2443,3502,1,1,0}-{2448,3496,1,1,0}-{2449,3506,1,1,0}-{2457,3498,1,1,0}-{2474,3498,1,1,0}-{2480,3502,1,1,0}-{2481,3482,1,1,0}-{2490,3503,1,1,0}-{2400,3356,0,1,0}-"
|
||||
"loc_data": "{2400,3356,0,1,0}-{2377,3442,0,1,0}-{2380,3425,0,1,0}-{2383,3433,0,1,0}-{2405,3447,0,1,0}-{2406,3440,0,1,0}-{2393,3451,1,1,0}-{2408,3437,1,1,0}-{2394,3500,1,1,0}-{2417,3483,1,1,0}-{2456,3425,0,1,0}-{2459,3421,0,1,0}-{2462,3431,0,1,0}-{2437,3478,0,1,0}-{2442,3465,0,1,0}-{2456,3467,0,1,0}-{2471,3496,0,1,0}-{2474,3508,0,1,0}-{2475,3471,0,1,0}-{2479,3468,0,1,0}-{2486,3470,0,1,0}-{2492,3474,0,1,0}-{2443,3464,1,1,0}-{2443,3502,1,1,0}-{2448,3496,1,1,0}-{2449,3506,1,1,0}-{2457,3498,1,1,0}-{2474,3498,1,1,0}-{2480,3502,1,1,0}-{2481,3482,1,1,0}-{2490,3503,1,1,0}-{2521,3169,0,1,0}-{2521,3171,0,1,0}-{2556,3226,0,1,0}-{2033,5530,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "68",
|
||||
"loc_data": "{2400,3514,1,1,0}-{2418,3485,1,1,0}-{2378,3423,0,1,0}-{2393,3435,0,1,0}-{2394,3425,0,1,0}-{2395,3449,0,1,0}-{2403,3433,0,1,0}-{2420,3429,0,1,0}-{2420,3438,0,1,0}-{2522,3172,0,1,0}-{2433,3474,0,1,0}-{2433,3492,0,1,0}-{2458,3497,0,1,0}-{2464,3505,0,1,0}-{2476,3458,0,1,0}-{2445,3502,1,1,0}-{2453,3488,1,1,0}-{2475,3502,1,1,0}-{2465,3490,2,1,0}-{2401,3357,0,1,0}-"
|
||||
"loc_data": "{2401,3357,0,1,0}-{2378,3423,0,1,0}-{2393,3435,0,1,0}-{2394,3425,0,1,0}-{2395,3449,0,1,0}-{2403,3433,0,1,0}-{2420,3429,0,1,0}-{2420,3438,0,1,0}-{2400,3514,1,1,0}-{2418,3485,1,1,0}-{2433,3474,0,1,0}-{2433,3492,0,1,0}-{2458,3497,0,1,0}-{2464,3505,0,1,0}-{2476,3458,0,1,0}-{2445,3502,1,1,0}-{2453,3488,1,1,0}-{2475,3502,1,1,0}-{2465,3490,2,1,0}-{2522,3172,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "73",
|
||||
|
|
@ -325,11 +325,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "100",
|
||||
"loc_data": "{2567,3440,0,1,3}-{2564,9653,0,1,0}-{2565,9655,0,1,0}-{2566,9626,0,1,0}-{2567,9653,0,1,0}-{2569,9633,0,1,0}-{2607,9621,0,1,0}-{2551,3408,0,1,6}-{2553,3405,0,1,3}-{2559,3452,0,1,3}-"
|
||||
"loc_data": "{2567,3440,0,1,3}-{2316,9392,0,1,0}-{2319,9367,0,1,0}-{2321,9402,0,1,0}-{2322,9387,0,1,0}-{2325,9360,0,1,0}-{2333,9346,0,1,0}-{2335,9382,0,1,0}-{2337,9387,0,1,0}-{2343,9360,0,1,0}-{2344,9369,0,1,0}-{2348,9390,0,1,0}-{2349,9380,0,1,0}-{2349,9402,0,1,0}-{2359,9345,0,1,0}-{2359,9359,0,1,0}-{2359,9374,0,1,0}-{2359,9382,0,1,0}-{2363,9403,0,1,0}-{2564,9653,0,1,0}-{2565,9655,0,1,0}-{2566,9626,0,1,0}-{2567,9653,0,1,0}-{2569,9633,0,1,0}-{2607,9621,0,1,0}-{2551,3408,0,1,6}-{2553,3405,0,1,3}-{2559,3452,0,1,3}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "101",
|
||||
"loc_data": "{2622,3389,0,1,4}-{2619,3390,0,1,4}-{2573,3437,0,1,3}-{2562,9659,0,1,0}-{2563,9661,0,1,0}-{2599,9626,0,1,0}-{2601,9627,0,1,0}-{2605,9621,0,1,0}-{2610,9620,0,1,0}-{2624,3391,0,1,1}-{2555,3407,0,1,3}-{2553,3457,0,1,3}-"
|
||||
"loc_data": "{2622,3389,0,1,4}-{2619,3390,0,1,4}-{2573,3437,0,1,3}-{2305,9385,0,1,0}-{2307,9359,0,1,0}-{2307,9403,0,1,0}-{2310,9396,0,1,0}-{2317,9371,0,1,0}-{2317,9383,0,1,0}-{2324,9404,0,1,0}-{2333,9366,0,1,0}-{2335,9393,0,1,0}-{2339,9403,0,1,0}-{2342,9347,0,1,0}-{2351,9359,0,1,0}-{2359,9392,0,1,0}-{2562,9659,0,1,0}-{2563,9661,0,1,0}-{2599,9626,0,1,0}-{2601,9627,0,1,0}-{2605,9621,0,1,0}-{2610,9620,0,1,0}-{2624,3391,0,1,1}-{2555,3407,0,1,3}-{2553,3457,0,1,3}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "102",
|
||||
|
|
@ -345,7 +345,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "105",
|
||||
"loc_data": "{3100,3594,0,1,6}-{3107,3608,0,1,2}-{3099,3602,0,1,0}-{2632,3280,0,1,1}-{2633,3274,0,1,3}-{2696,3329,0,1,4}-{2708,3336,0,1,4}-{3230,3500,0,1,5}-{2988,3671,0,1,0}-{3001,3674,0,1,0}-{2497,3164,0,1,2}-{2387,3376,0,1,0}-{2398,3366,0,1,0}-{2412,3378,0,1,0}-{2419,3372,0,1,0}-"
|
||||
"loc_data": "{3100,3594,0,1,6}-{3107,3608,0,1,2}-{3099,3602,0,1,0}-{2632,3280,0,1,1}-{2633,3274,0,1,3}-{2387,3376,0,1,0}-{2398,3366,0,1,0}-{2412,3378,0,1,0}-{2419,3372,0,1,0}-{2696,3329,0,1,4}-{2708,3336,0,1,4}-{3230,3500,0,1,5}-{2988,3671,0,1,0}-{3001,3674,0,1,0}-{2497,3164,0,1,2}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "106",
|
||||
|
|
@ -365,7 +365,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "110",
|
||||
"loc_data": "{2564,9887,0,1,4}-{2581,9897,0,1,1}-{2577,9888,0,1,1}-{3234,5497,0,1,1}-{3305,9400,0,1,1}-{3244,9356,0,1,1}-{3252,9370,0,1,1}-{3294,9375,0,1,3}-{3050,10337,0,1,4}-{3047,10340,0,1,4}-{3048,10346,0,1,4}-{3048,10346,0,1,3}-"
|
||||
"loc_data": "{2564,9887,0,1,4}-{2581,9897,0,1,1}-{2577,9888,0,1,1}-{3234,5497,0,1,1}-{3244,9356,0,1,1}-{3252,9370,0,1,1}-{3305,9400,0,1,1}-{3294,9375,0,1,3}-{3050,10337,0,1,4}-{3047,10340,0,1,4}-{3048,10346,0,1,4}-{3048,10346,0,1,3}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "111",
|
||||
|
|
@ -389,7 +389,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "117",
|
||||
"loc_data": "{2369,3404,0,1,0}-{3118,9845,0,1,4}-{3111,9844,0,1,6}-{3123,9845,0,1,3}-{3114,9833,0,1,3}-{3110,9841,0,1,1}-{3119,9839,0,1,1}-{3097,9832,0,1,0}-{3101,9832,0,1,1}-{3107,9829,0,1,3}-{3115,9831,0,1,4}-{3109,9835,0,1,4}-{2904,9734,0,1,0}-{2548,3146,0,1,1}-{2542,3145,0,1,4}-{2503,3150,0,1,4}-{3300,3649,0,1,0}-{3044,10321,0,1,2}-{3044,10316,0,1,4}-{3045,10308,0,1,4}-{3048,10317,0,1,2}-"
|
||||
"loc_data": "{3118,9845,0,1,4}-{3111,9844,0,1,6}-{3123,9845,0,1,3}-{3114,9833,0,1,3}-{3110,9841,0,1,1}-{3119,9839,0,1,1}-{3097,9832,0,1,0}-{3101,9832,0,1,1}-{3107,9829,0,1,3}-{3115,9831,0,1,4}-{3109,9835,0,1,4}-{2369,3404,0,1,0}-{2904,9734,0,1,0}-{2548,3146,0,1,1}-{2542,3145,0,1,4}-{2503,3150,0,1,4}-{3300,3649,0,1,0}-{3044,10321,0,1,2}-{3044,10316,0,1,4}-{3045,10308,0,1,4}-{3048,10317,0,1,2}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "118",
|
||||
|
|
@ -489,23 +489,23 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "153",
|
||||
"loc_data": "{2540,9820,0,1,0}-{2543,9813,0,1,0}-{2546,9817,0,1,0}-{2464,4421,0,1,0}-{2466,4423,0,1,0}-{2486,4464,0,1,0}-{2556,3444,0,1,0}-{3082,3077,0,1,0}-{3092,3082,0,1,0}-{3109,3090,0,1,0}-{3112,3093,0,1,0}-{2249,3260,0,1,0}-{2250,3257,0,1,0}-{2250,3259,0,1,0}-{2252,3261,0,1,0}-{2253,3256,0,1,0}-{2262,3226,0,1,0}-{2264,3225,0,1,0}-{2266,3229,0,1,0}-{2268,3227,0,1,0}-{2269,3222,0,1,0}-{2269,3224,0,1,0}-{2270,3223,0,1,0}-{2270,3226,0,1,0}-{3200,5954,0,1,0}-{3202,5958,0,1,0}-{3204,5955,0,1,0}-{3204,5959,0,1,0}-{3231,5967,0,1,0}-{3236,5974,0,1,0}-{3237,5968,0,1,0}-{3240,5992,0,1,0}-{3240,5994,0,1,0}-{3242,5990,0,1,0}-{3242,5993,0,1,0}-{3244,5994,0,1,0}-{3246,5989,0,1,0}-{2196,3191,0,1,0}-{2197,3189,0,1,0}-{2198,3181,0,1,0}-{2198,3187,0,1,0}-{2199,3183,0,1,0}-{2199,3187,0,1,0}-{2200,3185,0,1,0}-{2201,3185,0,1,0}-{2204,3180,0,1,0}-{2324,4599,0,1,0}-{2325,4597,0,1,0}-{2326,4589,0,1,0}-{2326,4595,0,1,0}-{2327,4591,0,1,0}-{2327,4595,0,1,0}-{2328,4593,0,1,0}-{2329,4593,0,1,0}-{2332,4588,0,1,0}-{2176,3202,0,1,0}-{2178,3206,0,1,0}-{2180,3203,0,1,0}-{2180,3207,0,1,0}-{2207,3215,0,1,0}-{2212,3222,0,1,0}-{2213,3216,0,1,0}-{2216,3240,0,1,0}-{2216,3242,0,1,0}-{2218,3238,0,1,0}-{2218,3241,0,1,0}-{2220,3242,0,1,0}-{2222,3237,0,1,0}-{2437,3425,0,1,0}-{2438,3422,0,1,0}-{2450,3419,0,1,0}-{2415,4466,0,1,0}-{2419,4427,0,1,0}-{2421,4468,0,1,0}-{2426,4431,0,1,0}-{3175,3226,0,1,0}-{3178,3228,0,1,0}-{3179,3226,0,1,0}-{3182,3251,0,1,0}-{3183,3254,0,1,0}-{2697,6204,0,1,0}-{2698,6201,0,1,0}-{2698,6203,0,1,0}-{2700,6205,0,1,0}-{2701,6200,0,1,0}-{2710,6170,0,1,0}-{2712,6169,0,1,0}-{2714,6173,0,1,0}-{2716,6171,0,1,0}-{2717,6166,0,1,0}-{2717,6168,0,1,0}-{2718,6167,0,1,0}-{2718,6170,0,1,0}-{2478,3373,0,1,0}-{2479,3381,0,1,0}-{2481,3384,0,1,0}-{2490,3371,0,1,0}-{2689,6083,0,1,0}-{2689,6088,0,1,0}-{2690,6094,0,1,0}-{2691,6084,0,1,0}-{2692,6081,0,1,0}-{2692,6090,0,1,0}-{2693,6083,0,1,0}-{2693,6085,0,1,0}-{2693,6090,0,1,0}-{2694,6083,0,1,0}-{2694,6086,0,1,0}-{2695,6082,0,1,0}-{2695,6085,0,1,0}-{2695,6088,0,1,0}-{2695,6091,0,1,0}-{2695,6121,0,1,0}-{2698,6121,0,1,0}-{2699,6082,0,1,0}-{2699,6085,0,1,0}-{2700,6084,0,1,0}-{2701,6085,0,1,0}-{2702,6081,0,1,0}-{2702,6083,0,1,0}-{2703,6119,0,1,0}-{2704,6117,0,1,0}-{2705,6121,0,1,0}-{2730,6091,0,1,0}-{2732,6095,0,1,0}-{2734,6090,0,1,0}-{2735,6094,0,1,0}-{2735,6097,0,1,0}-{2738,6098,0,1,0}-{2416,3404,0,1,0}-{2424,3410,0,1,0}-{2430,3405,0,1,0}-{1906,5223,0,1,0}-{1907,5221,0,1,0}-{3273,6012,0,1,0}-{3274,6009,0,1,0}-{3274,6011,0,1,0}-{3276,6013,0,1,0}-{3277,6008,0,1,0}-{3286,5978,0,1,0}-{3288,5977,0,1,0}-{3290,5981,0,1,0}-{3292,5979,0,1,0}-{3293,5974,0,1,0}-{3293,5976,0,1,0}-{3294,5975,0,1,0}-{3294,5978,0,1,0}-{2828,5091,0,1,0}-{2832,5108,0,1,0}-{2835,5079,0,1,0}-{2846,5067,0,1,0}-{2850,5111,0,1,0}-{2853,5086,0,1,0}-{2864,5071,0,1,0}-{2549,3139,0,1,0}-{2241,3139,0,1,0}-{2241,3144,0,1,0}-{2242,3150,0,1,0}-{2243,3140,0,1,0}-{2244,3137,0,1,0}-{2244,3146,0,1,0}-{2245,3139,0,1,0}-{2245,3141,0,1,0}-{2245,3146,0,1,0}-{2246,3139,0,1,0}-{2246,3142,0,1,0}-{2247,3138,0,1,0}-{2247,3141,0,1,0}-{2247,3144,0,1,0}-{2247,3147,0,1,0}-{2247,3177,0,1,0}-{2250,3177,0,1,0}-{2251,3138,0,1,0}-{2251,3141,0,1,0}-{2252,3140,0,1,0}-{2253,3141,0,1,0}-{2254,3137,0,1,0}-{2254,3139,0,1,0}-{2255,3175,0,1,0}-{2256,3173,0,1,0}-{2257,3177,0,1,0}-{2282,3147,0,1,0}-{2284,3151,0,1,0}-{2286,3146,0,1,0}-{2287,3150,0,1,0}-{2287,3153,0,1,0}-{2290,3154,0,1,0}-"
|
||||
"loc_data": "{3082,3077,0,1,0}-{3092,3082,0,1,0}-{3109,3090,0,1,0}-{3112,3093,0,1,0}-{2324,4599,0,1,0}-{2325,4597,0,1,0}-{2326,4589,0,1,0}-{2326,4595,0,1,0}-{2327,4591,0,1,0}-{2327,4595,0,1,0}-{2328,4593,0,1,0}-{2329,4593,0,1,0}-{2332,4588,0,1,0}-{2828,5091,0,1,0}-{2832,5108,0,1,0}-{2835,5079,0,1,0}-{2846,5067,0,1,0}-{2850,5111,0,1,0}-{2853,5086,0,1,0}-{2864,5071,0,1,0}-{3175,3226,0,1,0}-{3178,3228,0,1,0}-{3179,3226,0,1,0}-{3182,3251,0,1,0}-{3183,3254,0,1,0}-{2416,3404,0,1,0}-{2424,3410,0,1,0}-{2430,3405,0,1,0}-{2415,4466,0,1,0}-{2419,4427,0,1,0}-{2421,4468,0,1,0}-{2426,4431,0,1,0}-{1906,5223,0,1,0}-{1907,5221,0,1,0}-{2196,3191,0,1,0}-{2197,3189,0,1,0}-{2198,3181,0,1,0}-{2198,3187,0,1,0}-{2199,3183,0,1,0}-{2199,3187,0,1,0}-{2200,3185,0,1,0}-{2201,3185,0,1,0}-{2204,3180,0,1,0}-{2176,3202,0,1,0}-{2178,3206,0,1,0}-{2180,3203,0,1,0}-{2180,3207,0,1,0}-{2207,3215,0,1,0}-{2212,3222,0,1,0}-{2213,3216,0,1,0}-{2216,3240,0,1,0}-{2216,3242,0,1,0}-{2218,3238,0,1,0}-{2218,3241,0,1,0}-{2220,3242,0,1,0}-{2222,3237,0,1,0}-{2478,3373,0,1,0}-{2479,3381,0,1,0}-{2481,3384,0,1,0}-{2490,3371,0,1,0}-{2437,3425,0,1,0}-{2438,3422,0,1,0}-{2450,3419,0,1,0}-{2464,4421,0,1,0}-{2466,4423,0,1,0}-{2486,4464,0,1,0}-{3200,5954,0,1,0}-{3202,5958,0,1,0}-{3204,5955,0,1,0}-{3204,5959,0,1,0}-{3231,5967,0,1,0}-{3236,5974,0,1,0}-{3237,5968,0,1,0}-{3240,5992,0,1,0}-{3240,5994,0,1,0}-{3242,5990,0,1,0}-{3242,5993,0,1,0}-{3244,5994,0,1,0}-{3246,5989,0,1,0}-{2689,6083,0,1,0}-{2689,6088,0,1,0}-{2690,6094,0,1,0}-{2691,6084,0,1,0}-{2692,6081,0,1,0}-{2692,6090,0,1,0}-{2693,6083,0,1,0}-{2693,6085,0,1,0}-{2693,6090,0,1,0}-{2694,6083,0,1,0}-{2694,6086,0,1,0}-{2695,6082,0,1,0}-{2695,6085,0,1,0}-{2695,6088,0,1,0}-{2695,6091,0,1,0}-{2695,6121,0,1,0}-{2698,6121,0,1,0}-{2699,6082,0,1,0}-{2699,6085,0,1,0}-{2700,6084,0,1,0}-{2701,6085,0,1,0}-{2702,6081,0,1,0}-{2702,6083,0,1,0}-{2703,6119,0,1,0}-{2704,6117,0,1,0}-{2705,6121,0,1,0}-{2730,6091,0,1,0}-{2732,6095,0,1,0}-{2734,6090,0,1,0}-{2735,6094,0,1,0}-{2735,6097,0,1,0}-{2738,6098,0,1,0}-{2697,6204,0,1,0}-{2698,6201,0,1,0}-{2698,6203,0,1,0}-{2700,6205,0,1,0}-{2701,6200,0,1,0}-{2710,6170,0,1,0}-{2712,6169,0,1,0}-{2714,6173,0,1,0}-{2716,6171,0,1,0}-{2717,6166,0,1,0}-{2717,6168,0,1,0}-{2718,6167,0,1,0}-{2718,6170,0,1,0}-{2549,3139,0,1,0}-{2241,3139,0,1,0}-{2241,3144,0,1,0}-{2242,3150,0,1,0}-{2243,3140,0,1,0}-{2244,3137,0,1,0}-{2244,3146,0,1,0}-{2245,3139,0,1,0}-{2245,3141,0,1,0}-{2245,3146,0,1,0}-{2246,3139,0,1,0}-{2246,3142,0,1,0}-{2247,3138,0,1,0}-{2247,3141,0,1,0}-{2247,3144,0,1,0}-{2247,3147,0,1,0}-{2247,3177,0,1,0}-{2250,3177,0,1,0}-{2251,3138,0,1,0}-{2251,3141,0,1,0}-{2252,3140,0,1,0}-{2253,3141,0,1,0}-{2254,3137,0,1,0}-{2254,3139,0,1,0}-{2255,3175,0,1,0}-{2256,3173,0,1,0}-{2257,3177,0,1,0}-{2282,3147,0,1,0}-{2284,3151,0,1,0}-{2286,3146,0,1,0}-{2287,3150,0,1,0}-{2287,3153,0,1,0}-{2290,3154,0,1,0}-{2249,3260,0,1,0}-{2250,3257,0,1,0}-{2250,3259,0,1,0}-{2252,3261,0,1,0}-{2253,3256,0,1,0}-{2262,3226,0,1,0}-{2264,3225,0,1,0}-{2266,3229,0,1,0}-{2268,3227,0,1,0}-{2269,3222,0,1,0}-{2269,3224,0,1,0}-{2270,3223,0,1,0}-{2270,3226,0,1,0}-{2556,3444,0,1,0}-{3273,6012,0,1,0}-{3274,6009,0,1,0}-{3274,6011,0,1,0}-{3276,6013,0,1,0}-{3277,6008,0,1,0}-{3286,5978,0,1,0}-{3288,5977,0,1,0}-{3290,5981,0,1,0}-{3292,5979,0,1,0}-{3293,5974,0,1,0}-{3293,5976,0,1,0}-{3294,5975,0,1,0}-{3294,5978,0,1,0}-{2540,9820,0,1,0}-{2543,9813,0,1,0}-{2546,9817,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "154",
|
||||
"loc_data": "{2475,4459,0,1,0}-{2480,4458,0,1,0}-{2481,4454,0,1,0}-{2488,4465,0,1,0}-{3125,3084,0,1,0}-{2268,3228,0,1,0}-{3202,5955,0,1,0}-{3206,5953,0,1,0}-{3231,5976,0,1,0}-{3233,5974,0,1,0}-{3235,5970,0,1,0}-{3241,5996,0,1,0}-{3242,5988,0,1,0}-{3244,5992,0,1,0}-{2180,3173,0,1,0}-{2193,3187,0,1,0}-{2196,3184,0,1,0}-{2200,3181,0,1,0}-{2200,3188,0,1,0}-{2203,3189,0,1,0}-{2308,4581,0,1,0}-{2321,4595,0,1,0}-{2324,4592,0,1,0}-{2328,4589,0,1,0}-{2328,4596,0,1,0}-{2331,4597,0,1,0}-{2178,3203,0,1,0}-{2182,3201,0,1,0}-{2207,3224,0,1,0}-{2209,3222,0,1,0}-{2211,3218,0,1,0}-{2217,3244,0,1,0}-{2218,3236,0,1,0}-{2220,3240,0,1,0}-{2446,3396,0,1,0}-{2470,3397,0,1,0}-{2394,4453,0,1,0}-{2394,4457,0,1,0}-{2406,4447,0,1,0}-{2422,3489,0,1,0}-{2716,6172,0,1,0}-{2688,6092,0,1,0}-{2690,6087,0,1,0}-{2690,6095,0,1,0}-{2692,6082,0,1,0}-{2692,6088,0,1,0}-{2692,6123,0,1,0}-{2693,6081,0,1,0}-{2694,6125,0,1,0}-{2695,6087,0,1,0}-{2697,6086,0,1,0}-{2697,6087,0,1,0}-{2698,6081,0,1,0}-{2698,6124,0,1,0}-{2700,6083,0,1,0}-{2702,6084,0,1,0}-{2726,6085,0,1,0}-{2727,6081,0,1,0}-{2729,6083,0,1,0}-{2732,6084,0,1,0}-{2378,3418,0,1,0}-{2380,3422,0,1,0}-{2393,3442,0,1,0}-{2397,3440,0,1,0}-{2423,3399,0,1,0}-{2425,3406,0,1,0}-{2427,3402,0,1,0}-{1908,5222,0,1,0}-{3292,5980,0,1,0}-{2831,5070,0,1,0}-{2843,5106,0,1,0}-{2844,5080,0,1,0}-{2860,5079,0,1,0}-{2866,5104,0,1,0}-{2868,5096,0,1,0}-{2240,3148,0,1,0}-{2242,3143,0,1,0}-{2242,3151,0,1,0}-{2244,3138,0,1,0}-{2244,3144,0,1,0}-{2244,3179,0,1,0}-{2245,3137,0,1,0}-{2246,3181,0,1,0}-{2247,3143,0,1,0}-{2249,3142,0,1,0}-{2249,3143,0,1,0}-{2250,3137,0,1,0}-{2250,3180,0,1,0}-{2252,3139,0,1,0}-{2254,3140,0,1,0}-{2278,3141,0,1,0}-{2279,3137,0,1,0}-{2281,3139,0,1,0}-{2284,3140,0,1,0}-"
|
||||
"loc_data": "{3125,3084,0,1,0}-{2308,4581,0,1,0}-{2321,4595,0,1,0}-{2324,4592,0,1,0}-{2328,4589,0,1,0}-{2328,4596,0,1,0}-{2331,4597,0,1,0}-{2831,5070,0,1,0}-{2843,5106,0,1,0}-{2844,5080,0,1,0}-{2860,5079,0,1,0}-{2866,5104,0,1,0}-{2868,5096,0,1,0}-{2378,3418,0,1,0}-{2380,3422,0,1,0}-{2393,3442,0,1,0}-{2397,3440,0,1,0}-{2423,3399,0,1,0}-{2425,3406,0,1,0}-{2427,3402,0,1,0}-{2422,3489,0,1,0}-{2394,4453,0,1,0}-{2394,4457,0,1,0}-{2406,4447,0,1,0}-{1908,5222,0,1,0}-{2180,3173,0,1,0}-{2193,3187,0,1,0}-{2196,3184,0,1,0}-{2200,3181,0,1,0}-{2200,3188,0,1,0}-{2203,3189,0,1,0}-{2178,3203,0,1,0}-{2182,3201,0,1,0}-{2207,3224,0,1,0}-{2209,3222,0,1,0}-{2211,3218,0,1,0}-{2217,3244,0,1,0}-{2218,3236,0,1,0}-{2220,3240,0,1,0}-{2446,3396,0,1,0}-{2470,3397,0,1,0}-{2475,4459,0,1,0}-{2480,4458,0,1,0}-{2481,4454,0,1,0}-{2488,4465,0,1,0}-{3202,5955,0,1,0}-{3206,5953,0,1,0}-{3231,5976,0,1,0}-{3233,5974,0,1,0}-{3235,5970,0,1,0}-{3241,5996,0,1,0}-{3242,5988,0,1,0}-{3244,5992,0,1,0}-{2688,6092,0,1,0}-{2690,6087,0,1,0}-{2690,6095,0,1,0}-{2692,6082,0,1,0}-{2692,6088,0,1,0}-{2692,6123,0,1,0}-{2693,6081,0,1,0}-{2694,6125,0,1,0}-{2695,6087,0,1,0}-{2697,6086,0,1,0}-{2697,6087,0,1,0}-{2698,6081,0,1,0}-{2698,6124,0,1,0}-{2700,6083,0,1,0}-{2702,6084,0,1,0}-{2726,6085,0,1,0}-{2727,6081,0,1,0}-{2729,6083,0,1,0}-{2732,6084,0,1,0}-{2716,6172,0,1,0}-{2240,3148,0,1,0}-{2242,3143,0,1,0}-{2242,3151,0,1,0}-{2244,3138,0,1,0}-{2244,3144,0,1,0}-{2244,3179,0,1,0}-{2245,3137,0,1,0}-{2246,3181,0,1,0}-{2247,3143,0,1,0}-{2249,3142,0,1,0}-{2249,3143,0,1,0}-{2250,3137,0,1,0}-{2250,3180,0,1,0}-{2252,3139,0,1,0}-{2254,3140,0,1,0}-{2278,3141,0,1,0}-{2279,3137,0,1,0}-{2281,3139,0,1,0}-{2284,3140,0,1,0}-{2268,3228,0,1,0}-{3292,5980,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "155",
|
||||
"loc_data": "{3093,3086,0,1,0}-{3097,3085,0,1,0}-{3129,3091,0,1,0}-{3135,3084,0,1,0}-{2190,3180,0,1,0}-{2318,4588,0,1,0}-{2374,3469,0,1,0}-{2376,3466,0,1,0}-{3254,3230,0,1,0}-{1986,5564,0,1,0}-{2434,3516,0,1,0}-{2479,3501,0,1,0}-"
|
||||
"loc_data": "{3093,3086,0,1,0}-{3097,3085,0,1,0}-{3129,3091,0,1,0}-{3135,3084,0,1,0}-{2318,4588,0,1,0}-{2374,3469,0,1,0}-{2376,3466,0,1,0}-{2190,3180,0,1,0}-{3254,3230,0,1,0}-{2434,3516,0,1,0}-{2479,3501,0,1,0}-{1986,5564,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "156",
|
||||
"loc_data": "{2371,3460,0,1,0}-{2372,3456,0,1,0}-{2422,3467,0,1,0}-{2725,6127,0,1,0}-{2444,3491,0,1,0}-{2277,3183,0,1,0}-"
|
||||
"loc_data": "{2371,3460,0,1,0}-{2372,3456,0,1,0}-{2422,3467,0,1,0}-{2444,3491,0,1,0}-{2725,6127,0,1,0}-{2277,3183,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "157",
|
||||
"loc_data": "{2180,2798,0,1,0}-{2209,2812,0,1,0}-{2217,2780,0,1,0}-{1921,5931,0,1,0}-{1947,5908,0,1,0}-{1955,5949,0,1,0}-{1973,5888,0,1,0}-{1975,5918,0,1,0}-{1988,5870,0,1,0}-{2017,5884,0,1,0}-{2025,5852,0,1,0}-{2182,2979,0,1,0}-{2211,2963,0,1,0}-{1931,6038,0,1,0}-{1983,6037,0,1,0}-{2153,2810,0,1,0}-{2172,2806,0,1,0}-{1961,5882,0,1,0}-{1980,5878,0,1,0}-{2242,2788,0,1,0}-{2248,2858,0,1,0}-{2256,2828,0,1,0}-{2284,2874,0,1,0}-{2255,3216,0,1,0}-{2262,3210,0,1,0}-{2271,3204,0,1,0}-{2294,3219,0,1,0}-{2296,3206,0,1,0}-{2298,3201,0,1,0}-{2056,5930,0,1,0}-{2064,5900,0,1,0}-{2092,5946,0,1,0}-{2050,5860,0,1,0}-{3201,5986,0,1,0}-{3254,5972,0,1,0}-{3255,5986,0,1,0}-{3256,6008,0,1,0}-{3257,5973,0,1,0}-{3257,5975,0,1,0}-{3260,5974,0,1,0}-{3261,5977,0,1,0}-{3262,5957,0,1,0}-{2194,3158,0,1,0}-{2216,3188,0,1,0}-{2217,3190,0,1,0}-{2220,3158,0,1,0}-{2222,3141,0,1,0}-{2229,3138,0,1,0}-{2231,3181,0,1,0}-{2236,3155,0,1,0}-{2278,2956,0,1,0}-{2322,4566,0,1,0}-{2344,4596,0,1,0}-{2345,4598,0,1,0}-{2348,4566,0,1,0}-{2350,4549,0,1,0}-{2357,4546,0,1,0}-{2359,4589,0,1,0}-{2364,4563,0,1,0}-{2177,3234,0,1,0}-{2230,3220,0,1,0}-{2231,3234,0,1,0}-{2232,3256,0,1,0}-{2233,3221,0,1,0}-{2233,3223,0,1,0}-{2236,3222,0,1,0}-{2237,3225,0,1,0}-{2238,3205,0,1,0}-{2479,3396,0,1,0}-{2102,2942,0,1,0}-{2108,2919,0,1,0}-{2104,2873,0,1,0}-{2122,6032,0,1,0}-{1912,5945,0,1,0}-{3143,3210,0,1,0}-{3155,3253,0,1,0}-{3163,3261,0,1,0}-{3168,3258,0,1,0}-{2086,6028,0,1,0}-{2703,6160,0,1,0}-{2710,6154,0,1,0}-{2719,6148,0,1,0}-{2742,6163,0,1,0}-{2744,6150,0,1,0}-{2746,6145,0,1,0}-{2314,2960,0,1,0}-{2723,6105,0,1,0}-{2739,6123,0,1,0}-{2744,6108,0,1,0}-{2326,2894,0,1,0}-{2333,2920,0,1,0}-{3279,5968,0,1,0}-{3286,5962,0,1,0}-{3295,5956,0,1,0}-{3318,5971,0,1,0}-{3320,5958,0,1,0}-{3322,5953,0,1,0}-{2134,5966,0,1,0}-{2141,5992,0,1,0}-{2123,2966,0,1,0}-{2175,2965,0,1,0}-{1910,6014,0,1,0}-{1916,5991,0,1,0}-{2540,3167,0,1,0}-{2110,2955,0,1,0}-{1990,6051,0,1,0}-{2019,6035,0,1,0}-{2447,3467,0,1,0}-{2448,3469,0,1,0}-{1918,6027,0,1,0}-{2275,3161,0,1,0}-{2291,3179,0,1,0}-{2296,3164,0,1,0}-{2113,2859,0,1,0}-{2139,2836,0,1,0}-{2147,2877,0,1,0}-{2165,2816,0,1,0}-{2167,2846,0,1,0}-"
|
||||
"loc_data": "{2104,2873,0,1,0}-{2102,2942,0,1,0}-{2108,2919,0,1,0}-{2326,2894,0,1,0}-{2333,2920,0,1,0}-{2314,2960,0,1,0}-{2110,2955,0,1,0}-{2322,4566,0,1,0}-{2344,4596,0,1,0}-{2345,4598,0,1,0}-{2348,4566,0,1,0}-{2350,4549,0,1,0}-{2357,4546,0,1,0}-{2359,4589,0,1,0}-{2364,4563,0,1,0}-{2050,5860,0,1,0}-{2056,5930,0,1,0}-{2064,5900,0,1,0}-{2092,5946,0,1,0}-{2086,6028,0,1,0}-{2153,2810,0,1,0}-{2172,2806,0,1,0}-{2113,2859,0,1,0}-{2139,2836,0,1,0}-{2147,2877,0,1,0}-{2165,2816,0,1,0}-{2167,2846,0,1,0}-{2123,2966,0,1,0}-{2175,2965,0,1,0}-{3143,3210,0,1,0}-{3155,3253,0,1,0}-{3163,3261,0,1,0}-{3168,3258,0,1,0}-{1912,5945,0,1,0}-{2134,5966,0,1,0}-{2141,5992,0,1,0}-{1910,6014,0,1,0}-{1916,5991,0,1,0}-{2122,6032,0,1,0}-{1918,6027,0,1,0}-{2180,2798,0,1,0}-{2209,2812,0,1,0}-{2217,2780,0,1,0}-{2182,2979,0,1,0}-{2211,2963,0,1,0}-{2194,3158,0,1,0}-{2216,3188,0,1,0}-{2217,3190,0,1,0}-{2220,3158,0,1,0}-{2222,3141,0,1,0}-{2229,3138,0,1,0}-{2231,3181,0,1,0}-{2236,3155,0,1,0}-{2177,3234,0,1,0}-{2230,3220,0,1,0}-{2231,3234,0,1,0}-{2232,3256,0,1,0}-{2233,3221,0,1,0}-{2233,3223,0,1,0}-{2236,3222,0,1,0}-{2237,3225,0,1,0}-{2238,3205,0,1,0}-{2479,3396,0,1,0}-{2447,3467,0,1,0}-{2448,3469,0,1,0}-{1961,5882,0,1,0}-{1980,5878,0,1,0}-{1921,5931,0,1,0}-{1947,5908,0,1,0}-{1955,5949,0,1,0}-{1973,5888,0,1,0}-{1975,5918,0,1,0}-{3201,5986,0,1,0}-{3254,5972,0,1,0}-{3255,5986,0,1,0}-{3256,6008,0,1,0}-{3257,5973,0,1,0}-{3257,5975,0,1,0}-{3260,5974,0,1,0}-{3261,5977,0,1,0}-{3262,5957,0,1,0}-{1931,6038,0,1,0}-{1983,6037,0,1,0}-{2723,6105,0,1,0}-{2739,6123,0,1,0}-{2744,6108,0,1,0}-{2703,6160,0,1,0}-{2710,6154,0,1,0}-{2719,6148,0,1,0}-{2742,6163,0,1,0}-{2744,6150,0,1,0}-{2746,6145,0,1,0}-{2242,2788,0,1,0}-{2248,2858,0,1,0}-{2256,2828,0,1,0}-{2284,2874,0,1,0}-{2278,2956,0,1,0}-{2540,3167,0,1,0}-{2275,3161,0,1,0}-{2291,3179,0,1,0}-{2296,3164,0,1,0}-{2255,3216,0,1,0}-{2262,3210,0,1,0}-{2271,3204,0,1,0}-{2294,3219,0,1,0}-{2296,3206,0,1,0}-{2298,3201,0,1,0}-{1988,5870,0,1,0}-{2017,5884,0,1,0}-{2025,5852,0,1,0}-{3279,5968,0,1,0}-{3286,5962,0,1,0}-{3295,5956,0,1,0}-{3318,5971,0,1,0}-{3320,5958,0,1,0}-{3322,5953,0,1,0}-{1990,6051,0,1,0}-{2019,6035,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "158",
|
||||
|
|
@ -513,7 +513,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "159",
|
||||
"loc_data": "{2392,3475,0,1,0}-{2394,3506,0,1,0}-{2396,3471,0,1,0}-{2405,3499,0,1,0}-{2416,3487,0,1,0}-{2413,3445,1,1,0}-{2415,3435,1,1,0}-{2416,3416,1,1,0}-{2424,3434,1,1,0}-{2483,3500,1,1,0}-"
|
||||
"loc_data": "{2413,3445,1,1,0}-{2415,3435,1,1,0}-{2416,3416,1,1,0}-{2424,3434,1,1,0}-{2392,3475,0,1,0}-{2394,3506,0,1,0}-{2396,3471,0,1,0}-{2405,3499,0,1,0}-{2416,3487,0,1,0}-{2483,3500,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "160",
|
||||
|
|
@ -529,11 +529,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "163",
|
||||
"loc_data": "{2451,3414,0,1,0}-{2459,3395,0,1,0}-{2459,3438,0,1,0}-{2462,3395,0,1,0}-{2445,3429,1,1,0}-{2409,3470,1,1,0}-{2416,3466,1,1,0}-{2420,3466,1,1,0}-{2461,9895,0,1,0}-{2465,9894,0,1,0}-{2465,9899,0,1,0}-{2459,3385,0,1,0}-{2463,3385,0,1,0}-{2392,3454,0,1,0}-{2394,3436,0,1,0}-{2408,3452,0,1,0}-{2421,3413,0,1,0}-{2442,3489,0,1,0}-{2450,3485,0,1,0}-{2451,3507,0,1,0}-{2453,3490,0,1,0}-{2459,3503,0,1,0}-{2461,3509,0,1,0}-{2464,3465,0,1,0}-{2464,3468,0,1,0}-{2468,3465,0,1,0}-{2468,3468,0,1,0}-{2468,3506,0,1,0}-{2472,3484,0,1,0}-{2475,3490,0,1,0}-{2475,3502,0,1,0}-{2477,3512,0,1,0}-{2481,3485,0,1,0}-{2482,3501,0,1,0}-{2467,3495,1,1,0}-{2473,3495,1,1,0}-{2448,3497,2,1,0}-{2463,3480,2,1,0}-{2465,3497,2,1,0}-{2465,3510,2,1,0}-{2466,3480,2,1,0}-"
|
||||
"loc_data": "{2392,3454,0,1,0}-{2394,3436,0,1,0}-{2408,3452,0,1,0}-{2421,3413,0,1,0}-{2409,3470,1,1,0}-{2416,3466,1,1,0}-{2420,3466,1,1,0}-{2459,3385,0,1,0}-{2463,3385,0,1,0}-{2451,3414,0,1,0}-{2459,3395,0,1,0}-{2459,3438,0,1,0}-{2462,3395,0,1,0}-{2445,3429,1,1,0}-{2442,3489,0,1,0}-{2450,3485,0,1,0}-{2451,3507,0,1,0}-{2453,3490,0,1,0}-{2459,3503,0,1,0}-{2461,3509,0,1,0}-{2464,3465,0,1,0}-{2464,3468,0,1,0}-{2468,3465,0,1,0}-{2468,3468,0,1,0}-{2468,3506,0,1,0}-{2472,3484,0,1,0}-{2475,3490,0,1,0}-{2475,3502,0,1,0}-{2477,3512,0,1,0}-{2481,3485,0,1,0}-{2482,3501,0,1,0}-{2467,3495,1,1,0}-{2473,3495,1,1,0}-{2448,3497,2,1,0}-{2463,3480,2,1,0}-{2465,3497,2,1,0}-{2465,3510,2,1,0}-{2466,3480,2,1,0}-{2461,9895,0,1,0}-{2465,9894,0,1,0}-{2465,9899,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "164",
|
||||
"loc_data": "{2459,3392,0,1,0}-{2461,3422,0,1,0}-{2462,3392,0,1,0}-{2460,3382,0,1,0}-{2462,3382,0,1,0}-{2410,3416,0,1,0}-{2420,3435,0,1,0}-{2420,3447,0,1,0}-{2427,3410,0,1,0}-{2012,5535,2,1,0}-{2023,5544,2,1,0}-{2441,3497,0,1,0}-{2447,3510,0,1,0}-{2461,3487,0,1,0}-{2464,3472,0,1,0}-{2464,3489,0,1,0}-{2467,3489,0,1,0}-{2468,3472,0,1,0}-{2473,3503,0,1,0}-{2478,3497,0,1,0}-{2464,3496,1,1,0}-{2448,3495,2,1,0}-{2460,3487,2,1,0}-{2467,3494,2,1,0}-{2467,3510,2,1,0}-{2471,3496,2,1,0}-{2483,3495,2,1,0}-{2483,3497,2,1,0}-"
|
||||
"loc_data": "{2410,3416,0,1,0}-{2420,3435,0,1,0}-{2420,3447,0,1,0}-{2427,3410,0,1,0}-{2460,3382,0,1,0}-{2462,3382,0,1,0}-{2459,3392,0,1,0}-{2461,3422,0,1,0}-{2462,3392,0,1,0}-{2441,3497,0,1,0}-{2447,3510,0,1,0}-{2461,3487,0,1,0}-{2464,3472,0,1,0}-{2464,3489,0,1,0}-{2467,3489,0,1,0}-{2468,3472,0,1,0}-{2473,3503,0,1,0}-{2478,3497,0,1,0}-{2464,3496,1,1,0}-{2448,3495,2,1,0}-{2460,3487,2,1,0}-{2467,3494,2,1,0}-{2467,3510,2,1,0}-{2471,3496,2,1,0}-{2483,3495,2,1,0}-{2483,3497,2,1,0}-{2012,5535,2,1,0}-{2023,5544,2,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "166",
|
||||
|
|
@ -541,11 +541,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "168",
|
||||
"loc_data": "{2434,3436,0,1,0}-{2437,3451,0,1,0}-{2438,3427,0,1,0}-{2441,3411,0,1,0}-{2466,3449,0,1,0}-{2470,3399,0,1,0}-{2472,3400,0,1,0}-{2473,3412,0,1,0}-{2476,3454,0,1,0}-{2482,3397,0,1,0}-{2489,3401,0,1,0}-{2479,3407,1,1,0}-{2379,3482,0,1,0}-{2381,3496,0,1,0}-{2384,3497,0,1,0}-{2391,3476,0,1,0}-{2410,3496,0,1,0}-{2421,3481,0,1,0}-{2397,3514,1,1,0}-{2398,3451,1,1,0}-{2414,3447,1,1,0}-{2438,3465,0,1,0}-{2442,3505,0,1,0}-{2448,3486,0,1,0}-{2449,3487,0,1,0}-{2450,3489,0,1,0}-{2450,3505,0,1,0}-{2454,3465,0,1,0}-{2449,3486,1,1,0}-{2457,3488,1,1,0}-{2476,3488,1,1,0}-{2450,3496,2,1,0}-{2467,3488,2,1,0}-{2470,3503,2,1,0}-{2481,3498,2,1,0}-"
|
||||
"loc_data": "{2398,3451,1,1,0}-{2414,3447,1,1,0}-{2379,3482,0,1,0}-{2381,3496,0,1,0}-{2384,3497,0,1,0}-{2391,3476,0,1,0}-{2410,3496,0,1,0}-{2421,3481,0,1,0}-{2397,3514,1,1,0}-{2434,3436,0,1,0}-{2437,3451,0,1,0}-{2438,3427,0,1,0}-{2441,3411,0,1,0}-{2466,3449,0,1,0}-{2470,3399,0,1,0}-{2472,3400,0,1,0}-{2473,3412,0,1,0}-{2476,3454,0,1,0}-{2482,3397,0,1,0}-{2489,3401,0,1,0}-{2479,3407,1,1,0}-{2438,3465,0,1,0}-{2442,3505,0,1,0}-{2448,3486,0,1,0}-{2449,3487,0,1,0}-{2450,3489,0,1,0}-{2450,3505,0,1,0}-{2454,3465,0,1,0}-{2449,3486,1,1,0}-{2457,3488,1,1,0}-{2476,3488,1,1,0}-{2450,3496,2,1,0}-{2467,3488,2,1,0}-{2470,3503,2,1,0}-{2481,3498,2,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "169",
|
||||
"loc_data": "{2439,3433,0,1,0}-{2441,3449,0,1,0}-{2442,3428,0,1,0}-{2446,3403,0,1,0}-{2450,3416,0,1,0}-{2468,3441,0,1,0}-{2480,3408,0,1,0}-{2480,3406,1,1,0}-{2486,3400,1,1,0}-{2378,3482,0,1,0}-{2383,3496,0,1,0}-{2402,3507,0,1,0}-{2406,3476,0,1,0}-{2422,3485,0,1,0}-{2382,3506,1,1,0}-{2418,3472,1,1,0}-{2392,3450,1,1,0}-{2415,3415,1,1,0}-{2416,3434,1,1,0}-{2423,3425,1,1,0}-{2424,3442,1,1,0}-{2448,3489,0,1,0}-{2450,3488,0,1,0}-{2463,3508,0,1,0}-{2473,3489,0,1,0}-{2474,3457,0,1,0}-{2479,3503,0,1,0}-{2486,3467,0,1,0}-{2437,3463,1,1,0}-{2448,3489,1,1,0}-{2482,3508,1,1,0}-"
|
||||
"loc_data": "{2392,3450,1,1,0}-{2415,3415,1,1,0}-{2416,3434,1,1,0}-{2423,3425,1,1,0}-{2424,3442,1,1,0}-{2378,3482,0,1,0}-{2383,3496,0,1,0}-{2402,3507,0,1,0}-{2406,3476,0,1,0}-{2422,3485,0,1,0}-{2382,3506,1,1,0}-{2418,3472,1,1,0}-{2439,3433,0,1,0}-{2441,3449,0,1,0}-{2442,3428,0,1,0}-{2446,3403,0,1,0}-{2450,3416,0,1,0}-{2468,3441,0,1,0}-{2480,3408,0,1,0}-{2480,3406,1,1,0}-{2486,3400,1,1,0}-{2448,3489,0,1,0}-{2450,3488,0,1,0}-{2463,3508,0,1,0}-{2473,3489,0,1,0}-{2474,3457,0,1,0}-{2479,3503,0,1,0}-{2486,3467,0,1,0}-{2437,3463,1,1,0}-{2448,3489,1,1,0}-{2482,3508,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "170",
|
||||
|
|
@ -1357,11 +1357,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "479",
|
||||
"loc_data": "{1970,5522,3,1,0}-{2384,3481,0,1,0}-{2388,3473,0,1,0}-{2418,3474,3,1,0}-{2415,3433,3,1,0}-{2466,3500,2,1,0}-"
|
||||
"loc_data": "{2415,3433,3,1,0}-{2384,3481,0,1,0}-{2388,3473,0,1,0}-{2418,3474,3,1,0}-{2466,3500,2,1,0}-{1970,5522,3,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "480",
|
||||
"loc_data": "{1964,5522,3,1,0}-{2458,3417,1,1,0}-{2460,3417,1,1,0}-{2409,3507,0,1,0}-{2412,3474,3,1,0}-{2463,3504,2,1,0}-"
|
||||
"loc_data": "{2409,3507,0,1,0}-{2412,3474,3,1,0}-{2458,3417,1,1,0}-{2460,3417,1,1,0}-{2463,3504,2,1,0}-{1964,5522,3,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "481",
|
||||
|
|
@ -1387,6 +1387,10 @@
|
|||
"npc_id": "490",
|
||||
"loc_data": "{1887,5026,0,0,6}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "492",
|
||||
"loc_data": "{2464,3227,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "494",
|
||||
"loc_data": "{2615,3094,0,0,3}-{2615,3092,0,0,3}-{2615,3092,0,0,3}-{2615,3094,0,0,3}-{3122,3125,0,0,6}-{3120,3125,0,0,6}-{3090,3242,0,0,4}-{3090,3245,0,0,4}-{3090,3243,0,0,4}-{2618,3330,0,0,0}-{2619,3330,0,0,0}-{2584,3422,0,0,4}-{2584,3419,0,0,4}-{2584,3418,0,0,4}-{2657,3283,0,0,3}-{2657,3286,0,0,3}-{2807,3443,0,0,6}-{2810,3443,0,0,6}-"
|
||||
|
|
@ -2433,11 +2437,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "839",
|
||||
"loc_data": "{3265,3066,0,1,0}-{3267,3066,0,1,0}-{3310,3068,0,1,0}-{3322,3011,0,1,0}-{3322,3052,0,1,0}-{3324,3030,0,1,0}-{3150,3044,0,1,0}-{3172,3009,0,1,0}-{3197,3012,0,1,0}-{3198,3040,0,1,0}-{3217,3092,0,1,0}-{3235,3074,0,1,0}-{3252,3125,0,1,0}-{3258,3078,0,1,0}-{3237,2968,0,1,0}-{3224,3013,0,1,0}-{3225,3034,0,1,0}-{3226,3060,0,1,0}-{3250,3057,0,1,0}-{3283,3108,0,1,0}-{3323,3094,0,1,0}-"
|
||||
"loc_data": "{3150,3044,0,1,0}-{3172,3009,0,1,0}-{3197,3012,0,1,0}-{3198,3040,0,1,0}-{3237,2968,0,1,0}-{3224,3013,0,1,0}-{3225,3034,0,1,0}-{3226,3060,0,1,0}-{3250,3057,0,1,0}-{3217,3092,0,1,0}-{3235,3074,0,1,0}-{3252,3125,0,1,0}-{3258,3078,0,1,0}-{3265,3066,0,1,0}-{3267,3066,0,1,0}-{3310,3068,0,1,0}-{3322,3011,0,1,0}-{3322,3052,0,1,0}-{3324,3030,0,1,0}-{3283,3108,0,1,0}-{3323,3094,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "840",
|
||||
"loc_data": "{3268,3052,0,1,0}-{3281,3056,0,1,0}-{3307,3055,0,1,0}-{3318,3020,0,1,0}-{3318,3040,0,1,0}-{3190,3054,0,1,0}-{3192,3016,0,1,0}-{3217,3111,0,1,0}-{3222,3086,0,1,0}-{3238,3101,0,1,0}-{3244,3080,0,1,0}-{3253,3116,0,1,0}-{3255,3095,0,1,0}-{3237,3000,0,1,0}-{3245,2960,0,1,0}-{3208,3032,0,1,0}-{3217,3064,0,1,0}-{3238,3015,0,1,0}-{3258,3063,0,1,0}-{3267,3077,0,1,0}-{3269,3110,0,1,0}-{3275,3094,0,1,0}-{3291,3078,0,1,0}-{3291,3100,0,1,0}-{3305,3089,0,1,0}-{3318,3078,0,1,0}-{3321,3104,0,1,0}-"
|
||||
"loc_data": "{3190,3054,0,1,0}-{3192,3016,0,1,0}-{3237,3000,0,1,0}-{3245,2960,0,1,0}-{3208,3032,0,1,0}-{3217,3064,0,1,0}-{3238,3015,0,1,0}-{3258,3063,0,1,0}-{3217,3111,0,1,0}-{3222,3086,0,1,0}-{3238,3101,0,1,0}-{3244,3080,0,1,0}-{3253,3116,0,1,0}-{3255,3095,0,1,0}-{3268,3052,0,1,0}-{3281,3056,0,1,0}-{3307,3055,0,1,0}-{3318,3020,0,1,0}-{3318,3040,0,1,0}-{3267,3077,0,1,0}-{3269,3110,0,1,0}-{3275,3094,0,1,0}-{3291,3078,0,1,0}-{3291,3100,0,1,0}-{3305,3089,0,1,0}-{3318,3078,0,1,0}-{3321,3104,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "841",
|
||||
|
|
@ -2781,7 +2785,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1019",
|
||||
"loc_data": "{3187,5555,0,1,4}-{3190,5563,0,1,1}-{3193,5555,0,1,3} -{3213,9377,0,1,3}-{3209,9397,0,1,4}-{3245,9401,0,1,6}- {3237,9402,0,1,2}-{3207,9349,0,1,3}-{3220,9347,0,1,6} -{3233,9359,0,1,4}-{3235,9354,0,0,6}-{3259,9370,0,1,1}- {3258,9387,0,1,6}-{2707,9880,0,1,0}-{2711,9876,0,1,0}- {2712,9871,0,1,0}-{2715,9874,0,1,0}-{2720,9871,0,1,0} -{2717,9880,0,1,0}-{2722,9879,0,1,0}-{2723,9875,0,1,0}- {3278,9368,0,1,5}-{3271,9359,0,1,3}-{3287,9359,0,1,5}- {3301,9394,0,1,5}-{3318,9352,0,1,5}-"
|
||||
"loc_data": "{3187,5555,0,1,4}-{3190,5563,0,1,1}-{3193,5555,0,1,3}-{3213,9377,0,1,3}-{3209,9397,0,1,4}-{3245,9401,0,1,6}-{3237,9402,0,1,2}-{3207,9349,0,1,3}-{3220,9347,0,1,6}-{3233,9359,0,1,4}-{3235,9354,0,0,6}-{3259,9370,0,1,1}-{3258,9387,0,1,6}-{2707,9880,0,1,0}-{2711,9876,0,1,0}-{2712,9871,0,1,0}-{2715,9874,0,1,0}-{2720,9871,0,1,0}-{2717,9880,0,1,0}-{2722,9879,0,1,0}-{2723,9875,0,1,0}-{3278,9368,0,1,5}-{3271,9359,0,1,3}-{3287,9359,0,1,5}-{3301,9394,0,1,5}-{3318,9352,0,1,5}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1020",
|
||||
|
|
@ -2829,7 +2833,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1043",
|
||||
"loc_data": "{3726,3381,0,0,0}-{3745,3359,0,0,0}-{3749,3365,0,0,0}-{3750,3354,0,0,0}-{3757,3363,0,0,0}-{3763,3337,0,0,0}-{3459,3457,0,0,0}-{3460,3462,0,0,0}-{3462,3459,0,0,0}-{3463,3490,0,0,0}-{3464,3511,0,0,0}-{3465,3466,0,0,0}-{3466,3495,0,0,0}-{3466,3497,0,0,0}-{3467,3485,0,0,0}-{3467,3497,0,0,0}-{3467,3509,0,0,0}-{3469,3470,0,0,0}-{3470,3469,0,0,0}-{3471,3477,0,0,0}-{3474,3505,0,0,0}-{3476,3507,0,0,0}-{3479,3511,0,0,0}-{3480,3468,0,0,0}-{3480,3470,0,0,0}-{3482,3469,0,0,0}-{3483,3511,0,0,0}-{3484,3464,0,0,0}-{3485,3509,0,0,0}-{3490,3461,0,0,0}-{3491,3460,0,0,0}-{3494,3461,0,0,0}-{3494,3512,0,0,0}-{3498,3461,0,0,0}-{3499,3513,0,0,0}-{3501,3513,0,0,0}-{3502,3464,0,0,0}-{3504,3463,0,0,0}-{3506,3512,0,0,0}-{3506,3515,0,0,0}-{3507,3515,0,0,0}-{3509,3512,0,0,0}-{3511,3488,0,0,0}-{3513,3467,0,0,0}-{3513,3487,0,0,0}-{3513,3489,0,0,0}-{3513,3503,0,0,0}-{3514,3490,0,0,0}-{3515,3495,0,0,0}-{3515,3499,0,0,0}-{3516,3469,0,0,0}-{3409,3369,0,0,0}-{3420,3349,0,0,0}-{3430,3340,0,0,0}-{3435,3330,0,0,0}-{3435,3359,0,0,0}-{3437,3374,0,0,0}-{3446,3385,0,0,0}-{3447,3388,0,0,0}-{3450,3370,0,0,0}-{3450,3387,0,0,0}-{3451,3336,0,0,0}-{3452,3355,0,0,0}-{3726,3289,0,0,0}-{3732,3291,0,0,0}-{3737,3280,0,0,0}-{3745,3285,0,0,0}-{3418,3420,0,0,0}-{3424,3452,0,0,0}-{3428,3409,0,0,0}-{3433,3416,0,0,0}-{3434,3394,0,0,0}-{3436,3407,0,0,0}-{3438,3414,0,0,0}-{3439,3449,0,0,0}-{3446,3439,0,0,0}-{3454,3410,0,0,0}-{3454,3423,0,0,0}-{2852,4561,0,0,0}-{2853,4566,0,0,0}-{2856,4568,0,0,0}-{2864,4561,0,0,0}-{2864,4563,0,0,0}-"
|
||||
"loc_data": "{2852,4561,0,0,0}-{2853,4566,0,0,0}-{2856,4568,0,0,0}-{2864,4561,0,0,0}-{2864,4563,0,0,0}-{3409,3369,0,0,0}-{3420,3349,0,0,0}-{3430,3340,0,0,0}-{3435,3330,0,0,0}-{3435,3359,0,0,0}-{3437,3374,0,0,0}-{3446,3385,0,0,0}-{3447,3388,0,0,0}-{3450,3370,0,0,0}-{3450,3387,0,0,0}-{3451,3336,0,0,0}-{3452,3355,0,0,0}-{3418,3420,0,0,0}-{3424,3452,0,0,0}-{3428,3409,0,0,0}-{3433,3416,0,0,0}-{3434,3394,0,0,0}-{3436,3407,0,0,0}-{3438,3414,0,0,0}-{3439,3449,0,0,0}-{3446,3439,0,0,0}-{3454,3410,0,0,0}-{3454,3423,0,0,0}-{3726,3289,0,0,0}-{3732,3291,0,0,0}-{3737,3280,0,0,0}-{3745,3285,0,0,0}-{3726,3381,0,0,0}-{3745,3359,0,0,0}-{3749,3365,0,0,0}-{3750,3354,0,0,0}-{3757,3363,0,0,0}-{3763,3337,0,0,0}-{3459,3457,0,0,0}-{3460,3462,0,0,0}-{3462,3459,0,0,0}-{3463,3490,0,0,0}-{3464,3511,0,0,0}-{3465,3466,0,0,0}-{3466,3495,0,0,0}-{3466,3497,0,0,0}-{3467,3485,0,0,0}-{3467,3497,0,0,0}-{3467,3509,0,0,0}-{3469,3470,0,0,0}-{3470,3469,0,0,0}-{3471,3477,0,0,0}-{3474,3505,0,0,0}-{3476,3507,0,0,0}-{3479,3511,0,0,0}-{3480,3468,0,0,0}-{3480,3470,0,0,0}-{3482,3469,0,0,0}-{3483,3511,0,0,0}-{3484,3464,0,0,0}-{3485,3509,0,0,0}-{3490,3461,0,0,0}-{3491,3460,0,0,0}-{3494,3461,0,0,0}-{3494,3512,0,0,0}-{3498,3461,0,0,0}-{3499,3513,0,0,0}-{3501,3513,0,0,0}-{3502,3464,0,0,0}-{3504,3463,0,0,0}-{3506,3512,0,0,0}-{3506,3515,0,0,0}-{3507,3515,0,0,0}-{3509,3512,0,0,0}-{3511,3488,0,0,0}-{3513,3467,0,0,0}-{3513,3487,0,0,0}-{3513,3489,0,0,0}-{3513,3503,0,0,0}-{3514,3490,0,0,0}-{3515,3495,0,0,0}-{3515,3499,0,0,0}-{3516,3469,0,0,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1044",
|
||||
|
|
@ -3345,11 +3349,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1212",
|
||||
"loc_data": "{2247,3226,0,0,0}-{2249,3227,0,0,0}-{2249,3258,0,0,0}-{2251,3260,0,0,0}-{2259,3211,0,0,0}-{2267,3223,0,0,0}-{2267,3225,0,0,0}-{2298,3262,0,0,0}-{3202,5990,0,0,0}-{3232,5977,0,0,0}-{3234,5969,0,0,0}-{3237,5995,0,0,0}-{3242,5997,0,0,0}-{3244,5995,0,0,0}-{3245,5995,0,0,0}-{2194,3189,0,0,0}-{2196,3187,0,0,0}-{2196,3189,0,0,0}-{2206,3164,0,0,0}-{2209,3164,0,0,0}-{2216,3142,0,0,0}-{2218,3139,0,0,0}-{2178,3238,0,0,0}-{2208,3225,0,0,0}-{2210,3217,0,0,0}-{2213,3243,0,0,0}-{2218,3245,0,0,0}-{2220,3243,0,0,0}-{2221,3243,0,0,0}-{2695,6170,0,0,0}-{2697,6171,0,0,0}-{2697,6202,0,0,0}-{2699,6204,0,0,0}-{2707,6155,0,0,0}-{2715,6167,0,0,0}-{2715,6169,0,0,0}-{2746,6206,0,0,0}-{2729,6086,0,0,0}-{2731,6080,0,0,0}-{2731,6089,0,0,0}-{2744,6139,0,0,0}-{3271,5978,0,0,0}-{3273,5979,0,0,0}-{3273,6010,0,0,0}-{3275,6012,0,0,0}-{3283,5963,0,0,0}-{3291,5975,0,0,0}-{3291,5977,0,0,0}-{3322,6014,0,0,0}-{2281,3142,0,0,0}-{2283,3136,0,0,0}-{2283,3145,0,0,0}-{2296,3195,0,0,0}-"
|
||||
"loc_data": "{2194,3189,0,0,0}-{2196,3187,0,0,0}-{2196,3189,0,0,0}-{2206,3164,0,0,0}-{2209,3164,0,0,0}-{2216,3142,0,0,0}-{2218,3139,0,0,0}-{2178,3238,0,0,0}-{2208,3225,0,0,0}-{2210,3217,0,0,0}-{2213,3243,0,0,0}-{2218,3245,0,0,0}-{2220,3243,0,0,0}-{2221,3243,0,0,0}-{3202,5990,0,0,0}-{3232,5977,0,0,0}-{3234,5969,0,0,0}-{3237,5995,0,0,0}-{3242,5997,0,0,0}-{3244,5995,0,0,0}-{3245,5995,0,0,0}-{2729,6086,0,0,0}-{2731,6080,0,0,0}-{2731,6089,0,0,0}-{2744,6139,0,0,0}-{2695,6170,0,0,0}-{2697,6171,0,0,0}-{2697,6202,0,0,0}-{2699,6204,0,0,0}-{2707,6155,0,0,0}-{2715,6167,0,0,0}-{2715,6169,0,0,0}-{2746,6206,0,0,0}-{2281,3142,0,0,0}-{2283,3136,0,0,0}-{2283,3145,0,0,0}-{2296,3195,0,0,0}-{2247,3226,0,0,0}-{2249,3227,0,0,0}-{2249,3258,0,0,0}-{2251,3260,0,0,0}-{2259,3211,0,0,0}-{2267,3223,0,0,0}-{2267,3225,0,0,0}-{2298,3262,0,0,0}-{3271,5978,0,0,0}-{3273,5979,0,0,0}-{3273,6010,0,0,0}-{3275,6012,0,0,0}-{3283,5963,0,0,0}-{3291,5975,0,0,0}-{3291,5977,0,0,0}-{3322,6014,0,0,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1213",
|
||||
"loc_data": "{2248,3225,0,0,0}-{2248,3227,0,0,0}-{2251,3257,0,0,0}-{2253,3259,0,0,0}-{2268,3224,0,0,0}-{2291,3262,0,0,0}-{3204,5988,0,0,0}-{3232,5979,0,0,0}-{3234,5967,0,0,0}-{3234,5976,0,0,0}-{3238,5996,0,0,0}-{3239,5997,0,0,0}-{3243,5996,0,0,0}-{2192,3188,0,0,0}-{2192,3191,0,0,0}-{2194,3190,0,0,0}-{2208,3163,0,0,0}-{2209,3163,0,0,0}-{2216,3136,0,0,0}-{2216,3140,0,0,0}-{2180,3236,0,0,0}-{2208,3227,0,0,0}-{2210,3215,0,0,0}-{2210,3224,0,0,0}-{2214,3244,0,0,0}-{2215,3245,0,0,0}-{2219,3244,0,0,0}-{2696,6169,0,0,0}-{2696,6171,0,0,0}-{2699,6201,0,0,0}-{2701,6203,0,0,0}-{2716,6168,0,0,0}-{2739,6206,0,0,0}-{2730,6084,0,0,0}-{3272,5977,0,0,0}-{3272,5979,0,0,0}-{3275,6009,0,0,0}-{3277,6011,0,0,0}-{3292,5976,0,0,0}-{3315,6014,0,0,0}-{2282,3140,0,0,0}-"
|
||||
"loc_data": "{2192,3188,0,0,0}-{2192,3191,0,0,0}-{2194,3190,0,0,0}-{2208,3163,0,0,0}-{2209,3163,0,0,0}-{2216,3136,0,0,0}-{2216,3140,0,0,0}-{2180,3236,0,0,0}-{2208,3227,0,0,0}-{2210,3215,0,0,0}-{2210,3224,0,0,0}-{2214,3244,0,0,0}-{2215,3245,0,0,0}-{2219,3244,0,0,0}-{3204,5988,0,0,0}-{3232,5979,0,0,0}-{3234,5967,0,0,0}-{3234,5976,0,0,0}-{3238,5996,0,0,0}-{3239,5997,0,0,0}-{3243,5996,0,0,0}-{2730,6084,0,0,0}-{2696,6169,0,0,0}-{2696,6171,0,0,0}-{2699,6201,0,0,0}-{2701,6203,0,0,0}-{2716,6168,0,0,0}-{2739,6206,0,0,0}-{2282,3140,0,0,0}-{2248,3225,0,0,0}-{2248,3227,0,0,0}-{2251,3257,0,0,0}-{2253,3259,0,0,0}-{2268,3224,0,0,0}-{2291,3262,0,0,0}-{3272,5977,0,0,0}-{3272,5979,0,0,0}-{3275,6009,0,0,0}-{3277,6011,0,0,0}-{3292,5976,0,0,0}-{3315,6014,0,0,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1214",
|
||||
|
|
@ -4061,7 +4065,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1633",
|
||||
"loc_data": "{1837,3244,0,1,0}-{1836,3250,0,1,0}-{1845,3251,0,1,0}-{1845,3247,0,1,0}-{1849,3241,0,1,0}-{1853,3247,0,1,0}-{1848,3254,0,1,0}-{1858,3251,0,1,0}-{1935,3217,0,1,0}-{1933,3209,0,1,0}-{1930,3208,0,1,0}-{1929,3217,0,1,0}-{1927,3219,0,1,0}-{1924,3211,0,1,0}-{1920,3216,0,1,0}-{1925,3213,0,1,0}-{3263,9399,0,1,3}-{3274,9397,0,1,1}-{3275,9393,0,1,6}-{3271,9384,0,1,0}-{3270,9380,0,1,2}-{3283,9378,0,1,6}-{3285,9386,0,1,5}-{3284,9401,0,1,4}-{3278,9353,0,1,1}-{3299,9380,0,1,1}-{3319,9402,0,1,1}-{3305,9350,0,1,4}-{3248,9374,0,1,3}-{3253,9363,0,1,3}-{3249,9355,0,1,3}-{2761,10007,0,1,0}-{2757,10010,0,1,3}-{2763,10000,0,1,5}-{2760,10011,0,1,0}-{2761,9997,0,1,4}-"
|
||||
"loc_data": "{1837,3244,0,1,0}-{1836,3250,0,1,0}-{1845,3251,0,1,0}-{1845,3247,0,1,0}-{1849,3241,0,1,0}-{1853,3247,0,1,0}-{1848,3254,0,1,0}-{1858,3251,0,1,0}-{1935,3217,0,1,0}-{1933,3209,0,1,0}-{1930,3208,0,1,0}-{1929,3217,0,1,0}-{1927,3219,0,1,0}-{1924,3211,0,1,0}-{1920,3216,0,1,0}-{1925,3213,0,1,0}-{3263,9399,0,1,3}-{3248,9374,0,1,3}-{3253,9363,0,1,3}-{3249,9355,0,1,3}-{3274,9397,0,1,1}-{3275,9393,0,1,6}-{3271,9384,0,1,0}-{3270,9380,0,1,2}-{3283,9378,0,1,6}-{3285,9386,0,1,5}-{3284,9401,0,1,4}-{3278,9353,0,1,1}-{3299,9380,0,1,1}-{3319,9402,0,1,1}-{3305,9350,0,1,4}-{2761,10007,0,1,0}-{2757,10010,0,1,3}-{2763,10000,0,1,5}-{2760,10011,0,1,0}-{2761,9997,0,1,4}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1634",
|
||||
|
|
@ -4261,7 +4265,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1752",
|
||||
"loc_data": "{2437,3442,0,1,0}-{2449,3421,0,1,0}-{2457,3394,0,1,0}-{2464,3394,0,1,0}-{2480,3406,0,1,0}-{2432,3387,0,1,0}-{2442,3388,0,1,0}-{2453,3363,0,1,0}-{2463,3375,0,1,0}-{2381,3428,0,1,0}-{2392,3405,0,1,0}-{2413,3397,0,1,0}-{2415,3408,0,1,0}-{2463,3456,0,1,0}-{2468,3456,0,1,0}-"
|
||||
"loc_data": "{2381,3428,0,1,0}-{2392,3405,0,1,0}-{2413,3397,0,1,0}-{2415,3408,0,1,0}-{2432,3387,0,1,0}-{2442,3388,0,1,0}-{2453,3363,0,1,0}-{2463,3375,0,1,0}-{2437,3442,0,1,0}-{2449,3421,0,1,0}-{2457,3394,0,1,0}-{2464,3394,0,1,0}-{2480,3406,0,1,0}-{2463,3456,0,1,0}-{2468,3456,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1754",
|
||||
|
|
@ -4545,7 +4549,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1874",
|
||||
"loc_data": "{3371,9301,0,1,0}-{3371,9303,0,1,0}-{3371,9305,0,1,0}-{3371,9307,0,1,0}-{3371,9309,0,1,0}-{3373,9301,0,1,0}-{3373,9303,0,1,0}-{3373,9306,0,1,0}-{3373,9308,0,1,0}-{3375,9301,0,1,0}-{3375,9303,0,1,0}-{3375,9305,0,1,0}-{3375,9307,0,1,0}-{3375,9309,0,1,0}-{3403,2963,0,1,0}-{3429,2976,0,1,0}-{3328,2952,0,1,0}-{3328,2957,0,1,0}-{3331,2955,0,1,0}-{3331,2961,0,1,0}-{3266,2955,0,1,0}-{3271,2967,0,1,0}-{3279,2957,0,1,0}-{3280,2975,0,1,0}-{3284,2959,0,1,0}-{3294,2964,0,1,0}-{3295,2978,0,1,0}-{3305,2966,0,1,0}-{3307,2959,0,1,0}-{3309,2973,0,1,0}-{3396,3029,0,1,0}-{3397,3044,0,1,0}-{3398,3038,0,1,0}-"
|
||||
"loc_data": "{3328,2952,0,1,0}-{3328,2957,0,1,0}-{3331,2955,0,1,0}-{3331,2961,0,1,0}-{3371,9301,0,1,0}-{3371,9303,0,1,0}-{3371,9305,0,1,0}-{3371,9307,0,1,0}-{3371,9309,0,1,0}-{3373,9301,0,1,0}-{3373,9303,0,1,0}-{3373,9306,0,1,0}-{3373,9308,0,1,0}-{3375,9301,0,1,0}-{3375,9303,0,1,0}-{3375,9305,0,1,0}-{3375,9307,0,1,0}-{3375,9309,0,1,0}-{3403,2963,0,1,0}-{3429,2976,0,1,0}-{3396,3029,0,1,0}-{3397,3044,0,1,0}-{3398,3038,0,1,0}-{3266,2955,0,1,0}-{3271,2967,0,1,0}-{3279,2957,0,1,0}-{3280,2975,0,1,0}-{3284,2959,0,1,0}-{3294,2964,0,1,0}-{3295,2978,0,1,0}-{3305,2966,0,1,0}-{3307,2959,0,1,0}-{3309,2973,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1875",
|
||||
|
|
@ -4705,19 +4709,19 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1961",
|
||||
"loc_data": "{3156,5477,0,1,5}-{3162,5479,0,1,4}-{3159,5477,0,1,6}-{3150,5474,0,1,3}-{3147,5480,0,1,1}-{3159,5484,0,1,3}-{2764,4944,1,1,0}-{2796,4976,1,1,0}-{2798,4950,1,1,0}-{2806,4939,1,1,0}-{2832,4959,2,1,0}-{3201,9293,0,1,0}-{3205,9303,0,1,0}-{3206,9328,0,1,0}-{3207,9310,0,1,0}-{3211,9284,0,1,0}-{3220,9289,0,1,0}-{3224,9334,0,1,0}-{3249,9286,0,1,0}-{3251,9303,0,1,0}-{3252,9327,0,1,0}-{3252,9332,0,1,0}-{3255,9315,0,1,0}-{3261,9296,0,1,0}-{3261,9306,0,1,0}-"
|
||||
"loc_data": "{2832,4959,2,1,0}-{3156,5477,0,1,5}-{3162,5479,0,1,4}-{3159,5477,0,1,6}-{3150,5474,0,1,3}-{3147,5480,0,1,1}-{3159,5484,0,1,3}-{3201,9293,0,1,0}-{3205,9303,0,1,0}-{3206,9328,0,1,0}-{3207,9310,0,1,0}-{3211,9284,0,1,0}-{3220,9289,0,1,0}-{3224,9334,0,1,0}-{3249,9286,0,1,0}-{3251,9303,0,1,0}-{3252,9327,0,1,0}-{3252,9332,0,1,0}-{3255,9315,0,1,0}-{3261,9296,0,1,0}-{3261,9306,0,1,0}-{2764,4944,1,1,0}-{2796,4976,1,1,0}-{2798,4950,1,1,0}-{2806,4939,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1962",
|
||||
"loc_data": "{3168,5458,0,1,2}-{2900,4948,3,1,0}-{2762,4962,1,1,0}-{2763,4973,1,1,0}-{2780,4977,1,1,0}-{2787,4967,1,1,0}-{2796,4959,1,1,0}-{2838,4948,2,1,0}-{3205,9329,0,1,0}-{3210,9292,0,1,0}-{3221,9310,0,1,0}-{3225,9323,0,1,0}-{3243,9310,0,1,0}-{3246,9290,0,1,0}-{3255,9301,0,1,0}-{3255,9321,0,1,0}-{3261,9331,0,1,0}-"
|
||||
"loc_data": "{2838,4948,2,1,0}-{2900,4948,3,1,0}-{3168,5458,0,1,2}-{3205,9329,0,1,0}-{3210,9292,0,1,0}-{3221,9310,0,1,0}-{3225,9323,0,1,0}-{3243,9310,0,1,0}-{3246,9290,0,1,0}-{3255,9301,0,1,0}-{3255,9321,0,1,0}-{3261,9331,0,1,0}-{2762,4962,1,1,0}-{2763,4973,1,1,0}-{2780,4977,1,1,0}-{2787,4967,1,1,0}-{2796,4959,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1963",
|
||||
"loc_data": "{3166,5465,0,1,7}-{3168,5462,0,1,0}-{3167,5467,0,1,1}-{3167,5467,0,1,7}-{2926,4965,3,1,0}-{2771,4947,1,1,0}-{2775,4963,1,1,0}-{2781,4948,1,1,0}-{2792,4942,1,1,0}-{2798,4954,1,1,0}-{2858,4964,2,1,0}-{3204,9309,0,1,0}-{3214,9333,0,1,0}-{3219,9297,0,1,0}-{3239,9300,0,1,0}-{3240,9286,0,1,0}-{3240,9330,0,1,0}-{3245,9306,0,1,0}-{3250,9316,0,1,0}-{3250,9317,0,1,0}-{3257,9290,0,1,0}-"
|
||||
"loc_data": "{2858,4964,2,1,0}-{2926,4965,3,1,0}-{3166,5465,0,1,7}-{3168,5462,0,1,0}-{3167,5467,0,1,1}-{3167,5467,0,1,7}-{3204,9309,0,1,0}-{3214,9333,0,1,0}-{3219,9297,0,1,0}-{3239,9300,0,1,0}-{3240,9286,0,1,0}-{3240,9330,0,1,0}-{3245,9306,0,1,0}-{3250,9316,0,1,0}-{3250,9317,0,1,0}-{3257,9290,0,1,0}-{2771,4947,1,1,0}-{2775,4963,1,1,0}-{2781,4948,1,1,0}-{2792,4942,1,1,0}-{2798,4954,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1964",
|
||||
"loc_data": "{2761,4950,1,1,0}-{2765,4938,1,1,0}-{2770,4955,1,1,0}-{2772,4940,1,1,0}-{2777,4943,1,1,0}-{2782,4967,1,1,0}-{2797,4965,1,1,0}-{2799,4937,1,1,0}-{2799,4941,1,1,0}-{2807,4968,1,1,0}-{2808,4975,1,1,0}-{2809,4953,1,1,0}-{2864,4946,2,1,0}-{3202,9283,0,1,0}-{3206,9333,0,1,0}-{3209,9299,0,1,0}-{3219,9301,0,1,0}-{3226,9285,0,1,0}-{3227,9303,0,1,0}-{3228,9293,0,1,0}-{3229,9333,0,1,0}-{3237,9293,0,1,0}-{3246,9321,0,1,0}-{3256,9296,0,1,0}-{3260,9285,0,1,0}-{3262,9317,0,1,0}-"
|
||||
"loc_data": "{2864,4946,2,1,0}-{3202,9283,0,1,0}-{3206,9333,0,1,0}-{3209,9299,0,1,0}-{3219,9301,0,1,0}-{3226,9285,0,1,0}-{3227,9303,0,1,0}-{3228,9293,0,1,0}-{3229,9333,0,1,0}-{3237,9293,0,1,0}-{3246,9321,0,1,0}-{3256,9296,0,1,0}-{3260,9285,0,1,0}-{3262,9317,0,1,0}-{2761,4950,1,1,0}-{2765,4938,1,1,0}-{2770,4955,1,1,0}-{2772,4940,1,1,0}-{2777,4943,1,1,0}-{2782,4967,1,1,0}-{2797,4965,1,1,0}-{2799,4937,1,1,0}-{2799,4941,1,1,0}-{2807,4968,1,1,0}-{2808,4975,1,1,0}-{2809,4953,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1970",
|
||||
|
|
@ -4729,7 +4733,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1973",
|
||||
"loc_data": "{2693,5075,0,1,0}-{2695,5089,0,1,0}-{2697,5096,0,1,0}-{2703,5064,0,1,0}-{2710,5105,0,1,0}-{2719,5078,0,1,0}-{2719,5112,0,1,0}-{2720,5096,0,1,0}-{2726,5086,0,1,0}-{2729,5096,0,1,0}-{2735,5061,0,1,0}-{2740,5069,0,1,0}-{2740,5085,0,1,0}-{2746,5092,0,1,0}-{2746,5114,0,1,0}-{2626,5065,0,1,0}-{2637,5099,0,1,0}-{2638,5058,0,1,0}-{2644,5090,0,1,0}-{2658,5082,0,1,0}-{2666,5097,0,1,0}-{2680,5074,0,1,0}-"
|
||||
"loc_data": "{2626,5065,0,1,0}-{2637,5099,0,1,0}-{2638,5058,0,1,0}-{2644,5090,0,1,0}-{2658,5082,0,1,0}-{2666,5097,0,1,0}-{2680,5074,0,1,0}-{2693,5075,0,1,0}-{2695,5089,0,1,0}-{2697,5096,0,1,0}-{2703,5064,0,1,0}-{2710,5105,0,1,0}-{2719,5078,0,1,0}-{2719,5112,0,1,0}-{2720,5096,0,1,0}-{2726,5086,0,1,0}-{2729,5096,0,1,0}-{2735,5061,0,1,0}-{2740,5069,0,1,0}-{2740,5085,0,1,0}-{2746,5092,0,1,0}-{2746,5114,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1976",
|
||||
|
|
@ -4741,11 +4745,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "1993",
|
||||
"loc_data": "{3264,2886,0,1,0}-{3267,2891,0,1,0}-{3268,2881,0,1,0}-{3269,2885,0,1,0}-{3296,2912,0,1,0}-{3297,2919,0,1,0}-{3301,2920,0,1,0}-{3308,2916,0,1,0}-{3258,2868,0,1,0}-{3259,2823,0,1,0}-{3259,2845,0,1,0}-{3260,2830,0,1,0}-{3260,2859,0,1,0}-{3261,2819,0,1,0}-{3261,2851,0,1,0}-{3337,2922,0,1,0}-{3343,2931,0,1,0}-{3349,2922,0,1,0}-{3351,2927,0,1,0}-{3357,2922,0,1,0}-{3359,2927,0,1,0}-{3364,2937,0,1,0}-{3268,2854,0,1,0}-{3269,2827,0,1,0}-{3269,2866,0,1,0}-{3269,2875,0,1,0}-{3270,2818,0,1,0}-{3272,2841,0,1,0}-{3276,2842,0,1,0}-{3282,2839,0,1,0}-{3290,2847,0,1,0}-"
|
||||
"loc_data": "{3337,2922,0,1,0}-{3343,2931,0,1,0}-{3349,2922,0,1,0}-{3351,2927,0,1,0}-{3357,2922,0,1,0}-{3359,2927,0,1,0}-{3364,2937,0,1,0}-{3258,2868,0,1,0}-{3259,2823,0,1,0}-{3259,2845,0,1,0}-{3260,2830,0,1,0}-{3260,2859,0,1,0}-{3261,2819,0,1,0}-{3261,2851,0,1,0}-{3268,2854,0,1,0}-{3269,2827,0,1,0}-{3269,2866,0,1,0}-{3269,2875,0,1,0}-{3270,2818,0,1,0}-{3272,2841,0,1,0}-{3276,2842,0,1,0}-{3282,2839,0,1,0}-{3290,2847,0,1,0}-{3264,2886,0,1,0}-{3267,2891,0,1,0}-{3268,2881,0,1,0}-{3269,2885,0,1,0}-{3296,2912,0,1,0}-{3297,2919,0,1,0}-{3301,2920,0,1,0}-{3308,2916,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1994",
|
||||
"loc_data": "{3265,2931,0,1,0}-{3265,2935,0,1,0}-{3268,2932,0,1,0}-{3268,2935,0,1,0}-{3316,2900,0,1,0}-{3319,2897,0,1,0}-{3320,2901,0,1,0}-{3321,2899,0,1,0}-{3212,2863,0,1,0}-{3213,2866,0,1,0}-{3215,2863,0,1,0}-{3216,2865,0,1,0}-{3216,2868,0,1,0}-{3218,2831,0,1,0}-{3220,2830,0,1,0}-{3220,2833,0,1,0}-{3221,2831,0,1,0}-{3238,2845,0,1,0}-{3240,2845,0,1,0}-{3241,2843,0,1,0}-{3241,2847,0,1,0}-{3400,2997,0,1,0}-{3402,2999,0,1,0}-{3403,2997,0,1,0}-{3445,2993,0,1,0}-{3446,2992,0,1,0}-{3448,2991,0,1,0}-{3448,2994,0,1,0}-{3329,2933,0,1,0}-{3330,2931,0,1,0}-{3331,2933,0,1,0}-{3343,2895,0,1,0}-{3345,2896,0,1,0}-{3346,2894,0,1,0}-{3348,2894,0,1,0}-{3376,2934,0,1,0}-{3378,2933,0,1,0}-{3378,2935,0,1,0}-{3381,2907,0,1,0}-{3383,2905,0,1,0}-{3383,2908,0,1,0}-{3384,2907,0,1,0}-{3306,2817,0,1,0}-{3308,2818,0,1,0}-{3309,2816,0,1,0}-{3312,2817,0,1,0}-{3314,2861,0,1,0}-{3319,2873,0,1,0}-{3321,2871,0,1,0}-{3324,2870,0,1,0}-{3327,2858,0,1,0}-{3406,3014,0,1,0}-{3408,3013,0,1,0}-{3408,3016,0,1,0}-{3410,3015,0,1,0}-"
|
||||
"loc_data": "{3329,2933,0,1,0}-{3330,2931,0,1,0}-{3331,2933,0,1,0}-{3343,2895,0,1,0}-{3345,2896,0,1,0}-{3346,2894,0,1,0}-{3348,2894,0,1,0}-{3376,2934,0,1,0}-{3378,2933,0,1,0}-{3378,2935,0,1,0}-{3381,2907,0,1,0}-{3383,2905,0,1,0}-{3383,2908,0,1,0}-{3384,2907,0,1,0}-{3400,2997,0,1,0}-{3402,2999,0,1,0}-{3403,2997,0,1,0}-{3445,2993,0,1,0}-{3446,2992,0,1,0}-{3448,2991,0,1,0}-{3448,2994,0,1,0}-{3406,3014,0,1,0}-{3408,3013,0,1,0}-{3408,3016,0,1,0}-{3410,3015,0,1,0}-{3212,2863,0,1,0}-{3213,2866,0,1,0}-{3215,2863,0,1,0}-{3216,2865,0,1,0}-{3216,2868,0,1,0}-{3218,2831,0,1,0}-{3220,2830,0,1,0}-{3220,2833,0,1,0}-{3221,2831,0,1,0}-{3238,2845,0,1,0}-{3240,2845,0,1,0}-{3241,2843,0,1,0}-{3241,2847,0,1,0}-{3306,2817,0,1,0}-{3308,2818,0,1,0}-{3309,2816,0,1,0}-{3312,2817,0,1,0}-{3314,2861,0,1,0}-{3319,2873,0,1,0}-{3321,2871,0,1,0}-{3324,2870,0,1,0}-{3327,2858,0,1,0}-{3265,2931,0,1,0}-{3265,2935,0,1,0}-{3268,2932,0,1,0}-{3268,2935,0,1,0}-{3316,2900,0,1,0}-{3319,2897,0,1,0}-{3320,2901,0,1,0}-{3321,2899,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "1995",
|
||||
|
|
@ -4897,7 +4901,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "2057",
|
||||
"loc_data": "{2442,9436,2,1,0}-{2458,9413,2,1,0}-{2470,9435,2,1,0}-{2472,9460,2,1,0}-{2483,9413,2,1,0}-{2485,9447,2,1,0}-{2480,3046,0,1,0}-{2453,9393,2,1,0}-{2461,9403,2,1,0}-{2464,9380,2,1,0}-"
|
||||
"loc_data": "{2480,3046,0,1,0}-{2453,9393,2,1,0}-{2461,9403,2,1,0}-{2464,9380,2,1,0}-{2442,9436,2,1,0}-{2458,9413,2,1,0}-{2470,9435,2,1,0}-{2472,9460,2,1,0}-{2483,9413,2,1,0}-{2485,9447,2,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "2058",
|
||||
|
|
@ -6317,7 +6321,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "2803",
|
||||
"loc_data": "{3387,3068,0,1,0}-{3387,3017,0,1,0}-{3404,3062,0,1,0}-{3441,3061,0,1,0}-{3445,3034,0,1,0}-{3338,2804,0,1,0}-{3339,2815,0,1,0}-{3342,2809,0,1,0}-{3344,2800,0,1,0}-{3348,2809,0,1,0}-{3349,2814,0,1,0}-{3357,2813,0,1,0}-{3357,2806,0,1,0}-{3365,2815,0,1,0}-"
|
||||
"loc_data": "{3338,2804,0,1,0}-{3339,2815,0,1,0}-{3342,2809,0,1,0}-{3344,2800,0,1,0}-{3348,2809,0,1,0}-{3349,2814,0,1,0}-{3357,2813,0,1,0}-{3357,2806,0,1,0}-{3365,2815,0,1,0}-{3387,3068,0,1,0}-{3387,3017,0,1,0}-{3404,3062,0,1,0}-{3441,3061,0,1,0}-{3445,3034,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "2804",
|
||||
|
|
@ -7237,7 +7241,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "3675",
|
||||
"loc_data": "{3333,2864,0,1,1}-{3335,2860,0,1,2}-{3338,2864,0,1,4}-{3215,2841,0,1,0}-{3217,2845,0,1,0}-{3220,2841,0,1,0}-{3295,2866,0,1,0}-{3297,2863,0,1,0}-{3301,2864,0,1,0}-{3336,2778,0,1,0}-{3343,2793,0,1,0}-{3367,2791,0,1,0}-"
|
||||
"loc_data": "{3336,2778,0,1,0}-{3343,2793,0,1,0}-{3367,2791,0,1,0}-{3333,2864,0,1,1}-{3335,2860,0,1,2}-{3338,2864,0,1,4}-{3215,2841,0,1,0}-{3217,2845,0,1,0}-{3220,2841,0,1,0}-{3295,2866,0,1,0}-{3297,2863,0,1,0}-{3301,2864,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "3677",
|
||||
|
|
@ -8245,19 +8249,19 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "4690",
|
||||
"loc_data": "{2372,3401,0,1,0}-{3104,3875,0,1,2}-{2912,9731,0,1,0}-{3256,3624,0,1,5}-{3308,3661,0,1,2}-"
|
||||
"loc_data": "{3104,3875,0,1,2}-{2372,3401,0,1,0}-{2912,9731,0,1,0}-{3256,3624,0,1,5}-{3308,3661,0,1,2}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "4691",
|
||||
"loc_data": "{2371,3398,0,1,0}-{3110,3854,0,1,0}-"
|
||||
"loc_data": "{3110,3854,0,1,0}-{2371,3398,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "4692",
|
||||
"loc_data": "{2372,3395,0,1,0}-{3116,3858,0,1,0}-"
|
||||
"loc_data": "{3116,3858,0,1,0}-{2372,3395,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "4693",
|
||||
"loc_data": "{2369,3394,0,1,0}-{3094,3849,0,1,0}-{2912,9741,0,1,0}-{2906,9736,0,1,0}-"
|
||||
"loc_data": "{3094,3849,0,1,0}-{2369,3394,0,1,0}-{2912,9741,0,1,0}-{2906,9736,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "4694",
|
||||
|
|
@ -9009,7 +9013,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "5359",
|
||||
"loc_data": "{2693,5065,0,1,0}-{2693,5089,0,1,0}-{2704,5091,0,1,0}-{2710,5095,0,1,0}-{2712,5076,0,1,0}-{2714,5108,0,1,0}-{2716,5092,0,1,0}-{2719,5071,0,1,0}-{2722,5061,0,1,0}-{2732,5087,0,1,0}-{2739,5078,0,1,0}-{2740,5104,0,1,0}-{2747,5083,0,1,0}-{2627,5093,0,1,0}-{2629,5061,0,1,0}-{2638,5090,0,1,0}-{2651,5105,0,1,0}-{2654,5079,0,1,0}-{2663,5116,0,1,0}-{2683,5059,0,1,0}-{2685,5111,0,1,0}-"
|
||||
"loc_data": "{2627,5093,0,1,0}-{2629,5061,0,1,0}-{2638,5090,0,1,0}-{2651,5105,0,1,0}-{2654,5079,0,1,0}-{2663,5116,0,1,0}-{2683,5059,0,1,0}-{2685,5111,0,1,0}-{2693,5065,0,1,0}-{2693,5089,0,1,0}-{2704,5091,0,1,0}-{2710,5095,0,1,0}-{2712,5076,0,1,0}-{2714,5108,0,1,0}-{2716,5092,0,1,0}-{2719,5071,0,1,0}-{2722,5061,0,1,0}-{2732,5087,0,1,0}-{2739,5078,0,1,0}-{2740,5104,0,1,0}-{2747,5083,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "5361",
|
||||
|
|
@ -10293,11 +10297,11 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "6050",
|
||||
"loc_data": "{3264,3008,0,1,0}-{3266,3008,0,1,0}-{3285,3066,0,1,0}-{3322,3032,0,1,0}-{3323,3055,0,1,0}-{3325,3010,0,1,0}-{3174,3010,0,1,0}-{3198,3061,0,1,0}-{3199,3016,0,1,0}-{3219,3125,0,1,0}-{3233,3075,0,1,0}-{3250,3126,0,1,0}-{3223,3011,0,1,0}-{3228,3060,0,1,0}-{3251,3059,0,1,0}-{3310,3076,0,1,0}-"
|
||||
"loc_data": "{3174,3010,0,1,0}-{3198,3061,0,1,0}-{3199,3016,0,1,0}-{3223,3011,0,1,0}-{3228,3060,0,1,0}-{3251,3059,0,1,0}-{3219,3125,0,1,0}-{3233,3075,0,1,0}-{3250,3126,0,1,0}-{3264,3008,0,1,0}-{3266,3008,0,1,0}-{3285,3066,0,1,0}-{3322,3032,0,1,0}-{3323,3055,0,1,0}-{3325,3010,0,1,0}-{3310,3076,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6051",
|
||||
"loc_data": "{3266,3010,0,1,0}-{3267,3068,0,1,0}-{3287,3065,0,1,0}-{3287,3067,0,1,0}-{3310,3070,0,1,0}-{3312,3068,0,1,0}-{3320,3054,0,1,0}-{3324,3013,0,1,0}-{3325,3033,0,1,0}-{3153,3047,0,1,0}-{3196,3063,0,1,0}-{3199,3036,0,1,0}-{3215,3092,0,1,0}-{3217,3124,0,1,0}-{3260,3077,0,1,0}-{3223,3035,0,1,0}-{3225,3011,0,1,0}-{3283,3084,0,1,0}-"
|
||||
"loc_data": "{3153,3047,0,1,0}-{3196,3063,0,1,0}-{3199,3036,0,1,0}-{3223,3035,0,1,0}-{3225,3011,0,1,0}-{3215,3092,0,1,0}-{3217,3124,0,1,0}-{3260,3077,0,1,0}-{3266,3010,0,1,0}-{3267,3068,0,1,0}-{3287,3065,0,1,0}-{3287,3067,0,1,0}-{3310,3070,0,1,0}-{3312,3068,0,1,0}-{3320,3054,0,1,0}-{3324,3013,0,1,0}-{3325,3033,0,1,0}-{3283,3084,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6052",
|
||||
|
|
@ -10423,6 +10427,38 @@
|
|||
"npc_id": "6117",
|
||||
"loc_data": "{1884,5020,0,0,6}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6118",
|
||||
"loc_data": "{2443,3190,0,0,6}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6119",
|
||||
"loc_data": "{2439,3186,0,1,4}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6120",
|
||||
"loc_data": "{2437,3160,1,1,4}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6122",
|
||||
"loc_data": "{2327,9394,0,0,1}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6123",
|
||||
"loc_data": "{2364,9399,0,0,1}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6124",
|
||||
"loc_data": "{2364,9398,0,0,1}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6125",
|
||||
"loc_data": "{2323,9377,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6126",
|
||||
"loc_data": "{2351,9358,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "6127",
|
||||
"loc_data": "{2467,3183,0,0,3}-"
|
||||
|
|
@ -12139,10 +12175,6 @@
|
|||
"npc_id": "7804",
|
||||
"loc_data": "{3279,4350,0,1,0}-{3294,4353,0,1,0}-{3294,4366,0,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "7823",
|
||||
"loc_data": ""
|
||||
},
|
||||
{
|
||||
"npc_id": "7891",
|
||||
"loc_data": "{3207,3250,0,0,0}-{3208,3250,0,0,0}-{3209,3250,0,0,0}-"
|
||||
|
|
@ -12305,7 +12337,7 @@
|
|||
},
|
||||
{
|
||||
"npc_id": "8324",
|
||||
"loc_data": "{2911,3811,0,1,0}-{2911,3812,0,1,0}-{2911,3813,0,1,0}-{2925,3821,0,1,0}-{2925,3822,0,1,0}-{2925,3823,0,1,0}-{2929,3798,0,1,0}-{2936,3790,0,1,0}-{2936,3810,0,1,0}-{2939,3823,0,1,0}-{2949,3819,1,1,0}-{2949,3822,1,1,0}-{2955,3822,1,1,0}-{2957,3822,1,1,0}-{3016,9977,1,1,0}-{3021,9939,1,1,0}-{3024,9954,1,1,0}-{3025,9943,1,1,0}-{3025,9954,1,1,0}-{3026,9966,1,1,0}-{3032,9952,1,1,0}-{3039,9954,1,1,0}-{3044,9967,1,1,0}-{3044,9971,1,1,0}-{3057,9936,1,1,0}-{3059,9953,1,1,0}-{3041,9975,2,1,0}-{3043,9975,2,1,0}-{3045,9975,2,1,0}-{3016,10022,2,1,0}-{3017,10039,2,1,0}-{3027,10028,2,1,0}-{3029,10013,2,1,0}-{3036,10038,2,1,0}-{3037,10006,2,1,0}-{3041,10024,2,1,0}-{3043,10032,2,1,0}-{3057,10002,2,1,0}-{3058,10021,2,1,0}-{3065,10006,2,1,0}-{3027,10092,1,1,0}-{3035,10097,1,1,0}-{3051,10099,1,1,0}-{3427,5102,0,1,0}-{3428,5099,0,1,0}-{3428,5102,0,1,0}-{3430,5099,0,1,0}-"
|
||||
"loc_data": "{2911,3811,0,1,0}-{2911,3812,0,1,0}-{2911,3813,0,1,0}-{2925,3821,0,1,0}-{2925,3822,0,1,0}-{2925,3823,0,1,0}-{2929,3798,0,1,0}-{2936,3790,0,1,0}-{2936,3810,0,1,0}-{2939,3823,0,1,0}-{3427,5102,0,1,0}-{3428,5099,0,1,0}-{3428,5102,0,1,0}-{3430,5099,0,1,0}-{2949,3819,1,1,0}-{2949,3822,1,1,0}-{2955,3822,1,1,0}-{2957,3822,1,1,0}-{3016,9977,1,1,0}-{3021,9939,1,1,0}-{3024,9954,1,1,0}-{3025,9943,1,1,0}-{3025,9954,1,1,0}-{3026,9966,1,1,0}-{3032,9952,1,1,0}-{3039,9954,1,1,0}-{3044,9967,1,1,0}-{3044,9971,1,1,0}-{3057,9936,1,1,0}-{3059,9953,1,1,0}-{3041,9975,2,1,0}-{3043,9975,2,1,0}-{3045,9975,2,1,0}-{3016,10022,2,1,0}-{3017,10039,2,1,0}-{3027,10028,2,1,0}-{3029,10013,2,1,0}-{3036,10038,2,1,0}-{3037,10006,2,1,0}-{3041,10024,2,1,0}-{3043,10032,2,1,0}-{3057,10002,2,1,0}-{3058,10021,2,1,0}-{3065,10006,2,1,0}-{3027,10092,1,1,0}-{3035,10097,1,1,0}-{3051,10099,1,1,0}-"
|
||||
},
|
||||
{
|
||||
"npc_id": "8328",
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
|
|||
|
||||
NPCs.CAVE_GOBLIN_GUARD_2073, NPCs.CAVE_GOBLIN_GUARD_2074,
|
||||
|
||||
NPCs.GOBLIN_GUARD_489, NPCs.GOBLIN_GUARD_6496, NPCs.GOBLIN_GUARD_6497,
|
||||
NPCs.GOBLIN_GUARD_6496, NPCs.GOBLIN_GUARD_6497,
|
||||
NPCs.SERGEANT_GRIMSPIKE_6265,
|
||||
NPCs.SERGEANT_STEELWILL_6263,
|
||||
NPCs.SERGEANT_STRONGSTACK_6261
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public final class GuardNPC extends AbstractNPC {
|
|||
/**
|
||||
* The NPC ids of NPCs using this plugin.
|
||||
*/
|
||||
private static final int[] ID = { 9, 32, 163, 164, 196, 197, 206, 253, 254, 255, 256, 274, 275, 296, 298, 299, 447, 448, 449, 489, 609, 678, 799, 837, 842, 862, 870, 877, 917, 1200, 1203, 1204, 1317, 1710, 1711, 1712, 2073, 2074, 2134, 2135, 2136, 2236, 2571, 2699, 2700, 2701, 2702, 2703, 3228, 3229, 3230, 3231, 3232, 3233, 3241, 3407, 3408, 3715, 4257, 4258, 4259, 4260, 4307, 4308, 4309, 4310, 4311, 4336, 4375, 4603, 4604, 4605, 4606, 5800, 5801, 5919, 5920 };
|
||||
private static final int[] ID = { 9, 32, 163, 164, 196, 197, 206, 253, 254, 255, 256, 274, 275, 296, 298, 299, 447, 448, 449, 609, 678, 799, 837, 842, 862, 870, 877, 917, 1200, 1203, 1204, 1317, 1710, 1711, 1712, 2073, 2074, 2134, 2135, 2136, 2236, 2571, 2699, 2700, 2701, 2702, 2703, 3228, 3229, 3230, 3231, 3232, 3233, 3241, 3407, 3408, 3715, 4257, 4258, 4259, 4260, 4307, 4308, 4309, 4310, 4311, 4336, 4375, 4603, 4604, 4605, 4606, 5800, 5801, 5919, 5920 };
|
||||
|
||||
/**
|
||||
* Constructs a new {@code GuardNPC} {@code Object}.
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ enum class SilverProduct(
|
|||
val strungId: Int
|
||||
) {
|
||||
HOLY(BUTTON_UNBLESSED, Items.HOLY_MOULD_1599, Items.UNSTRUNG_SYMBOL_1714, 1, 16, 50.0, Items.UNBLESSED_SYMBOL_1716),
|
||||
UNHOLY(BUTTON_UNHOLY, Items.UNHOLY_MOULD_1594, Items.UNSTRUNG_EMBLEM_1720, 1, 17, 50.0, Items.UNHOLY_SYMBOL_1724),
|
||||
UNHOLY(BUTTON_UNHOLY, Items.UNHOLY_MOULD_1594, Items.UNSTRUNG_EMBLEM_1720, 1, 17, 50.0, Items.UNPOWERED_SYMBOL_1722),
|
||||
SICKLE(BUTTON_SICKLE, Items.SICKLE_MOULD_2976, Items.SILVER_SICKLE_2961, 1, 18, 50.0, -1),
|
||||
TIARA(BUTTON_TIARA, Items.TIARA_MOULD_5523, Items.TIARA_5525, 1, 23, 52.5, -1),
|
||||
SILVTHRIL_CHAIN(BUTTON_SILVTHRIL_CHAIN, Items.CHAIN_LINK_MOULD_13153, Items.SILVTHRIL_CHAIN_13154, 1, 47, 100.0, -1),
|
||||
|
|
|
|||
|
|
@ -1,130 +0,0 @@
|
|||
package content.region.kandarin.dialogue
|
||||
|
||||
import content.global.handlers.iface.BookInterface
|
||||
import content.global.handlers.iface.BookLine
|
||||
import content.global.handlers.iface.Page
|
||||
import content.global.handlers.iface.PageSet
|
||||
import core.ServerConstants
|
||||
import core.api.setAttribute
|
||||
import core.game.interaction.IntType
|
||||
import core.game.interaction.InteractionListener
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
|
||||
@Initializable
|
||||
class AstronomyBook : InteractionListener {
|
||||
companion object {
|
||||
private val TITLE = "The tales of Scorpius"
|
||||
private val CONTENTS = arrayOf(
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("A History of Astronomy", 55),
|
||||
BookLine("in ${ServerConstants.SERVER_NAME}.", 56),
|
||||
BookLine("", 57),
|
||||
BookLine("At the start of the 4th age,", 58),
|
||||
BookLine("a learned man by the", 59),
|
||||
BookLine("name of Scorpius, known well", 60),
|
||||
BookLine("for his powers of vision and", 61),
|
||||
BookLine("magic, sought communion with", 62),
|
||||
BookLine("the gods of the world.", 63),
|
||||
BookLine("So many unanswered questions", 64),
|
||||
BookLine("had he that devoted his entire", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("life to this cause.", 66),
|
||||
BookLine("After many years of study,", 67),
|
||||
BookLine("seeking knowledge from the", 68),
|
||||
BookLine("wise of that time, he developed", 69),
|
||||
BookLine("a machine infused with", 70),
|
||||
BookLine("magical power, infused with", 71),
|
||||
BookLine("the ability to pierce", 72),
|
||||
BookLine("into the heavens - a huge eye", 73),
|
||||
BookLine("that gave the user", 74),
|
||||
BookLine("incredible site, like never", 75),
|
||||
BookLine("seen before.", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("As time passed, Scorpius", 55),
|
||||
BookLine("grew adept at using his", 56),
|
||||
BookLine("specialized skills, and followed", 57),
|
||||
BookLine("the movements of stars", 58),
|
||||
BookLine("in ${ServerConstants.SERVER_NAME}, which are", 59),
|
||||
BookLine("mapped and named, and still", 60),
|
||||
BookLine("used to this day.", 61),
|
||||
BookLine("", 62),
|
||||
BookLine("Before long, Scorpius", 63),
|
||||
BookLine("used his knowledge", 64),
|
||||
BookLine("for predicting the future,", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("and, in turn, he called upon", 66),
|
||||
BookLine("the dark knowledge of", 67),
|
||||
BookLine("Zamorakian worshipers", 68),
|
||||
BookLine("to further his cause. Living", 69),
|
||||
BookLine("underground, the followers", 70),
|
||||
BookLine("of the dark god remained", 71),
|
||||
BookLine("until the civilization of", 72),
|
||||
BookLine("Ardougne grew in strength", 73),
|
||||
BookLine("and control.", 74),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("The kings of that time", 55),
|
||||
BookLine("worked to banish the", 56),
|
||||
BookLine("Zamorakian followers in", 57),
|
||||
BookLine("the area, hiding all", 58),
|
||||
BookLine("reference to Scorpius's", 59),
|
||||
BookLine("invention, due to", 60),
|
||||
BookLine("its 'evil nature'.", 61),
|
||||
BookLine("", 62),
|
||||
BookLine("Years later, when the", 63),
|
||||
BookLine("minds of the kings lent", 64),
|
||||
BookLine("more towards the research", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("of the unknown, the plans", 66),
|
||||
BookLine("of Scorpius were uncovered", 67),
|
||||
BookLine("and the heavenly eye", 68),
|
||||
BookLine("constructed again. Since then,", 69),
|
||||
BookLine("many have studied the ways of", 70),
|
||||
BookLine("the astronomer, Scorpius", 71),
|
||||
BookLine("and in his memory a grave", 72),
|
||||
BookLine("was constructed near the", 73),
|
||||
BookLine("Observatory. Some claim his", 74),
|
||||
BookLine("ghost still wanders nearby,", 75),
|
||||
BookLine("in torment as he seeks", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("the secrets of the heavens", 55),
|
||||
BookLine("that can never be solved.", 56),
|
||||
BookLine("Tales tell that he will", 57),
|
||||
BookLine("grant those adept in the", 58),
|
||||
BookLine("arts of the astronomer a", 59),
|
||||
BookLine("blessing of unusual power.", 60),
|
||||
BookLine("", 61),
|
||||
BookLine("Here ends the tale of", 62),
|
||||
BookLine("how astronomy entered", 63),
|
||||
BookLine("the known world.", 64),
|
||||
)
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun display(player: Player, pageNum: Int, buttonID: Int): Boolean {
|
||||
BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_3_49, TITLE, CONTENTS)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun defineListeners() {
|
||||
on(Items.ASTRONOMY_BOOK_600, IntType.ITEM, "read") { player, _ ->
|
||||
BookInterface.openBook(player, BookInterface.FANCY_BOOK_3_49, ::display)
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.global.handlers.iface.*
|
||||
import core.ServerConstants
|
||||
import core.game.interaction.IntType
|
||||
import core.game.interaction.InteractionListener
|
||||
import core.game.node.entity.player.Player
|
||||
import org.rs09.consts.Items
|
||||
|
||||
/**
|
||||
* Astronomy Book
|
||||
*/
|
||||
class AstronomyBook : InteractionListener {
|
||||
companion object {
|
||||
private const val TITLE = "THE TALE OF SCORPIUS"
|
||||
private val CONTENTS = arrayOf(
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("THE TALE OF", 55),
|
||||
BookLine("SCORPIUS: ", 56),
|
||||
BookLine("", 57),
|
||||
BookLine("A History of Astronomy", 58),
|
||||
BookLine("in ${ServerConstants.SERVER_NAME}.", 59),
|
||||
BookLine("", 60),
|
||||
BookLine("At the start of the 4th", 61),
|
||||
BookLine("Age, a learned man by", 62),
|
||||
BookLine("the name of Scorpius,", 63),
|
||||
BookLine("known well for his powers", 64),
|
||||
BookLine("of vision and magic,", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("sought communion with", 66),
|
||||
BookLine("the gods of the world. So", 67),
|
||||
BookLine("many unanswered", 68),
|
||||
BookLine("questions had he that he", 69),
|
||||
BookLine("devoted his entire lif to", 70),
|
||||
BookLine("the cause.", 71),
|
||||
BookLine("", 72),
|
||||
BookLine("After many years of", 73),
|
||||
BookLine("study, seeking knowledge", 74),
|
||||
BookLine("from the wise of that", 75),
|
||||
BookLine("time, he developed a", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("machine infused with", 55),
|
||||
BookLine("magical power, infused", 56),
|
||||
BookLine("with the ability to pierce", 57),
|
||||
BookLine("into the very heavens - a", 58),
|
||||
BookLine("huge eye that gave the", 59),
|
||||
BookLine("user incredible sight, like", 60),
|
||||
BookLine("never before.", 61),
|
||||
BookLine("", 62),
|
||||
BookLine("", 63),
|
||||
BookLine("", 64),
|
||||
BookLine("", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("As time passed, Scorpius", 66),
|
||||
BookLine("grew adept at using his", 67),
|
||||
BookLine("specialized skills, and", 68),
|
||||
BookLine("followed the movements of", 69),
|
||||
BookLine("the stars in ${ServerConstants.SERVER_NAME}", 70),
|
||||
BookLine("which he mapped and", 71),
|
||||
BookLine("named, and are still used", 72),
|
||||
BookLine("to this very day.", 73),
|
||||
BookLine("", 74),
|
||||
BookLine("Before long, Scorpius", 75),
|
||||
BookLine("used his knowledge for", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("predicting the future,", 55),
|
||||
BookLine("and, in turn, he called", 56),
|
||||
BookLine("upon the dark knowledge", 57),
|
||||
BookLine("of Zamorakian", 58),
|
||||
BookLine("worshippers to further his", 59),
|
||||
BookLine("cause. Living below", 60),
|
||||
BookLine("ground, the followers of", 61),
|
||||
BookLine("the dark god remained", 62),
|
||||
BookLine("until the civilisation of", 63),
|
||||
BookLine("Ardougne grew in", 64),
|
||||
BookLine("strength and control.", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("", 66),
|
||||
BookLine("", 67),
|
||||
BookLine("", 68),
|
||||
BookLine("", 69),
|
||||
BookLine("", 70),
|
||||
BookLine("", 71),
|
||||
BookLine("The kings of that time", 72),
|
||||
BookLine("worked to banish the", 73),
|
||||
BookLine("Zamorakian followers in", 74),
|
||||
BookLine("the area, hiding all", 75),
|
||||
BookLine("references to Scorpius's", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("invention, due to its 'evil", 55),
|
||||
BookLine("nature'.", 56),
|
||||
BookLine("", 57),
|
||||
BookLine("Years after, when the", 58),
|
||||
BookLine("minds of the kings lent", 59),
|
||||
BookLine("more towards the", 60),
|
||||
BookLine("research of the unknown,", 61),
|
||||
BookLine("the plans of Scorpius", 62),
|
||||
BookLine("were uncovered and the", 63),
|
||||
BookLine("heavenly eye constructed", 64),
|
||||
BookLine("again.", 65),
|
||||
),
|
||||
Page(
|
||||
BookLine("Since then, many have", 66),
|
||||
BookLine("studied the ways of the", 67),
|
||||
BookLine("astronomer, Scorpius, and", 68),
|
||||
BookLine("in his memory a grave", 69),
|
||||
BookLine("was constructed near the", 70),
|
||||
BookLine("Observatory.", 71),
|
||||
BookLine("", 72),
|
||||
BookLine("", 73),
|
||||
BookLine("", 74),
|
||||
BookLine("", 75),
|
||||
BookLine("", 76),
|
||||
)
|
||||
),
|
||||
|
||||
PageSet(
|
||||
Page(),
|
||||
Page(
|
||||
BookLine("Some claim his ghost still", 66),
|
||||
BookLine("wanders nearby, in", 67),
|
||||
BookLine("torment as he seeks the", 68),
|
||||
BookLine("secrets of the heavens", 69),
|
||||
BookLine("that can never be solved.", 70),
|
||||
BookLine("Tales tell that he will", 71),
|
||||
BookLine("grant those adept in the", 72),
|
||||
BookLine("arts of the astronomer a", 73),
|
||||
BookLine("blessing of unusual", 74),
|
||||
BookLine("power.", 75),
|
||||
BookLine("", 76),
|
||||
)
|
||||
),
|
||||
PageSet(
|
||||
Page(
|
||||
BookLine("Here ends the tale of how", 55),
|
||||
BookLine("astronomy entered the", 56),
|
||||
BookLine("known world.", 57),
|
||||
),
|
||||
Page()
|
||||
),
|
||||
)
|
||||
private fun display(player:Player, pageNum: Int, buttonID: Int) : Boolean {
|
||||
BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_3_49, TITLE, CONTENTS)
|
||||
BookInterface.setModelOnPage(player,2, 27071, BookInterface.FANCY_BOOK_3_49, 33, 34, 1020, 0, 0)
|
||||
BookInterface.setModelOnPage(player,4, 27069, BookInterface.FANCY_BOOK_3_49, 17, 18, 1224, 0, 0)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
override fun defineListeners() {
|
||||
on(Items.ASTRONOMY_BOOK_600, IntType.ITEM, "read") { player, _ ->
|
||||
BookInterface.openBook(player, BookInterface.FANCY_BOOK_3_49, ::display)
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import core.api.*
|
||||
import core.game.dialogue.*
|
||||
import core.game.interaction.InteractionListener
|
||||
import core.game.node.entity.npc.AbstractNPC
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.world.map.Location
|
||||
import core.plugin.Initializable
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
class GoblinDialogues : InteractionListener {
|
||||
override fun defineListeners() {
|
||||
on(NPCs.GREASYCHEEKS_6127, NPC, "talk-to") { player, node ->
|
||||
openDialogue(player, GreasycheeksDialogueFile(), node as NPC)
|
||||
return@on true
|
||||
}
|
||||
on(NPCs.SMELLYTOES_6128, NPC, "talk-to") { player, node ->
|
||||
openDialogue(player, SmellytoesDialogueFile(), node as NPC)
|
||||
return@on true
|
||||
}
|
||||
on(NPCs.CREAKYKNEES_6129, NPC, "talk-to") { player, node ->
|
||||
openDialogue(player, CreakykneesDialogueFile(), node as NPC)
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GreasycheeksDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.GREASYCHEEKS_6127)
|
||||
player("Hello.")
|
||||
npc(ChatAnim.OLD_NORMAL, "Shush! I'm concentrating.")
|
||||
player("Oh, sorry.")
|
||||
}
|
||||
}
|
||||
|
||||
class SmellytoesDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.SMELLYTOES_6128)
|
||||
player("Hi there.")
|
||||
npc(ChatAnim.OLD_NORMAL, "Hey, ids me matesh!")
|
||||
player("Sorry, have we met?")
|
||||
npc(ChatAnim.OLD_NORMAL, "Yeah! you wazsh wiv me in dat pub overy by hill!")
|
||||
player("I have no idea what you're going on about.")
|
||||
npc(ChatAnim.OLD_NORMAL, "Glad yeeash remembers.")
|
||||
}
|
||||
}
|
||||
|
||||
class CreakykneesDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.CREAKYKNEES_6129)
|
||||
player("Where did you get that lens?")
|
||||
npc(ChatAnim.OLD_NORMAL, "From that strange metal thing up on the hill.")
|
||||
player(ChatAnim.ANGRY, "You should give that back!")
|
||||
npc(ChatAnim.OLD_NORMAL, "Even if it's cracked?")
|
||||
player("Ah, well, I suppose it's of no use. But, still.")
|
||||
}
|
||||
}
|
||||
|
||||
@Initializable
|
||||
class GreasycheeksNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id, location) {
|
||||
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
||||
return GreasycheeksNPC(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.GREASYCHEEKS_6127)
|
||||
}
|
||||
|
||||
override fun handleTickActions() {
|
||||
super.handleTickActions()
|
||||
if (RandomFunction.roll(12)) {
|
||||
sendChat(this, arrayOf(
|
||||
"Cook, cook, cook!",
|
||||
"I'm so hungry!",
|
||||
"This is gonna taste sooo good!",
|
||||
).random())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Initializable
|
||||
class SmellytoesNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id, location) {
|
||||
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
||||
return SmellytoesNPC(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.SMELLYTOES_6128)
|
||||
}
|
||||
|
||||
override fun handleTickActions() {
|
||||
super.handleTickActions()
|
||||
if (RandomFunction.roll(12)) {
|
||||
sendChat(this, arrayOf(
|
||||
"Doh ray meeee laa doh faaa!",
|
||||
"La la la! Do di dum dii!",
|
||||
).random())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Initializable
|
||||
class CreakykneesNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id, location) {
|
||||
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
||||
return CreakykneesNPC(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.CREAKYKNEES_6129)
|
||||
}
|
||||
|
||||
override fun handleTickActions() {
|
||||
super.handleTickActions()
|
||||
if (RandomFunction.roll(12)) {
|
||||
sendChat(this, arrayOf(
|
||||
"Was that a spark?",
|
||||
"Come on! Please light!",
|
||||
).random())
|
||||
}
|
||||
}
|
||||
}
|
||||
@Initializable
|
||||
class LostGoblinNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id, location) {
|
||||
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
||||
return LostGoblinNPC(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.GOBLIN_6125)
|
||||
}
|
||||
|
||||
override fun handleTickActions() {
|
||||
super.handleTickActions()
|
||||
if (RandomFunction.roll(12)) {
|
||||
sendChat(this, arrayOf(
|
||||
"Which way should I go?",
|
||||
"These dungeons are such a maze.",
|
||||
"Where's the exit?!?",
|
||||
"This is the fifth time this week. I'm lost!",
|
||||
"I've been wandering around down here for hours.",
|
||||
"How do you get back to the village?",
|
||||
"I hate being so lost!",
|
||||
"How could I be so disoriented?",
|
||||
"Where am I? I'm so lost.",
|
||||
"I know the exit's around here, somewhere."
|
||||
).random())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import core.api.*
|
||||
import core.game.node.entity.Entity
|
||||
import core.game.node.entity.npc.AbstractNPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.world.map.Location
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
@Initializable
|
||||
class GoblinGuardNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id, location) {
|
||||
override fun construct(id: Int, location: Location, vararg objects: Any): AbstractNPC {
|
||||
return GoblinGuardNPC(id, location)
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.SLEEPING_GUARD_6122, NPCs.GOBLIN_GUARD_489)
|
||||
}
|
||||
|
||||
override fun finalizeDeath(entity: Entity) {
|
||||
if (entity is Player) {
|
||||
val player = entity.asPlayer()
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) >= 4) {
|
||||
setAttribute(player, ObservatoryQuest.attributeKilledGuard, true)
|
||||
}
|
||||
super.finalizeDeath(player)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,238 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeReceivedWine
|
||||
import core.api.*
|
||||
import core.game.dialogue.*
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
@Initializable
|
||||
class ObservatoryAssistantDialogue (player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player): DialoguePlugin {
|
||||
return ObservatoryAssistantDialogue(player)
|
||||
}
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
openDialogue(player, ObservatoryAssistantDialogueFile(), npc)
|
||||
return false
|
||||
}
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.OBSERVATORY_ASSISTANT_6118, 10022)
|
||||
}
|
||||
}
|
||||
|
||||
class ObservatoryAssistantDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.OBSERVATORY_ASSISTANT_6118)
|
||||
|
||||
exec { player, npc ->
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 0) {
|
||||
loadLabel(player, "observatoryQuest0")
|
||||
} else if (getAttribute(player, attributeReceivedWine, false)) {
|
||||
loadLabel(player, "receivedwine")
|
||||
} else if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 100) {
|
||||
loadLabel(player, "observatoryqueststage100")
|
||||
} else {
|
||||
loadLabel(player, "randomStart" + (1..4).random())
|
||||
}
|
||||
}
|
||||
|
||||
label("observatoryQuest0")
|
||||
player(FacialExpression.ASKING, "Hi, are you busy?")
|
||||
npc("Me? I'm always busy.")
|
||||
npc("See that man there? That's the professor. If he had his way, I think he'd never let me sleep!")
|
||||
npc("Anyway, how might I help you?")
|
||||
options(
|
||||
DialogueOption("wonderingwhat", "I was wondering what you do here."),
|
||||
DialogueOption("justlooking", "Just looking around, thanks."),
|
||||
DialogueOption("looktelescope", "Can I have a look through that telescope?", expression = FacialExpression.ASKING)
|
||||
)
|
||||
|
||||
label("wonderingwhat")
|
||||
npc("Glad you ask. This is the Observatory reception. Up on the cliff is the Observatory dome, from which you can view the heavens. Usually...")
|
||||
player(FacialExpression.ASKING, "What do you mean, 'usually'?")
|
||||
npc("*Ahem*. Back to work, please.")
|
||||
npc("I'd speak with the professor. He'll explain.")
|
||||
|
||||
label("justlooking")
|
||||
npc("Okay, just don't break anything. If you need any help, let me know.")
|
||||
line("The assistant continues with his work.")
|
||||
|
||||
label("looktelescope")
|
||||
npc("You can. You won't see much though.")
|
||||
player(FacialExpression.ASKING, "And that's because?")
|
||||
npc("Just talk to the professor. He'll fill you in.")
|
||||
|
||||
label("randomStart1")
|
||||
player(FacialExpression.ASKING, "Can I interrupt you?")
|
||||
npc("I suppose so. Please be quick though.")
|
||||
goto("afterRandomStart")
|
||||
|
||||
label("randomStart2")
|
||||
player(FacialExpression.ASKING, "Might I have a word?")
|
||||
npc("Sure, how can I help you?")
|
||||
goto("afterRandomStart")
|
||||
|
||||
label("randomStart3")
|
||||
player("Hello there.")
|
||||
npc("Yes?")
|
||||
goto("afterRandomStart")
|
||||
|
||||
label("randomStart4")
|
||||
player(FacialExpression.ASKING, "Can I speak with you?")
|
||||
npc("Why, of course. What is it?")
|
||||
goto("afterRandomStart")
|
||||
|
||||
|
||||
label("afterRandomStart")
|
||||
exec { player, npc ->
|
||||
loadLabel(player, "observatoryqueststage" + getQuestStage(player, Quests.OBSERVATORY_QUEST))
|
||||
}
|
||||
|
||||
label("observatoryqueststage1")
|
||||
exec { player, _ ->
|
||||
if (inInventory(player, Items.PLANK_960, 3)) {
|
||||
loadLabel(player, "enoughplanks")
|
||||
}
|
||||
else if (inInventory(player, Items.PLANK_960)) {
|
||||
loadLabel(player, "someplanks")
|
||||
}
|
||||
else {
|
||||
loadLabel(player, "notenoughplanks")
|
||||
}
|
||||
}
|
||||
|
||||
label("notenoughplanks")
|
||||
player(FacialExpression.ASKING,"Where can I find planks of wood? I need some for the telescope's base.")
|
||||
npc("I understand planks can be found at Port Khazard, to the east of here. There are some at the Barbarian Outpost, too.")
|
||||
npc("Failing that, you could always ask the Sawmill Operator. He's to the north-east of Varrock, by the Lumber Yard.")
|
||||
|
||||
label("enoughplanks")
|
||||
player("I've got some planks for the telescope's base.")
|
||||
npc("Good work! The professor has been eagerly awaiting them.")
|
||||
|
||||
label("someplanks")
|
||||
player("I've got a plank.")
|
||||
npc("That's nice.")
|
||||
player("You know, for the telescope's base.")
|
||||
npc("Well done. Remember that you'll need three in total.")
|
||||
|
||||
label("observatoryqueststage2")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.BRONZE_BAR_2349)) {
|
||||
loadLabel(player, "hasbronzebar")
|
||||
} else {
|
||||
loadLabel(player, "nohasbronzebar")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohasbronzebar")
|
||||
player(FacialExpression.ASKING, "Can you help me? How do I go about getting a bronze bar?")
|
||||
npc("You'll need to use tin and copper ore on a furnace to produce this metal.")
|
||||
player("Right you are.")
|
||||
|
||||
label("hasbronzebar")
|
||||
player("The bronze bar is ready, and waiting for the professor.")
|
||||
npc("He'll surely be pleased. Go ahead and give it to him.")
|
||||
|
||||
label("observatoryqueststage3")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.MOLTEN_GLASS_1775)) {
|
||||
loadLabel(player, "hasmoltenglass")
|
||||
} else {
|
||||
loadLabel(player, "nohasmoltenglass")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohasmoltenglass")
|
||||
player(FacialExpression.ASKING, "What's the best way for me to get molten glass?")
|
||||
npc("There are many ways, but I'd suggest making it yourself. Get yourself a bucket of sand and some soda ash, which you can get from using seaweed with a furnace. Use the soda ash and sand together in a")
|
||||
npc("furnace and bang - molten glass is all yours. There's a book about it on the table if you want to know more.")
|
||||
player("Thank you!")
|
||||
|
||||
label("hasmoltenglass")
|
||||
player("I've managed to get hold of some molten glass.")
|
||||
npc("I suggest you have a word with the professor, in that case.")
|
||||
|
||||
label("observatoryqueststage4")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.LENS_MOULD_602)) {
|
||||
loadLabel(player, "haslensmould")
|
||||
} else {
|
||||
loadLabel(player, "nohaslensmould")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohaslensmould")
|
||||
player(FacialExpression.ASKING, "Where can I find this lens mould you mentioned?")
|
||||
npc("I'm sure I heard one of those goblins talking about it. I bet they've hidden it somewhere. Probably using it for some strange purpose, I'm sure.")
|
||||
player(FacialExpression.ASKING, "What makes you say that?")
|
||||
npc("I had a nice new star chart, until recently. I went out to do an errand for the professor the other day, only to see a goblin using it...")
|
||||
npc("...as some kind of makeshift hankey to blow his nose!")
|
||||
player("Oh dear.")
|
||||
npc("You may want to look through the dungeon they have under their little village.")
|
||||
player("Thanks for the advice.")
|
||||
|
||||
label("haslensmould")
|
||||
player("I have the lens mould.")
|
||||
npc("Well done on finding that! I am honestly quite impressed. Make sure you take it straight to the professor.")
|
||||
player("Will do.")
|
||||
|
||||
label("observatoryqueststage5")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.OBSERVATORY_LENS_603)) {
|
||||
loadLabel(player, "haslens")
|
||||
} else {
|
||||
loadLabel(player, "nohaslens")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohaslens")
|
||||
player(FacialExpression.ASKING, "How should I make this lens?")
|
||||
npc("Just use the molten glass with the mould. Simple.")
|
||||
player("Thanks!")
|
||||
|
||||
label("haslens")
|
||||
player("Do you like this lens? Good, huh?")
|
||||
npc("Nice. What's that scratch?")
|
||||
player("Oh, erm, that's a feature.")
|
||||
player("Yes, that's it! Indubitably, it facilitates the triangulation of photonic illumination to the correct...")
|
||||
npc("Stop! You can't confuse me with big words. Just pray the professor doesn't notice.")
|
||||
|
||||
label("observatoryqueststage6")
|
||||
player("Hello again.")
|
||||
npc("Ah, it's the telescope repairman! The professor is waiting for you in the Observatory.")
|
||||
player("How can I get to the Observatory?")
|
||||
npc("Well, since the bridge was ruined, you will have to travel through the dungeon under the goblins' settlement.")
|
||||
|
||||
label("observatoryqueststage100")
|
||||
player("Hi assistant.")
|
||||
player("Wait a minute.")
|
||||
player(FacialExpression.ASKING, "What's your real name?")
|
||||
npc(FacialExpression.ASKING, "My real name?")
|
||||
player(FacialExpression.ASKING, "I only know you as the professor's assistant. What's your actual name?")
|
||||
npc("Patrick.")
|
||||
player("Hi Patrick, I'm @name.")
|
||||
npc("Well, hello again, and thanks for helping out the professor.")
|
||||
npc(" Oh, and, believe it or not, his name is Mambo-duna-roona, but don't tell him I told you.")
|
||||
player(FacialExpression.AMAZED, "You made that up!")
|
||||
npc("No, honest! Anyways, you've made my life much easier. Have a drink on me!")
|
||||
item(Item(Items.JUG_OF_WINE_1993), "The assistant gives you some wine.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.JUG_OF_WINE_1993)
|
||||
setAttribute(player, attributeReceivedWine, true)
|
||||
}
|
||||
player("Thanks very much.")
|
||||
npc("No problem. Scorpius would be proud.")
|
||||
player(FacialExpression.ASKING, "Sorry?")
|
||||
npc("You may want to check out that book on the table, and perhaps look around for a grave...")
|
||||
|
||||
label("receivedwine")
|
||||
npc(FacialExpression.ASKING, "How was the wine?")
|
||||
player(FacialExpression.DRUNK, "That was good stuff, *hic*! Wheresh the professher?")
|
||||
npc(FacialExpression.ASKING, "The professor? He's up in the Observatory. Since the bridge was ruined, you will have to travel through the dungeon under the goblins' settlement.")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,199 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import core.api.*
|
||||
import core.game.activity.Cutscene
|
||||
import core.game.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.world.map.Direction
|
||||
import org.rs09.consts.Animations
|
||||
import org.rs09.consts.NPCs
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeFinishedCutscene
|
||||
import core.game.world.map.Location
|
||||
|
||||
class ObservatoryCutscene(player: Player) : Cutscene(player) {
|
||||
override fun setup() {
|
||||
setExit(Location(2438, 3163))
|
||||
loadRegion(9777)
|
||||
addNPC(PROFESSOR, 7, 25, Direction.SOUTH)
|
||||
}
|
||||
|
||||
override fun runStage(stage: Int) {
|
||||
when (stage) {
|
||||
0 -> {
|
||||
fadeToBlack()
|
||||
timedUpdate(5)
|
||||
}
|
||||
1 -> {
|
||||
teleport(player, 6, 27)
|
||||
face(player, getNPC(PROFESSOR)!!.location)
|
||||
rotateCamera(9, 25, 300)
|
||||
moveCamera(25, 22, 1800)
|
||||
timedUpdate(5)
|
||||
}
|
||||
2 -> {
|
||||
fadeFromBlack()
|
||||
dialogueLinesUpdate("<col=8A0808>~ The Observatory ~</col>", "The great eye into the heavens.")
|
||||
}
|
||||
3 -> {
|
||||
moveCamera(14, 10, 1800, 10)
|
||||
timedUpdate(3)
|
||||
}
|
||||
4 -> {
|
||||
moveCamera(6, 10, 1800, 10)
|
||||
timedUpdate(3)
|
||||
}
|
||||
5 -> {
|
||||
moveCamera(0, 32, 1800, 10)
|
||||
timedUpdate(3)
|
||||
}
|
||||
6 -> {
|
||||
moveCamera(4, 36, 1600, 10)
|
||||
timedUpdate(3)
|
||||
}
|
||||
7 -> {
|
||||
rotateCamera(7, 25, 300, 5)
|
||||
moveCamera(13, 40, 1800, 10)
|
||||
timedUpdate(3)
|
||||
}
|
||||
8 -> {
|
||||
moveCamera(12, 36, 1800, 5)
|
||||
timedUpdate(5)
|
||||
}
|
||||
9 -> {
|
||||
fadeToBlack()
|
||||
timedUpdate(5)
|
||||
}
|
||||
10 -> {
|
||||
moveCamera(5, 21, 500)
|
||||
rotateCamera(6, 27, 100)
|
||||
timedUpdate(3)
|
||||
}
|
||||
11 -> {
|
||||
fadeFromBlack()
|
||||
timedUpdate(5)
|
||||
}
|
||||
12 -> {
|
||||
playerDialogueUpdate(FacialExpression.NEUTRAL, "Hi professor!")
|
||||
}
|
||||
13 -> {
|
||||
face(getNPC(PROFESSOR)!!, player.location)
|
||||
timedUpdate(3)
|
||||
}
|
||||
14 -> {
|
||||
animate(getNPC(PROFESSOR)!!, WAVE)
|
||||
dialogueUpdate(PROFESSOR, FacialExpression.HAPPY, "Oh, hi there.")
|
||||
}
|
||||
15 -> {
|
||||
dialogueUpdate(PROFESSOR, FacialExpression.HAPPY, "I'm just adding the finishing touches.")
|
||||
}
|
||||
16 -> {
|
||||
playerDialogueUpdate(FacialExpression.HAPPY, "Okay, don't let me interrupt.")
|
||||
}
|
||||
17 -> {
|
||||
dialogueUpdate(PROFESSOR, FacialExpression.NEUTRAL, "Thank you.")
|
||||
}
|
||||
18 -> {
|
||||
face(getNPC(PROFESSOR)!!, Location(136, 25))
|
||||
dialogueUpdate(PROFESSOR, FacialExpression.NEUTRAL, "Right, let's get this finished.")
|
||||
}
|
||||
19 -> {
|
||||
animate(getNPC(PROFESSOR)!!, THINKING)
|
||||
sendChat(getNPC(PROFESSOR)!!, "Hmmmm...")
|
||||
timedUpdate(5)
|
||||
}
|
||||
20 -> {
|
||||
move(getNPC(PROFESSOR)!!, 7, 23)
|
||||
rotateCamera(9, 23, 100)
|
||||
moveCamera(12, 30, 300)
|
||||
timedUpdate(3)
|
||||
}
|
||||
21 -> {
|
||||
move(getNPC(PROFESSOR)!!, 10, 26)
|
||||
timedUpdate(10)
|
||||
}
|
||||
22 -> {
|
||||
face(getNPC(PROFESSOR)!!, Location(135, 25))
|
||||
animate(getNPC(PROFESSOR)!!, FIX)
|
||||
sendChat(getNPC(PROFESSOR)!!, "Bit of a tap here...")
|
||||
timedUpdate(3)
|
||||
}
|
||||
23 -> {
|
||||
move(getNPC(PROFESSOR)!!, 11, 26)
|
||||
timedUpdate(5)
|
||||
}
|
||||
24 -> {
|
||||
face(getNPC(PROFESSOR)!!, player.location)
|
||||
dialogueUpdate(PROFESSOR, FacialExpression.HAPPY, "@name, I'm just going upstairs to finish off.")
|
||||
}
|
||||
25 -> {
|
||||
playerDialogueUpdate(FacialExpression.HAPPY, "Right-oh.")
|
||||
}
|
||||
26 -> {
|
||||
face(getNPC(PROFESSOR)!!, Location(140, 25))
|
||||
timedUpdate(3)
|
||||
}
|
||||
27 -> {
|
||||
teleport(getNPC(PROFESSOR)!!, 11, 22, 1)
|
||||
teleport(player, 14,29,1)
|
||||
face(getNPC(PROFESSOR)!!, Location(2442, 3158, 1))
|
||||
moveCamera(6, 20, 400)
|
||||
rotateCamera(10, 24, 400)
|
||||
timedUpdate(5)
|
||||
}
|
||||
28 -> {
|
||||
move(getNPC(PROFESSOR)!!, 7, 27)
|
||||
moveCamera(10, 20, 400, 1)
|
||||
rotateCamera(7, 27, 50, 20)
|
||||
timedUpdate(10)
|
||||
}
|
||||
29 -> {
|
||||
sendChat(getNPC(PROFESSOR)!!, "In goes the lens.")
|
||||
timedUpdate(3)
|
||||
}
|
||||
30 -> {
|
||||
animate(getNPC(PROFESSOR)!!, TUNEUP)
|
||||
timedUpdate(20)
|
||||
}
|
||||
31 -> {
|
||||
sendChat(getNPC(PROFESSOR)!!, "And one final adjustment.")
|
||||
move(getNPC(PROFESSOR)!!, 10, 29)
|
||||
timedUpdate(6)
|
||||
}
|
||||
32 -> {
|
||||
move(getNPC(PROFESSOR)!!, 10, 25)
|
||||
face(getNPC(PROFESSOR)!!, Location(137, 26))
|
||||
timedUpdate(6)
|
||||
}
|
||||
33 -> {
|
||||
face(getNPC(PROFESSOR)!!, Location(137, 26))
|
||||
animate(getNPC(PROFESSOR)!!, CRANK)
|
||||
sendChat(getNPC(PROFESSOR)!!, "And all our work pays off.")
|
||||
timedUpdate(6)
|
||||
}
|
||||
34 -> {
|
||||
animate(getNPC(PROFESSOR)!!, CHEER)
|
||||
timedUpdate(10)
|
||||
}
|
||||
35 -> {
|
||||
moveCamera(6, 27, 500, 5)
|
||||
rotateCamera(10, 25, 50, 5)
|
||||
timedUpdate(3)
|
||||
}
|
||||
36 -> {
|
||||
end {
|
||||
setAttribute(player, attributeFinishedCutscene, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val PROFESSOR = NPCs.OBSERVATORY_PROFESSOR_6121
|
||||
val WAVE = Animations.HUMAN_WAVE_863
|
||||
val THINKING = 6844
|
||||
val FIX = 6847
|
||||
val TUNEUP = 6848
|
||||
val CRANK = 6845
|
||||
val CHEER = Animations.HUMAN_CHEER_862
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,676 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import core.api.*
|
||||
import core.game.dialogue.*
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeReceivedWine
|
||||
import core.game.interaction.QueueStrength
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Components
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
@Initializable
|
||||
class ObservatoryProfessorDialogue (player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player): DialoguePlugin {
|
||||
return ObservatoryProfessorDialogue(player)
|
||||
}
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
openDialogue(player, ObservatoryProfessorDialogueFile(), npc)
|
||||
return false
|
||||
}
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.OBSERVATORY_ASSISTANT_6119, NPCs.OBSERVATORY_ASSISTANT_6120)
|
||||
}
|
||||
}
|
||||
|
||||
class ObservatoryProfessorDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.OBSERVATORY_PROFESSOR_488)
|
||||
|
||||
npc("What would you like to talk about?")
|
||||
options(
|
||||
DialogueOption("observatoryquest", "Talk about the Observatory Quest.", skipPlayer = true),
|
||||
DialogueOption("treasuretrails", "Talk about the Treasure Trails.", skipPlayer = true),
|
||||
)
|
||||
|
||||
label("observatoryquest")
|
||||
exec { player, npc ->
|
||||
loadLabel(player, "observatoryqueststage" + getQuestStage(player, Quests.OBSERVATORY_QUEST))
|
||||
}
|
||||
|
||||
label("observatoryqueststage0")
|
||||
player("Hi, I was...")
|
||||
npc(FacialExpression.FRIENDLY, "Welcome to the magnificent wonder of the Observatory, where wonder is all around you, where the stars can be clutched from the heavens!")
|
||||
player("Wow, nice intro.")
|
||||
npc(FacialExpression.FRIENDLY, "Why, thanks! How might I help you?")
|
||||
options(
|
||||
DialogueOption("totallylost", "I'm totally lost."),
|
||||
DialogueOption("whatwhat", "An Observatory?", expression = FacialExpression.THINKING),
|
||||
DialogueOption("nah", "I'm just passing through."),
|
||||
)
|
||||
|
||||
label("totallylost")
|
||||
npc(FacialExpression.THINKING, "Lost? It must have been those pesky goblins that led you astray.")
|
||||
npc("Head north-east to find the city of Ardougne.")
|
||||
player("I'm sure I'll find the way.")
|
||||
player("Thanks for all your help.")
|
||||
npc(FacialExpression.FRIENDLY, "No problem at all. Come and visit again!")
|
||||
line("The professor carries on with his studies.")
|
||||
|
||||
label("nah")
|
||||
npc("Fair enough. Not everyone is interested in this place, I suppose.")
|
||||
|
||||
label("whatwhat")
|
||||
npc(FacialExpression.FRIENDLY, "Of course. We have a superb telescope up in the Observatory, on the hill.")
|
||||
npc(FacialExpression.FRIENDLY, "A truly marvellous invention, the likes of which you'll never behold again.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Well, it would be if it worked.")
|
||||
npc(FacialExpression.ANGRY, "Don't interrupt!")
|
||||
player(FacialExpression.THINKING, "What? It doesn't work?")
|
||||
npc("Oh, no, no, no. Don't listen to him, he's joking. Aren't you, my FAITHFUL assistant?")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Nope, dead serious. Hasn't been working for a long time.")
|
||||
npc(FacialExpression.ANGRY, "Arghhh! Get back to work and stop sticking your nose in!")
|
||||
player("So, it's broken. How come?")
|
||||
npc(FacialExpression.SAD, "Oh, I suppose there's no use keeping it secret. Did you see those houses outside?")
|
||||
player("Up on the hill? Yes, I've seen them.")
|
||||
npc("It's a horde of goblins.")
|
||||
npc(FacialExpression.SAD, "Since they moved here they have caused nothing but trouble.")
|
||||
npc("Last week, my telescope was tampered with.")
|
||||
npc(FacialExpression.ANGRY, "Now, parts need replacing before it can be used again. They've even been messing around in the dungeons under this area. Something needs to be done.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Strikes me that this visitor could help us.")
|
||||
npc(FacialExpression.ANGRY, "Stop being so rude.")
|
||||
npc("...")
|
||||
npc("Although, he has a point. What do you say?")
|
||||
player(FacialExpression.THINKING, "What, me?")
|
||||
options(
|
||||
DialogueOption("yestoquest", "Sounds interesting. How can I help?", "Sounds interesting, what can I do for you?", FacialExpression.FRIENDLY),
|
||||
DialogueOption("notoquest", "Oh, sorry, I don't have time for that."),
|
||||
)
|
||||
|
||||
label("notoquest")
|
||||
npc("Oh dear. I really do need some help.")
|
||||
npc("If you see anyone who can help then please send them my way.")
|
||||
|
||||
label("yestoquest")
|
||||
exec { player, _ ->
|
||||
if(getQuestStage(player, Quests.OBSERVATORY_QUEST) == 0) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 1)
|
||||
}
|
||||
}
|
||||
npc(FacialExpression.FRIENDLY, "Oh, thanks so much.")
|
||||
npc(FacialExpression.FRIENDLY, "I shall need some materials for the telescope, so it can be used again.")
|
||||
npc("Let's start with three planks of wood for the telescope base. My assistant will help with obtaining these, won't you?")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "As if I don't have enough work to do. Seems I don't have a choice.")
|
||||
npc(FacialExpression.FRIENDLY, "Go talk to him if you need some advice.")
|
||||
player(FacialExpression.FRIENDLY, "Okay, I'll be right back.")
|
||||
|
||||
label("observatoryqueststage1")
|
||||
player(FacialExpression.FRIENDLY, "Hi again!")
|
||||
npc(FacialExpression.FRIENDLY, "It's my helping hand, back again.")
|
||||
npc(FacialExpression.THINKING, "Do you have the planks yet?")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.PLANK_960, 3)) {
|
||||
loadLabel(player, "enoughplanks")
|
||||
} else {
|
||||
loadLabel(player, "notenoughplanks")
|
||||
}
|
||||
}
|
||||
|
||||
label("notenoughplanks")
|
||||
player("Sorry, not yet. Three planks was it?")
|
||||
npc("It was indeed.")
|
||||
|
||||
label("enoughplanks")
|
||||
player("Yes, I've got them. Here they are.")
|
||||
exec { player, _ ->
|
||||
if(removeItem(player, Item(Items.PLANK_960, 3))) {
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 1) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
npc(FacialExpression.FRIENDLY, "Well done. This will make a big difference.")
|
||||
npc(FacialExpression.FRIENDLY, "Now, the bronze for the tube. Oh, assistant!")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Okay, okay, ask me if you need any help, @name.")
|
||||
|
||||
label("observatoryqueststage2")
|
||||
player("Hi.")
|
||||
npc("The traveller returns!")
|
||||
player("Still working hard?")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Some of us are.")
|
||||
npc(FacialExpression.ANGRY, "What did I tell you about speaking when spoken to?")
|
||||
npc(FacialExpression.THINKING, "So, @name, you have the bronze bar?")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.BRONZE_BAR_2349)) {
|
||||
loadLabel(player, "hasbronzebar")
|
||||
} else {
|
||||
loadLabel(player, "nohasbronzebar")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohasbronzebar")
|
||||
player("Not yet.")
|
||||
npc("Please bring me one, then.")
|
||||
|
||||
label("hasbronzebar")
|
||||
player(FacialExpression.FRIENDLY, "I certainly do. Here you go.")
|
||||
exec { player, _ ->
|
||||
if(removeItem(player, Item(Items.BRONZE_BAR_2349))) {
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 2) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 3)
|
||||
}
|
||||
}
|
||||
}
|
||||
npc(FacialExpression.FRIENDLY, "Great. Now all I need is the lens made.")
|
||||
npc(FacialExpression.FRIENDLY, "Please get me some molten glass.")
|
||||
npc("Oi! Lazy bones!")
|
||||
player(FacialExpression.AMAZED, "What? I'm not lazy.")
|
||||
npc("Not you! I'm talking to my assistant.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Calm down old man, I heard. @name, I'm here if you need any help.")
|
||||
npc("Thank you. Wait a minute, who are you calling 'old'?")
|
||||
|
||||
label("observatoryqueststage3")
|
||||
npc("How are you getting on finding me some molten glass?")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.MOLTEN_GLASS_1775)) {
|
||||
loadLabel(player, "hasmoltenglass")
|
||||
} else {
|
||||
loadLabel(player, "nohasmoltenglass")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohasmoltenglass")
|
||||
player("Still working on it.")
|
||||
npc("I really need it. Please hurry.")
|
||||
|
||||
label("hasmoltenglass")
|
||||
player(FacialExpression.FRIENDLY, "Here it is.")
|
||||
exec { player, _ ->
|
||||
if(removeItem(player, Item(Items.MOLTEN_GLASS_1775))) {
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 3) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
npc(FacialExpression.FRIENDLY, "Excellent work, let's make the lens.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "It'll need to be made to an exact shape and size.")
|
||||
npc("Well, obviously, hence why we have a lens mould.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Not any more. One of those goblins took it.")
|
||||
npc(FacialExpression.SAD, "Great, just what I need. @name, I don't suppose you could find it?")
|
||||
player(FacialExpression.FRIENDLY, "I'll have a look - where should I start?")
|
||||
npc(FacialExpression.FRIENDLY, "No idea. You could ask my USELESS assistant if you want.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "What have I done to deserve this?")
|
||||
|
||||
label("observatoryqueststage4")
|
||||
npc(FacialExpression.THINKING, "Did you bring me the mould?")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.LENS_MOULD_602)) {
|
||||
loadLabel(player, "haslensmould")
|
||||
} else {
|
||||
loadLabel(player, "nohaslensmould")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohaslensmould")
|
||||
player("Still looking for it.")
|
||||
npc("Please try and find it; my assistant may be able to help.")
|
||||
|
||||
label("haslensmould")
|
||||
player(FacialExpression.HAPPY, "I certainly have. You'll never guess what they were doing with it.")
|
||||
npc("Well, from the smell I'd guess cooking some vile concoction.")
|
||||
player(FacialExpression.HAPPY, "Wow, good guess. Well, here you go.")
|
||||
npc(FacialExpression.NEUTRAL, NPCs.OBSERVATORY_ASSISTANT_6118, "Please don't give that to him. Last time he tried any Crafting, I had to spend a week cleaning up after the explosion.")
|
||||
player("Explosion?")
|
||||
npc(FacialExpression.SUSPICIOUS, "Erm, yes. I think in this instance you had probably better do it.")
|
||||
player("I suppose it's better I don't ask.")
|
||||
npc(FacialExpression.HAPPY,"You can use the mould with molten glass to make a new lens.")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.LENS_MOULD_602)) {
|
||||
addItemOrDrop(player, Items.MOLTEN_GLASS_1775)
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 4) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 5)
|
||||
}
|
||||
}
|
||||
}
|
||||
item(Item(Items.MOLTEN_GLASS_1775), "The professor gives you back the molten glass.")
|
||||
|
||||
|
||||
label("observatoryqueststage5")
|
||||
npc("Is the lens finished?")
|
||||
exec { player, _ ->
|
||||
if(inInventory(player, Items.OBSERVATORY_LENS_603)) {
|
||||
loadLabel(player, "haslens")
|
||||
} else {
|
||||
loadLabel(player, "nohaslens")
|
||||
}
|
||||
}
|
||||
|
||||
label("nohaslens")
|
||||
player("How do I make it again?")
|
||||
npc("Use the molten glass with the mould.")
|
||||
player("Huh. Simple.")
|
||||
|
||||
label("haslens")
|
||||
player("Yes, here it is. You may as well take this mould too.") //No source if no mould present
|
||||
line("The player hands the observatory professor the observatory lens.")
|
||||
npc("Wonderful, at last I can fix the telescope.")
|
||||
npc("Would you accompany me to the Observatory? You simply must see the telescope in operation.")
|
||||
player("Sounds interesting. Count me in.")
|
||||
npc("Superb. You'll have to go via the dungeon under the goblin settlement, seeing as the bridge is broken. You'll find stairs up to the Observatory from there.")
|
||||
player("Okay. See you there.")
|
||||
exec { player, _ ->
|
||||
setVarbit(player, ObservatoryQuest.telescopeVarbit, 1, true)
|
||||
queueScript(player, 0, QueueStrength.SOFT) { stage: Int ->
|
||||
when (stage) {
|
||||
0 -> {
|
||||
openOverlay(player, Components.FADE_TO_BLACK_120)
|
||||
return@queueScript delayScript(player, 4)
|
||||
}
|
||||
1 -> {
|
||||
if(removeItem(player, Item(Items.OBSERVATORY_LENS_603))) {
|
||||
removeItem(player, Item(Items.LENS_MOULD_602))
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 5) {
|
||||
setQuestStage(player, Quests.OBSERVATORY_QUEST, 6)
|
||||
}
|
||||
}
|
||||
return@queueScript delayScript(player, 1)
|
||||
}
|
||||
2 -> {
|
||||
openOverlay(player, Components.FADE_FROM_BLACK_170)
|
||||
return@queueScript delayScript(player, 2)
|
||||
}
|
||||
3 -> {
|
||||
sendDialogueLines(player, "The professor has gone ahead to the Observatory dome. Best you", "follow him to see the finished telescope.")
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
else -> return@queueScript stopExecuting(player)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
label("observatoryqueststage6")
|
||||
npc("Hello, friend.")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) != null) {
|
||||
loadLabel(player, "hasviewtelescope")
|
||||
} else {
|
||||
loadLabel(player, "nohasviewtelescope")
|
||||
}
|
||||
}
|
||||
label("nohasviewtelescope")
|
||||
// http://youtu.be/cK5suqcw3qU
|
||||
player("Hi, this really is impressive.")
|
||||
npc("Certainly is. Please, take a look through the telescope and tell me what you see.")
|
||||
|
||||
label("hasviewtelescope")
|
||||
player("I've had a look through the telescope.")
|
||||
npc("What did you see? If you're not sure, you can find out by looking at the star charts dotted around the walls downstairs.")
|
||||
player("It was...")
|
||||
goto("page1")
|
||||
|
||||
|
||||
label("page1")
|
||||
options(
|
||||
DialogueOption("Aquarius", "Aquarius", skipPlayer = true),
|
||||
DialogueOption("Capricorn", "Capricorn", skipPlayer = true),
|
||||
DialogueOption("Sagittarius", "Sagittarius", skipPlayer = true),
|
||||
DialogueOption("Scorpio", "Scorpio", skipPlayer = true),
|
||||
DialogueOption("page2", "~ next ~", skipPlayer = true),
|
||||
)
|
||||
|
||||
label("page2")
|
||||
options(
|
||||
DialogueOption("page1", "~ previous ~", skipPlayer = true),
|
||||
DialogueOption("Libra", "Libra", skipPlayer = true),
|
||||
DialogueOption("Virgo", "Virgo", skipPlayer = true),
|
||||
DialogueOption("Leo", "Leo", skipPlayer = true),
|
||||
DialogueOption("page3", "~ next ~", skipPlayer = true),
|
||||
)
|
||||
|
||||
label("page3")
|
||||
options(
|
||||
DialogueOption("page2", "~ previous ~", skipPlayer = true),
|
||||
DialogueOption("Cancer", "Cancer", skipPlayer = true),
|
||||
DialogueOption("Gemini", "Gemini", skipPlayer = true),
|
||||
DialogueOption("Taurus", "Taurus", skipPlayer = true),
|
||||
DialogueOption("page4", "~ next ~", skipPlayer = true),
|
||||
)
|
||||
|
||||
label("page4")
|
||||
options(
|
||||
DialogueOption("page3", "~ previous ~", skipPlayer = true),
|
||||
DialogueOption("Aries", "Aries", skipPlayer = true),
|
||||
DialogueOption("Pisces", "Pisces", skipPlayer = true),
|
||||
)
|
||||
|
||||
label("Aquarius")
|
||||
player("Aquarius!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 19) {
|
||||
loadLabel(player, "Aquariuscorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Aquariuscorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Aquarius, the water-bearer.")
|
||||
npc("It seems suitable, then, to award you with water runes!")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.WATER_RUNE_555, 25)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Aries")
|
||||
player("Aries!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 20) {
|
||||
loadLabel(player, "Ariescorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Ariescorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Aries, the ram.")
|
||||
npc("A fierce fighter. I'm sure he'll look down on you and improve your Attack for such insight.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
rewardXP(player, Skills.ATTACK, 875.0)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Cancer")
|
||||
player("Cancer!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 21) {
|
||||
loadLabel(player, "Cancercorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Cancercorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Cancer, the crab.")
|
||||
npc("An armoured creature - I think I shall reward you with an amulet of protection.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.AMULET_OF_DEFENCE_1729)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Capricorn")
|
||||
player("Capricorn!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 22) {
|
||||
loadLabel(player, "Capricorncorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Capricorncorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Capricorn, the goat.")
|
||||
npc("Capricorn will surely reward your insight with an increase to your Strength.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
rewardXP(player, Skills.STRENGTH, 875.0)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Gemini")
|
||||
player("Gemini!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 23) {
|
||||
loadLabel(player, "Geminicorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Geminicorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Gemini, the twins.")
|
||||
npc("With the double nature of Gemini, I can't offer you anything more suitable than a two-handed weapon.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.BLACK_2H_SWORD_1313)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Leo")
|
||||
player("Leo!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 24) {
|
||||
loadLabel(player, "Leocorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Leocorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Leo, the lion.")
|
||||
npc("I think the majestic power of the lion will raise your Hitpoints.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
rewardXP(player, Skills.HITPOINTS, 875.0)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Libra")
|
||||
player("Libra!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 25) {
|
||||
loadLabel(player, "Libracorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Libracorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Libra, the scales.")
|
||||
npc("Hmmm, balance, law, order - I shall award you with law runes!")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.LAW_RUNE_563, 25)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Pisces")
|
||||
player("Pisces!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 26) {
|
||||
loadLabel(player, "Piscescorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Piscescorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Pisces, the fish.")
|
||||
npc("What's more suitable as a reward than some tuna?")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.TUNA_361, 3)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Sagittarius")
|
||||
player("Sagittarius!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 27) {
|
||||
loadLabel(player, "Sagittariuscorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Sagittariuscorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Sagittarius, the centaur.")
|
||||
npc("As you've spotted the archer, I shall reward you with a maple longbow.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.MAPLE_LONGBOW_851)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Scorpio")
|
||||
player("Scorpio!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 28) {
|
||||
loadLabel(player, "Scorpiocorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Scorpiocorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Scorpio, the scorpion.")
|
||||
npc("I think weapon poison would make a suitable reward.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.WEAPON_POISON_187)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Taurus")
|
||||
player("Taurus!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 29) {
|
||||
loadLabel(player, "Tauruscorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Tauruscorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Taurus, the bull.")
|
||||
npc("This Strength potion should be a suitable reward.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.SUPER_STRENGTH1_161)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("Virgo")
|
||||
player("Virgo!")
|
||||
exec { player, _ ->
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == 30) {
|
||||
loadLabel(player, "Virgocorrect")
|
||||
} else {
|
||||
loadLabel(player, "wrongstar")
|
||||
}
|
||||
}
|
||||
|
||||
label("Virgocorrect")
|
||||
npc("That's exactly it!")
|
||||
player("Yes! Woo hoo!")
|
||||
npc("That's Virgo, the virtuous.")
|
||||
npc("Virgo will surely provide you with an increase to Defence.")
|
||||
// Usually it is given here, but I don't want loopholes.
|
||||
npc("By Saradomin's earlobes! You must be a friend of the gods indeed.")
|
||||
npc("Look in your backpack for your reward, in payment for your work.")
|
||||
exec { player, _ ->
|
||||
rewardXP(player, Skills.DEFENCE, 875.0)
|
||||
addItemOrDrop(player, Items.UNCUT_SAPPHIRE_1623)
|
||||
finishQuest(player, Quests.OBSERVATORY_QUEST)
|
||||
}
|
||||
|
||||
label("wrongstar")
|
||||
npc("I'm afraid not. Have another look. Remember, you can check the star charts on the walls for reference.")
|
||||
|
||||
// http://youtu.be/Z5RRnZl2vTg
|
||||
label("observatoryqueststage100")
|
||||
npc("Thanks for all your help with the telescope. What can I do for you?")
|
||||
options(
|
||||
DialogueOption("needmorehelp", "Do you need any more help with the telescope?", expression = FacialExpression.ASKING),
|
||||
DialogueOption("mambodunaroona", "Is it true your name is Mambo-duna-roona?", expression = FacialExpression.ASKING) { player, _ ->
|
||||
return@DialogueOption getAttribute(player, attributeReceivedWine, false)
|
||||
},
|
||||
DialogueOption("nevermind", "Nothing, thanks."),
|
||||
)
|
||||
|
||||
label("needmorehelp")
|
||||
npc("Not right now,")
|
||||
npc("but the stars may hold a secret for you.")
|
||||
|
||||
label("nevermind")
|
||||
npc("Okay, no problem. See you again.")
|
||||
|
||||
label("treasuretrails")
|
||||
npc("Welcome back! How can I help you today?")
|
||||
player("Can you teach me to solve treasure trail clues?")
|
||||
npc("Ah, I get asked about treasure trails all the time! Listen carefully and I shall tell you what I know...")
|
||||
npc("Lots of clues have <col=8A0808>degrees</col> and <col=8A0808>minutes</col> written on them. These are the coordinates of the place where the treasure is buried.")
|
||||
npc("You have to walk to the correct spot, so that your coordinates are exactly the same as the values written on the clue scroll.")
|
||||
npc("To do this, you must use a <col=8A0808>sextant</col>, a <col=8A0808>watch</col> and a <col=8A0808>chart</col> to find your own coordinates.")
|
||||
npc("Once you know the coordinates of the place where you are, you know which way you have to walk to get to the place where the treasure is!")
|
||||
player("Riiight. So where do I get those items from?")
|
||||
npc("I think Murphy, the owner of the fishing trawler moored south of Ardougne, might be able to spare you a sextant. Then the nearest Clock Tower is south of Ardougne - you could probably get a watch there. I've")
|
||||
npc("got plenty of charts myself, here have one.")
|
||||
|
||||
label("mambodunaroona")
|
||||
npc(FacialExpression.AMAZED, "How do you know tha-")
|
||||
npc(FacialExpression.SUSPICIOUS, "I mean, of course not, what a silly idea.")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import core.api.*
|
||||
import core.api.setVarp
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.player.link.quest.Quest
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
|
||||
// http://youtu.be/TWIkCRRea8A The initial quest log.
|
||||
// http://youtu.be/onHNm9Z5L-o The best full quest log.
|
||||
// http://youtu.be/cq-jGTXXHuE
|
||||
// http://youtu.be/ekYr30h43ag Scorpius.
|
||||
/**
|
||||
* Observatory Quest
|
||||
*/
|
||||
@Initializable
|
||||
class ObservatoryQuest : Quest(Quests.OBSERVATORY_QUEST, 96, 95, 2,112, 0, 1, 7) {
|
||||
|
||||
companion object {
|
||||
val questName = Quests.OBSERVATORY_QUEST
|
||||
const val observatoryVarp = 112
|
||||
const val goblinStoveVarbit = 3837
|
||||
const val telescopeVarbit = 3838
|
||||
|
||||
const val starChartsInterface = 104
|
||||
const val telescopeInterface = 552
|
||||
const val dungeonWarning = 560
|
||||
|
||||
const val attributeKilledGuard = "/save:quest:observatoryquest-killedguard"
|
||||
const val attributeUnlockedGate = "/save:quest:observatoryquest-unlockedgate"
|
||||
const val attributeTelescopeStar = "/save:quest:observatoryquest-telescopestar" // NULL - not seen telescope, 19 - 30 one of the random star patterns
|
||||
const val attributeReceivedWine = "/save:quest:observatoryquest-receivedwine"
|
||||
const val attributeReceivedMould = "/save:quest:observatoryquest-receivedmould"
|
||||
const val attributeRandomChest = "/save:quest:observatoryquest-randomchest"
|
||||
const val attributeFinishedCutscene = "/save:quest:observatoryquest-finishedcutscene"
|
||||
|
||||
}
|
||||
override fun drawJournal(player: Player, stage: Int) {
|
||||
super.drawJournal(player, stage)
|
||||
var line = 12
|
||||
var stage = getStage(player)
|
||||
|
||||
var started = getQuestStage(player, questName) > 0
|
||||
|
||||
if (!started) {
|
||||
line(player, "I can start this quest by speaking to the !!professor?? in the", line++, false)
|
||||
line(player, "!!Observatory reception, south-west of Ardougne.??", line++, false)
|
||||
} else {
|
||||
line(player, "I can start this quest by speaking to the professor in the", line++, true)
|
||||
line(player, "Observatory reception, south-west of Ardougne.", line++, true)
|
||||
|
||||
if (stage >= 5) {
|
||||
line(player, "I should take the letter the Examiner has given me to the", line++, true)
|
||||
line(player, "Curator of Varrock Museum, for his approval.", line++, true)
|
||||
line++
|
||||
} else if (stage >= 1) {
|
||||
line(player, "Seems the observatory telescope needs repairing, due to", line++)
|
||||
line(player, "the nearby goblins. The !!professor?? wants me to help by", line++)
|
||||
line(player, "getting the following, with the help of his !!assistant??:", line++)
|
||||
line++
|
||||
}
|
||||
if (stage >= 2) {
|
||||
line(player, "!!3 plain wooden planks??", line++, true)
|
||||
} else if (stage >= 1) {
|
||||
line(player, "!!3 plain wooden planks??", line++, inInventory(player, Items.PLANK_960, 3))
|
||||
}
|
||||
if (stage >= 3) {
|
||||
line(player, "!!1 bronze bar??", line++, true)
|
||||
} else if (stage >= 2) {
|
||||
line(player, "!!1 bronze bar??", line++, inInventory(player, Items.BRONZE_BAR_2349))
|
||||
}
|
||||
if (stage >= 4) {
|
||||
line(player, "!!1 molten glass??", line++, true)
|
||||
} else if (stage >= 3) {
|
||||
line(player, "!!1 molten glass??", line++, inInventory(player, Items.MOLTEN_GLASS_1775))
|
||||
}
|
||||
if (stage >= 5) {
|
||||
line(player, "!!1 lens mould??", line++, true)
|
||||
} else if (stage >= 4) {
|
||||
line(player, "!!1 lens mould??", line++)
|
||||
}
|
||||
|
||||
if (stage >= 6) {
|
||||
line(player, "The professor was pleased to have all the pieces needed", line++, true)
|
||||
line(player, "to fix the telescope. Apparently, the professor's last", line++, true)
|
||||
line(player, "attempt at Crafting ended in disaster. So, he wants me to", line++, true)
|
||||
line(player, "create the lens by using the molten glass with the mould.", line++, true)
|
||||
line(player, "Fine by me!", line++, true)
|
||||
} else if (stage >= 5) {
|
||||
line(player, "The !!professor?? was pleased to have all the pieces needed", line++)
|
||||
line(player, "to fix the telescope. Apparently, the professor's last", line++)
|
||||
line(player, "attempt at Crafting ended in disaster. So, he wants me to", line++)
|
||||
line(player, "create the !!lens?? by using the !!molten glass?? with the !!mould??.", line++)
|
||||
line(player, "Fine by me!", line++)
|
||||
}
|
||||
|
||||
if (stage >= 100) {
|
||||
line(player, "The professor has gone ahead to the Observatory. He", line++, true)
|
||||
line(player, "wants me to meet him there by travelling through the", line++, true)
|
||||
line(player, "dungeon below it.", line++, true)
|
||||
} else if (stage >= 6) {
|
||||
line(player, "The !!professor?? has gone ahead to the !!Observatory??. He", line++)
|
||||
line(player, "wants me to meet him there by travelling through the", line++)
|
||||
line(player, "!!dungeon?? below it.", line++)
|
||||
}
|
||||
if (stage >= 100) {
|
||||
line++
|
||||
line(player,"<col=FF0000>QUEST COMPLETE!</col>", line)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun finish(player: Player) {
|
||||
var ln = 10
|
||||
super.finish(player)
|
||||
player.packetDispatch.sendString("You have completed the Observatory Quest!", 277, 4)
|
||||
// This image is special since it isn't an item, but a standalone model.
|
||||
player.packetDispatch.sendModelOnInterface(1174, 277, 5, 0) // Scenery 2210, Model 1174
|
||||
player.packetDispatch.sendAngleOnInterface(277, 5, 2040, 0, 1836)
|
||||
|
||||
drawReward(player, "2 Quest Points", ln++)
|
||||
drawReward(player, "2,250 Crafting XP", ln++)
|
||||
drawReward(player, "A payment depending on", ln++)
|
||||
drawReward(player, "which constellation you", ln++)
|
||||
drawReward(player, "observed", ln++)
|
||||
|
||||
rewardXP(player, Skills.CRAFTING, 2250.0)
|
||||
}
|
||||
|
||||
override fun updateVarps(player: Player) {
|
||||
setVarp(player, observatoryVarp, getQuestStage(player, questName), true)
|
||||
if(getQuestStage(player, questName) >= 6) {
|
||||
setVarbit(player, telescopeVarbit, 1, true)
|
||||
} else {
|
||||
setVarbit(player, telescopeVarbit, 0, true)
|
||||
}
|
||||
if(getQuestStage(player, questName) >= 7) {
|
||||
setVarp(player, observatoryVarp, 7, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun reset(player : Player) {
|
||||
removeAttribute(player, attributeKilledGuard)
|
||||
removeAttribute(player, attributeUnlockedGate)
|
||||
removeAttribute(player, attributeTelescopeStar)
|
||||
removeAttribute(player, attributeReceivedWine)
|
||||
removeAttribute(player, attributeReceivedMould)
|
||||
removeAttribute(player, attributeRandomChest)
|
||||
removeAttribute(player, attributeFinishedCutscene)
|
||||
setVarbit(player, 3837, 0, true)
|
||||
}
|
||||
|
||||
override fun newInstance(`object`: Any?): Quest {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import core.api.*
|
||||
import core.game.interaction.InterfaceListener
|
||||
import core.game.world.map.Location
|
||||
|
||||
class ObservatoryQuestInterfaces : InterfaceListener {
|
||||
|
||||
companion object {
|
||||
|
||||
val buttonToNameMapping = mapOf(
|
||||
19 to "Aquarius",
|
||||
20 to "Aries",
|
||||
21 to "Cancer",
|
||||
22 to "Capricorn",
|
||||
23 to "Gemini",
|
||||
24 to "Leo",
|
||||
25 to "Libra",
|
||||
26 to "Pisces",
|
||||
27 to "Sagittarius",
|
||||
28 to "Scorpio",
|
||||
29 to "Taurus",
|
||||
30 to "Virgo",
|
||||
)
|
||||
|
||||
val buttonToStarObjectMapping = mapOf(
|
||||
19 to 27064,
|
||||
20 to 27066,
|
||||
21 to 27067,
|
||||
22 to 27061,
|
||||
23 to 27068,
|
||||
24 to 27058,
|
||||
25 to 27057,
|
||||
26 to 27062,
|
||||
27 to 27056,
|
||||
28 to 27055,
|
||||
29 to 27059,
|
||||
30 to 27060,
|
||||
)
|
||||
}
|
||||
|
||||
override fun defineInterfaceListeners() {
|
||||
on(ObservatoryQuest.starChartsInterface) { player, component, opcode, buttonID, slot, itemID ->
|
||||
if(buttonToStarObjectMapping.contains(buttonID)){
|
||||
// 55 57
|
||||
player.packetDispatch.sendModelOnInterface(buttonToStarObjectMapping[buttonID]!!, ObservatoryQuest.starChartsInterface, 55, 0)
|
||||
setInterfaceText(player, buttonToNameMapping[buttonID]!!, ObservatoryQuest.starChartsInterface, 57)
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
on(ObservatoryQuest.dungeonWarning) { player, _, _, buttonID, _, _ ->
|
||||
when (buttonID) {
|
||||
17 -> teleport(player, Location(2355, 9394)).also { closeInterface(player) }
|
||||
18 -> closeInterface(player)
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,294 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeFinishedCutscene
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeRandomChest
|
||||
import core.ServerConstants
|
||||
import core.api.*
|
||||
import core.game.dialogue.DialogueFile
|
||||
import core.game.dialogue.FacialExpression
|
||||
import core.game.global.action.DoorActionHandler
|
||||
import core.game.interaction.InteractionListener
|
||||
import core.game.interaction.QueueStrength
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.world.map.Location
|
||||
import core.tools.END_DIALOGUE
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
import org.rs09.consts.Scenery
|
||||
|
||||
class ObservatoryQuestListeners : InteractionListener {
|
||||
|
||||
companion object {
|
||||
val chestMap = mapOf(
|
||||
Scenery.CHEST_2191 to Scenery.CHEST_2194,
|
||||
Scenery.CHEST_25385 to Scenery.CHEST_25386,
|
||||
Scenery.CHEST_25387 to Scenery.CHEST_25388,
|
||||
Scenery.CHEST_25389 to Scenery.CHEST_25390,
|
||||
Scenery.CHEST_25391 to Scenery.CHEST_25392
|
||||
)
|
||||
|
||||
val reverseChestMap = chestMap.map { (k, v) -> v to k }.toMap()
|
||||
|
||||
/* Comments show only the default order BEFORE randomization. A randomized
|
||||
number (0-10) is calculated the first time the player goes down the stairs,
|
||||
and is then added to the map value modulo 11, rotating the map.
|
||||
*/
|
||||
|
||||
val chestLocations = mapOf(
|
||||
Location(2333, 9405) to 0, // key
|
||||
Location(2312, 9400) to 1, // spider
|
||||
Location(2310, 9374) to 2, // spider
|
||||
Location(2348, 9383) to 3, // empty
|
||||
Location(2356, 9380) to 4, // spider
|
||||
Location(2359, 9376) to 5, // empty
|
||||
Location(2360, 9366) to 6, // empty
|
||||
Location(2351, 9361) to 7, // spider
|
||||
Location(2364, 9355) to 8, // antipoison
|
||||
Location(2335, 9374) to 9, // spider
|
||||
Location(2326, 9360) to 10) // empty
|
||||
}
|
||||
|
||||
override fun defineListeners() {
|
||||
|
||||
on(Scenery.SIGNPOST_25397, SCENERY, "read") { player, _ ->
|
||||
openDialogue(player, object : DialogueFile(){
|
||||
override fun handle(componentID: Int, buttonID: Int) {
|
||||
val servername = ServerConstants.SERVER_NAME
|
||||
when(stage){
|
||||
0 -> sendDialogueLines(player, "~ The Observatory ~", "Step ahead to the reception if you wish to explore $servername's most", "magnificent invention.").also {
|
||||
stage++
|
||||
}
|
||||
1 -> player(FacialExpression.NEUTRAL, "Magnificent invention? I've seen some pretty magnificent", "things in my time. It'll have to be pretty impressive.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
}
|
||||
})
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.ORRERY_25401, SCENERY, "view") { player, _ ->
|
||||
sendChat(player, "Oooooh, bizarre!")
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.STAIRS_25432, SCENERY, "climb-down") { player, _ ->
|
||||
openInterface(player, 560)
|
||||
if (getAttribute(player, attributeRandomChest, null) == null) {
|
||||
setAttribute(player, attributeRandomChest, RandomFunction.random(11))
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
// http://youtu.be/Kg84MYXgo-M -> You can always go to the observatory, no matter which stage.
|
||||
on(Scenery.STAIRS_25429, SCENERY, "climb up") { player, node ->
|
||||
if (node.location == Location(2335, 9351)) {
|
||||
if (!getAttribute(player, attributeFinishedCutscene, false) && getQuestStage(player, Quests.OBSERVATORY_QUEST) == 6) {
|
||||
ObservatoryCutscene(player).start()
|
||||
}
|
||||
else teleport(player, Location(2439, 3164))
|
||||
} else {
|
||||
teleport(player, Location(2457, 3186))
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.STAIRS_25434, SCENERY, "climb-down") { player, _ ->
|
||||
teleport(player, Location(2335, 9350))
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.STAIRS_25431, SCENERY, "climb-up") { player, _ ->
|
||||
teleport(player, Location(2443, 3160, 1))
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.STAIRS_25437, SCENERY, "climb-down") { player, _ ->
|
||||
teleport(player, Location(2444, 3162, 0))
|
||||
return@on true
|
||||
}
|
||||
|
||||
// All chests
|
||||
on(chestMap.keys.toIntArray(), SCENERY, "open") { player, node ->
|
||||
animate(player, 536)
|
||||
sendMessage(player, "You open the chest.")
|
||||
chestMap[node.id]?.let { replaceScenery(node as core.game.node.scenery.Scenery, it, 240) }
|
||||
return@on true
|
||||
}
|
||||
on(chestMap.values.toIntArray(), SCENERY, "close") { player, node ->
|
||||
animate(player, 535)
|
||||
reverseChestMap[node.id]?.let { replaceScenery(node as core.game.node.scenery.Scenery, it, -1) }
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(chestMap.values.toIntArray(), SCENERY, "search") { player, node ->
|
||||
val chest = chestLocations[node.location]?.plus(getAttribute(player, attributeRandomChest, 0))?.mod(11)
|
||||
when (chest) {
|
||||
0 -> {
|
||||
if (inInventory(player, Items.GOBLIN_KITCHEN_KEY_601) || getQuestStage(player, Quests.OBSERVATORY_QUEST) != 4 || getAttribute(player, ObservatoryQuest.attributeUnlockedGate, false)) {
|
||||
sendMessage(player, "You search the chest.")
|
||||
sendMessage(player, "The chest is empty.")
|
||||
} else {
|
||||
lock(player,2)
|
||||
queueScript(player, 2, QueueStrength.STRONG) {
|
||||
if (inInventory(player, Items.GOBLIN_KITCHEN_KEY_601)) {
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
addItemOrDrop(player, Items.GOBLIN_KITCHEN_KEY_601)
|
||||
sendItemDialogue(player, Items.GOBLIN_KITCHEN_KEY_601,"You find a kitchen key.")
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
}
|
||||
animate(player, 537)
|
||||
return@on true
|
||||
}
|
||||
1, 2, 4, 7, 9 -> {
|
||||
sendMessage(player, "You search the chest.")
|
||||
if (findLocalNPC(player, NPCs.POISON_SPIDER_1009) != null) {
|
||||
sendMessage(player, "The chest is empty.")
|
||||
animate(player, 537)
|
||||
return@on true
|
||||
}
|
||||
sendMessage(player, "The chest contains a poisonous spider.")
|
||||
val npc = NPC(NPCs.POISON_SPIDER_1009)
|
||||
npc.location = player.location
|
||||
npc.init()
|
||||
npc.isRespawn = false
|
||||
npc.moveStep()
|
||||
npc.face(player)
|
||||
animate(player, 537)
|
||||
return@on true
|
||||
}
|
||||
8 -> {
|
||||
sendMessage(player, "You search the chest.")
|
||||
lock(player,2)
|
||||
queueScript(player, 2, QueueStrength.STRONG) {
|
||||
addItemOrDrop(player, Items.ANTIPOISON1_179)
|
||||
sendMessage(player,"This chest contains some antipoison.")
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
animate(player, 537)
|
||||
return@on true
|
||||
}
|
||||
else -> {
|
||||
sendMessage(player, "You search the chest.")
|
||||
sendMessage(player, "The chest is empty.")
|
||||
animate(player, 537)
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
on(intArrayOf(Scenery.KITCHEN_GATE_2199, Scenery.KITCHEN_GATE_2200), SCENERY, "open") { player, node ->
|
||||
if (getAttribute(player, ObservatoryQuest.attributeUnlockedGate, false)) {
|
||||
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
|
||||
} else if (getAttribute(player, ObservatoryQuest.attributeKilledGuard, false)) {
|
||||
if (removeItem(player, Items.GOBLIN_KITCHEN_KEY_601)) {
|
||||
sendMessage(player, "The gate unlocks.")
|
||||
sendMessage(player, "The key is useless now. You discard it.")
|
||||
setAttribute(player, ObservatoryQuest.attributeUnlockedGate, true)
|
||||
sendPlayerDialogue(player, "I had better be quick, there may be more guards about.")
|
||||
DoorActionHandler.handleAutowalkDoor(player, node.asScenery())
|
||||
} else {
|
||||
// http://youtu.be/ZkUF-0eonls
|
||||
sendMessage(player, "The gate is locked.")
|
||||
}
|
||||
} else if (getQuestStage(player, Quests.OBSERVATORY_QUEST) >= 4){
|
||||
sendMessage(player, "If you open the gate, the guard will hear you. You need to get rid of him.")
|
||||
} else sendMessage(player, "The gate is locked.")
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(NPCs.SLEEPING_GUARD_6122, NPC, "prod") { player, node ->
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) < 4) {
|
||||
return@on true
|
||||
}
|
||||
sendChat(node as NPC, "Oi, how dare you wake me up!")
|
||||
transformNpc(node, NPCs.GOBLIN_GUARD_489, 400)
|
||||
node.attack(player)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.GOBLIN_STOVE_25440, SCENERY, "inspect") { player, _ ->
|
||||
openDialogue(player, object : DialogueFile(){
|
||||
override fun handle(componentID: Int, buttonID: Int) {
|
||||
when(stage){
|
||||
0 -> sendDialogueLines(player, "The goblins appear to have been using the lens mould to cook their", "stew!").also { stage++ }
|
||||
1 -> sendDialogueLines(player, "You shake out its contents and take it with you.").also { animate(player, 537); stage++ }
|
||||
2 -> end().also {
|
||||
sendChat(player, "Euuuw, that smells awful!")
|
||||
setVarbit(player, ObservatoryQuest.goblinStoveVarbit ,1)
|
||||
addItemOrDrop(player, Items.LENS_MOULD_602)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.GOBLIN_STOVE_25441, SCENERY, "inspect") { player, _ ->
|
||||
if (!inInventory(player, Items.LENS_MOULD_602)) addItemOrDrop(player, Items.LENS_MOULD_602)
|
||||
return@on true
|
||||
}
|
||||
|
||||
onUseWith(ITEM, Items.LENS_MOULD_602, Items.MOLTEN_GLASS_1775) { player, _, with ->
|
||||
if (getStatLevel(player, Skills.CRAFTING) < 10) {
|
||||
sendMessage(player, "You need a crafting level of 10 to do this.")
|
||||
return@onUseWith true
|
||||
}
|
||||
|
||||
sendMessage(player, "You pour the molten glass into the mould.")
|
||||
sendMessage(player, "You clasp it together.")
|
||||
sendItemDialogue(player, Items.OBSERVATORY_LENS_603, "It has produced a small, convex glass disc.")
|
||||
if (removeItem(player, with)) {
|
||||
addItemOrDrop(player, Items.OBSERVATORY_LENS_603)
|
||||
}
|
||||
return@onUseWith true
|
||||
}
|
||||
|
||||
on(intArrayOf(Scenery.STAR_CHART_25578, Scenery.STAR_CHART_25579, Scenery.STAR_CHART_25580, Scenery.STAR_CHART_25581, Scenery.STAR_CHART_25582, Scenery.STAR_CHART_25583), SCENERY, "look-at") { player, _ ->
|
||||
openInterface(player, ObservatoryQuest.starChartsInterface)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(intArrayOf(Scenery.TELESCOPE_25438, Scenery.TELESCOPE_25439), SCENERY, "view") { player, _ ->
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) >= 100) {
|
||||
openDialogue(player, TelescopeDialogue(), NPC(NPCs.OBSERVATORY_PROFESSOR_488))
|
||||
}
|
||||
else if (getQuestStage(player, Quests.OBSERVATORY_QUEST) >= 6) {
|
||||
if (getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null) == null) {
|
||||
setAttribute(player, ObservatoryQuest.attributeTelescopeStar, (19..30).random())
|
||||
}
|
||||
val randomStar = getAttribute<Int?>(player, ObservatoryQuest.attributeTelescopeStar, null)
|
||||
openInterface(player, ObservatoryQuest.telescopeInterface)
|
||||
player.packetDispatch.sendModelOnInterface(ObservatoryQuestInterfaces.buttonToStarObjectMapping[randomStar]!!, ObservatoryQuest.telescopeInterface, 7, 0)
|
||||
} else {
|
||||
sendMessage(player, "The telescope is broken.")
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(intArrayOf(Scenery.DOOR_25526, Scenery.DOOR_25527), SCENERY, "open") { player, _ ->
|
||||
sendMessage(player, "The door is locked.")
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(Scenery.GRAVE_OF_SCORPIUS_2211, SCENERY, "read") { player, _ ->
|
||||
sendMessage(player, "Here lies Scorpius: Only those who have seen beyond the stars may seek his counsel.")
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TelescopeDialogue : DialogueFile() {
|
||||
override fun handle(componentID: Int, buttonID: Int) {
|
||||
when(stage){
|
||||
0 -> npcl(FacialExpression.ASKING, "What do you see now?").also { stage++ }
|
||||
1 -> playerl("I can see a constellation through the telescope. It looks like Scorpio.").also { stage++ }
|
||||
2 -> npcl("Scorpio? Interesting. How very fitting.").also { stage++ }
|
||||
3 -> playerl(FacialExpression.ASKING, " What do you mean?").also { stage++ }
|
||||
4 -> npcl("Scorpius, the founder of all we know relating to astronomy. There's a book about him in the reception. Perhaps you should check it out, you might learn something.").also { stage++ }
|
||||
5 -> playerl("Then perhaps I shall.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import core.api.getAttribute
|
||||
import core.api.setAttribute
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.npc.NPCBehavior
|
||||
import core.game.world.GameWorld
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
class PoisonSpiderBehavior : NPCBehavior(NPCs.POISON_SPIDER_1009) {
|
||||
override fun onCreation(self: NPC) {
|
||||
setAttribute(self, "despawn-time", GameWorld.ticks + 100)
|
||||
}
|
||||
|
||||
override fun tick(self: NPC): Boolean {
|
||||
if (getAttribute(self, "despawn-time", 0) <= GameWorld.ticks && !self.inCombat())
|
||||
self.clear()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
package content.region.kandarin.quest.observatoryquest
|
||||
|
||||
import content.data.Quests
|
||||
import content.region.kandarin.quest.observatoryquest.ObservatoryQuest.Companion.attributeReceivedMould
|
||||
import core.api.*
|
||||
import core.game.dialogue.*
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
@Initializable
|
||||
class SpiritOfScorpiusDialogue (player: Player? = null) : DialoguePlugin(player) {
|
||||
override fun newInstance(player: Player): DialoguePlugin {
|
||||
return SpiritOfScorpiusDialogue(player)
|
||||
}
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
openDialogue(player, SpiritOfScorpiusDialogueFile(), npc)
|
||||
return false
|
||||
}
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.SPIRIT_OF_SCORPIUS_492)
|
||||
}
|
||||
}
|
||||
|
||||
class SpiritOfScorpiusDialogueFile : DialogueLabeller() {
|
||||
override fun addConversation() {
|
||||
assignToIds(NPCs.SPIRIT_OF_SCORPIUS_492)
|
||||
|
||||
exec { player, npc ->
|
||||
if (getQuestStage(player, Quests.OBSERVATORY_QUEST) == 100) {
|
||||
if (!inEquipment(player, Items.GHOSTSPEAK_AMULET_552)) loadLabel(player, "noghostspeak")
|
||||
else loadLabel(player, "observatoryqueststage100")
|
||||
} else loadLabel(player, "observatoryquestincomplete")
|
||||
}
|
||||
|
||||
label("observatoryquestincomplete")
|
||||
line("They seem to be ignoring you.")
|
||||
|
||||
label("noghostspeak")
|
||||
line("This powerful spirit seems capable of speaking to you", "even though you are not wearing an Amulet of Ghostspeak.")
|
||||
exec { player, _ ->
|
||||
loadLabel(player, "observatoryqueststage100")
|
||||
}
|
||||
|
||||
label("observatoryqueststage100")
|
||||
npc("Who treads upon my grave?")
|
||||
options(
|
||||
DialogueOption("wisdom", "I seek your wisdom.") { player, _ ->
|
||||
return@DialogueOption !getAttribute(player, attributeReceivedMould, false)
|
||||
},
|
||||
DialogueOption("anothermould", "I need another unholy symbol mould.", "I need another mould for the unholy symbol.") { player, _ ->
|
||||
return@DialogueOption getAttribute(player, attributeReceivedMould, false)
|
||||
},
|
||||
DialogueOption("blessing", "I have come to seek your blessing."),
|
||||
DialogueOption("killyou", "I have come to kill you.")
|
||||
)
|
||||
|
||||
label("wisdom")
|
||||
npc("Indeed, I feel you have beheld the far places in the heavens. My Lord instructs me to help you.")
|
||||
item(Item(Items.UNHOLY_MOULD_1594), "An unholy mould appears in your inventory.")
|
||||
exec { player, _ ->
|
||||
addItemOrDrop(player, Items.UNHOLY_MOULD_1594)
|
||||
setAttribute(player, attributeReceivedMould, true)
|
||||
}
|
||||
npc("Here is a mould to make a token for our Lord; a mould for the unholy symbol of Zamorak. Return to me when you desire my blessing.")
|
||||
|
||||
label("anothermould")
|
||||
exec { player, _ ->
|
||||
if (inInventory(player, Items.UNHOLY_MOULD_1594)) {
|
||||
loadLabel(player, "hasmould")
|
||||
}
|
||||
else {
|
||||
addItemOrDrop(player, Items.UNHOLY_MOULD_1594)
|
||||
loadLabel(player, "lostmould")
|
||||
}
|
||||
}
|
||||
|
||||
label("hasmould")
|
||||
npc("One you already have, another is not needed. Leave me be.")
|
||||
|
||||
label("lostmould")
|
||||
npc("A lost object is easy to replace. The loss of the affections of our Lord is impossible to forgive.")
|
||||
|
||||
label("blessing")
|
||||
exec { player, _ ->
|
||||
if (inInventory(player, Items.UNPOWERED_SYMBOL_1722)) {
|
||||
loadLabel(player, "canbless")
|
||||
}
|
||||
else loadLabel(player, "cannotbless")
|
||||
}
|
||||
|
||||
label("canbless")
|
||||
npc("I see you have the unholy symbol of our Lord. I will bless it for you.")
|
||||
line("The ghost mutters in a strange voice.", "The unholy symbol throbs with power.")
|
||||
exec { player, _ ->
|
||||
removeItem(player, Items.UNPOWERED_SYMBOL_1722)
|
||||
addItemOrDrop(player, Items.UNHOLY_SYMBOL_1724)
|
||||
}
|
||||
npc("The symbol of our Lord has been blessed with power! My master calls.")
|
||||
|
||||
|
||||
label("cannotbless")
|
||||
npc("No blessing will be given to those who have no symbol of our Lord's love.")
|
||||
|
||||
label("killyou")
|
||||
npc("The might of mortals, to me, is as the dust to the sea.")
|
||||
}
|
||||
}
|
||||
|
|
@ -166,6 +166,18 @@ abstract class Cutscene(val player: Player) {
|
|||
player.dialogueInterpreter.addAction {_,_ -> onContinue.invoke()}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a non-NPC dialogue to the player, which updates the cutscene stage by default when continued
|
||||
* @param message the message to send
|
||||
* @param onContinue (optional) a method that runs when the dialogue is "continued." Increments the cutscene stage by default.
|
||||
*/
|
||||
fun dialogueLinesUpdate(vararg message: String, onContinue: () -> Unit = {incrementStage()})
|
||||
{
|
||||
logCutscene("Sending standard dialogue lines update.")
|
||||
sendDialogueLines(player, *message)
|
||||
player.dialogueInterpreter.addAction {_,_ -> onContinue.invoke()}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a player dialogue, which updates the cutscene stage by default when continued
|
||||
* @param expression the FacialExpression to use
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue