From b005cf1f37b4b728823ccb4127f2d8b8f6d74a96 Mon Sep 17 00:00:00 2001 From: Kevin Barkevich Date: Sun, 2 Jul 2023 23:38:39 -0400 Subject: [PATCH 1/4] Added event/arena quest rotation with the ability for live-server updates and .json files for each quest Removed unneeded default parameter Finalized Jump Four Jaggi, added tentative Rage Match, and added more to the quest formatting system. Added "Flooded Forest Free-For-All" and fixed bug Changed quest rotation system to a .json-based system that's refreshable via the interactive (-i) menu Added bytes for small monster wave transition criteria Added ability to programatically add small monsters Added more programatically-added small monster information Addressed Sepalani comments --- .gitignore | 2 +- dump_quest.py | 3387 +++++++++++++++++++++++ event/Blood Sport.json | 240 ++ event/Flooded Forest Free-For-All.json | 232 ++ event/Grudge Match Bird and Brute.json | 432 +++ event/Grudge Match Brute and Brute.json | 642 +++++ event/Grudge Match Land Lords.json | 764 +++++ event/Grudge Match Royal Ludroth.json | 394 +++ event/Grudge Match The Two Flames.json | 464 ++++ event/Jump Four Jaggi.json | 961 +++++++ event/Jump Fourty-Eight Jaggi.json | 961 +++++++ event/Mercy Mission.json | 264 ++ event/Rage Match.json | 215 ++ event/The Phantom Uragaan.json | 222 ++ event/Where Gods Fear to Tread.json | 205 ++ event/World Eater.json | 880 ++++++ event/[MH3SP] Green Eggs and....json | 353 +++ event/quest_rotation.json | 128 + mh/constants.py | 317 ++- mh/pat.py | 37 +- mh/quest_utils.py | 1343 +++------ mh/time_utils.py | 10 +- 22 files changed, 11289 insertions(+), 1164 deletions(-) create mode 100644 dump_quest.py create mode 100644 event/Blood Sport.json create mode 100644 event/Flooded Forest Free-For-All.json create mode 100644 event/Grudge Match Bird and Brute.json create mode 100644 event/Grudge Match Brute and Brute.json create mode 100644 event/Grudge Match Land Lords.json create mode 100644 event/Grudge Match Royal Ludroth.json create mode 100644 event/Grudge Match The Two Flames.json create mode 100644 event/Jump Four Jaggi.json create mode 100644 event/Jump Fourty-Eight Jaggi.json create mode 100644 event/Mercy Mission.json create mode 100644 event/Rage Match.json create mode 100644 event/The Phantom Uragaan.json create mode 100644 event/Where Gods Fear to Tread.json create mode 100644 event/World Eater.json create mode 100644 event/[MH3SP] Green Eggs and....json create mode 100644 event/quest_rotation.json diff --git a/.gitignore b/.gitignore index 311e8a0..60438cd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ *.dol *.bat *.db +*.dat .idea logs -event diff --git a/dump_quest.py b/dump_quest.py new file mode 100644 index 0000000..b3b0935 --- /dev/null +++ b/dump_quest.py @@ -0,0 +1,3387 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Quest dumper. + +Arena Quest ID List: +EA60 +EA61 +EA62 +EA63 +EA64 +EA65 +EA66 +EA67 +EA68 +EA69 +EA6A +EA6B + +bird and brute bowgun: +rathling gun + barrel, poison stinger frame, light bowgun stock + +sea power bowgun: +rathling gun barrel, rathling gun + frame, rathling gun + stock + +land lords bowgun: +jho barrel, diablos frame, barioth stock + +two flames bowgun: +lagiacrus barrel, lagiacrus frame, barioth stock + +https://web.archive.org/web/20111012085906/ +http://divinewh.im/q/c/Grudge_Match:_Royal_Ludroth + +https://web.archive.org/web/20111012085901/ +http://divinewh.im/q/c/Grudge_Match:_Rathian + +https://web.archive.org/web/20111012090656/ +http://divinewh.im/q/c/Grudge_Match:_Uragaan + +https://web.archive.org/web/20111012090915/ +http://divinewh.im/q/c/Grudge_Match:_Bird_and_Brute +""" + +from mh.quest_utils import ItemsType, Monster, LocationType,\ + QuestRankType, QuestRestrictionType, ResourcesType,\ + StartingPositionType, WaveType +from mh.equipment_utils import Chestpiece, Gauntlets, Faulds,\ + Leggings, Helmet, EquipmentClasses, Greatsword,\ + SnS, Hammer, Longsword, Switchaxe, Lance,\ + BowgunFrame, BowgunStock, BowgunBarrel + + +""" +EVENT QUEST 1: Jump Four Jaggi +Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g +Quest requirements altered to make it possible to win. +""" +QUEST_EVENT_JUMP_FOUR_JAGGI = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61001, + 'name': "Jump Four Jaggi", + 'client': "Guild Subcontractor", + 'description': "Hunt 4 Great Jaggi", + 'details': + "I'm gonna get so fired for\n" + "this... The Great Jaggi some\n" + "hunter brought in just\n" + "escaped. Mind going after\n" + "them? You better hurry,\n" + "though. Bet they've got some\n" + "incredible materials, too.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1400, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.melynx, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 19, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64050219, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x04, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x04, + 'zenny_reward': 4000, + 'hrp_reward': 440, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 3), + (ItemsType.great_jagi_hide, 1, 12), + (ItemsType.jagi_scale, 1, 10), + (ItemsType.screamer, 1, 20), + (ItemsType.kings_frill, 1, 12), + (ItemsType.bone_husk_s, 8, 18), + (ItemsType.great_jagi_head, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.aquaglow_jewel, 1, 1), + (ItemsType.shining_charm, 1, 1), + (ItemsType.armor_sphere, 1, 1), + (ItemsType.armor_sphere_plus, 1, 1) + ], + }, + 'subquest_1': { + 'description': "Hunt 2 Great Jaggi", + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x02, + 'zenny_reward': 4000, + 'hrp_reward': 220, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 1), + (ItemsType.great_jagi_hide, 1, 1), + (ItemsType.jagi_scale, 1, 1), + (ItemsType.screamer, 1, 1), + (ItemsType.kings_frill, 1, 1), + (ItemsType.bone_husk_s, 8, 1), + (ItemsType.great_jagi_head, 1, 1) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 7: The Phantom Uragaan +Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w +""" +QUEST_EVENT_THE_PHANTOM_URAGAAN = { + 'quest_info': { + 'quest_id': 61007, + 'name': "The Phantom Uragaan", + 'client': "Spoiled Princess", + 'description': "Hunt an Uragaan", + 'details': + "Oooh, I just heard they've\n" + "spotted the cutest, tiniest,\n" + "most adorable little Uragaan\n" + "on the Volcano. Hunt me one\n" + "this instant or I will get\n" + "very angry. And if I'm angry,\n" + "Daddy's angry. Now go!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 1, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3000, + 'quest_fee': 850, + 'time_limit': 50, + 'main_monster_1': Monster.uroktor, + 'main_monster_2': Monster.aptonoth, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 15, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x1D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_phantomuragaan.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x13, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 8800, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 8: Blood Sport +Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 +""" +QUEST_EVENT_BLOOD_SPORT = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61008, + 'name': "Blood Sport", + 'client': "Spoiled Princess", + 'description': + "Hunt an Uragaan\n" + "and a Diablos", + 'details': + "Oh, boo! I'm tired of watching\n" + "run-of-the-mill hunts. The\n" + "Diablos and the Uragaan are\n" + "supposed to be the ultimate\n" + "monster duo. I'd love to watch\n" + "them maim some foolish hunter!\n" + "Do put on a good show...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1750, + 'time_limit': 50, + 'main_monster_1': Monster.uragaan, + 'main_monster_2': Monster.diablos, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 17600, + 'hrp_reward': 1760, + 'rewards_row_1': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 8, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 1, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.diablos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 2: Mercy Mission +(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth +from the start. +""" +QUEST_EVENT_MERCY_MISSION = { + 'quest_info': { + 'quest_id': 61002, + 'name': "Mercy Mission", + 'client': "MH3SP Dev Team", + 'description': "Deliver 10 Monster Guts", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': + "Complete the Main Quest\n" + "and both Subquests.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 1, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 1, 0, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 600, + 'quest_fee': 150, + 'time_limit': 15, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.epioth, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 35, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64030303, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_mercymission.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000002, + 'objective_type': ItemsType.monster_guts, + 'objective_num': 0x0A, + 'zenny_reward': 1500, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 8, 14), + (ItemsType.steel_eg, 1, 12) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 12 Red Coral Stones", + 'type': 0x00000002, + 'objective_type': ItemsType.red_coral_stone, + 'objective_num': 0x0C, + 'zenny_reward': 1200, + 'hrp_reward': 55, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 1, 14), + (ItemsType.steel_eg, 1, 12) + ], + }, + 'subquest_2': { + 'description': "Deliver 3 Goldenfish", + 'type': 0x00000002, + 'objective_type': ItemsType.goldenfish, + 'objective_num': 0x03, + 'zenny_reward': 2000, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 18: Flooded Forest Free-For-All +Quest description from https://www.youtube.com/watch?v=mWHonz4dXHk + thanks to "kazuma_6969" +""" +QUEST_EVENT_FF_FREE_FOR_ALL = { + 'quest_info': { + 'quest_id': 61017, + 'name': "Flooded Forest Free-For-All", + 'client': "Argosy Captain", + 'description': "Hunt a Royal L., Lag. & Gobul", + 'details': + "Taihen! Means very bad, yes?\n" + "Flooded Forest overrun by pack\n" + "of leviathans -- Argosy cannot\n" + "get anywhere near area! Big\n" + "problem for trade, yes? Only\n" + "hunters can return fair seas\n" + "to Flooded Forest. Onegai!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 9000, + 'quest_fee': 2550, + 'time_limit': 50, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1F, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1F, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x1F, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 25800, + 'hrp_reward': 2600, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" + +EVENT QUEST 18: Rage Match +Quest description from https://www.youtube.com/watch?v=rbbiLgsAoGU + thanks to "kazuma_6969" +(INCOMPLETE) Second deviljho does not spawn on a delay. +""" +QUEST_EVENT_RAGE_MATCH = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61018, + 'name': "Rage Match", + 'client': "Arena Manager", + 'description': "Hunt 2 Deviljho", + 'details': + "We've all heard of that\n" + "outrageous dragon of rage,\n" + "the Deviljho! Now, we've got\n" + "not one -- but two -- stalking\n" + "the Arena! What hunter has the\n" + "cojones to challenge these\n" + "pernicious predators? Not me.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 13000, + 'quest_fee': 3600, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 244, + 'summon': 0x64010232, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_2': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x5A, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x02, + 'zenny_reward': 36000, + 'hrp_reward': 2880, + 'rewards_row_1': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 20: World Eater +Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 +(INCOMPLETE) Needs invading queropeco +""" +QUEST_EVENT_WORLD_EATER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 247.42,'pos_y': 560.37,'pos_z': -3613.80, + 'rot_x': 0,'rot_y': -119,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 3, + 'pos_x': -474.90,'pos_y': 491.91,'pos_z': -3857.25, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 3, + 'pos_x': 897.01,'pos_y': 418.60,'pos_z': -4931.83, + 'rot_x': 0,'rot_y': -284,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': 219.95,'pos_y': 402.97,'pos_z': -4449.25, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 3, + 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, + 'rot_x': 0,'rot_y': 455,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.aptonoth,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 2567.38,'pos_y': -4.58,'pos_z': -1280.44, + 'rot_x': 0,'rot_y': 352,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 2119.14,'pos_y': -14.21,'pos_z': -787.00, + 'rot_x': 0,'rot_y': 335,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': 39.65,'pos_y': 2.00,'pos_z': 2631.32, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -538.14,'pos_y': 2.00,'pos_z': 2165.99, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 360.98,'pos_y': 2.00,'pos_z': 820.71, + 'rot_x': 0,'rot_y': -187,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3071.35, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 3, + 'pos_x': 1059.13,'pos_y': 5.78,'pos_z': -3228.47, + 'rot_x': 0,'rot_y': -261,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': 390.83,'pos_y': 20.44,'pos_z': -746.07, + 'rot_x': 0,'rot_y': -176,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -482.31,'pos_y': 16.39,'pos_z': 5.01, + 'rot_x': 0,'rot_y': 250,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 5, + 'pos_x': -1846.87,'pos_y': -263.00,'pos_z': 931.19, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 3, + 'pos_x': -3160.63,'pos_y': -206.32,'pos_z': -355.73, + 'rot_x': 0,'rot_y': 307,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -1949.45,'pos_y': -276.13,'pos_z': 1228.73, + 'rot_x': 0,'rot_y': 216,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1552.64,'pos_y': -186.42,'pos_z': 1504.30, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1352.11,'pos_y': -174.80,'pos_z': 1441.92, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -653.75,'pos_y': 306.58,'pos_z': 2295.24, + 'rot_x': 0,'rot_y': 221,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 4, + 'pos_x': -615.28,'pos_y': 96.58,'pos_z': 2086.81, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61020, + 'name': "World Eater", + 'client': "Guildmaster", + 'description': "Hunt a Deviljho", + 'details': + "Emergency! A huge Deviljho has\n" + "appeared. It's twice as big as\n" + "a normal one and it's eating\n" + "everything in sight! Go get\n" + "it! And now, a haiku: A huge\n" + "Deviljho/with no food in its\n" + "stomach/eats the whole island.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1800, + 'time_limit': 50, + 'main_monster_1': Monster.jaggi, + 'main_monster_2': Monster.jaggia, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 31, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0034, + 'summon': 0x64010234, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0xC8, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 18000, + 'hrp_reward': 1800, + 'rewards_row_1': [ + (ItemsType.timeworn_charm, 1, 33), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.deviljho_scalp, 1, 8), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.hvy_armor_sphere, 1, 11), + (ItemsType.shining_charm, 1, 19), + (ItemsType.deviljho_fang, 1, 8) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_scalp, 1, 20), + (ItemsType.timeworn_charm, 1, 34), + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.shining_charm, 1, 11), + (ItemsType.hvy_armor_sphere, 1, 9) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 20: Where Gods Fear To Tread +Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, + thanks to "soulmizute, emperor of the abyss#5094" + and "El Matiah#8904" +""" +QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61021, + 'name': "Where Gods Fear to Tread", + 'client': "Scarlet Mystery Man", + 'description': "Slay the Alatreon", + 'details': + "I've been waiting, hunter. Now\n" + "comes your final challenge:\n" + "Alatreon, a dragon of darkness\n" + "and light. Can mere mortals\n" + "fell an elder dragon feared\n" + "even by the gods? Don't even\n" + "bother saying your prayers...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 0, 0, 1, 0) + ), + 'penalty_per_cart': 14000, + 'quest_fee': 4200, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_SACRED_LAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.shrine, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.alatreon, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0x7D, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.alatreon, + 'objective_num': 0x01, + 'zenny_reward': 42000, + 'hrp_reward': 4200, + 'rewards_row_1': [ + (ItemsType.alatreon_scute, 1, 40), + (ItemsType.brkn_skypiercer, 1, 30), + (ItemsType.alatreon_talon, 1, 10), + (ItemsType.alatreon_plate, 1, 10), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.alatreon_plate, 1, 11), + (ItemsType.brkn_skypiercer, 1, 34), + (ItemsType.alatreon_talon, 1, 39), + (ItemsType.elderdragonblood, 1, 6), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000005, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +QUEST_EVENT_GREEN_EGGS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61050, + 'name': "[MH3SP] Green Eggs and...", + 'client': "Ze SpyRo", + 'description': + "Hunt a Gigginox\n" + "and an Agnaktor", + 'details': + "Why do we live, only to suffer?\n" + "Only slayers of pig meat know\n" + "these things. Take care, Hunter,\n" + "for those who look to antidote\n" + "herbs may find their breath\n" + "stolen away.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 2400, + 'quest_fee': 200, + 'time_limit': 50, + 'main_monster_1': Monster.gigginox, + 'main_monster_2': Monster.agnaktor, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gigginox, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gigginox, + 'objective_num': 0x01, + 'zenny_reward': 7000, + 'hrp_reward': 950, + 'rewards_row_1': [ + (ItemsType.flabby_hide, 1, 18), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 15), + (ItemsType.agnaktor_shell, 1, 10), + (ItemsType.agnaktor_scale, 1, 16), + (ItemsType.agnaktor_hide, 1, 13), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.flabby_hide, 1, 13), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 10), + (ItemsType.agnaktor_shell, 1, 9), + (ItemsType.agnaktor_scale, 1, 10), + (ItemsType.agnaktor_hide, 1, 10), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5), + (ItemsType.commendation, 1, 20) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST ???: Jump Fourty-Eight Jaggi +Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g +Quest requirements altered to make it possible to win. +""" +QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61003, + 'name': "Jump Fourty-Eight Jaggi", + 'client': "Guild Subcontractor", + 'description': "Hunt 48 Great Jaggi", + 'details': + "I'm gonna get so fired for\n" + "this... The Great Jaggi some\n" + "hunter brought in just\n" + "escaped. Mind going after\n" + "them? You better hurry,\n" + "though. Bet they've got some\n" + "incredible materials, too.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1400, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.melynx, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 19, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64050219, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x30, + 'zenny_reward': 15000, + 'hrp_reward': 750, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 2, 3), + (ItemsType.great_jagi_hide, 2, 12), + (ItemsType.kings_frill, 1, 10), + (ItemsType.rustshard, 1, 20), + (ItemsType.commendation, 1, 12), + (ItemsType.voucher, 2, 18), + (ItemsType.great_jagi_head, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.aquaglow_jewel, 1, 1), + (ItemsType.shining_charm, 1, 1), + (ItemsType.armor_sphere, 1, 1), + (ItemsType.armor_sphere_plus, 1, 1) + ], + }, + 'subquest_1': { + 'description': "Hunt 24 Great Jaggi", + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x18, + 'zenny_reward': 8000, + 'hrp_reward': 255, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 1), + (ItemsType.great_jagi_hide, 1, 1), + (ItemsType.jagi_scale, 1, 1), + (ItemsType.screamer, 1, 1), + (ItemsType.kings_frill, 1, 1), + (ItemsType.bone_husk_s, 8, 1), + (ItemsType.great_jagi_head, 1, 1) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +# ---------- ARENA QUESTS ---------- + +""" +00 00 00 28 +00 00 00 FF +FF +01 +01 +03 +00 00 00 00 +BF 00 00 00 +C5 9D 74 00 +C5 3E 2B 33 +00 00 00 00 +FF FF A4 00 +00 00 00 00 +FF 00 00 00 +00 00 00 00 +""" + +GRUDGE_MATCH_ROYAL_LUDROTH = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA61, + 'name': "Grudge Match: Royal Ludroth", + 'client': "Announcer/Receptionist", + 'description': "Slay a Royal Ludroth", + 'details': + "Ahoy, adrenaline junkies!\n" + "Next up is the regally maned\n" + "Royal Ludroth! Will the pressure\n" + "of facing this sea dragon on\n" + "its home surf with a strict\n" + "time limit leave the hunters\n" + "all washed up?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.r_ludroth_coin, 1, 24), + (ItemsType.r_ludroth_coin, 2, 8), + (ItemsType.voucher, 1, 10), + (ItemsType.armor_sphere, 1, 24), + (ItemsType.steel_eg, 1, 18), + (ItemsType.pinnacle_coin, 1, 16) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.HydraKnife), + None, None, + Helmet.QurupecoHelm, Chestpiece.QurupecoMail, + Gauntlets.BlastBracelet, Faulds.SteelFaulds, + Leggings.IngotGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), + None, None, + Helmet.DrawEarring, Chestpiece.SteelMail, + Gauntlets.GobulVambraces, Faulds.GobulFaulds, + Leggings.HuntersGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.BoneBludgeon), + None, None, + Helmet.BarrothHelm, Chestpiece.BarrothMail, + Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, + Leggings.BarrothGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AlloyCap, Chestpiece.AlloyVest, + Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, + Leggings.PiscineLeggings, + ((ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), + (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), + (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) + ) + ) +} + + +GRUDGE_MATCH_BIRD_BRUTE = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA66, + 'name': "Grudge Match: Bird and Brute", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Qurupeco\n" + "and a Barroth", + 'details': + "Double trouble! It's the\n" + "dirty-bird Qurupeco and the\n" + "land dragon Barroth -- heaven\n" + "and earth, laughter and tears,\n" + "in an ultimate contest! When\n" + "the dust clears, will it\n" + "reveal victory? Or tragedy?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.qurupeco, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.qurupeco, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.qurupeco_coin, 1, 16), + (ItemsType.barroth_coin, 1, 20), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 15) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), + None, None, + Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, + Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, + Leggings.GigginoxGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), + None, None, + Helmet.DrawEarring, Chestpiece.JaggiMailPlus, + Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, + Leggings.BoneGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.Undertaker), + None, None, + Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.AlloyGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, + Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, + Leggings.RathalosLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.cleanser, 5), + (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), + (ItemsType.sonic_bomb, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), + (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), + (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) + ) + ) +} + + +GRUDGE_MATCH_TWO_FLAMES = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA68, + 'name': "Grudge Match: The Two Flames", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Rathalos\n" + "and a Rathian", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.rathian, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.rathalos_coin, 1, 10), + (ItemsType.rathian_coin, 1, 24), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 17) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.IcicleSpikePlus), + None, None, + Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, + Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, + Leggings.QurupecoGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.might_pill, 2), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), + (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.Thunderclap), + None, None, + Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.VangisGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.SpiralLancePlus), + None, None, + Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, + Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, + Leggings.IngotGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), + (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), + Helmet.EarringofFate, Chestpiece.UragaanVestPlus, + Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, + Leggings.UragaanLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), + (ItemsType.thunder_s, 60)) + ) + ) +} + + +GRUDGE_MATCH_LAND_LORDS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA6B, + 'name': "Grudge Match: Land Lords", + 'client': "Announcer/Receptionist", + 'description': "Slay all 3 monsters", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 1150, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x17, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.deviljho, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x12, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00020101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 3000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.deviljho_coin, 1, 10), + (ItemsType.barroth_coin, 1, 10), + (ItemsType.uragaan_coin, 1, 15), + (ItemsType.voucher, 1, 14), + (ItemsType.adv_armor_sphere, 1, 10), + (ItemsType.hrd_armor_sphere, 1, 7), + (ItemsType.silver_eg, 1, 10), + (ItemsType.hunter_king_coin, 1, 24) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.PlagueTabar), + None, None, + Helmet.UragaanHelmPlus, Chestpiece.UragaanMailPlus, + Gauntlets.UragaanVambracesPlus, Faulds.UragaanFauldsPlus, + Leggings.UragaanGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.lifepowder, 3), (ItemsType.paralysis_knife, 5), + (ItemsType.sleep_knife, 5), (ItemsType.poison_knife, 5), + (ItemsType.tinged_meat, 5), (ItemsType.druged_meat, 5), + (ItemsType.poisoned_meat, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10), + (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), + (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.Switchaxe, Switchaxe.GreatDemonbindG), + None, None, + Helmet.RathalosHelmPlus, Chestpiece.RathalosMailPlus, + Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, + Leggings.RathalosGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 5), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), + (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), + (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.ReaverCalamity), + None, None, + Helmet.StimulusEarring, Chestpiece.VangisMail, + Gauntlets.DoberVambraces, Faulds.DoberCoil, + Leggings.DamascusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 5), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 5), + (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), + (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), + (ItemsType.armorcharm, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.Diablazooka), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.DevilsGrin), + (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), + Helmet.BarrageEarring, Chestpiece.DamascusVest, + Gauntlets.DamascusGuards, Faulds.DamascusCoat, + Leggings.DamascusLeggings, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.energy_drink, 5), (ItemsType.lifepowder, 3), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), + (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), + (ItemsType.armorcharm, 1), (ItemsType.powertalon, 1), + (ItemsType.armortalon, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv3, 40), + (ItemsType.crag_s_lv2, 9), (ItemsType.crag_s_lv3, 9), + (ItemsType.wyvernfire_lv1, 10), (ItemsType.water_s, 60), + (ItemsType.sleep_s_lv2, 8), (ItemsType.dragon_s, 20), + (ItemsType.demon_s_ii, 5)) + ) + ) +} + + +if __name__ == "__main__": + import json + + QUESTS = [ + QUEST_EVENT_JUMP_FOUR_JAGGI, + QUEST_EVENT_THE_PHANTOM_URAGAAN, + QUEST_EVENT_BLOOD_SPORT, + QUEST_EVENT_MERCY_MISSION, + QUEST_EVENT_FF_FREE_FOR_ALL, + QUEST_EVENT_RAGE_MATCH, + QUEST_EVENT_WORLD_EATER, + QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD, + QUEST_EVENT_GREEN_EGGS, + QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI, + GRUDGE_MATCH_ROYAL_LUDROTH, + GRUDGE_MATCH_BIRD_BRUTE, + GRUDGE_MATCH_TWO_FLAMES, + GRUDGE_MATCH_LAND_LORDS, + ] + + for quest in QUESTS: + name = quest['quest_info']['name'].replace(':', '') + with open('event/{}.json'.format(name), "w") as outfile: + json.dump(quest, outfile, indent=4) + + print("done") diff --git a/event/Blood Sport.json b/event/Blood Sport.json new file mode 100644 index 0000000..bea5c12 --- /dev/null +++ b/event/Blood Sport.json @@ -0,0 +1,240 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1760, + "rewards_row_1": [ + [ + 479, + 1, + 1 + ], + [ + 457, + 1, + 14 + ], + [ + 410, + 1, + 10 + ], + [ + 296, + 1, + 20 + ], + [ + 386, + 1, + 12 + ], + [ + 455, + 8, + 9 + ], + [ + 412, + 1, + 9 + ], + [ + 592, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 479, + 1, + 1 + ], + [ + 457, + 1, + 14 + ], + [ + 410, + 1, + 10 + ], + [ + 296, + 1, + 20 + ], + [ + 386, + 1, + 12 + ], + [ + 455, + 1, + 9 + ], + [ + 412, + 1, + 9 + ], + [ + 592, + 1, + 25 + ] + ], + "objective_type": 9, + "zenny_reward": 17600, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 6, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 6000, + "resources": 0, + "details": "Oh, boo! I'm tired of watching\nrun-of-the-mill hunts. The\nDiablos and the Uragaan are\nsupposed to be the ultimate\nmonster duo. I'd love to watch\nthem maim some foolish hunter!\nDo put on a good show...", + "description": "Hunt an Uragaan\nand a Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 1750, + "quest_id": 61008, + "name": "Blood Sport", + "main_monster_2": 6, + "main_monster_1": 9, + "supply_set_number": 43, + "summon": 0, + "client": "Spoiled Princess", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 1, + "level": 29, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 1, + "level": 29, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Flooded Forest Free-For-All.json b/event/Flooded Forest Free-For-All.json new file mode 100644 index 0000000..decf8d0 --- /dev/null +++ b/event/Flooded Forest Free-For-All.json @@ -0,0 +1,232 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 18, + "zenny_reward": 0, + "type": 1 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 2600, + "rewards_row_1": [ + [ + 445, + 1, + 1 + ], + [ + 446, + 1, + 5 + ], + [ + 490, + 1, + 14 + ], + [ + 495, + 1, + 20 + ], + [ + 498, + 1, + 7 + ], + [ + 499, + 1, + 10 + ], + [ + 500, + 1, + 8 + ], + [ + 441, + 1, + 10 + ], + [ + 186, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 1 + ], + [ + 446, + 1, + 5 + ], + [ + 490, + 1, + 14 + ], + [ + 495, + 1, + 20 + ], + [ + 498, + 1, + 7 + ], + [ + 499, + 1, + 10 + ], + [ + 500, + 1, + 8 + ], + [ + 441, + 1, + 10 + ], + [ + 186, + 1, + 25 + ] + ], + "objective_type": 16, + "zenny_reward": 25800, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 15, + "zenny_reward": 0, + "type": 1 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 64, + "wave_2_transition_type": 0, + "location": 3, + "penalty_per_cart": 9000, + "resources": 1, + "details": "Taihen! Means very bad, yes?\nFlooded Forest overrun by pack\nof leviathans -- Argosy cannot\nget anywhere near area! Big\nproblem for trade, yes? Only\nhunters can return fair seas\nto Flooded Forest. Onegai!", + "description": "Hunt a Royal L., Lag. & Gobul", + "smallmonster_data_file": "sm_ff_free_for_all.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2550, + "quest_id": 61017, + "name": "Flooded Forest Free-For-All", + "main_monster_2": 34, + "main_monster_1": 17, + "supply_set_number": 43, + "summon": 0, + "client": "Argosy Captain", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 31, + "boss_id": 1, + "type": 15, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 3, + "hp_spread": 0, + "level": 31, + "boss_id": 2, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 31, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Bird and Brute.json b/event/Grudge Match Bird and Brute.json new file mode 100644 index 0000000..a02f2c5 --- /dev/null +++ b/event/Grudge Match Bird and Brute.json @@ -0,0 +1,432 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 4 + ], + null, + null, + 89, + 8, + 75, + 95, + 35, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 360, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 7, + 35 + ], + null, + null, + 131, + 71, + 66, + 72, + 67, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 66 + ], + null, + null, + 43, + 110, + 74, + 82, + 9, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 9 + ], + [ + 12, + 10 + ], + [ + 13, + 1 + ], + 105, + 111, + 104, + 110, + 102, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 50, + 1 + ], + [ + 7, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 66, + 5 + ], + [ + 63, + 9 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Double trouble! It's the\ndirty-bird Qurupeco and the\nland dragon Barroth -- heaven\nand earth, laughter and tears,\nin an ultimate contest! When\nthe dust clears, will it\nreveal victory? Or tragedy?", + "description": "Slay a Qurupeco\nand a Barroth", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60006, + "name": "Grudge Match: Bird and Brute", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 16 + ], + [ + 608, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 3, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 8, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 1, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 3, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Brute and Brute.json b/event/Grudge Match Brute and Brute.json new file mode 100644 index 0000000..edecd82 --- /dev/null +++ b/event/Grudge Match Brute and Brute.json @@ -0,0 +1,642 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 3, + "room": 1, + "quantity": -1, + "pos_x": -2404.5, + "pos_y": -5038.5, + "pos_z": -3542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1942.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1342.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1842.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1342.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1704.5, + "pos_y": -5038.5, + "pos_z": -1042.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -2142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1704.5, + "pos_y": -5038.5, + "pos_z": -2542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -2404.5, + "pos_y": -5038.5, + "pos_z": -2742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -3142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1104.5, + "pos_y": -5038.5, + "pos_z": -3542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -2904.5, + "pos_y": -5038.5, + "pos_z": -3742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 60006, + "name": "Grudge Match: Brute and Brute", + "client": "Announcer/Receptionist", + "description": "Slay a Barroth\nand a Barroth", + "details": "Double trouble! It's the\nland dragon Barroth and the\nland dragon Barroth -- earth\nand earth, laughter and tears,\nin an ultimate contest! When\nthe dust clears, will it\nreveal victory? Or tragedy?", + "success_message": "Complete the Main Quest.", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "penalty_per_cart": 1100, + "quest_fee": 0, + "time_limit": 50, + "main_monster_1": 0, + "main_monster_2": 0, + "location": 8, + "quest_rank": 4, + "hrp_restriction": 9, + "resources": 2, + "supply_set_number": 0, + "starting_position": 0, + "general_enemy_level": 23, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 23, + "size": 100, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 7, + "starting_area": 0, + "boss_id": 1, + "spawn_count": 1, + "level": 23, + "size": 100, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 257, + "objective_type": 8, + "objective_num": 1, + "zenny_reward": 1000, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 16 + ], + [ + 608, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [] + }, + "subquest_1": { + "description": "None", + "type": 257, + "objective_type": 8, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "arena_equipment": [ + [ + [ + 15, + 4 + ], + null, + null, + 89, + 8, + 75, + 95, + 35, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 360, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 7, + 35 + ], + null, + null, + 131, + 71, + 66, + 72, + 67, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 66 + ], + null, + null, + 43, + 110, + 74, + 82, + 9, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 9 + ], + [ + 12, + 10 + ], + [ + 13, + 1 + ], + 105, + 111, + 104, + 110, + 102, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 50, + 1 + ], + [ + 7, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 66, + 5 + ], + [ + 63, + 9 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ] + ] + ] + ] +} \ No newline at end of file diff --git a/event/Grudge Match Land Lords.json b/event/Grudge Match Land Lords.json new file mode 100644 index 0000000..56620a5 --- /dev/null +++ b/event/Grudge Match Land Lords.json @@ -0,0 +1,764 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 39 + ], + null, + null, + 102, + 108, + 101, + 107, + 105, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 15, + 45 + ], + null, + null, + 96, + 102, + 95, + 103, + 101, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 347, + 5 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 1 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 14, + 38 + ], + null, + null, + 139, + 112, + 91, + 99, + 111, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 375, + 5 + ], + [ + 360, + 5 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 10 + ], + 130, + 115, + 108, + 114, + 112, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 582, + 2 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 58, + 40 + ], + [ + 63, + 9 + ], + [ + 64, + 9 + ], + [ + 92, + 10 + ], + [ + 69, + 60 + ], + [ + 80, + 8 + ], + [ + 72, + 20 + ], + [ + 84, + 5 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 1150, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay all 3 monsters", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60011, + "name": "Grudge Match: Land Lords", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 7, + "zenny_reward": 0, + "type": 131329 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 589, + 1, + 10 + ], + [ + 608, + 1, + 10 + ], + [ + 612, + 1, + 15 + ], + [ + 431, + 1, + 14 + ], + [ + 444, + 1, + 10 + ], + [ + 445, + 1, + 7 + ], + [ + 570, + 1, + 10 + ], + [ + 587, + 1, + 24 + ] + ], + "rewards_row_2": [], + "objective_type": 8, + "zenny_reward": 3000, + "type": 131329 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 9, + "zenny_reward": 0, + "type": 131329 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 1, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 18, + "boss_id": 2, + "type": 7, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Royal Ludroth.json b/event/Grudge Match Royal Ludroth.json new file mode 100644 index 0000000..4abd354 --- /dev/null +++ b/event/Grudge Match Royal Ludroth.json @@ -0,0 +1,394 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 13 + ], + null, + null, + 14, + 16, + 123, + 21, + 37, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ] + ], + [] + ], + [ + [ + 7, + 13 + ], + null, + null, + 131, + 20, + 22, + 26, + 5, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 20, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 9, + 53 + ], + null, + null, + 20, + 23, + 7, + 24, + 23, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 11, + 5 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 4 + ], + [ + 12, + 6 + ], + [ + 13, + 1 + ], + 9, + 9, + 37, + 10, + 2, + [ + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 52, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 57, + 50 + ], + [ + 65, + 5 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Ahoy, adrenaline junkies!\nNext up is the regally maned\nRoyal Ludroth! Will the pressure\nof facing this sea dragon on\nits home surf with a strict\ntime limit leave the hunters\nall washed up?", + "description": "Slay a Royal Ludroth", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60001, + "name": "Grudge Match: Royal Ludroth", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 609, + 1, + 24 + ], + [ + 609, + 2, + 8 + ], + [ + 431, + 1, + 10 + ], + [ + 327, + 1, + 24 + ], + [ + 569, + 1, + 18 + ], + [ + 615, + 1, + 16 + ] + ], + "rewards_row_2": [], + "objective_type": 16, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match The Two Flames.json b/event/Grudge Match The Two Flames.json new file mode 100644 index 0000000..569eeb3 --- /dev/null +++ b/event/Grudge Match The Two Flames.json @@ -0,0 +1,464 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 9 + ], + null, + null, + 72, + 77, + 70, + 78, + 77, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 20, + 2 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 14, + 1 + ], + null, + null, + 132, + 69, + 74, + 82, + 109, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 55 + ], + null, + null, + 136, + 96, + 103, + 76, + 95, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 26, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 6 + ], + [ + 12, + 8 + ], + [ + 13, + 10 + ], + 140, + 109, + 123, + 108, + 106, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 3, + 1 + ], + [ + 582, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 58, + 40 + ], + [ + 84, + 5 + ], + [ + 70, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Rathalos\nand a Rathian", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60008, + "name": "Grudge Match: The Two Flames", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 584, + 1, + 10 + ], + [ + 610, + 1, + 24 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 17 + ] + ], + "rewards_row_2": [], + "objective_type": 2, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 1, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 1, + "type": 1, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Jump Four Jaggi.json b/event/Jump Four Jaggi.json new file mode 100644 index 0000000..191a8b1 --- /dev/null +++ b/event/Jump Four Jaggi.json @@ -0,0 +1,961 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 4, + "hrp_reward": 440, + "rewards_row_1": [ + [ + 307, + 1, + 3 + ], + [ + 308, + 1, + 12 + ], + [ + 306, + 1, + 10 + ], + [ + 309, + 1, + 20 + ], + [ + 420, + 1, + 12 + ], + [ + 342, + 8, + 18 + ], + [ + 41, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 447, + 1, + 1 + ], + [ + 441, + 1, + 1 + ], + [ + 327, + 1, + 1 + ], + [ + 328, + 1, + 1 + ] + ], + "objective_type": 12, + "zenny_reward": 4000, + "type": 1 + }, + "subquest_1": { + "objective_num": 2, + "hrp_reward": 220, + "rewards_row_1": [ + [ + 307, + 1, + 1 + ], + [ + 308, + 1, + 1 + ], + [ + 306, + 1, + 1 + ], + [ + 309, + 1, + 1 + ], + [ + 420, + 1, + 1 + ], + [ + 342, + 8, + 1 + ], + [ + 41, + 1, + 1 + ] + ], + "description": "Hunt 2 Great Jaggi", + "objective_type": 12, + "zenny_reward": 4000, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 1400, + "resources": 0, + "details": "I'm gonna get so fired for\nthis... The Great Jaggi some\nhunter brought in just\nescaped. Mind going after\nthem? You better hurry,\nthough. Bet they've got some\nincredible materials, too.", + "description": "Hunt 4 Great Jaggi", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 400, + "quest_id": 61001, + "name": "Jump Four Jaggi", + "main_monster_2": 31, + "main_monster_1": 36, + "supply_set_number": 19, + "summon": 1678049817, + "client": "Guild Subcontractor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 4, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Jump Fourty-Eight Jaggi.json b/event/Jump Fourty-Eight Jaggi.json new file mode 100644 index 0000000..9e56886 --- /dev/null +++ b/event/Jump Fourty-Eight Jaggi.json @@ -0,0 +1,961 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 48, + "hrp_reward": 750, + "rewards_row_1": [ + [ + 307, + 2, + 3 + ], + [ + 308, + 2, + 12 + ], + [ + 420, + 1, + 10 + ], + [ + 110, + 1, + 20 + ], + [ + 565, + 1, + 12 + ], + [ + 431, + 2, + 18 + ], + [ + 41, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 447, + 1, + 1 + ], + [ + 441, + 1, + 1 + ], + [ + 327, + 1, + 1 + ], + [ + 328, + 1, + 1 + ] + ], + "objective_type": 12, + "zenny_reward": 15000, + "type": 1 + }, + "subquest_1": { + "objective_num": 24, + "hrp_reward": 255, + "rewards_row_1": [ + [ + 307, + 1, + 1 + ], + [ + 308, + 1, + 1 + ], + [ + 306, + 1, + 1 + ], + [ + 309, + 1, + 1 + ], + [ + 420, + 1, + 1 + ], + [ + 342, + 8, + 1 + ], + [ + 41, + 1, + 1 + ] + ], + "description": "Hunt 24 Great Jaggi", + "objective_type": 12, + "zenny_reward": 8000, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 1400, + "resources": 0, + "details": "I'm gonna get so fired for\nthis... The Great Jaggi some\nhunter brought in just\nescaped. Mind going after\nthem? You better hurry,\nthough. Bet they've got some\nincredible materials, too.", + "description": "Hunt 48 Great Jaggi", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 400, + "quest_id": 61003, + "name": "Jump Fourty-Eight Jaggi", + "main_monster_2": 31, + "main_monster_1": 36, + "supply_set_number": 19, + "summon": 1678049817, + "client": "Guild Subcontractor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Mercy Mission.json b/event/Mercy Mission.json new file mode 100644 index 0000000..ffe1c74 --- /dev/null +++ b/event/Mercy Mission.json @@ -0,0 +1,264 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 3, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ], + "description": "Deliver 3 Goldenfish", + "objective_type": 217, + "zenny_reward": 2000, + "type": 2 + }, + "main_quest": { + "objective_num": 10, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 8 + ], + [ + 149, + 1, + 20 + ], + [ + 141, + 2, + 20 + ], + [ + 327, + 1, + 18 + ], + [ + 216, + 1, + 8 + ], + [ + 101, + 8, + 14 + ], + [ + 569, + 1, + 12 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ], + "objective_type": 429, + "zenny_reward": 1500, + "type": 2 + }, + "subquest_1": { + "objective_num": 12, + "hrp_reward": 55, + "rewards_row_1": [ + [ + 440, + 1, + 8 + ], + [ + 149, + 1, + 20 + ], + [ + 141, + 2, + 20 + ], + [ + 327, + 1, + 18 + ], + [ + 216, + 1, + 8 + ], + [ + 101, + 1, + 14 + ], + [ + 569, + 1, + 12 + ] + ], + "description": "Deliver 12 Red Coral Stones", + "objective_type": 430, + "zenny_reward": 1200, + "type": 2 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 15, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 1, + "penalty_per_cart": 600, + "resources": 0, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Deliver 10 Monster Guts", + "smallmonster_data_file": "sm_mercymission.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 150, + "quest_id": 61002, + "name": "Mercy Mission", + "main_monster_2": 23, + "main_monster_1": 17, + "supply_set_number": 35, + "summon": 1677918979, + "client": "MH3SP Dev Team", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest\nand both Subquests." + }, + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 1, + "level": 23, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Rage Match.json b/event/Rage Match.json new file mode 100644 index 0000000..f44b6a0 --- /dev/null +++ b/event/Rage Match.json @@ -0,0 +1,215 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 2880, + "rewards_row_1": [ + [ + 486, + 1, + 6 + ], + [ + 485, + 1, + 13 + ], + [ + 484, + 1, + 26 + ], + [ + 483, + 1, + 20 + ], + [ + 441, + 1, + 6 + ], + [ + 487, + 1, + 4 + ], + [ + 185, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 486, + 1, + 6 + ], + [ + 485, + 1, + 13 + ], + [ + 484, + 1, + 26 + ], + [ + 483, + 1, + 20 + ], + [ + 441, + 1, + 6 + ], + [ + 487, + 1, + 4 + ], + [ + 185, + 1, + 25 + ] + ], + "objective_type": 7, + "zenny_reward": 36000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 244, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 13000, + "resources": 1, + "details": "We've all heard of that\noutrageous dragon of rage,\nthe Deviljho! Now, we've got\nnot one -- but two -- stalking\nthe Arena! What hunter has the\ncojones to challenge these\npernicious predators? Not me.", + "description": "Hunt 2 Deviljho", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 3600, + "quest_id": 61018, + "name": "Rage Match", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 1677787698, + "client": "Arena Manager", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 10, + "hp_spread": 0, + "level": 60, + "boss_id": 2, + "type": 7, + "starting_area": 1, + "spawn_count": 1, + "size": 90 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 10, + "hp_spread": 0, + "level": 60, + "boss_id": 1, + "type": 7, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/The Phantom Uragaan.json b/event/The Phantom Uragaan.json new file mode 100644 index 0000000..14c2e5b --- /dev/null +++ b/event/The Phantom Uragaan.json @@ -0,0 +1,222 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 440, + 1, + 1 + ], + [ + 410, + 1, + 16 + ], + [ + 479, + 1, + 20 + ], + [ + 412, + 1, + 10 + ], + [ + 155, + 1, + 10 + ], + [ + 343, + 15, + 13 + ], + [ + 441, + 1, + 5 + ], + [ + 110, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 410, + 1, + 16 + ], + [ + 479, + 1, + 20 + ], + [ + 412, + 1, + 10 + ], + [ + 155, + 1, + 10 + ], + [ + 343, + 15, + 13 + ], + [ + 441, + 1, + 5 + ], + [ + 110, + 1, + 25 + ] + ], + "objective_type": 9, + "zenny_reward": 8800, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 5, + "penalty_per_cart": 3000, + "resources": 0, + "details": "Oooh, I just heard they've\nspotted the cutest, tiniest,\nmost adorable little Uragaan\non the Volcano. Hunt me one\nthis instant or I will get\nvery angry. And if I'm angry,\nDaddy's angry. Now go!", + "description": "Hunt an Uragaan", + "smallmonster_data_file": "sm_phantomuragaan.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 850, + "quest_id": 61007, + "name": "The Phantom Uragaan", + "main_monster_2": 27, + "main_monster_1": 21, + "supply_set_number": 15, + "summon": 0, + "client": "Spoiled Princess", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 29, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 19 + } + } +} \ No newline at end of file diff --git a/event/Where Gods Fear to Tread.json b/event/Where Gods Fear to Tread.json new file mode 100644 index 0000000..aabbdf7 --- /dev/null +++ b/event/Where Gods Fear to Tread.json @@ -0,0 +1,205 @@ +{ + "unknown": { + "unk_12": 5, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 4200, + "rewards_row_1": [ + [ + 433, + 1, + 40 + ], + [ + 510, + 1, + 30 + ], + [ + 435, + 1, + 10 + ], + [ + 434, + 1, + 10 + ], + [ + 437, + 1, + 5 + ], + [ + 436, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 434, + 1, + 11 + ], + [ + 510, + 1, + 34 + ], + [ + 435, + 1, + 39 + ], + [ + 466, + 1, + 6 + ], + [ + 437, + 1, + 5 + ], + [ + 436, + 1, + 5 + ] + ], + "objective_type": 24, + "zenny_reward": 42000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 2, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 64, + "wave_2_transition_type": 0, + "location": 11, + "penalty_per_cart": 14000, + "resources": 1, + "details": "I've been waiting, hunter. Now\ncomes your final challenge:\nAlatreon, a dragon of darkness\nand light. Can mere mortals\nfell an elder dragon feared\neven by the gods? Don't even\nbother saying your prayers...", + "description": "Slay the Alatreon", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 4200, + "quest_id": 61021, + "name": "Where Gods Fear to Tread", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Scarlet Mystery Man", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 64, + "boss_id": 0, + "type": 24, + "starting_area": 0, + "spawn_count": 1, + "size": 125 + } + } +} \ No newline at end of file diff --git a/event/World Eater.json b/event/World Eater.json new file mode 100644 index 0000000..09a2da9 --- /dev/null +++ b/event/World Eater.json @@ -0,0 +1,880 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1800, + "rewards_row_1": [ + [ + 442, + 1, + 33 + ], + [ + 487, + 1, + 4 + ], + [ + 488, + 1, + 8 + ], + [ + 483, + 1, + 17 + ], + [ + 446, + 1, + 11 + ], + [ + 441, + 1, + 19 + ], + [ + 486, + 1, + 8 + ] + ], + "rewards_row_2": [ + [ + 488, + 1, + 20 + ], + [ + 442, + 1, + 34 + ], + [ + 486, + 1, + 6 + ], + [ + 483, + 1, + 17 + ], + [ + 487, + 1, + 3 + ], + [ + 441, + 1, + 11 + ], + [ + 446, + 1, + 9 + ] + ], + "objective_type": 7, + "zenny_reward": 18000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -3613.8, + "pos_x": 247.42, + "pos_y": 560.37, + "room": 1, + "rot_z": 0, + "rot_y": -119, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3857.25, + "pos_x": -474.9, + "pos_y": 491.91, + "room": 1, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -4931.83, + "pos_x": 897.01, + "pos_y": 418.6, + "room": 1, + "rot_z": 0, + "rot_y": -284, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4449.25, + "pos_x": 219.95, + "pos_y": 402.97, + "room": 1, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 34, + "quantity": 2 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 117.64, + "pos_x": -6654.1, + "pos_y": 23.12, + "room": 2, + "rot_z": 0, + "rot_y": 455, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": -1280.44, + "pos_x": 2567.38, + "pos_y": -4.58, + "room": 3, + "rot_z": 0, + "rot_y": 352, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -787.0, + "pos_x": 2119.14, + "pos_y": -14.21, + "room": 3, + "rot_z": 0, + "rot_y": 335, + "rot_x": 0, + "type": 27, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2631.32, + "pos_x": 39.65, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2165.99, + "pos_x": -538.14, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 820.71, + "pos_x": 360.98, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -187, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3071.35, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3228.47, + "pos_x": 1059.13, + "pos_y": 5.78, + "room": 9, + "rot_z": 0, + "rot_y": -261, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -746.07, + "pos_x": 390.83, + "pos_y": 20.44, + "room": 9, + "rot_z": 0, + "rot_y": -176, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5.01, + "pos_x": -482.31, + "pos_y": 16.39, + "room": 9, + "rot_z": 0, + "rot_y": 250, + "rot_x": 0, + "type": 11, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 931.19, + "pos_x": -1846.87, + "pos_y": -263.0, + "room": 10, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 10, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -355.73, + "pos_x": -3160.63, + "pos_y": -206.32, + "room": 10, + "rot_z": 0, + "rot_y": 307, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1228.73, + "pos_x": -1949.45, + "pos_y": -276.13, + "room": 10, + "rot_z": 0, + "rot_y": 216, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1504.3, + "pos_x": -1552.64, + "pos_y": -186.42, + "room": 10, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1441.92, + "pos_x": -1352.11, + "pos_y": -174.8, + "room": 10, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2295.24, + "pos_x": -653.75, + "pos_y": 306.58, + "room": 10, + "rot_z": 0, + "rot_y": 221, + "rot_x": 0, + "type": 36, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2086.81, + "pos_x": -615.28, + "pos_y": 96.58, + "room": 10, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 36, + "quantity": 4 + } + ], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 52, + "wave_2_transition_type": 0, + "location": 1, + "penalty_per_cart": 6000, + "resources": 1, + "details": "Emergency! A huge Deviljho has\nappeared. It's twice as big as\na normal one and it's eating\neverything in sight! Go get\nit! And now, a haiku: A huge\nDeviljho/with no food in its\nstomach/eats the whole island.", + "description": "Hunt a Deviljho", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 1800, + "quest_id": 61020, + "name": "World Eater", + "main_monster_2": 11, + "main_monster_1": 10, + "supply_set_number": 31, + "summon": 1677787700, + "client": "Guildmaster", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 64, + "boss_id": 0, + "type": 7, + "starting_area": 0, + "spawn_count": 1, + "size": 200 + } + } +} \ No newline at end of file diff --git a/event/[MH3SP] Green Eggs and....json b/event/[MH3SP] Green Eggs and....json new file mode 100644 index 0000000..7a42826 --- /dev/null +++ b/event/[MH3SP] Green Eggs and....json @@ -0,0 +1,353 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 950, + "rewards_row_1": [ + [ + 291, + 1, + 18 + ], + [ + 292, + 1, + 6 + ], + [ + 294, + 1, + 11 + ], + [ + 293, + 1, + 15 + ], + [ + 414, + 1, + 10 + ], + [ + 418, + 1, + 16 + ], + [ + 415, + 1, + 13 + ], + [ + 416, + 1, + 6 + ], + [ + 419, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 291, + 1, + 13 + ], + [ + 292, + 1, + 6 + ], + [ + 294, + 1, + 11 + ], + [ + 293, + 1, + 10 + ], + [ + 414, + 1, + 9 + ], + [ + 418, + 1, + 10 + ], + [ + 415, + 1, + 10 + ], + [ + 416, + 1, + 6 + ], + [ + 419, + 1, + 5 + ], + [ + 565, + 1, + 20 + ] + ], + "objective_type": 4, + "zenny_reward": 7000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 27, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 2400, + "resources": 0, + "details": "Why do we live, only to suffer?\nOnly slayers of pig meat know\nthese things. Take care, Hunter,\nfor those who look to antidote\nherbs may find their breath\nstolen away.", + "description": "Hunt a Gigginox\nand an Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 200, + "quest_id": 61050, + "name": "[MH3SP] Green Eggs and...", + "main_monster_2": 19, + "main_monster_1": 4, + "supply_set_number": 43, + "summon": 0, + "client": "Ze SpyRo", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 27, + "boss_id": 1, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 2, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 27, + "boss_id": 0, + "type": 4, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/quest_rotation.json b/event/quest_rotation.json new file mode 100644 index 0000000..105f796 --- /dev/null +++ b/event/quest_rotation.json @@ -0,0 +1,128 @@ +[ + [ + "event/Jump Four Jaggi.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Mercy Mission.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json" + ], + [ + "event/Mercy Mission.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Rage Match.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/[MH3SP] Green Eggs and....json", + "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/[MH3SP] Green Eggs and....json", + "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/[MH3SP] Green Eggs and....json", + "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Jump Fourty-Eight Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", + "event/Blood Sport.json", + "event/Mercy Mission.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Jump Four Jaggi.json", + "event/Flooded Forest Free-For-All.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Land Lords.json" + ] +] \ No newline at end of file diff --git a/mh/constants.py b/mh/constants.py index c5d2ec3..37c9efd 100644 --- a/mh/constants.py +++ b/mh/constants.py @@ -1,28 +1,37 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter constants.""" import struct from other.utils import pad from mh.time_utils import current_server_time, TICKS_PER_CYCLE, \ - get_jhen_event_times, is_jhen_active -from mh.quest_utils import \ - QUEST_EVENT_JUMP_FOUR_JAGGI, QUEST_EVENT_BLOOD_SPORT, \ - QUEST_EVENT_MERCY_MISSION, QUEST_EVENT_THE_PHANTOM_URAGAAN, \ - QUEST_EVENT_WORLD_EATER, QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD, \ - make_binary_event_quest -from mh.arena_utils import \ - GRUDGE_MATCH_ROYAL_LUDROTH, GRUDGE_MATCH_BIRD_BRUTE, \ - GRUDGE_MATCH_TWO_FLAMES, GRUDGE_MATCH_LAND_LORDS + get_jhen_event_times, is_jhen_active, current_event_time_slot +from mh.quest_utils import make_binary_event_quest from res.trading_post import CURRENT_TRADES +try: + from collections.abc import Callable + from typing import ParamSpec + QuestLoader = ParamSpec("QuestLoader", bound="mh.quest_utils.QuestLoader") +except ImportError: + pass -def make_binary_type_time_events(): +def make_binary_type_time_events(binary_loader=None): return struct.pack(">III", *get_jhen_event_times()) +def make_event_slot(event): + return (make_binary_event_quest(event), event) + + +def get_event_slot(slot_num, temporal_slot): + return lambda quest_loader, slot_num=slot_num, temporal_slot=temporal_slot: \ + quest_loader[temporal_slot][slot_num] \ + if slot_num < len(quest_loader[temporal_slot]) else b'\0' * 0x4B4 + + def make_binary_server_type_list(is_jap=False): data = bytearray() PROPERTIES = [ @@ -149,7 +158,7 @@ def make_binary_server_type_list(is_jap=False): return data -def make_binary_npc_greeters(is_jap=False): +def make_binary_npc_greeters(binary_loader, is_jap=False, temporal_slot=None): """Binary with NPC City Greeter. Data offset: @@ -171,6 +180,8 @@ def make_binary_npc_greeters(is_jap=False): US_OFFSET = 0x180 JP_OFFSET = 0x100 offset = JP_OFFSET if is_jap else US_OFFSET + if temporal_slot is None: + temporal_slot = current_event_time_slot() if is_jhen_active(): tool_shop = b"Half-off sale!" @@ -181,30 +192,16 @@ def make_binary_npc_greeters(is_jap=False): material_shop = b"Prices are normal." event_quests = b"" - QUEST_LIST = ( - QUEST_EVENT_JUMP_FOUR_JAGGI, - QUEST_EVENT_BLOOD_SPORT, - QUEST_EVENT_MERCY_MISSION, - QUEST_EVENT_THE_PHANTOM_URAGAAN, - QUEST_EVENT_WORLD_EATER, - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) - - ARENA_LIST = ( - GRUDGE_MATCH_ROYAL_LUDROTH, - GRUDGE_MATCH_BIRD_BRUTE, - GRUDGE_MATCH_TWO_FLAMES, - GRUDGE_MATCH_LAND_LORDS - ) + quest_list, arena_list = binary_loader.get_separated_quest_dicts(temporal_slot) event_quests += b"\n".join([ - quest['quest_info']['name'].encode("ascii") - for quest in QUEST_LIST + quest['quest_info']['name'] + for quest in quest_list ]) arena_quests = b"\n".join([ - quest['quest_info']['name'].encode("ascii") - for quest in ARENA_LIST + quest['quest_info']['name'] + for quest in arena_list ]) guildmaster_str = ( @@ -266,6 +263,15 @@ def make_binary_trading_post(): TIME_STATE = 0 IS_JAP = False + +def get_binary_loader_assisted_version(binary_loader): + return current_event_time_slot() + 1 + binary_loader.version + + +def get_binary_quest_content_from_quest_slot(quest_slot): + return lambda temporal_slot, quest_slot=quest_slot: get_event_slot(quest_slot, temporal_slot) + + # Dummy PAT_BINARY PAT_BINARIES = { 0x01: { @@ -277,8 +283,8 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x03: { - "version": 1, - "content": lambda: make_binary_npc_greeters(is_jap=IS_JAP) + "version": lambda binary_loader: current_event_time_slot() + 1, + "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, is_jap=IS_JAP, temporal_slot=temporal_slot) }, 0x04: { "version": 1, @@ -291,46 +297,44 @@ def make_binary_trading_post(): # "content": b"TEST_BINARY" }, 0x06: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x07: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x08: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x09: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x0a: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x0b: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x0c: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x0d: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x0e: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x0f: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x10: { # French "version": 1, @@ -341,8 +345,8 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x12: { # French - "version": 1, - "content": make_binary_npc_greeters + "version": lambda binary_loader: current_event_time_slot() + 1, + "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x13: { # French "version": 1, @@ -353,46 +357,44 @@ def make_binary_trading_post(): "content": b"dummy_14\0" }, 0x15: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x16: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x17: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x18: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x19: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x1a: { # French - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x1b: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x1c: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x1d: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x1e: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x1f: { # German "version": 1, @@ -403,8 +405,8 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x21: { # German - "version": 1, - "content": make_binary_npc_greeters + "version": lambda binary_loader: current_event_time_slot() + 1, + "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x22: { # German "version": 1, @@ -415,46 +417,44 @@ def make_binary_trading_post(): "content": b"dummy_23\0" }, 0x24: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x25: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x26: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x27: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x28: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x29: { # German - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x2a: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x2b: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x2c: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x2d: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x2e: { # Italian "version": 1, @@ -465,8 +465,8 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x30: { # Italian - "version": 1, - "content": make_binary_npc_greeters + "version": lambda binary_loader: current_event_time_slot() + 1, + "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x31: { # Italian "version": 1, @@ -477,46 +477,44 @@ def make_binary_trading_post(): "content": b"dummy_32\0" }, 0x33: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x34: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x35: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x36: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x37: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x38: { # Italian - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x39: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x3a: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x3b: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x3c: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x3d: { # Spanish "version": 1, @@ -527,8 +525,8 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x3f: { # Spanish - "version": 1, - "content": make_binary_npc_greeters + "version": lambda binary_loader: current_event_time_slot() + 1, + "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x40: { # Spanish "version": 1, @@ -539,49 +537,66 @@ def make_binary_trading_post(): "content": b"dummy_41\0" }, 0x42: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x43: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x44: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x45: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x46: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x47: { # Spanish - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x48: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x49: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x4a: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x4b: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, } + +def get_pat_binary_from_version(binary_type, version): + # type: (int, int) -> bytes|Callable[QuestLoader, bytes] + """Helper to retrieve binary data. + + Used by the following packets: + - BinaryHead + - BinaryData + + TODO: Refactor this and the get_binary_* functions. + """ + static_binaries = (0x01, 0x02, 0x04, 0x05, 0x10, 0x11, + 0x13, 0x14, 0x1f, 0x20, 0x22, 0x23, 0x2e, 0x2f, + 0x31, 0x32, 0x3d, 0x3e, 0x40, 0x41) + if binary_type in static_binaries: + return PAT_BINARIES[binary_type]["content"] + return PAT_BINARIES[binary_type]["content"](version) + + PAT_CATEGORIES = { 0x60: "Opn", 0x61: "Rfp", diff --git a/mh/pat.py b/mh/pat.py index 3ee4537..ac042fc 100644 --- a/mh/pat.py +++ b/mh/pat.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT module.""" @@ -9,13 +9,15 @@ from datetime import timedelta from other.utils import Logger, get_config, get_external_ip, hexdump, to_str +from mh.quest_utils import QuestLoader import mh.pat_item as pati import mh.server as server import mh.time_utils as time_utils from mh.constants import \ LAYER_CHAT_COLORS, TERMS_VERSION, TERMS, SUBTERMS, ANNOUNCE, \ - CHARGE, VULGARITY_INFO, FMP_VERSION, PAT_BINARIES, PAT_NAMES, PatID4 + CHARGE, VULGARITY_INFO, FMP_VERSION, PAT_BINARIES, PAT_NAMES, \ + PatID4, get_pat_binary_from_version from mh.session import Session import mh.database as db @@ -29,6 +31,9 @@ g_circle = None g_circle_info_set = None +# TODO: Refactor it, possible point of failure without fallback +g_binary_loader = QuestLoader("event/quest_rotation.json") + class PatServer(server.BasicPatServer, Logger): """Generic PAT server class.""" @@ -45,6 +50,7 @@ def __init__(self, address, handler_class, max_thread_count=0, self.info("Running on {} port {}".format(*address)) self.debug_con = [] self.debug_mode = debug_mode + self.binary_loader = g_binary_loader def add_to_debug(self, con): """Add connection to the debug connection list.""" @@ -1133,10 +1139,13 @@ def sendAnsBinaryHead(self, binary_type, seq): - Spanish: 0x41, 0x3d, 0x41, 0x3e, 0x3f, 0x40 """ binary = PAT_BINARIES[binary_type] - content = binary["content"] + version = binary["version"] + if callable(version): + version = version(self.server.binary_loader) + content = get_pat_binary_from_version(binary_type, version) if callable(content): - content = content() - data = struct.pack(">II", binary["version"], len(content)) + content = content(self.server.binary_loader) + data = struct.pack(">II", version, len(content)) self.send_packet(PatID4.AnsBinaryHead, data, seq) def recvReqBinaryData(self, packet_id, data, seq): @@ -1145,14 +1154,11 @@ def recvReqBinaryData(self, packet_id, data, seq): ID: 63030100 JP: バイナリデータ要求 TR: Binary data request - - TODO: Handle multiple versions of a binary """ binary_type, version, offset, size = struct.unpack(">BIII", data) - binary = PAT_BINARIES[binary_type] - content = binary["content"] + content = get_pat_binary_from_version(binary_type, version) if callable(content): - content = content() + content = content(self.server.binary_loader) self.sendAnsBinaryData(version, offset, size, content, seq) def sendAnsBinaryData(self, version, offset, size, binary, seq): @@ -1438,10 +1444,10 @@ def recvReqBinaryVersion(self, packet_id, data, seq): JP: バイナリバージョン確認 TR: Binary version check """ - unk, = struct.unpack(">B", data) - self.sendAnsBinaryVersion(unk, seq) + binary_type, = struct.unpack(">B", data) + self.sendAnsBinaryVersion(binary_type, seq) - def sendAnsBinaryVersion(self, unk, seq): + def sendAnsBinaryVersion(self, binary_type, seq): """AnsBinaryVersion packet. ID: 63010200 @@ -1449,7 +1455,10 @@ def sendAnsBinaryVersion(self, unk, seq): TR: Binary version acknowledgment """ unused = 0 - version = 1 # The game might send binary requests for this version + binary = PAT_BINARIES[binary_type] + version = binary["version"] + if callable(version): + version = version(self.server.binary_loader) data = struct.pack(">BI", unused, version) self.send_packet(PatID4.AnsBinaryVersion, data, seq) diff --git a/mh/quest_utils.py b/mh/quest_utils.py index 66edcc3..5b666ef 100644 --- a/mh/quest_utils.py +++ b/mh/quest_utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2022-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2022-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Quest utils module.""" @@ -9,6 +9,21 @@ from other.utils import pad from mh.equipment_utils import create_arena_equipment_set +try: + # Python 2 + basestring # str, unicode +except NameError: + # Python 3 + basestring = str + from typing import Any + + +class WaveType: + none = 0 + monster = 1 + item = 2 + unknown = 3 + class LocationType: QUEST_LOCATION_NONE = 0 @@ -26,6 +41,23 @@ class LocationType: QUEST_LOCATION_WATER_ARENA_2 = 12 +LOCATION_SIZE = { + LocationType.QUEST_LOCATION_NONE: 0, + LocationType.QUEST_LOCATION_D_ISLAND: 13, + LocationType.QUEST_LOCATION_SANDY_PLAINS: 12, + LocationType.QUEST_LOCATION_FLOODED_FOR: 11, + LocationType.QUEST_LOCATION_TUNDRA: 10, + LocationType.QUEST_LOCATION_VOLCANO: 11, + LocationType.QUEST_LOCATION_GRT_DESERT: 3, + LocationType.QUEST_LOCATION_UW_RUIN: 4, + LocationType.QUEST_LOCATION_LAND_ARENA_1: 2, + LocationType.QUEST_LOCATION_LAND_ARENA_2: 2, + LocationType.QUEST_LOCATION_WATER_ARENA_1: 2, + LocationType.QUEST_LOCATION_SACRED_LAND: 2, + LocationType.QUEST_LOCATION_WATER_ARENA_2: 2, +} + + class Monster: none = 0 rathian = 1 @@ -62,20 +94,20 @@ class Monster: fish = 32 altaroth = 33 kelbi = 34 - bnahabra1 = 35 - bnahabra2 = 36 - bnahabra3 = 37 - bnahabra4 = 38 - brd_wyv = 39 - fly_wyv = 40 - brt_wyv = 41 - psc_wyv = 42 - levthn = 43 - elddrg = 44 - lynian = 45 - herbvr = 46 - nptron = 47 - fish = 48 + bnahabra1 = 35 # Gigginox Egg + bnahabra2 = 36 # Bnahabra (Blue Wing) + bnahabra3 = 37 # Bnahabra (Orange Wing) + bnahabra4 = 38 # Bnahabra (Green Wing) + brd_wyv = 39 # Bnahabra (Red Wing) + fly_wyv = 40 # ---- INVALID AS AN IN-QUEST MONSTER --- + brt_wyv = 41 # ---- INVALID AS AN IN-QUEST MONSTER --- + psc_wyv = 42 # ---- INVALID AS AN IN-QUEST MONSTER --- + levthn = 43 # ---- INVALID AS AN IN-QUEST MONSTER --- + elddrg = 44 # ---- INVALID AS AN IN-QUEST MONSTER --- + lynian = 45 # ---- INVALID AS AN IN-QUEST MONSTER --- + herbvr = 46 # ---- INVALID AS AN IN-QUEST MONSTER --- + nptron = 47 # ---- INVALID AS AN IN-QUEST MONSTER --- + unk = 48 # ---- INVALID AS AN IN-QUEST MONSTER --- class QuestRankType: @@ -880,7 +912,7 @@ class QuestRestrictionType: RESTRICTION_46_JOIN = 26 -def make_monster_quest_type(monster_type, boss_id, enabled, level, +def make_monster_quest_type(monster_type, starting_area, boss_id, spawn_count, level, min, size, max): data = b"" # - id: monster_type @@ -890,14 +922,12 @@ def make_monster_quest_type(monster_type, boss_id, enabled, level, # - id: boss_id # type: u2 - data += struct.pack(">h", boss_id) + data += struct.pack(">B", starting_area) + data += struct.pack(">B", boss_id) - # - id: enabled + # - id: spawn_count # type: u1 - if enabled: - data += struct.pack(">B", 0x01) - else: - data += struct.pack(">B", 0x00) + data += struct.pack(">B", spawn_count) # - id: level # type: u1 @@ -988,7 +1018,13 @@ def make_binary_event_quest(quest_data): 'starting_position': starting_position, 'general_enemy_level': general_enemy_level, 'summon': summon, - 'smallmonster_data_file': smallmonster_data, + 'wave_1_transition_type': wave_1_transition_type, + 'wave_1_transition_target': wave_1_transition_target, + 'wave_1_transition_quantity': wave_1_transition_quantity, + 'wave_2_transition_type': wave_2_transition_type, + 'wave_2_transition_target': wave_2_transition_target, + 'wave_2_transition_quantity': wave_2_transition_quantity, + 'smallmonster_data_file': smallmonster_data (or None), }, """ quest_info = quest_data['quest_info'] @@ -1085,94 +1121,110 @@ def make_binary_event_quest(quest_data): """ unknown = quest_data['unknown'] - # TOOO: Remove encode("ascii") and use bytes instead data = b"" # - id: name # type: str # size: 44 - data += pad(quest_info['name'].encode("ascii"), 40) # Size 0x28 + # offset: 0x0000 + data += pad(quest_info['name'], 40) # Size 0x28 data += struct.pack(">I", 0x00000000) # - id: quest_id # type: u2 + # offset: 0x002C data += struct.pack(">H", quest_info['quest_id']) # - id: description # type: str # size: 92 - data += pad(quest_info['description'].encode("ascii"), 80) + # offset: 0x002E + data += pad(quest_info['description'], 80) data += b'\0' * 0xC # Padding # - id: quest_rank # type: u1 # enum: QuestRankType + # offset: 0x008A data += struct.pack(">B", quest_info['quest_rank']) # - id: location # type: u1 # enum: LocationType + # offset: 0x008B data += struct.pack(">B", quest_info['location']) # Offset 0x8C # - id: sub_quest_1_title # type: str # size: 41 + # offset: 0x008C data += pad( - objective_details['subquest_1']['description'].encode("ascii"), + objective_details['subquest_1']['description'], 0x29 ) # - id: sub_quest_2_title # type: str # size: 41 + # offset: 0x00B5 data += pad( - objective_details['subquest_2']['description'].encode("ascii"), + objective_details['subquest_2']['description'], 0x29 ) # - id: sucess_message # type: str # size: 92 - data += pad(quest_info['success_message'].encode("ascii"), 0x5C) + # offset: 0x00DE + data += pad(quest_info['success_message'], 0x5C) # - id: time_limit # type: u2 - data += struct.pack(">h", quest_info['time_limit']) # Offset 0x13A + # offset: 0x013A + data += struct.pack(">h", quest_info['time_limit']) # - id: failure_message # type: str # size: 92 # Presently hardcoded + # offset: 0x013C data += pad(b"Reward hits 0, or time\nexpires.", 0x5C) # - id: hunter_rank_point_restriction # type: u2 + # offset: 0x0198 data += struct.pack(">h", quest_info['hrp_restriction']) # - id: client # type: str # size: 41 - data += pad(quest_info['client'].encode("ascii"), 0x29) + # offset: 0x019A + data += pad(quest_info['client'], 0x29) # - id: unk2 # size: 6 + # offset: 0x01C3 data += b'\0' * 0x06 # - id: details # type: str # size: 256 - data += pad(quest_info['details'].encode("ascii"), 0x100) # b'\0' * 0x100 + # offset: 0x01C9 + data += pad(quest_info['details'], 0x100) # b'\0' * 0x100 # - id: unk1 # size: 61 + # offset: 0x02C9 data += b'\0' * 0x3D # - id: minion_unsure # size: 3 + # offset: 0x0306 data += b'\0' * 0x03 # - id: quest_flags_unsure # size: 3 + # offset: 0x0309 data += b'\0' * 0x03 # - id: monster_1 @@ -1189,22 +1241,25 @@ def make_binary_event_quest(quest_data): # - id: unk3 # size: 2 + # offset: 0x030E data += b'\0' * 0x02 # Padding # - id: flags # type: u4 - data += struct.pack(">I", quest_info['flags']) # Offset 0x310 + # offset: 0x0310 + data += struct.pack(">I", generate_flags(*(quest_info['flags']))) # Offset 0x310 # - id: monsters # type: monster_quest_type # repeat: expr # repeat-expr: 3 - + # # offset: 0x0314 if monster_1['type'] != 0: data += make_monster_quest_type( monster_type=monster_1['type'], + starting_area=monster_1['starting_area'], boss_id=monster_1['boss_id'], - enabled=monster_1['enabled'], + spawn_count=monster_1['spawn_count'], level=monster_1['level'], min=monster_1['hp_spread'], size=monster_1['size'], @@ -1213,11 +1268,13 @@ def make_binary_event_quest(quest_data): else: data += b'\0' * 0x08 + # offset: 0x031C if monster_2['type'] != 0: data += make_monster_quest_type( monster_type=monster_2['type'], + starting_area=monster_2['starting_area'], boss_id=monster_2['boss_id'], - enabled=monster_2['enabled'], + spawn_count=monster_2['spawn_count'], level=monster_2['level'], min=monster_2['hp_spread'], size=monster_2['size'], @@ -1226,11 +1283,13 @@ def make_binary_event_quest(quest_data): else: data += b'\0' * 0x08 + # offset: 0x0324 if monster_3['type'] != 0: data += make_monster_quest_type( monster_type=monster_3['type'], + starting_area=monster_3['starting_area'], boss_id=monster_3['boss_id'], - enabled=monster_3['enabled'], + spawn_count=monster_3['spawn_count'], level=monster_3['level'], min=monster_3['hp_spread'], size=monster_3['size'], @@ -1242,6 +1301,7 @@ def make_binary_event_quest(quest_data): # SUMMON / (INVADER?) # - id: unk5 # type: u4 + # offset: 0x032C data += struct.pack(">I", quest_info['summon']) # - id: quests_properties @@ -1274,12 +1334,14 @@ def make_binary_event_quest(quest_data): # quest_objectivetype=0x000c, # quest_objectivecount=0x0003 + # offset: 0x0330 data += make_quest_properties_type( main_quest['type'], main_quest['objective_type'], main_quest['objective_num'] ) + # offset: 0x0338 if subquest_1['type'] is not None: data += make_quest_properties_type( subquest_1['type'], @@ -1289,6 +1351,7 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 + # offset: 0x0340 if subquest_2['type'] is not None: data += make_quest_properties_type( subquest_2['type'], @@ -1300,116 +1363,162 @@ def make_binary_event_quest(quest_data): # - id: contract_fee # type: u4 - data += struct.pack(">I", quest_info['quest_fee']) # Offset 0x348 + # offset: 0x0348 + data += struct.pack(">I", quest_info['quest_fee']) # - id: main_objective_reward # type: u4 + # offset: 0x034C data += struct.pack(">I", main_quest['zenny_reward']) # - id: sub_objective_a_reward # type: u4 + # offset: 0x0350 data += struct.pack(">I", subquest_1['zenny_reward']) # - id: sub_objective_b_reward # type: u4 + # offset: 0x0354 data += struct.pack(">I", subquest_2['zenny_reward']) # - id: death_reduction # type: u4 + # offset: 0x0358 data += struct.pack(">I", quest_info['penalty_per_cart']) # - id: hunter_rank_points # type: u4 + # offset: 0x035C data += struct.pack(">I", main_quest['hrp_reward']) # - id: unk7 # type: u4 # 0x0000000f for the great jaggi quest/(all quests?) + # offset: 0x0360 data += struct.pack(">I", 0x0000000f) # - id: unk8 # type: u1 + # offset: 0x0364 data += b'\0' * 0x01 # - id: gather_rank (wrong) # type: u1 + # offset: 0x0365 data += b'\0' * 0x01 # - id: unk9 # type: u1 + # offset: 0x0366 data += b'\0' * 0x01 # - id: unk10 # type: u1 + # offset: 0x0367 data += struct.pack(">B", subquest_1['hrp_reward']) # - id: supply_set (wrong) # type: u4 + # offset: 0x0368 data += struct.pack(">I", subquest_2['hrp_reward']) # - id: Unknown 4 # type: u1 + # offset: 0x036C data += struct.pack(">B", unknown['unk_4']) # - id: supply_type (0x00: low rank, 0x01: high rank, 0x02: arena) # type: u1 + # offset: 0x036D data += struct.pack(">B", quest_info['resources']) # - id: unk11 # size: 2 # type: u1 + # offset: 0x036E data += struct.pack(">B", unknown['unk_5']) # type: u1 + # offset: 0x036F data += struct.pack(">B", unknown['unk_6']) - # - id: start_pos (SUPPLY SET NUMBER) + # - id: supply_set_number # type: u4 # 0x00000011 for the great jaggi quest + # offset: 0x0370 data += struct.pack(">I", quest_info['supply_set_number']) # - id: unk12 # type: u4 + # offset: 0x0374 data += struct.pack(">I", unknown['unk_7']) # - id: unk13 # type: u2 + # offset: 0x0378 data += b'\0' * 0x02 # - id: type_flag (STARTING POSITION, 0x0000: basecamp, # 0x0001:random, 0x0002: shrine) # type: u2 + # offset: 0x037A data += struct.pack(">h", quest_info['starting_position']) # UNK + # offset: 0x037C data += b'\0' * 0x02 - # - id: type_code + # - id: small_monster_data_location # type: u2 + # offset: 0x037E data += struct.pack(">h", 0x04b8) # - id: type_amount # type: u2 + # offset: 0x0380 data += b'\0' * 0x02 # - id: general_enemy_level # type: u2 + # offset: 0x0382 data += struct.pack(">h", quest_info['general_enemy_level']) - # - id: unk14 - # type: u4 - data += struct.pack(">I", unknown['unk_9']) + # - id: wave_1_transition_type + # type: u2 + # offset: 0x0384 + data += struct.pack(">h", quest_info['wave_1_transition_type']) + + # - id: wave_1_transition_target + # type: u2 + # offset: 0x0386 + data += struct.pack(">h", quest_info['wave_1_transition_target']) + + # - id: wave_1_transition_quantity + # type: u2 + # offset: 0x0388 + data += struct.pack(">h", quest_info['wave_1_transition_quantity']) + + # - id: wave_2_transition_type + # type: u2 + # offset: 0x038A + data += struct.pack(">h", quest_info['wave_2_transition_type']) + + # - id: wave_2_transition_target + # type: u2 + # offset: 0x038C + data += struct.pack(">h", quest_info['wave_2_transition_target']) + + # - id: wave_2_transition_quantity + # type: u2 + # offset: 0x038E + data += struct.pack(">h", quest_info['wave_2_transition_quantity']) - # - id: unk15 - # type: u4 - data += struct.pack(">I", unknown['unk_10']) - # - id: unk16 - # size: 16 - data += struct.pack(">I", unknown['unk_11']) # Unknown 12 (0x00000002 for large monster hunting quests, # 0x00000003 for small monster & gathering quests, # 0x00000005 for Jhen & Alatreon) + # offset: 0x0390 data += struct.pack(">I", unknown['unk_12']) + # offset: 0x0394 data += make_quest_properties_type(main_quest['type'], main_quest['objective_type'], main_quest['objective_num']) @@ -1418,15 +1527,18 @@ def make_binary_event_quest(quest_data): # type: reward_type # repeat: expr # repeat-expr: 11 + # offset: 0x039C data += generate_rewards(main_quest['rewards_row_1']) # - id: main_objective_additional_rewards # type: reward_type # repeat: expr # repeat-expr: 11 + # offset: 0x03C8 data += generate_rewards(main_quest['rewards_row_2']) # SUBQUEST 1 REWARDS + # offset: 0x03F4 if subquest_1['type'] is not None: data += make_quest_properties_type(subquest_1['type'], subquest_1['objective_type'], @@ -1435,9 +1547,11 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 data += b'\0' * (4 * 11) + # offset: 0x0428 data += b'\0' * (4 * 11) # SUBQUEST 2 REWARDS + # offset: 0x0454 if subquest_2['type'] is not None: data += make_quest_properties_type(subquest_2['type'], subquest_2['objective_type'], @@ -1446,6 +1560,7 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 data += b'\0' * (4 * 11) + # offset: 0x0488 data += b'\0' * (4 * 11) assert len(data) == 0x4B4 @@ -1454,13 +1569,90 @@ def make_binary_event_quest(quest_data): # that describes how many bytes total the quest takes up before the # optional arena equipment data tail = 0x4B4 + 4 - sm_data = read_quest_sm_data(quest_info['smallmonster_data_file']) - if sm_data is not None: - tail += len(sm_data) - 4 - data += struct.pack(">I", tail) - data += sm_data[4:] + if 'smallmonster_data_file' in quest_info: + # Read small monster data from hex string file + sm_data = read_quest_sm_data(quest_info['smallmonster_data_file']) + if sm_data is not None: + tail += len(sm_data) - 4 + data += struct.pack(">I", tail) + data += sm_data[4:] + else: + data += struct.pack(">I", tail) else: + # Create new small monster data from parameters + """ + 'small_monsters': [ + [ + { + 'type': monsterType, + 'variant': variant, + 'room': room, + 'quantity': quantity, + 'unk1': unk1, + 'pos_x': pos_x, + 'pos_y': pos_y, + 'pos_z': pos_z, + 'rot_x': rot_x, + 'rot_y': rot_y, + 'rot_z': rot_z, + 'unk2': unk2, # Usually 0xFF + } + ] * number of waves * number of areas + ] + """ + sm_data = b"" + small_monsters = quest_data['small_monsters'] + location_size = LOCATION_SIZE[quest_info['location']] + assert len(small_monsters) % location_size == 0 + num_waves = int(len(small_monsters) / location_size) + assert num_waves <= 3 + # Pre-preamble: Establishing the locations of each of the waves' preambles + sm_data += struct.pack('>I', 0x0000000C) + sm_data += struct.pack('>I', 0x0000000C + 8*location_size) + if num_waves < 3: + sm_data += struct.pack('>I', 0xCCCCCCCC) + else: + sm_data += struct.pack('>I', 0x0000000C + 2*8*location_size) + + monster_data = b"" + # Preamble: Establishing the location and length of each of the + # small monster areas + current_sm_index = 0x0C + 8*len(small_monsters) + for entry, monster_list in enumerate(quest_data['small_monsters']): + sm_data += struct.pack(">I", current_sm_index) + area = entry % location_size + area_monster_data = b"" + for monster in monster_list: + assert monster['room'] == area + new_monster_data = b"" + new_monster_data += struct.pack(">I", monster['type']) + new_monster_data += 3* b"\0" + new_monster_data += struct.pack(">b", monster['quantity']) + new_monster_data += struct.pack(">B", monster['unk2']) + new_monster_data += struct.pack(">B", monster['room']) + new_monster_data += struct.pack(">B", monster['unk1']) + new_monster_data += struct.pack(">B", monster['variant']) + new_monster_data += struct.pack(">I", 0x00000000) + new_monster_data += struct.pack(">f", monster['pos_x']) + new_monster_data += struct.pack(">f", monster['pos_y']) + new_monster_data += struct.pack(">f", monster['pos_z']) + new_monster_data += struct.pack('>i', int(180.05 * monster['rot_x'])) + new_monster_data += struct.pack('>i', int(180.05 * monster['rot_y'])) + new_monster_data += struct.pack('>i', int(180.05 * monster['rot_z'])) + new_monster_data += struct.pack('>I', 0xFF000000) + new_monster_data += struct.pack('>I', 0x00000000) + assert len(new_monster_data) == 0x30 + + area_monster_data += new_monster_data + area_monster_data += 0x30 * b'\0' + sm_data += struct.pack(">I", len(area_monster_data)) + current_sm_index += len(area_monster_data) + monster_data += area_monster_data + # Main small monster data + sm_data += monster_data + tail += len(sm_data) data += struct.pack(">I", tail) + data += sm_data # If there is arena equipment data, add it to the end of the quest binary if 'arena_equipment' in quest_data: @@ -1474,44 +1666,44 @@ def make_binary_event_quest(quest_data): # FLAGS INFO: # (Arena quests have bytes in "QUEST_FLAG_ARENA = 0b10000" set) # byte 1: Boss Order 1 ( -# +1: Unknown1 -# +2: All At Once(CombineSubquestsRequireMQAndFirstSubquest) -# +4: Marathon (CombineSubquestsRequireMQAndBothSubquests) -# +8: Unknown4 -# +16: Unknown5 -# +32: Unknown6 -# +64: Unknown7 -# +128: CombineMainAndSubquests +# +0x1000000: Unknown1 +# +0x2000000: All At Once(CombineSubquestsRequireMQAndFirstSubquest) +# +0x4000000: Marathon (CombineSubquestsRequireMQAndBothSubquests) +# +0x8000000: Unknown4 +# +0x10000000: Unknown5 +# +0x20000000: Unknown6 +# +0x40000000: Unknown7 +# +0x80000000: CombineMainAndSubquests # ) # byte 2: Boss Order 2 ( -# +1: Unknown1 -# +2: Unknown2 -# +4: RequireMQAndBothSubquests -# +8: Unknown4 -# +16: QualifyingTime -# +32: DontAnnounceSubquestCompletion -# +64: Unknown7 -# +128: ElderDragonLeftWounded +# +0x10000: Unknown1 +# +0x20000: Unknown2 +# +0x40000: RequireMQAndBothSubquests +# +0x80000: Unknown4 +# +0x100000: QualifyingTime +# +0x200000: DontAnnounceSubquestCompletion +# +0x400000: Unknown7 +# +0x800000: ElderDragonLeftWounded # ) # byte 3: Boss Order 3 ( -# +1: 2Mon_NoSubs_ReqSub1_Unstable -# +2: Unknown2 -# +4: Unknown3 -# +8: BanjoMusic -# +16: Unknown5 -# +32: Unknown6 -# +64: Unknown7 -# +128: Unknown8 +# +0x100(256): 2Mon_NoSubs_ReqSub1_Unstable +# +0x200(512): Unknown2 +# +0x400(1024): Unknown3 +# +0x800(2048): BanjoMusic +# +0x1000(4096): Unknown5 +# +0x2000(8192): Unknown6 +# +0x4000(16384): Unknown7 +# +0x8000(32768): Unknown8 # ) # byte 4: Quest Flags ( # +1: Slay # +2: Deliver # +4: Capture # +8: Defend -# +16: ArenaQuest -# +32: Unknown2 -# +64: Repel(EndAtMainQuest) -# +128: Unknown3 +# +0x10(16): ArenaQuest +# +0x20(32): Unknown2 +# +0x40(64): Repel(EndAtMainQuest) +# +0x80(128): Unknown3 # ) def generate_flags(byte1, byte2, byte3, byte4): res = 0x00000000 @@ -1540,7 +1732,9 @@ def generate_flags(byte1, byte2, byte3, byte4): def read_quest_sm_data(fname): - data_path = path.join("event", fname) + # type: (bytes) -> bytearray + # JSON data (including fname) was processed by byteify + data_path = path.join(b"event", fname) if not path.exists(data_path): return None with open(data_path, 'r') as f: @@ -1548,921 +1742,76 @@ def read_quest_sm_data(fname): return bytearray.fromhex(data.replace(" ", "").replace("\n", "")) -""" -EVENT QUEST 1: Jump Four Jaggi -(INCOMPLETE) Only 3 jaggi spawn, and all at once instead of sequentially. -Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g -Quest requirements altered to make it possible to win. -""" -QUEST_EVENT_JUMP_FOUR_JAGGI = { - 'quest_info': { - 'quest_id': 61001, - 'name': "Jump Three Jaggi", - 'client': "Guild Subcontractor", - 'description': "Hunt 3 Great Jaggi", - 'details': - "I'm gonna get so fired for\n" - "this... The Great Jaggi some\n" - "hunter brought in just\n" - "escaped. Mind going after\n" - "them? You better hurry,\n" - "though. Bet they've got some\n" - "incredible materials, too.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 1400, - 'quest_fee': 400, - 'time_limit': 50, - 'main_monster_1': Monster.bnahabra2, - 'main_monster_2': Monster.melynx, - 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 19, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x64050219, - 'smallmonster_data_file': 'sm_jumpfourjaggi.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0002, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x03, - 'zenny_reward': 4000, - 'hrp_reward': 440, - 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 1, 3), - (ItemsType.great_jagi_hide, 1, 12), - (ItemsType.jagi_scale, 1, 10), - (ItemsType.screamer, 1, 20), - (ItemsType.kings_frill, 1, 12), - (ItemsType.bone_husk_s, 8, 18), - (ItemsType.great_jagi_head, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.aquaglow_jewel, 1, 1), - (ItemsType.shining_charm, 1, 1), - (ItemsType.armor_sphere, 1, 1), - (ItemsType.armor_sphere_plus, 1, 1) - ], - }, - 'subquest_1': { - 'description': "Hunt 2 Great Jaggi", - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x02, - 'zenny_reward': 4000, - 'hrp_reward': 220, - 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 1, 1), - (ItemsType.great_jagi_hide, 1, 1), - (ItemsType.jagi_scale, 1, 1), - (ItemsType.screamer, 1, 1), - (ItemsType.kings_frill, 1, 1), - (ItemsType.bone_husk_s, 8, 1), - (ItemsType.great_jagi_head, 1, 1) - ], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0, - 'zenny_reward': 0, - 'hrp_reward': 0, - 'rewards_row_1': [], - } - }, - 'unknown': { - # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x0002018B, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} +def make_event_slot(event): + return (make_binary_event_quest(event), event) -""" -EVENT QUEST 7: The Phantom Uragaan -Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w -""" -QUEST_EVENT_THE_PHANTOM_URAGAAN = { - 'quest_info': { - 'quest_id': 61007, - 'name': "The Phantom Uragaan", - 'client': "Spoiled Princess", - 'description': "Hunt an Uragaan", - 'details': - "Oooh, I just heard they've\n" - "spotted the cutest, tiniest,\n" - "most adorable little Uragaan\n" - "on the Volcano. Hunt me one\n" - "this instant or I will get\n" - "very angry. And if I'm angry,\n" - "Daddy's angry. Now go!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 1, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 3000, - 'quest_fee': 850, - 'time_limit': 50, - 'main_monster_1': Monster.uroktor, - 'main_monster_2': Monster.aptonoth, - 'location': LocationType.QUEST_LOCATION_VOLCANO, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 15, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x1D, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_phantomuragaan.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.uragaan, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x13, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 8800, - 'hrp_reward': 1100, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} - -""" -EVENT QUEST 8: Blood Sport -Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 -""" -QUEST_EVENT_BLOOD_SPORT = { - 'quest_info': { - 'quest_id': 61008, - 'name': "Blood Sport", - 'client': "Spoiled Princess", - 'description': - "Hunt an Uragaan\n" - "and a Diablos", - 'details': - "Oh, boo! I'm tired of watching\n" - "run-of-the-mill hunts. The\n" - "Diablos and the Uragaan are\n" - "supposed to be the ultimate\n" - "monster duo. I'd love to watch\n" - "them maim some foolish hunter!\n" - "Do put on a good show...", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 6000, - 'quest_fee': 1750, - 'time_limit': 50, - 'main_monster_1': Monster.uragaan, - 'main_monster_2': Monster.diablos, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001D, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.uragaan, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.diablos, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 17600, - 'hrp_reward': 1760, - 'rewards_row_1': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 8, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 1, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.diablos, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} -""" -EVENT QUEST 2: Mercy Mission -(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth -from the start. -""" -QUEST_EVENT_MERCY_MISSION = { - 'quest_info': { - 'quest_id': 61002, - 'name': "Mercy Mission", - 'client': "MH3SP Dev Team", - 'description': "Deliver 10 Monster Guts", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': - "Complete the Main Quest\n" - "and both Subquests.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 1, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (0, 1, 0, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 600, - 'quest_fee': 150, - 'time_limit': 15, - 'main_monster_1': Monster.ludroth, - 'main_monster_2': Monster.epioth, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 35, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x64030303, - 'smallmonster_data_file': 'sm_mercymission.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.royal_ludroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000002, - 'objective_type': ItemsType.monster_guts, - 'objective_num': 0x0A, - 'zenny_reward': 1500, - 'hrp_reward': 70, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 8, 14), - (ItemsType.steel_eg, 1, 12) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) - ], - }, - 'subquest_1': { - 'description': "Deliver 12 Red Coral Stones", - 'type': 0x00000002, - 'objective_type': ItemsType.red_coral_stone, - 'objective_num': 0x0C, - 'zenny_reward': 1200, - 'hrp_reward': 55, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 1, 14), - (ItemsType.steel_eg, 1, 12) - ], - }, - 'subquest_2': { - 'description': "Deliver 3 Goldenfish", - 'type': 0x00000002, - 'objective_type': ItemsType.goldenfish, - 'objective_num': 0x03, - 'zenny_reward': 2000, - 'hrp_reward': 70, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) - ], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000003, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} - -""" -EVENT QUEST 20: World Eater -Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 -(INCOMPLETE) Needs invading queropeco -""" -QUEST_EVENT_WORLD_EATER = { - 'quest_info': { - 'quest_id': 61020, - 'name': "World Eater", - 'client': "Guildmaster", - 'description': "Hunt a Deviljho", - 'details': - "Emergency! A huge Deviljho has\n" - "appeared. It's twice as big as\n" - "a normal one and it's eating\n" - "everything in sight! Go get\n" - "it! And now, a haiku: A huge\n" - "Deviljho/with no food in its\n" - "stomach/eats the whole island.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 6000, - 'quest_fee': 1800, - 'time_limit': 50, - 'main_monster_1': Monster.jaggi, - 'main_monster_2': Monster.jaggia, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 31, - 'starting_position': StartingPositionType.random, - 'general_enemy_level': 0x0040, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_worldeater.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.deviljho, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0xC8, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.deviljho, - 'objective_num': 0x01, - 'zenny_reward': 18000, - 'hrp_reward': 1800, - 'rewards_row_1': [ - (ItemsType.timeworn_charm, 1, 33), - (ItemsType.deviljho_gem, 1, 4), - (ItemsType.deviljho_scalp, 1, 8), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.hvy_armor_sphere, 1, 11), - (ItemsType.shining_charm, 1, 19), - (ItemsType.deviljho_fang, 1, 8) - ], - 'rewards_row_2': [ - (ItemsType.deviljho_scalp, 1, 20), - (ItemsType.timeworn_charm, 1, 34), - (ItemsType.deviljho_fang, 1, 6), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.deviljho_gem, 1, 3), - (ItemsType.shining_charm, 1, 11), - (ItemsType.hvy_armor_sphere, 1, 9) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} +def byteify(obj): + # type: (Any) -> dict[Any, Any]|list[Any]|bytes + if isinstance(obj, dict): + return {key: byteify(value) + for key, value in obj.items()} + elif isinstance(obj, list): + return [byteify(element) for element in obj] + elif isinstance(obj, basestring): + return obj.encode('utf-8') + else: + return obj + + +def is_arena_quest(flags): + return ((1 * 2**4) * 16**0) & flags > 0 + + +class QuestLoader: + def __init__(self, file_loc='event/quest_rotation.json'): + self.version = 0 + self.version_incrementer = 28 + self.file_loc = file_loc + self.load_quests() + self.version = 0 + + def load_quests(self): + import json + self.version += self.version_incrementer + quest_list = [] + with open(self.file_loc, 'r') as f: + quests_json = byteify(json.load(f)) + for day in quests_json: + curr_quest_list = [] + for quest_file in day: + with open(quest_file, 'r') as ff: + curr_quest = byteify(json.load(ff)) + curr_quest = make_event_slot(curr_quest) + curr_quest_list.append(curr_quest) + quest_list.append(curr_quest_list) + self.quests = quest_list + + def get_quest_dicts(self, idx): + # Get quest dicts for the day + true_idx = idx - 1 + return [quest[1] for _, quest in enumerate(self.quests[true_idx])] + + def get_separated_quest_dicts(self, idx): + # Get quest dicts for the day separated by event and arena + quest_list = [] + arena_list = [] + for quest in self.get_quest_dicts(idx): + if quest is None: + continue + if is_arena_quest(generate_flags(*(quest['quest_info']['flags']))): + arena_list.append(quest) + else: + quest_list.append(quest) + return quest_list, arena_list + + def __len__(self): + # Get number of days + return len(self.quests) + + def __getitem__(self, idx): + # Get quests for the day + true_idx = idx - self.version - 1 + return [quest[0] for _, quest in enumerate(self.quests[true_idx])] -""" -EVENT QUEST 20: Where Gods Fear To Tread -Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, - thanks to "soulmizute, emperor of the abyss#5094" - and "El Matiah#8904" -""" -QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { - 'quest_info': { - 'quest_id': 61021, - 'name': "Where Gods Fear to Tread", - 'client': "Scarlet Mystery Man", - 'description': "Slay the Alatreon", - 'details': - "I've been waiting, hunter. Now\n" - "comes your final challenge:\n" - "Alatreon, a dragon of darkness\n" - "and light. Can mere mortals\n" - "fell an elder dragon feared\n" - "even by the gods? Don't even\n" - "bother saying your prayers...", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 0, 0, 1, 0) - ), - 'penalty_per_cart': 14000, - 'quest_fee': 4200, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_SACRED_LAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.shrine, - 'general_enemy_level': 0x0040, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_wheregodsfeartotread.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.alatreon, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0x7D, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.alatreon, - 'objective_num': 0x01, - 'zenny_reward': 42000, - 'hrp_reward': 4200, - 'rewards_row_1': [ - (ItemsType.alatreon_scute, 1, 40), - (ItemsType.brkn_skypiercer, 1, 30), - (ItemsType.alatreon_talon, 1, 10), - (ItemsType.alatreon_plate, 1, 10), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.alatreon_plate, 1, 11), - (ItemsType.brkn_skypiercer, 1, 34), - (ItemsType.alatreon_talon, 1, 39), - (ItemsType.elderdragonblood, 1, 6), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000005, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} -QUEST_EVENT_GREEN_EGGS = { - 'quest_info': { - 'quest_id': 61050, - 'name': "[MH3SP] Green Eggs and...", - 'client': "Ze SpyRo", - 'description': - "Hunt a Gigginox\n" - "and an Agnaktor", - 'details': - "Why do we live, only to suffer?\n" - "Only slayers of pig meat know\n" - "these things. Take care, Hunter,\n" - "for those who look to antidote\n" - "herbs may find their breath\n" - "stolen away.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 2400, - 'quest_fee': 200, - 'time_limit': 50, - 'main_monster_1': Monster.gigginox, - 'main_monster_2': Monster.agnaktor, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001B, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_emptylandarena.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.gigginox, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1B, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.agnaktor, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x1B, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0002, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.gigginox, - 'objective_num': 0x01, - 'zenny_reward': 7000, - 'hrp_reward': 950, - 'rewards_row_1': [ - (ItemsType.flabby_hide, 1, 18), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 15), - (ItemsType.agnaktor_shell, 1, 10), - (ItemsType.agnaktor_scale, 1, 16), - (ItemsType.agnaktor_hide, 1, 13), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.flabby_hide, 1, 13), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 10), - (ItemsType.agnaktor_shell, 1, 9), - (ItemsType.agnaktor_scale, 1, 10), - (ItemsType.agnaktor_hide, 1, 10), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5), - (ItemsType.commendation, 1, 20) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.agnaktor, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} diff --git a/mh/time_utils.py b/mh/time_utils.py index f2719de..8fec37d 100644 --- a/mh/time_utils.py +++ b/mh/time_utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2022 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter time utils module.""" @@ -48,6 +48,14 @@ def get_jhen_event_times(): int(cycle_start + JHEN_END*SECONDS_PER_DAY)) # sandstorm end +def current_event_time_slot(): + """ + There are JHEN_EVENT_OFFSET temporal event slots per data event slot. + Each one activates on a different day, counting up from 0. + """ + return int(current_server_time()//SECONDS_PER_DAY) % JHEN_EVENT_OFFSET + + def is_jhen_active(): day_in_cycle = int( current_server_time() // SECONDS_PER_DAY From eb250b44adb3d300cb66ff7a1067fd2485b5f220 Mon Sep 17 00:00:00 2001 From: Kevin Barkevich Date: Sat, 14 Jun 2025 23:22:29 -0400 Subject: [PATCH 2/4] Full event quest rotation update --- dump_quest.py | 9306 ++++++++++++++++++---- dump_trading_post.py | 708 ++ event/Alluring Dress.json | 310 + event/Animal Attractions.json | 935 +++ event/Blood Sport.json | 84 + event/Cold Call.json | 979 +++ event/Double Diablos.json | 225 + event/Fiery Skies, Frozen Fields.json | 205 + event/Flooded Forest Free-For-All.json | 6 +- event/Gobuled Everything in Sight.json | 264 + event/Grudge Match Bird and Brute.json | 6 +- event/Grudge Match Brute Horns.json | 521 ++ event/Grudge Match Ice and Fire.json | 473 ++ event/Grudge Match Lagiacrus.json | 423 + event/Grudge Match Land Lords.json | 8 +- event/Grudge Match Qurupeco.json | 386 + event/Grudge Match Rathian.json | 435 + event/Grudge Match Sea Power.json | 448 ++ event/Grudge Match The Two Flames.json | 6 +- event/Grudge Match Uragaan.json | 503 ++ event/Grudge Match Wyvern Trio.json | 499 ++ event/Hot Deal.json | 857 ++ event/Jump Four Jaggi.json | 2 +- event/Jump Fourty-Eight Jaggi.json | 2 +- event/Lords of the Sea and Sky.json | 225 + event/Marine Warfare.json | 210 + event/Poached Wyvern Eggs.json | 1864 +++++ event/Rage Match.json | 2 +- event/Red Hot Party!.json | 871 ++ event/Sea Power.json | 266 + event/Shut Up and Fish!.json | 274 + event/Speak of the Deviljho.json | 212 + event/The Motley Mission.json | 230 + event/[MH3SP] Dark Side of the Moon.json | 202 + event/quest_rotation.json | 717 +- event/trading_post.json | 6998 ++++++++++++++++ fmp_server.py | 3 + master_server.py | 3 + mh/arena_utils.py | 769 -- mh/constants.py | 69 +- mh/database.py | 5 +- mh/pat.py | 85 +- mh/pat_item.py | 22 +- mh/quest_utils.py | 223 +- mh/server.py | 59 +- mh/session.py | 8 +- mh/time_utils.py | 18 +- opn_server.py | 35 +- other/utils.py | 15 +- res/trading_post.py | 8 +- 50 files changed, 28480 insertions(+), 2504 deletions(-) create mode 100644 dump_trading_post.py create mode 100644 event/Alluring Dress.json create mode 100644 event/Animal Attractions.json create mode 100644 event/Cold Call.json create mode 100644 event/Double Diablos.json create mode 100644 event/Fiery Skies, Frozen Fields.json create mode 100644 event/Gobuled Everything in Sight.json create mode 100644 event/Grudge Match Brute Horns.json create mode 100644 event/Grudge Match Ice and Fire.json create mode 100644 event/Grudge Match Lagiacrus.json create mode 100644 event/Grudge Match Qurupeco.json create mode 100644 event/Grudge Match Rathian.json create mode 100644 event/Grudge Match Sea Power.json create mode 100644 event/Grudge Match Uragaan.json create mode 100644 event/Grudge Match Wyvern Trio.json create mode 100644 event/Hot Deal.json create mode 100644 event/Lords of the Sea and Sky.json create mode 100644 event/Marine Warfare.json create mode 100644 event/Poached Wyvern Eggs.json create mode 100644 event/Red Hot Party!.json create mode 100644 event/Sea Power.json create mode 100644 event/Shut Up and Fish!.json create mode 100644 event/Speak of the Deviljho.json create mode 100644 event/The Motley Mission.json create mode 100644 event/[MH3SP] Dark Side of the Moon.json create mode 100644 event/trading_post.json delete mode 100644 mh/arena_utils.py diff --git a/dump_quest.py b/dump_quest.py index b3b0935..4d3f4cd 100644 --- a/dump_quest.py +++ b/dump_quest.py @@ -4,6 +4,9 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Quest dumper. +ARENA INFO (under "strategies" are equipment lists) +https://w.atwiki.jp/mh3wii/pages/62.html#id_3bd26e57 + Arena Quest ID List: EA60 EA61 @@ -498,7 +501,7 @@ 'objective_type': Monster.great_jaggi, 'objective_num': 0x02, 'zenny_reward': 4000, - 'hrp_reward': 220, + 'hrp_reward': 440, 'rewards_row_1': [ (ItemsType.great_jagi_claw, 1, 1), (ItemsType.great_jagi_hide, 1, 1), @@ -531,61 +534,62 @@ """ -EVENT QUEST 7: The Phantom Uragaan -Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w +EVENT QUEST 2: Mercy Mission +(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth +from the start. """ -QUEST_EVENT_THE_PHANTOM_URAGAAN = { +QUEST_EVENT_MERCY_MISSION = { 'quest_info': { - 'quest_id': 61007, - 'name': "The Phantom Uragaan", - 'client': "Spoiled Princess", - 'description': "Hunt an Uragaan", + 'quest_id': 61002, + 'name': "Mercy Mission", + 'client': "MH3SP Dev Team", + 'description': "Deliver 10 Monster Guts", 'details': - "Oooh, I just heard they've\n" - "spotted the cutest, tiniest,\n" - "most adorable little Uragaan\n" - "on the Volcano. Hunt me one\n" - "this instant or I will get\n" - "very angry. And if I'm angry,\n" - "Daddy's angry. Now go!", - 'success_message': "Complete the Main Quest.", + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': + "Complete the Main Quest\n" + "and both Subquests.", 'flags': ( (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 1, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) + (1, 1, 1, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 1, 0, 0, 0, 0, 0, 0) ), - 'penalty_per_cart': 3000, - 'quest_fee': 850, - 'time_limit': 50, - 'main_monster_1': Monster.uroktor, - 'main_monster_2': Monster.aptonoth, - 'location': LocationType.QUEST_LOCATION_VOLCANO, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'penalty_per_cart': 600, + 'quest_fee': 150, + 'time_limit': 15, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.epioth, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, 'resources': ResourcesType.low_rank, - 'supply_set_number': 15, + 'supply_set_number': 35, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x1D, - 'summon': 0x00000000, + 'general_enemy_level': 0x0017, + 'summon': 0x64030303, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, 'wave_1_transition_quantity': 0x0000, 'wave_2_transition_type': WaveType.none, 'wave_2_transition_target': 0x0000, 'wave_2_transition_quantity': 0x0000, - 'smallmonster_data_file': 'sm_phantomuragaan.dat', + 'smallmonster_data_file': 'sm_mercymission.dat', }, 'large_monsters': { 'monster_1': { - 'type': Monster.uragaan, + 'type': Monster.royal_ludroth, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x13, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 }, 'monster_2': { 'type': Monster.none, @@ -610,54 +614,64 @@ }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 8800, - 'hrp_reward': 1100, + 'type': 0x00000002, + 'objective_type': ItemsType.monster_guts, + 'objective_num': 0x0A, + 'zenny_reward': 1500, + 'hrp_reward': 70, 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 8, 14), + (ItemsType.steel_eg, 1, 12) ], 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) ], }, 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], + 'description': "Deliver 12 Red Coral Stones", + 'type': 0x00000002, + 'objective_type': ItemsType.red_coral_stone, + 'objective_num': 0x0C, + 'zenny_reward': 1200, + 'hrp_reward': 55, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 1, 14), + (ItemsType.steel_eg, 1, 12) + ], }, 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], + 'description': "Deliver 3 Goldenfish", + 'type': 0x00000002, + 'objective_type': ItemsType.goldenfish, + 'objective_num': 0x03, + 'zenny_reward': 2000, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], }, }, 'unknown': { # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, + 'unk_12': 0x00000003, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, @@ -667,10 +681,11 @@ """ -EVENT QUEST 8: Blood Sport -Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 +EVENT QUEST 3: Animal Attractions +Quest description from https://www.youtube.com/watch?v=uvMYbmIl08E&t=12s + Thanks to Goabie """ -QUEST_EVENT_BLOOD_SPORT = { +QUEST_EVENT_ANIMAL_ATTRACTIONS = { 'small_monsters': [ [ # Area 0 @@ -678,119 +693,5740 @@ [ # Area 1 { - 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, - 'variant': 3,'room': 1,'quantity': -1, - 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, ], - ], - 'quest_info': { - 'quest_id': 61008, - 'name': "Blood Sport", - 'client': "Spoiled Princess", - 'description': - "Hunt an Uragaan\n" - "and a Diablos", - 'details': - "Oh, boo! I'm tired of watching\n" - "run-of-the-mill hunts. The\n" - "Diablos and the Uragaan are\n" - "supposed to be the ultimate\n" - "monster duo. I'd love to watch\n" - "them maim some foolish hunter!\n" - "Do put on a good show...", - 'success_message': "Complete the Main Quest.", - 'flags': ( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 6000, - 'quest_fee': 1750, - 'time_limit': 50, - 'main_monster_1': Monster.uragaan, - 'main_monster_2': Monster.diablos, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001D, - 'summon': 0x00000000, - 'wave_1_transition_type': WaveType.none, - 'wave_1_transition_target': 0x0000, - 'wave_1_transition_quantity': 0x0000, - 'wave_2_transition_type': WaveType.none, - 'wave_2_transition_target': 0x0000, - 'wave_2_transition_quantity': 0x0000, - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.uragaan, - 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x01, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.diablos, - 'starting_area': 0x00, - 'boss_id': 0x01, - 'spawn_count': 0x01, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.none, - 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x00, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61003, + 'name': "Animal Attractions", + 'client': "Passionate Hunter", + 'description': "Capture 2 Barroth", + 'details': + "You'll need more than big\n" + "muscles and bigger weapons to\n" + "capture two of the fiercest\n" + "monsters around -- you'll need\n" + "finesse! If you live for the\n" + "art and craft of the hunt,\n" + "show me what you got!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5200, + 'quest_fee': 1000, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.altaroth, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 14, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0019, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.barroth, + 'starting_area': 0x01, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.barroth, + 'objective_num': 0x02, + 'zenny_reward': 14400, + 'hrp_reward': 1250, + 'rewards_row_1': [ + (ItemsType.barroth_ridge, 1, 2), + (ItemsType.barroth_shell, 1, 24), + (ItemsType.barroth_claw, 1, 18), + (ItemsType.monster_bone_l, 1, 8), + (ItemsType.monster_bone_m, 1, 8), + (ItemsType.barroth_scalp, 1, 12), + (ItemsType.hellhunter_tag, 1, 28) + ], + 'rewards_row_2': [ + (ItemsType.barroth_ridge, 1, 2), + (ItemsType.barroth_shell, 1, 24), + (ItemsType.barroth_claw, 1, 18), + (ItemsType.monster_bone_l, 1, 8), + (ItemsType.monster_bone_m, 1, 8), + (ItemsType.barroth_scalp, 1, 12), + (ItemsType.hellhunter_tag, 1, 28) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 4: Shut Up and Fish! +Quest description from +""" +QUEST_EVENT_SHUT_UP_AND_FISH = { + 'quest_info': { + 'quest_id': 61004, + 'name': "Shut Up and Fish!", + 'client': "MH3SP Dev Team", + 'description': "Hunt a Gobul", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': + "Complete the Main Quest\n" + "and both Subquests.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 1, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 1900, + 'quest_fee': 550, + 'time_limit': 25, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 35, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0019, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 5600, + 'hrp_reward': 820, + 'rewards_row_1': [ + (ItemsType.black_pearl, 3, 15), + (ItemsType.jumbo_pearl, 1, 5), + (ItemsType.glutton_tuna, 2, 10), + (ItemsType.popfish, 3, 20), + (ItemsType.burst_arowana, 2, 7), + (ItemsType.bomb_arowana, 2, 10), + (ItemsType.scatterfish, 2, 13), + (ItemsType.small_goldenfish, 1, 20) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 4 Goldenfish", + 'type': 0x00000002, + 'objective_type': ItemsType.goldenfish, + 'objective_num': 0x04, + 'zenny_reward': 2400, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_2': { + 'description': "Fish out Gobul once", + 'type': 0x00001000, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 1200, + 'hrp_reward': 60, + 'rewards_row_1': [ + (ItemsType.black_pearl, 3, 15), + (ItemsType.jumbo_pearl, 1, 5), + (ItemsType.glutton_tuna, 2, 10), + (ItemsType.popfish, 3, 20), + (ItemsType.burst_arowana, 2, 7), + (ItemsType.bomb_arowana, 2, 10), + (ItemsType.scatterfish, 2, 13), + (ItemsType.small_goldenfish, 1, 20) + ], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 5: The Motley Mission +Quest description from https://www.youtube.com/watch?v=VOqSv-XAvlU +""" +QUEST_EVENT_MOTLEY_MISSION = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61005, + 'name': "The Motley Mission", + 'client': "Deserted Island Sailor", + 'description': + "Hunt 2 Royal Ludroth\n" + "", + 'details': + "Wanna hear the Hunting Fleet's\n" + "latest shanty? No? Too bad:\n" + "\"Bow, port, starboard, stern,\n" + "fishin' stinks at every turn.\n" + "Our motley crew has one wish:\n" + "hey, monsters, QUIT SCARIN'\n" + "DA FISH!\" Catchy, aye?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3000, + 'quest_fee': 800, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x27, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x27, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x02, + 'zenny_reward': 8000, + 'hrp_reward': 960, + 'rewards_row_1': [ + (ItemsType.black_pearl, 1, 20), + (ItemsType.jumbo_pearl, 1, 8), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.r_ludroth_claw, 1, 24), + (ItemsType.r_ludroth_scale, 1, 17), + (ItemsType.spongy_hide, 8, 10), + (ItemsType.r_ludroth_crest, 1, 7) + ], + 'rewards_row_2': [ + (ItemsType.black_pearl, 1, 20), + (ItemsType.jumbo_pearl, 1, 8), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.r_ludroth_claw, 1, 24), + (ItemsType.r_ludroth_scale, 1, 17), + (ItemsType.spongy_hide, 8, 10), + (ItemsType.r_ludroth_crest, 1, 7) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 6: Cold Call +Quest description from https://youtu.be/Z4CeGozzpmM?feature=shared&t=16 +""" +QUEST_EVENT_COLD_CALL = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.popo,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -559.73,'pos_y': 20.32,'pos_z': -979.26, + 'rot_x': 0,'rot_y': 352,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 1,'quantity': -1, + 'pos_x': 207.09,'pos_y': 5.00,'pos_z': -616.77, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 1189.65,'pos_y': 10.65,'pos_z': -1620.63, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 760.17,'pos_y': 27.35,'pos_z': -1651.16, + 'rot_x': 0,'rot_y': -22,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 724.92,'pos_y': 2.63,'pos_z': -1902.14, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1433.39,'pos_y': 13.81,'pos_z': 1144.14, + 'rot_x': 0,'rot_y': 426,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1297.70,'pos_y': 12.96,'pos_z': 918.99, + 'rot_x': 0,'rot_y': 477,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1437.67,'pos_y': 27.98,'pos_z': 806.39, + 'rot_x': 0,'rot_y': 534,'rot_z': 0, + }, + + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 1137.17,'pos_y': 5.05,'pos_z': 768.87, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 0,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': 14.17,'pos_y': 46.50,'pos_z': 1833.63, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 2,'quantity': -1, + 'pos_x': 556.11,'pos_y': 18.99,'pos_z': 1106.89, + 'rot_x': 0,'rot_y': 728,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': -1739.64,'pos_y': 34.73,'pos_z': 1109.13, + 'rot_x': 0,'rot_y': -102,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': 969.57,'pos_y': 0.50,'pos_z': -1964.12, + 'rot_x': 0,'rot_y': -102,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 3, + 'pos_x': 3146.44,'pos_y': 40.98,'pos_z': 314.53, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': 3471.39,'pos_y': 7.00,'pos_z': -709.74, + 'rot_x': 0,'rot_y': -136,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3589.04,'pos_y': 5.00,'pos_z': -3259.04, + 'rot_x': 0,'rot_y': -11,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3306.99,'pos_y': 5.00,'pos_z': -3166.77, + 'rot_x': 0,'rot_y': -34,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3546.64,'pos_y': 15.73,'pos_z': -3692.10, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 3742.35,'pos_y': 29.38,'pos_z': -3606.37, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 76.48,'pos_y': 18.62,'pos_z': 20.74, + 'rot_x': 0,'rot_y': 298,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 643.46,'pos_y': 0.00,'pos_z': -353.74, + 'rot_x': 0,'rot_y': 25696,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 7, + 'pos_x': 345.94,'pos_y': 3.39,'pos_z': 236.08, + 'rot_x': 0,'rot_y': -59,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 4, + 'pos_x': 1276.36,'pos_y': 10.24,'pos_z': -299.36, + 'rot_x': 0,'rot_y': -19,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 3776.99,'pos_y': 0.61,'pos_z': -701.98, + 'rot_x': 0,'rot_y': 46555,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 3282.63,'pos_y': 0.00,'pos_z': 479.04, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 2717.68,'pos_y': 0.60,'pos_z': -124.31, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 4, + 'pos_x': -629.64,'pos_y': 1496.43,'pos_z': -347.36, + 'rot_x': 0,'rot_y': 5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 4, + 'pos_x': -380.25,'pos_y': 1428.15,'pos_z': -1054.46, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 4169.78,'pos_y': 7.24,'pos_z': -2848.38, + 'rot_x': 0,'rot_y': 182,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': 1700.26,'pos_y': 0.00,'pos_z': 438.18, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -2452.98,'pos_y': 44.18,'pos_z': -579.15, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 103.34,'pos_y': 41.02,'pos_z': -1208.04, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.baggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -11.26,'pos_y': -15.36,'pos_z': 157.88, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -1291.40,'pos_y': 4.00,'pos_z': 509.01, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -855.80,'pos_y': 0.48,'pos_z': -1393.44, + 'rot_x': 0,'rot_y': 159,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -525.73,'pos_y': -4.16,'pos_z': -1264.10, + 'rot_x': 0,'rot_y': -182,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -574.99,'pos_y': -4.64,'pos_z': -1717.30, + 'rot_x': 0,'rot_y': 159,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 5,'quantity': -1, + 'pos_x': 865.61,'pos_y': -4.30,'pos_z': -267.32, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 5,'quantity': -1, + 'pos_x': -1246.40,'pos_y': 6.31,'pos_z': -1119.90, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -1266.86,'pos_y': 17.79,'pos_z': 1426.87, + 'rot_x': 0,'rot_y': 26038,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -1838.98,'pos_y': -0.78,'pos_z': -1385.65, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 1, + 'pos_x': -1219.15,'pos_y': -2.77,'pos_z': -1722.55, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1068.11,'pos_y': -9.24,'pos_z': -712.22, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 784.49,'pos_y': -8.94,'pos_z': 187.09, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 6,'quantity': -1, + 'pos_x': 758.48,'pos_y': 20.97,'pos_z': -936.30, + 'rot_x': 0,'rot_y': -125,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1495.12,'pos_y': 21.92,'pos_z': -1641.55, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': -1936.97,'pos_y': 7.33,'pos_z': -548.03, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': -1706.10,'pos_y': 2.87,'pos_z': 1374.15, + 'rot_x': 0,'rot_y': 136,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 4, + 'pos_x': 399.71,'pos_y': 0.00,'pos_z': -910.88, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -776.39,'pos_y': 27.75,'pos_z': 24.70, + 'rot_x': 0,'rot_y': 23347,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': -1321.35,'pos_y': 97.17,'pos_z': 214.45, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -1395.61,'pos_y': 88.08,'pos_z': -1084.80, + 'rot_x': 0,'rot_y': 30646,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61006, + 'name': "Cold Call", + 'client': "Tundra-expedition Member", + 'description': "Hunt a Gig., Bar. & bird wyv.", + 'details': + "It was just a typical sub-zero\n" + "night in the Tundra. But then,\n" + "BOOM! The sky flashed and the\n" + "ground quaked, like something\n" + "big had crashed down. Then the\n" + "monsters came. Help! We can't\n" + "work under these conditions!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1600, + 'time_limit': 50, + 'main_monster_1': Monster.popo, + 'main_monster_2': Monster.giggi, + 'location': LocationType.QUEST_LOCATION_TUNDRA, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 8, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_baggi, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x22, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.gigginox, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x22, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x23, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.great_baggi, + 'objective_num': 0x01, + 'zenny_reward': 16000, + 'hrp_reward': 2240, + 'rewards_row_1': [ + (ItemsType.barioth_pelt, 1, 2), + (ItemsType.uncanny_hide, 1, 12), + (ItemsType.great_bagi_claw, 1, 20), + (ItemsType.shining_charm, 1, 7), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.frost_sac, 1, 5), + (ItemsType.lightcrystal, 1, 10), + (ItemsType.isisium, 1, 5), + (ItemsType.dark_metal, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.barioth_pelt, 1, 2), + (ItemsType.uncanny_hide, 1, 12), + (ItemsType.great_bagi_claw, 1, 20), + (ItemsType.shining_charm, 1, 7), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.frost_sac, 1, 5), + (ItemsType.lightcrystal, 1, 10), + (ItemsType.isisium, 1, 5), + (ItemsType.dark_metal, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.gigginox, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 7: The Phantom Uragaan +Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w +""" +QUEST_EVENT_THE_PHANTOM_URAGAAN = { + 'quest_info': { + 'quest_id': 61007, + 'name': "The Phantom Uragaan", + 'client': "Spoiled Princess", + 'description': "Hunt an Uragaan", + 'details': + "Oooh, I just heard they've\n" + "spotted the cutest, tiniest,\n" + "most adorable little Uragaan\n" + "on the Volcano. Hunt me one\n" + "this instant or I will get\n" + "very angry. And if I'm angry,\n" + "Daddy's angry. Now go!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 1, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3000, + 'quest_fee': 850, + 'time_limit': 50, + 'main_monster_1': Monster.uroktor, + 'main_monster_2': Monster.aptonoth, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 15, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x1D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_phantomuragaan.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x13, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 8800, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 8: Blood Sport +Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 +""" +QUEST_EVENT_BLOOD_SPORT = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -1404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -3404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -5404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -4404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -4038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61008, + 'name': "Blood Sport", + 'client': "Spoiled Princess", + 'description': + "Hunt an Uragaan\n" + "and a Diablos", + 'details': + "Oh, boo! I'm tired of watching\n" + "run-of-the-mill hunts. The\n" + "Diablos and the Uragaan are\n" + "supposed to be the ultimate\n" + "monster duo. I'd love to watch\n" + "them maim some foolish hunter!\n" + "Do put on a good show...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1750, + 'time_limit': 50, + 'main_monster_1': Monster.uragaan, + 'main_monster_2': Monster.diablos, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 17600, + 'hrp_reward': 1760, + 'rewards_row_1': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 8, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 1, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.diablos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 9: Alluring Dress +Quest description from https://www.youtube.com/watch?v=afN7ThaN3Vg&t=18s + thanks to Goabie +""" +QUEST_EVENT_ALLURING_DRESS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -1,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -0042.7, + 'rot_x': 0,'rot_y': -161,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -2042.7, + 'rot_x': 0,'rot_y': -21,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -2200.5,'pos_y': -2538.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -1,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -2400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -2400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2200.5,'pos_y': -2538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': 1400.5,'pos_y': -1038.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -21,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + ], + ], + 'quest_info': { + 'quest_id': 61009, + 'name': "Alluring Dress", + 'client': "Elder Princess", + 'description': + "Hunt 30 Sharq", + 'details': + "My sister's interest in\n" + "monsters is beginning to\n" + "become scandalous! She simply\n" + "must find a husband --\n" + "hopefully at the next ball. We\n" + "need enough Sharqskin for her\n" + "dress, so please slay 30 fish!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (1, 1, 1, 0, 1, 1, 1, 1) + (1, 0, 0, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1500, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.fish, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NO_ARMOR, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x6401010C, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.fish, + 'objective_num': 0x1E, + 'zenny_reward': 4000, + 'hrp_reward': 120, + 'rewards_row_1': [ + (ItemsType.armor_stone, 1, 1), + (ItemsType.immunizer, 1, 5), + (ItemsType.sharpened_fang, 1, 16), + (ItemsType.sharqskin, 1, 24), + (ItemsType.raw_meat, 2, 12), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.sharq_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.armor_stone, 1, 1), + (ItemsType.immunizer, 1, 5), + (ItemsType.sharpened_fang, 1, 16), + (ItemsType.sharqskin, 1, 24), + (ItemsType.raw_meat, 2, 12), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.sharq_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + +""" +EVENT QUEST 10: Gobuled Everything in Sight +Quest description from https://www.youtube.com/watch?v=2_4o2zaKM8M + thanks to "kazuma_6969" +""" +QUEST_EVENT_GOBULED_EVERYTHING_IN_SIGHT = { + 'quest_info': { + 'quest_id': 61010, + 'name': "Gobuled Everything in Sight", + 'client': "Argosy Captain", + 'description': "Hunt a Gobul", + 'details': + "Taihen! My small ships all\n" + "gobbled by huge Gobul! The\n" + "crew all escaped, but goods\n" + "are in fish's stomach, yes --\n" + "even some are super-rare items\n" + "there! Only hunters can get my\n" + "items back. Onegai!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1900, + 'quest_fee': 550, + 'time_limit': 50, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 25, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0020, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x20, # 0x01 through 0x3c + 'size': 0x96, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 5600, + 'hrp_reward': 1230, + 'rewards_row_1': [ + (ItemsType.rustshard, 1, 15), + (ItemsType.gobul_fin, 1, 13), + (ItemsType.gobul_spike, 1, 15), + (ItemsType.mystery_charm, 1, 25), + (ItemsType.gobul_whisker, 1, 12), + (ItemsType.shining_charm, 1, 10), + (ItemsType.gobul_lantern, 1, 10) + ], + 'rewards_row_2': [ + (ItemsType.rustshard, 1, 15), + (ItemsType.gobul_fin, 1, 13), + (ItemsType.gobul_spike, 1, 15), + (ItemsType.mystery_charm, 1, 25), + (ItemsType.gobul_whisker, 1, 12), + (ItemsType.shining_charm, 1, 10), + (ItemsType.gobul_lantern, 1, 10) + ], + }, + 'subquest_1': { + 'description': "Destroy Gobul's lantern", + 'type': 0x00000204, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 800, + 'hrp_reward': 100, + 'rewards_row_1': [ + (ItemsType.gobul_fin, 1, 10), + (ItemsType.gobul_spike, 1, 24), + (ItemsType.gobul_hide, 1, 20), + (ItemsType.paralysis_sac, 1, 28), + (ItemsType.monster_bone_l, 1, 18) + ], + }, + 'subquest_2': { + 'description': "Fish out Gobul once", + 'type': 0x00001000, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 1200, + 'hrp_reward': 60, + 'rewards_row_1': [ + (ItemsType.gobul_fin, 1, 10), + (ItemsType.gobul_spike, 1, 24), + (ItemsType.gobul_hide, 1, 20), + (ItemsType.paralysis_sac, 1, 28), + (ItemsType.monster_bone_l, 1, 18) + ], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 11: Poached Wyvern Eggs +Quest description from https://www.youtube.com/watch?v=1GuwMhI6Xy8 + Thanks to "kazuma_6969" +""" +QUEST_EVENT_POACHED_WYVERN_EGGS = { + 'small_monsters': [ + # ----- WAVE 1 ----- + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -5057.57,'pos_y': -2.26,'pos_z': -5940.68, + 'rot_x': 0,'rot_y': -68,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -4811.71,'pos_y': -66.91,'pos_z': -6502.93, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 3, + 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, + 'rot_x': 0,'rot_y': 455,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -4409.86,'pos_y': 160.61,'pos_z': 3585.26, + 'rot_x': 0,'rot_y': -164,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -2714.98,'pos_y': 150.44,'pos_z': 2758.35, + 'rot_x': 0,'rot_y': -244,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -3714.37,'pos_y': 77.64,'pos_z': 2717.77, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 4, + 'pos_x': 2690.34,'pos_y': 20.00,'pos_z': -843.30, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': 3, + 'pos_x': 1508.85,'pos_y': 0.71,'pos_z': 933.94, + 'rot_x': 0,'rot_y': 250,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': 948.50,'pos_y': -19.00,'pos_z': -894.84, + 'rot_x': 0,'rot_y': -307,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': 2, + 'pos_x': -671.47,'pos_y': -14.07,'pos_z': 468.25, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': -877.96,'pos_y': 2.00,'pos_z': 1397.25, + 'rot_x': 0,'rot_y': -125,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 5, + 'pos_x': -1213.07,'pos_y': 2.00,'pos_z': 704.80, + 'rot_x': 0,'rot_y': 312,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1976.37,'pos_y': 2.00,'pos_z': 1759.45, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 2, + 'pos_x': -2320.33,'pos_y': 2.00,'pos_z': 2294.16, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3073.44, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 3, + 'pos_x': -442.09,'pos_y': 16.00,'pos_z': 734.60, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1122.44,'pos_y': 16.00,'pos_z': 548.27, + 'rot_x': 0,'rot_y': 182,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1077.87,'pos_y': 16.00,'pos_z': 1238.55, + 'rot_x': 0,'rot_y': 307,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': -573.41,'pos_y': 16.00,'pos_z': 1474.43, + 'rot_x': 0,'rot_y': 392,'rot_z': 0, + }, + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 965.46,'pos_y': 27.06,'pos_z': 892.53, + 'rot_x': 0,'rot_y': 563,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 732.00,'pos_y': 24.88,'pos_z': 1123.58, + 'rot_x': 0,'rot_y': 637,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 6, + 'pos_x': 962.01,'pos_y': 19.44,'pos_z': -149.63, + 'rot_x': 0,'rot_y': 540,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': 220.21,'pos_y': 20.45,'pos_z': -417.64, + 'rot_x': 0,'rot_y': 557,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -439.60,'pos_y': 13.03,'pos_z': 98.15, + 'rot_x': 0,'rot_y': 631,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': -237.23,'pos_y': 2.00,'pos_z': 803.55, + 'rot_x': 0,'rot_y': 648,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -2085.64,'pos_y': -283.99,'pos_z': 1193.70, + 'rot_x': 0,'rot_y': -204,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -2525.41,'pos_y': -190.61,'pos_z': -207.68, + 'rot_x': 0,'rot_y': -51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -2950.76,'pos_y': -249.78,'pos_z': 505.61, + 'rot_x': 0,'rot_y': 204,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -1914.32,'pos_y': -281.12,'pos_z': 889.95, + 'rot_x': 0,'rot_y': 329,'rot_z': 0, + }, + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + # ----- WAVE 2 ----- + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -5057.57,'pos_y': -2.26,'pos_z': -5940.68, + 'rot_x': 0,'rot_y': -68,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -4811.71,'pos_y': -66.91,'pos_z': -6502.93, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -6114.99,'pos_y': 1.01,'pos_z': -305.99, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': -5573.24,'pos_y': 28.24,'pos_z': 89.46, + 'rot_x': 0,'rot_y': 62,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': -5266.61,'pos_y': 18.27,'pos_z': -366.28, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -4974.18,'pos_y': 24.04,'pos_z': 118.41, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -4409.86,'pos_y': 160.61,'pos_z': 3585.26, + 'rot_x': 0,'rot_y': -164,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -2714.98,'pos_y': 150.44,'pos_z': 2758.35, + 'rot_x': 0,'rot_y': -244,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -3714.37,'pos_y': 77.64,'pos_z': 2717.77, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 4, + 'pos_x': -2866.17,'pos_y': 4.00,'pos_z': 207.60, + 'rot_x': 0,'rot_y': -22,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -3281.49,'pos_y': 5.72,'pos_z': 1054.53, + 'rot_x': 0,'rot_y': -119,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -2077.49,'pos_y': -0.82,'pos_z': 614.59, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 3, + 'pos_x': 1844.04,'pos_y': 13.37,'pos_z': -1285.39, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 1, + 'pos_x': 2591.03,'pos_y': -11.64,'pos_z': -1490.38, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 4, + 'pos_x': -3806.09,'pos_y': 2.00,'pos_z': 1899.19, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -2228.14,'pos_y': 2.00,'pos_z': 2084.72, + 'rot_x': 0,'rot_y': 278,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -3075.68,'pos_y': 2.00,'pos_z': 2687.36, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': -4162.06,'pos_y': 2.00,'pos_z': 2924.56, + 'rot_x': 0,'rot_y': 221,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3073.44, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 6, + 'pos_x': -2138.97,'pos_y': 18.00,'pos_z': -355.64, + 'rot_x': 0,'rot_y': 432,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': -1641.20,'pos_y': 17.36,'pos_z': -875.79, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1951.09,'pos_y': 18.00,'pos_z': -1441.74, + 'rot_x': 0,'rot_y': 506,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': -2578.55,'pos_y': 25.21,'pos_z': -1423.47, + 'rot_x': 0,'rot_y': 540,'rot_z': 0, + }, + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 965.46,'pos_y': 27.06,'pos_z': 892.53, + 'rot_x': 0,'rot_y': 563,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 732.00,'pos_y': 24.88,'pos_z': 1123.58, + 'rot_x': 0,'rot_y': 637,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 9,'quantity': 6, + 'pos_x': -2618.42,'pos_y': 168.02,'pos_z': -385.05, + 'rot_x': 0,'rot_y': 625,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 3, + 'pos_x': -3005.70,'pos_y': 19.00,'pos_z': 276.54, + 'rot_x': 0,'rot_y': 961,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -659.60,'pos_y': 21.89,'pos_z': -1327.15, + 'rot_x': 0,'rot_y': 369,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': -549.09,'pos_y': 15.82,'pos_z': -103.05, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61011, + 'name': "Poached Wyvern Eggs", + 'client': "The Lady Gourmet", + 'description': "Deliver 9 Wyvern Eggs", + 'details': + "Why, hellooo! I mean to hold\n" + "a dinner party, but I've\n" + "discovered the most dreadful\n" + "news -- I don't have enough\n" + "eggs for my recipe! I simply\n" + "mustn't disappoint my guests,\n" + "so please save this supper!", + 'success_message': + "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 1, 0, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 10000, + 'quest_fee': 1200, + 'time_limit': 15, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 31, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x002A, + 'summon': 0x64010129, # 28 (0x1C) or 41 (0x29) + 'wave_1_transition_type': WaveType.item, + 'wave_1_transition_target': ItemsType.wyvern_eg, + 'wave_1_transition_quantity': 0x0001, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000 + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000002, + 'objective_type': ItemsType.wyvern_eg, + 'objective_num': 0x09, + 'zenny_reward': 30000, + 'hrp_reward': 400, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 2 Wyvern Tears", + 'type': 0x00000002, + 'objective_type': ItemsType.wyvern_tear, + 'objective_num': 0x02, + 'zenny_reward': 3200, + 'hrp_reward': 80, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + 'subquest_2': { + 'description': "Sever Rathian's Tail", + 'type': 0x00000204, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, + 'zenny_reward': 1200, + 'hrp_reward': 80, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 12: Speak of the Deviljho +Quest description from https://youtu.be/Py5PkCXhf6w&t=681 +""" +QUEST_EVENT_SPEAK_OF_THE_DEVILJHO = { + 'quest_info': { + 'quest_id': 61012, + 'name': "Speak of the Deviljho", + 'client': "Eccentric Aristocrat", + 'description': "Capture a Deviljho", + 'details': + "Some wyvern named Deviljho has\n" + "Loc Lac hunters fouling their\n" + "armor. I hear it has a taste\n" + "for captured animals. I simply\n" + "must have one! What will I do\n" + "with it? That's for me to know\n" + "and you to NEVER find out!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 7500, + 'quest_fee': 1800, + 'time_limit': 50, + 'main_monster_1': Monster.fish, + 'main_monster_2': Monster.altaroth, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 18, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x34, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 22000, + 'hrp_reward': 1820, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 3), + (ItemsType.deviljho_talon, 1, 16), + (ItemsType.deviljho_scale, 1, 23), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.deviljho_fang, 1, 10), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.lion_kings_seal, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 3), + (ItemsType.deviljho_talon, 1, 16), + (ItemsType.deviljho_scale, 1, 23), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.deviljho_fang, 1, 10), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.lion_kings_seal, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 13: Marine Warfare +Quest description from https://www.youtube.com/watch?v=Gdl8A1AkXU4 + Thanks to kazuma_6969 +""" +QUEST_EVENT_MARINE_WARFARE = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61013, + 'name': "Marine Warfare", + 'client': "Guild Weapons Development", + 'description': + "Hunt 2 Gobul\n" + "", + 'details': + "Seeking hunters to aid in the\n" + "development of underwater\n" + "weaponry by hunting aquatic\n" + "monsters. The Guild will\n" + "provide the venue and the\n" + "monster, but applicants should\n" + "have their own equipment.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5600, + 'quest_fee': 1650, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0036, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 16800, + 'hrp_reward': 1480, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 8), + (ItemsType.gobul_fin_plus, 1, 15), + (ItemsType.gobul_spike_plus, 1, 24), + (ItemsType.gobul_hide_plus, 1, 20), + (ItemsType.paralysis_sac, 1, 8), + (ItemsType.gourmet_voucher, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.shining_charm, 1, 10), + (ItemsType.mystery_charm, 1, 16), + (ItemsType.timeworn_charm, 1, 3), + (ItemsType.monster_bone_m, 2, 23), + (ItemsType.monster_bone_s, 3, 20), + (ItemsType.bone_husk_l, 10, 14), + (ItemsType.bone_husk_s, 18, 14) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 14: Double Diablos +Quest description from https://www.youtube.com/watch?v=l-mqoeORTi8 + Thanks to kazuma_6969 +""" +QUEST_EVENT_DOUBLE_DIABLOS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61014, + 'name': "Double Diablos", + 'client': "Passionate Hunter", + 'description': "Capture 2 Diablos", + 'details': + "One Diablos would dismember\n" + "your average weekend warrior,\n" + "but two Diablos!? Only true\n" + "hunters need apply for this\n" + "Quest. Plan your tactics well,\n" + "and perhaps we can compare\n" + "notes later... if you survive.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 12800, + 'quest_fee': 2600, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x01, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0B + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.diablos, + 'objective_num': 0x02, + 'zenny_reward': 38400, + 'hrp_reward': 1920, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.diablos_ridge, 1, 11), + (ItemsType.diablos_carapace, 1, 20), + (ItemsType.diablos_fang, 1, 18), + (ItemsType.monster_bone_plus, 1, 8), + (ItemsType.diablos_marrow, 1, 7), + (ItemsType.shining_charm, 1, 10), + (ItemsType.soulhunter_tag, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.diablos_ridge, 1, 11), + (ItemsType.diablos_carapace, 1, 20), + (ItemsType.diablos_fang, 1, 18), + (ItemsType.monster_bone_plus, 1, 8), + (ItemsType.diablos_marrow, 1, 7), + (ItemsType.shining_charm, 1, 10), + (ItemsType.soulhunter_tag, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 15: Hot Deal +Quest description from https://www.youtube.com/watch?v=8X4P35Y8p60 + thanks to "kazuma_6969" +""" +QUEST_EVENT_HOT_DEAL = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': -494.25,'pos_y': 47.01,'pos_z': -947.91, + 'rot_x': 0,'rot_y': 112147,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -1361.42,'pos_y': 20.60,'pos_z': -712.51, + 'rot_x': 0,'rot_y': 79456,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 1031.98,'pos_y': 26.73,'pos_z': -1406.32, + 'rot_x': 0,'rot_y': 152977,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 4, + 'pos_x': 3139.21,'pos_y': -16.41,'pos_z': 1809.58, + 'rot_x': 0,'rot_y': 14105,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': 2598.00,'pos_y': 64.57,'pos_z': 2280.01, + 'rot_x': 0,'rot_y': 14478,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': 2184.05,'pos_y': 66.73,'pos_z': 2453.70, + 'rot_x': 0,'rot_y': 11582,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': 2741.80,'pos_y': -53.82,'pos_z': 1680.05, + 'rot_x': 0,'rot_y': 14128,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 6982.80,'pos_y': 73.73,'pos_z': 4494.92, + 'rot_x': 0,'rot_y': 5856,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 7778.32,'pos_y': 66.41,'pos_z': 4957.68, + 'rot_x': 0,'rot_y': 2872,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 8087.79,'pos_y': 83.54,'pos_z': 5160.52, + 'rot_x': 0,'rot_y': 5774,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 8676.94,'pos_y': 515.74,'pos_z': 2473.30, + 'rot_x': 273,'rot_y': 6351,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.rhenoplos,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 672.08,'pos_y': 25.43,'pos_z': 639.95, + 'rot_x': 0,'rot_y': 2264,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1151.12,'pos_y': -43.31,'pos_z': 2402.83, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 1580.62,'pos_y': 129.42,'pos_z': 3042.75, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 1743.00,'pos_y': 339.42,'pos_z': 2633.18, + 'rot_x': 0,'rot_y': 91,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 1303.26,'pos_y': 189.42,'pos_z': 2724.68, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': -1485.68,'pos_y': 36.65,'pos_z': 104.92, + 'rot_x': 0,'rot_y': 3032,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 897.01,'pos_y': 25.14,'pos_z': -27.96, + 'rot_x': 0,'rot_y': 56,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 2948.85,'pos_y': 7.51,'pos_z': 1861.15, + 'rot_x': 0,'rot_y': 20656,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -775.56,'pos_y': 73.07,'pos_z': 542.20, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -3498.99,'pos_y': 67.50,'pos_z': -1218.55, + 'rot_x': 0,'rot_y': 4835,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 486.74,'pos_y': 38.66,'pos_z': -422.06, + 'rot_x': 0,'rot_y': 1331,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 2864.76,'pos_y': 49.34,'pos_z': -1059.79, + 'rot_x': 0,'rot_y': 7296,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 1202.49,'pos_y': 57.63,'pos_z': -1571.42, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -1733.55,'pos_y': 56.88,'pos_z': -1510.18, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 393.15,'pos_y': -35.75,'pos_z': 1076.53, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -1170.83,'pos_y': -30.77,'pos_z': 447.51, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 1020.10,'pos_y': 4.72,'pos_z': -202.83, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -435.28,'pos_y': -28.37,'pos_z': -1280.39, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 3, + 'pos_x': 95.05,'pos_y': -6.35,'pos_z': 228.22, + 'rot_x': 0,'rot_y': 1399,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': -2114.33,'pos_y': 17.37,'pos_z': 268.38, + 'rot_x': 0,'rot_y': 19692,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 1, + 'pos_x': -1877.72,'pos_y': -22.42,'pos_z': 1532.47, + 'rot_x': 0,'rot_y': 32312,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 7,'quantity': 1, + 'pos_x': 625.43,'pos_y': 3.37,'pos_z': -496.28, + 'rot_x': 0,'rot_y': 6283,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': -1447.72,'pos_y': 21.43,'pos_z': 61.89, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 316.55,'pos_y': -3.36,'pos_z': -1209.27, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 1008.65,'pos_y': -9.18,'pos_z': 1099.80, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 4, + 'pos_x': 728.75,'pos_y': -19.44,'pos_z': 1581.60, + 'rot_x': 0,'rot_y': 1581.60,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -375.43,'pos_y': 6.66,'pos_z': 301.92, + 'rot_x': 0,'rot_y': 40860,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 479.45,'pos_y': 30.53,'pos_z': -50.40, + 'rot_x': 0,'rot_y': 59178,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': 2190.05,'pos_y': -6.53,'pos_z': 1552.73, + 'rot_x': 0,'rot_y': 24814,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 9,'quantity': 2, + 'pos_x': 1226.78,'pos_y': 14.44,'pos_z': -971.03, + 'rot_x': 0,'rot_y': 49126,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 3, + 'pos_x': 30.91,'pos_y': 11.00,'pos_z': -556.52, + 'rot_x': 0,'rot_y': 19871,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + ], + 'quest_info': { + 'quest_id': 61015, + 'name': "Hot Deal", + 'client': "Shady Merchant", + 'description': "Hunt 2 Agnaktor", + 'details': + "A coupla Agnaktor are meltin'\n" + "my profits on the Volcano,\n" + "see? Deal with 'em, and I'll\n" + "give you a weapon recipe I...\n" + "acquired. They say this\n" + "armament can bring wealth,\n" + "or a mysterious death...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5000, + 'quest_fee': 2750, + 'time_limit': 50, + 'main_monster_1': Monster.uroktor, + 'main_monster_2': Monster.rhenoplos, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 27, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x39, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000 + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x02, + 'level': 0x39, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x02, + 'zenny_reward': 13800, + 'hrp_reward': 1240, + 'rewards_row_1': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Hunt an Agnaktor", + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 13800, + 'hrp_reward': 1240, + 'rewards_row_1': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 16: Sea Power +Quest description from https://www.youtube.com/watch?v=oQL3NtB_GMM + Thanks to kazuma_6969 +""" +QUEST_EVENT_SEA_POWER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61016, + 'name': "Sea Power", + 'client': "Retired Hunter", + 'description': + "Hunt 2 Lagiacrus\n" + "", + 'details': + "I once knew a fool of a hunter\n" + "who found a legendary clue --\n" + "but paid for it with his life.\n" + "He left those plans behind.\n" + "They're useless to a retired\n" + "hunter like me, so I figured\n" + "I'd pass them to another fool.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3800, + 'quest_fee': 2250, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0036, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x02, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x02, + 'zenny_reward': 11400, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + 'rewards_row_2': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + }, + 'subquest_1': { + 'description': "Hunt a Lagiacrus", + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 11400, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 17: Flooded Forest Free-For-All +Quest description from https://www.youtube.com/watch?v=mWHonz4dXHk + thanks to "kazuma_6969" +""" +QUEST_EVENT_FF_FREE_FOR_ALL = { + 'quest_info': { + 'quest_id': 61017, + 'name': "Flooded Forest Free-For-All", + 'client': "Argosy Captain", + 'description': "Hunt a Royal L., Lag. & Gobul", + 'details': + "Taihen! Means very bad, yes?\n" + "Flooded Forest overrun by pack\n" + "of leviathans -- Argosy cannot\n" + "get anywhere near area! Big\n" + "problem for trade, yes? Only\n" + "hunters can return fair seas\n" + "to Flooded Forest. Onegai!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 9000, + 'quest_fee': 2550, + 'time_limit': 50, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 25800, + 'hrp_reward': 2600, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" + +EVENT QUEST 18: Rage Match +Quest description from https://www.youtube.com/watch?v=rbbiLgsAoGU + thanks to "kazuma_6969" +(INCOMPLETE) Second deviljho does not spawn on a delay. +""" +QUEST_EVENT_RAGE_MATCH = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61018, + 'name': "Rage Match", + 'client': "Arena Manager", + 'description': "Hunt 2 Deviljho", + 'details': + "We've all heard of that\n" + "outrageous dragon of rage,\n" + "the Deviljho! Now, we've got\n" + "not one -- but two -- stalking\n" + "the Arena! What hunter has the\n" + "cojones to challenge these\n" + "pernicious predators? Not me.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 13000, + 'quest_fee': 3600, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 244, + 'summon': 0x00000000, # 0x64010232, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_2': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x5A, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x02, + 'zenny_reward': 36000, + 'hrp_reward': 2880, + 'rewards_row_1': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 19: Lords of the Sea and Sky +Quest description from https://www.youtube.com/watch?v=x_uN2UtCA9Y + Thanks to "kazuma_6969" +""" +QUEST_EVENT_LORDS_OF_THE_SEA_AND_SKY = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61019, + 'name': "Lords of the Sea and Sky", + 'client': "Arena Manager", + 'description': + "Hunt a Lagiacrus\n" + "and a Rathalos", + 'details': + "In the Arena tonight, reunited\n" + "and it feels so--gahh! It's\n" + "the king and lord of sky and\n" + "sea, Rathalos and Lagiacrus!\n" + "Their victims: our hunters!\n" + "Prepare for a bout that'll\n" + "go down in hunting history!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 7800, + 'quest_fee': 2300, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003C, + 'summon': 0x64010332, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 23400, + 'hrp_reward': 1760, + 'rewards_row_1': [ + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.shell_shocker_plus, 1, 14), + (ItemsType.rathaloscarapace, 1, 23), + (ItemsType.rathalos_scale_plus, 1, 15), + (ItemsType.rathalos_ruby, 1, 4), + (ItemsType.lagia_sapphire, 1, 4), + (ItemsType.mystery_charm, 1, 17), + (ItemsType.shining_charm, 1, 8), + (ItemsType.timeworn_charm, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.shining_charm, 1, 25), + (ItemsType.mystery_charm, 1, 18), + (ItemsType.timeworn_charm, 1, 5), + (ItemsType.adv_armor_sphere, 1, 12), + (ItemsType.hrd_armor_sphere, 1, 20), + (ItemsType.hvy_armor_sphere, 1, 6), + (ItemsType.rustshard, 1, 14) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 20: World Eater +Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 +(INCOMPLETE) Needs invading queropeco +""" +QUEST_EVENT_WORLD_EATER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 247.42,'pos_y': 560.37,'pos_z': -3613.80, + 'rot_x': 0,'rot_y': -119,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 3, + 'pos_x': -474.90,'pos_y': 491.91,'pos_z': -3857.25, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 3, + 'pos_x': 897.01,'pos_y': 418.60,'pos_z': -4931.83, + 'rot_x': 0,'rot_y': -284,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': 219.95,'pos_y': 402.97,'pos_z': -4449.25, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 3, + 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, + 'rot_x': 0,'rot_y': 455,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.aptonoth,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 2567.38,'pos_y': -4.58,'pos_z': -1280.44, + 'rot_x': 0,'rot_y': 352,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 2119.14,'pos_y': -14.21,'pos_z': -787.00, + 'rot_x': 0,'rot_y': 335,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': 39.65,'pos_y': 2.00,'pos_z': 2631.32, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -538.14,'pos_y': 2.00,'pos_z': 2165.99, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 360.98,'pos_y': 2.00,'pos_z': 820.71, + 'rot_x': 0,'rot_y': -187,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3071.35, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 3, + 'pos_x': 1059.13,'pos_y': 5.78,'pos_z': -3228.47, + 'rot_x': 0,'rot_y': -261,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': 390.83,'pos_y': 20.44,'pos_z': -746.07, + 'rot_x': 0,'rot_y': -176,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -482.31,'pos_y': 16.39,'pos_z': 5.01, + 'rot_x': 0,'rot_y': 250,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 5, + 'pos_x': -1846.87,'pos_y': -263.00,'pos_z': 931.19, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 3, + 'pos_x': -3160.63,'pos_y': -206.32,'pos_z': -355.73, + 'rot_x': 0,'rot_y': 307,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -1949.45,'pos_y': -276.13,'pos_z': 1228.73, + 'rot_x': 0,'rot_y': 216,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1552.64,'pos_y': -186.42,'pos_z': 1504.30, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1352.11,'pos_y': -174.80,'pos_z': 1441.92, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -653.75,'pos_y': 306.58,'pos_z': 2295.24, + 'rot_x': 0,'rot_y': 221,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 4, + 'pos_x': -615.28,'pos_y': 96.58,'pos_z': 2086.81, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61020, + 'name': "World Eater", + 'client': "Guildmaster", + 'description': "Hunt a Deviljho", + 'details': + "Emergency! A huge Deviljho has\n" + "appeared. It's twice as big as\n" + "a normal one and it's eating\n" + "everything in sight! Go get\n" + "it! And now, a haiku: A huge\n" + "Deviljho/with no food in its\n" + "stomach/eats the whole island.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1800, + 'time_limit': 50, + 'main_monster_1': Monster.jaggi, + 'main_monster_2': Monster.jaggia, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 31, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0034, + 'summon': 0x64010234, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0xC8, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 18000, + 'hrp_reward': 1800, + 'rewards_row_1': [ + (ItemsType.timeworn_charm, 1, 33), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.deviljho_scalp, 1, 8), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.hvy_armor_sphere, 1, 11), + (ItemsType.shining_charm, 1, 19), + (ItemsType.deviljho_fang, 1, 8) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_scalp, 1, 20), + (ItemsType.timeworn_charm, 1, 34), + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.shining_charm, 1, 11), + (ItemsType.hvy_armor_sphere, 1, 9) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 21: Where Gods Fear To Tread +Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, + thanks to "soulmizute, emperor of the abyss#5094" + and "El Matiah#8904" +""" +QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61021, + 'name': "Where Gods Fear to Tread", + 'client': "Scarlet Mystery Man", + 'description': "Slay the Alatreon", + 'details': + "I've been waiting, hunter. Now\n" + "comes your final challenge:\n" + "Alatreon, a dragon of darkness\n" + "and light. Can mere mortals\n" + "fell an elder dragon feared\n" + "even by the gods? Don't even\n" + "bother saying your prayers...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 0, 0, 1, 0) + ), + 'penalty_per_cart': 14000, + 'quest_fee': 4200, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_SACRED_LAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.shrine, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.alatreon, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0x7D, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.alatreon, + 'objective_num': 0x01, + 'zenny_reward': 42000, + 'hrp_reward': 4200, + 'rewards_row_1': [ + (ItemsType.alatreon_scute, 1, 40), + (ItemsType.brkn_skypiercer, 1, 30), + (ItemsType.alatreon_talon, 1, 10), + (ItemsType.alatreon_plate, 1, 10), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.alatreon_plate, 1, 11), + (ItemsType.brkn_skypiercer, 1, 34), + (ItemsType.alatreon_talon, 1, 39), + (ItemsType.elderdragonblood, 1, 6), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000005, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 21: Red Hot Party! +Quest description from https://www.youtube.com/watch?v=v-pnNyO9-GM, + thanks to "kazuma_6969" +""" +QUEST_EVENT_RED_HOT_PARTY = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': -494.25,'pos_y': 47.01,'pos_z': -947.91, + 'rot_x': 0,'rot_y': 112147,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -1361.42,'pos_y': 20.60,'pos_z': -712.51, + 'rot_x': 0,'rot_y': 79456,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 1031.98,'pos_y': 26.73,'pos_z': -1406.32, + 'rot_x': 0,'rot_y': 152977,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 4, + 'pos_x': 3139.21,'pos_y': -16.41,'pos_z': 1809.58, + 'rot_x': 0,'rot_y': 14105,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': 2598.00,'pos_y': 64.57,'pos_z': 2280.01, + 'rot_x': 0,'rot_y': 14478,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': 2184.05,'pos_y': 66.73,'pos_z': 2453.70, + 'rot_x': 0,'rot_y': 11582,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': 2741.80,'pos_y': -53.82,'pos_z': 1680.05, + 'rot_x': 0,'rot_y': 14128,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 6982.80,'pos_y': 73.73,'pos_z': 4494.92, + 'rot_x': 0,'rot_y': 5856,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 7778.32,'pos_y': 66.41,'pos_z': 4957.68, + 'rot_x': 0,'rot_y': 2872,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 8087.79,'pos_y': 83.54,'pos_z': 5160.52, + 'rot_x': 0,'rot_y': 5774,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 8676.94,'pos_y': 515.74,'pos_z': 2473.30, + 'rot_x': 273,'rot_y': 6351,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.rhenoplos,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 672.08,'pos_y': 25.43,'pos_z': 639.95, + 'rot_x': 0,'rot_y': 2264,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1151.12,'pos_y': -43.31,'pos_z': 2402.83, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 1580.62,'pos_y': 129.42,'pos_z': 3042.75, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 1743.00,'pos_y': 339.42,'pos_z': 2633.18, + 'rot_x': 0,'rot_y': 91,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 1303.26,'pos_y': 189.42,'pos_z': 2724.68, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': -1485.68,'pos_y': 36.65,'pos_z': 104.92, + 'rot_x': 0,'rot_y': 3032,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 897.01,'pos_y': 25.14,'pos_z': -27.96, + 'rot_x': 0,'rot_y': 56,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 2948.85,'pos_y': 7.51,'pos_z': 1861.15, + 'rot_x': 0,'rot_y': 20656,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -775.56,'pos_y': 73.07,'pos_z': 542.20, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -3498.99,'pos_y': 67.50,'pos_z': -1218.55, + 'rot_x': 0,'rot_y': 4835,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 486.74,'pos_y': 38.66,'pos_z': -422.06, + 'rot_x': 0,'rot_y': 1331,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 2864.76,'pos_y': 49.34,'pos_z': -1059.79, + 'rot_x': 0,'rot_y': 7296,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 1202.49,'pos_y': 57.63,'pos_z': -1571.42, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -1733.55,'pos_y': 56.88,'pos_z': -1510.18, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 393.15,'pos_y': -35.75,'pos_z': 1076.53, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -1170.83,'pos_y': -30.77,'pos_z': 447.51, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 1020.10,'pos_y': 4.72,'pos_z': -202.83, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -435.28,'pos_y': -28.37,'pos_z': -1280.39, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 3, + 'pos_x': 95.05,'pos_y': -6.35,'pos_z': 228.22, + 'rot_x': 0,'rot_y': 1399,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': -2114.33,'pos_y': 17.37,'pos_z': 268.38, + 'rot_x': 0,'rot_y': 19692,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 1, + 'pos_x': -1877.72,'pos_y': -22.42,'pos_z': 1532.47, + 'rot_x': 0,'rot_y': 32312,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 7,'quantity': 1, + 'pos_x': 625.43,'pos_y': 3.37,'pos_z': -496.28, + 'rot_x': 0,'rot_y': 6283,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': -1447.72,'pos_y': 21.43,'pos_z': 61.89, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 316.55,'pos_y': -3.36,'pos_z': -1209.27, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 1008.65,'pos_y': -9.18,'pos_z': 1099.80, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 4, + 'pos_x': 728.75,'pos_y': -19.44,'pos_z': 1581.60, + 'rot_x': 0,'rot_y': 1581.60,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -375.43,'pos_y': 6.66,'pos_z': 301.92, + 'rot_x': 0,'rot_y': 40860,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 479.45,'pos_y': 30.53,'pos_z': -50.40, + 'rot_x': 0,'rot_y': 59178,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': 2190.05,'pos_y': -6.53,'pos_z': 1552.73, + 'rot_x': 0,'rot_y': 24814,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 9,'quantity': 2, + 'pos_x': 1226.78,'pos_y': 14.44,'pos_z': -971.03, + 'rot_x': 0,'rot_y': 49126,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 3, + 'pos_x': 30.91,'pos_y': 11.00,'pos_z': -556.52, + 'rot_x': 0,'rot_y': 19871,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + ], + 'quest_info': { + 'quest_id': 61022, + 'name': "Red Hot Party!", + 'client': "Deserted Island Chief", + 'description': "Hunt a Ratha., Urag. & Agnak.", + 'details': + "You're back! While you were\n" + "away, three wyverns moved into\n" + "the volcano and are reeking\n" + "havoc throughout the area!\n" + "We haven't a moment to spare!\n" + "Please get rid of all three\n" + "of them for me and my people!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 15000, + 'quest_fee': 4050, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.felyne, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 27, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0034, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 41000, + 'hrp_reward': 3870, + 'rewards_row_1': [ + (ItemsType.rathaloscarapace, 1, 8), + (ItemsType.rathalos_scale_plus, 1, 8), + (ItemsType.rath_medulla, 1, 8), + (ItemsType.agnaktor_fin_plus, 1, 10), + (ItemsType.agnaktorcarapace, 1, 10), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.uragaan_carapace, 1, 10), + (ItemsType.ancient_shard, 1, 10), + (ItemsType.rathalos_plate, 1, 8), + (ItemsType.uragaan_ruby, 1, 6), + (ItemsType.rathalos_ruby, 1, 6), + (ItemsType.wyvern_stone, 1, 6) + ], + 'rewards_row_2': [ + (ItemsType.rathaloscarapace, 1, 8), + (ItemsType.rathalos_scale_plus, 1, 8), + (ItemsType.rath_medulla, 1, 8), + (ItemsType.agnaktor_fin_plus, 1, 10), + (ItemsType.agnaktorcarapace, 1, 10), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.uragaan_carapace, 1, 10), + (ItemsType.ancient_shard, 1, 10), + (ItemsType.rathalos_plate, 1, 8), + (ItemsType.uragaan_ruby, 1, 6), + (ItemsType.rathalos_ruby, 1, 6), + (ItemsType.wyvern_stone, 1, 6) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 22: Fiery Skies, Frozen Fields +Quest description from https://www.youtube.com/watch?v=KRGHjgHagXY, + thanks to "kazuma_6969" +""" +QUEST_EVENT_FIERY_SKIES_FROZEN_FIELDS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61023, + 'name': "Fiery Skies, Frozen Fields", + 'client': "Deserted Island Maiden", + 'description': + "Hunt a Barioth and\n" + "a Rathalos", + 'details': + "It's time for a FESTIVAL!\n" + "Presenting the King of the\n" + "Skies and the Knight of the\n" + "Tundra -- the flash of fire\n" + "and ice from above and\n" + "below -- only at the arena!\n" + "Do you have what it takes?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 14000, + 'quest_fee': 4200, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003C, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0B + }, + 'monster_2': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } }, 'objective_details': { 'main_quest': { 'type': 0x00000001, - 'objective_type': Monster.uragaan, + 'objective_type': Monster.barioth, 'objective_num': 0x01, - 'zenny_reward': 17600, - 'hrp_reward': 1760, + 'zenny_reward': 42000, + 'hrp_reward': 4290, 'rewards_row_1': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 8, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) + (ItemsType.rathaloscarapace, 2, 25), + (ItemsType.barioth_carapace, 2, 24), + (ItemsType.hrd_armor_sphere, 2, 17), + (ItemsType.hvy_armor_sphere, 1, 15), + (ItemsType.rathalos_ruby, 1, 10), + (ItemsType.wyvern_stone, 1, 9) + ], + 'rewards_row_2': [ + (ItemsType.rathaloscarapace, 2, 25), + (ItemsType.barioth_carapace, 2, 24), + (ItemsType.hrd_armor_sphere, 2, 17), + (ItemsType.hvy_armor_sphere, 1, 15), + (ItemsType.rathalos_ruby, 1, 10), + (ItemsType.wyvern_stone, 1, 9) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +QUEST_EVENT_GREEN_EGGS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61050, + 'name': "[MH3SP] Green Eggs and...", + 'client': "Ze SpyRo", + 'description': + "Hunt a Gigginox\n" + "and an Agnaktor", + 'details': + "Why do we live, only to suffer?\n" + "Only slayers of pig meat know\n" + "these things. Take care, Hunter,\n" + "for those who look to antidote\n" + "herbs may find their breath\n" + "stolen away.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 2400, + 'quest_fee': 200, + 'time_limit': 50, + 'main_monster_1': Monster.gigginox, + 'main_monster_2': Monster.agnaktor, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gigginox, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gigginox, + 'objective_num': 0x01, + 'zenny_reward': 7000, + 'hrp_reward': 950, + 'rewards_row_1': [ + (ItemsType.flabby_hide, 1, 18), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 15), + (ItemsType.agnaktor_shell, 1, 10), + (ItemsType.agnaktor_scale, 1, 16), + (ItemsType.agnaktor_hide, 1, 13), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5) ], 'rewards_row_2': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 1, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) + (ItemsType.flabby_hide, 1, 13), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 10), + (ItemsType.agnaktor_shell, 1, 9), + (ItemsType.agnaktor_scale, 1, 10), + (ItemsType.agnaktor_hide, 1, 10), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5), + (ItemsType.commendation, 1, 20) ], }, 'subquest_1': { 'description': "None", 'type': 0x00000001, - 'objective_type': Monster.diablos, + 'objective_type': Monster.agnaktor, 'objective_num': 0x01, 'zenny_reward': 0, 'hrp_reward': 0x00000000, @@ -800,7 +6436,7 @@ 'description': "None", 'type': 0, 'objective_type': Monster.none, - 'objective_num': 0, + 'objective_num': 0x00, 'zenny_reward': 0, 'hrp_reward': 0x00000000, 'rewards_row_1': [], @@ -818,144 +6454,475 @@ """ -EVENT QUEST 2: Mercy Mission -(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth -from the start. +EVENT QUEST ???: Jump Fourty-Eight Jaggi +Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g +Quest requirements altered to make it possible to win. """ -QUEST_EVENT_MERCY_MISSION = { +QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], 'quest_info': { - 'quest_id': 61002, - 'name': "Mercy Mission", - 'client': "MH3SP Dev Team", - 'description': "Deliver 10 Monster Guts", + 'quest_id': 61001, + 'name': "Jump Fourty-Eight Jaggi", + 'client': "Guild Subcontractor", + 'description': "Hunt 48 Great Jaggi", 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': - "Complete the Main Quest\n" - "and both Subquests.", + "I'm gonna get so fired for\n" + "this... The Great Jaggi some\n" + "hunter brought in just\n" + "escaped. Mind going after\n" + "them? You better hurry,\n" + "though. Bet they've got some\n" + "incredible materials, too.", + 'success_message': "Complete the Main Quest.", 'flags': ( (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 1, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (0, 1, 0, 0, 0, 0, 0, 0) + (1, 0, 1, 0, 0, 0, 1, 1) ), - 'penalty_per_cart': 600, - 'quest_fee': 150, - 'time_limit': 15, - 'main_monster_1': Monster.ludroth, - 'main_monster_2': Monster.epioth, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'penalty_per_cart': 1400, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.melynx, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, 'quest_rank': QuestRankType.star_1, 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, 'resources': ResourcesType.low_rank, - 'supply_set_number': 35, + 'supply_set_number': 19, 'starting_position': StartingPositionType.camp, 'general_enemy_level': 0x0017, - 'summon': 0x64030303, + 'summon': 0x64050219, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, 'wave_1_transition_quantity': 0x0000, 'wave_2_transition_type': WaveType.none, 'wave_2_transition_target': 0x0000, 'wave_2_transition_quantity': 0x0000, - 'smallmonster_data_file': 'sm_mercymission.dat', }, 'large_monsters': { 'monster_1': { - 'type': Monster.royal_ludroth, + 'type': Monster.great_jaggi, 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x01, + 'boss_id': 0xFF, + 'spawn_count': 0x10, 'level': 0x17, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x01 }, 'monster_2': { - 'type': Monster.none, + 'type': Monster.great_jaggi, 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x00, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 }, 'monster_3': { - 'type': Monster.none, + 'type': Monster.great_jaggi, 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x00, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 } }, 'objective_details': { 'main_quest': { - 'type': 0x00000002, - 'objective_type': ItemsType.monster_guts, - 'objective_num': 0x0A, - 'zenny_reward': 1500, - 'hrp_reward': 70, + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x30, + 'zenny_reward': 15000, + 'hrp_reward': 750, 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 8, 14), - (ItemsType.steel_eg, 1, 12) + (ItemsType.great_jagi_claw, 2, 3), + (ItemsType.great_jagi_hide, 2, 12), + (ItemsType.kings_frill, 1, 10), + (ItemsType.rustshard, 1, 20), + (ItemsType.commendation, 1, 12), + (ItemsType.voucher, 2, 18), + (ItemsType.great_jagi_head, 1, 25) ], 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) + (ItemsType.mystery_charm, 1, 1), + (ItemsType.aquaglow_jewel, 1, 1), + (ItemsType.shining_charm, 1, 1), + (ItemsType.armor_sphere, 1, 1), + (ItemsType.armor_sphere_plus, 1, 1) ], }, 'subquest_1': { - 'description': "Deliver 12 Red Coral Stones", - 'type': 0x00000002, - 'objective_type': ItemsType.red_coral_stone, - 'objective_num': 0x0C, - 'zenny_reward': 1200, - 'hrp_reward': 55, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 1, 14), - (ItemsType.steel_eg, 1, 12) - ], - }, - 'subquest_2': { - 'description': "Deliver 3 Goldenfish", - 'type': 0x00000002, - 'objective_type': ItemsType.goldenfish, - 'objective_num': 0x03, - 'zenny_reward': 2000, - 'hrp_reward': 70, + 'description': "Hunt 24 Great Jaggi", + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x18, + 'zenny_reward': 8000, + 'hrp_reward': 255, 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) + (ItemsType.great_jagi_claw, 1, 1), + (ItemsType.great_jagi_hide, 1, 1), + (ItemsType.jagi_scale, 1, 1), + (ItemsType.screamer, 1, 1), + (ItemsType.kings_frill, 1, 1), + (ItemsType.bone_husk_s, 8, 1), + (ItemsType.great_jagi_head, 1, 1) ], }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } }, 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000003, + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, @@ -963,45 +6930,57 @@ } } - """ -EVENT QUEST 18: Flooded Forest Free-For-All -Quest description from https://www.youtube.com/watch?v=mWHonz4dXHk - thanks to "kazuma_6969" +EVENT QUEST ??: Dark Side of the Moon """ -QUEST_EVENT_FF_FREE_FOR_ALL = { +QUEST_EVENT_DARK_SIDE_OF_THE_MOON = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + + ], + [ + + ], + [ + + ] + ], 'quest_info': { - 'quest_id': 61017, - 'name': "Flooded Forest Free-For-All", - 'client': "Argosy Captain", - 'description': "Hunt a Royal L., Lag. & Gobul", + 'quest_id': 61008, + 'name': "[MH3SP] Dark Side of the Moon", + 'client': "Moga Village Chief", + 'description': + "Slay a Ceadeus", 'details': - "Taihen! Means very bad, yes?\n" - "Flooded Forest overrun by pack\n" - "of leviathans -- Argosy cannot\n" - "get anywhere near area! Big\n" - "problem for trade, yes? Only\n" - "hunters can return fair seas\n" - "to Flooded Forest. Onegai!", + "Gambala! The sea drake has\n" + "returned! Moga is barely clinging\n" + "to the island after its last\n" + "appearance -- we need this taken\n" + "care of FAST! Get a group of your\n" + "peers from Loc Lac and get your\n" + "tail back here! PRONTO!", 'success_message': "Complete the Main Quest.", 'flags': ( - (0, 0, 1, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) + (1, 1, 0, 0, 0, 0, 0, 1), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0) ), - 'penalty_per_cart': 9000, - 'quest_fee': 2550, - 'time_limit': 50, - 'main_monster_1': Monster.ludroth, - 'main_monster_2': Monster.kelbi, - 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, - 'quest_rank': QuestRankType.star_5, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.random, - 'general_enemy_level': 0x0040, + 'penalty_per_cart': 10000, + 'quest_fee': 3100, + 'time_limit': 15, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_UW_RUIN, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, # 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0010, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -1009,92 +6988,84 @@ 'wave_2_transition_type': WaveType.none, 'wave_2_transition_target': 0x0000, 'wave_2_transition_quantity': 0x0000, - 'smallmonster_data_file': 'sm_ff_free_for_all.dat', }, 'large_monsters': { 'monster_1': { - 'type': Monster.royal_ludroth, - 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'type': Monster.ceadeus, + 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x1F, # 0x01 through 0x3c + 'level': 0x3C, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.lagiacrus, + 'type': Monster.none, 'starting_area': 0x00, - 'boss_id': 0x01, - 'spawn_count': 0x01, - 'level': 0x1F, # 0x01 through 0x3c - 'size': 0x64, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x00 }, 'monster_3': { - 'type': Monster.gobul, + 'type': Monster.none, 'starting_area': 0x00, - 'boss_id': 0x02, - 'spawn_count': 0x01, - 'level': 0x1F, # 0x01 through 0x3c - 'size': 0x64, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x00 } }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.royal_ludroth, + 'type': 0x00000101, + 'objective_type': Monster.ceadeus, 'objective_num': 0x01, - 'zenny_reward': 25800, - 'hrp_reward': 2600, + 'zenny_reward': 30000, + 'hrp_reward': 1500, 'rewards_row_1': [ - (ItemsType.hrd_armor_sphere, 1, 1), - (ItemsType.hvy_armor_sphere, 1, 5), - (ItemsType.quality_sponge, 1, 14), - (ItemsType.gobul_spike_plus, 1, 20), - (ItemsType.gobul_fin_plus, 1, 7), - (ItemsType.lagiacrus_hide_plus, 1, 10), - (ItemsType.lagiacrus_scale_plus, 1, 8), - (ItemsType.shining_charm, 1, 10), - (ItemsType.black_gem_ticket, 1, 25) + (ItemsType.luminous_organ, 1, 15), + (ItemsType.ceadeus_hide, 1, 25), + (ItemsType.ceadeus_scale, 1, 14), + (ItemsType.deep_dragongem, 1, 15), + (ItemsType.ceadeus_fur, 1, 18), + (ItemsType.elderdragonblood, 1, 13) ], 'rewards_row_2': [ - (ItemsType.hrd_armor_sphere, 1, 1), - (ItemsType.hvy_armor_sphere, 1, 5), - (ItemsType.quality_sponge, 1, 14), - (ItemsType.gobul_spike_plus, 1, 20), - (ItemsType.gobul_fin_plus, 1, 7), - (ItemsType.lagiacrus_hide_plus, 1, 10), - (ItemsType.lagiacrus_scale_plus, 1, 8), - (ItemsType.shining_charm, 1, 10), - (ItemsType.black_gem_ticket, 1, 25) + (ItemsType.sunspire_jewel, 1, 12), + (ItemsType.ceadeus_hide, 1, 18), + (ItemsType.ceadeus_scale, 1, 30), + (ItemsType.monster_bone_l, 1, 15), + (ItemsType.aquaglow_jewel, 1, 25) ], }, 'subquest_1': { 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.lagiacrus, - 'objective_num': 0x01, + 'type': 0x00002000, + 'objective_type': 0x0001, + 'objective_num': 0x00, 'zenny_reward': 0, - 'hrp_reward': 0, + 'hrp_reward': 0x00000000, 'rewards_row_1': [], }, 'subquest_2': { 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.gobul, - 'objective_num': 0x01, + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, 'zenny_reward': 0, - 'hrp_reward': 0, + 'hrp_reward': 0x00000000, 'rewards_row_1': [], - } + }, }, 'unknown': { - # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) - 'unk_12': 0x00000002, + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000005, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, @@ -1102,56 +7073,72 @@ } } +# ---------- ARENA QUESTS ---------- """ - -EVENT QUEST 18: Rage Match -Quest description from https://www.youtube.com/watch?v=rbbiLgsAoGU - thanks to "kazuma_6969" -(INCOMPLETE) Second deviljho does not spawn on a delay. +00 00 00 28 +00 00 00 FF +FF +01 +01 +03 +00 00 00 00 +BF 00 00 00 +C5 9D 74 00 +C5 3E 2B 33 +00 00 00 00 +FF FF A4 00 +00 00 00 00 +FF 00 00 00 +00 00 00 00 """ -QUEST_EVENT_RAGE_MATCH = { + +GRUDGE_MATCH_QURUPECO = { 'small_monsters': [ [ # Area 0 ], [ # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, ], ], 'quest_info': { - 'quest_id': 61018, - 'name': "Rage Match", - 'client': "Arena Manager", - 'description': "Hunt 2 Deviljho", + 'quest_id': 0xEA60, + 'name': "Grudge Match: Qurupeco", + 'client': "Announcer/Receptionist", + 'description': "Slay a Qurupeco", 'details': - "We've all heard of that\n" - "outrageous dragon of rage,\n" - "the Deviljho! Now, we've got\n" - "not one -- but two -- stalking\n" - "the Arena! What hunter has the\n" - "cojones to challenge these\n" - "pernicious predators? Not me.", + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", 'success_message': "Complete the Main Quest.", 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) + (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 13000, - 'quest_fee': 3600, + 'penalty_per_cart': 200, + 'quest_fee': 0, 'time_limit': 50, 'main_monster_1': Monster.none, 'main_monster_2': Monster.none, 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 43, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 244, - 'summon': 0x64010232, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, 'wave_1_transition_quantity': 0x0000, @@ -1161,24 +7148,24 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.deviljho, - 'starting_area': 0x01, - 'boss_id': 0x01, + 'type': Monster.qurupeco, + 'starting_area': 0x00, + 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x3C, # 0x01 through 0x3c + 'level': 0x17, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x0A + 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.deviljho, - 'starting_area': 0x01, - 'boss_id': 0x02, - 'spawn_count': 0x01, - 'level': 0x3C, # 0x01 through 0x3c - 'size': 0x5A, + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x0A + 'size_spread': 0x00 }, 'monster_3': { 'type': Monster.none, @@ -1193,29 +7180,20 @@ }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.deviljho, - 'objective_num': 0x02, - 'zenny_reward': 36000, - 'hrp_reward': 2880, + 'type': 0x00000101, + 'objective_type': Monster.qurupeco, + 'objective_num': 0x01, + 'zenny_reward': 500, + 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.deviljho_fang, 1, 6), - (ItemsType.deviljho_talon, 1, 13), - (ItemsType.deviljho_scale, 1, 26), - (ItemsType.deviljho_hide, 1, 20), - (ItemsType.shining_charm, 1, 6), - (ItemsType.deviljho_gem, 1, 4), - (ItemsType.wyvrnhide_ticket, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.deviljho_fang, 1, 6), - (ItemsType.deviljho_talon, 1, 13), - (ItemsType.deviljho_scale, 1, 26), - (ItemsType.deviljho_hide, 1, 20), - (ItemsType.shining_charm, 1, 6), - (ItemsType.deviljho_gem, 1, 4), - (ItemsType.wyvrnhide_ticket, 1, 25) + (ItemsType.qurupeco_coin, 1, 27), + (ItemsType.qurupeco_coin, 2, 10), + (ItemsType.voucher, 1, 10), + (ItemsType.armor_sphere, 1, 22), + (ItemsType.steel_eg, 1, 16), + (ItemsType.pinnacle_coin, 1, 15) ], + 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", @@ -1223,386 +7201,313 @@ 'objective_type': Monster.none, 'objective_num': 0x00, 'zenny_reward': 0, - 'hrp_reward': 0, + 'hrp_reward': 0x00000000, 'rewards_row_1': [], }, 'subquest_2': { 'description': "None", - 'type': 0, + 'type': 0x00000000, 'objective_type': Monster.none, - 'objective_num': 0, + 'objective_num': 0x00, 'zenny_reward': 0, - 'hrp_reward': 0, + 'hrp_reward': 0x00000000, 'rewards_row_1': [], - } + }, }, 'unknown': { - # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala 'unk_12': 0x00000002, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, 'unk_7': 0x00000000, - } -} - - -""" -EVENT QUEST 20: World Eater -Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 -(INCOMPLETE) Needs invading queropeco -""" -QUEST_EVENT_WORLD_EATER = { - 'small_monsters': [ - [ - # Area 0 - ], - [ - # Area 1 - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 1,'quantity': 1, - 'pos_x': 247.42,'pos_y': 560.37,'pos_z': -3613.80, - 'rot_x': 0,'rot_y': -119,'rot_z': 0, - }, - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 3, - 'pos_x': -474.90,'pos_y': 491.91,'pos_z': -3857.25, - 'rot_x': 0,'rot_y': -267,'rot_z': 0, - }, - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 1,'quantity': 3, - 'pos_x': 897.01,'pos_y': 418.60,'pos_z': -4931.83, - 'rot_x': 0,'rot_y': -284,'rot_z': 0, - }, - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 2, - 'pos_x': 219.95,'pos_y': 402.97,'pos_z': -4449.25, - 'rot_x': 0,'rot_y': 244,'rot_z': 0, - }, - ], - [ - # Area 2 (Area 3 in Deserted Island) - { - 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 2,'quantity': 3, - 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, - 'rot_x': 0,'rot_y': 455,'rot_z': 0, - }, - ], - [ - # Area 3 (Area 2 in Deserted Island) - { - 'type': Monster.aptonoth,'unk1': 0,'unk2': 0xFF, - 'variant': 0,'room': 3,'quantity': -1, - 'pos_x': 2567.38,'pos_y': -4.58,'pos_z': -1280.44, - 'rot_x': 0,'rot_y': 352,'rot_z': 0, - }, - { - 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 3,'quantity': -1, - 'pos_x': 2119.14,'pos_y': -14.21,'pos_z': -787.00, - 'rot_x': 0,'rot_y': 335,'rot_z': 0, - }, - ], - [ - # Area 4 (Area 7 in Deserted Island) - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': 2, - 'pos_x': 39.65,'pos_y': 2.00,'pos_z': 2631.32, - 'rot_x': 0,'rot_y': 113,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': 2, - 'pos_x': -538.14,'pos_y': 2.00,'pos_z': 2165.99, - 'rot_x': 0,'rot_y': -91,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': 1, - 'pos_x': 360.98,'pos_y': 2.00,'pos_z': 820.71, - 'rot_x': 0,'rot_y': -187,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 4,'quantity': -1, - 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3071.35, - 'rot_x': 273,'rot_y': 304,'rot_z': 0, - }, - ], - [ - # Area 5 - ], - [ - # Area 6 - ], - [ - # Area 7 (Area 11 in Deserted Island) - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 4,'room': 7,'quantity': 4, - 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, - 'rot_x': 0,'rot_y': 96,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 4,'room': 7,'quantity': 2, - 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, - 'rot_x': 0,'rot_y': -108,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 4,'room': 7,'quantity': 2, - 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, - 'rot_x': 0,'rot_y': -108,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 4,'room': 7,'quantity': 1, - 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, - 'rot_x': 0,'rot_y': -62,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 4,'room': 7,'quantity': 1, - 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, - 'rot_x': 0,'rot_y': -108,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 3, - 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, - 'rot_x': 0,'rot_y': -108,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 2, - 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, - 'rot_x': 0,'rot_y': -278,'rot_z': 0, - }, - ], - [ - # Area 8 (Area 12 in the Deserted Island) - { - 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 2, - 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, - 'rot_x': 0,'rot_y': -420,'rot_z': 0, - }, - { - 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 1, - 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, - 'rot_x': 0,'rot_y': -324,'rot_z': 0, - }, - ], - [ - # Area 9 (Area 6 in the Deserted Island) - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': 3, - 'pos_x': 1059.13,'pos_y': 5.78,'pos_z': -3228.47, - 'rot_x': 0,'rot_y': -261,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': 4, - 'pos_x': 390.83,'pos_y': 20.44,'pos_z': -746.07, - 'rot_x': 0,'rot_y': -176,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': 2, - 'pos_x': -482.31,'pos_y': 16.39,'pos_z': 5.01, - 'rot_x': 0,'rot_y': 250,'rot_z': 0, - }, - ], - [ - # Area 10 (Area 8 in the Deserted Island) - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': 5, - 'pos_x': -1846.87,'pos_y': -263.00,'pos_z': 931.19, - 'rot_x': 0,'rot_y': -5,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': 3, - 'pos_x': -3160.63,'pos_y': -206.32,'pos_z': -355.73, - 'rot_x': 0,'rot_y': 307,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': 2, - 'pos_x': -1949.45,'pos_y': -276.13,'pos_z': 1228.73, - 'rot_x': 0,'rot_y': 216,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': -1, - 'pos_x': -1552.64,'pos_y': -186.42,'pos_z': 1504.30, - 'rot_x': 0,'rot_y': -28,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': -1, - 'pos_x': -1352.11,'pos_y': -174.80,'pos_z': 1441.92, - 'rot_x': 0,'rot_y': 170,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': 1, - 'pos_x': -653.75,'pos_y': 306.58,'pos_z': 2295.24, - 'rot_x': 0,'rot_y': 221,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 10,'quantity': 4, - 'pos_x': -615.28,'pos_y': 96.58,'pos_z': 2086.81, - 'rot_x': 0,'rot_y': 119,'rot_z': 0, - }, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.AziDahaka), + None, None, + Helmet.RangersHeadgear, Chestpiece.RangersGirdle, + Gauntlets.RangersGauntlets, Faulds.RangersFaulds, + Leggings.RangersEspadrilles, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.might_seed, 5), + (ItemsType.firedouse_berry, 2), (ItemsType.pitfall_trap, 1), + (ItemsType.sonic_bomb, 2), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.BusterSwordPlus), + None, None, + Helmet.AlloyHelm, Chestpiece.SteelMail, + Gauntlets.AlloyVambraces, Faulds.SteelFaulds, + Leggings.BaggiGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.WarHammerPlus), + None, None, + Helmet.JaggiHelm, Chestpiece.HuntersMail, + Gauntlets.BlastBracelet, Faulds.BarrothFaulds, + Leggings.BoneGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.mega_dash_juice, 1), + (ItemsType.ez_flash_bomb, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.LightBowgun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RoyalLauncher), + (EquipmentClasses.BowgunStock, BowgunStock.RoyalLauncher), + Helmet.BarrothCap, Chestpiece.BarrothVest, + Gauntlets.NoEquipment, Faulds.HuntersCoat, + Leggings.AlloyLeggings, + ((ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.ez_flash_bomb, 1), (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.clust_s_lv1, 5), (ItemsType.pellet_s_lv1, 50), + (ItemsType.armor_s_i, 3), (ItemsType.para_s_lv1, 12)), + ) + ) +} + +GRUDGE_MATCH_ROYAL_LUDROTH = { + 'small_monsters': [ + [ + # Area 0 ], [ - # Area 11 (Area 4 in the Deserted Island) - { - 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, - 'variant': 6,'room': 11,'quantity': 2, - 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, - 'rot_x': 0,'rot_y': -5,'rot_z': 0, - }, + # Area 1 { - 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, - 'variant': 6,'room': 11,'quantity': 4, - 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 11,'quantity': 1, - 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, - 'rot_x': 0,'rot_y': 171,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 11,'quantity': 1, - 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, - 'rot_x': 0,'rot_y': 164,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 11,'quantity': 1, - 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, - 'rot_x': 0,'rot_y': 284,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 11,'quantity': 1, - 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, - 'rot_x': 0,'rot_y': 161,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 4, - 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, - 'rot_x': 0,'rot_y': -301,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 2, - 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, - 'rot_x': 0,'rot_y': -295,'rot_z': 0, - }, - { - 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 1, - 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, - 'rot_x': 0,'rot_y': -398,'rot_z': 0, - }, ], - [ - # Area 12 (Area 10 in the Deserted Island) - { - 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 12,'quantity': -1, - 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, - 'rot_x': 0,'rot_y': -142,'rot_z': 0, - }, - { - 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 12,'quantity': -1, - 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, - 'rot_x': 0,'rot_y': 45,'rot_z': 0, - }, - { - 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 12,'quantity': -1, - 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, - 'rot_x': 0,'rot_y': 113,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 12,'quantity': -1, - 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, - 'rot_x': 0,'rot_y': -91,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 12,'quantity': -1, - 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, - 'rot_x': 0,'rot_y': -91,'rot_z': 0, - }, - { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 12,'quantity': -1, - 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, - 'rot_x': 0,'rot_y': -91,'rot_z': 0, - }, + ], + 'quest_info': { + 'quest_id': 0xEA61, + 'name': "Grudge Match: Royal Ludroth", + 'client': "Announcer/Receptionist", + 'description': "Slay a Royal Ludroth", + 'details': + "Ahoy, adrenaline junkies!\n" + "Next up is the regally maned\n" + "Royal Ludroth! Will the pressure\n" + "of facing this sea dragon on\n" + "its home surf with a strict\n" + "time limit leave the hunters\n" + "all washed up?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.r_ludroth_coin, 1, 24), + (ItemsType.r_ludroth_coin, 2, 8), + (ItemsType.voucher, 1, 10), + (ItemsType.armor_sphere, 1, 24), + (ItemsType.steel_eg, 1, 18), + (ItemsType.pinnacle_coin, 1, 16) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.HydraKnife), + None, None, + Helmet.QurupecoHelm, Chestpiece.QurupecoMail, + Gauntlets.BlastBracelet, Faulds.SteelFaulds, + Leggings.IngotGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), + None, None, + Helmet.DrawEarring, Chestpiece.SteelMail, + Gauntlets.GobulVambraces, Faulds.GobulFaulds, + Leggings.HuntersGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.BoneBludgeon), + None, None, + Helmet.BarrothHelm, Chestpiece.BarrothMail, + Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, + Leggings.BarrothGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AlloyCap, Chestpiece.AlloyVest, + Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, + Leggings.PiscineLeggings, + ((ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), + (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), + (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) + ) + ) +} + +GRUDGE_MATCH_RATHIAN = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 { - 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 12,'quantity': -1, - 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, - 'rot_x': 0,'rot_y': -91,'rot_z': 0, + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], ], 'quest_info': { - 'quest_id': 61020, - 'name': "World Eater", - 'client': "Guildmaster", - 'description': "Hunt a Deviljho", + 'quest_id': 0xEA62, + 'name': "Grudge Match: Rathian", + 'client': "Announcer/Receptionist", + 'description': "Slay a Rathian", 'details': - "Emergency! A huge Deviljho has\n" - "appeared. It's twice as big as\n" - "a normal one and it's eating\n" - "everything in sight! Go get\n" - "it! And now, a haiku: A huge\n" - "Deviljho/with no food in its\n" - "stomach/eats the whole island.", + "Hey there, fight fanatics!\n" + "Tonight's target is the Queen of\n" + "the Land, Rathian! A fan of\n" + "flame attacks, she also packs a\n" + "potent charge from on high!\n" + "Hunters better wear asbestos\n" + "underwear for this fight!", 'success_message': "Complete the Main Quest.", 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) + (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 6000, - 'quest_fee': 1800, + 'penalty_per_cart': 350, + 'quest_fee': 0, 'time_limit': 50, - 'main_monster_1': Monster.jaggi, - 'main_monster_2': Monster.jaggia, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 31, - 'starting_position': StartingPositionType.random, - 'general_enemy_level': 0x0034, - 'summon': 0x64010234, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001a, + 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, 'wave_1_transition_quantity': 0x0000, @@ -1612,12 +7517,12 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.deviljho, + 'type': Monster.rathian, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0xC8, + 'level': 0x1a, # 0x01 through 0x3c + 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, @@ -1644,29 +7549,21 @@ }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.deviljho, + 'type': 0x00000101, + 'objective_type': Monster.rathian, 'objective_num': 0x01, - 'zenny_reward': 18000, - 'hrp_reward': 1800, + 'zenny_reward': 1000, + 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.timeworn_charm, 1, 33), - (ItemsType.deviljho_gem, 1, 4), - (ItemsType.deviljho_scalp, 1, 8), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.hvy_armor_sphere, 1, 11), - (ItemsType.shining_charm, 1, 19), - (ItemsType.deviljho_fang, 1, 8) - ], - 'rewards_row_2': [ - (ItemsType.deviljho_scalp, 1, 20), - (ItemsType.timeworn_charm, 1, 34), - (ItemsType.deviljho_fang, 1, 6), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.deviljho_gem, 1, 3), - (ItemsType.shining_charm, 1, 11), - (ItemsType.hvy_armor_sphere, 1, 9) + (ItemsType.rathian_coin, 1, 21), + (ItemsType.rathian_coin, 2, 7), + (ItemsType.voucher, 1, 13), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 14), + (ItemsType.steel_eg, 1, 19), + (ItemsType.pinnacle_coin, 1, 18) ], + 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", @@ -1694,57 +7591,110 @@ 'unk_5': 0x00, 'unk_6': 0x00, 'unk_7': 0x00000000, - } + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.RoughEdge), + None, None, + Helmet.SilenceEarring, Chestpiece.BoneMail, + Gauntlets.BariothVambraces, Faulds.BariothFaulds, + Leggings.BariothGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.antidote, 2), (ItemsType.dung_bomb, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.Thunderclap), + None, None, + Helmet.ChargeEarring, Chestpiece.RathianMail, + Gauntlets.RathianVambraces, Faulds.IngotCoil, + Leggings.QurupecoGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.antidote, 2), (ItemsType.dung_bomb, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.AzureCrest), + None, None, + Helmet.GigginoxHelm, Chestpiece.GigginoxMail, + Gauntlets.AgnaktorVambraces, Faulds.BnahabraCoil, + Leggings.BnahabraBoots, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), + (ItemsType.firedouse_berry, 2), (ItemsType.ez_flash_bomb, 1), + (ItemsType.barrel_bomb_l, 1), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.HeavyBowgun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), + (EquipmentClasses.BowgunStock, BowgunStock.HeavyBowgun), + Helmet.BoneCap, Chestpiece.IngotVest, + Gauntlets.IngotGuards, Faulds.BoneCoat, + Leggings.AlloyLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 2), + (ItemsType.dung_bomb, 1), (ItemsType.barrel_bomb_l, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.clust_s_lv1, 5), (ItemsType.wyvernfire_lv1, 9), + (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12), + (ItemsType.exhaust_s, 10)), + ) + ) } - -""" -EVENT QUEST 20: Where Gods Fear To Tread -Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, - thanks to "soulmizute, emperor of the abyss#5094" - and "El Matiah#8904" -""" -QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { +GRUDGE_MATCH_LAGIACRUS = { 'small_monsters': [ [ # Area 0 ], [ # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, ], ], 'quest_info': { - 'quest_id': 61021, - 'name': "Where Gods Fear to Tread", - 'client': "Scarlet Mystery Man", - 'description': "Slay the Alatreon", + 'quest_id': 0xEA63, + 'name': "Grudge Match: Lagiacrus", + 'client': "Announcer/Receptionist", + 'description': "Slay a Lagiacrus", 'details': - "I've been waiting, hunter. Now\n" - "comes your final challenge:\n" - "Alatreon, a dragon of darkness\n" - "and light. Can mere mortals\n" - "fell an elder dragon feared\n" - "even by the gods? Don't even\n" - "bother saying your prayers...", + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", 'success_message': "Complete the Main Quest.", 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 0, 0, 1, 0) + (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 14000, - 'quest_fee': 4200, + 'penalty_per_cart': 350, + 'quest_fee': 0, 'time_limit': 50, 'main_monster_1': Monster.none, 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_SACRED_LAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, 'supply_set_number': 0, - 'starting_position': StartingPositionType.shrine, - 'general_enemy_level': 0x0040, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -1755,12 +7705,12 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.alatreon, + 'type': Monster.lagiacrus, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0x7D, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, @@ -1788,26 +7738,20 @@ 'objective_details': { 'main_quest': { 'type': 0x00000101, - 'objective_type': Monster.alatreon, + 'objective_type': Monster.lagiacrus, 'objective_num': 0x01, - 'zenny_reward': 42000, - 'hrp_reward': 4200, + 'zenny_reward': 1000, + 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.alatreon_scute, 1, 40), - (ItemsType.brkn_skypiercer, 1, 30), - (ItemsType.alatreon_talon, 1, 10), - (ItemsType.alatreon_plate, 1, 10), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.alatreon_plate, 1, 11), - (ItemsType.brkn_skypiercer, 1, 34), - (ItemsType.alatreon_talon, 1, 39), - (ItemsType.elderdragonblood, 1, 6), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) + (ItemsType.lagiacrus_coin, 1, 21), + (ItemsType.lagiacrus_coin, 2, 7), + (ItemsType.voucher, 1, 13), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 13), + (ItemsType.steel_eg, 1, 20), + (ItemsType.pinnacle_coin, 1, 18) ], + 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", @@ -1830,16 +7774,70 @@ }, 'unknown': { # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000005, + 'unk_12': 0x00000002, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, 'unk_7': 0x00000000, - } + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.BlitzkriegB), + None, None, + Helmet.SilenceEarring, Chestpiece.LagiacrusMail, + Gauntlets.UpstreamBracelet, Faulds.LagiacrusFaulds, + Leggings.LagiacrusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.stormsender_seed, 2), (ItemsType.lifepowder, 2), + (ItemsType.poison_knife, 5), (ItemsType.flash_bomb, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.WyvernBladeFire), + None, None, + Helmet.BariothHelm, Chestpiece.BariothMail, + Gauntlets.BariothVambraces, Faulds.ChainmailBelt, + Leggings.ChainmailPants, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.sleep_knife, 5), + (ItemsType.shock_trap, 1)), + () + ), + ( + (EquipmentClasses.Lance, Lance.SmaltCraterR), + None, None, + Helmet.DemonEdgeEarring, Chestpiece.BarrothMail, + Gauntlets.RathalosVambraces, Faulds.RathalosFaulds, + Leggings.RathalosGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.might_seed, 3), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 1), + (ItemsType.barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.TropecoGun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.TropecoGun), + (EquipmentClasses.BowgunStock, BowgunStock.TropecoGun), + Helmet.JumpEarring, Chestpiece.LudrothVest, + Gauntlets.LudrothGuards, Faulds.GigginoxCoat, + Leggings.LudrothLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.mini_oxy_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.ez_barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.crag_s_lv1, 9), (ItemsType.recov_s_lv1, 12), + (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12), + (ItemsType.flaming_s, 60)) + ) + ) } - -QUEST_EVENT_GREEN_EGGS = { +GRUDGE_MATCH_URAGAAN = { 'small_monsters': [ [ # Area 0 @@ -1847,88 +7845,81 @@ [ # Area 1 { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, - 'rot_x': 0,'rot_y': 170,'rot_z': 0, - }, - { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -1404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -3404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, { - 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -5404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, - { - 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, - 'variant': 1,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -4404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, { - 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, - 'variant': 1,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -4038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], ], 'quest_info': { - 'quest_id': 61050, - 'name': "[MH3SP] Green Eggs and...", - 'client': "Ze SpyRo", - 'description': - "Hunt a Gigginox\n" - "and an Agnaktor", + 'quest_id': 0xEA64, + 'name': "Grudge Match: Uragaan", + 'client': "Announcer/Receptionist", + 'description': "Slay an Uragaan", 'details': - "Why do we live, only to suffer?\n" - "Only slayers of pig meat know\n" - "these things. Take care, Hunter,\n" - "for those who look to antidote\n" - "herbs may find their breath\n" - "stolen away.", + "Riled up, fight fans? Here comes\n" + "a dragon whose name is\n" + "synonymous with pain: Uragaan!\n" + "Oh, and we've added a time limit\n" + "to make the fight extra fun. Are\n" + "the hunters up to the challenge?\n" + "Outlook not good!", 'success_message': "Complete the Main Quest.", 'flags': ( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) + (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 2400, - 'quest_fee': 200, + 'penalty_per_cart': 600, + 'quest_fee': 0, 'time_limit': 50, - 'main_monster_1': Monster.gigginox, - 'main_monster_2': Monster.agnaktor, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001B, + 'general_enemy_level': 0x0017, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -1939,29 +7930,29 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.gigginox, + 'type': Monster.uragaan, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x1B, # 0x01 through 0x3c + 'level': 0x17, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.agnaktor, + 'type': Monster.none, 'starting_area': 0x00, - 'boss_id': 0x01, - 'spawn_count': 0x01, - 'level': 0x1B, # 0x01 through 0x3c - 'size': 0x64, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 + 'size_spread': 0x00 }, 'monster_3': { 'type': Monster.none, 'starting_area': 0x00, - 'boss_id': 0x02, + 'boss_id': 0x00, 'spawn_count': 0x00, 'level': 0x00, # 0x01 through 0x3c 'size': 0x00, @@ -1971,47 +7962,34 @@ }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.gigginox, + 'type': 0x00000101, + 'objective_type': Monster.uragaan, 'objective_num': 0x01, - 'zenny_reward': 7000, - 'hrp_reward': 950, + 'zenny_reward': 1500, + 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.flabby_hide, 1, 18), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 15), - (ItemsType.agnaktor_shell, 1, 10), - (ItemsType.agnaktor_scale, 1, 16), - (ItemsType.agnaktor_hide, 1, 13), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.flabby_hide, 1, 13), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 10), - (ItemsType.agnaktor_shell, 1, 9), - (ItemsType.agnaktor_scale, 1, 10), - (ItemsType.agnaktor_hide, 1, 10), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5), - (ItemsType.commendation, 1, 20) + (ItemsType.uragaan_coin, 1, 19), + (ItemsType.uragaan_coin, 2, 7), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 12), + (ItemsType.steel_eg, 1, 20), + (ItemsType.pinnacle_coin, 1, 20) ], + 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.agnaktor, - 'objective_num': 0x01, + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, 'zenny_reward': 0, 'hrp_reward': 0x00000000, 'rewards_row_1': [], }, 'subquest_2': { 'description': "None", - 'type': 0, + 'type': 0x00000000, 'objective_type': Monster.none, 'objective_num': 0x00, 'zenny_reward': 0, @@ -2026,387 +8004,501 @@ 'unk_5': 0x00, 'unk_6': 0x00, 'unk_7': 0x00000000, - } -} - - -""" -EVENT QUEST ???: Jump Fourty-Eight Jaggi -Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g -Quest requirements altered to make it possible to win. -""" -QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI = { - 'small_monsters': [ - [ - # Area 0 - ], - [ - # Area 1 - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 1, - 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, - 'rot_x': 0,'rot_y': 17,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 1, - 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, - 'rot_x': 0,'rot_y': 170,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 1, - 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, - 'rot_x': 0,'rot_y': -45,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 1,'quantity': 1, - 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, - 'rot_x': 0,'rot_y': -199,'rot_z': 0, - }, - ], - [ - # Area 2 - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 2,'quantity': 1, - 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, - 'rot_x': 0,'rot_y': -113,'rot_z': 0, - }, - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 2,'quantity': 2, - 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, - 'rot_x': 0,'rot_y': 193,'rot_z': 0, - }, - { - 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 2,'quantity': 3, - 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, - 'rot_x': 0,'rot_y': 398,'rot_z': 0, - }, - ], - [ - # Area 3 - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 3,'quantity': -1, - 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, - 'rot_x': 0,'rot_y': -153,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 3,'quantity': -1, - 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, - 'rot_x': 0,'rot_y': -358,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 2,'room': 3,'quantity': 2, - 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, - 'rot_x': 0,'rot_y': -238,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 3,'quantity': 2, - 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, - 'rot_x': 0,'rot_y': -79,'rot_z': 0, - }, - ], - [ - # Area 4 - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': 3, - 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, - 'rot_x': 0,'rot_y': 324,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': 1, - 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, - 'rot_x': 0,'rot_y': 199,'rot_z': 0, - }, - { - 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 4,'quantity': -1, - 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, - 'rot_x': 0,'rot_y': -460,'rot_z': 0, - }, - ], - [ - # Area 5 - { - 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': 1, - 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, - 'rot_x': 0,'rot_y': 0,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': -1, - 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, - 'rot_x': 0,'rot_y': 51,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': 4, - 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, - 'rot_x': 0,'rot_y': 494,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': -1, - 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, - 'rot_x': 0,'rot_y': 676,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': 2, - 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, - 'rot_x': 0,'rot_y': 364,'rot_z': 0, - }, - { - 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 5,'quantity': -1, - 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, - 'rot_x': 0,'rot_y': 756,'rot_z': 0, - }, - ], + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.ShadowSaberPlus), + None, None, + Helmet.RathianHelm, Chestpiece.BnahabraSuit, + Gauntlets.GigginoxVambraces, Faulds.BnahabraCoil, + Leggings.BnahabraBoots, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.firedouse_berry, 2), (ItemsType.lifepowder, 2), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.AnantaBonebladePlus), + None, None, + Helmet.SwordSaintEarring, Chestpiece.AgnaktorMail, + Gauntlets.GrinderBracelet, Faulds.RathalosFaulds, + Leggings.AgnaktorGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.paralysis_knife, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.CarapaceHammerPlus), + None, None, + Helmet.DiablosHelm, Chestpiece.DiablosMail, + Gauntlets.PepBracelet, Faulds.HuntersFaulds, + Leggings.UragaanGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.dash_juice, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.ez_barrel_bomb_l, 1), (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.JaggidFire), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RoyalLauncher), + (EquipmentClasses.BowgunStock, BowgunStock.Thundacrus), + Helmet.BarrageEarring, Chestpiece.RathianVest, + Gauntlets.RathianGuards, Faulds.RathianCoat, + Leggings.RathianLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.pierce_s_lv2, 50), (ItemsType.crag_s_lv2, 9), + (ItemsType.water_s, 30)), + ) + ) +} + +GRUDGE_MATCH_WYVERN_TRIO = { + 'small_monsters': [ [ - # Area 6 (Area 8 in Sandy Plains) - { - 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': -1, - 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, - 'rot_x': 0,'rot_y': 517,'rot_z': 0, - }, - { - 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': -1, - 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, - 'rot_x': 0,'rot_y': 28,'rot_z': 0, - }, - { - 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': 5, - 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, - 'rot_x': 0,'rot_y': 443,'rot_z': 0, - }, - { - 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': 4, - 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, - 'rot_x': 0,'rot_y': 472,'rot_z': 0, - }, - { - 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': 2, - 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, - 'rot_x': 0,'rot_y': 568,'rot_z': 0, - }, - { - 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': -1, - 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, - 'rot_x': 0,'rot_y': 608,'rot_z': 0, - }, - { - 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 6,'quantity': 3, - 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, - 'rot_x': 0,'rot_y': 147,'rot_z': 0, - }, + # Area 0 ], [ - # Area 7 (Area 9 in Sandy Plains) - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 3, - 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, - 'rot_x': 0,'rot_y': -130,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 2, - 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, - 'rot_x': 0,'rot_y': -85,'rot_z': 0, - }, - { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 2, - 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, - 'rot_x': 0,'rot_y': -17,'rot_z': 0, - }, + # Area 1 { - 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 7,'quantity': 1, - 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, - 'rot_x': 0,'rot_y': -130,'rot_z': 0, + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], + ], + 'quest_info': { + 'quest_id': 0xEA65, + 'name': "Grudge Match: Wyvern Trio", + 'client': "Announcer/Receptionist", + 'description': "Slay all 3 monsters", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 1200, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0028, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x28, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x28, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x28, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00020101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 3000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.barroth_coin, 1, 5), + (ItemsType.barioth_coin, 1, 15), + (ItemsType.rathalos_coin, 1, 22), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.silver_eg, 1, 8), + (ItemsType.pinnacle_coin, 1, 24) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.BoltAxe), + None, None, + Helmet.ChargeEarring, Chestpiece.RathalosMail, + Gauntlets.RathalosVambraces, Faulds.RathalosFaulds, + Leggings.RathalosGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.GolemBladePlus), + None, None, + Helmet.UragaanHelm, Chestpiece.UragaanMail, + Gauntlets.UragaanVambraces, Faulds.UragaanFaulds, + Leggings.UragaanGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.GobuluMurukaPlus), + None, None, + Helmet.AgnaktorHelm, Chestpiece.AgnaktorMail, + Gauntlets.RathalosVambraces, Faulds.AgnaktorFaulds, + Leggings.AgnaktorGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.Agnablaster), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.Thundacrus), + (EquipmentClasses.BowgunStock, BowgunStock.RathlingGun), + Helmet.KirinEarring, Chestpiece.BariothVest, + Gauntlets.BariothGuards, Faulds.BariothCoat, + Leggings.BariothLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.cleanser, 5), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 3), + (ItemsType.dung_bomb, 1), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.ez_flash_bomb, 2), + (ItemsType.flaming_s, 60), (ItemsType.thunder_s, 60)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv2, 50), + (ItemsType.pellet_s_lv1, 60), (ItemsType.pellet_s_lv2, 60), + (ItemsType.clust_s_lv2, 5), (ItemsType.clust_s_lv3, 5), + (ItemsType.wyvernfire_lv2, 10), (ItemsType.para_s_lv1, 12), + (ItemsType.demon_s_ii, 5)) + ) + ) +} + +GRUDGE_MATCH_BIRD_BRUTE = { + 'small_monsters': [ [ - # Area 8 (Area 10 in Sandy Plains) - { - 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 7, - 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, - 'rot_x': 0,'rot_y': 819,'rot_z': 0, - }, - { - 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 5, - 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, - 'rot_x': 0,'rot_y': 819,'rot_z': 0, - }, - { - 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 3, - 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, - 'rot_x': 0,'rot_y': 819,'rot_z': 0, - }, - { - 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 2, - 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, - 'rot_x': 0,'rot_y': 819,'rot_z': 0, - }, - { - 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': 1, - 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, - 'rot_x': 0,'rot_y': 819,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': -1, - 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, - 'rot_x': 0,'rot_y': -56,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 8,'quantity': -1, - 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, - 'rot_x': 0,'rot_y': 130,'rot_z': 0, - }, + # Area 0 ], [ - # Area 9 (Area 7 in Sandy Plains) - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': 2, - 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, - 'rot_x': 0,'rot_y': -193,'rot_z': 0, - }, - { - 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': 1, - 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, - 'rot_x': 0,'rot_y': -73,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': -1, - 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, - 'rot_x': 0,'rot_y': -142,'rot_z': 0, - }, - { - 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, - 'variant': 0,'room': 9,'quantity': -1, - 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, - 'rot_x': 0,'rot_y': -460,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 9,'quantity': -1, - 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, - 'rot_x': 273,'rot_y': -45,'rot_z': 0, - }, + # Area 1 { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 1,'room': 9,'quantity': 6, - 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, - 'rot_x': 0,'rot_y': -39,'rot_z': 0, + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], + ], + 'quest_info': { + 'quest_id': 0xEA66, + 'name': "Grudge Match: Bird and Brute", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Qurupeco\n" + "and a Barroth", + 'details': + "Double trouble! It's the\n" + "dirty-bird Qurupeco and the\n" + "land dragon Barroth -- heaven\n" + "and earth, laughter and tears,\n" + "in an ultimate contest! When\n" + "the dust clears, will it\n" + "reveal victory? Or tragedy?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.qurupeco, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.qurupeco, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.qurupeco_coin, 1, 16), + (ItemsType.barroth_coin, 1, 20), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 15) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), + None, None, + Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, + Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, + Leggings.GigginoxGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), + None, None, + Helmet.DrawEarring, Chestpiece.JaggiMailPlus, + Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, + Leggings.BoneGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.Undertaker), + None, None, + Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.AlloyGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, + Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, + Leggings.RathalosLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.cleanser, 5), + (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), + (ItemsType.sonic_bomb, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), + (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), + (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) + ) + ) +} + +GRUDGE_MATCH_SEA_POWER = { + 'small_monsters': [ [ - # Area 10 + # Area 0 ], [ - # Area 11 (Area 6 in Sandy Plains) - { - 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 2, - 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, - 'rot_x': 0,'rot_y': 39,'rot_z': 0, - }, - { - 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, - 'variant': 6,'room': 11,'quantity': 1, - 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, - 'rot_x': 0,'rot_y': 169,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 2, - 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, - 'rot_x': 0,'rot_y': -267,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 2, - 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, - 'rot_x': 0,'rot_y': -216,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 2, - 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, - 'rot_x': 0,'rot_y': -227,'rot_z': 0, - }, - { - 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, - 'variant': 0,'room': 11,'quantity': 1, - 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, - 'rot_x': 0,'rot_y': -210,'rot_z': 0, + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], ], 'quest_info': { - 'quest_id': 61003, - 'name': "Jump Fourty-Eight Jaggi", - 'client': "Guild Subcontractor", - 'description': "Hunt 48 Great Jaggi", + 'quest_id': 0xEA67, + 'name': "Grudge Match: Sea Power", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Royal Ludroth\n" + "and a Gobul", 'details': - "I'm gonna get so fired for\n" - "this... The Great Jaggi some\n" - "hunter brought in just\n" - "escaped. Mind going after\n" - "them? You better hurry,\n" - "though. Bet they've got some\n" - "incredible materials, too.", + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", 'success_message': "Complete the Main Quest.", 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) + (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 1400, - 'quest_fee': 400, + 'penalty_per_cart': 350, + 'quest_fee': 0, 'time_limit': 50, - 'main_monster_1': Monster.bnahabra2, - 'main_monster_2': Monster.melynx, - 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 19, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x64050219, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, 'wave_1_transition_quantity': 0x0000, @@ -2416,119 +8508,142 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.great_jaggi, + 'type': Monster.royal_ludroth, 'starting_area': 0x00, - 'boss_id': 0xFF, - 'spawn_count': 0x10, - 'level': 0x17, # 0x01 through 0x3c + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c 0x17, 0x37, or 0x3a 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x01 + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.great_jaggi, + 'type': Monster.gobul, 'starting_area': 0x00, - 'boss_id': 0xFF, - 'spawn_count': 0x10, - 'level': 0x17, # 0x01 through 0x3c + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x01 + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 }, 'monster_3': { - 'type': Monster.great_jaggi, + 'type': Monster.none, 'starting_area': 0x00, - 'boss_id': 0xFF, - 'spawn_count': 0x10, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x01 + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 } }, 'objective_details': { 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x30, - 'zenny_reward': 15000, - 'hrp_reward': 750, + 'type': 0x00000101, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 2, 3), - (ItemsType.great_jagi_hide, 2, 12), - (ItemsType.kings_frill, 1, 10), - (ItemsType.rustshard, 1, 20), - (ItemsType.commendation, 1, 12), - (ItemsType.voucher, 2, 18), - (ItemsType.great_jagi_head, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.aquaglow_jewel, 1, 1), - (ItemsType.shining_charm, 1, 1), - (ItemsType.armor_sphere, 1, 1), - (ItemsType.armor_sphere_plus, 1, 1) + (ItemsType.gobul_coin, 1, 10), + (ItemsType.r_ludroth_coin, 2, 23), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 6), + (ItemsType.steel_eg, 1, 16), + (ItemsType.silver_eg, 1, 6), + (ItemsType.hunter_king_coin, 1, 15) ], + 'rewards_row_2': [], }, 'subquest_1': { - 'description': "Hunt 24 Great Jaggi", - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x18, - 'zenny_reward': 8000, - 'hrp_reward': 255, - 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 1, 1), - (ItemsType.great_jagi_hide, 1, 1), - (ItemsType.jagi_scale, 1, 1), - (ItemsType.screamer, 1, 1), - (ItemsType.kings_frill, 1, 1), - (ItemsType.bone_husk_s, 8, 1), - (ItemsType.great_jagi_head, 1, 1) - ], + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], }, 'subquest_2': { 'description': "None", - 'type': 0, + 'type': 0x00000000, 'objective_type': Monster.none, - 'objective_num': 0, + 'objective_num': 0x00, 'zenny_reward': 0, - 'hrp_reward': 0, + 'hrp_reward': 0x00000000, 'rewards_row_1': [], - } + }, }, 'unknown': { - # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala 'unk_12': 0x00000002, 'unk_4': 0x00, 'unk_5': 0x00, 'unk_6': 0x00, 'unk_7': 0x00000000, - } + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.VoltAxeY), + None, None, + Helmet.PiscineMaskPlus, Chestpiece.LagiacrusMailPlus, + Gauntlets.BaggiVambracesPlus, Faulds.PiscineBeltPlus, + Leggings.PiscineLeggingsPlus, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.DancingHellfire), + None, None, + Helmet.RathianHelmPlus, Chestpiece.RathianMailPlus, + Gauntlets.ChainmailVambracesPlus, Faulds.AlloyCoil, + Leggings.AlloyGreaves, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.ez_flash_bomb, 3)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.CarapaceHammerPlus), + None, None, + Helmet.StimulusEarring, Chestpiece.DoberMail, + Gauntlets.DoberVambraces, Faulds.BoneFauldsPlus, + Leggings.BoneGreavesPlus, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.mega_dash_juice, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2), + (ItemsType.powercharm, 1), (ItemsType.powertalon, 1)), + () + ), + ( # rathling gun barrel, rathling gun + frame, rathling gun + stock + (EquipmentClasses.BowgunFrame, BowgunFrame.RathlingGunPlus), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), # RathlingGun), + (EquipmentClasses.BowgunStock, BowgunStock.RathlingGunPlus), + Helmet.LagiacrusCapPlus, Chestpiece.LagiacrusVestPlus, + Gauntlets.LagiacrusGuardsPlus, Faulds.LagiacrusCoatPlus, + Leggings.LagiacrusLeggingsPlus, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.mini_oxy_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.flash_bomb, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv2, 50), (ItemsType.wyvernfire_lv2, 10), + (ItemsType.flaming_s, 60)) + ) + ) } - -# ---------- ARENA QUESTS ---------- - -""" -00 00 00 28 -00 00 00 FF -FF -01 -01 -03 -00 00 00 00 -BF 00 00 00 -C5 9D 74 00 -C5 3E 2B 33 -00 00 00 00 -FF FF A4 00 -00 00 00 00 -FF 00 00 00 -00 00 00 00 -""" - -GRUDGE_MATCH_ROYAL_LUDROTH = { +GRUDGE_MATCH_TWO_FLAMES = { 'small_monsters': [ [ # Area 0 @@ -2538,27 +8653,27 @@ { 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, 'variant': 3,'room': 1,'quantity': -1, - 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, ], ], 'quest_info': { - 'quest_id': 0xEA61, - 'name': "Grudge Match: Royal Ludroth", + 'quest_id': 0xEA68, + 'name': "Grudge Match: The Two Flames", 'client': "Announcer/Receptionist", - 'description': "Slay a Royal Ludroth", + 'description': + "Slay a Rathalos\n" + "and a Rathian", 'details': - "Ahoy, adrenaline junkies!\n" - "Next up is the regally maned\n" - "Royal Ludroth! Will the pressure\n" - "of facing this sea dragon on\n" - "its home surf with a strict\n" - "time limit leave the hunters\n" - "all washed up?", + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", 'success_message': "Complete the Main Quest.", 'flags': ( - (0, 0, 0, 0, 0, 1, 0, 0), + (0, 1, 0, 0, 0, 1, 0, 0), (1, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 1, 0, 1, 0) @@ -2568,13 +8683,13 @@ 'time_limit': 50, 'main_monster_1': Monster.none, 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, 'resources': ResourcesType.arena, 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, + 'general_enemy_level': 0x0037, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -2585,22 +8700,22 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.royal_ludroth, + 'type': Monster.rathalos, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x17, # 0x01 through 0x3c + 'level': 0x37, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.none, + 'type': Monster.rathian, 'starting_area': 0x00, - 'boss_id': 0x00, - 'spawn_count': 0x00, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, @@ -2618,25 +8733,27 @@ 'objective_details': { 'main_quest': { 'type': 0x00000101, - 'objective_type': Monster.royal_ludroth, + 'objective_type': Monster.rathalos, 'objective_num': 0x01, 'zenny_reward': 1000, 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.r_ludroth_coin, 1, 24), - (ItemsType.r_ludroth_coin, 2, 8), - (ItemsType.voucher, 1, 10), - (ItemsType.armor_sphere, 1, 24), - (ItemsType.steel_eg, 1, 18), - (ItemsType.pinnacle_coin, 1, 16) + (ItemsType.rathalos_coin, 1, 10), + (ItemsType.rathian_coin, 1, 24), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 17) ], 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, + 'type': 0x00000101, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, 'zenny_reward': 0, 'hrp_reward': 0x00000000, 'rewards_row_1': [], @@ -2661,60 +8778,66 @@ }, 'arena_equipment': ( ( - (EquipmentClasses.SnS, SnS.HydraKnife), + (EquipmentClasses.SnS, SnS.IcicleSpikePlus), None, None, - Helmet.QurupecoHelm, Chestpiece.QurupecoMail, - Gauntlets.BlastBracelet, Faulds.SteelFaulds, - Leggings.IngotGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10)), + Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, + Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, + Leggings.QurupecoGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.might_pill, 2), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), + (ItemsType.barrel_bomb_s, 1)), () ), ( - (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), + (EquipmentClasses.Longsword, Longsword.Thunderclap), None, None, - Helmet.DrawEarring, Chestpiece.SteelMail, - Gauntlets.GobulVambraces, Faulds.GobulFaulds, - Leggings.HuntersGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), - (ItemsType.ez_flash_bomb, 1)), + Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.VangisGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), () ), ( - (EquipmentClasses.Hammer, Hammer.BoneBludgeon), + (EquipmentClasses.Lance, Lance.SpiralLancePlus), None, None, - Helmet.BarrothHelm, Chestpiece.BarrothMail, - Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, - Leggings.BarrothGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), + Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, + Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, + Leggings.IngotGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), () ), ( - (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AlloyCap, Chestpiece.AlloyVest, - Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, - Leggings.PiscineLeggings, - ((ItemsType.potion, 10), (ItemsType.ration, 10), - (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), - (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), - (ItemsType.barrel_bomb_l, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), - (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) + (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), + (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), + Helmet.EarringofFate, Chestpiece.UragaanVestPlus, + Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, + Leggings.UragaanLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), + (ItemsType.thunder_s, 60)) ) ) } - -GRUDGE_MATCH_BIRD_BRUTE = { +GRUDGE_MATCH_ICE_AND_FIRE = { 'small_monsters': [ [ # Area 0 @@ -2730,20 +8853,20 @@ ], ], 'quest_info': { - 'quest_id': 0xEA66, - 'name': "Grudge Match: Bird and Brute", + 'quest_id': 0xEA69, + 'name': "Grudge Match: Ice and Fire", 'client': "Announcer/Receptionist", 'description': - "Slay a Qurupeco\n" - "and a Barroth", + "Slay a Barioth\n" + "and an Agnaktor", 'details': - "Double trouble! It's the\n" - "dirty-bird Qurupeco and the\n" - "land dragon Barroth -- heaven\n" - "and earth, laughter and tears,\n" - "in an ultimate contest! When\n" - "the dust clears, will it\n" - "reveal victory? Or tragedy?", + "Double trouble! The forecast\n" + "today calls for a storm of fire\n" + "and ice -- with a 90 percent\n" + "chance of death -- as you take\n" + "on both Barioth and Agnaktor at\n" + "once! Days like this I just\n" + "wanna stay in bed.", 'success_message': "Complete the Main Quest.", 'flags': ( (0, 1, 0, 0, 0, 1, 0, 0), @@ -2751,18 +8874,18 @@ (0, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 350, + 'penalty_per_cart': 250, 'quest_fee': 0, 'time_limit': 50, 'main_monster_1': Monster.none, 'main_monster_2': Monster.none, 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_4, + 'quest_rank': QuestRankType.star_5, 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, 'resources': ResourcesType.arena, 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, + 'general_enemy_level': 0x0037, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -2773,21 +8896,21 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.qurupeco, + 'type': Monster.barioth, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x17, # 0x01 through 0x3c + 'level': 0x37, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.barroth, + 'type': Monster.agnaktor, 'starting_area': 0x00, 'boss_id': 0x01, 'spawn_count': 0x01, - 'level': 0x17, # 0x01 through 0x3c + 'level': 0x37, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 @@ -2806,26 +8929,26 @@ 'objective_details': { 'main_quest': { 'type': 0x00000101, - 'objective_type': Monster.qurupeco, + 'objective_type': Monster.barioth, 'objective_num': 0x01, - 'zenny_reward': 1000, + 'zenny_reward': 1500, 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.qurupeco_coin, 1, 16), - (ItemsType.barroth_coin, 1, 20), + (ItemsType.agnaktor_coin, 1, 13), + (ItemsType.barioth_coin, 1, 20), (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), - (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 15) + (ItemsType.adv_armor_sphere, 1, 8), + (ItemsType.hrd_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 13), + (ItemsType.silver_eg, 1, 8), + (ItemsType.hunter_king_coin, 1, 19) ], 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", 'type': 0x00000101, - 'objective_type': Monster.barroth, + 'objective_type': Monster.agnaktor, 'objective_num': 0x01, 'zenny_reward': 0, 'hrp_reward': 0x00000000, @@ -2851,64 +8974,67 @@ }, 'arena_equipment': ( ( - (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), + (EquipmentClasses.SnS, SnS.BlazingFalchion), None, None, - Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, - Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, - Leggings.GigginoxGreaves, + Helmet.GobulHelmPlus, Chestpiece.GobulMailPlus, + Gauntlets.GobulVambracesPlus, Faulds.GobulFauldsPlus, + Leggings.GobulGreavesPlus, ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 2)), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.poison_knife, 5), (ItemsType.paralysis_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), () ), ( - (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), + (EquipmentClasses.Greatsword, Greatsword.RathalosFlamesword), None, None, - Helmet.DrawEarring, Chestpiece.JaggiMailPlus, - Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, - Leggings.BoneGreavesPlus, + Helmet.BaggiHelmPlus, Chestpiece.BaggiMailPlus, + Gauntlets.BaggiVambracesPlus, Faulds.BaggiCoilPlus, + Leggings.BaggiGreavesPlus, ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 2)), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.firedouse_berry, 2), (ItemsType.paralysis_knife, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), () ), ( - (EquipmentClasses.Lance, Lance.Undertaker), + (EquipmentClasses.Hammer, Hammer.GreatGaiarchG), None, None, - Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.AlloyGreaves, + Helmet.DemonEdgeEarring, Chestpiece.GobulMailPlus, + Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, + Leggings.RathalosGreavesPlus, ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.ez_flash_bomb, 1)), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.mega_dash_juice, 2), (ItemsType.sleep_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.max_potion, 2)), () ), ( - (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, - Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, - Leggings.RathalosLeggingsPlus, + (EquipmentClasses.Longsword, Longsword.BarbrianSharqP), + None, None, + Helmet.BariothHelmPlus, Chestpiece.BariothMailPlus, + Gauntlets.BariothVambracesPlus, Faulds.BariothFauldsPlus, + Leggings.BariothGreavesPlus, ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.cleanser, 5), - (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), - (ItemsType.sonic_bomb, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), - (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), - (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.firedouse_berry, 2), (ItemsType.poison_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 2), + (ItemsType.ez_barrel_bomb_l, 1), (ItemsType.max_potion, 2)), + () ) ) } - -GRUDGE_MATCH_TWO_FLAMES = { +GRUDGE_MATCH_BRUTE_HORNS = { 'small_monsters': [ [ # Area 0 @@ -2921,15 +9047,51 @@ 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, 'rot_x': 0,'rot_y': 170,'rot_z': 0, }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, ], ], 'quest_info': { - 'quest_id': 0xEA68, - 'name': "Grudge Match: The Two Flames", + 'quest_id': 0xEA6A, + 'name': "Grudge Match: Brute Horns", 'client': "Announcer/Receptionist", 'description': - "Slay a Rathalos\n" - "and a Rathian", + "Slay an Uragaan\n" + "and a Diablos", 'details': "Wanted:\n" "The description for this\n" @@ -2943,7 +9105,7 @@ (0, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 1, 0, 1, 0) ), - 'penalty_per_cart': 350, + 'penalty_per_cart': 700, 'quest_fee': 0, 'time_limit': 50, 'main_monster_1': Monster.none, @@ -2954,7 +9116,7 @@ 'resources': ResourcesType.arena, 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, + 'general_enemy_level': 0x0037, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -2965,21 +9127,21 @@ }, 'large_monsters': { 'monster_1': { - 'type': Monster.rathalos, + 'type': Monster.uragaan, 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x17, # 0x01 through 0x3c + 'level': 0x12, # 0x01 through 0x3c 0x0f, 0x12, or 0x38 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 }, 'monster_2': { - 'type': Monster.rathian, + 'type': Monster.diablos, 'starting_area': 0x00, 'boss_id': 0x01, 'spawn_count': 0x01, - 'level': 0x17, # 0x01 through 0x3c + 'level': 0x37, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 @@ -2998,26 +9160,26 @@ 'objective_details': { 'main_quest': { 'type': 0x00000101, - 'objective_type': Monster.rathalos, + 'objective_type': Monster.uragaan, 'objective_num': 0x01, - 'zenny_reward': 1000, + 'zenny_reward': 2000, 'hrp_reward': 0, 'rewards_row_1': [ - (ItemsType.rathalos_coin, 1, 10), - (ItemsType.rathian_coin, 1, 24), - (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.diablos_coin, 1, 10), + (ItemsType.uragaan_coin, 1, 20), + (ItemsType.voucher, 1, 10), + (ItemsType.adv_armor_sphere, 1, 10), + (ItemsType.hrd_armor_sphere, 1, 5), (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 17) + (ItemsType.silver_eg, 1, 8), + (ItemsType.hunter_king_coin, 1, 22) ], 'rewards_row_2': [], }, 'subquest_1': { 'description': "None", 'type': 0x00000101, - 'objective_type': Monster.rathian, + 'objective_type': Monster.diablos, 'objective_num': 0x01, 'zenny_reward': 0, 'hrp_reward': 0x00000000, @@ -3043,66 +9205,62 @@ }, 'arena_equipment': ( ( - (EquipmentClasses.SnS, SnS.IcicleSpikePlus), + (EquipmentClasses.Greatsword, Greatsword.HighSieglindeP), None, None, - Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, - Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, - Leggings.QurupecoGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.might_pill, 2), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), + Helmet.SwordSaintEarring, Chestpiece.SteelMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.LagiacrusGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 20), (ItemsType.well_done_steak, 10), (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), - (ItemsType.barrel_bomb_s, 1)), + (ItemsType.ez_flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.max_potion, 2)), () ), ( - (EquipmentClasses.Longsword, Longsword.Thunderclap), + (EquipmentClasses.Hammer, Hammer.JhenMohranHammer), None, None, - Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.VangisGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), + Helmet.ChargeEarring, Chestpiece.DamascusMail, + Gauntlets.DiablosVambracesPlus, Faulds.IngotCoilPlus, + Leggings.AgnaktorGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.max_potion, 2)), () ), ( - (EquipmentClasses.Lance, Lance.SpiralLancePlus), + (EquipmentClasses.Lance, Lance.SabertoothG), None, None, - Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, - Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, - Leggings.IngotGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), - (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), + Helmet.LudrothCapPlus, Chestpiece.LudrothMailPlus, + Gauntlets.PepBracelet, Faulds.VangisCoil, + Leggings.DamascusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), () ), ( - (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), - (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), - Helmet.EarringofFate, Chestpiece.UragaanVestPlus, - Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, - Leggings.UragaanLeggingsPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), - (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), - (ItemsType.thunder_s, 60)) + (EquipmentClasses.Switchaxe, Switchaxe.InceadeusPlus), + None, None, + Helmet.DiablosHelmPlus, Chestpiece.DiablosMailPlus, + Gauntlets.DiablosVambracesPlus, Faulds.LagiacrusFauldsPlus, + Leggings.LagiacrusGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.barrel_bomb_l, 2), (ItemsType.max_potion, 2)), + () ) ) } - GRUDGE_MATCH_LAND_LORDS = { 'small_monsters': [ [ @@ -3183,7 +9341,7 @@ 'resources': ResourcesType.arena, 'supply_set_number': 0, 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, + 'general_enemy_level': 0x0037, 'summon': 0x00000000, 'wave_1_transition_type': WaveType.none, 'wave_1_transition_target': 0x0000, @@ -3198,7 +9356,7 @@ 'starting_area': 0x00, 'boss_id': 0x00, 'spawn_count': 0x01, - 'level': 0x17, + 'level': 0x37, 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 @@ -3208,7 +9366,7 @@ 'starting_area': 0x00, 'boss_id': 0x01, 'spawn_count': 0x01, - 'level': 0x17, + 'level': 0x37, 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 @@ -3218,7 +9376,7 @@ 'starting_area': 0x00, 'boss_id': 0x02, 'spawn_count': 0x01, - 'level': 0x12, # 0x01 through 0x3c + 'level': 0x38, # 0x01 through 0x3c 'size': 0x64, 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 'size_spread': 0x00 @@ -3364,18 +9522,42 @@ QUESTS = [ QUEST_EVENT_JUMP_FOUR_JAGGI, + QUEST_EVENT_ANIMAL_ATTRACTIONS, + QUEST_EVENT_SHUT_UP_AND_FISH, + QUEST_EVENT_MOTLEY_MISSION, + QUEST_EVENT_COLD_CALL, QUEST_EVENT_THE_PHANTOM_URAGAAN, QUEST_EVENT_BLOOD_SPORT, + QUEST_EVENT_ALLURING_DRESS, + QUEST_EVENT_GOBULED_EVERYTHING_IN_SIGHT, + QUEST_EVENT_POACHED_WYVERN_EGGS, QUEST_EVENT_MERCY_MISSION, + QUEST_EVENT_SPEAK_OF_THE_DEVILJHO, + QUEST_EVENT_MARINE_WARFARE, + QUEST_EVENT_DOUBLE_DIABLOS, + QUEST_EVENT_HOT_DEAL, + QUEST_EVENT_SEA_POWER, QUEST_EVENT_FF_FREE_FOR_ALL, QUEST_EVENT_RAGE_MATCH, + QUEST_EVENT_LORDS_OF_THE_SEA_AND_SKY, QUEST_EVENT_WORLD_EATER, QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD, + QUEST_EVENT_RED_HOT_PARTY, + QUEST_EVENT_FIERY_SKIES_FROZEN_FIELDS, QUEST_EVENT_GREEN_EGGS, QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI, + QUEST_EVENT_DARK_SIDE_OF_THE_MOON, + GRUDGE_MATCH_QURUPECO, GRUDGE_MATCH_ROYAL_LUDROTH, + GRUDGE_MATCH_RATHIAN, + GRUDGE_MATCH_LAGIACRUS, + GRUDGE_MATCH_URAGAAN, + GRUDGE_MATCH_WYVERN_TRIO, GRUDGE_MATCH_BIRD_BRUTE, + GRUDGE_MATCH_SEA_POWER, GRUDGE_MATCH_TWO_FLAMES, + GRUDGE_MATCH_ICE_AND_FIRE, + GRUDGE_MATCH_BRUTE_HORNS, GRUDGE_MATCH_LAND_LORDS, ] diff --git a/dump_trading_post.py b/dump_trading_post.py new file mode 100644 index 0000000..c43250c --- /dev/null +++ b/dump_trading_post.py @@ -0,0 +1,708 @@ +import json + +from mh.quest_utils import ItemsType + +TRADING_POST_OPTIONS = { + ItemsType.burst_arowana: (10, (ItemsType.earth_crystal, 5), (ItemsType.none, 0)), + ItemsType.bitterbug: (10, (ItemsType.jagi_hide, 3), (ItemsType.none, 0)), + ItemsType.blue_mushroom: (10, (ItemsType.bird_wyvern_fang, 2), (ItemsType.none, 0)), + ItemsType.flashbug: (5, (ItemsType.rhenoplos_scalp, 1), (ItemsType.none, 0)), + ItemsType.bomberry: (10, (ItemsType.vivid_feather, 1), (ItemsType.none, 0)), + ItemsType.adamant_seed: (3, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.dung: (5, (ItemsType.monster_fluid, 1), (ItemsType.r_ludroth_coin, 1)), + ItemsType.ivy: (10, (ItemsType.kelbi_horn, 2), (ItemsType.none, 0)), + ItemsType.ice_crystal: (5, (ItemsType.sharpened_fang, 3), (ItemsType.none, 0)), + ItemsType.icethaw_pellet: (3, (ItemsType.mystery_bone, 4), (ItemsType.r_ludroth_coin, 1)), + ItemsType.paintberry: (10, (ItemsType.bnahabra_wing, 1), (ItemsType.none, 0)), + ItemsType.fire_herb: (10, (ItemsType.monster_bone_m, 1), (ItemsType.none, 0)), + ItemsType.firedouse_berry: (3, (ItemsType.mystery_bone, 4), (ItemsType.none, 0)), + ItemsType.sharpened_fang: (5, (ItemsType.hydro_hide, 2), (ItemsType.r_ludroth_coin, 2)), + ItemsType.toadstool: (5, (ItemsType.sharpened_fang, 1), (ItemsType.qurupeco_coin, 1)), + ItemsType.godbug: (5, (ItemsType.blue_kelbi_horn, 1), (ItemsType.none, 0)), + ItemsType.sap_plant: (10, (ItemsType.kelbi_horn, 2), (ItemsType.none, 0)), + ItemsType.honey: (5, (ItemsType.sharpened_fang, 1), (ItemsType.none, 0)), + ItemsType.bughopper: (10, (ItemsType.big_fin, 3), (ItemsType.r_ludroth_coin, 2)), + ItemsType.bone_husk_s: (10, (ItemsType.bone, 2), (ItemsType.barroth_coin, 2)), + ItemsType.herb: (10, (ItemsType.gigi_stinger, 2), (ItemsType.none, 0)), + ItemsType.parashroom: (5, (ItemsType.sharpened_fang, 1), (ItemsType.none, 0)), + ItemsType.might_seed: (3, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.mega_harpoon: (5, (ItemsType.immature_sponge, 2), (ItemsType.none, 0)), + ItemsType.monster_bone_m: (5, (ItemsType.rathian_webbing, 1), (ItemsType.none, 0)), + ItemsType.monster_bone_s: (5, (ItemsType.blue_kelbi_horn, 1), (ItemsType.none, 0)), + ItemsType.pin_tuna: (10, (ItemsType.iron_ore, 4), (ItemsType.none, 0)), + ItemsType.nitroshroom: (10, (ItemsType.jagi_hide, 2), (ItemsType.none, 0)), + ItemsType.popfish: (8, (ItemsType.machalite_ore, 2), (ItemsType.rathian_coin, 2)), + ItemsType.exciteshroom: (5, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.sleepyfish: (8, (ItemsType.iron_ore, 3), (ItemsType.none, 0)), + ItemsType.sleep_herb: (10, (ItemsType.velvety_hide, 1), (ItemsType.none, 0)), + ItemsType.spider_web: (5, (ItemsType.monster_fluid, 1), (ItemsType.barroth_coin, 1)), + ItemsType.stone: (10, (ItemsType.monster_bone_m, 1), (ItemsType.great_jagi_coin, 1)), + ItemsType.stormsender_seed: (3, (ItemsType.bone, 4), (ItemsType.none, 0)), + ItemsType.sushifish: (10, (ItemsType.gigi_stinger, 5), (ItemsType.none, 0)), + ItemsType.waterblock_seed: (3, (ItemsType.bone, 4), (ItemsType.qurupeco_coin, 1)), + ItemsType.whetfish: (10, (ItemsType.gigi_stinger, 3), (ItemsType.none, 0)), + ItemsType.snakebee_larva: (5, (ItemsType.rhenoplos_scalp, 2), (ItemsType.none, 0)), + ItemsType.yambug: (10, (ItemsType.sharpened_fang, 3), (ItemsType.none, 0)), + + ItemsType.bomb_arowana: (3, (ItemsType.iron_ore, 1), (ItemsType.none, 0)), + ItemsType.barioth_shell: (1, (ItemsType.barioth_coin, 3), (ItemsType.pinnacle_coin, 2)), + ItemsType.barroth_shell: (1, (ItemsType.barroth_coin, 3), (ItemsType.none, 0)), + ItemsType.diablos_shell: (1, (ItemsType.diablos_coin, 3), (ItemsType.none, 0)), + ItemsType.dragon_toadstool: (5, (ItemsType.flabby_hide, 2), (ItemsType.none, 0)), + ItemsType.dragonfell_berry: (4, (ItemsType.thunderbug, 1), (ItemsType.none, 0)), + ItemsType.well_done_steak: (5, (ItemsType.iron_ore, 5), (ItemsType.none, 0)), + ItemsType.gobul_hide: (1, (ItemsType.gobul_coin, 3), (ItemsType.none, 0)), + ItemsType.prize_gold_sword: (1, (ItemsType.lagiacrus_coin, 15), (ItemsType.pinnacle_coin, 8)), + ItemsType.great_jagi_hide: (1, (ItemsType.great_jagi_coin, 3), (ItemsType.none, 0)), + ItemsType.bone_husk_l: (2, (ItemsType.great_bagi_claw, 1), (ItemsType.none, 0)), + ItemsType.screamer: (3, (ItemsType.r_ludroth_scale, 1), (ItemsType.none, 0)), + ItemsType.lagiacrus_hide: (1, (ItemsType.lagiacrus_coin, 3), (ItemsType.none, 0)), + ItemsType.qurupeco_scale: (1, (ItemsType.qurupeco_coin, 3), (ItemsType.none, 0)), + ItemsType.rathalos_scale: (1, (ItemsType.rathalos_coin, 3), (ItemsType.none, 0)), + ItemsType.rathian_scale: (1, (ItemsType.rathian_coin, 3), (ItemsType.pinnacle_coin, 2)), + ItemsType.armor_stone: (3, (ItemsType.deviljho_coin, 1), (ItemsType.pinnacle_coin, 1)), + ItemsType.scatterfish: (2, (ItemsType.machalite_ore, 2), (ItemsType.none, 0)), + ItemsType.wyvern_claw_: (8, (ItemsType.great_bagi_claw, 1), (ItemsType.rathian_coin, 1)), + ItemsType.wyvern_fang: (8, (ItemsType.qurupeco_scale, 1), (ItemsType.none, 0)) +} + +if __name__ == "__main__": + import json + + def get_trading_post_entry(entry): + qty, price1, price2 = TRADING_POST_OPTIONS[entry] + return [(entry, qty), price1, price2] + + trading_post = [ + [ + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.waterblock_seed), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sharpened_fang), + + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.sap_plant), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sleepyfish), + + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.dragon_toadstool), + ], + [ + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.burst_arowana), + + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.fire_herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.parashroom), + + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.sleepyfish), + get_trading_post_entry(ItemsType.fire_herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.stone), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.stormsender_seed), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.toadstool), + + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.adamant_seed), + get_trading_post_entry(ItemsType.stormsender_seed), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.monster_bone_m), + + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.blue_mushroom), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.qurupeco_scale), + ], + [ + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sap_plant), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.bitterbug), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.sleepyfish), + + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sleep_herb), + + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.gobul_hide), + ], + [ + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.popfish), + + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.adamant_seed), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.exciteshroom), + + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.bomberry), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.honey), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.toadstool), + + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.snakebee_larva), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.bomberry), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.popfish), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.yambug), + + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.might_seed), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.monster_bone_m), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.honey), + + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.ice_crystal), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bomberry), + + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.bitterbug), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.sleepyfish), + get_trading_post_entry(ItemsType.blue_mushroom), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.waterblock_seed), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.snakebee_larva), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + ] + + with open('event/trading_post.json', "w") as outfile: + json.dump(trading_post, outfile, indent=4) + print("done!") diff --git a/event/Alluring Dress.json b/event/Alluring Dress.json new file mode 100644 index 0000000..ff25c0a --- /dev/null +++ b/event/Alluring Dress.json @@ -0,0 +1,310 @@ +{ + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 30, + "hrp_reward": 120, + "rewards_row_1": [ + [ + 443, + 1, + 1 + ], + [ + 334, + 1, + 5 + ], + [ + 562, + 1, + 16 + ], + [ + 602, + 1, + 24 + ], + [ + 29, + 2, + 12 + ], + [ + 328, + 1, + 12 + ], + [ + 444, + 1, + 5 + ], + [ + 109, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 443, + 1, + 1 + ], + [ + 334, + 1, + 5 + ], + [ + 562, + 1, + 16 + ], + [ + 602, + 1, + 24 + ], + [ + 29, + 2, + 12 + ], + [ + 328, + 1, + 12 + ], + [ + 444, + 1, + 5 + ], + [ + 109, + 1, + 25 + ] + ], + "objective_type": 32, + "zenny_reward": 4000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": -1200.5, + "pos_y": -2538.5, + "room": 1, + "rot_z": 0, + "rot_y": -1, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -42.7, + "pos_x": -1400.5, + "pos_y": -1538.5, + "room": 1, + "rot_z": 0, + "rot_y": -161, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2042.7, + "pos_x": -400.5, + "pos_y": -1038.5, + "room": 1, + "rot_z": 0, + "rot_y": -21, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": -2200.5, + "pos_y": -2538.5, + "room": 1, + "rot_z": 0, + "rot_y": -1, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": 1400.5, + "pos_y": -1038.5, + "room": 1, + "rot_z": 0, + "rot_y": -21, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 1500, + "resources": 0, + "details": "My sister's interest in\nmonsters is beginning to\nbecome scandalous! She simply\nmust find a husband --\nhopefully at the next ball. We\nneed enough Sharqskin for her\ndress, so please slay 30 fish!", + "description": "Hunt 30 Sharq", + "wave_1_transition_target": 0, + "hrp_restriction": 20, + "quest_fee": 400, + "quest_id": 61009, + "name": "Alluring Dress", + "main_monster_2": 0, + "main_monster_1": 32, + "supply_set_number": 48, + "summon": 1677787404, + "client": "Elder Princess", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + } + } +} \ No newline at end of file diff --git a/event/Animal Attractions.json b/event/Animal Attractions.json new file mode 100644 index 0000000..372258e --- /dev/null +++ b/event/Animal Attractions.json @@ -0,0 +1,935 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1250, + "rewards_row_1": [ + [ + 300, + 1, + 2 + ], + [ + 299, + 1, + 24 + ], + [ + 301, + 1, + 18 + ], + [ + 155, + 1, + 8 + ], + [ + 154, + 1, + 8 + ], + [ + 303, + 1, + 12 + ], + [ + 590, + 1, + 28 + ] + ], + "rewards_row_2": [ + [ + 300, + 1, + 2 + ], + [ + 299, + 1, + 24 + ], + [ + 301, + 1, + 18 + ], + [ + 155, + 1, + 8 + ], + [ + 154, + 1, + 8 + ], + [ + 303, + 1, + 12 + ], + [ + 590, + 1, + 28 + ] + ], + "objective_type": 8, + "zenny_reward": 14400, + "type": 129 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 25, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 5200, + "resources": 0, + "details": "You'll need more than big\nmuscles and bigger weapons to\ncapture two of the fiercest\nmonsters around -- you'll need\nfinesse! If you live for the\nart and craft of the hunt,\nshow me what you got!", + "description": "Capture 2 Barroth", + "wave_1_transition_target": 0, + "hrp_restriction": 7, + "quest_fee": 1000, + "quest_id": 61003, + "name": "Animal Attractions", + "main_monster_2": 33, + "main_monster_1": 36, + "supply_set_number": 14, + "summon": 0, + "client": "Passionate Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 25, + "boss_id": 1, + "type": 8, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 25, + "boss_id": 1, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Blood Sport.json b/event/Blood Sport.json index bea5c12..36472fc 100644 --- a/event/Blood Sport.json +++ b/event/Blood Sport.json @@ -133,6 +133,90 @@ "rot_x": 0, "type": 40, "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -1404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -3404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -5404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -4404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -4038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 } ] ], diff --git a/event/Cold Call.json b/event/Cold Call.json new file mode 100644 index 0000000..6a781b2 --- /dev/null +++ b/event/Cold Call.json @@ -0,0 +1,979 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 5, + "zenny_reward": 0, + "type": 1 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 2240, + "rewards_row_1": [ + [ + 405, + 1, + 2 + ], + [ + 292, + 1, + 12 + ], + [ + 541, + 1, + 20 + ], + [ + 441, + 1, + 7 + ], + [ + 440, + 1, + 14 + ], + [ + 409, + 1, + 5 + ], + [ + 108, + 1, + 10 + ], + [ + 112, + 1, + 5 + ], + [ + 591, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 405, + 1, + 2 + ], + [ + 292, + 1, + 12 + ], + [ + 541, + 1, + 20 + ], + [ + 441, + 1, + 7 + ], + [ + 440, + 1, + 14 + ], + [ + 409, + 1, + 5 + ], + [ + 108, + 1, + 10 + ], + [ + 112, + 1, + 5 + ], + [ + 591, + 1, + 25 + ] + ], + "objective_type": 14, + "zenny_reward": 16000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 4, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": -979.26, + "pos_x": -559.73, + "pos_y": 20.32, + "room": 1, + "rot_z": 0, + "rot_y": 352, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -616.77, + "pos_x": 207.09, + "pos_y": 5.0, + "room": 1, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 28, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1620.63, + "pos_x": 1189.65, + "pos_y": 10.65, + "room": 2, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1651.16, + "pos_x": 760.17, + "pos_y": 27.35, + "room": 2, + "rot_z": 0, + "rot_y": -22, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1902.14, + "pos_x": 724.92, + "pos_y": 2.63, + "room": 2, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1144.14, + "pos_x": -1433.39, + "pos_y": 13.81, + "room": 2, + "rot_z": 0, + "rot_y": 426, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 918.99, + "pos_x": -1297.7, + "pos_y": 12.96, + "room": 2, + "rot_z": 0, + "rot_y": 477, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 806.39, + "pos_x": -1437.67, + "pos_y": 27.98, + "room": 2, + "rot_z": 0, + "rot_y": 534, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 768.87, + "pos_x": 1137.17, + "pos_y": 5.05, + "room": 2, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 0, + "unk2": 255, + "pos_z": 1833.63, + "pos_x": 14.17, + "pos_y": 46.5, + "room": 2, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 1106.89, + "pos_x": 556.11, + "pos_y": 18.99, + "room": 2, + "rot_z": 0, + "rot_y": 728, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": 1109.13, + "pos_x": -1739.64, + "pos_y": 34.73, + "room": 2, + "rot_z": 0, + "rot_y": -102, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -1964.12, + "pos_x": 969.57, + "pos_y": 0.5, + "room": 2, + "rot_z": 0, + "rot_y": -102, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 314.53, + "pos_x": 3146.44, + "pos_y": 40.98, + "room": 3, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -709.74, + "pos_x": 3471.39, + "pos_y": 7.0, + "room": 3, + "rot_z": 0, + "rot_y": -136, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3259.04, + "pos_x": 3589.04, + "pos_y": 5.0, + "room": 3, + "rot_z": 0, + "rot_y": -11, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3166.77, + "pos_x": 3306.99, + "pos_y": 5.0, + "room": 3, + "rot_z": 0, + "rot_y": -34, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3692.1, + "pos_x": 3546.64, + "pos_y": 15.73, + "room": 3, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3606.37, + "pos_x": 3742.35, + "pos_y": 29.38, + "room": 3, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 20.74, + "pos_x": 76.48, + "pos_y": 18.62, + "room": 4, + "rot_z": 0, + "rot_y": 298, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -353.74, + "pos_x": 643.46, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 25696, + "rot_x": 0, + "type": 26, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 236.08, + "pos_x": 345.94, + "pos_y": 3.39, + "room": 4, + "rot_z": 0, + "rot_y": -59, + "rot_x": 0, + "type": 26, + "quantity": 7 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -299.36, + "pos_x": 1276.36, + "pos_y": 10.24, + "room": 4, + "rot_z": 0, + "rot_y": -19, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -701.98, + "pos_x": 3776.99, + "pos_y": 0.61, + "room": 4, + "rot_z": 0, + "rot_y": 46555, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 479.04, + "pos_x": 3282.63, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -124.31, + "pos_x": 2717.68, + "pos_y": 0.6, + "room": 4, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -347.36, + "pos_x": -629.64, + "pos_y": 1496.43, + "room": 4, + "rot_z": 0, + "rot_y": 5, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -1054.46, + "pos_x": -380.25, + "pos_y": 1428.15, + "room": 4, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2848.38, + "pos_x": 4169.78, + "pos_y": 7.24, + "room": 4, + "rot_z": 0, + "rot_y": 182, + "rot_x": 0, + "type": 35, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": 438.18, + "pos_x": 1700.26, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -579.15, + "pos_x": -2452.98, + "pos_y": 44.18, + "room": 4, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1208.04, + "pos_x": 103.34, + "pos_y": 41.02, + "room": 4, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 35, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 157.88, + "pos_x": -11.26, + "pos_y": -15.36, + "room": 5, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 13, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 509.01, + "pos_x": -1291.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1393.44, + "pos_x": -855.8, + "pos_y": 0.48, + "room": 5, + "rot_z": 0, + "rot_y": 159, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1264.1, + "pos_x": -525.73, + "pos_y": -4.16, + "room": 5, + "rot_z": 0, + "rot_y": -182, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1717.3, + "pos_x": -574.99, + "pos_y": -4.64, + "room": 5, + "rot_z": 0, + "rot_y": 159, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -267.32, + "pos_x": 865.61, + "pos_y": -4.3, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -1119.9, + "pos_x": -1246.4, + "pos_y": 6.31, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1426.87, + "pos_x": -1266.86, + "pos_y": 17.79, + "room": 6, + "rot_z": 0, + "rot_y": 26038, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1385.65, + "pos_x": -1838.98, + "pos_y": -0.78, + "room": 6, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 13, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1722.55, + "pos_x": -1219.15, + "pos_y": -2.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -712.22, + "pos_x": 1068.11, + "pos_y": -9.24, + "room": 6, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 187.09, + "pos_x": 784.49, + "pos_y": -8.94, + "room": 6, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -936.3, + "pos_x": 758.48, + "pos_y": 20.97, + "room": 6, + "rot_z": 0, + "rot_y": -125, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1641.55, + "pos_x": 1495.12, + "pos_y": 21.92, + "room": 7, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -548.03, + "pos_x": -1936.97, + "pos_y": 7.33, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1374.15, + "pos_x": -1706.1, + "pos_y": 2.87, + "room": 7, + "rot_z": 0, + "rot_y": 136, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -910.88, + "pos_x": 399.71, + "pos_y": 0.0, + "room": 7, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 13, + "quantity": 4 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 24.7, + "pos_x": -776.39, + "pos_y": 27.75, + "room": 9, + "rot_z": 0, + "rot_y": 23347, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 214.45, + "pos_x": -1321.35, + "pos_y": 97.17, + "room": 9, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 13, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1084.8, + "pos_x": -1395.61, + "pos_y": 88.08, + "room": 9, + "rot_z": 0, + "rot_y": 30646, + "rot_x": 0, + "type": 13, + "quantity": 2 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 27, + "wave_2_transition_type": 0, + "location": 4, + "penalty_per_cart": 6000, + "resources": 0, + "details": "It was just a typical sub-zero\nnight in the Tundra. But then,\nBOOM! The sky flashed and the\nground quaked, like something\nbig had crashed down. Then the\nmonsters came. Help! We can't\nwork under these conditions!", + "description": "Hunt a Gig., Bar. & bird wyv.", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 1600, + "quest_id": 61006, + "name": "Cold Call", + "main_monster_2": 26, + "main_monster_1": 28, + "supply_set_number": 8, + "summon": 0, + "client": "Tundra-expedition Member", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 34, + "boss_id": 1, + "type": 4, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 35, + "boss_id": 2, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 34, + "boss_id": 0, + "type": 14, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Double Diablos.json b/event/Double Diablos.json new file mode 100644 index 0000000..c5ca9bd --- /dev/null +++ b/event/Double Diablos.json @@ -0,0 +1,225 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1920, + "rewards_row_1": [ + [ + 445, + 1, + 1 + ], + [ + 457, + 1, + 11 + ], + [ + 456, + 1, + 20 + ], + [ + 295, + 1, + 18 + ], + [ + 595, + 1, + 8 + ], + [ + 455, + 1, + 7 + ], + [ + 441, + 1, + 10 + ], + [ + 594, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 1 + ], + [ + 457, + 1, + 11 + ], + [ + 456, + 1, + 20 + ], + [ + 295, + 1, + 18 + ], + [ + 595, + 1, + 8 + ], + [ + 455, + 1, + 7 + ], + [ + 441, + 1, + 10 + ], + [ + 594, + 1, + 25 + ] + ], + "objective_type": 6, + "zenny_reward": 38400, + "type": 129 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 59, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 12800, + "resources": 1, + "details": "One Diablos would dismember\nyour average weekend warrior,\nbut two Diablos!? Only true\nhunters need apply for this\nQuest. Plan your tactics well,\nand perhaps we can compare\nnotes later... if you survive.", + "description": "Capture 2 Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2600, + "quest_id": 61014, + "name": "Double Diablos", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 0, + "client": "Passionate Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 11, + "hp_spread": 0, + "level": 59, + "boss_id": 2, + "type": 6, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 10, + "hp_spread": 0, + "level": 59, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Fiery Skies, Frozen Fields.json b/event/Fiery Skies, Frozen Fields.json new file mode 100644 index 0000000..c9ae4df --- /dev/null +++ b/event/Fiery Skies, Frozen Fields.json @@ -0,0 +1,205 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 4290, + "rewards_row_1": [ + [ + 177, + 2, + 25 + ], + [ + 451, + 2, + 24 + ], + [ + 445, + 2, + 17 + ], + [ + 446, + 1, + 15 + ], + [ + 174, + 1, + 10 + ], + [ + 183, + 1, + 9 + ] + ], + "rewards_row_2": [ + [ + 177, + 2, + 25 + ], + [ + 451, + 2, + 24 + ], + [ + 445, + 2, + 17 + ], + [ + 446, + 1, + 15 + ], + [ + 174, + 1, + 10 + ], + [ + 183, + 1, + 9 + ] + ], + "objective_type": 5, + "zenny_reward": 42000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 60, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 14000, + "resources": 1, + "details": "It's time for a FESTIVAL!\nPresenting the King of the\nSkies and the Knight of the\nTundra -- the flash of fire\nand ice from above and\nbelow -- only at the arena!\nDo you have what it takes?", + "description": "Hunt a Barioth and\na Rathalos", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 4200, + "quest_id": 61023, + "name": "Fiery Skies, Frozen Fields", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 0, + "client": "Deserted Island Maiden", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 10, + "hp_spread": 0, + "level": 59, + "boss_id": 1, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 11, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Flooded Forest Free-For-All.json b/event/Flooded Forest Free-For-All.json index decf8d0..16a83c3 100644 --- a/event/Flooded Forest Free-For-All.json +++ b/event/Flooded Forest Free-For-All.json @@ -201,7 +201,7 @@ "monster_2": { "size_spread": 3, "hp_spread": 0, - "level": 31, + "level": 54, "boss_id": 1, "type": 15, "starting_area": 0, @@ -211,7 +211,7 @@ "monster_3": { "size_spread": 3, "hp_spread": 0, - "level": 31, + "level": 54, "boss_id": 2, "type": 18, "starting_area": 0, @@ -221,7 +221,7 @@ "monster_1": { "size_spread": 3, "hp_spread": 0, - "level": 31, + "level": 54, "boss_id": 0, "type": 16, "starting_area": 0, diff --git a/event/Gobuled Everything in Sight.json b/event/Gobuled Everything in Sight.json new file mode 100644 index 0000000..8627e2e --- /dev/null +++ b/event/Gobuled Everything in Sight.json @@ -0,0 +1,264 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 2, + "hrp_reward": 60, + "rewards_row_1": [ + [ + 326, + 1, + 10 + ], + [ + 323, + 1, + 24 + ], + [ + 324, + 1, + 20 + ], + [ + 325, + 1, + 28 + ], + [ + 155, + 1, + 18 + ] + ], + "description": "Fish out Gobul once", + "objective_type": 18, + "zenny_reward": 1200, + "type": 4096 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1230, + "rewards_row_1": [ + [ + 110, + 1, + 15 + ], + [ + 326, + 1, + 13 + ], + [ + 323, + 1, + 15 + ], + [ + 440, + 1, + 25 + ], + [ + 422, + 1, + 12 + ], + [ + 441, + 1, + 10 + ], + [ + 329, + 1, + 10 + ] + ], + "rewards_row_2": [ + [ + 110, + 1, + 15 + ], + [ + 326, + 1, + 13 + ], + [ + 323, + 1, + 15 + ], + [ + 440, + 1, + 25 + ], + [ + 422, + 1, + 12 + ], + [ + 441, + 1, + 10 + ], + [ + 329, + 1, + 10 + ] + ], + "objective_type": 18, + "zenny_reward": 5600, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 100, + "rewards_row_1": [ + [ + 326, + 1, + 10 + ], + [ + 323, + 1, + 24 + ], + [ + 324, + 1, + 20 + ], + [ + 325, + 1, + 28 + ], + [ + 155, + 1, + 18 + ] + ], + "description": "Destroy Gobul's lantern", + "objective_type": 18, + "zenny_reward": 800, + "type": 516 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 32, + "wave_2_transition_type": 0, + "location": 3, + "penalty_per_cart": 1900, + "resources": 0, + "details": "Taihen! My small ships all\ngobbled by huge Gobul! The\ncrew all escaped, but goods\nare in fish's stomach, yes --\neven some are super-rare items\nthere! Only hunters can get my\nitems back. Onegai!", + "description": "Hunt a Gobul", + "smallmonster_data_file": "sm_ff_free_for_all.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 550, + "quest_id": 61010, + "name": "Gobuled Everything in Sight", + "main_monster_2": 34, + "main_monster_1": 17, + "supply_set_number": 25, + "summon": 0, + "client": "Argosy Captain", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 32, + "boss_id": 0, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 150 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Bird and Brute.json b/event/Grudge Match Bird and Brute.json index a02f2c5..e6e1f6e 100644 --- a/event/Grudge Match Bird and Brute.json +++ b/event/Grudge Match Bird and Brute.json @@ -266,7 +266,7 @@ "quest_rank": 4, "wave_2_transition_target": 0, "wave_2_transition_quantity": 0, - "general_enemy_level": 23, + "general_enemy_level": 55, "wave_2_transition_type": 0, "location": 8, "penalty_per_cart": 350, @@ -401,7 +401,7 @@ "monster_2": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 1, "type": 8, "starting_area": 0, @@ -421,7 +421,7 @@ "monster_1": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 0, "type": 3, "starting_area": 0, diff --git a/event/Grudge Match Brute Horns.json b/event/Grudge Match Brute Horns.json new file mode 100644 index 0000000..d7b6a0e --- /dev/null +++ b/event/Grudge Match Brute Horns.json @@ -0,0 +1,521 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 7, + 56 + ], + null, + null, + 129, + 81, + 74, + 82, + 99, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 20 + ], + [ + 26, + 10 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ], + [ + 7, + 2 + ], + [ + 582, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 9, + 46 + ], + null, + null, + 134, + 114, + 99, + 97, + 107, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 10, + 36 + ], + null, + null, + 75, + 79, + 124, + 111, + 111, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 15, + 37 + ], + null, + null, + 100, + 106, + 99, + 101, + 99, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 700, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay an Uragaan\nand a Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60010, + "name": "Grudge Match: Brute Horns", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 588, + 1, + 10 + ], + [ + 612, + 1, + 20 + ], + [ + 431, + 1, + 10 + ], + [ + 444, + 1, + 10 + ], + [ + 445, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 8 + ], + [ + 587, + 1, + 22 + ] + ], + "rewards_row_2": [], + "objective_type": 9, + "zenny_reward": 2000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 6, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 18, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Ice and Fire.json b/event/Grudge Match Ice and Fire.json new file mode 100644 index 0000000..009d238 --- /dev/null +++ b/event/Grudge Match Ice and Fire.json @@ -0,0 +1,473 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 43 + ], + null, + null, + 80, + 86, + 79, + 87, + 85, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 9, + 5 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 7, + 41 + ], + null, + null, + 76, + 82, + 75, + 83, + 81, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 391, + 2 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 9, + 74 + ], + null, + null, + 136, + 86, + 95, + 103, + 101, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 16, + 2 + ], + [ + 10, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 14, + 28 + ], + null, + null, + 98, + 104, + 97, + 105, + 103, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 391, + 2 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 1 + ], + [ + 51, + 2 + ] + ], + [] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 250, + "resources": 2, + "details": "Double trouble! The forecast\ntoday calls for a storm of fire\nand ice -- with a 90 percent\nchance of death -- as you take\non both Barioth and Agnaktor at\nonce! Days like this I just\nwanna stay in bed.", + "description": "Slay a Barioth\nand an Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60009, + "name": "Grudge Match: Ice and Fire", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 379, + 1, + 13 + ], + [ + 586, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 444, + 1, + 8 + ], + [ + 445, + 1, + 5 + ], + [ + 569, + 1, + 13 + ], + [ + 570, + 1, + 8 + ], + [ + 587, + 1, + 19 + ] + ], + "rewards_row_2": [], + "objective_type": 5, + "zenny_reward": 1500, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Lagiacrus.json b/event/Grudge Match Lagiacrus.json new file mode 100644 index 0000000..cae60ee --- /dev/null +++ b/event/Grudge Match Lagiacrus.json @@ -0,0 +1,423 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 7 + ], + null, + null, + 132, + 39, + 122, + 40, + 39, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 394, + 2 + ], + [ + 360, + 2 + ], + [ + 9, + 5 + ], + [ + 5, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 19 + ], + null, + null, + 40, + 43, + 40, + 3, + 3, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 10, + 5 + ], + [ + 4, + 1 + ] + ], + [] + ], + [ + [ + 10, + 73 + ], + null, + null, + 136, + 23, + 38, + 42, + 41, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 134, + 3 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 11, + 11 + ], + [ + 12, + 13 + ], + [ + 13, + 12 + ], + 133, + 19, + 16, + 37, + 20, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 582, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 62, + 9 + ], + [ + 73, + 12 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 68, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Lagiacrus", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60003, + "name": "Grudge Match: Lagiacrus", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 611, + 1, + 21 + ], + [ + 611, + 2, + 7 + ], + [ + 431, + 1, + 13 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 13 + ], + [ + 569, + 1, + 20 + ], + [ + 615, + 1, + 18 + ] + ], + "rewards_row_2": [], + "objective_type": 15, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Land Lords.json b/event/Grudge Match Land Lords.json index 56620a5..98b4973 100644 --- a/event/Grudge Match Land Lords.json +++ b/event/Grudge Match Land Lords.json @@ -598,7 +598,7 @@ "quest_rank": 6, "wave_2_transition_target": 0, "wave_2_transition_quantity": 0, - "general_enemy_level": 23, + "general_enemy_level": 55, "wave_2_transition_type": 0, "location": 8, "penalty_per_cart": 1150, @@ -733,7 +733,7 @@ "monster_2": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 1, "type": 9, "starting_area": 0, @@ -743,7 +743,7 @@ "monster_3": { "size_spread": 0, "hp_spread": 0, - "level": 18, + "level": 56, "boss_id": 2, "type": 7, "starting_area": 0, @@ -753,7 +753,7 @@ "monster_1": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 0, "type": 8, "starting_area": 0, diff --git a/event/Grudge Match Qurupeco.json b/event/Grudge Match Qurupeco.json new file mode 100644 index 0000000..f8eab56 --- /dev/null +++ b/event/Grudge Match Qurupeco.json @@ -0,0 +1,386 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 17 + ], + null, + null, + 24, + 27, + 24, + 28, + 27, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 134, + 5 + ], + [ + 391, + 2 + ], + [ + 3, + 1 + ], + [ + 7, + 2 + ], + [ + 582, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 7, + 4 + ], + null, + null, + 8, + 20, + 7, + 21, + 21, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 9, + 4 + ], + null, + null, + 10, + 4, + 123, + 24, + 7, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 16, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 11, + 1 + ], + [ + 12, + 5 + ], + [ + 13, + 5 + ], + 21, + 24, + 0, + 6, + 10, + [ + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 50, + 1 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 65, + 5 + ], + [ + 59, + 50 + ], + [ + 85, + 3 + ], + [ + 77, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 200, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Qurupeco", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60000, + "name": "Grudge Match: Qurupeco", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 27 + ], + [ + 607, + 2, + 10 + ], + [ + 431, + 1, + 10 + ], + [ + 327, + 1, + 22 + ], + [ + 569, + 1, + 16 + ], + [ + 615, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 3, + "zenny_reward": 500, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 3, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Rathian.json b/event/Grudge Match Rathian.json new file mode 100644 index 0000000..5532237 --- /dev/null +++ b/event/Grudge Match Rathian.json @@ -0,0 +1,435 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 46 + ], + null, + null, + 132, + 6, + 40, + 44, + 43, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 17, + 2 + ], + [ + 347, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 1 + ], + null, + null, + 134, + 33, + 30, + 38, + 17, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 17, + 2 + ], + [ + 347, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 10, + 44 + ], + null, + null, + 32, + 35, + 46, + 13, + 13, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 391, + 2 + ], + [ + 50, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 11, + 3 + ], + [ + 12, + 6 + ], + [ + 13, + 3 + ], + 7, + 38, + 35, + 8, + 10, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 65, + 5 + ], + [ + 92, + 9 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ], + [ + 89, + 10 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 26, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Hey there, fight fanatics!\nTonight's target is the Queen of\nthe Land, Rathian! A fan of\nflame attacks, she also packs a\npotent charge from on high!\nHunters better wear asbestos\nunderwear for this fight!", + "description": "Slay a Rathian", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60002, + "name": "Grudge Match: Rathian", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 610, + 1, + 21 + ], + [ + 610, + 2, + 7 + ], + [ + 431, + 1, + 13 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 14 + ], + [ + 569, + 1, + 19 + ], + [ + 615, + 1, + 18 + ] + ], + "rewards_row_2": [], + "objective_type": 1, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 26, + "boss_id": 0, + "type": 1, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Sea Power.json b/event/Grudge Match Sea Power.json new file mode 100644 index 0000000..5b051ee --- /dev/null +++ b/event/Grudge Match Sea Power.json @@ -0,0 +1,448 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 23 + ], + null, + null, + 58, + 100, + 75, + 60, + 59, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 14, + 18 + ], + null, + null, + 86, + 92, + 58, + 9, + 9, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 50, + 3 + ] + ], + [] + ], + [ + [ + 9, + 48 + ], + null, + null, + 139, + 98, + 91, + 68, + 67, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 16, + 1 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 582, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 596, + 1 + ], + [ + 597, + 1 + ] + ], + [] + ], + [ + [ + 11, + 7 + ], + [ + 12, + 10 + ], + [ + 13, + 9 + ], + 95, + 101, + 94, + 102, + 100, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 1 + ], + [ + 582, + 2 + ], + [ + 2, + 2 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 93, + 10 + ], + [ + 68, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Royal Ludroth\nand a Gobul", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60007, + "name": "Grudge Match: Sea Power", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 585, + 1, + 10 + ], + [ + 609, + 2, + 23 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 6 + ], + [ + 569, + 1, + 16 + ], + [ + 570, + 1, + 6 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 16, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 18, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match The Two Flames.json b/event/Grudge Match The Two Flames.json index 569eeb3..9e63915 100644 --- a/event/Grudge Match The Two Flames.json +++ b/event/Grudge Match The Two Flames.json @@ -298,7 +298,7 @@ "quest_rank": 5, "wave_2_transition_target": 0, "wave_2_transition_quantity": 0, - "general_enemy_level": 23, + "general_enemy_level": 55, "wave_2_transition_type": 0, "location": 8, "penalty_per_cart": 350, @@ -433,7 +433,7 @@ "monster_2": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 1, "type": 1, "starting_area": 0, @@ -453,7 +453,7 @@ "monster_1": { "size_spread": 0, "hp_spread": 0, - "level": 23, + "level": 55, "boss_id": 0, "type": 2, "starting_area": 0, diff --git a/event/Grudge Match Uragaan.json b/event/Grudge Match Uragaan.json new file mode 100644 index 0000000..6ccd607 --- /dev/null +++ b/event/Grudge Match Uragaan.json @@ -0,0 +1,503 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -1404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -3404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -5404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -4404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -4038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 6 + ], + null, + null, + 30, + 12, + 32, + 13, + 13, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 391, + 2 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 10 + ], + null, + null, + 129, + 49, + 120, + 42, + 47, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 9, + 48 + ], + null, + null, + 42, + 45, + 124, + 5, + 45, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 15, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 11, + 5 + ], + [ + 12, + 5 + ], + [ + 13, + 6 + ], + 130, + 34, + 31, + 35, + 34, + [ + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 57, + 50 + ], + [ + 63, + 9 + ], + [ + 69, + 30 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 600, + "resources": 2, + "details": "Riled up, fight fans? Here comes\na dragon whose name is\nsynonymous with pain: Uragaan!\nOh, and we've added a time limit\nto make the fight extra fun. Are\nthe hunters up to the challenge?\nOutlook not good!", + "description": "Slay an Uragaan", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60004, + "name": "Grudge Match: Uragaan", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 612, + 1, + 19 + ], + [ + 612, + 2, + 7 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 12 + ], + [ + 569, + 1, + 20 + ], + [ + 615, + 1, + 20 + ] + ], + "rewards_row_2": [], + "objective_type": 9, + "zenny_reward": 1500, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Wyvern Trio.json b/event/Grudge Match Wyvern Trio.json new file mode 100644 index 0000000..f3e110e --- /dev/null +++ b/event/Grudge Match Wyvern Trio.json @@ -0,0 +1,499 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 19 + ], + null, + null, + 134, + 41, + 38, + 42, + 41, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 7, + 48 + ], + null, + null, + 44, + 47, + 44, + 46, + 45, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 10, + 38 + ], + null, + null, + 46, + 49, + 38, + 48, + 47, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 13 + ], + [ + 12, + 7 + ], + [ + 13, + 8 + ], + 138, + 44, + 41, + 45, + 44, + [ + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 3, + 1 + ], + [ + 582, + 2 + ], + [ + 50, + 2 + ], + [ + 68, + 60 + ], + [ + 70, + 60 + ] + ], + [ + [ + 54, + 99 + ], + [ + 57, + 50 + ], + [ + 59, + 60 + ], + [ + 60, + 60 + ], + [ + 66, + 5 + ], + [ + 67, + 5 + ], + [ + 93, + 10 + ], + [ + 77, + 12 + ], + [ + 84, + 5 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 40, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 1200, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay all 3 monsters", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60005, + "name": "Grudge Match: Wyvern Trio", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 131329 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 608, + 1, + 5 + ], + [ + 586, + 1, + 15 + ], + [ + 584, + 1, + 22 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 12 + ], + [ + 570, + 1, + 8 + ], + [ + 615, + 1, + 24 + ] + ], + "rewards_row_2": [], + "objective_type": 8, + "zenny_reward": 3000, + "type": 131329 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 5, + "zenny_reward": 0, + "type": 131329 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 1, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 2, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 0, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Hot Deal.json b/event/Hot Deal.json new file mode 100644 index 0000000..2db65b9 --- /dev/null +++ b/event/Hot Deal.json @@ -0,0 +1,857 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1240, + "rewards_row_1": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "objective_type": 19, + "zenny_reward": 13800, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 1240, + "rewards_row_1": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "description": "Hunt an Agnaktor", + "objective_type": 19, + "zenny_reward": 13800, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -947.91, + "pos_x": -494.25, + "pos_y": 47.01, + "room": 1, + "rot_z": 0, + "rot_y": 112147, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -712.51, + "pos_x": -1361.42, + "pos_y": 20.6, + "room": 1, + "rot_z": 0, + "rot_y": 79456, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -1406.32, + "pos_x": 1031.98, + "pos_y": 26.73, + "room": 1, + "rot_z": 0, + "rot_y": 152977, + "rot_x": 0, + "type": 34, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1809.58, + "pos_x": 3139.21, + "pos_y": -16.41, + "room": 2, + "rot_z": 0, + "rot_y": 14105, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2280.01, + "pos_x": 2598.0, + "pos_y": 64.57, + "room": 2, + "rot_z": 0, + "rot_y": 14478, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2453.7, + "pos_x": 2184.05, + "pos_y": 66.73, + "room": 2, + "rot_z": 0, + "rot_y": 11582, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1680.05, + "pos_x": 2741.8, + "pos_y": -53.82, + "room": 2, + "rot_z": 0, + "rot_y": 14128, + "rot_x": 0, + "type": 33, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4494.92, + "pos_x": 6982.8, + "pos_y": 73.73, + "room": 3, + "rot_z": 0, + "rot_y": 5856, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 4957.68, + "pos_x": 7778.32, + "pos_y": 66.41, + "room": 3, + "rot_z": 0, + "rot_y": 2872, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 5160.52, + "pos_x": 8087.79, + "pos_y": 83.54, + "room": 3, + "rot_z": 0, + "rot_y": 5774, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2473.3, + "pos_x": 8676.94, + "pos_y": 515.74, + "room": 3, + "rot_z": 0, + "rot_y": 6351, + "rot_x": 273, + "type": 39, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 639.95, + "pos_x": 672.08, + "pos_y": 25.43, + "room": 4, + "rot_z": 0, + "rot_y": 2264, + "rot_x": 0, + "type": 29, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": 2402.83, + "pos_x": -1151.12, + "pos_y": -43.31, + "room": 4, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 29, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 3042.75, + "pos_x": 1580.62, + "pos_y": 129.42, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 39, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 2633.18, + "pos_x": 1743.0, + "pos_y": 339.42, + "room": 4, + "rot_z": 0, + "rot_y": 91, + "rot_x": 0, + "type": 39, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2724.68, + "pos_x": 1303.26, + "pos_y": 189.42, + "room": 4, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 39, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 104.92, + "pos_x": -1485.68, + "pos_y": 36.65, + "room": 4, + "rot_z": 0, + "rot_y": 3032, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -27.96, + "pos_x": 897.01, + "pos_y": 25.14, + "room": 4, + "rot_z": 0, + "rot_y": 56, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1861.15, + "pos_x": 2948.85, + "pos_y": 7.51, + "room": 4, + "rot_z": 0, + "rot_y": 20656, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 542.2, + "pos_x": -775.56, + "pos_y": 73.07, + "room": 5, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1218.55, + "pos_x": -3498.99, + "pos_y": 67.5, + "room": 5, + "rot_z": 0, + "rot_y": 4835, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -422.06, + "pos_x": 486.74, + "pos_y": 38.66, + "room": 5, + "rot_z": 0, + "rot_y": 1331, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1059.79, + "pos_x": 2864.76, + "pos_y": 49.34, + "room": 5, + "rot_z": 0, + "rot_y": 7296, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1571.42, + "pos_x": 1202.49, + "pos_y": 57.63, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1510.18, + "pos_x": -1733.55, + "pos_y": 56.88, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1076.53, + "pos_x": 393.15, + "pos_y": -35.75, + "room": 6, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 447.51, + "pos_x": -1170.83, + "pos_y": -30.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -202.83, + "pos_x": 1020.1, + "pos_y": 4.72, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1280.39, + "pos_x": -435.28, + "pos_y": -28.37, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 228.22, + "pos_x": 95.05, + "pos_y": -6.35, + "room": 7, + "rot_z": 0, + "rot_y": 1399, + "rot_x": 0, + "type": 21, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 268.38, + "pos_x": -2114.33, + "pos_y": 17.37, + "room": 7, + "rot_z": 0, + "rot_y": 19692, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1532.47, + "pos_x": -1877.72, + "pos_y": -22.42, + "room": 7, + "rot_z": 0, + "rot_y": 32312, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -496.28, + "pos_x": 625.43, + "pos_y": 3.37, + "room": 7, + "rot_z": 0, + "rot_y": 6283, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 61.89, + "pos_x": -1447.72, + "pos_y": 21.43, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1209.27, + "pos_x": 316.55, + "pos_y": -3.36, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1099.8, + "pos_x": 1008.65, + "pos_y": -9.18, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1581.6, + "pos_x": 728.75, + "pos_y": -19.44, + "room": 8, + "rot_z": 0, + "rot_y": 1581.6, + "rot_x": 0, + "type": 30, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 301.92, + "pos_x": -375.43, + "pos_y": 6.66, + "room": 8, + "rot_z": 0, + "rot_y": 40860, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -50.4, + "pos_x": 479.45, + "pos_y": 30.53, + "room": 8, + "rot_z": 0, + "rot_y": 59178, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1552.73, + "pos_x": 2190.05, + "pos_y": -6.53, + "room": 8, + "rot_z": 0, + "rot_y": 24814, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -971.03, + "pos_x": 1226.78, + "pos_y": 14.44, + "room": 9, + "rot_z": 0, + "rot_y": 49126, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -556.52, + "pos_x": 30.91, + "pos_y": 11.0, + "room": 9, + "rot_z": 0, + "rot_y": 19871, + "rot_x": 0, + "type": 21, + "quantity": 3 + } + ], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 57, + "wave_2_transition_type": 0, + "location": 5, + "penalty_per_cart": 5000, + "resources": 1, + "details": "A coupla Agnaktor are meltin'\nmy profits on the Volcano,\nsee? Deal with 'em, and I'll\ngive you a weapon recipe I...\nacquired. They say this\narmament can bring wealth,\nor a mysterious death...", + "description": "Hunt 2 Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2750, + "quest_id": 61015, + "name": "Hot Deal", + "main_monster_2": 29, + "main_monster_1": 21, + "supply_set_number": 27, + "summon": 0, + "client": "Shady Merchant", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 57, + "boss_id": 0, + "type": 19, + "starting_area": 0, + "spawn_count": 2, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Jump Four Jaggi.json b/event/Jump Four Jaggi.json index 191a8b1..b4f67ff 100644 --- a/event/Jump Four Jaggi.json +++ b/event/Jump Four Jaggi.json @@ -89,7 +89,7 @@ }, "subquest_1": { "objective_num": 2, - "hrp_reward": 220, + "hrp_reward": 440, "rewards_row_1": [ [ 307, diff --git a/event/Jump Fourty-Eight Jaggi.json b/event/Jump Fourty-Eight Jaggi.json index 9e56886..10bf812 100644 --- a/event/Jump Fourty-Eight Jaggi.json +++ b/event/Jump Fourty-Eight Jaggi.json @@ -875,7 +875,7 @@ "wave_1_transition_target": 0, "hrp_restriction": 0, "quest_fee": 400, - "quest_id": 61003, + "quest_id": 61001, "name": "Jump Fourty-Eight Jaggi", "main_monster_2": 31, "main_monster_1": 36, diff --git a/event/Lords of the Sea and Sky.json b/event/Lords of the Sea and Sky.json new file mode 100644 index 0000000..b9b87b2 --- /dev/null +++ b/event/Lords of the Sea and Sky.json @@ -0,0 +1,225 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1760, + "rewards_row_1": [ + [ + 499, + 1, + 10 + ], + [ + 313, + 1, + 14 + ], + [ + 177, + 1, + 23 + ], + [ + 176, + 1, + 15 + ], + [ + 174, + 1, + 4 + ], + [ + 503, + 1, + 4 + ], + [ + 440, + 1, + 17 + ], + [ + 441, + 1, + 8 + ], + [ + 442, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 441, + 1, + 25 + ], + [ + 440, + 1, + 18 + ], + [ + 442, + 1, + 5 + ], + [ + 444, + 1, + 12 + ], + [ + 445, + 1, + 20 + ], + [ + 446, + 1, + 6 + ], + [ + 110, + 1, + 14 + ] + ], + "objective_type": 15, + "zenny_reward": 23400, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 60, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 7800, + "resources": 1, + "details": "In the Arena tonight, reunited\nand it feels so--gahh! It's\nthe king and lord of sky and\nsea, Rathalos and Lagiacrus!\nTheir victims: our hunters!\nPrepare for a bout that'll\ngo down in hunting history!", + "description": "Hunt a Lagiacrus\nand a Rathalos", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 2300, + "quest_id": 61019, + "name": "Lords of the Sea and Sky", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 1677787954, + "client": "Arena Manager", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 60, + "boss_id": 1, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Marine Warfare.json b/event/Marine Warfare.json new file mode 100644 index 0000000..18f79a5 --- /dev/null +++ b/event/Marine Warfare.json @@ -0,0 +1,210 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1480, + "rewards_row_1": [ + [ + 445, + 1, + 8 + ], + [ + 498, + 1, + 15 + ], + [ + 495, + 1, + 24 + ], + [ + 496, + 1, + 20 + ], + [ + 325, + 1, + 8 + ], + [ + 432, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 441, + 1, + 10 + ], + [ + 440, + 1, + 16 + ], + [ + 442, + 1, + 3 + ], + [ + 154, + 2, + 23 + ], + [ + 153, + 3, + 20 + ], + [ + 343, + 10, + 14 + ], + [ + 342, + 18, + 14 + ] + ], + "objective_type": 18, + "zenny_reward": 16800, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 54, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 5600, + "resources": 1, + "details": "Seeking hunters to aid in the\ndevelopment of underwater\nweaponry by hunting aquatic\nmonsters. The Guild will\nprovide the venue and the\nmonster, but applicants should\nhave their own equipment.", + "description": "Hunt 2 Gobul\n", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 1650, + "quest_id": 61013, + "name": "Marine Warfare", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Guild Weapons Development", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 54, + "boss_id": 1, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 54, + "boss_id": 0, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Poached Wyvern Eggs.json b/event/Poached Wyvern Eggs.json new file mode 100644 index 0000000..44514a2 --- /dev/null +++ b/event/Poached Wyvern Eggs.json @@ -0,0 +1,1864 @@ +{ + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 80, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "description": "Sever Rathian's Tail", + "objective_type": 1, + "zenny_reward": 1200, + "type": 516 + }, + "main_quest": { + "objective_num": 9, + "hrp_reward": 400, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "objective_type": 139, + "zenny_reward": 30000, + "type": 2 + }, + "subquest_1": { + "objective_num": 2, + "hrp_reward": 80, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "description": "Deliver 2 Wyvern Tears", + "objective_type": 280, + "zenny_reward": 3200, + "type": 2 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -5940.68, + "pos_x": -5057.57, + "pos_y": -2.26, + "room": 1, + "rot_z": 0, + "rot_y": -68, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -6502.93, + "pos_x": -4811.71, + "pos_y": -66.91, + "room": 1, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 117.64, + "pos_x": -6654.1, + "pos_y": 23.12, + "room": 2, + "rot_z": 0, + "rot_y": 455, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 3585.26, + "pos_x": -4409.86, + "pos_y": 160.61, + "room": 2, + "rot_z": 0, + "rot_y": -164, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2758.35, + "pos_x": -2714.98, + "pos_y": 150.44, + "room": 2, + "rot_z": 0, + "rot_y": -244, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2717.77, + "pos_x": -3714.37, + "pos_y": 77.64, + "room": 2, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -843.3, + "pos_x": 2690.34, + "pos_y": 20.0, + "room": 3, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 34, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 933.94, + "pos_x": 1508.85, + "pos_y": 0.71, + "room": 3, + "rot_z": 0, + "rot_y": 250, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -894.84, + "pos_x": 948.5, + "pos_y": -19.0, + "room": 3, + "rot_z": 0, + "rot_y": -307, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 468.25, + "pos_x": -671.47, + "pos_y": -14.07, + "room": 3, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 34, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1397.25, + "pos_x": -877.96, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -125, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 704.8, + "pos_x": -1213.07, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 312, + "rot_x": 0, + "type": 34, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1759.45, + "pos_x": -1976.37, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2294.16, + "pos_x": -2320.33, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3073.44, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 734.6, + "pos_x": -442.09, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 548.27, + "pos_x": -1122.44, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 182, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1238.55, + "pos_x": -1077.87, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 307, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1474.43, + "pos_x": -573.41, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 392, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 892.53, + "pos_x": 965.46, + "pos_y": 27.06, + "room": 9, + "rot_z": 0, + "rot_y": 563, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1123.58, + "pos_x": 732.0, + "pos_y": 24.88, + "room": 9, + "rot_z": 0, + "rot_y": 637, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -149.63, + "pos_x": 962.01, + "pos_y": 19.44, + "room": 9, + "rot_z": 0, + "rot_y": 540, + "rot_x": 0, + "type": 11, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -417.64, + "pos_x": 220.21, + "pos_y": 20.45, + "room": 9, + "rot_z": 0, + "rot_y": 557, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 98.15, + "pos_x": -439.6, + "pos_y": 13.03, + "room": 9, + "rot_z": 0, + "rot_y": 631, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 803.55, + "pos_x": -237.23, + "pos_y": 2.0, + "room": 9, + "rot_z": 0, + "rot_y": 648, + "rot_x": 0, + "type": 11, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1193.7, + "pos_x": -2085.64, + "pos_y": -283.99, + "room": 10, + "rot_z": 0, + "rot_y": -204, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -207.68, + "pos_x": -2525.41, + "pos_y": -190.61, + "room": 10, + "rot_z": 0, + "rot_y": -51, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 505.61, + "pos_x": -2950.76, + "pos_y": -249.78, + "room": 10, + "rot_z": 0, + "rot_y": 204, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 889.95, + "pos_x": -1914.32, + "pos_y": -281.12, + "room": 10, + "rot_z": 0, + "rot_y": 329, + "rot_x": 0, + "type": 10, + "quantity": 2 + } + ], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ], + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -5940.68, + "pos_x": -5057.57, + "pos_y": -2.26, + "room": 1, + "rot_z": 0, + "rot_y": -68, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -6502.93, + "pos_x": -4811.71, + "pos_y": -66.91, + "room": 1, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -305.99, + "pos_x": -6114.99, + "pos_y": 1.01, + "room": 2, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 31, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 89.46, + "pos_x": -5573.24, + "pos_y": 28.24, + "room": 2, + "rot_z": 0, + "rot_y": 62, + "rot_x": 0, + "type": 31, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -366.28, + "pos_x": -5266.61, + "pos_y": 18.27, + "room": 2, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 31, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 118.41, + "pos_x": -4974.18, + "pos_y": 24.04, + "room": 2, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 31, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 3585.26, + "pos_x": -4409.86, + "pos_y": 160.61, + "room": 2, + "rot_z": 0, + "rot_y": -164, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2758.35, + "pos_x": -2714.98, + "pos_y": 150.44, + "room": 2, + "rot_z": 0, + "rot_y": -244, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2717.77, + "pos_x": -3714.37, + "pos_y": 77.64, + "room": 2, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 207.6, + "pos_x": -2866.17, + "pos_y": 4.0, + "room": 3, + "rot_z": 0, + "rot_y": -22, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1054.53, + "pos_x": -3281.49, + "pos_y": 5.72, + "room": 3, + "rot_z": 0, + "rot_y": -119, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 614.59, + "pos_x": -2077.49, + "pos_y": -0.82, + "room": 3, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1285.39, + "pos_x": 1844.04, + "pos_y": 13.37, + "room": 3, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1490.38, + "pos_x": 2591.03, + "pos_y": -11.64, + "room": 3, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1899.19, + "pos_x": -3806.09, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2084.72, + "pos_x": -2228.14, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 278, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2687.36, + "pos_x": -3075.68, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2924.56, + "pos_x": -4162.06, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 221, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3073.44, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -355.64, + "pos_x": -2138.97, + "pos_y": 18.0, + "room": 5, + "rot_z": 0, + "rot_y": 432, + "rot_x": 0, + "type": 11, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -875.79, + "pos_x": -1641.2, + "pos_y": 17.36, + "room": 5, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1441.74, + "pos_x": -1951.09, + "pos_y": 18.0, + "room": 5, + "rot_z": 0, + "rot_y": 506, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1423.47, + "pos_x": -2578.55, + "pos_y": 25.21, + "room": 5, + "rot_z": 0, + "rot_y": 540, + "rot_x": 0, + "type": 11, + "quantity": 1 + } + ], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 892.53, + "pos_x": 965.46, + "pos_y": 27.06, + "room": 9, + "rot_z": 0, + "rot_y": 563, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1123.58, + "pos_x": 732.0, + "pos_y": 24.88, + "room": 9, + "rot_z": 0, + "rot_y": 637, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -385.05, + "pos_x": -2618.42, + "pos_y": 168.02, + "room": 9, + "rot_z": 0, + "rot_y": 625, + "rot_x": 0, + "type": 26, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 276.54, + "pos_x": -3005.7, + "pos_y": 19.0, + "room": 9, + "rot_z": 0, + "rot_y": 961, + "rot_x": 0, + "type": 26, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1327.15, + "pos_x": -659.6, + "pos_y": 21.89, + "room": 9, + "rot_z": 0, + "rot_y": 369, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -103.05, + "pos_x": -549.09, + "pos_y": 15.82, + "room": 9, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 26, + "quantity": 1 + } + ], + [], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 2, + "time_limit": 15, + "wave_1_transition_quantity": 1, + "starting_position": 1, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 42, + "wave_2_transition_type": 0, + "location": 1, + "penalty_per_cart": 10000, + "resources": 1, + "details": "Why, hellooo! I mean to hold\na dinner party, but I've\ndiscovered the most dreadful\nnews -- I don't have enough\neggs for my recipe! I simply\nmustn't disappoint my guests,\nso please save this supper!", + "description": "Deliver 9 Wyvern Eggs", + "wave_1_transition_target": 139, + "hrp_restriction": 9, + "quest_fee": 1200, + "quest_id": 61011, + "name": "Poached Wyvern Eggs", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 31, + "summon": 1677787433, + "client": "The Lady Gourmet", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + } + } +} \ No newline at end of file diff --git a/event/Rage Match.json b/event/Rage Match.json index f44b6a0..202b321 100644 --- a/event/Rage Match.json +++ b/event/Rage Match.json @@ -134,7 +134,7 @@ "main_monster_2": 0, "main_monster_1": 0, "supply_set_number": 43, - "summon": 1677787698, + "summon": 0, "client": "Arena Manager", "flags": [ [ diff --git a/event/Red Hot Party!.json b/event/Red Hot Party!.json new file mode 100644 index 0000000..6ab866f --- /dev/null +++ b/event/Red Hot Party!.json @@ -0,0 +1,871 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 1 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 3870, + "rewards_row_1": [ + [ + 177, + 1, + 8 + ], + [ + 176, + 1, + 8 + ], + [ + 171, + 1, + 8 + ], + [ + 507, + 1, + 10 + ], + [ + 505, + 1, + 10 + ], + [ + 412, + 1, + 10 + ], + [ + 482, + 1, + 10 + ], + [ + 111, + 1, + 10 + ], + [ + 285, + 1, + 8 + ], + [ + 481, + 1, + 6 + ], + [ + 174, + 1, + 6 + ], + [ + 183, + 1, + 6 + ] + ], + "rewards_row_2": [ + [ + 177, + 1, + 8 + ], + [ + 176, + 1, + 8 + ], + [ + 171, + 1, + 8 + ], + [ + 507, + 1, + 10 + ], + [ + 505, + 1, + 10 + ], + [ + 412, + 1, + 10 + ], + [ + 482, + 1, + 10 + ], + [ + 111, + 1, + 10 + ], + [ + 285, + 1, + 8 + ], + [ + 481, + 1, + 6 + ], + [ + 174, + 1, + 6 + ], + [ + 183, + 1, + 6 + ] + ], + "objective_type": 2, + "zenny_reward": 41000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 9, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -947.91, + "pos_x": -494.25, + "pos_y": 47.01, + "room": 1, + "rot_z": 0, + "rot_y": 112147, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -712.51, + "pos_x": -1361.42, + "pos_y": 20.6, + "room": 1, + "rot_z": 0, + "rot_y": 79456, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -1406.32, + "pos_x": 1031.98, + "pos_y": 26.73, + "room": 1, + "rot_z": 0, + "rot_y": 152977, + "rot_x": 0, + "type": 34, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1809.58, + "pos_x": 3139.21, + "pos_y": -16.41, + "room": 2, + "rot_z": 0, + "rot_y": 14105, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2280.01, + "pos_x": 2598.0, + "pos_y": 64.57, + "room": 2, + "rot_z": 0, + "rot_y": 14478, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2453.7, + "pos_x": 2184.05, + "pos_y": 66.73, + "room": 2, + "rot_z": 0, + "rot_y": 11582, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1680.05, + "pos_x": 2741.8, + "pos_y": -53.82, + "room": 2, + "rot_z": 0, + "rot_y": 14128, + "rot_x": 0, + "type": 33, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4494.92, + "pos_x": 6982.8, + "pos_y": 73.73, + "room": 3, + "rot_z": 0, + "rot_y": 5856, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 4957.68, + "pos_x": 7778.32, + "pos_y": 66.41, + "room": 3, + "rot_z": 0, + "rot_y": 2872, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 5160.52, + "pos_x": 8087.79, + "pos_y": 83.54, + "room": 3, + "rot_z": 0, + "rot_y": 5774, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2473.3, + "pos_x": 8676.94, + "pos_y": 515.74, + "room": 3, + "rot_z": 0, + "rot_y": 6351, + "rot_x": 273, + "type": 39, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 639.95, + "pos_x": 672.08, + "pos_y": 25.43, + "room": 4, + "rot_z": 0, + "rot_y": 2264, + "rot_x": 0, + "type": 29, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": 2402.83, + "pos_x": -1151.12, + "pos_y": -43.31, + "room": 4, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 29, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 3042.75, + "pos_x": 1580.62, + "pos_y": 129.42, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 39, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 2633.18, + "pos_x": 1743.0, + "pos_y": 339.42, + "room": 4, + "rot_z": 0, + "rot_y": 91, + "rot_x": 0, + "type": 39, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2724.68, + "pos_x": 1303.26, + "pos_y": 189.42, + "room": 4, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 39, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 104.92, + "pos_x": -1485.68, + "pos_y": 36.65, + "room": 4, + "rot_z": 0, + "rot_y": 3032, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -27.96, + "pos_x": 897.01, + "pos_y": 25.14, + "room": 4, + "rot_z": 0, + "rot_y": 56, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1861.15, + "pos_x": 2948.85, + "pos_y": 7.51, + "room": 4, + "rot_z": 0, + "rot_y": 20656, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 542.2, + "pos_x": -775.56, + "pos_y": 73.07, + "room": 5, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1218.55, + "pos_x": -3498.99, + "pos_y": 67.5, + "room": 5, + "rot_z": 0, + "rot_y": 4835, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -422.06, + "pos_x": 486.74, + "pos_y": 38.66, + "room": 5, + "rot_z": 0, + "rot_y": 1331, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1059.79, + "pos_x": 2864.76, + "pos_y": 49.34, + "room": 5, + "rot_z": 0, + "rot_y": 7296, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1571.42, + "pos_x": 1202.49, + "pos_y": 57.63, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1510.18, + "pos_x": -1733.55, + "pos_y": 56.88, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1076.53, + "pos_x": 393.15, + "pos_y": -35.75, + "room": 6, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 447.51, + "pos_x": -1170.83, + "pos_y": -30.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -202.83, + "pos_x": 1020.1, + "pos_y": 4.72, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1280.39, + "pos_x": -435.28, + "pos_y": -28.37, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 228.22, + "pos_x": 95.05, + "pos_y": -6.35, + "room": 7, + "rot_z": 0, + "rot_y": 1399, + "rot_x": 0, + "type": 21, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 268.38, + "pos_x": -2114.33, + "pos_y": 17.37, + "room": 7, + "rot_z": 0, + "rot_y": 19692, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1532.47, + "pos_x": -1877.72, + "pos_y": -22.42, + "room": 7, + "rot_z": 0, + "rot_y": 32312, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -496.28, + "pos_x": 625.43, + "pos_y": 3.37, + "room": 7, + "rot_z": 0, + "rot_y": 6283, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 61.89, + "pos_x": -1447.72, + "pos_y": 21.43, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1209.27, + "pos_x": 316.55, + "pos_y": -3.36, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1099.8, + "pos_x": 1008.65, + "pos_y": -9.18, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1581.6, + "pos_x": 728.75, + "pos_y": -19.44, + "room": 8, + "rot_z": 0, + "rot_y": 1581.6, + "rot_x": 0, + "type": 30, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 301.92, + "pos_x": -375.43, + "pos_y": 6.66, + "room": 8, + "rot_z": 0, + "rot_y": 40860, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -50.4, + "pos_x": 479.45, + "pos_y": 30.53, + "room": 8, + "rot_z": 0, + "rot_y": 59178, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1552.73, + "pos_x": 2190.05, + "pos_y": -6.53, + "room": 8, + "rot_z": 0, + "rot_y": 24814, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -971.03, + "pos_x": 1226.78, + "pos_y": 14.44, + "room": 9, + "rot_z": 0, + "rot_y": 49126, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -556.52, + "pos_x": 30.91, + "pos_y": 11.0, + "room": 9, + "rot_z": 0, + "rot_y": 19871, + "rot_x": 0, + "type": 21, + "quantity": 3 + } + ], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 52, + "wave_2_transition_type": 0, + "location": 5, + "penalty_per_cart": 15000, + "resources": 1, + "details": "You're back! While you were\naway, three wyverns moved into\nthe volcano and are reeking\nhavoc throughout the area!\nWe haven't a moment to spare!\nPlease get rid of all three\nof them for me and my people!", + "description": "Hunt a Ratha., Urag. & Agnak.", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 4050, + "quest_id": 61022, + "name": "Red Hot Party!", + "main_monster_2": 30, + "main_monster_1": 36, + "supply_set_number": 27, + "summon": 0, + "client": "Deserted Island Chief", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 56, + "boss_id": 1, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 56, + "boss_id": 2, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 56, + "boss_id": 0, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Sea Power.json b/event/Sea Power.json new file mode 100644 index 0000000..ac0b49f --- /dev/null +++ b/event/Sea Power.json @@ -0,0 +1,266 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "rewards_row_2": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "objective_type": 15, + "zenny_reward": 11400, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "description": "Hunt a Lagiacrus", + "objective_type": 15, + "zenny_reward": 11400, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 54, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 3800, + "resources": 1, + "details": "I once knew a fool of a hunter\nwho found a legendary clue --\nbut paid for it with his life.\nHe left those plans behind.\nThey're useless to a retired\nhunter like me, so I figured\nI'd pass them to another fool.", + "description": "Hunt 2 Lagiacrus\n", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2250, + "quest_id": 61016, + "name": "Sea Power", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Retired Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 59, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 2, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Shut Up and Fish!.json b/event/Shut Up and Fish!.json new file mode 100644 index 0000000..26a8704 --- /dev/null +++ b/event/Shut Up and Fish!.json @@ -0,0 +1,274 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 2, + "hrp_reward": 60, + "rewards_row_1": [ + [ + 149, + 3, + 15 + ], + [ + 150, + 1, + 5 + ], + [ + 214, + 2, + 10 + ], + [ + 210, + 3, + 20 + ], + [ + 212, + 2, + 7 + ], + [ + 213, + 2, + 10 + ], + [ + 215, + 2, + 13 + ], + [ + 216, + 1, + 20 + ] + ], + "description": "Fish out Gobul once", + "objective_type": 18, + "zenny_reward": 1200, + "type": 4096 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 820, + "rewards_row_1": [ + [ + 149, + 3, + 15 + ], + [ + 150, + 1, + 5 + ], + [ + 214, + 2, + 10 + ], + [ + 210, + 3, + 20 + ], + [ + 212, + 2, + 7 + ], + [ + 213, + 2, + 10 + ], + [ + 215, + 2, + 13 + ], + [ + 216, + 1, + 20 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ], + "objective_type": 18, + "zenny_reward": 5600, + "type": 1 + }, + "subquest_1": { + "objective_num": 4, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ], + "description": "Deliver 4 Goldenfish", + "objective_type": 217, + "zenny_reward": 2400, + "type": 2 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 25, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 25, + "wave_2_transition_type": 0, + "location": 3, + "penalty_per_cart": 1900, + "resources": 0, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Hunt a Gobul", + "smallmonster_data_file": "sm_ff_free_for_all.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 7, + "quest_fee": 550, + "quest_id": 61004, + "name": "Shut Up and Fish!", + "main_monster_2": 34, + "main_monster_1": 17, + "supply_set_number": 35, + "summon": 0, + "client": "MH3SP Dev Team", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest\nand both Subquests." + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 25, + "boss_id": 0, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Speak of the Deviljho.json b/event/Speak of the Deviljho.json new file mode 100644 index 0000000..8ca4c95 --- /dev/null +++ b/event/Speak of the Deviljho.json @@ -0,0 +1,212 @@ +{ + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1820, + "rewards_row_1": [ + [ + 445, + 1, + 3 + ], + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 23 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 3 + ], + [ + 593, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 3 + ], + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 23 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 3 + ], + [ + 593, + 1, + 25 + ] + ], + "objective_type": 7, + "zenny_reward": 22000, + "type": 129 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 64, + "wave_2_transition_type": 0, + "location": 3, + "penalty_per_cart": 7500, + "resources": 1, + "details": "Some wyvern named Deviljho has\nLoc Lac hunters fouling their\narmor. I hear it has a taste\nfor captured animals. I simply\nmust have one! What will I do\nwith it? That's for me to know\nand you to NEVER find out!", + "description": "Capture a Deviljho", + "smallmonster_data_file": "sm_ff_free_for_all.dat", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 1800, + "quest_id": 61012, + "name": "Speak of the Deviljho", + "main_monster_2": 33, + "main_monster_1": 32, + "supply_set_number": 18, + "summon": 0, + "client": "Eccentric Aristocrat", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 52, + "boss_id": 0, + "type": 7, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/The Motley Mission.json b/event/The Motley Mission.json new file mode 100644 index 0000000..361d4f8 --- /dev/null +++ b/event/The Motley Mission.json @@ -0,0 +1,230 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 960, + "rewards_row_1": [ + [ + 149, + 1, + 20 + ], + [ + 150, + 1, + 8 + ], + [ + 490, + 1, + 14 + ], + [ + 318, + 1, + 24 + ], + [ + 317, + 1, + 17 + ], + [ + 316, + 8, + 10 + ], + [ + 403, + 1, + 7 + ] + ], + "rewards_row_2": [ + [ + 149, + 1, + 20 + ], + [ + 150, + 1, + 8 + ], + [ + 490, + 1, + 14 + ], + [ + 318, + 1, + 24 + ], + [ + 317, + 1, + 17 + ], + [ + 316, + 8, + 10 + ], + [ + 403, + 1, + 7 + ] + ], + "objective_type": 16, + "zenny_reward": 8000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 3000, + "resources": 0, + "details": "Wanna hear the Hunting Fleet's\nlatest shanty? No? Too bad:\n\"Bow, port, starboard, stern,\nfishin' stinks at every turn.\nOur motley crew has one wish:\nhey, monsters, QUIT SCARIN'\nDA FISH!\" Catchy, aye?", + "description": "Hunt 2 Royal Ludroth\n", + "wave_1_transition_target": 0, + "hrp_restriction": 7, + "quest_fee": 800, + "quest_id": 61005, + "name": "The Motley Mission", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Deserted Island Sailor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 39, + "boss_id": 1, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 39, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/[MH3SP] Dark Side of the Moon.json b/event/[MH3SP] Dark Side of the Moon.json new file mode 100644 index 0000000..b3f82d9 --- /dev/null +++ b/event/[MH3SP] Dark Side of the Moon.json @@ -0,0 +1,202 @@ +{ + "unknown": { + "unk_12": 5, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1500, + "rewards_row_1": [ + [ + 463, + 1, + 15 + ], + [ + 459, + 1, + 25 + ], + [ + 460, + 1, + 14 + ], + [ + 464, + 1, + 15 + ], + [ + 461, + 1, + 18 + ], + [ + 466, + 1, + 13 + ] + ], + "rewards_row_2": [ + [ + 448, + 1, + 12 + ], + [ + 459, + 1, + 18 + ], + [ + 460, + 1, + 30 + ], + [ + 155, + 1, + 15 + ], + [ + 447, + 1, + 25 + ] + ], + "objective_type": 20, + "zenny_reward": 30000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 1, + "zenny_reward": 0, + "type": 8192 + } + }, + "small_monsters": [ + [], + [], + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 15, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 16, + "wave_2_transition_type": 0, + "location": 7, + "penalty_per_cart": 10000, + "resources": 0, + "details": "Gambala! The sea drake has\nreturned! Moga is barely clinging\nto the island after its last\nappearance -- we need this taken\ncare of FAST! Get a group of your\npeers from Loc Lac and get your\ntail back here! PRONTO!", + "description": "Slay a Ceadeus", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 3100, + "quest_id": 61008, + "name": "[MH3SP] Dark Side of the Moon", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Moga Village Chief", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 20, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/quest_rotation.json b/event/quest_rotation.json index 105f796..f4d7dcc 100644 --- a/event/quest_rotation.json +++ b/event/quest_rotation.json @@ -1,128 +1,731 @@ [ [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/[MH3SP] Green Eggs and....json", + "event/Alluring Dress.json", + "event/Cold Call.json", "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Alluring Dress.json", + "event/[MH3SP] Green Eggs and....json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ], + [ + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" ], [ - "event/Jump Four Jaggi.json", + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Rathian.json", "event/Grudge Match Bird and Brute.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" ], [ - "event/Jump Four Jaggi.json", - "event/Blood Sport.json", - "event/Mercy Mission.json", + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match Rathian.json", "event/Grudge Match Bird and Brute.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" ], [ "event/Mercy Mission.json", - "event/Flooded Forest Free-For-All.json", - "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json" + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" ], [ "event/Mercy Mission.json", - "event/Flooded Forest Free-For-All.json", - "event/Rage Match.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Rathian.json", "event/Grudge Match Bird and Brute.json" ], [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", + "event/Blood Sport.json", + "event/Hot Deal.json", "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", "event/Blood Sport.json", - "event/Rage Match.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" ], [ + "event/Blood Sport.json", + "event/Hot Deal.json", "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" + ], + [ "event/Blood Sport.json", - "event/Mercy Mission.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Bird and Brute.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ "event/[MH3SP] Green Eggs and....json", + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", "event/Grudge Match Bird and Brute.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" ], [ - "event/Jump Four Jaggi.json", - "event/Blood Sport.json", - "event/Mercy Mission.json", "event/[MH3SP] Green Eggs and....json", + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", "event/Grudge Match Bird and Brute.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Royal Ludroth.json", "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" ], [ - "event/Jump Four Jaggi.json", - "event/Blood Sport.json", + "event/Gobuled Everything in Sight.json", "event/Mercy Mission.json", - "event/[MH3SP] Green Eggs and....json", - "event/Rage Match.json", - "event/Where Gods Fear to Tread.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match Bird and Brute.json" + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" ], [ - "event/Jump Four Jaggi.json", - "event/Jump Fourty-Eight Jaggi.json", - "event/Blood Sport.json", + "event/Gobuled Everything in Sight.json", "event/Mercy Mission.json", - "event/Rage Match.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json" + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" ], [ + "event/Blood Sport.json", + "event/Hot Deal.json", "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ "event/Blood Sport.json", - "event/Mercy Mission.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", "event/Flooded Forest Free-For-All.json", - "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Sea Power.json", + "event/Grudge Match Qurupeco.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" ], [ "event/Jump Fourty-Eight Jaggi.json", + "event/Alluring Dress.json", + "event/Cold Call.json", "event/Flooded Forest Free-For-All.json", - "event/Rage Match.json", + "event/Where Gods Fear to Tread.json", "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match The Two Flames.json" + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" ], [ "event/Jump Fourty-Eight Jaggi.json", - "event/Blood Sport.json", - "event/Mercy Mission.json", + "event/Alluring Dress.json", + "event/Cold Call.json", "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Animal Attractions.json", "event/Rage Match.json", "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match Bird and Brute.json", "event/Grudge Match The Two Flames.json", - "event/Grudge Match Land Lords.json" + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" ], [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Royal Ludroth.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Where Gods Fear to Tread.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Animal Attractions.json", "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", + "event/Sea Power.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Ice and Fire.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json" + ], + [ + "event/[MH3SP] Green Eggs and....json", + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", "event/Grudge Match Land Lords.json" + ], + [ + "event/[MH3SP] Green Eggs and....json", + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/Grudge Match Brute Horns.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Alluring Dress.json", + "event/Cold Call.json", + "event/Flooded Forest Free-For-All.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Rathian.json", + "event/Grudge Match Land Lords.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Gobuled Everything in Sight.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Blood Sport.json", + "event/Hot Deal.json", + "event/Jump Four Jaggi.json", + "event/Marine Warfare.json", + "event/World Eater.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Jump Fourty-Eight Jaggi.json", + "event/Animal Attractions.json", + "event/Rage Match.json", + "event/Sea Power.json", + "event/Grudge Match The Two Flames.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json" + ], + [ + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/The Phantom Uragaan.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" ] ] \ No newline at end of file diff --git a/event/trading_post.json b/event/trading_post.json new file mode 100644 index 0000000..4f1078d --- /dev/null +++ b/event/trading_post.json @@ -0,0 +1,6998 @@ +[ + [ + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 392, + 3 + ], + [ + 196, + 4 + ], + [ + 607, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 394, + 3 + ], + [ + 196, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 394, + 3 + ], + [ + 196, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 392, + 3 + ], + [ + 196, + 4 + ], + [ + 607, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ] +] \ No newline at end of file diff --git a/fmp_server.py b/fmp_server.py index c7efd3b..594c035 100644 --- a/fmp_server.py +++ b/fmp_server.py @@ -14,6 +14,7 @@ class FmpServer(PatServer): """Basic FMP server class.""" + # TODO: Backport close cache logic pass @@ -24,6 +25,7 @@ def recvAnsConnection(self, packet_id, data, seq): """AnsConnection packet.""" connection_data = pati.ConnectionData.unpack(data) self.server.debug("Connection: {!r}".format(connection_data)) + # TODO: Backport loaded_session logic self.sendNtcLogin(3, connection_data, seq) def sendAnsLayerDown(self, layer_id, layer_set, seq): @@ -263,6 +265,7 @@ def recvReqLayerUp(self, packet_id, data, seq): Sent by the game when leaving the gate via the entrance: - Relocate > Select Server """ + # TODO: Backport notify_layer_departure if needed self.sendAnsLayerUp(data, seq) def recvReqUserSearchInfoMine(self, packet_id, data, seq): diff --git a/master_server.py b/master_server.py index 472e9f4..fefe261 100644 --- a/master_server.py +++ b/master_server.py @@ -40,6 +40,7 @@ def main(args): ) for server in servers ] + # TODO: Backport cache's logic (i.e. new thread, maintain_connection) for thread in threads: thread.start() @@ -92,6 +93,8 @@ def interactive_mode(local=locals()): parser.add_argument("--dry-run", action="store_true", dest="dry_run", help="dry run to test the server") + # TODO: Backport central/cache parameters (server_id, no_timeout) + # - no_timeout is currently available as a server argument as follows: parser.add_argument("args", nargs='*', help="arguments forwarded to all servers") args = parser.parse_args() diff --git a/mh/arena_utils.py b/mh/arena_utils.py deleted file mode 100644 index aedaa84..0000000 --- a/mh/arena_utils.py +++ /dev/null @@ -1,769 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2023 MH3SP Server Project -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Arena utils module. - -Arena Quest ID List: -EA60 -EA61 -EA62 -EA63 -EA64 -EA65 -EA66 -EA67 -EA68 -EA69 -EA6A -EA6B - -bird and brute bowgun: -rathling gun + barrel, poison stinger frame, light bowgun stock - -sea power bowgun: -rathling gun barrel, rathling gun + frame, rathling gun + stock - -land lords bowgun: -jho barrel, diablos frame, barioth stock - -two flames bowgun: -lagiacrus barrel, lagiacrus frame, barioth stock - -https://web.archive.org/web/20111012085906/ -http://divinewh.im/q/c/Grudge_Match:_Royal_Ludroth - -https://web.archive.org/web/20111012085901/ -http://divinewh.im/q/c/Grudge_Match:_Rathian - -https://web.archive.org/web/20111012090656/ -http://divinewh.im/q/c/Grudge_Match:_Uragaan - -https://web.archive.org/web/20111012090915/ -http://divinewh.im/q/c/Grudge_Match:_Bird_and_Brute -""" - -from mh.quest_utils import \ - generate_flags, Monster, LocationType,\ - QuestRankType, QuestRestrictionType, ResourcesType,\ - StartingPositionType, ItemsType -from mh.equipment_utils import Chestpiece, Gauntlets, Faulds,\ - Leggings, Helmet, EquipmentClasses, Greatsword,\ - SnS, Hammer, Longsword, Switchaxe, Lance,\ - BowgunFrame, BowgunStock, BowgunBarrel - - -GRUDGE_MATCH_ROYAL_LUDROTH = { - 'quest_info': { - 'quest_id': 0xEA61, - 'name': "Grudge Match: Royal Ludroth", - 'client': "Announcer/Receptionist", - 'description': "Slay a Royal Ludroth", - 'details': - "Ahoy, adrenaline junkies!\n" - "Next up is the regally maned\n" - "Royal Ludroth! Will the pressure\n" - "of facing this sea dragon on\n" - "its home surf with a strict\n" - "time limit leave the hunters\n" - "all washed up?", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_underwaterarenarock.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.royal_ludroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.royal_ludroth, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.r_ludroth_coin, 1, 24), - (ItemsType.r_ludroth_coin, 2, 8), - (ItemsType.voucher, 1, 10), - (ItemsType.armor_sphere, 1, 24), - (ItemsType.steel_eg, 1, 18), - (ItemsType.pinnacle_coin, 1, 16) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.HydraKnife), - None, None, - Helmet.QurupecoHelm, Chestpiece.QurupecoMail, - Gauntlets.BlastBracelet, Faulds.SteelFaulds, - Leggings.IngotGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10)), - () - ), - ( - (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), - None, None, - Helmet.DrawEarring, Chestpiece.SteelMail, - Gauntlets.GobulVambraces, Faulds.GobulFaulds, - Leggings.HuntersGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), - (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.Hammer, Hammer.BoneBludgeon), - None, None, - Helmet.BarrothHelm, Chestpiece.BarrothMail, - Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, - Leggings.BarrothGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AlloyCap, Chestpiece.AlloyVest, - Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, - Leggings.PiscineLeggings, - ((ItemsType.potion, 10), (ItemsType.ration, 10), - (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), - (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), - (ItemsType.barrel_bomb_l, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), - (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) - ) - ) -} - -GRUDGE_MATCH_BIRD_BRUTE = { - 'quest_info': { - 'quest_id': 0xEA66, - 'name': "Grudge Match: Bird and Brute", - 'client': "Announcer/Receptionist", - 'description': - "Slay a Qurupeco\n" - "and a Barroth", - 'details': - "Double trouble! It's the\n" - "dirty-bird Qurupeco and the\n" - "land dragon Barroth -- heaven\n" - "and earth, laughter and tears,\n" - "in an ultimate contest! When\n" - "the dust clears, will it\n" - "reveal victory? Or tragedy?", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_4, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.qurupeco, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.barroth, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.qurupeco, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.qurupeco_coin, 1, 16), - (ItemsType.barroth_coin, 1, 20), - (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), - (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 15) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000101, - 'objective_type': Monster.barroth, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), - None, None, - Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, - Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, - Leggings.GigginoxGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), - None, None, - Helmet.DrawEarring, Chestpiece.JaggiMailPlus, - Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, - Leggings.BoneGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Lance, Lance.Undertaker), - None, None, - Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.AlloyGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, - Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, - Leggings.RathalosLeggingsPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.cleanser, 5), - (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), - (ItemsType.sonic_bomb, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), - (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), - (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) - ) - ) -} - -GRUDGE_MATCH_TWO_FLAMES = { - 'quest_info': { - 'quest_id': 0xEA68, - 'name': "Grudge Match: The Two Flames", - 'client': "Announcer/Receptionist", - 'description': - "Slay a Rathalos\n" - "and a Rathian", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_5, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.rathalos, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.rathian, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.rathalos, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.rathalos_coin, 1, 10), - (ItemsType.rathian_coin, 1, 24), - (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), - (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 17) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000101, - 'objective_type': Monster.rathian, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.IcicleSpikePlus), - None, None, - Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, - Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, - Leggings.QurupecoGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.might_pill, 2), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), - (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), - (ItemsType.barrel_bomb_s, 1)), - () - ), - ( - (EquipmentClasses.Longsword, Longsword.Thunderclap), - None, None, - Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.VangisGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Lance, Lance.SpiralLancePlus), - None, None, - Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, - Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, - Leggings.IngotGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), - (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), - (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), - Helmet.EarringofFate, Chestpiece.UragaanVestPlus, - Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, - Leggings.UragaanLeggingsPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), - (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), - (ItemsType.thunder_s, 60)) - ) - ) -} - -GRUDGE_MATCH_LAND_LORDS = { - 'quest_info': { - 'quest_id': 0xEA6B, - 'name': "Grudge Match: Land Lords", - 'client': "Announcer/Receptionist", - 'description': "Slay all 3 monsters", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 1, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 1150, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.barroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.uragaan, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.deviljho, - 'boss_id': 0x0002, - 'enabled': True, - 'level': 0x12, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00020101, - 'objective_type': Monster.barroth, - 'objective_num': 0x01, - 'zenny_reward': 3000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.deviljho_coin, 1, 10), - (ItemsType.barroth_coin, 1, 10), - (ItemsType.uragaan_coin, 1, 15), - (ItemsType.voucher, 1, 14), - (ItemsType.adv_armor_sphere, 1, 10), - (ItemsType.hrd_armor_sphere, 1, 7), - (ItemsType.silver_eg, 1, 10), - (ItemsType.hunter_king_coin, 1, 24) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00020101, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00020101, - 'objective_type': Monster.deviljho, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.PlagueTabar), - None, None, - Helmet.UragaanHelmPlus, Chestpiece.UragaanMailPlus, - Gauntlets.UragaanVambracesPlus, Faulds.UragaanFauldsPlus, - Leggings.UragaanGreavesPlus, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.lifepowder, 3), (ItemsType.paralysis_knife, 5), - (ItemsType.sleep_knife, 5), (ItemsType.poison_knife, 5), - (ItemsType.tinged_meat, 5), (ItemsType.druged_meat, 5), - (ItemsType.poisoned_meat, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 2), - (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10), - (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), - (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), - (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.Switchaxe, Switchaxe.GreatDemonbindG), - None, None, - Helmet.RathalosHelmPlus, Chestpiece.RathalosMailPlus, - Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, - Leggings.RathalosGreavesPlus, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 5), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), - (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), - (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), - (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), - (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.Longsword, Longsword.ReaverCalamity), - None, None, - Helmet.StimulusEarring, Chestpiece.VangisMail, - Gauntlets.DoberVambraces, Faulds.DoberCoil, - Leggings.DamascusGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.cleanser, 5), (ItemsType.lifepowder, 5), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), - (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), - (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 5), - (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), - (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), - (ItemsType.armorcharm, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.Diablazooka), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.DevilsGrin), - (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), - Helmet.BarrageEarring, Chestpiece.DamascusVest, - Gauntlets.DamascusGuards, Faulds.DamascusCoat, - Leggings.DamascusLeggings, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.energy_drink, 5), (ItemsType.lifepowder, 3), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.ez_barrel_bomb_l, 2), - (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), - (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), - (ItemsType.armorcharm, 1), (ItemsType.powertalon, 1), - (ItemsType.armortalon, 1)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv3, 40), - (ItemsType.crag_s_lv2, 9), (ItemsType.crag_s_lv3, 9), - (ItemsType.wyvernfire_lv1, 10), (ItemsType.water_s, 60), - (ItemsType.sleep_s_lv2, 8), (ItemsType.dragon_s, 20), - (ItemsType.demon_s_ii, 5)) - ) - ) -} diff --git a/mh/constants.py b/mh/constants.py index 37c9efd..c95c5a7 100644 --- a/mh/constants.py +++ b/mh/constants.py @@ -7,7 +7,8 @@ import struct from other.utils import pad from mh.time_utils import current_server_time, TICKS_PER_CYCLE, \ - get_jhen_event_times, is_jhen_active, current_event_time_slot + get_jhen_event_times, is_jhen_active, current_event_time_slot, \ + current_trading_post_time_slot from mh.quest_utils import make_binary_event_quest from res.trading_post import CURRENT_TRADES @@ -18,7 +19,7 @@ except ImportError: pass -def make_binary_type_time_events(binary_loader=None): +def make_binary_type_time_events(binary_loader): return struct.pack(">III", *get_jhen_event_times()) @@ -181,7 +182,7 @@ def make_binary_npc_greeters(binary_loader, is_jap=False, temporal_slot=None): JP_OFFSET = 0x100 offset = JP_OFFSET if is_jap else US_OFFSET if temporal_slot is None: - temporal_slot = current_event_time_slot() + temporal_slot = current_event_time_slot(binary_loader) if is_jhen_active(): tool_shop = b"Half-off sale!" @@ -255,23 +256,46 @@ def make_binary_trading_post(): b"Roadmap for a list of features we are working on.", b"
Welcome to Loc Lac!" ]) +MAINTENANCE = b"
".join([ + b"
Monster Hunter 3 (Tri) Server Project", + b"
MH3SP is currently down for maintenance.", + b"
Please check back later!" +]) +UNPATCHED = b"
".join([ + b"
Monster Hunter 3 (Tri) Server Project", + b"

NEW PATCH ARRIVED", + b"
Please see the discord server for the new patch.", + b"New patch is required in order to play with the other", + b"hunters.", + b"
{}", + b"" +]) CHARGE = b"""
MH3 Server Project - No charge.""" # VULGARITY_INFO = b"""MH3 Server Project - Vulgarity info (low).""" VULGARITY_INFO = b"" FMP_VERSION = 1 +# TODO: Backport central and NATNEG constants TIME_STATE = 0 IS_JAP = False def get_binary_loader_assisted_version(binary_loader): - return current_event_time_slot() + 1 + binary_loader.version + return current_event_time_slot(binary_loader) + 1 + binary_loader.version def get_binary_quest_content_from_quest_slot(quest_slot): return lambda temporal_slot, quest_slot=quest_slot: get_event_slot(quest_slot, temporal_slot) +def get_binary_loader_assisted_trading_post_version(binary_loader): + return current_trading_post_time_slot(binary_loader) + 1 + binary_loader.trading_post_version + + +def get_binary_trading_post(temporal_slot): + return lambda binary_loader, temporal_slot=temporal_slot: \ + binary_loader.get_trading_post_day(temporal_slot) + # Dummy PAT_BINARY PAT_BINARIES = { 0x01: { @@ -283,12 +307,12 @@ def get_binary_quest_content_from_quest_slot(quest_slot): "content": make_binary_type_time_events }, 0x03: { - "version": lambda binary_loader: current_event_time_slot() + 1, + "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, is_jap=IS_JAP, temporal_slot=temporal_slot) }, 0x04: { - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x05: { # English "version": 1, @@ -345,12 +369,12 @@ def get_binary_quest_content_from_quest_slot(quest_slot): "content": make_binary_type_time_events }, 0x12: { # French - "version": lambda binary_loader: current_event_time_slot() + 1, + "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x13: { # French - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x14: { # French "version": 1, @@ -405,12 +429,12 @@ def get_binary_quest_content_from_quest_slot(quest_slot): "content": make_binary_type_time_events }, 0x21: { # German - "version": lambda binary_loader: current_event_time_slot() + 1, + "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x22: { # German - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x23: { # German "version": 1, @@ -465,12 +489,12 @@ def get_binary_quest_content_from_quest_slot(quest_slot): "content": make_binary_type_time_events }, 0x30: { # Italian - "version": lambda binary_loader: current_event_time_slot() + 1, + "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x31: { # Italian - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x32: { # Italian "version": 1, @@ -525,12 +549,12 @@ def get_binary_quest_content_from_quest_slot(quest_slot): "content": make_binary_type_time_events }, 0x3f: { # Spanish - "version": lambda binary_loader: current_event_time_slot() + 1, + "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) }, 0x40: { # Spanish - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x41: { # Spanish "version": 1, @@ -578,7 +602,6 @@ def get_binary_quest_content_from_quest_slot(quest_slot): }, } - def get_pat_binary_from_version(binary_type, version): # type: (int, int) -> bytes|Callable[QuestLoader, bytes] """Helper to retrieve binary data. @@ -589,9 +612,9 @@ def get_pat_binary_from_version(binary_type, version): TODO: Refactor this and the get_binary_* functions. """ - static_binaries = (0x01, 0x02, 0x04, 0x05, 0x10, 0x11, - 0x13, 0x14, 0x1f, 0x20, 0x22, 0x23, 0x2e, 0x2f, - 0x31, 0x32, 0x3d, 0x3e, 0x40, 0x41) + static_binaries = (0x01, 0x02, 0x05, 0x10, 0x11, + 0x14, 0x1f, 0x20, 0x23, 0x2e, 0x2f, + 0x32, 0x3d, 0x3e, 0x41) if binary_type in static_binaries: return PAT_BINARIES[binary_type]["content"] return PAT_BINARIES[binary_type]["content"](version) diff --git a/mh/database.py b/mh/database.py index 468686f..8f82deb 100644 --- a/mh/database.py +++ b/mh/database.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter database module.""" @@ -885,6 +885,9 @@ def delete_friend(self, capcom_id, friend_id): return self.parent.delete_friend(capcom_id, friend_id) +# TODO: Backport MySQLDatabase + + class DebugDatabase(TempSQLiteDatabase): """For testing purpose.""" def __init__(self, *args, **kwargs): diff --git a/mh/pat.py b/mh/pat.py index ac042fc..56e99a6 100644 --- a/mh/pat.py +++ b/mh/pat.py @@ -17,6 +17,7 @@ from mh.constants import \ LAYER_CHAT_COLORS, TERMS_VERSION, TERMS, SUBTERMS, ANNOUNCE, \ CHARGE, VULGARITY_INFO, FMP_VERSION, PAT_BINARIES, PAT_NAMES, \ + MAINTENANCE, UNPATCHED, \ PatID4, get_pat_binary_from_version from mh.session import Session import mh.database as db @@ -39,7 +40,8 @@ class PatServer(server.BasicPatServer, Logger): """Generic PAT server class.""" def __init__(self, address, handler_class, max_thread_count=0, - logger=None, debug_mode=False, ssl_cert=None, ssl_key=None): + logger=None, debug_mode=False, ssl_cert=None, ssl_key=None, + no_timeout=False): server.BasicPatServer.__init__( self, address, handler_class, max_thread_count, ssl_cert=ssl_cert, ssl_key=ssl_key @@ -51,6 +53,7 @@ def __init__(self, address, handler_class, max_thread_count=0, self.debug_con = [] self.debug_mode = debug_mode self.binary_loader = g_binary_loader + self.no_timeout = no_timeout def add_to_debug(self, con): """Add connection to the debug connection list.""" @@ -75,6 +78,8 @@ def get_pat_handler(self, session): return None + # TODO: Backport broadcasting refactoring if needed + def broadcast(self, players, packet_id, data, seq, to_exclude=None): # type: (db.Players, int, bytes, int, Session|None) -> None handlers = [] @@ -98,8 +103,8 @@ def layer_broadcast(self, session, packet_id, data, seq, def circle_broadcast(self, circle, packet_id, data, seq, session=None): # type: (db.Circle, int, bytes, int, Session|None) -> None - self.broadcast(circle.players, packet_id, data, seq, session) - + with circle.lock(): + self.broadcast(circle.players, packet_id, data, seq, session) class PatRequestHandler(server.BasicPatHandler): @@ -124,6 +129,10 @@ def on_init(self): self.ping_timer = time_utils.Timer() self.requested_connection = False self.line_check = True + # TODO: Backport remaining patch check (see OPN server code) + self.game_id = None + self.natneg_url = b"natneg1.gs.nintendowifi.net" + self.game_patched = True def try_send_packet(self, packet_id=0, data=b'', seq=0): """Send PAT packet and catch exceptions.""" @@ -274,6 +283,9 @@ def recvAnsConnection(self, packet_id, data, seq): The games sends the PAT environment properties. """ + BANNED_ONLINE_SUPPORT_CODES = ( + b"EXAMPLEEXAM", + ) settings = pati.ConnectionData.unpack(data) self.server.debug("Connection: {!r}".format(settings)) pat_ticket = b"" @@ -283,7 +295,17 @@ def recvAnsConnection(self, packet_id, data, seq): _, pat_ticket = pati.unpack_any(settings.online_support_code) self.server.info("Client {} Ticket `{}`".format(self.client_address, pat_ticket)) - self.sendNtcLogin(5, settings, seq) + + if not self.game_patched: + self.sendNtcLogin(2, settings, seq) + return + + has_ban = "online_support_code" in settings and \ + pat_ticket in BANNED_ONLINE_SUPPORT_CODES + if has_ban or len(self.session.get_servers()) == 0: + self.sendNtcLogin(2, settings, seq) + else: + self.sendNtcLogin(5, settings, seq) def sendNtcLogin(self, server_status, connection_data, seq): """NtcLogin packet. @@ -298,6 +320,41 @@ def sendNtcLogin(self, server_status, connection_data, seq): self.session = self.session.get(connection_data) self.send_packet(PatID4.NtcLogin, data, seq) + def sendReqMemoryCheck(self, addr, size): + """ReqMemoryCheck packet. + + ID: 60810100 + JP: メモリ内容要求 + TR: Memory content request + """ + data = pati.MemoryData.pack_from(False, False) + data += struct.pack(">II", addr, size) + self.send_packet(PatID4.ReqMemoryCheck, data, 0) + + def recvReqMaintenance(self, packet_id, data, seq): + """ReqMaintenance packet. + + ID: 62200100 + JP: メンテナンス情報要求 + TR: Maintenance information request + """ + if self.game_patched: + self.sendAnsMaintenance(MAINTENANCE, seq) + else: + self.sendAnsMaintenance(UNPATCHED.format(self.natneg_url), seq) + + def sendAnsMaintenance(self, maintenance, seq): + """AnsMaintenance packet. + + ID: 62200200 + JP: メンテナンス情報通知 + TR: Maintenance information notification + + The server replies with the maintenance information text. + """ + data = pati.lp2_string(maintenance) + self.send_packet(PatID4.AnsMaintenance, data, seq) + def recvReqAuthenticationToken(self, packet_id, data, seq): """ReqAuthenticationToken packet. @@ -891,7 +948,7 @@ def sendAnsFmpListVersion(self, seq): JP: FMPリストバージョン確認応答 TR: FMP list version acknowledgment """ - data = struct.pack(">I", FMP_VERSION) + data = struct.pack(">I", FMP_VERSION) # TODO: Backport central code self.send_packet(PatID4.AnsFmpListVersion, data, seq) def sendAnsFmpListVersion2(self, seq): @@ -901,7 +958,7 @@ def sendAnsFmpListVersion2(self, seq): JP: FMPリストバージョン確認応答 TR: FMP list version acknowledgment """ - data = struct.pack(">I", FMP_VERSION) + data = struct.pack(">I", FMP_VERSION) # TODO: Backport central code self.send_packet(PatID4.AnsFmpListVersion2, data, seq) def recvReqFmpListHead(self, packet_id, data, seq): @@ -913,6 +970,7 @@ def recvReqFmpListHead(self, packet_id, data, seq): """ # TODO: Might be worth investigating these parameters as # they might be useful when using multiple FMP servers. + # TODO: Backport preserve server ids logic version, first_index, count = struct.unpack_from( ">III", data ) # noqa: F841 @@ -1083,6 +1141,7 @@ def recvReqFmpInfo(self, packet_id, data, seq): fmp_data.server_address = pati.String(server.addr or fmp_addr) fmp_data.server_port = pati.Word(server.port or fmp_port) fmp_data.assert_fields(fields) + # TODO: Backport central logic if packet_id == PatID4.ReqFmpInfo: self.sendAnsFmpInfo(fmp_data, fields, seq) elif packet_id == PatID4.ReqFmpInfo2: @@ -1154,6 +1213,8 @@ def recvReqBinaryData(self, packet_id, data, seq): ID: 63030100 JP: バイナリデータ要求 TR: Binary data request + + TODO: Handle multiple versions of a binary """ binary_type, version, offset, size = struct.unpack(">BIII", data) content = get_pat_binary_from_version(binary_type, version) @@ -2408,6 +2469,8 @@ def sendAnsLayerCreateHead(self, number, seq): seq) return self.send_packet(PatID4.AnsLayerCreateHead, data, seq) + + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() path.city_id = number self.notify_city_info_set(path) @@ -2439,6 +2502,7 @@ def sendAnsLayerCreateSet(self, number, layer_set, extra, seq): self.session.layer_create(number, layer_set, extra) self.send_packet(PatID4.AnsLayerCreateSet, data, seq) + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() self.notify_city_number_set(path) @@ -2463,6 +2527,7 @@ def sendAnsLayerCreateFoot(self, number, unk, seq): data = struct.pack(">H", number) self.send_packet(PatID4.AnsLayerCreateFoot, data, seq) + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() path.city_id = number self.notify_city_info_set(path) @@ -2486,6 +2551,7 @@ def sendAnsLayerUp(self, data, seq): JP: レイヤアップ返答 TR: Layer up response """ + # TODO: Backport layer refactoring if needed self.notify_layer_departure(False) self.send_packet(PatID4.AnsLayerUp, b"", seq) @@ -2666,6 +2732,8 @@ def sendNtcCircleHost(self, circle, new_leader, new_leader_index, seq): self.server.circle_broadcast(circle, PatID4.NtcCircleHost, data, seq, self.session) + # TODO: Backport notify_city change when needed + def notify_city_info_set(self, path): # type: (pati.LayerPath) -> None city = self.get_layer(path) @@ -2715,6 +2783,8 @@ def notify_layer_departure(self, end): if self.session.local_info['circle_id'] is not None: self.notify_circle_leave(self.session.local_info['circle_id'] + 1, seq=0) + + # TODO: Backport refactoring with session_layer_end if end: self.session.layer_end() else: @@ -2753,6 +2823,7 @@ def on_exception(self, e): def on_finish(self): self.notify_layer_departure(True) + # TODO: Backport session_layer_end self.session.disconnect() self.session.delete() @@ -2807,7 +2878,7 @@ def on_tick(self): # Send a ping with 30 seconds interval if self.ping_timer.elapsed() >= 30: - if not self.server.debug_enabled() and not self.line_check: + if not self.server.no_timeout and not self.line_check: raise Exception("Client timed out.") self.line_check = False self.sendReqLineCheck() diff --git a/mh/pat_item.py b/mh/pat_item.py index d4eb3b3..cf73805 100644 --- a/mh/pat_item.py +++ b/mh/pat_item.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT item module.""" @@ -704,6 +704,20 @@ def create_from(index, layer, path=None): return data +class MemoryData(PatData): + FIELDS = ( + (0x01, "unk_byte_0x01"), + (0x02, "unk_byte_0x02"), + ) + + @staticmethod + def pack_from(unk1, unk2): + data = MemoryData() + data.unk_byte_0x01 = Byte(int(bool(unk1))) + data.unk_byte_0x01 = Byte(int(bool(unk2))) + return data.pack() + + class FriendData(PatData): FIELDS = ( (0x01, "index"), @@ -868,6 +882,7 @@ class LayerBinaryInfo(PatData): (0x03, "hunter_name") ) + class LayerUserNum(PatData): FIELDS = ( (0x01, "path"), @@ -895,7 +910,6 @@ def pack_from(layer_data): return data.pack() - def patdata_extender(unpacker): """PatData classes must be defined above this function.""" for name, value in globals().items(): @@ -969,6 +983,7 @@ def get_fmp_servers(session, first_index, count): start = first_index - 1 end = start + count servers = session.get_servers()[start:end] + # TODO: Backport the central logic for i, server in enumerate(servers, first_index): fmp_data = FmpData() fmp_data.index = Long(i) # The server might be full, if zero @@ -989,6 +1004,9 @@ def get_fmp_servers(session, first_index, count): return data +# TODO: Backport get_fmp_central_servers + + def get_layer_children(session, first_index, count, sibling=False): assert first_index > 0, "Invalid list index" diff --git a/mh/quest_utils.py b/mh/quest_utils.py index 5b666ef..b9985a7 100644 --- a/mh/quest_utils.py +++ b/mh/quest_utils.py @@ -5,6 +5,7 @@ """Quest utils module.""" from os import path +import json import struct from other.utils import pad from mh.equipment_utils import create_arena_equipment_set @@ -1172,7 +1173,7 @@ def make_binary_event_quest(quest_data): 0x29 ) - # - id: sucess_message + # - id: success_message # type: str # size: 92 # offset: 0x00DE @@ -1188,7 +1189,10 @@ def make_binary_event_quest(quest_data): # size: 92 # Presently hardcoded # offset: 0x013C - data += pad(b"Reward hits 0, or time\nexpires.", 0x5C) + data += pad( + quest_info.get('failure_message', b"Reward hits 0, or time\nexpires."), + 0x5C + ) # - id: hunter_rank_point_restriction # type: u2 @@ -1197,14 +1201,24 @@ def make_binary_event_quest(quest_data): # - id: client # type: str - # size: 41 + # size: 40 # offset: 0x019A - data += pad(quest_info['client'], 0x29) + data += pad(quest_info['client'], 0x28) + + # - id: unkInt0 + # size: u4 + # offset: 0x1C2 + data += struct.pack(">I", unknown.get('unkInt0', 0)) + + # - id: unkShort0 + # size: u2 + # offset: 0x1C6 + data += struct.pack(">H", unknown.get('unkShort0', 0)) - # - id: unk2 - # size: 6 - # offset: 0x01C3 - data += b'\0' * 0x06 + # - id: unkByte0 + # size: u1 + # offset: 0x1C8 + data += struct.pack(">B", unknown.get('unkByte0', 0)) # - id: details # type: str @@ -1220,12 +1234,18 @@ def make_binary_event_quest(quest_data): # - id: minion_unsure # size: 3 # offset: 0x0306 - data += b'\0' * 0x03 + # data += b'\0' * 0x03 + data += struct.pack(">B", unknown.get('unkBytes0_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes0_1', 0)) + data += struct.pack(">B", unknown.get('unkBytes0_2', 0)) # - id: quest_flags_unsure # size: 3 # offset: 0x0309 - data += b'\0' * 0x03 + # data += b'\0' * 0x03 + data += struct.pack(">B", unknown.get('unkBytes1_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes1_1', 0)) + data += struct.pack(">B", unknown.get('unkBytes1_2', 0)) # - id: monster_1 # type: u1 @@ -1242,7 +1262,9 @@ def make_binary_event_quest(quest_data): # - id: unk3 # size: 2 # offset: 0x030E - data += b'\0' * 0x02 # Padding + # data += b'\0' * 0x02 # Padding + data += struct.pack(">B", unknown.get('unkBytes2_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes2_1', 0)) # - id: flags # type: u4 @@ -1395,27 +1417,28 @@ def make_binary_event_quest(quest_data): # type: u4 # 0x0000000f for the great jaggi quest/(all quests?) # offset: 0x0360 - data += struct.pack(">I", 0x0000000f) + data += struct.pack(">I", unknown.get('unkUintAlways15', 0x0000000f)) # - id: unk8 # type: u1 # offset: 0x0364 - data += b'\0' * 0x01 + # data += b'\0' * 0x01 # - id: gather_rank (wrong) # type: u1 # offset: 0x0365 - data += b'\0' * 0x01 + # data += b'\0' * 0x01 # - id: unk9 # type: u1 # offset: 0x0366 - data += b'\0' * 0x01 + # data += b'\0' * 0x01 # - id: unk10 # type: u1 # offset: 0x0367 - data += struct.pack(">B", subquest_1['hrp_reward']) + # data += struct.pack(">B", subquest_1['hrp_reward']) + data += struct.pack(">I", subquest_1['hrp_reward']) # - id: supply_set (wrong) # type: u4 @@ -1441,21 +1464,37 @@ def make_binary_event_quest(quest_data): # offset: 0x036F data += struct.pack(">B", unknown['unk_6']) - # - id: supply_set_number - # type: u4 + # - id: unkShort1 + # type: u2 # 0x00000011 for the great jaggi quest # offset: 0x0370 - data += struct.pack(">I", quest_info['supply_set_number']) + data += struct.pack(">H", unknown.get('unkShort1', 0)) - # - id: unk12 - # type: u4 + # - id: supply_set_number + # type: u2 + # 0x00000011 for the great jaggi quest + # offset: 0x0372 + data += struct.pack(">H", quest_info['supply_set_number']) + + # - id: unkShort2 + # type: u2 # offset: 0x0374 - data += struct.pack(">I", unknown['unk_7']) + data += struct.pack(">H", unknown.get('unkShort2', 0)) - # - id: unk13 + # - id: unk_7 # type: u2 + # offset: 0x0376 + data += struct.pack(">H", unknown['unk_7']) + + # - id: unkByte1 + # type: u1 # offset: 0x0378 - data += b'\0' * 0x02 + data += struct.pack(">B", unknown.get('unkByte1', 0)) + + # - id: unkByte2 + # type: u1 + # offset: 0x0379 + data += struct.pack(">B", unknown.get('unkByte2', 0)) # - id: type_flag (STARTING POSITION, 0x0000: basecamp, # 0x0001:random, 0x0002: shrine) @@ -1463,19 +1502,26 @@ def make_binary_event_quest(quest_data): # offset: 0x037A data += struct.pack(">h", quest_info['starting_position']) - # UNK + # - id: unkByte3 # offset: 0x037C - data += b'\0' * 0x02 + data += struct.pack(">B", unknown.get('unkByte3', 0)) + + # - id: unkByte4 + # offset: 0x037D + data += struct.pack(">B", unknown.get('unkByte4', 0)) # - id: small_monster_data_location # type: u2 # offset: 0x037E data += struct.pack(">h", 0x04b8) - # - id: type_amount - # type: u2 + # - id: unkByte7 # offset: 0x0380 - data += b'\0' * 0x02 + data += struct.pack(">B", unknown.get('unkByte7', 0)) + + # - id: unkByte8 + # offset: 0x0381 + data += struct.pack(">B", unknown.get('unkByte8', 0)) # - id: general_enemy_level # type: u2 @@ -1765,19 +1811,46 @@ def is_arena_quest(flags): class QuestLoader: def __init__(self, file_loc='event/quest_rotation.json'): - self.version = 0 - self.version_incrementer = 28 + # self.version_incrementer = 28 self.file_loc = file_loc - self.load_quests() self.version = 0 + self.trading_post_version = 0 + self.quests = [] + self.trading_post = [] + self.prev_quest_json = b"" + self.prev_trading_post_json = b"" + self.load_quests() + self.load_trading_post() + + def load_trading_post(self): + trading_post_list = [] + with open('event/trading_post.json', 'r') as f: + trading_post_json = byteify(json.load(f)) + self.prev_trading_post_json = trading_post_json + def slot(item, qty): + return struct.pack(">HH", item, qty) + for day in trading_post_json: + day_encoded = b"" + for entry in day: + offered, offered_quantity = entry[0] + price1, price1_quantity = entry[1] + price2, price2_quantity = entry[2] + day_encoded += slot(offered, offered_quantity) + \ + slot(price1, price1_quantity) + \ + slot(price2, price2_quantity) + \ + slot(0, 0) + trading_post_list.append(day_encoded) + self.trading_post_version += len(self.trading_post) + self.trading_post = trading_post_list def load_quests(self): - import json - self.version += self.version_incrementer quest_list = [] with open(self.file_loc, 'r') as f: quests_json = byteify(json.load(f)) + self.prev_quest_json = quests_json + idx = 0 for day in quests_json: + idx += 1 curr_quest_list = [] for quest_file in day: with open(quest_file, 'r') as ff: @@ -1785,8 +1858,81 @@ def load_quests(self): curr_quest = make_event_slot(curr_quest) curr_quest_list.append(curr_quest) quest_list.append(curr_quest_list) + self.version += len(self) # self.version_incrementer self.quests = quest_list + def dump_trading_post_to_bytes(self): + """TODO: Used by the cache.""" + trading_post_list = [] + with open('event/trading_post.json', 'r') as f: + trading_post_json = byteify(json.load(f)) + self.prev_trading_post_json = trading_post_json + for day in trading_post_json: + trading_post_list.append(day) + return json.dumps(trading_post_list).encode('utf-8') + + def dump_quest_to_bytes(self): + """TODO: Used by the cache.""" + quest_list = [] + with open(self.file_loc, 'r') as f: + quests_json = byteify(json.load(f)) + self.prev_quest_json = quests_json + for day in quests_json: + curr_quest_list = [] + for quest_file in day: + with open(quest_file, 'r') as ff: + curr_quest = byteify(json.load(ff)) + curr_quest_list.append(curr_quest) + quest_list.append(curr_quest_list) + return json.dumps(quest_list).encode('utf-8') + + def load_trading_post_from_bytes(self, bytedata): + """TODO: Used by the cache.""" + trading_post_list = json.loads(bytedata.decode('utf-8')) + new_trading_post_list = [] + try: + def slot(item, qty): + return struct.pack(">HH", item, qty) + for day in trading_post_list: + day_encoded = b"" + for entry in day: + offered, offered_quantity = entry[0] + price1, price1_quantity = entry[1] + price2, price2_quantity = entry[2] + day_encoded += slot(offered, offered_quantity) + \ + slot(price1, price1_quantity) + \ + slot(price2, price2_quantity) + \ + slot(0, 0) + new_trading_post_list.append(day_encoded) + if self.trading_post == new_trading_post_list: + return False, "" + else: + self.trading_post_version += self.get_trading_post_len() + self.trading_post = new_trading_post_list + return True, "" + except Exception as e: + return False, "Failed to update trading post: "+str(e) + + def load_quests_from_bytes(self, bytedata): + """TODO: Used by the cache.""" + quest_list = json.loads(bytedata.decode('utf-8')) + new_quest_list = [] + try: + for day in quest_list: + day_arr = [] + for curr_quest in day: + quest = make_event_slot(curr_quest) + day_arr.append(quest) + new_quest_list.append(day_arr) + if self.quests == new_quest_list: + return False, "" + else: + self.version += len(self) # self.version_incrementer + self.quests = new_quest_list + return True, "" + except Exception as e: + return False, "Failed to update quests: "+str(e) + def get_quest_dicts(self, idx): # Get quest dicts for the day true_idx = idx - 1 @@ -1805,6 +1951,15 @@ def get_separated_quest_dicts(self, idx): quest_list.append(quest) return quest_list, arena_list + def get_trading_post_len(self): + # Get the number of trading post days + return len(self.trading_post) + + def get_trading_post_day(self, idx): + # Get trading post offers for the day + true_idx = idx - self.trading_post_version - 1 + return self.trading_post[true_idx] + def __len__(self): # Get number of days return len(self.quests) diff --git a/mh/server.py b/mh/server.py index a7e6345..4af023a 100644 --- a/mh/server.py +++ b/mh/server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2022-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2022-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT Server module.""" @@ -9,6 +9,7 @@ import socket import struct import threading +import traceback from mh.time_utils import Timer from other.utils import wii_ssl_wrap_socket @@ -121,7 +122,7 @@ def finish(self): try: self.on_finish() except Exception: - pass + self.server.error(traceback.format_exc()) self.finished = True @@ -162,6 +163,7 @@ def __init__(self, server_address, RequestHandlerClass, max_threads, self.max_threads = max_threads or multiprocessing.cpu_count() self.ssl_cert = ssl_cert self.ssl_key = ssl_key + # TODO: Backport change required by central/cache if any if bind_and_activate: try: @@ -218,24 +220,28 @@ def serve_forever(self): if self.__shutdown_request: break - for (key, event) in ready: - selected = key.fileobj - if selected == self: - self.accept_new_connection() - else: - assert event == selectors.EVENT_READ - try: - packet = selected.on_recv() - if packet is None: + try: + for (key, event) in ready: + selected = key.fileobj + if selected == self: + self.accept_new_connection() + else: + assert event == selectors.EVENT_READ + try: + packet = selected.on_recv() + if packet is None: + if selected.is_finished(): + self.remove_handler(selected) + continue + + self._queue_work(selected, packet, event) + except Exception as e: + selected.on_exception(e) if selected.is_finished(): self.remove_handler(selected) - continue + except: + self.error(traceback.format_exc()) - self._queue_work(selected, packet, event) - except Exception as e: - selected.on_exception(e) - if selected.is_finished(): - self.remove_handler(selected) if write_watch.elapsed() >= write_timeout: try: for handler in self.handlers: @@ -246,8 +252,12 @@ def serve_forever(self): if handler.is_finished(): self.remove_handler(handler) + except: + self.error(traceback.format_exc()) finally: write_watch.restart() + except: + self.error(traceback.format_exc()) finally: self.__is_shut_down.set() @@ -269,12 +279,15 @@ def _worker_target(self, work_queue): assert event == selectors.EVENT_READ try: - handler.on_packet(packet) - except Exception as e: - handler.on_exception(e) - - if handler.is_finished(): - self.remove_handler(handler) + try: + handler.on_packet(packet) + except Exception as e: + handler.on_exception(e) + + if handler.is_finished(): + self.remove_handler(handler) + except: + self.error(traceback.format_exc()) def accept_new_connection(self): # type: () -> None diff --git a/mh/session.py b/mh/session.py index d89e966..377c5fa 100644 --- a/mh/session.py +++ b/mh/session.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter session module.""" @@ -52,6 +52,7 @@ def __init__(self, connection_handler): self.state = SessionState.UNKNOWN self.binary_setting = b"" self.search_payload = None + # TODO: Backport the server_id and serialisation logic self.hunter_info = pati.HunterSettings() def get(self, connection_data): @@ -60,6 +61,7 @@ def get(self, connection_data): self.pat_ticket = to_str( pati.unpack_binary(connection_data.pat_ticket) ) + # TODO: Backport state change if hasattr(connection_data, "online_support_code"): self.online_support_code = to_str( pati.unpack_string(connection_data.online_support_code) @@ -78,6 +80,8 @@ def get(self, connection_data): "online_support_code" in connection_data) return session + # TODO: Backport session_ready logic + def get_support_code(self): """Return the online support code.""" return DB.get_support_code(self) @@ -114,6 +118,8 @@ def get_users(self, first_index, count): def use_user(self, index, name): DB.use_user(self, index, name) + # TODO: server_index and recall logic + def get_servers(self): return DB.get_servers() diff --git a/mh/time_utils.py b/mh/time_utils.py index 8fec37d..56c92b0 100644 --- a/mh/time_utils.py +++ b/mh/time_utils.py @@ -48,12 +48,14 @@ def get_jhen_event_times(): int(cycle_start + JHEN_END*SECONDS_PER_DAY)) # sandstorm end -def current_event_time_slot(): +def current_event_time_slot(binary_loader): """ - There are JHEN_EVENT_OFFSET temporal event slots per data event slot. + There are len(binary_loader) temporal event slots per data event slot. Each one activates on a different day, counting up from 0. """ - return int(current_server_time()//SECONDS_PER_DAY) % JHEN_EVENT_OFFSET + return int( + current_server_time() // SECONDS_PER_DAY + ) % len(binary_loader) # JHEN_EVENT_OFFSET def is_jhen_active(): @@ -63,6 +65,16 @@ def is_jhen_active(): return JHEN_START <= day_in_cycle < JHEN_END +def current_trading_post_time_slot(binary_loader): + """ + There are len(binary_loader) temporal trading post slots. + Each one activates on a different day, counting up from 0. + """ + return int( + current_server_time() // SECONDS_PER_DAY + ) % binary_loader.get_trading_post_len() + + class Timer(object): def __init__(self): self.__start = time.time() diff --git a/opn_server.py b/opn_server.py index 431530b..bfee869 100644 --- a/opn_server.py +++ b/opn_server.py @@ -4,9 +4,10 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter OPN server.""" +import mh.pat_item as pati from mh.pat import PatServer, PatRequestHandler -from other.utils import server_base, server_main +from other.utils import server_base, server_main, to_str class OpnServer(PatServer): @@ -16,7 +17,37 @@ class OpnServer(PatServer): class OpnRequestHandler(PatRequestHandler): """Basic OPN server request handler class.""" - pass + # TODO: Backport wii_ssl_wrap_socket change if needed + + def sendReqConnection(self, unused=0, seq=0): + """Override default implementation to add security checks.""" + self.sendReqMemoryCheck(0x80000000, 6) # Request the game id + + def recvAnsMemoryCheck(self, packet_id, data, seq): + """AnsMemoryCheck packet. + + ID: 60810200 + JP: メモリ内容送信 + TR: Memory content transmission + """ + # unk = pati.MemoryData.unpack(data) + # with pati.Unpacker(data, offset=len(unk.pack())) as unpacker: + with pati.Unpacker(data) as unpacker: + unk = unpacker.MemoryData() + address, = unpacker.struct(">I") + data = unpacker.lp2_string() + + if address == 0x80000000: + self.game_id = to_str(data) # type: ignore + if self.game_id == 'RMHE08': + self.sendReqMemoryCheck(0x806308e8, 56) + elif self.game_id == 'RMHP08': + self.sendReqMemoryCheck(0x806311a8, 56) + else: + PatRequestHandler.sendReqConnection(self) + elif address in [0x806308e8, 0x806311a8]: + # TODO: Backport the patch checking logic + PatRequestHandler.sendReqConnection(self) BASE = server_base("OPN", OpnServer, OpnRequestHandler) diff --git a/other/utils.py b/other/utils.py index f6c3e3e..5fcd3ec 100644 --- a/other/utils.py +++ b/other/utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2024 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Utils helper module.""" @@ -240,6 +240,9 @@ def get_config(name, config_file=CONFIG_FILE): } +# TODO: Backport MySQL, latest_patch and central config code + + def get_default_ip(): # type: () -> str """Get the default IP address""" @@ -323,6 +326,9 @@ def typebool(s): parser.add_argument("--dry-run", action="store_true", dest="dry_run", help="dry run to test the server") + parser.add_argument("-t", "--no-timeout", action="store_true", + dest="no_timeout", + help="disable player timeouts") return parser @@ -366,7 +372,8 @@ def create_server(server_class, server_handler, address="0.0.0.0", port=8200, name="Server", max_thread=0, use_ssl=True, ssl_cert="server.crt", ssl_key="server.key", log_to_file=True, log_filename="server.log", - log_to_console=True, log_to_window=False, debug_mode=False): + log_to_console=True, log_to_window=False, legacy_ssl=False, + debug_mode=False, no_timeout=False): """Create a server, its logger and the SSL context if needed.""" logger = create_logger( name, level=logging.DEBUG if debug_mode else logging.INFO, @@ -377,7 +384,8 @@ def create_server(server_class, server_handler, ssl_cert = None ssl_key = None return server_class((address, port), server_handler, max_thread, logger, - debug_mode, ssl_cert=ssl_cert, ssl_key=ssl_key) + debug_mode, ssl_cert=ssl_cert, ssl_key=ssl_key, + no_timeout=no_timeout) server_base = namedtuple("ServerBase", ["name", "cls", "handler"]) @@ -389,6 +397,7 @@ def create_server_from_base(name, server_class, server_handler, args=None): If args is None, sys.argv is used (see ArgumentParser.parser_args). """ config = get_config(name) + # TODO: Backport central config code if needed parser = argparse_from_config(config) args = parser.parse_args(args) kwargs = { diff --git a/res/trading_post.py b/res/trading_post.py index e992068..bd3ca17 100644 --- a/res/trading_post.py +++ b/res/trading_post.py @@ -279,6 +279,12 @@ DRAGON_TOADSTOOL_X5, DIABLOS_SHELL_X1, BARROTH_SHELL_X1, PRIZE_GOLD_SWORD_X1, DRAGONFELL_BERRY_X4 # noqa ] +CUSTOM_TRADES = [ + POPFISH_X8, WATERBLOCK_SEED_X3, BONE_HUSK_S_X10, DUNG_X5, SHARPENED_FANG_X5, # noqa + TOADSTOOL_X5, STONE_X10, SPIDER_WEB_X5, BUGHOPPER_X10, ICETHAW_PELLET_X3, + RATHIAN_SCALE_X1, WYVERN_CLAW_X8, PRIZE_GOLD_SWORD_X1, BARROTH_SHELL_X1, ARMOR_STONE_X3 # noqa +] + # For testing purposes (TRADES has 60 entries) TRADES_SLICE_1 = list(islice(TRADES, 0, 15)) TRADES_SLICE_2 = list(islice(TRADES, 15, 30)) @@ -300,4 +306,4 @@ def pad(known_trade): ) -CURRENT_TRADES = pack_trades(KNOWN_TRADES_1) +CURRENT_TRADES = pack_trades(CUSTOM_TRADES) From e5efc4c6db5cf5e2394d81eebb85a141cf0e029b Mon Sep 17 00:00:00 2001 From: Kevin Barkevich Date: Sat, 14 Jun 2025 23:43:50 -0400 Subject: [PATCH 3/4] Changed default quest rotation to be only 1 day for simplification Updated Mercy Mission to have corrected small monsters Removed need for .dat small monster files New event quest --- event/Flooded Forest Free-For-All.json | 859 +++++++++++++++----- event/Gobuled Everything in Sight.json | 915 ++++++++++++++++----- event/Mercy Mission.json | 944 +++++++++++++++++----- event/Shut Up and Fish!.json | 935 ++++++++++++++++------ event/Speak of the Deviljho.json | 835 +++++++++++++++---- event/The Phantom Uragaan.json | 1014 +++++++++++++++++++----- event/[MH3SP] Skirting the Rules.json | 787 ++++++++++++++++++ event/quest_rotation.json | 718 ----------------- 8 files changed, 5109 insertions(+), 1898 deletions(-) create mode 100644 event/[MH3SP] Skirting the Rules.json diff --git a/event/Flooded Forest Free-For-All.json b/event/Flooded Forest Free-For-All.json index 16a83c3..bf860b4 100644 --- a/event/Flooded Forest Free-For-All.json +++ b/event/Flooded Forest Free-For-All.json @@ -1,232 +1,723 @@ { + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61017, + "name": "Flooded Forest Free-For-All", + "client": "Argosy Captain", + "description": "Hunt a Royal L., Lag. & Gobul", + "details": "Taihen! Means very bad, yes?\nFlooded Forest overrun by pack\nof leviathans -- Argosy cannot\nget anywhere near area! Big\nproblem for trade, yes? Only\nhunters can return fair seas\nto Flooded Forest. Onegai!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 9000, + "quest_fee": 2550, + "time_limit": 50, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 5, + "hrp_restriction": 10, + "resources": 1, + "supply_set_number": 43, + "starting_position": 1, + "general_enemy_level": 64, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 16, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_2": { + "type": 15, + "starting_area": 0, + "boss_id": 1, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_3": { + "type": 18, + "starting_area": 0, + "boss_id": 2, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 1, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 18, - "zenny_reward": 0, - "type": 1 - }, "main_quest": { - "objective_num": 1, - "hrp_reward": 2600, + "type": 1, + "objective_type": 16, + "objective_num": 1, + "zenny_reward": 25800, + "hrp_reward": 2600, "rewards_row_1": [ [ - 445, - 1, + 445, + 1, 1 - ], + ], [ - 446, - 1, + 446, + 1, 5 - ], + ], [ - 490, - 1, + 490, + 1, 14 - ], + ], [ - 495, - 1, + 495, + 1, 20 - ], + ], [ - 498, - 1, + 498, + 1, 7 - ], + ], [ - 499, - 1, + 499, + 1, 10 - ], + ], [ - 500, - 1, + 500, + 1, 8 - ], + ], [ - 441, - 1, + 441, + 1, 10 - ], + ], [ - 186, - 1, + 186, + 1, 25 ] - ], + ], "rewards_row_2": [ [ - 445, - 1, + 445, + 1, 1 - ], + ], [ - 446, - 1, + 446, + 1, 5 - ], + ], [ - 490, - 1, + 490, + 1, 14 - ], + ], [ - 495, - 1, + 495, + 1, 20 - ], + ], [ - 498, - 1, + 498, + 1, 7 - ], + ], [ - 499, - 1, + 499, + 1, 10 - ], + ], [ - 500, - 1, + 500, + 1, 8 - ], + ], [ - 441, - 1, + 441, + 1, 10 - ], + ], [ - 186, - 1, + 186, + 1, 25 ] - ], - "objective_type": 16, - "zenny_reward": 25800, - "type": 1 - }, + ] + }, "subquest_1": { - "objective_num": 1, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 15, - "zenny_reward": 0, - "type": 1 + "description": "None", + "type": 1, + "objective_type": 15, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 50, - "wave_1_transition_quantity": 0, - "starting_position": 1, - "quest_rank": 5, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 64, - "wave_2_transition_type": 0, - "location": 3, - "penalty_per_cart": 9000, - "resources": 1, - "details": "Taihen! Means very bad, yes?\nFlooded Forest overrun by pack\nof leviathans -- Argosy cannot\nget anywhere near area! Big\nproblem for trade, yes? Only\nhunters can return fair seas\nto Flooded Forest. Onegai!", - "description": "Hunt a Royal L., Lag. & Gobul", - "smallmonster_data_file": "sm_ff_free_for_all.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 10, - "quest_fee": 2550, - "quest_id": 61017, - "name": "Flooded Forest Free-For-All", - "main_monster_2": 34, - "main_monster_1": 17, - "supply_set_number": 43, - "summon": 0, - "client": "Argosy Captain", - "flags": [ - [ - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0 - ] - ], - "success_message": "Complete the Main Quest." - }, + }, "unknown": { - "unk_12": 2, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 3, - "hp_spread": 0, - "level": 54, - "boss_id": 1, - "type": 15, - "starting_area": 0, - "spawn_count": 1, - "size": 100 - }, - "monster_3": { - "size_spread": 3, - "hp_spread": 0, - "level": 54, - "boss_id": 2, - "type": 18, - "starting_area": 0, - "spawn_count": 1, - "size": 100 - }, - "monster_1": { - "size_spread": 3, - "hp_spread": 0, - "level": 54, - "boss_id": 0, - "type": 16, - "starting_area": 0, - "spawn_count": 1, - "size": 100 - } + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/Gobuled Everything in Sight.json b/event/Gobuled Everything in Sight.json index 8627e2e..ca5dc66 100644 --- a/event/Gobuled Everything in Sight.json +++ b/event/Gobuled Everything in Sight.json @@ -1,264 +1,755 @@ { + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61010, + "name": "Gobuled Everything in Sight", + "client": "Argosy Captain", + "description": "Hunt a Gobul", + "details": "Taihen! My small ships all\ngobbled by huge Gobul! The\ncrew all escaped, but goods\nare in fish's stomach, yes --\neven some are super-rare items\nthere! Only hunters can get my\nitems back. Onegai!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 1900, + "quest_fee": 550, + "time_limit": 50, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 3, + "hrp_restriction": 8, + "resources": 0, + "supply_set_number": 25, + "starting_position": 0, + "general_enemy_level": 32, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 18, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 32, + "size": 150, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 2, - "hrp_reward": 60, - "rewards_row_1": [ - [ - 326, - 1, - 10 - ], - [ - 323, - 1, - 24 - ], - [ - 324, - 1, - 20 - ], - [ - 325, - 1, - 28 - ], - [ - 155, - 1, - 18 - ] - ], - "description": "Fish out Gobul once", - "objective_type": 18, - "zenny_reward": 1200, - "type": 4096 - }, "main_quest": { - "objective_num": 1, - "hrp_reward": 1230, + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 5600, + "hrp_reward": 1230, "rewards_row_1": [ [ - 110, - 1, + 110, + 1, 15 - ], + ], [ - 326, - 1, + 326, + 1, 13 - ], + ], [ - 323, - 1, + 323, + 1, 15 - ], + ], [ - 440, - 1, + 440, + 1, 25 - ], + ], [ - 422, - 1, + 422, + 1, 12 - ], + ], [ - 441, - 1, + 441, + 1, 10 - ], + ], [ - 329, - 1, + 329, + 1, 10 ] - ], + ], "rewards_row_2": [ [ - 110, - 1, + 110, + 1, 15 - ], + ], [ - 326, - 1, + 326, + 1, 13 - ], + ], [ - 323, - 1, + 323, + 1, 15 - ], + ], [ - 440, - 1, + 440, + 1, 25 - ], + ], [ - 422, - 1, + 422, + 1, 12 - ], + ], [ - 441, - 1, + 441, + 1, 10 - ], + ], [ - 329, - 1, + 329, + 1, 10 ] - ], - "objective_type": 18, - "zenny_reward": 5600, - "type": 1 - }, + ] + }, "subquest_1": { - "objective_num": 1, - "hrp_reward": 100, + "description": "Destroy Gobul's lantern", + "type": 516, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 800, + "hrp_reward": 100, "rewards_row_1": [ [ - 326, - 1, + 326, + 1, 10 - ], + ], [ - 323, - 1, + 323, + 1, 24 - ], + ], [ - 324, - 1, + 324, + 1, 20 - ], + ], [ - 325, - 1, + 325, + 1, 28 - ], + ], [ - 155, - 1, + 155, + 1, + 18 + ] + ] + }, + "subquest_2": { + "description": "Fish out Gobul once", + "type": 4096, + "objective_type": 18, + "objective_num": 2, + "zenny_reward": 1200, + "hrp_reward": 60, + "rewards_row_1": [ + [ + 326, + 1, + 10 + ], + [ + 323, + 1, + 24 + ], + [ + 324, + 1, + 20 + ], + [ + 325, + 1, + 28 + ], + [ + 155, + 1, 18 ] - ], - "description": "Destroy Gobul's lantern", - "objective_type": 18, - "zenny_reward": 800, - "type": 516 - } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 50, - "wave_1_transition_quantity": 0, - "starting_position": 0, - "quest_rank": 3, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 32, - "wave_2_transition_type": 0, - "location": 3, - "penalty_per_cart": 1900, - "resources": 0, - "details": "Taihen! My small ships all\ngobbled by huge Gobul! The\ncrew all escaped, but goods\nare in fish's stomach, yes --\neven some are super-rare items\nthere! Only hunters can get my\nitems back. Onegai!", - "description": "Hunt a Gobul", - "smallmonster_data_file": "sm_ff_free_for_all.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 8, - "quest_fee": 550, - "quest_id": 61010, - "name": "Gobuled Everything in Sight", - "main_monster_2": 34, - "main_monster_1": 17, - "supply_set_number": 25, - "summon": 0, - "client": "Argosy Captain", - "flags": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 1 ] - ], - "success_message": "Complete the Main Quest." - }, - "unknown": { - "unk_12": 2, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_3": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_1": { - "size_spread": 0, - "hp_spread": 0, - "level": 32, - "boss_id": 0, - "type": 18, - "starting_area": 0, - "spawn_count": 1, - "size": 150 } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/Mercy Mission.json b/event/Mercy Mission.json index ffe1c74..0cb1c6f 100644 --- a/event/Mercy Mission.json +++ b/event/Mercy Mission.json @@ -1,264 +1,784 @@ { + "small_monsters": [ + [], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 1, + "pos_x": 247.42, + "pos_y": 560.37, + "pos_z": -3613.8, + "rot_x": 0, + "rot_y": -21504, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": -474.9, + "pos_y": 491.91, + "pos_z": -3857.25, + "rot_x": 0, + "rot_y": -48128, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 3, + "pos_x": 897.01, + "pos_y": 418.6, + "pos_z": -4931.83, + "rot_x": 0, + "rot_y": -51200, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 2, + "pos_x": 219.95, + "pos_y": 402.97, + "pos_z": -4449.25, + "rot_x": 0, + "rot_y": 44032, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 2, + "quantity": 3, + "pos_x": -6654.1, + "pos_y": 23.12, + "pos_z": 117.64, + "rot_x": 0, + "rot_y": 81920, + "rot_z": 0 + } + ], + [ + { + "type": 27, + "unk1": 0, + "unk2": 3, + "variant": 0, + "room": 3, + "quantity": -1, + "pos_x": 2567.38, + "pos_y": -4.58, + "pos_z": -1280.44, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 3, + "variant": 2, + "room": 3, + "quantity": -1, + "pos_x": 2119.14, + "pos_y": -14.21, + "pos_z": -787.0, + "rot_x": 0, + "rot_y": 60416, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 2, + "pos_x": 39.65, + "pos_y": 2.0, + "pos_z": 2631.32, + "rot_x": 0, + "rot_y": 20480, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 2, + "pos_x": -538.14, + "pos_y": 2.0, + "pos_z": 2165.99, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 1, + "pos_x": 360.98, + "pos_y": 2.0, + "pos_z": 820.71, + "rot_x": 0, + "rot_y": -33792, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 4, + "quantity": -1, + "pos_x": -5671.42, + "pos_y": 466.03, + "pos_z": 3071.35, + "rot_x": 49152, + "rot_y": 54871, + "rot_z": 0 + } + ], + [], + [], + [ + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 2, + "pos_x": 1103.05, + "pos_y": -2050.0, + "pos_z": -1429.32, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -3054.79, + "pos_y": -3047.85, + "pos_z": 3126.22, + "rot_x": 0, + "rot_y": -11264, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": 1268.03, + "pos_y": -2470.0, + "pos_z": -557.22, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 3, + "pos_x": 1742.13, + "pos_y": -3820.0, + "pos_z": -1993.49, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 1732.89, + "pos_y": -3580.0, + "pos_z": -4462.32, + "rot_x": 0, + "rot_y": -50176, + "rot_z": 0 + } + ], + [], + [ + { + "type": 11, + "unk1": 1, + "unk2": 9, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": -482.31, + "pos_y": 16.39, + "pos_z": 5.01, + "rot_x": 0, + "rot_y": 45056, + "rot_z": 0 + } + ], + [ + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -1949.45, + "pos_y": -276.13, + "pos_z": 1228.73, + "rot_x": 0, + "rot_y": 38912, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": -1, + "pos_x": -1552.64, + "pos_y": -186.42, + "pos_z": 1504.3, + "rot_x": 0, + "rot_y": -5120, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": -1, + "pos_x": -1352.11, + "pos_y": -174.8, + "pos_z": 1441.92, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -653.75, + "pos_y": 306.58, + "pos_z": 2295.24, + "rot_x": 0, + "rot_y": 39936, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 4, + "pos_x": -615.28, + "pos_y": 96.58, + "pos_z": 2086.81, + "rot_x": 0, + "rot_y": 21504, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4363.26, + "pos_y": 426.27, + "pos_z": 5818.19, + "rot_x": 0, + "rot_y": 30939, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4782.14, + "pos_y": 426.27, + "pos_z": 5556.53, + "rot_x": 0, + "rot_y": 29696, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4617.08, + "pos_y": 426.27, + "pos_z": 6208.15, + "rot_x": 0, + "rot_y": 51186, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 5099.46, + "pos_y": 426.27, + "pos_z": 5456.15, + "rot_x": 0, + "rot_y": 28996, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 4, + "pos_x": 2767.15, + "pos_y": 611.59, + "pos_z": 4297.09, + "rot_x": 0, + "rot_y": -54272, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": 2793.18, + "pos_y": 1205.81, + "pos_z": 5908.79, + "rot_x": 0, + "rot_y": -53248, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 1, + "pos_x": 3210.49, + "pos_y": 845.81, + "pos_z": 5369.26, + "rot_x": 0, + "rot_y": -71680, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 0, + "room": 12, + "quantity": -1, + "pos_x": -1624.63, + "pos_y": -888.12, + "pos_z": -2880.06, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": 3, + "pos_x": -2352.88, + "pos_y": -523.55, + "pos_z": -7478.2, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": 1, + "pos_x": -1957.86, + "pos_y": -1228.41, + "pos_z": -7734.46, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": -1, + "pos_x": -2821.8, + "pos_y": -988.41, + "pos_z": -8174.07, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": -1, + "pos_x": -2435.99, + "pos_y": -988.41, + "pos_z": -7780.24, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61002, + "name": "Mercy Mission", + "client": "MH3SP Dev Team", + "description": "Deliver 10 Monster Guts", + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "success_message": "Complete the Main Quest\nand both Subquests.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 600, + "quest_fee": 150, + "time_limit": 15, + "main_monster_1": 17, + "main_monster_2": 23, + "location": 1, + "quest_rank": 1, + "hrp_restriction": 0, + "resources": 0, + "supply_set_number": 35, + "starting_position": 0, + "general_enemy_level": 23, + "summon": 1677787404, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 3, - "hrp_reward": 70, - "rewards_row_1": [ - [ - 440, - 1, - 35 - ], - [ - 447, - 1, - 5 - ], - [ - 441, - 1, - 15 - ], - [ - 327, - 1, - 20 - ], - [ - 328, - 1, - 25 - ] - ], - "description": "Deliver 3 Goldenfish", - "objective_type": 217, - "zenny_reward": 2000, - "type": 2 - }, "main_quest": { - "objective_num": 10, - "hrp_reward": 70, + "type": 2, + "objective_type": 429, + "objective_num": 10, + "zenny_reward": 1500, + "hrp_reward": 70, "rewards_row_1": [ [ - 440, - 1, + 440, + 1, 8 - ], + ], [ - 149, - 1, + 149, + 1, 20 - ], + ], [ - 141, - 2, + 141, + 2, 20 - ], + ], [ - 327, - 1, + 327, + 1, 18 - ], + ], [ - 216, - 1, + 216, + 1, 8 - ], + ], [ - 101, - 8, + 101, + 8, 14 - ], + ], [ - 569, - 1, + 569, + 1, 12 ] - ], + ], "rewards_row_2": [ [ - 440, - 1, + 440, + 1, 35 - ], + ], [ - 447, - 1, + 447, + 1, 5 - ], + ], [ - 441, - 1, + 441, + 1, 15 - ], + ], [ - 327, - 1, + 327, + 1, 20 - ], + ], [ - 328, - 1, + 328, + 1, 25 ] - ], - "objective_type": 429, - "zenny_reward": 1500, - "type": 2 - }, + ] + }, "subquest_1": { - "objective_num": 12, - "hrp_reward": 55, + "description": "Deliver 12 Red Coral Stones", + "type": 2, + "objective_type": 430, + "objective_num": 12, + "zenny_reward": 1200, + "hrp_reward": 55, "rewards_row_1": [ [ - 440, - 1, + 440, + 1, 8 - ], + ], [ - 149, - 1, + 149, + 1, 20 - ], + ], [ - 141, - 2, + 141, + 2, 20 - ], + ], [ - 327, - 1, + 327, + 1, 18 - ], + ], [ - 216, - 1, + 216, + 1, 8 - ], + ], [ - 101, - 1, + 101, + 1, 14 - ], + ], [ - 569, - 1, + 569, + 1, 12 ] - ], - "description": "Deliver 12 Red Coral Stones", - "objective_type": 430, - "zenny_reward": 1200, - "type": 2 - } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 15, - "wave_1_transition_quantity": 0, - "starting_position": 0, - "quest_rank": 1, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 23, - "wave_2_transition_type": 0, - "location": 1, - "penalty_per_cart": 600, - "resources": 0, - "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", - "description": "Deliver 10 Monster Guts", - "smallmonster_data_file": "sm_mercymission.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 0, - "quest_fee": 150, - "quest_id": 61002, - "name": "Mercy Mission", - "main_monster_2": 23, - "main_monster_1": 17, - "supply_set_number": 35, - "summon": 1677918979, - "client": "MH3SP Dev Team", - "flags": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 ] - ], - "success_message": "Complete the Main Quest\nand both Subquests." - }, - "unknown": { - "unk_12": 3, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_3": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_1": { - "size_spread": 3, - "hp_spread": 1, - "level": 23, - "boss_id": 0, - "type": 16, - "starting_area": 0, - "spawn_count": 1, - "size": 100 + }, + "subquest_2": { + "description": "Deliver 3 Goldenfish", + "type": 2, + "objective_type": 217, + "objective_num": 3, + "zenny_reward": 2000, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ] } + }, + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/Shut Up and Fish!.json b/event/Shut Up and Fish!.json index 26a8704..6efc70e 100644 --- a/event/Shut Up and Fish!.json +++ b/event/Shut Up and Fish!.json @@ -1,274 +1,765 @@ { + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61004, + "name": "Shut Up and Fish!", + "client": "MH3SP Dev Team", + "description": "Hunt a Gobul", + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "success_message": "Complete the Main Quest\nand both Subquests.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 1900, + "quest_fee": 550, + "time_limit": 25, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 2, + "hrp_restriction": 7, + "resources": 0, + "supply_set_number": 35, + "starting_position": 0, + "general_enemy_level": 25, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 18, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 25, + "size": 100, + "hp_spread": 1, + "size_spread": 1 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 2, - "hrp_reward": 60, + "main_quest": { + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 5600, + "hrp_reward": 820, "rewards_row_1": [ [ - 149, - 3, + 149, + 3, 15 - ], + ], [ - 150, - 1, + 150, + 1, 5 - ], + ], [ - 214, - 2, + 214, + 2, 10 - ], + ], [ - 210, - 3, + 210, + 3, 20 - ], + ], [ - 212, - 2, + 212, + 2, 7 - ], + ], [ - 213, - 2, + 213, + 2, 10 - ], + ], [ - 215, - 2, + 215, + 2, 13 - ], + ], [ - 216, - 1, + 216, + 1, 20 ] - ], - "description": "Fish out Gobul once", - "objective_type": 18, - "zenny_reward": 1200, - "type": 4096 - }, - "main_quest": { - "objective_num": 1, - "hrp_reward": 820, - "rewards_row_1": [ + ], + "rewards_row_2": [ [ - 149, - 3, - 15 - ], + 440, + 1, + 35 + ], [ - 150, - 1, + 447, + 1, 5 - ], + ], [ - 214, - 2, - 10 - ], + 441, + 1, + 15 + ], [ - 210, - 3, + 327, + 1, 20 - ], - [ - 212, - 2, - 7 - ], + ], [ - 213, - 2, - 10 - ], - [ - 215, - 2, - 13 - ], - [ - 216, - 1, - 20 + 328, + 1, + 25 ] - ], - "rewards_row_2": [ + ] + }, + "subquest_1": { + "description": "Deliver 4 Goldenfish", + "type": 2, + "objective_type": 217, + "objective_num": 4, + "zenny_reward": 2400, + "hrp_reward": 70, + "rewards_row_1": [ [ - 440, - 1, + 440, + 1, 35 - ], + ], [ - 447, - 1, + 447, + 1, 5 - ], + ], [ - 441, - 1, + 441, + 1, 15 - ], + ], [ - 327, - 1, + 327, + 1, 20 - ], + ], [ - 328, - 1, + 328, + 1, 25 ] - ], - "objective_type": 18, - "zenny_reward": 5600, - "type": 1 - }, - "subquest_1": { - "objective_num": 4, - "hrp_reward": 70, + ] + }, + "subquest_2": { + "description": "Fish out Gobul once", + "type": 4096, + "objective_type": 18, + "objective_num": 2, + "zenny_reward": 1200, + "hrp_reward": 60, "rewards_row_1": [ [ - 440, - 1, - 35 - ], + 149, + 3, + 15 + ], [ - 447, - 1, + 150, + 1, 5 - ], + ], [ - 441, - 1, - 15 - ], + 214, + 2, + 10 + ], [ - 327, - 1, + 210, + 3, 20 - ], + ], [ - 328, - 1, - 25 + 212, + 2, + 7 + ], + [ + 213, + 2, + 10 + ], + [ + 215, + 2, + 13 + ], + [ + 216, + 1, + 20 ] - ], - "description": "Deliver 4 Goldenfish", - "objective_type": 217, - "zenny_reward": 2400, - "type": 2 - } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 25, - "wave_1_transition_quantity": 0, - "starting_position": 0, - "quest_rank": 2, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 25, - "wave_2_transition_type": 0, - "location": 3, - "penalty_per_cart": 1900, - "resources": 0, - "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", - "description": "Hunt a Gobul", - "smallmonster_data_file": "sm_ff_free_for_all.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 7, - "quest_fee": 550, - "quest_id": 61004, - "name": "Shut Up and Fish!", - "main_monster_2": 34, - "main_monster_1": 17, - "supply_set_number": 35, - "summon": 0, - "client": "MH3SP Dev Team", - "flags": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0 ] - ], - "success_message": "Complete the Main Quest\nand both Subquests." - }, - "unknown": { - "unk_12": 2, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_3": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_1": { - "size_spread": 1, - "hp_spread": 1, - "level": 25, - "boss_id": 0, - "type": 18, - "starting_area": 0, - "spawn_count": 1, - "size": 100 } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/Speak of the Deviljho.json b/event/Speak of the Deviljho.json index 8ca4c95..1bdab2a 100644 --- a/event/Speak of the Deviljho.json +++ b/event/Speak of the Deviljho.json @@ -1,212 +1,703 @@ { + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61012, + "name": "Speak of the Deviljho", + "client": "Eccentric Aristocrat", + "description": "Capture a Deviljho", + "details": "Some wyvern named Deviljho has\nLoc Lac hunters fouling their\narmor. I hear it has a taste\nfor captured animals. I simply\nmust have one! What will I do\nwith it? That's for me to know\nand you to NEVER find out!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, time expires,\nor accidentally slay the target.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 7500, + "quest_fee": 1800, + "time_limit": 50, + "main_monster_1": 32, + "main_monster_2": 33, + "location": 3, + "quest_rank": 4, + "hrp_restriction": 9, + "resources": 1, + "supply_set_number": 18, + "starting_position": 1, + "general_enemy_level": 52, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 52, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 0, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 0, - "zenny_reward": 0, - "type": 0 - }, "main_quest": { - "objective_num": 1, - "hrp_reward": 1820, + "type": 129, + "objective_type": 7, + "objective_num": 1, + "zenny_reward": 22000, + "hrp_reward": 1820, "rewards_row_1": [ [ - 445, - 1, + 445, + 1, 3 - ], + ], [ - 485, - 1, + 485, + 1, 16 - ], + ], [ - 484, - 1, + 484, + 1, 23 - ], + ], [ - 483, - 1, + 483, + 1, 20 - ], + ], [ - 486, - 1, + 486, + 1, 10 - ], + ], [ - 487, - 1, + 487, + 1, 3 - ], + ], [ - 593, - 1, + 593, + 1, 25 ] - ], + ], "rewards_row_2": [ [ - 445, - 1, + 445, + 1, 3 - ], + ], [ - 485, - 1, + 485, + 1, 16 - ], + ], [ - 484, - 1, + 484, + 1, 23 - ], + ], [ - 483, - 1, + 483, + 1, 20 - ], + ], [ - 486, - 1, + 486, + 1, 10 - ], + ], [ - 487, - 1, + 487, + 1, 3 - ], + ], [ - 593, - 1, + 593, + 1, 25 ] - ], - "objective_type": 7, - "zenny_reward": 22000, - "type": 129 - }, + ] + }, "subquest_1": { - "objective_num": 0, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 0, - "zenny_reward": 0, - "type": 0 + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 50, - "wave_1_transition_quantity": 0, - "starting_position": 1, - "quest_rank": 4, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 64, - "wave_2_transition_type": 0, - "location": 3, - "penalty_per_cart": 7500, - "resources": 1, - "details": "Some wyvern named Deviljho has\nLoc Lac hunters fouling their\narmor. I hear it has a taste\nfor captured animals. I simply\nmust have one! What will I do\nwith it? That's for me to know\nand you to NEVER find out!", - "description": "Capture a Deviljho", - "smallmonster_data_file": "sm_ff_free_for_all.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 9, - "quest_fee": 1800, - "quest_id": 61012, - "name": "Speak of the Deviljho", - "main_monster_2": 33, - "main_monster_1": 32, - "supply_set_number": 18, - "summon": 0, - "client": "Eccentric Aristocrat", - "flags": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1 - ] - ], - "success_message": "Complete the Main Quest." - }, + }, "unknown": { - "unk_12": 2, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_3": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_1": { - "size_spread": 3, - "hp_spread": 0, - "level": 52, - "boss_id": 0, - "type": 7, - "starting_area": 0, - "spawn_count": 1, - "size": 100 - } + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/The Phantom Uragaan.json b/event/The Phantom Uragaan.json index 14c2e5b..ac5529b 100644 --- a/event/The Phantom Uragaan.json +++ b/event/The Phantom Uragaan.json @@ -1,222 +1,880 @@ { + "small_monsters": [ + [], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": -494.25, + "pos_y": 47.01, + "pos_z": -947.91, + "rot_x": 0, + "rot_y": 20186, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 2, + "pos_x": -1361.42, + "pos_y": 20.6, + "pos_z": -712.51, + "rot_x": 0, + "rot_y": 14302, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 1, + "pos_x": 1031.98, + "pos_y": 26.73, + "pos_z": -1406.32, + "rot_x": 0, + "rot_y": 27535, + "rot_z": 0 + } + ], + [ + { + "type": 27, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1219.73, + "pos_y": 52.23, + "pos_z": 1102.22, + "rot_x": 0, + "rot_y": 3873, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 0, + "unk2": 2, + "variant": 1, + "room": 2, + "quantity": -1, + "pos_x": -830.32, + "pos_y": 39.56, + "pos_z": 1065.16, + "rot_x": 0, + "rot_y": 1246, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 2, + "variant": 2, + "room": 2, + "quantity": -1, + "pos_x": -682.64, + "pos_y": 60.8, + "pos_z": 1535.78, + "rot_x": 0, + "rot_y": 7451, + "rot_z": 0 + } + ], + [ + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": 8039.85, + "pos_y": 47.82, + "pos_z": 3794.23, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": 8331.77, + "pos_y": 77.59, + "pos_z": 4271.11, + "rot_x": 0, + "rot_y": -1024, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 1, + "pos_x": 7572.76, + "pos_y": 52.89, + "pos_z": 4356.53, + "rot_x": 0, + "rot_y": 21, + "rot_z": 0 + }, + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 3, + "quantity": -1, + "pos_x": 8572.88, + "pos_y": 655.41, + "pos_z": 2454.55, + "rot_x": 49152, + "rot_y": -3379, + "rot_z": 0 + } + ], + [ + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 4, + "quantity": 3, + "pos_x": -436.87, + "pos_y": 19.31, + "pos_z": 2521.63, + "rot_x": 0, + "rot_y": 9128, + "rot_z": 0 + }, + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 4, + "quantity": 2, + "pos_x": 360.05, + "pos_y": 38.55, + "pos_z": -800.35, + "rot_x": 0, + "rot_y": 4909, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -214.61, + "pos_y": 28.25, + "pos_z": 268.69, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 1350.31, + "pos_y": 23.18, + "pos_z": 3610.13, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 1800.4, + "pos_y": 1.84, + "pos_z": 1993.37, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -1425.29, + "pos_y": -2.37, + "pos_z": 2930.67, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 3000.62, + "pos_y": -0.47, + "pos_z": 2984.86, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -1057.0, + "pos_y": 6.53, + "pos_z": 1521.1, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 5, + "quantity": 2, + "pos_x": 39.52, + "pos_y": 285.05, + "pos_z": -1288.28, + "rot_x": 0, + "rot_y": 1577, + "rot_z": 0 + }, + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 5, + "quantity": 5, + "pos_x": 458.1, + "pos_y": 260.19, + "pos_z": -1249.2, + "rot_x": 0, + "rot_y": 10340, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 2045.92, + "pos_y": 82.8, + "pos_z": -3002.76, + "rot_x": 0, + "rot_y": 1630, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -875.85, + "pos_y": 74.14, + "pos_z": 555.11, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 2418.12, + "pos_y": 83.55, + "pos_z": -184.33, + "rot_x": 0, + "rot_y": 1294, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -3313.92, + "pos_y": 65.96, + "pos_z": -1106.93, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -2297.87, + "pos_y": 59.38, + "pos_z": -2214.42, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 1184.39, + "pos_y": 56.88, + "pos_z": -71.72, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": 393.15, + "pos_y": -35.75, + "pos_z": 1076.53, + "rot_x": 0, + "rot_y": -1536, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": -1170.83, + "pos_y": -30.77, + "pos_z": 447.51, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": 1020.1, + "pos_y": 4.72, + "pos_z": -202.83, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": -435.28, + "pos_y": -28.37, + "pos_z": -1280.39, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -208.7, + "pos_y": 15.76, + "pos_z": 1154.55, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -1469.04, + "pos_y": 23.53, + "pos_z": -284.28, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -290.52, + "pos_y": 8.16, + "pos_z": -1374.79, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": 2503.26, + "pos_y": 19.35, + "pos_z": 429.29, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": 651.25, + "pos_y": -9.45, + "pos_z": 761.42, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -948.43, + "pos_y": 25.56, + "pos_z": -516.55, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -2485.25, + "pos_y": 25.6, + "pos_z": 268.96, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -37.88, + "pos_y": 12.46, + "pos_z": -2799.27, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 4, + "pos_x": -1064.65, + "pos_y": 0.19, + "pos_z": 133.11, + "rot_x": 0, + "rot_y": 8277, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 3, + "pos_x": -1816.16, + "pos_y": 43.38, + "pos_z": -316.74, + "rot_x": 0, + "rot_y": 7354, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 2, + "pos_x": -834.16, + "pos_y": 51.62, + "pos_z": -1062.45, + "rot_x": 0, + "rot_y": 1069, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 1, + "pos_x": -818.82, + "pos_y": 32.27, + "pos_z": -671.25, + "rot_x": 0, + "rot_y": 4459, + "rot_z": 0 + } + ], + [ + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": 2, + "pos_x": 1226.78, + "pos_y": 14.44, + "pos_z": -971.03, + "rot_x": 0, + "rot_y": 8842, + "rot_z": 0 + }, + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": 4, + "pos_x": 30.91, + "pos_y": 11.0, + "pos_z": -556.52, + "rot_x": 0, + "rot_y": 3576, + "rot_z": 0 + } + ], + [] + ], + "quest_info": { + "quest_id": 61007, + "name": "The Phantom Uragaan", + "client": "Spoiled Princess", + "description": "Hunt an Uragaan", + "details": "Oooh, I just heard they've\nspotted the cutest, tiniest,\nmost adorable little Uragaan\non the Volcano. Hunt me one\nthis instant or I will get\nvery angry. And if I'm angry,\nDaddy's angry. Now go!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 3000, + "quest_fee": 850, + "time_limit": 50, + "main_monster_1": 21, + "main_monster_2": 27, + "location": 5, + "quest_rank": 3, + "hrp_restriction": 8, + "resources": 0, + "supply_set_number": 15, + "starting_position": 0, + "general_enemy_level": 29, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 9, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 29, + "size": 19, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, "objective_details": { - "subquest_2": { - "objective_num": 0, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 0, - "zenny_reward": 0, - "type": 0 - }, "main_quest": { - "objective_num": 1, - "hrp_reward": 1100, + "type": 1, + "objective_type": 9, + "objective_num": 1, + "zenny_reward": 8800, + "hrp_reward": 1100, "rewards_row_1": [ [ - 440, - 1, + 440, + 1, 1 - ], + ], [ - 410, - 1, + 410, + 1, 16 - ], + ], [ - 479, - 1, + 479, + 1, 20 - ], + ], [ - 412, - 1, + 412, + 1, 10 - ], + ], [ - 155, - 1, + 155, + 1, 10 - ], + ], [ - 343, - 15, + 343, + 15, 13 - ], + ], [ - 441, - 1, + 441, + 1, 5 - ], + ], [ - 110, - 1, + 110, + 1, 25 ] - ], + ], "rewards_row_2": [ [ - 440, - 1, + 440, + 1, 1 - ], + ], [ - 410, - 1, + 410, + 1, 16 - ], + ], [ - 479, - 1, + 479, + 1, 20 - ], + ], [ - 412, - 1, + 412, + 1, 10 - ], + ], [ - 155, - 1, + 155, + 1, 10 - ], + ], [ - 343, - 15, + 343, + 15, 13 - ], + ], [ - 441, - 1, + 441, + 1, 5 - ], + ], [ - 110, - 1, + 110, + 1, 25 ] - ], - "objective_type": 9, - "zenny_reward": 8800, - "type": 1 - }, + ] + }, "subquest_1": { - "objective_num": 0, - "hrp_reward": 0, - "rewards_row_1": [], - "description": "None", - "objective_type": 0, - "zenny_reward": 0, - "type": 0 + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] } - }, - "quest_info": { - "wave_1_transition_type": 0, - "time_limit": 50, - "wave_1_transition_quantity": 0, - "starting_position": 0, - "quest_rank": 3, - "wave_2_transition_target": 0, - "wave_2_transition_quantity": 0, - "general_enemy_level": 29, - "wave_2_transition_type": 0, - "location": 5, - "penalty_per_cart": 3000, - "resources": 0, - "details": "Oooh, I just heard they've\nspotted the cutest, tiniest,\nmost adorable little Uragaan\non the Volcano. Hunt me one\nthis instant or I will get\nvery angry. And if I'm angry,\nDaddy's angry. Now go!", - "description": "Hunt an Uragaan", - "smallmonster_data_file": "sm_phantomuragaan.dat", - "wave_1_transition_target": 0, - "hrp_restriction": 8, - "quest_fee": 850, - "quest_id": 61007, - "name": "The Phantom Uragaan", - "main_monster_2": 27, - "main_monster_1": 21, - "supply_set_number": 15, - "summon": 0, - "client": "Spoiled Princess", - "flags": [ - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0 - ], - [ - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 1 - ] - ], - "success_message": "Complete the Main Quest." - }, + }, "unknown": { - "unk_12": 2, - "unk_4": 0, - "unk_5": 0, - "unk_6": 0, - "unk_7": 0 - }, - "large_monsters": { - "monster_2": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_3": { - "size_spread": 0, - "hp_spread": 0, - "level": 0, - "boss_id": 0, - "type": 0, - "starting_area": 0, - "spawn_count": 0, - "size": 0 - }, - "monster_1": { - "size_spread": 0, - "hp_spread": 0, - "level": 29, - "boss_id": 0, - "type": 9, - "starting_area": 0, - "spawn_count": 1, - "size": 19 - } + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 } } \ No newline at end of file diff --git a/event/[MH3SP] Skirting the Rules.json b/event/[MH3SP] Skirting the Rules.json new file mode 100644 index 0000000..091a681 --- /dev/null +++ b/event/[MH3SP] Skirting the Rules.json @@ -0,0 +1,787 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 27, + "unk1": 0, + "unk2": 1, + "variant": 0, + "room": 1, + "quantity": -1, + "pos_x": 1138.86, + "pos_y": -22.25, + "pos_z": 210.14, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 1, + "variant": 2, + "room": 1, + "quantity": -1, + "pos_x": 1292.04, + "pos_y": -32.97, + "pos_z": 831.06, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -484.98, + "pos_y": -101.57, + "pos_z": 854.19, + "rot_x": 0, + "rot_y": -43008, + "rot_z": 0 + }, + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -973.62, + "pos_y": -175.59, + "pos_z": 217.88, + "rot_x": 0, + "rot_y": 1024, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 1, + "pos_x": -1195.98, + "pos_y": 7.82, + "pos_z": -605.82, + "rot_x": 0, + "rot_y": -27648, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 2, + "pos_x": -441.58, + "pos_y": -6.83, + "pos_z": 209.66, + "rot_x": 0, + "rot_y": -64512, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 3, + "pos_x": -1634.51, + "pos_y": -4.74, + "pos_z": 1046.63, + "rot_x": 0, + "rot_y": -63488, + "rot_z": 0 + } + ], + [ + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 3, + "quantity": 2, + "pos_x": 177.92, + "pos_y": 450.7, + "pos_z": -32.21, + "rot_x": 0, + "rot_y": -43008, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -78.66, + "pos_y": 330.7, + "pos_z": 362.86, + "rot_x": 0, + "rot_y": -14336, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 1, + "pos_x": 261.82, + "pos_y": 150.7, + "pos_z": 105.95, + "rot_x": 0, + "rot_y": -1024, + "rot_z": 0 + } + ], + [], + [ + { + "type": 10, + "unk1": 3, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": -1, + "pos_x": 300.4, + "pos_y": 4.0, + "pos_z": -211.14, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 3, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": -1, + "pos_x": 458.16, + "pos_y": 1.49, + "pos_z": -918.94, + "rot_x": 0, + "rot_y": 9216, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 5, + "pos_x": -943.71, + "pos_y": 4.0, + "pos_z": -5.71, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 2, + "pos_x": -504.37, + "pos_y": 2.52, + "pos_z": -757.3, + "rot_x": 0, + "rot_y": 121856, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 2, + "pos_x": 1118.48, + "pos_y": 4.0, + "pos_z": -420.89, + "rot_x": 0, + "rot_y": 65536, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 1, + "pos_x": 2658.84, + "pos_y": 2.53, + "pos_z": 222.99, + "rot_x": 0, + "rot_y": 136192, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 3, + "pos_x": 1287.42, + "pos_y": 2.0, + "pos_z": 1134.52, + "rot_x": 0, + "rot_y": 39936, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": 4, + "pos_x": -161.74, + "pos_y": 4.8, + "pos_z": -416.52, + "rot_x": 0, + "rot_y": 84992, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": 2, + "pos_x": -481.05, + "pos_y": 15.34, + "pos_z": -643.19, + "rot_x": 0, + "rot_y": 102400, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": -1, + "pos_x": -692.26, + "pos_y": -11.02, + "pos_z": -235.13, + "rot_x": 0, + "rot_y": 109568, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 2, + "pos_x": -96.09, + "pos_y": -10.02, + "pos_z": -67.59, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + } + ], + [], + [ + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 6, + "pos_x": 293.99, + "pos_y": -170.31, + "pos_z": 4049.95, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 4, + "pos_x": 124.95, + "pos_y": -186.54, + "pos_z": 3440.16, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 3, + "pos_x": -714.48, + "pos_y": -183.78, + "pos_z": 4108.5, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 2, + "pos_x": -1021.27, + "pos_y": -215.48, + "pos_z": 3726.09, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + } + ], + [ + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 3048.78, + "pos_y": 10.22, + "pos_z": 876.07, + "rot_x": 0, + "rot_y": -18432, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": -1, + "pos_x": -1791.99, + "pos_y": 1623.87, + "pos_z": 1867.26, + "rot_x": 0, + "rot_y": 13312, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": -1, + "pos_x": -1947.91, + "pos_y": 1683.87, + "pos_z": 1824.15, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + } + ], + [ + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 5, + "pos_x": -1198.33, + "pos_y": -93.69, + "pos_z": -612.44, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -167.54, + "pos_y": -127.09, + "pos_z": -28.67, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -649.88, + "pos_y": -7.3, + "pos_z": 1520.39, + "rot_x": 0, + "rot_y": 11264, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": 53.17, + "pos_y": -48.62, + "pos_z": 1195.9, + "rot_x": 0, + "rot_y": 54272, + "rot_z": 0 + } + ], + [ + { + "type": 26, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": 2195.89, + "pos_y": 73.7, + "pos_z": -720.92, + "rot_x": 0, + "rot_y": 7168, + "rot_z": 0 + }, + { + "type": 26, + "unk1": 1, + "unk2": 255, + "variant": 6, + "room": 11, + "quantity": 1, + "pos_x": -535.73, + "pos_y": 1212.59, + "pos_z": 896.44, + "rot_x": 0, + "rot_y": 30547, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -434.0, + "pos_y": 198.96, + "pos_z": 289.52, + "rot_x": 0, + "rot_y": -48128, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -802.69, + "pos_y": 198.96, + "pos_z": 66.62, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -645.14, + "pos_y": 288.96, + "pos_z": -371.21, + "rot_x": 0, + "rot_y": -40960, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 1, + "pos_x": -473.33, + "pos_y": 168.96, + "pos_z": -166.43, + "rot_x": 0, + "rot_y": -37888, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61018, + "name": "[MH3SP] Skirting the Rules", + "client": "Low-Rank Hunter", + "description": "Hunt 3 Deviljho", + "details": "There I was, reaching the end\nof my limit on an ordinary hunt\nin the Sandy Plains. The Guild\nfelynes picked me up in their\ncart... only to tell me that the\nhunting ground is closed! Slip in\nthere and find out why, will you?", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0 + ] + ], + "penalty_per_cart": 8500, + "quest_fee": 2500, + "time_limit": 50, + "main_monster_1": 37, + "main_monster_2": 11, + "location": 2, + "quest_rank": 6, + "hrp_restriction": 11, + "resources": 1, + "supply_set_number": 44, + "starting_position": 1, + "general_enemy_level": 52, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + }, + "monster_2": { + "type": 7, + "starting_area": 1, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + }, + "monster_3": { + "type": 7, + "starting_area": 2, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 7, + "objective_num": 3, + "zenny_reward": 25000, + "hrp_reward": 2500, + "rewards_row_1": [ + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 28 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 8 + ], + [ + 446, + 1, + 8 + ], + [ + 442, + 1, + 10 + ] + ], + "rewards_row_2": [ + [ + 393, + 2, + 27 + ], + [ + 111, + 1, + 5 + ], + [ + 441, + 1, + 8 + ], + [ + 140, + 1, + 18 + ], + [ + 119, + 1, + 20 + ], + [ + 448, + 1, + 12 + ], + [ + 444, + 1, + 10 + ] + ] + }, + "subquest_1": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 1, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/quest_rotation.json b/event/quest_rotation.json index f4d7dcc..2285608 100644 --- a/event/quest_rotation.json +++ b/event/quest_rotation.json @@ -1,727 +1,9 @@ [ [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/[MH3SP] Green Eggs and....json", - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Alluring Dress.json", - "event/[MH3SP] Green Eggs and....json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Royal Ludroth.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Bird and Brute.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/[MH3SP] Green Eggs and....json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/[MH3SP] Green Eggs and....json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Bird and Brute.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Sea Power.json", - "event/Grudge Match Qurupeco.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Royal Ludroth.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Where Gods Fear to Tread.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Ice and Fire.json", - "event/Grudge Match Lagiacrus.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json" - ], - [ - "event/[MH3SP] Green Eggs and....json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/[MH3SP] Green Eggs and....json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", "event/The Phantom Uragaan.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ "event/Mercy Mission.json", "event/Speak of the Deviljho.json", "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/Grudge Match Brute Horns.json", - "event/Grudge Match Uragaan.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Alluring Dress.json", - "event/Cold Call.json", - "event/Flooded Forest Free-For-All.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match Rathian.json", - "event/Grudge Match Land Lords.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Gobuled Everything in Sight.json", - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Blood Sport.json", - "event/Hot Deal.json", - "event/Jump Four Jaggi.json", - "event/Marine Warfare.json", - "event/World Eater.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Jump Fourty-Eight Jaggi.json", - "event/Animal Attractions.json", - "event/Rage Match.json", - "event/Sea Power.json", - "event/Grudge Match The Two Flames.json", - "event/Grudge Match Wyvern Trio.json", - "event/Grudge Match Qurupeco.json", - "event/Grudge Match Lagiacrus.json" - ], - [ - "event/Mercy Mission.json", - "event/Speak of the Deviljho.json", - "event/The Motley Mission.json", - "event/The Phantom Uragaan.json", "event/Grudge Match Qurupeco.json", "event/Grudge Match Lagiacrus.json", "event/Grudge Match Uragaan.json", From 9a1ea785d5b1714bc773f368674768277859f0b4 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Tue, 8 Jul 2025 18:23:36 +0400 Subject: [PATCH 4/4] Address some linter complaints --- dump_trading_post.py | 141 ++++++++++++++++++++++-------------------- fmp_server.py | 2 +- master_server.py | 2 +- mh/constants.py | 69 +++++++++++++++------ mh/database.py | 2 +- mh/equipment_utils.py | 4 +- mh/pat.py | 38 ++++++------ mh/pat_item.py | 13 ++-- mh/quest_utils.py | 37 ++++++----- mh/server.py | 22 +++---- mh/session.py | 3 +- opn_server.py | 8 +-- res/trading_post.py | 2 +- 13 files changed, 190 insertions(+), 153 deletions(-) diff --git a/dump_trading_post.py b/dump_trading_post.py index c43250c..4ce42aa 100644 --- a/dump_trading_post.py +++ b/dump_trading_post.py @@ -1,3 +1,8 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: Copyright (C) 2025 MH3SP Server Project +# SPDX-License-Identifier: AGPL-3.0-or-later + import json from mh.quest_utils import ItemsType @@ -68,11 +73,11 @@ if __name__ == "__main__": import json - + def get_trading_post_entry(entry): qty, price1, price2 = TRADING_POST_OPTIONS[entry] return [(entry, qty), price1, price2] - + trading_post = [ [ get_trading_post_entry(ItemsType.popfish), @@ -80,13 +85,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.sharpened_fang), - + get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.icethaw_pellet), - + get_trading_post_entry(ItemsType.rathian_scale), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.prize_gold_sword), @@ -105,7 +110,7 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.might_seed), get_trading_post_entry(ItemsType.sap_plant), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.rathian_scale), get_trading_post_entry(ItemsType.well_done_steak), @@ -118,13 +123,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.monster_bone_m), get_trading_post_entry(ItemsType.firedouse_berry), - + get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.sleepyfish), - + get_trading_post_entry(ItemsType.well_done_steak), get_trading_post_entry(ItemsType.bomb_arowana), get_trading_post_entry(ItemsType.bone_husk_l), @@ -137,13 +142,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.bone_husk_s), - + get_trading_post_entry(ItemsType.parashroom), get_trading_post_entry(ItemsType.monster_bone_m), get_trading_post_entry(ItemsType.firedouse_berry), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.rathian_scale), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.prize_gold_sword), @@ -156,13 +161,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.mega_harpoon), get_trading_post_entry(ItemsType.sleep_herb), get_trading_post_entry(ItemsType.burst_arowana), - + get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.monster_bone_m), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.sleep_herb), get_trading_post_entry(ItemsType.fire_herb), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.dragon_toadstool), @@ -175,13 +180,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.pin_tuna), get_trading_post_entry(ItemsType.parashroom), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.exciteshroom), get_trading_post_entry(ItemsType.whetfish), get_trading_post_entry(ItemsType.monster_bone_m), get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.spider_web), - + get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.screamer), get_trading_post_entry(ItemsType.gobul_hide), @@ -194,13 +199,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.pin_tuna), get_trading_post_entry(ItemsType.popfish), get_trading_post_entry(ItemsType.parashroom), - + get_trading_post_entry(ItemsType.sharpened_fang), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.sleepyfish), get_trading_post_entry(ItemsType.fire_herb), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.rathian_scale), get_trading_post_entry(ItemsType.well_done_steak), @@ -213,13 +218,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.sharpened_fang), get_trading_post_entry(ItemsType.spider_web), - + get_trading_post_entry(ItemsType.monster_bone_m), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.honey), get_trading_post_entry(ItemsType.stone), - + get_trading_post_entry(ItemsType.wyvern_fang), get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -232,13 +237,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.mega_harpoon), get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.flashbug), - + get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.stormsender_seed), get_trading_post_entry(ItemsType.exciteshroom), get_trading_post_entry(ItemsType.toadstool), - + get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.rathalos_scale), get_trading_post_entry(ItemsType.barioth_shell), @@ -251,13 +256,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.monster_bone_m), - + get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.honey), get_trading_post_entry(ItemsType.sushifish), get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.blue_mushroom), - + get_trading_post_entry(ItemsType.rathian_scale), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.prize_gold_sword), @@ -270,13 +275,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.icethaw_pellet), - + get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.whetfish), get_trading_post_entry(ItemsType.sushifish), - + get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.dragonfell_berry), get_trading_post_entry(ItemsType.rathalos_scale), @@ -289,13 +294,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.honey), get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.sap_plant), - + get_trading_post_entry(ItemsType.godbug), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.bitterbug), - + get_trading_post_entry(ItemsType.wyvern_fang), get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -308,13 +313,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.sleepyfish), - + get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.nitroshroom), get_trading_post_entry(ItemsType.monster_bone_s), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.wyvern_fang), get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -327,13 +332,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.adamant_seed), - + get_trading_post_entry(ItemsType.monster_bone_s), get_trading_post_entry(ItemsType.might_seed), get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.sap_plant), get_trading_post_entry(ItemsType.herb), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.dragon_toadstool), @@ -346,13 +351,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.adamant_seed), - + get_trading_post_entry(ItemsType.monster_bone_s), get_trading_post_entry(ItemsType.might_seed), get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.sap_plant), get_trading_post_entry(ItemsType.herb), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.dragon_toadstool), @@ -365,13 +370,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.honey), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.godbug), get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.sleep_herb), - + get_trading_post_entry(ItemsType.dragonfell_berry), get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.rathalos_scale), @@ -384,13 +389,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.popfish), - + get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.icethaw_pellet), - + get_trading_post_entry(ItemsType.barroth_shell), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.dragonfell_berry), @@ -403,13 +408,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.mega_harpoon), get_trading_post_entry(ItemsType.flashbug), - + get_trading_post_entry(ItemsType.exciteshroom), get_trading_post_entry(ItemsType.popfish), get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.gobul_hide), get_trading_post_entry(ItemsType.great_jagi_hide), @@ -422,13 +427,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.bone_husk_s), - + get_trading_post_entry(ItemsType.popfish), get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.pin_tuna), get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.spider_web), - + get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.lagiacrus_hide), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -441,13 +446,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.ice_crystal), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.sushifish), - + get_trading_post_entry(ItemsType.pin_tuna), get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.snakebee_larva), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.icethaw_pellet), - + get_trading_post_entry(ItemsType.barroth_shell), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.dragonfell_berry), @@ -460,13 +465,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.exciteshroom), - + get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.nitroshroom), get_trading_post_entry(ItemsType.bomberry), get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.firedouse_berry), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.gobul_hide), get_trading_post_entry(ItemsType.great_jagi_hide), @@ -479,13 +484,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.whetfish), get_trading_post_entry(ItemsType.sushifish), - + get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.sap_plant), get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.firedouse_berry), - + get_trading_post_entry(ItemsType.barroth_shell), get_trading_post_entry(ItemsType.wyvern_claw_), get_trading_post_entry(ItemsType.dragonfell_berry), @@ -498,13 +503,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.sap_plant), get_trading_post_entry(ItemsType.parashroom), get_trading_post_entry(ItemsType.herb), - + get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.pin_tuna), get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.honey), - + get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.screamer), get_trading_post_entry(ItemsType.gobul_hide), @@ -517,13 +522,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.toadstool), - + get_trading_post_entry(ItemsType.sushifish), get_trading_post_entry(ItemsType.might_seed), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.snakebee_larva), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.bomb_arowana), get_trading_post_entry(ItemsType.bone_husk_l), @@ -536,13 +541,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.bomberry), get_trading_post_entry(ItemsType.dung), - + get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.firedouse_berry), get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.popfish), - + get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.screamer), get_trading_post_entry(ItemsType.gobul_hide), @@ -555,13 +560,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.stone), get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.flashbug), - + get_trading_post_entry(ItemsType.mega_harpoon), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.honey), get_trading_post_entry(ItemsType.burst_arowana), get_trading_post_entry(ItemsType.adamant_seed), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.bomb_arowana), get_trading_post_entry(ItemsType.bone_husk_l), @@ -574,13 +579,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.ice_crystal), get_trading_post_entry(ItemsType.flashbug), get_trading_post_entry(ItemsType.yambug), - + get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.firedouse_berry), get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.might_seed), - + get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.lagiacrus_hide), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -593,13 +598,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.monster_bone_s), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.flashbug), - + get_trading_post_entry(ItemsType.firedouse_berry), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.icethaw_pellet), get_trading_post_entry(ItemsType.monster_bone_m), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.bomb_arowana), get_trading_post_entry(ItemsType.bone_husk_l), @@ -612,13 +617,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.fire_herb), get_trading_post_entry(ItemsType.honey), - + get_trading_post_entry(ItemsType.bone_husk_s), get_trading_post_entry(ItemsType.popfish), get_trading_post_entry(ItemsType.dung), get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.ice_crystal), - + get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.lagiacrus_hide), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -631,13 +636,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.yambug), get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.bomberry), - + get_trading_post_entry(ItemsType.popfish), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.bitterbug), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.gobul_hide), get_trading_post_entry(ItemsType.great_jagi_hide), @@ -650,13 +655,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.bitterbug), get_trading_post_entry(ItemsType.herb), get_trading_post_entry(ItemsType.firedouse_berry), - + get_trading_post_entry(ItemsType.mega_harpoon), get_trading_post_entry(ItemsType.sharpened_fang), get_trading_post_entry(ItemsType.toadstool), get_trading_post_entry(ItemsType.bughopper), get_trading_post_entry(ItemsType.bone_husk_s), - + get_trading_post_entry(ItemsType.barioth_shell), get_trading_post_entry(ItemsType.bomb_arowana), get_trading_post_entry(ItemsType.bone_husk_l), @@ -669,13 +674,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.sap_plant), get_trading_post_entry(ItemsType.sleepyfish), get_trading_post_entry(ItemsType.blue_mushroom), - + get_trading_post_entry(ItemsType.godbug), get_trading_post_entry(ItemsType.nitroshroom), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.exciteshroom), get_trading_post_entry(ItemsType.firedouse_berry), - + get_trading_post_entry(ItemsType.wyvern_fang), get_trading_post_entry(ItemsType.prize_gold_sword), get_trading_post_entry(ItemsType.qurupeco_scale), @@ -688,13 +693,13 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.spider_web), get_trading_post_entry(ItemsType.paintberry), get_trading_post_entry(ItemsType.herb), - + get_trading_post_entry(ItemsType.godbug), get_trading_post_entry(ItemsType.ivy), get_trading_post_entry(ItemsType.monster_bone_s), get_trading_post_entry(ItemsType.blue_mushroom), get_trading_post_entry(ItemsType.snakebee_larva), - + get_trading_post_entry(ItemsType.scatterfish), get_trading_post_entry(ItemsType.qurupeco_scale), get_trading_post_entry(ItemsType.dragon_toadstool), @@ -702,7 +707,7 @@ def get_trading_post_entry(entry): get_trading_post_entry(ItemsType.barioth_shell), ], ] - + with open('event/trading_post.json', "w") as outfile: json.dump(trading_post, outfile, indent=4) print("done!") diff --git a/fmp_server.py b/fmp_server.py index 594c035..c179f05 100644 --- a/fmp_server.py +++ b/fmp_server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter FMP server.""" diff --git a/master_server.py b/master_server.py index fefe261..dbe650d 100644 --- a/master_server.py +++ b/master_server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2024 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter master server.""" diff --git a/mh/constants.py b/mh/constants.py index c95c5a7..b3efc77 100644 --- a/mh/constants.py +++ b/mh/constants.py @@ -13,12 +13,13 @@ from res.trading_post import CURRENT_TRADES try: - from collections.abc import Callable + from collections.abc import Callable # noqa: F401 from typing import ParamSpec QuestLoader = ParamSpec("QuestLoader", bound="mh.quest_utils.QuestLoader") except ImportError: pass + def make_binary_type_time_events(binary_loader): return struct.pack(">III", *get_jhen_event_times()) @@ -28,9 +29,11 @@ def make_event_slot(event): def get_event_slot(slot_num, temporal_slot): - return lambda quest_loader, slot_num=slot_num, temporal_slot=temporal_slot: \ + return \ + lambda quest_loader, slot_num=slot_num, temporal_slot=temporal_slot: \ quest_loader[temporal_slot][slot_num] \ - if slot_num < len(quest_loader[temporal_slot]) else b'\0' * 0x4B4 + if slot_num < len(quest_loader[temporal_slot]) \ + else b'\0' * 0x4B4 def make_binary_server_type_list(is_jap=False): @@ -193,7 +196,8 @@ def make_binary_npc_greeters(binary_loader, is_jap=False, temporal_slot=None): material_shop = b"Prices are normal." event_quests = b"" - quest_list, arena_list = binary_loader.get_separated_quest_dicts(temporal_slot) + quest_list, arena_list = \ + binary_loader.get_separated_quest_dicts(temporal_slot) event_quests += b"\n".join([ quest['quest_info']['name'] @@ -281,21 +285,25 @@ def make_binary_trading_post(): def get_binary_loader_assisted_version(binary_loader): - return current_event_time_slot(binary_loader) + 1 + binary_loader.version + return current_event_time_slot(binary_loader) + \ + 1 + binary_loader.version def get_binary_quest_content_from_quest_slot(quest_slot): - return lambda temporal_slot, quest_slot=quest_slot: get_event_slot(quest_slot, temporal_slot) + return lambda temporal_slot, quest_slot=quest_slot: \ + get_event_slot(quest_slot, temporal_slot) def get_binary_loader_assisted_trading_post_version(binary_loader): - return current_trading_post_time_slot(binary_loader) + 1 + binary_loader.trading_post_version + return current_trading_post_time_slot(binary_loader) + \ + 1 + binary_loader.trading_post_version def get_binary_trading_post(temporal_slot): return lambda binary_loader, temporal_slot=temporal_slot: \ binary_loader.get_trading_post_day(temporal_slot) + # Dummy PAT_BINARY PAT_BINARIES = { 0x01: { @@ -307,8 +315,12 @@ def get_binary_trading_post(temporal_slot): "content": make_binary_type_time_events }, 0x03: { - "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, - "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, is_jap=IS_JAP, temporal_slot=temporal_slot) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, is_jap=IS_JAP, + temporal_slot=temporal_slot) }, 0x04: { "version": get_binary_loader_assisted_trading_post_version, @@ -369,8 +381,12 @@ def get_binary_trading_post(temporal_slot): "content": make_binary_type_time_events }, 0x12: { # French - "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, - "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x13: { # French "version": get_binary_loader_assisted_trading_post_version, @@ -429,8 +445,12 @@ def get_binary_trading_post(temporal_slot): "content": make_binary_type_time_events }, 0x21: { # German - "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, - "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x22: { # German "version": get_binary_loader_assisted_trading_post_version, @@ -489,8 +509,12 @@ def get_binary_trading_post(temporal_slot): "content": make_binary_type_time_events }, 0x30: { # Italian - "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, - "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x31: { # Italian "version": get_binary_loader_assisted_trading_post_version, @@ -549,8 +573,12 @@ def get_binary_trading_post(temporal_slot): "content": make_binary_type_time_events }, 0x3f: { # Spanish - "version": lambda binary_loader: current_event_time_slot(binary_loader) + 1, - "content": lambda temporal_slot: lambda binary_loader: make_binary_npc_greeters(binary_loader, temporal_slot=temporal_slot) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x40: { # Spanish "version": get_binary_loader_assisted_trading_post_version, @@ -602,6 +630,7 @@ def get_binary_trading_post(temporal_slot): }, } + def get_pat_binary_from_version(binary_type, version): # type: (int, int) -> bytes|Callable[QuestLoader, bytes] """Helper to retrieve binary data. @@ -612,9 +641,11 @@ def get_pat_binary_from_version(binary_type, version): TODO: Refactor this and the get_binary_* functions. """ - static_binaries = (0x01, 0x02, 0x05, 0x10, 0x11, + static_binaries = ( + 0x01, 0x02, 0x05, 0x10, 0x11, 0x14, 0x1f, 0x20, 0x23, 0x2e, 0x2f, - 0x32, 0x3d, 0x3e, 0x41) + 0x32, 0x3d, 0x3e, 0x41 + ) if binary_type in static_binaries: return PAT_BINARIES[binary_type]["content"] return PAT_BINARIES[binary_type]["content"](version) diff --git a/mh/database.py b/mh/database.py index 8f82deb..ad63058 100644 --- a/mh/database.py +++ b/mh/database.py @@ -242,7 +242,7 @@ def get_capacity(self): def get_state(self): if self.reserved: return LayerState.FULL - + size = self.get_population() if size == 0: return LayerState.EMPTY diff --git a/mh/equipment_utils.py b/mh/equipment_utils.py index 19de8e3..c1b02d5 100644 --- a/mh/equipment_utils.py +++ b/mh/equipment_utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2023-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Equipment utils module.""" @@ -24,7 +24,7 @@ def item_slot(item_id, quantity): def create_arena_equipment_set(sets): arena_equipment_set = b"" for set_num in range(4): - weapon1, weapon2, weapon3, helm, chestpiece, gauntlets,\ + weapon1, weapon2, weapon3, helm, chestpiece, gauntlets, \ faulds, leggings, items, gunner_pouch = sets[set_num] # Weapon arena_equipment_set += slot(*weapon1) diff --git a/mh/pat.py b/mh/pat.py index 56e99a6..6bf7b47 100644 --- a/mh/pat.py +++ b/mh/pat.py @@ -23,9 +23,9 @@ import mh.database as db try: - from typing import Literal, List, Union, Optional # noqa: F401 + from typing import Literal - LayerUserNumUpdate = Literal[1,2,3,4,5] + LayerUserNumUpdate = Literal[1, 2, 3, 4, 5] except ImportError: pass @@ -97,7 +97,7 @@ def broadcast(self, players, packet_id, data, seq, to_exclude=None): def layer_broadcast(self, session, packet_id, data, seq, exclude_self=True): # type: (Session, int, bytes, int, bool) -> None - self.broadcast(session.get_layer_players(), packet_id, data, seq, + self.broadcast(session.get_layer_players(), packet_id, data, seq, session if exclude_self else None) def circle_broadcast(self, circle, packet_id, data, seq, @@ -1109,12 +1109,14 @@ def packNtcLayerUserNum(update_type, layer_data): ID: NtcLayerUserNum JP: レイヤ人数通知 TR: Layer number notification - + UPDATE TYPE: 1 - Update numbers in the current layer - 2 - Update numbers in the current layer plus fire an event (unknown) + 2 - Update numbers in the current layer + plus fire an event (unknown) 3 - Update numbers in an unknown struct in an array - 4 - Update numbers to the current layer's child (child_id=layer_path) + 4 - Update numbers to the current layer's child + (child_id=layer_path) 5 - Update numbers in unk fields in the NetworkLayerPat struct """ @@ -2474,7 +2476,6 @@ def sendAnsLayerCreateHead(self, number, seq): path = self.session.get_layer_path() path.city_id = number self.notify_city_info_set(path) - def recvReqLayerCreateSet(self, packet_id, data, seq): """ReqLayerCreateSet packet. @@ -2505,7 +2506,7 @@ def sendAnsLayerCreateSet(self, number, layer_set, extra, seq): # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() self.notify_city_number_set(path) - + def recvReqLayerCreateFoot(self, packet_id, data, seq): """ReqLayerCreateFoot packet. @@ -2557,7 +2558,7 @@ def sendAnsLayerUp(self, data, seq): @staticmethod def packNtcLayerInfoSet(layer_path, layer_data, optional_fields): - # type: (pati.LayerPath, pati.LayerData, List[int]) -> bytes + # type: (pati.LayerPath, pati.LayerData, list[int]) -> bytes """NtcLayerInfoSet packet. ID: 64201000 @@ -2569,7 +2570,6 @@ def packNtcLayerInfoSet(layer_path, layer_data, optional_fields): data += pati.pack_optional_fields(optional_fields) return data - def recvReqLayerMediationList(self, packet_id, data, seq): """ReqLayerMediationList packet. @@ -2743,9 +2743,9 @@ def notify_city_info_set(self, path): layer_data = pati.LayerData.create_from(path.city_id, city, path) info_set = self.packNtcLayerInfoSet(path, layer_data, city.optional_fields) - self.server.broadcast(gate.players, PatID4.NtcLayerInfoSet, info_set, 0, - self.session) - + self.server.broadcast(gate.players, PatID4.NtcLayerInfoSet, + info_set, 0, self.session) + def notify_city_number_set(self, path): # type: (pati.LayerPath) -> None city = self.get_layer(path) @@ -2754,15 +2754,16 @@ def notify_city_number_set(self, path): gate = city.parent layer_data = pati.LayerData.create_from(path.city_id, city, path) number_set = self.packNtcLayerUserNum(4, layer_data) - self.server.broadcast(gate.players, PatID4.NtcLayerUserNum, number_set, 0, - self.session) - + self.server.broadcast(gate.players, PatID4.NtcLayerUserNum, + number_set, 0, self.session) + @staticmethod def get_layer(path): - # type: (pati.LayerPath) -> Optional[db.Server | db.Gate | db.City] + # type: (pati.LayerPath) -> db.Server | db.Gate | db.City | None database = db.get_instance() if path.city_id > 0: - return database.get_city(path.server_id, path.gate_id, path.city_id) + return database.get_city(path.server_id, path.gate_id, + path.city_id) elif path.gate_id > 0: return database.get_gate(path.server_id, path.gate_id) elif path.server_id > 0: @@ -2798,7 +2799,6 @@ def notify_layer_departure(self, end): if city.leader is None: self.notify_city_info_set(path) - def notify_circle_leave(self, circle_index, seq): circle = self.session.get_circle() with circle.lock(): diff --git a/mh/pat_item.py b/mh/pat_item.py index cf73805..c1676d4 100644 --- a/mh/pat_item.py +++ b/mh/pat_item.py @@ -587,6 +587,7 @@ class UserSearchInfo(PatData): (0x10, "info_mine_0x10"), ) + class LayerPath(object): STRUCT = struct.Struct(">IIHHH") @@ -595,7 +596,7 @@ def __init__(self, server_id=None, gate_id=None, city_id=None): self.server_id = server_id or 0 self.gate_id = gate_id or 0 self.city_id = city_id or 0 - + def get_depth(self): # type: () -> int if self.city_id > 0: @@ -611,8 +612,8 @@ def pack(self): depth = self.get_depth() unk = 1 return self.STRUCT.pack(depth, self.server_id, unk, self.gate_id, - self.city_id) - + self.city_id) + @staticmethod def unpack(data): # type: (bytes) -> LayerPath @@ -624,7 +625,7 @@ def unpack(data): gate_id = 0 city_id = 0 for i in range(field_count): - if i == 0: + if i == 0: _ = unpacker.struct(">H") elif i == 1: gate_id = unpacker.struct(">H") @@ -648,7 +649,7 @@ class LayerData(PatData): (0x0c, "unk_long_0x0c"), (0x0d, "unk_word_0x0d"), (0x10, "state"), # 0 = Joinable / 1 = Empty / 2 = Full - (0x11, "positionInterval"), # player position synchronization timer + (0x11, "positionInterval"), # player position synchronization timer (0x12, "unk_byte_0x12"), (0x15, "layer_depth"), (0x16, "layer_pathname"), @@ -689,7 +690,7 @@ def create_from(index, layer, path=None): data.size2 = Long(layer.get_population()) data.capacity = Long(layer.get_capacity()) data.child_population = Long(layer.in_quest_players()) - data.unk_long_0x0c = Long(0xc) # TODO: Reverse + data.unk_long_0x0c = Long(0xc) # TODO: Reverse data.state = Byte(layer.get_state()) data.layer_depth = Byte(layer.LAYER_DEPTH) data.layer_pathname = String(layer.get_pathname()) diff --git a/mh/quest_utils.py b/mh/quest_utils.py index b9985a7..06ed192 100644 --- a/mh/quest_utils.py +++ b/mh/quest_utils.py @@ -16,7 +16,7 @@ except NameError: # Python 3 basestring = str - from typing import Any + from typing import Any # noqa: F401 class WaveType: @@ -913,8 +913,8 @@ class QuestRestrictionType: RESTRICTION_46_JOIN = 26 -def make_monster_quest_type(monster_type, starting_area, boss_id, spawn_count, level, - min, size, max): +def make_monster_quest_type(monster_type, starting_area, boss_id, spawn_count, + level, min, size, max): data = b"" # - id: monster_type # type: u1 @@ -1269,7 +1269,7 @@ def make_binary_event_quest(quest_data): # - id: flags # type: u4 # offset: 0x0310 - data += struct.pack(">I", generate_flags(*(quest_info['flags']))) # Offset 0x310 + data += struct.pack(">I", generate_flags(*(quest_info['flags']))) # - id: monsters # type: monster_quest_type @@ -1558,7 +1558,6 @@ def make_binary_event_quest(quest_data): # offset: 0x038E data += struct.pack(">h", quest_info['wave_2_transition_quantity']) - # Unknown 12 (0x00000002 for large monster hunting quests, # 0x00000003 for small monster & gathering quests, # 0x00000005 for Jhen & Alatreon) @@ -1652,7 +1651,8 @@ def make_binary_event_quest(quest_data): assert len(small_monsters) % location_size == 0 num_waves = int(len(small_monsters) / location_size) assert num_waves <= 3 - # Pre-preamble: Establishing the locations of each of the waves' preambles + # Pre-preamble: + # Establishing the locations of each of the waves' preambles sm_data += struct.pack('>I', 0x0000000C) sm_data += struct.pack('>I', 0x0000000C + 8*location_size) if num_waves < 3: @@ -1661,8 +1661,9 @@ def make_binary_event_quest(quest_data): sm_data += struct.pack('>I', 0x0000000C + 2*8*location_size) monster_data = b"" - # Preamble: Establishing the location and length of each of the - # small monster areas + # Preamble: + # Establishing the location and length of each of the small monster + # areas current_sm_index = 0x0C + 8*len(small_monsters) for entry, monster_list in enumerate(quest_data['small_monsters']): sm_data += struct.pack(">I", current_sm_index) @@ -1672,7 +1673,7 @@ def make_binary_event_quest(quest_data): assert monster['room'] == area new_monster_data = b"" new_monster_data += struct.pack(">I", monster['type']) - new_monster_data += 3* b"\0" + new_monster_data += 3 * b"\0" new_monster_data += struct.pack(">b", monster['quantity']) new_monster_data += struct.pack(">B", monster['unk2']) new_monster_data += struct.pack(">B", monster['room']) @@ -1682,13 +1683,19 @@ def make_binary_event_quest(quest_data): new_monster_data += struct.pack(">f", monster['pos_x']) new_monster_data += struct.pack(">f", monster['pos_y']) new_monster_data += struct.pack(">f", monster['pos_z']) - new_monster_data += struct.pack('>i', int(180.05 * monster['rot_x'])) - new_monster_data += struct.pack('>i', int(180.05 * monster['rot_y'])) - new_monster_data += struct.pack('>i', int(180.05 * monster['rot_z'])) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_x']) + ) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_y']) + ) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_z']) + ) new_monster_data += struct.pack('>I', 0xFF000000) new_monster_data += struct.pack('>I', 0x00000000) assert len(new_monster_data) == 0x30 - + area_monster_data += new_monster_data area_monster_data += 0x30 * b'\0' sm_data += struct.pack(">I", len(area_monster_data)) @@ -1827,8 +1834,10 @@ def load_trading_post(self): with open('event/trading_post.json', 'r') as f: trading_post_json = byteify(json.load(f)) self.prev_trading_post_json = trading_post_json + def slot(item, qty): return struct.pack(">HH", item, qty) + for day in trading_post_json: day_encoded = b"" for entry in day: @@ -1968,5 +1977,3 @@ def __getitem__(self, idx): # Get quests for the day true_idx = idx - self.version - 1 return [quest[0] for _, quest in enumerate(self.quests[true_idx])] - - diff --git a/mh/server.py b/mh/server.py index 4af023a..8ba056d 100644 --- a/mh/server.py +++ b/mh/server.py @@ -24,15 +24,9 @@ import externals.selectors2 as selectors -try: - from typing import List, Tuple # noqa: F401 -except ImportError: - pass - - class BasicPatHandler(object): def __init__(self, socket, client_address, server): - # type: (socket.socket, Tuple[str, int], BasicPatServer) -> None + # type: (socket.socket, tuple[str, int], BasicPatServer) -> None self.socket = socket self.client_address = client_address self.server = server @@ -147,7 +141,7 @@ class BasicPatServer(object): def __init__(self, server_address, RequestHandlerClass, max_threads, bind_and_activate=True, ssl_cert=None, ssl_key=None): - # type: (Tuple[str, int], BasicPatHandler, int, bool, str|None, str|None) -> None + # type: (tuple[str, int], BasicPatHandler, int, bool, str|None, str|None) -> None # noqa: E501 """Constructor. May be extended, do not override.""" self.server_address = server_address self.RequestHandlerClass = RequestHandlerClass @@ -156,8 +150,8 @@ def __init__(self, server_address, RequestHandlerClass, max_threads, self.__shutdown_request = False self.socket = socket.socket(self.address_family, self.socket_type) self._random = random.SystemRandom() # type: random.SystemRandom - self.handlers = [] # type: List[BasicPatHandler] - self.worker_threads = [] # type: List[threading.Thread] + self.handlers = [] # type: list[BasicPatHandler] + self.worker_threads = [] # type: list[threading.Thread] self.worker_queues = [] # type: list[queue.queue] self.selector = selectors.DefaultSelector() self.max_threads = max_threads or multiprocessing.cpu_count() @@ -239,7 +233,7 @@ def serve_forever(self): selected.on_exception(e) if selected.is_finished(): self.remove_handler(selected) - except: + except Exception: self.error(traceback.format_exc()) if write_watch.elapsed() >= write_timeout: @@ -252,11 +246,11 @@ def serve_forever(self): if handler.is_finished(): self.remove_handler(handler) - except: + except Exception: self.error(traceback.format_exc()) finally: write_watch.restart() - except: + except Exception: self.error(traceback.format_exc()) finally: self.__is_shut_down.set() @@ -286,7 +280,7 @@ def _worker_target(self, work_queue): if handler.is_finished(): self.remove_handler(handler) - except: + except Exception: self.error(traceback.format_exc()) def accept_new_connection(self): diff --git a/mh/session.py b/mh/session.py index 377c5fa..698c342 100644 --- a/mh/session.py +++ b/mh/session.py @@ -369,7 +369,8 @@ def get_layer_players(self): return self.get_layer().players def get_layer_path(self): - return pati.LayerPath(self.local_info['server_id'], self.local_info['gate_id'], + return pati.LayerPath(self.local_info['server_id'], + self.local_info['gate_id'], self.local_info['city_id']) def get_layer_host_data(self): diff --git a/opn_server.py b/opn_server.py index bfee869..11bea89 100644 --- a/opn_server.py +++ b/opn_server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter OPN server.""" @@ -30,15 +30,13 @@ def recvAnsMemoryCheck(self, packet_id, data, seq): JP: メモリ内容送信 TR: Memory content transmission """ - # unk = pati.MemoryData.unpack(data) - # with pati.Unpacker(data, offset=len(unk.pack())) as unpacker: with pati.Unpacker(data) as unpacker: - unk = unpacker.MemoryData() + unk = unpacker.MemoryData() # noqa: F841 address, = unpacker.struct(">I") data = unpacker.lp2_string() if address == 0x80000000: - self.game_id = to_str(data) # type: ignore + self.game_id = to_str(data) # type: ignore if self.game_id == 'RMHE08': self.sendReqMemoryCheck(0x806308e8, 56) elif self.game_id == 'RMHP08': diff --git a/res/trading_post.py b/res/trading_post.py index bd3ca17..045fa71 100644 --- a/res/trading_post.py +++ b/res/trading_post.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Trading post resources module.