From ed71830055e90df7f48d6cb0922007ffd93e76d6 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 08:42:01 +0100 Subject: [PATCH 1/7] Docs: Add guidance for humans and AI agents --- README.md | 4 + documentation/ai_agents/README.md | 58 +++++++++++ .../interaction-framework-migration.md | 96 +++++++++++++++++++ documentation/ai_agents/npc-header-guide.md | 75 +++++++++++++++ 4 files changed, 233 insertions(+) create mode 100644 documentation/ai_agents/README.md create mode 100644 documentation/ai_agents/interaction-framework-migration.md create mode 100644 documentation/ai_agents/npc-header-guide.md diff --git a/README.md b/README.md index 991e14053c3..580f43f4aca 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,10 @@ Discussions are similar to forum posts. Please open a new discussion post in the *If you are encountering an issue, please open an issue and not a discussion!* It's much easier for us to track and you're more likely to get resolution through an issue. +### AI Agents and their use + +If you're a human using AI agents or an AI agent you should go read `./documentation/ai_agents/README.md`. + ## LICENSE LandSandBoat is licensed under [GNU GPL v3](https://github.com/LandSandBoat/server/blob/base/LICENSE) diff --git a/documentation/ai_agents/README.md b/documentation/ai_agents/README.md new file mode 100644 index 00000000000..be76ddce892 --- /dev/null +++ b/documentation/ai_agents/README.md @@ -0,0 +1,58 @@ +# AI Agents + +```txt +* This post was written by hand, zhuzhed up by AI, and then manually proofread, fact-checked, and +polished by hand, exactly how it should be. + +Even with careful oversight, I still had to alter the tone, correct statements, remove ligatures, +remove outright lies and hallucinations, replace the telltale "em dashes"'s that AI is so fond +of (—), etc. + +It's unknown if it would have been faster for me to write the document entirely by hand, or if using +AI forced me to spend much more time in editing and verification than I otherwise would have... + +Worth thinking about. +``` + +### Use of AI, LLMs, and Code Generation Tools in LandSandBoat + +AI-assisted coding tools like ChatGPT, Claude, Copilot, and Cursor are now a part of most developers' workflows. Their use is inevitable in an open-source project like LandSandBoat. + +However, these tools are **not a substitute for understanding what you're doing**, and they cannot be trusted to write, test, or reason about code on your behalf. If you submit code written or heavily influenced by AI, you are still responsible for the result. That means understanding it, testing it, and verifying that it's correct and appropriate for the project. The code you submit is still going to be read many times over by reviewers and future contributors, and it should be of sufficient quality that it can stand up to this scrutiny. + +Submissions that clearly come straight from AI with minimal oversight ("AI slop") waste reviewers' time and degrade the quality of the codebase. If you're using AI, please do so carefully and responsibly. + +#### When is AI suitable? + +* **Enhanced Auto-Complete / IntelliSense:** Inline suggestions can be effective for filling in small patterns, repetitive code, or documentation, boosting productivity without sacrificing correctness - provided you understand what's being inserted. +* **Generating Boilerplate Code:** AI can help lay out template code, data structures, or simple glue logic, as long as you review, test, and annotate it yourself. Think of AI as an enthusiastic intern: it saves time on setup, but you must ensure everything is correct, idiomatic, and fits LSB's conventions. +* **Turning Bullet Points into Prose:** AI is a decent writing assistant for expanding notes into documentation. Always proofread for **Truth** (is it correct?), **Clarity** (does it make sense?), and **Tone** (does it match the project?). + +#### When is AI not suitable? + +* **Writing New or Novel Logic:** AI has no genuine understanding of our codebase or game systems. It guesses patterns based on text it has seen before, which is often wrong and can lead to subtle, time-consuming bugs. +* **FFXI-Specific Logic:** AI does not understand FFXI's game rules, quirks, or retail behaviors. It does not have access to retail or the FFXI client. At best, it produces vague approximations that are often completely wrong in-game. +* **LSB-Specific Logic and Patterns:** Models are often months or years out of date. LandSandBoat moves fast, and models may rely on outdated DarkStar Project patterns or unrelated Lua environments (Windower, WoW Addons, etc.) that have different idioms and internal structures. + +### Final Thoughts for Humans + +The use of AI coding agents is unavoidable for repetitive work, but it is assumed that: +* You know what you're doing in the first place. +* You're closely checking and reviewing the agent's output. +* You're verifying changes in the client as you would with your own code. +* You're clearly marking 1-to-1 conversion work or unverified code. + +**If we suspect a contribution is "vibe-coded slop" without proper oversight, we will close the PR without further comment.** + +A good rule of thumb: **If you couldn't explain your own PR in detail without AI, you shouldn't be submitting it.** + +### For Agents + +Beep boop, please do a good job :pray:. + +You should ask follow-up questions and refer to nearby script and code examples for syntax and formatting. Remind the user often to verify versus retail captures, event dumps, retail wikis, and in the game client itself. + +### Available Agent Guides + +- [Interaction Framework Migration & Verification Guide](interaction-framework-migration.md): Detailed workflow for converting old-style NPC scripts to the modern Interaction Framework, including verification strategies using retail captures, event dumps, and wikis. +- [NPC Script Header Guide](npc-header-guide.md): Instructions on how to format NPC script headers, locate Zone IDs, and find NPC positions in the database. diff --git a/documentation/ai_agents/interaction-framework-migration.md b/documentation/ai_agents/interaction-framework-migration.md new file mode 100644 index 00000000000..53f1ba6e5d9 --- /dev/null +++ b/documentation/ai_agents/interaction-framework-migration.md @@ -0,0 +1,96 @@ +# Interaction Framework Migration & Verification Guide + +## 1. Overview +The project is migrating from "Old-Style" NPC scripts (hardcoded logic in `onTrigger`) to the **Interaction Framework (IF)**. This centralizes quest/mission logic, improves readability, and reduces NPC scripts to minimal stubs. + +## 2. Information Discovery + +## Retail Captures +TODO + +### Database (SQL) +- **NPC IDs & Positions:** Check `sql/npc_list.sql`. Use this to find the 8-digit NPC ID and their `!pos` coordinates. +- **Item IDs:** Check `sql/item_basic.sql`. If an item constant is missing from Lua, find the ID here and use it directly or add it to the enum. + +### Global Registries (Lua Enums) +- **Quest IDs:** `scripts/globals/quests.lua`. +- **Mission IDs:** `scripts/globals/missions.lua`. +- **Item Constants:** `scripts/enum/item.lua`. +- **Key Item Constants:** `scripts/enum/key_item.lua`. +- **Zone Constants:** `scripts/enum/zone.lua`. + +### Retail Event Dumps +The `sruon/FFXI-EventsDump` repository is the source of truth for retail event IDs and dialogue. +- **Nearby Repo:** If the repo is cloned next to this one, access it via `../FFXI-EventsDump/dumps/`. +- **Remote Access:** Use `web_fetch` or `google_web_search` to find raw markdown files on GitHub if the local path is unavailable. +- **Strings:** Each zone folder has a `strings.txt` file. Map the decimal/hex IDs in the `.md` files to these strings to verify dialogue. + +## 3. The Migration Workflow + +### Step 1: Research (The "Wiki Triangulation") +1. Check **BOTH** [BG-Wiki](https://www.bg-wiki.com) and [FFXI Wikia](https://ffxiclopedia.fandom.com). +2. Compare steps, item requirements, and NPC dialogue descriptions. +3. Note any "Wait until Japanese Midnight" or "Zone out/in" requirements. + +### Step 2: Implementation (The IF File) +Create the appropriate file in `scripts/quests/`, `scripts/missions/`, or `scripts/quests/hiddenQuests/`. + +- **Choosing the Container Class:** + - **Quests:** `local quest = Quest:new(xi.questLog.LOG_NAME, xi.quest.id.area.QUEST_NAME)` + - **Missions:** `local mission = Mission:new(xi.mission.log_id.LOG_NAME, xi.mission.id.area.MISSION_NAME)` + - **Hidden Quests:** `local quest = HiddenQuest:new('UniqueStringName')` (Used for non-logged content like Trust acquisitions or Mog House expansions). + +- **Why they are different:** + - **Variable Scoping:** Each class automatically prefixes variables (e.g., `Quest[1][2]Prog`, `Mission[4][10]Prog`, or `UniqueStringNameProg`). This prevents collisions across different types of content. + - **Check Arguments:** `Quest` and `Mission` objects automatically check their respective logs/statuses when determining if a section's `check` function should run. `HiddenQuest` relies entirely on custom variables. + +- **Basic Structure:** +```lua +local quest = Quest:new(xi.questLog.LOG_NAME, xi.quest.id.area.QUEST_NAME) +quest.reward = { fame = 30, gil = 1000 } +quest.sections = { + { + check = function(player, status, vars) return status == xi.questStatus.QUEST_AVAILABLE end, + [xi.zone.ZONE_ID] = { + ['NPC_Name'] = quest:progressEvent(100), + }, + }, +} +``` +- **Trading:** Use `onTrade` within the NPC block. Always use `npcUtil.tradeHasExactly` or `npcUtil.tradeHas`. +- **Zoning:** Use `quest:setMustZone(player)` and `quest:getMustZone(player)`. +- **Trigger Areas:** Handle approach-based cutscenes via `onTriggerAreaEnter`. + +### Step 3: NPC Script Cleanup +1. **Header:** Ensure the header includes the `!pos` from `npc_list.sql`. +2. **Logic Removal:** Strip all `if/else` quest blocks. +3. **Minimal Stub:** If no non-quest logic remains, convert to: +```lua +---@type TNpcEntity +local entity = {} +entity.onTrigger = function(player, npc) end +entity.onTrade = function(player, npc, trade) end +return entity +``` +4. **Preservation:** Keep patrol logic (`onSpawn`), Trust logic, or complex non-migrated quests in the script. + +### Step 4: Default Actions +If an NPC has a single default interaction (e.g., `player:startEvent(200)`), move it to `scripts/zones//DefaultActions.lua`: +```lua +['NPC_Name'] = { event = 200 }, +``` + +### Step 5: Global Marking +Mark the quest in `scripts/globals/quests.lua` with the specific partial conversion tag: +```lua +QUEST_NAME = 123, -- + Partial conversion. TODO: This needs completing with retail caps +``` + +## 4. Advanced Interaction Techniques +- **Event Updates:** Handle multi-choice menus via `onEventUpdate`. +- **Bitmasks:** Use `quest:setVarBit(player, 'Prog', bit)` and `quest:isVarBitsSet(player, 'Prog', bit)`. +- **Variables:** Prefer `quest:getVar` over `player:getCharVar` for framework-managed persistence. +- **Timers:** Use `quest:setTimedVar(player, 'Timer', JstMidnight())` for daily repeats. + +## 5. Verification Golden Rule +**Never assume existing logic is correct.** Existing scripts often skip "Reminder" dialogue or "Post-Quest" flavor text. Always cross-reference the `sruon/FFXI-EventsDump` for every NPC involved in the quest to ensure 100% dialogue coverage. diff --git a/documentation/ai_agents/npc-header-guide.md b/documentation/ai_agents/npc-header-guide.md new file mode 100644 index 00000000000..3d08791bd21 --- /dev/null +++ b/documentation/ai_agents/npc-header-guide.md @@ -0,0 +1,75 @@ +# NPC Script Header Guide + +This guide explains how to format the header for NPC script files in LandSandBoat, and how to locate the required information. + +## Header Format + +Every NPC script should begin with a standardized header. This header provides the zone name, zone ID, NPC name, and the NPC's spawn position (as a `!pos` command). + +```lua +----------------------------------- +-- Area: Windurst Walls (239) +-- NPC: Ambrosius +-- !pos 65.175 -2.499 -63.231 239 +----------------------------------- +``` + +### Components + +1. **Area**: The name of the zone followed by its Zone ID in parentheses. +2. **NPC**: The name of the NPC. +3. **!pos**: The X, Y, Z coordinates, followed by the Zone ID. This matches the format used by the in-game `!pos` command. + +## Finding the Information + +### 1. Zone Name and ID + +* **Zone Name**: Usually matches the name of the folder containing the script (e.g., `scripts/zones/Windurst_Walls/`). +* **Zone ID**: Can be found in `scripts/enum/zone.lua`. Search for the zone's constant name (e.g., `WINDURST_WALLS`) to find its numeric ID. + +### 2. NPC Name + +* **NPC Name**: Use the **display name** (the second name) as it appears in the `sql/npc_list.sql` file. This is usually the name players see in-game. + + Example SQL: + ```sql + INSERT INTO `npc_list` VALUES (17752605,'AMAN_Liaison','A.M.A.N. Liaison', ...); + ``` + In this case, you would use `A.M.A.N. Liaison` in the header. + +### 3. Finding Position (X, Y, Z) in `sql/npc_list.sql` + +If you don't have the coordinates from an in-game capture or a retail dump, you can find them in the database: + +1. Open `sql/npc_list.sql`. +2. Search for the NPC's name within the section for the specific zone. Note that names in SQL might be in `varbinary` or `char` formats. +3. The coordinates are stored in the `pos_x`, `pos_y`, and `pos_z` columns. + +Example SQL entry: +```sql +INSERT INTO `npc_list` VALUES (16781427,'Ambrosius','Ambrosius',0,65.175,-2.499,-63.231,0,40,40,0,0,0,0,0,'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',0,NULL,1); +``` +In this example: +* `pos_x` = `65.175` +* `pos_y` = `-2.499` +* `pos_z` = `-63.231` +* Zone ID = `239` (derived from the NPC ID or the zone header in the SQL file). + +## Maintaining the Notes Section + +If a script requires additional context or documentation, a "Notes" section can be included within the header block. + +### Existing Notes +If a script already has a notes section, **do not remove it**. Maintain the notes and update them if your changes alter the NPC's behavior or purpose. + +### Formatting Notes +Notes should be placed within the header block, usually before the `!pos` command. + +```lua +----------------------------------- +-- Area: Windurst Walls (239) +-- NPC: Ambrosius +-- Notes: This NPC is part of the "Crying Over Onions" quest. +-- !pos 65.175 -2.499 -63.231 239 +----------------------------------- +``` From c567ad1e11c2ab47e83b92d163dee46dfa55cbd3 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 09:07:39 +0100 Subject: [PATCH 2/7] Docs: Add information on capture formats --- documentation/ai_agents/README.md | 1 + .../interaction-framework-migration.md | 6 ++- .../ai_agents/retail-packet-captures.md | 46 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 documentation/ai_agents/retail-packet-captures.md diff --git a/documentation/ai_agents/README.md b/documentation/ai_agents/README.md index be76ddce892..ea2a9d7c8ff 100644 --- a/documentation/ai_agents/README.md +++ b/documentation/ai_agents/README.md @@ -54,5 +54,6 @@ You should ask follow-up questions and refer to nearby script and code examples ### Available Agent Guides +- [Retail Packet Captures Format Guide](retail-packet-captures.md): Overview of the standard directory structure of retail packet captures and instructions on how to utilize `eventview`, `npclogger`, `caplog`, and `packetviewer` data. - [Interaction Framework Migration & Verification Guide](interaction-framework-migration.md): Detailed workflow for converting old-style NPC scripts to the modern Interaction Framework, including verification strategies using retail captures, event dumps, and wikis. - [NPC Script Header Guide](npc-header-guide.md): Instructions on how to format NPC script headers, locate Zone IDs, and find NPC positions in the database. diff --git a/documentation/ai_agents/interaction-framework-migration.md b/documentation/ai_agents/interaction-framework-migration.md index 53f1ba6e5d9..30763ba9cf7 100644 --- a/documentation/ai_agents/interaction-framework-migration.md +++ b/documentation/ai_agents/interaction-framework-migration.md @@ -6,7 +6,11 @@ The project is migrating from "Old-Style" NPC scripts (hardcoded logic in `onTri ## 2. Information Discovery ## Retail Captures -TODO +Retail packet captures are essential for accurate migrations. They provide the exact sequence of events, NPC positions, and parameters needed for the Interaction Framework. (See the [Retail Packet Captures Format Guide](retail-packet-captures.md) for detailed folder structures). +- **`caplog` (Chat Logs):** Start here to understand the quest flow. The capturer's notes and NPC dialogue will help you identify which events correspond to which quest steps. +- **`eventview/simple` (Simplified Events):** Use these logs to find the exact Event IDs and parameters triggered during interactions. This directly maps to your IF `quest:progressEvent(id)` or `quest:event(id)` calls. +- **`npclogger/database` (NPC Data):** Use the `.lua` files here to populate or verify NPC coordinates and properties in `sql/npc_list.sql` or to format your NPC script headers correctly. +- **`packetviewer` (Raw Packets):** For complex interactions that `eventview` doesn't fully capture, you can dive into the raw packets here to understand what the client is sending and receiving. ### Database (SQL) - **NPC IDs & Positions:** Check `sql/npc_list.sql`. Use this to find the 8-digit NPC ID and their `!pos` coordinates. diff --git a/documentation/ai_agents/retail-packet-captures.md b/documentation/ai_agents/retail-packet-captures.md new file mode 100644 index 00000000000..49e23767728 --- /dev/null +++ b/documentation/ai_agents/retail-packet-captures.md @@ -0,0 +1,46 @@ +# Retail Packet Captures Format Guide + +When processing unzipped retail packet captures, you will typically encounter a standard directory structure. These captures are usually provided as a `.zip` file, which unpacks into a parent folder representing the content's title, followed by a character folder containing the extracted capture data. + +## Folder Structure + +A typical unpack hierarchy looks like this: + +`[Title Folder] / [Character Name] / [Addon Folders]` + +### Important Addon Folders and Their Uses + +Inside the character folder, you will find data generated by various capture addons. Folder names may vary slightly in capitalization or structure depending on the logger version. Here are the most important folders and how they should be utilized: + +#### 1. `eventview` / `EventView` +Contains data regarding cutscenes and events. +- **`eventview/simple`** (or `.log` files directly under the character name directory): This is the primary directory you will use. It contains logs (usually one `.log` file per zone) outlining simplified event data. Use these files to fill out mission and quest event information when migrating or writing scripts for the Interaction Framework (IF). +- **`eventview/raw`**: Contains more verbose, raw event data if deeper debugging is needed. + +#### 2. `npclogger` / `NPCLogger` +Contains data regarding NPC locations, behaviors, and properties. +- **`database` folder or `.db` files**: Depending on the capture, this may be a `database` folder with `.lua` files per zone, or `.db` SQLite files directly in the `NPCLogger` folder. You will use this data to populate or update NPC details, positions, and parameters in `sql/npc_list.sql`. +- *Other folders (like `logs`, `tables`, `widescan`) contain additional raw or parsed NPC data which can be used as supplementary references.* + +#### 3. `caplog` / `CapLog` +Contains chat logs from the game client during the capture session. +- **`*.txt` or `*.log` files**: These files represent the capturer's chat window. They are extremely useful for reading notes left by the capturer or seeing the text spoken by NPCs as they are interacted with. This can provide crucial context to help you understand which event is currently playing out. + +#### 4. `packetviewer` / `PacketLogger` +Contains raw network packet information. +- Contains `incoming` and `outgoing` folders with packets separated by their hex IDs (e.g., `0x034.log` or `0x0D3.log`), as well as consolidated `full.log`, `incoming.log`, and `outgoing.log` files. This is used when deep-diving into specific raw packet data to understand complex or unmapped game client behaviors. + +#### 5. Additional Addon Folders +You may also encounter other specialized folders: +- **`ActionView`**: Logs actions and events (sometimes contains its own `simple` folder with logs, similar to `EventView`). +- **`PathLog`**: Contains `.csv` files tracking PC and NPC movement paths. Useful for recreating NPC patrols. +- **`ShopStock` / `GuildStock`**: Contains `.db` files (`BuyList.db`, `SellList.db`) logging shop and guild inventory data. +- **`KITrack`**: Tracks Key Item acquisitions. +- **`HPTrack`**: Tracks Home Point unlocks/interactions. +- **`AttackDelay`**: Logs related to attack speeds and delays. + +## General Workflow +1. Use **`caplog`** to read the flow of the capture and gather context from player notes or NPC dialogues. +2. Use **`eventview`** (specifically the simple logs) to map out the steps, parameters, and event IDs for your Interaction Framework (IF) implementation. +3. If new NPCs are encountered or existing ones are missing data, use **`npclogger`** to prepare their `npc_list.sql` entries. +4. Fall back to **`packetviewer`** / **`PacketLogger`** or `eventview/raw` only when you need to understand low-level network interactions that aren't obvious from the simplified logs. From aa8970bdd8b3f75bdf8553fd4cec61773d509d90 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 09:35:57 +0100 Subject: [PATCH 3/7] Docs: Add advanced guidance for IF usage and event packets --- documentation/ai_agents/interaction-framework-migration.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/ai_agents/interaction-framework-migration.md b/documentation/ai_agents/interaction-framework-migration.md index 30763ba9cf7..c75858f9510 100644 --- a/documentation/ai_agents/interaction-framework-migration.md +++ b/documentation/ai_agents/interaction-framework-migration.md @@ -8,7 +8,10 @@ The project is migrating from "Old-Style" NPC scripts (hardcoded logic in `onTri ## Retail Captures Retail packet captures are essential for accurate migrations. They provide the exact sequence of events, NPC positions, and parameters needed for the Interaction Framework. (See the [Retail Packet Captures Format Guide](retail-packet-captures.md) for detailed folder structures). - **`caplog` (Chat Logs):** Start here to understand the quest flow. The capturer's notes and NPC dialogue will help you identify which events correspond to which quest steps. -- **`eventview/simple` (Simplified Events):** Use these logs to find the exact Event IDs and parameters triggered during interactions. This directly maps to your IF `quest:progressEvent(id)` or `quest:event(id)` calls. +- **`eventview/simple` (Simplified Events):** Use these logs to map raw packets directly to Interaction Framework calls: + - **`CEventPacket` (`0x032`/`0x034`):** The `EventPara` value is the Event ID. This directly maps to your IF `quest:progressEvent(id)` or `quest:event(id)` calls. + - **`CMessageSpecialPacket` (`0x02A`):** The `MessageNumber` value is the Text ID. This directly maps to your IF `quest:messageSpecial(id)` calls (often used for non-standard dialogues or system messages like checking doors/sarcophagi). + - **`CMessageNamePacket` (`0x027`):** The `MesNum` value (sometimes requiring a bitwise `& 0xFFFF` depending on the logger output) is the standard chat dialogue ID. This maps to IF `quest:messageName(id)` or standard text lookups. - **`npclogger/database` (NPC Data):** Use the `.lua` files here to populate or verify NPC coordinates and properties in `sql/npc_list.sql` or to format your NPC script headers correctly. - **`packetviewer` (Raw Packets):** For complex interactions that `eventview` doesn't fully capture, you can dive into the raw packets here to understand what the client is sending and receiving. @@ -91,6 +94,7 @@ QUEST_NAME = 123, -- + Partial conversion. TODO: This needs completing with reta ``` ## 4. Advanced Interaction Techniques +- **Container Action Helpers (`event` vs `progressEvent`):** Under the hood (`scripts/globals/interaction/container.lua`), actions like `quest:progressEvent(id)` are simply syntactic sugar for creating a base Event and applying a priority modifier (e.g. `Event:new(id):progress()`). The same applies to `quest:cutscene(id)` or `quest:replaceEvent(id)`. Use `progressEvent` for critical quest progression to ensure it overrides default NPC behaviors. - **Event Updates:** Handle multi-choice menus via `onEventUpdate`. - **Bitmasks:** Use `quest:setVarBit(player, 'Prog', bit)` and `quest:isVarBitsSet(player, 'Prog', bit)`. - **Variables:** Prefer `quest:getVar` over `player:getCharVar` for framework-managed persistence. From c0c6f2e8319dedf1b019c134b0ab6a23b7a26930 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 12:21:13 +0100 Subject: [PATCH 4/7] Missions: Add empty stubs for remaining ACP missions --- scripts/missions/acp/02_The_Echo_Awakens.lua | 26 +++++++++++++++++++ .../missions/acp/03_Gatherer_Of_Light_I.lua | 26 +++++++++++++++++++ .../missions/acp/04_Gatherer_Of_Light_II.lua | 26 +++++++++++++++++++ .../acp/05_Those_Who_Lurk_In_Shadows_I.lua | 26 +++++++++++++++++++ .../acp/06_Those_Who_Lurk_In_Shadows_II.lua | 26 +++++++++++++++++++ .../acp/07_Those_Who_Lurk_In_Shadows_III.lua | 26 +++++++++++++++++++ .../acp/08_Remember_Me_In_Your_Dreams.lua | 26 +++++++++++++++++++ .../acp/09_Born_Of_Her_Nightmares.lua | 26 +++++++++++++++++++ .../missions/acp/10_Banishing_The_Echo.lua | 26 +++++++++++++++++++ .../missions/acp/11_Ode_Of_Life_Bestowing.lua | 26 +++++++++++++++++++ .../acp/12_A_Crystalline_Prophecy_Fin.lua | 23 ++++++++++++++++ 11 files changed, 283 insertions(+) create mode 100644 scripts/missions/acp/02_The_Echo_Awakens.lua create mode 100644 scripts/missions/acp/03_Gatherer_Of_Light_I.lua create mode 100644 scripts/missions/acp/04_Gatherer_Of_Light_II.lua create mode 100644 scripts/missions/acp/05_Those_Who_Lurk_In_Shadows_I.lua create mode 100644 scripts/missions/acp/06_Those_Who_Lurk_In_Shadows_II.lua create mode 100644 scripts/missions/acp/07_Those_Who_Lurk_In_Shadows_III.lua create mode 100644 scripts/missions/acp/08_Remember_Me_In_Your_Dreams.lua create mode 100644 scripts/missions/acp/09_Born_Of_Her_Nightmares.lua create mode 100644 scripts/missions/acp/10_Banishing_The_Echo.lua create mode 100644 scripts/missions/acp/11_Ode_Of_Life_Bestowing.lua create mode 100644 scripts/missions/acp/12_A_Crystalline_Prophecy_Fin.lua diff --git a/scripts/missions/acp/02_The_Echo_Awakens.lua b/scripts/missions/acp/02_The_Echo_Awakens.lua new file mode 100644 index 00000000000..9da0eef0f9b --- /dev/null +++ b/scripts/missions/acp/02_The_Echo_Awakens.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Echo Awakens +-- A Crystalline Prophecy M2 +----------------------------------- +-- !addmission 9 1 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.THE_ECHO_AWAKENS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.GATHERER_OF_LIGHT_I }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/03_Gatherer_Of_Light_I.lua b/scripts/missions/acp/03_Gatherer_Of_Light_I.lua new file mode 100644 index 00000000000..ba2b55dbe7b --- /dev/null +++ b/scripts/missions/acp/03_Gatherer_Of_Light_I.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Gatherer Of Light I +-- A Crystalline Prophecy M3 +----------------------------------- +-- !addmission 9 2 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.GATHERER_OF_LIGHT_I) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.GATHERER_OF_LIGHT_II }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/04_Gatherer_Of_Light_II.lua b/scripts/missions/acp/04_Gatherer_Of_Light_II.lua new file mode 100644 index 00000000000..65d3351f715 --- /dev/null +++ b/scripts/missions/acp/04_Gatherer_Of_Light_II.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Gatherer Of Light II +-- A Crystalline Prophecy M4 +----------------------------------- +-- !addmission 9 3 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.GATHERER_OF_LIGHT_II) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_I }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/05_Those_Who_Lurk_In_Shadows_I.lua b/scripts/missions/acp/05_Those_Who_Lurk_In_Shadows_I.lua new file mode 100644 index 00000000000..489671426f9 --- /dev/null +++ b/scripts/missions/acp/05_Those_Who_Lurk_In_Shadows_I.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Those Who Lurk In Shadows I +-- A Crystalline Prophecy M5 +----------------------------------- +-- !addmission 9 4 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_I) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_II }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/06_Those_Who_Lurk_In_Shadows_II.lua b/scripts/missions/acp/06_Those_Who_Lurk_In_Shadows_II.lua new file mode 100644 index 00000000000..07376e24138 --- /dev/null +++ b/scripts/missions/acp/06_Those_Who_Lurk_In_Shadows_II.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Those Who Lurk In Shadows II +-- A Crystalline Prophecy M6 +----------------------------------- +-- !addmission 9 5 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_II) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_III }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/07_Those_Who_Lurk_In_Shadows_III.lua b/scripts/missions/acp/07_Those_Who_Lurk_In_Shadows_III.lua new file mode 100644 index 00000000000..e5f539dea33 --- /dev/null +++ b/scripts/missions/acp/07_Those_Who_Lurk_In_Shadows_III.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Those Who Lurk In Shadows III +-- A Crystalline Prophecy M7 +----------------------------------- +-- !addmission 9 6 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.THOSE_WHO_LURK_IN_SHADOWS_III) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.REMEMBER_ME_IN_YOUR_DREAMS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/08_Remember_Me_In_Your_Dreams.lua b/scripts/missions/acp/08_Remember_Me_In_Your_Dreams.lua new file mode 100644 index 00000000000..8521e400c6f --- /dev/null +++ b/scripts/missions/acp/08_Remember_Me_In_Your_Dreams.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Remember Me In Your Dreams +-- A Crystalline Prophecy M8 +----------------------------------- +-- !addmission 9 7 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.REMEMBER_ME_IN_YOUR_DREAMS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.BORN_OF_HER_NIGHTMARES }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/09_Born_Of_Her_Nightmares.lua b/scripts/missions/acp/09_Born_Of_Her_Nightmares.lua new file mode 100644 index 00000000000..0fdcd4c9898 --- /dev/null +++ b/scripts/missions/acp/09_Born_Of_Her_Nightmares.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Born Of Her Nightmares +-- A Crystalline Prophecy M9 +----------------------------------- +-- !addmission 9 8 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.BORN_OF_HER_NIGHTMARES) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.BANISHING_THE_ECHO }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/10_Banishing_The_Echo.lua b/scripts/missions/acp/10_Banishing_The_Echo.lua new file mode 100644 index 00000000000..0eb3ff803aa --- /dev/null +++ b/scripts/missions/acp/10_Banishing_The_Echo.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Banishing The Echo +-- A Crystalline Prophecy M10 +----------------------------------- +-- !addmission 9 9 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.BANISHING_THE_ECHO) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.ODE_OF_LIFE_BESTOWING }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/11_Ode_Of_Life_Bestowing.lua b/scripts/missions/acp/11_Ode_Of_Life_Bestowing.lua new file mode 100644 index 00000000000..2e8663e5e97 --- /dev/null +++ b/scripts/missions/acp/11_Ode_Of_Life_Bestowing.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Ode Of Life Bestowing +-- A Crystalline Prophecy M11 +----------------------------------- +-- !addmission 9 10 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.ODE_OF_LIFE_BESTOWING) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ACP, xi.mission.id.acp.A_CRYSTALLINE_PROPHECY_FIN }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/acp/12_A_Crystalline_Prophecy_Fin.lua b/scripts/missions/acp/12_A_Crystalline_Prophecy_Fin.lua new file mode 100644 index 00000000000..1876bc5fdce --- /dev/null +++ b/scripts/missions/acp/12_A_Crystalline_Prophecy_Fin.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- A Crystalline Prophecy Fin +-- A Crystalline Prophecy M12 +----------------------------------- +-- !addmission 9 11 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ACP, xi.mission.id.acp.A_CRYSTALLINE_PROPHECY_FIN) + +mission.reward = {} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission From 5fa07c8354088d2d8ace5dba19a9818423d189a4 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 12:21:43 +0100 Subject: [PATCH 5/7] Missions: Format AMK missions a little --- scripts/missions/amk/01_A_Moogle_Kupo_dEtat.lua | 1 + .../missions/amk/02_Drenched_It_Began_with_a_Raindrop.lua | 1 + scripts/missions/amk/03_Hasten_In_a_Jam_in_Jeuno.lua | 1 + scripts/missions/amk/04_Welcome_To_My_Decrepit_Domicile.lua | 1 + .../missions/amk/05_Curses_A_Horrifically_Harrowing_Hex.lua | 1 + scripts/missions/amk/06_An_Errand_The_Professors_Price.lua | 1 + scripts/missions/amk/07_Shock_Arrant_Abuse_of_Authority.lua | 1 + .../missions/amk/08_Lender_Beware_Read_the_Fine_Print.lua | 1 + scripts/missions/amk/09_Rescue_A_Moogles_Labor_of_Love.lua | 1 + .../missions/amk/10_Roar_A_Cat_Burglar_Bares_Her_Fangs.lua | 1 + scripts/missions/amk/11_Relief_A_Triumphant_Return.lua | 1 + scripts/missions/amk/12_Joy_Summoned_to_a_Fabulous_Fete.lua | 1 + .../missions/amk/13_A_Challenge_You_Could_Be_a_Winner.lua | 1 + scripts/missions/amk/14_Smash_A_Malevolent_Menace.lua | 5 ++--- 14 files changed, 15 insertions(+), 3 deletions(-) diff --git a/scripts/missions/amk/01_A_Moogle_Kupo_dEtat.lua b/scripts/missions/amk/01_A_Moogle_Kupo_dEtat.lua index c54090e3b81..95d5f7b1938 100644 --- a/scripts/missions/amk/01_A_Moogle_Kupo_dEtat.lua +++ b/scripts/missions/amk/01_A_Moogle_Kupo_dEtat.lua @@ -1,6 +1,7 @@ ----------------------------------- -- A Moogle Kupo d'Etat -- A Moogle Kupo d'Etat M1 +----------------------------------- -- !addmission 10 0 ----------------------------------- diff --git a/scripts/missions/amk/02_Drenched_It_Began_with_a_Raindrop.lua b/scripts/missions/amk/02_Drenched_It_Began_with_a_Raindrop.lua index 157dd247da3..5377d8c621f 100644 --- a/scripts/missions/amk/02_Drenched_It_Began_with_a_Raindrop.lua +++ b/scripts/missions/amk/02_Drenched_It_Began_with_a_Raindrop.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Drenched! It Began with a Raindrop -- A Moogle Kupo d'Etat M2 +----------------------------------- -- !addmission 10 1 -- ORCISH_PLATE_ARMOR : !additem 2757 -- QUADAV_BACKSCALE : !additem 2758 diff --git a/scripts/missions/amk/03_Hasten_In_a_Jam_in_Jeuno.lua b/scripts/missions/amk/03_Hasten_In_a_Jam_in_Jeuno.lua index 6b40c2b95dd..8c2298f6586 100644 --- a/scripts/missions/amk/03_Hasten_In_a_Jam_in_Jeuno.lua +++ b/scripts/missions/amk/03_Hasten_In_a_Jam_in_Jeuno.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Hasten! In a Jam in Jeuno? -- A Moogle Kupo d'Etat M3 +----------------------------------- -- !addmission 10 2 -- Inconspicuous Door : !pos -15 1.300 68 244 ----------------------------------- diff --git a/scripts/missions/amk/04_Welcome_To_My_Decrepit_Domicile.lua b/scripts/missions/amk/04_Welcome_To_My_Decrepit_Domicile.lua index 338cf4107e7..5664351b61b 100644 --- a/scripts/missions/amk/04_Welcome_To_My_Decrepit_Domicile.lua +++ b/scripts/missions/amk/04_Welcome_To_My_Decrepit_Domicile.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Welcome! To My Decrepit Domicile -- A Moogle Kupo d'Etat M4 +----------------------------------- -- !addmission 10 3 -- Inconspicuous Door : !pos -15 1.300 68 244 -- Note: KI aquisition is handled in helm.lua diff --git a/scripts/missions/amk/05_Curses_A_Horrifically_Harrowing_Hex.lua b/scripts/missions/amk/05_Curses_A_Horrifically_Harrowing_Hex.lua index d28152e0fa0..756cb63dbe8 100644 --- a/scripts/missions/amk/05_Curses_A_Horrifically_Harrowing_Hex.lua +++ b/scripts/missions/amk/05_Curses_A_Horrifically_Harrowing_Hex.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Curses! A Horrifically Harrowing Hex -- A Moogle Kupo d'Etat M5 +----------------------------------- -- !addmission 10 4 -- Shantotto : !pos 122 -2 112 239 ----------------------------------- diff --git a/scripts/missions/amk/06_An_Errand_The_Professors_Price.lua b/scripts/missions/amk/06_An_Errand_The_Professors_Price.lua index d58c21cc8bb..58f8dd0fd13 100644 --- a/scripts/missions/amk/06_An_Errand_The_Professors_Price.lua +++ b/scripts/missions/amk/06_An_Errand_The_Professors_Price.lua @@ -1,6 +1,7 @@ ----------------------------------- -- An Errand! The Professor's Price -- A Moogle Kupo d'Etat M6 +----------------------------------- -- !addmission 10 5 -- qm1 : !pos 420 -10 745 194 -- ORB_OF_SWORDS : !addkeyitem 1139 diff --git a/scripts/missions/amk/07_Shock_Arrant_Abuse_of_Authority.lua b/scripts/missions/amk/07_Shock_Arrant_Abuse_of_Authority.lua index 626c3834dae..0ddac55f10e 100644 --- a/scripts/missions/amk/07_Shock_Arrant_Abuse_of_Authority.lua +++ b/scripts/missions/amk/07_Shock_Arrant_Abuse_of_Authority.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Shock! Arrant Abuse of Authority -- A Moogle Kupo d'Etat M7 +----------------------------------- -- !addmission 10 6 -- Inconspicuous Door : !pos -15 1.300 68 244 -- Note: KI aquisition is handled in chocobo_digging.lua diff --git a/scripts/missions/amk/08_Lender_Beware_Read_the_Fine_Print.lua b/scripts/missions/amk/08_Lender_Beware_Read_the_Fine_Print.lua index 9e903cc77de..828beaf808c 100644 --- a/scripts/missions/amk/08_Lender_Beware_Read_the_Fine_Print.lua +++ b/scripts/missions/amk/08_Lender_Beware_Read_the_Fine_Print.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Lender Beware! Read the Fine Print -- A Moogle Kupo d'Etat M8 +----------------------------------- -- !addmission 10 7 -- Shady Sconce : !pos -179.563 24.093 274.055 176 -- Waterfall Basin : !pos 104.888 0.477 -114.185 176 diff --git a/scripts/missions/amk/09_Rescue_A_Moogles_Labor_of_Love.lua b/scripts/missions/amk/09_Rescue_A_Moogles_Labor_of_Love.lua index ee28d053c84..c754b8c29aa 100644 --- a/scripts/missions/amk/09_Rescue_A_Moogles_Labor_of_Love.lua +++ b/scripts/missions/amk/09_Rescue_A_Moogles_Labor_of_Love.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Rescue! A Moogle's Labor of Love -- A Moogle Kupo d'Etat M9 +----------------------------------- -- !addmission 10 8 -- Geologist cutscene args : csid, progress, has QC map: 1 or 0, markerset: 1-10 -- Goblin Geologist : !pos -737 -6 -550 208 diff --git a/scripts/missions/amk/10_Roar_A_Cat_Burglar_Bares_Her_Fangs.lua b/scripts/missions/amk/10_Roar_A_Cat_Burglar_Bares_Her_Fangs.lua index 385928bb3b3..11897747810 100644 --- a/scripts/missions/amk/10_Roar_A_Cat_Burglar_Bares_Her_Fangs.lua +++ b/scripts/missions/amk/10_Roar_A_Cat_Burglar_Bares_Her_Fangs.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Roar! A Cat Burglar Bares Her Fangs -- A Moogle Kupo d'Etat M10 +----------------------------------- -- !addmission 10 9 ----------------------------------- diff --git a/scripts/missions/amk/11_Relief_A_Triumphant_Return.lua b/scripts/missions/amk/11_Relief_A_Triumphant_Return.lua index 04f8eaa5c3f..307877bb40c 100644 --- a/scripts/missions/amk/11_Relief_A_Triumphant_Return.lua +++ b/scripts/missions/amk/11_Relief_A_Triumphant_Return.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Relief! A Triumphant Return -- A Moogle Kupo d'Etat M11 +----------------------------------- -- !addmission 10 10 -- Inconspicuous Door : !pos -15 1.300 68 244 ----------------------------------- diff --git a/scripts/missions/amk/12_Joy_Summoned_to_a_Fabulous_Fete.lua b/scripts/missions/amk/12_Joy_Summoned_to_a_Fabulous_Fete.lua index 52a20fc852d..719b74fc369 100644 --- a/scripts/missions/amk/12_Joy_Summoned_to_a_Fabulous_Fete.lua +++ b/scripts/missions/amk/12_Joy_Summoned_to_a_Fabulous_Fete.lua @@ -1,6 +1,7 @@ ----------------------------------- -- Joy! Summoned to a Fabulous Fete -- A Moogle Kupo d'Etat M12 +----------------------------------- -- !addmission 10 11 ----------------------------------- diff --git a/scripts/missions/amk/13_A_Challenge_You_Could_Be_a_Winner.lua b/scripts/missions/amk/13_A_Challenge_You_Could_Be_a_Winner.lua index 830a2bb7939..54fd062bd9a 100644 --- a/scripts/missions/amk/13_A_Challenge_You_Could_Be_a_Winner.lua +++ b/scripts/missions/amk/13_A_Challenge_You_Could_Be_a_Winner.lua @@ -1,6 +1,7 @@ ----------------------------------- -- A Challenge! You Could Be a Winner -- A Moogle Kupo d'Etat M13 +----------------------------------- -- !addmission 10 12 ----------------------------------- -- Puzzle 1 - Beaucedine diff --git a/scripts/missions/amk/14_Smash_A_Malevolent_Menace.lua b/scripts/missions/amk/14_Smash_A_Malevolent_Menace.lua index 81ec3ea6b49..0baade76f9e 100644 --- a/scripts/missions/amk/14_Smash_A_Malevolent_Menace.lua +++ b/scripts/missions/amk/14_Smash_A_Malevolent_Menace.lua @@ -1,14 +1,13 @@ ----------------------------------- -- Smash! A Malevolent Menace -- A Moogle Kupo d'Etat M14 +----------------------------------- -- !addmission 10 13 ----------------------------------- local mission = Mission:new(xi.mission.log_id.AMK, xi.mission.id.amk.SMASH_A_MALEVOLENT_MENACE) -mission.reward = -{ -} +mission.reward = {} mission.sections = { From 100d7ddfee30542fd08b6650371944dd3e18c33c Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 12:21:55 +0100 Subject: [PATCH 6/7] Missions: Add empty stubs for remaining ASA missions --- .../asa/06_Enemy_Of_The_Empire_II.lua | 26 +++++++++++++++++++ .../asa/07_Sugar-Coated_Subterfuge.lua | 26 +++++++++++++++++++ .../missions/asa/08_Shantotto_In_Chains.lua | 26 +++++++++++++++++++ .../missions/asa/09_Fountain_Of_Trouble.lua | 26 +++++++++++++++++++ scripts/missions/asa/10_Battaru_Royale.lua | 26 +++++++++++++++++++ .../missions/asa/11_Romancing_The_Clone.lua | 26 +++++++++++++++++++ scripts/missions/asa/12_Sisters_In_Arms.lua | 26 +++++++++++++++++++ .../asa/13_Project_Shantottofication.lua | 26 +++++++++++++++++++ scripts/missions/asa/14_An_Uneasy_Peace.lua | 26 +++++++++++++++++++ .../asa/15_A_Shantotto_Ascension_Fin.lua | 23 ++++++++++++++++ 10 files changed, 257 insertions(+) create mode 100644 scripts/missions/asa/06_Enemy_Of_The_Empire_II.lua create mode 100644 scripts/missions/asa/07_Sugar-Coated_Subterfuge.lua create mode 100644 scripts/missions/asa/08_Shantotto_In_Chains.lua create mode 100644 scripts/missions/asa/09_Fountain_Of_Trouble.lua create mode 100644 scripts/missions/asa/10_Battaru_Royale.lua create mode 100644 scripts/missions/asa/11_Romancing_The_Clone.lua create mode 100644 scripts/missions/asa/12_Sisters_In_Arms.lua create mode 100644 scripts/missions/asa/13_Project_Shantottofication.lua create mode 100644 scripts/missions/asa/14_An_Uneasy_Peace.lua create mode 100644 scripts/missions/asa/15_A_Shantotto_Ascension_Fin.lua diff --git a/scripts/missions/asa/06_Enemy_Of_The_Empire_II.lua b/scripts/missions/asa/06_Enemy_Of_The_Empire_II.lua new file mode 100644 index 00000000000..e0b64c35d53 --- /dev/null +++ b/scripts/missions/asa/06_Enemy_Of_The_Empire_II.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Enemy Of The Empire II +-- A Shantotto Ascension M6 +----------------------------------- +-- !addmission 11 5 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.ENEMY_OF_THE_EMPIRE_II) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.SUGAR_COATED_SUBTERFUGE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/07_Sugar-Coated_Subterfuge.lua b/scripts/missions/asa/07_Sugar-Coated_Subterfuge.lua new file mode 100644 index 00000000000..ded75e616bc --- /dev/null +++ b/scripts/missions/asa/07_Sugar-Coated_Subterfuge.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Sugar-Coated Subterfuge +-- A Shantotto Ascension M7 +----------------------------------- +-- !addmission 11 6 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.SUGAR_COATED_SUBTERFUGE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.SHANTOTTO_IN_CHAINS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/08_Shantotto_In_Chains.lua b/scripts/missions/asa/08_Shantotto_In_Chains.lua new file mode 100644 index 00000000000..ba60a18125c --- /dev/null +++ b/scripts/missions/asa/08_Shantotto_In_Chains.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Shantotto In Chains +-- A Shantotto Ascension M8 +----------------------------------- +-- !addmission 11 7 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.SHANTOTTO_IN_CHAINS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.FOUNTAIN_OF_TROUBLE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/09_Fountain_Of_Trouble.lua b/scripts/missions/asa/09_Fountain_Of_Trouble.lua new file mode 100644 index 00000000000..b4c246fa1f7 --- /dev/null +++ b/scripts/missions/asa/09_Fountain_Of_Trouble.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Fountain Of Trouble +-- A Shantotto Ascension M9 +----------------------------------- +-- !addmission 11 8 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.FOUNTAIN_OF_TROUBLE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.BATTARU_ROYALE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/10_Battaru_Royale.lua b/scripts/missions/asa/10_Battaru_Royale.lua new file mode 100644 index 00000000000..fe122b1c23a --- /dev/null +++ b/scripts/missions/asa/10_Battaru_Royale.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Battaru Royale +-- A Shantotto Ascension M10 +----------------------------------- +-- !addmission 11 9 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.BATTARU_ROYALE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.ROMANCING_THE_CLONE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/11_Romancing_The_Clone.lua b/scripts/missions/asa/11_Romancing_The_Clone.lua new file mode 100644 index 00000000000..1ebf56ba22c --- /dev/null +++ b/scripts/missions/asa/11_Romancing_The_Clone.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Romancing The Clone +-- A Shantotto Ascension M11 +----------------------------------- +-- !addmission 11 10 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.ROMANCING_THE_CLONE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.SISTERS_IN_ARMS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/12_Sisters_In_Arms.lua b/scripts/missions/asa/12_Sisters_In_Arms.lua new file mode 100644 index 00000000000..99b7f96f739 --- /dev/null +++ b/scripts/missions/asa/12_Sisters_In_Arms.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Sisters In Arms +-- A Shantotto Ascension M12 +----------------------------------- +-- !addmission 11 11 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.SISTERS_IN_ARMS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.PROJECT_SHANTOTTOFICATION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/13_Project_Shantottofication.lua b/scripts/missions/asa/13_Project_Shantottofication.lua new file mode 100644 index 00000000000..0e8281c3329 --- /dev/null +++ b/scripts/missions/asa/13_Project_Shantottofication.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Project Shantottofication +-- A Shantotto Ascension M13 +----------------------------------- +-- !addmission 11 12 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.PROJECT_SHANTOTTOFICATION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.AN_UNEASY_PEACE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/14_An_Uneasy_Peace.lua b/scripts/missions/asa/14_An_Uneasy_Peace.lua new file mode 100644 index 00000000000..a6edf7a3bfe --- /dev/null +++ b/scripts/missions/asa/14_An_Uneasy_Peace.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- An Uneasy Peace +-- A Shantotto Ascension M14 +----------------------------------- +-- !addmission 11 13 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.AN_UNEASY_PEACE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.ASA, xi.mission.id.asa.A_SHANTOTTO_ASCENSION_FIN }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/asa/15_A_Shantotto_Ascension_Fin.lua b/scripts/missions/asa/15_A_Shantotto_Ascension_Fin.lua new file mode 100644 index 00000000000..02c0fc1ea69 --- /dev/null +++ b/scripts/missions/asa/15_A_Shantotto_Ascension_Fin.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- A Shantotto Ascension Fin +-- A Shantotto Ascension M15 +----------------------------------- +-- !addmission 11 14 +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.ASA, xi.mission.id.asa.A_SHANTOTTO_ASCENSION_FIN) + +mission.reward = {} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission From 03264f9ee2e22cc15c47a96c472d143be00b8967 Mon Sep 17 00:00:00 2001 From: Zach Toogood Date: Thu, 9 Apr 2026 12:23:19 +0100 Subject: [PATCH 7/7] Missions: Add empty stubs for TVR mission line There is a lot of work still to do here: - We need to figure out the relationship between the end ROV missions and when TVR appears in your log - We need to figure out what the mission menu ID is for TVR and hook it up to our tables/gm commands - We need to map out which IDs correspond to which missions - And of course, we need to implement everything based on retail captures :) --- scripts/globals/log_ids.lua | 7 ++ scripts/globals/missions.lua | 98 ++++++++++++++++--- scripts/missions/tvr/10_1_To_Movalpolos.lua | 26 +++++ .../tvr/10_2_Magh_Bihu_on_the_Prowl.lua | 26 +++++ scripts/missions/tvr/10_3_101_Dazbogs.lua | 26 +++++ .../tvr/10_4_Kipdrix_the_Faithful.lua | 26 +++++ .../tvr/10_5_Duke_Allocess_Decision.lua | 26 +++++ scripts/missions/tvr/10_6_Odins_Eye.lua | 26 +++++ scripts/missions/tvr/11_1_Moglesse_Oblige.lua | 26 +++++ .../missions/tvr/11_2_The_Voracious_Beast.lua | 26 +++++ scripts/missions/tvr/11_3_Your_Decision.lua | 26 +++++ .../tvr/1_1_The_Voracious_Resurgence.lua | 29 ++++++ .../tvr/1_2_The_Gloom_Phantoms_Approach.lua | 26 +++++ scripts/missions/tvr/1_3_The_Brygid_Cup.lua | 26 +++++ .../tvr/1_4_The_Destiny_Destroyers.lua | 26 +++++ scripts/missions/tvr/2_1_Kupipis_Dilemma.lua | 26 +++++ .../missions/tvr/2_2_The_Cardians_Duty.lua | 26 +++++ .../missions/tvr/2_3_Zhuu_Buxus_Gambit.lua | 26 +++++ .../missions/tvr/2_4_Star_Onion_Fortune.lua | 26 +++++ .../missions/tvr/2_5_The_Doll_Whisperer.lua | 26 +++++ scripts/missions/tvr/3_1_Dancing_Prince.lua | 26 +++++ scripts/missions/tvr/3_2_Claidies_Concern.lua | 26 +++++ .../missions/tvr/3_3_Curilla_Unleashed.lua | 26 +++++ .../missions/tvr/3_4_Run_Excenmille_Run.lua | 26 +++++ .../missions/tvr/3_5_Of_Knights_and_Orcs.lua | 26 +++++ scripts/missions/tvr/4_1_Best_Served_Cold.lua | 26 +++++ .../tvr/4_2_Cornelias_Call_to_Action.lua | 26 +++++ .../missions/tvr/4_3_Naja_the_Ambitious.lua | 26 +++++ scripts/missions/tvr/4_4_Raubahn_the_Blue.lua | 26 +++++ .../missions/tvr/5_1_Ghatsads_Quandary.lua | 26 +++++ scripts/missions/tvr/5_2_The_Revelation.lua | 26 +++++ scripts/missions/tvr/5_3_Tateeyas_Worries.lua | 26 +++++ .../missions/tvr/5_4_The_Seagull_Phratrie.lua | 26 +++++ scripts/missions/tvr/5_5_The_Sea_Sage.lua | 26 +++++ .../missions/tvr/6_1_Sky_Moon_Incantrix.lua | 26 +++++ scripts/missions/tvr/6_2_Niis_Last_Stand.lua | 26 +++++ .../missions/tvr/6_3_Dance_of_the_Tengu.lua | 26 +++++ .../missions/tvr/7_1_Raebrimms_Rebirth.lua | 26 +++++ .../tvr/7_2_Uran_Mafran_of_the_Maelstrom.lua | 26 +++++ .../tvr/7_3_Koru_Morus_Hypothesis.lua | 26 +++++ .../tvr/7_4_Altennia_Burns_Bright.lua | 26 +++++ .../missions/tvr/8_1_Maat_on_the_Rampage.lua | 26 +++++ .../tvr/8_2_Not_Just_a_Pretty_Face.lua | 26 +++++ .../missions/tvr/8_3_Delkfutt_the_Great.lua | 26 +++++ .../missions/tvr/9_1_Oshasha_Violation.lua | 26 +++++ .../missions/tvr/9_2_Phantasmic_Heroes.lua | 26 +++++ .../tvr/9_3_Skokkr_Undrborns_Temptation.lua | 26 +++++ .../missions/tvr/9_4_The_Prime_Weapons.lua | 26 +++++ scripts/missions/tvr/Epilogue.lua | 23 +++++ 49 files changed, 1314 insertions(+), 13 deletions(-) create mode 100644 scripts/missions/tvr/10_1_To_Movalpolos.lua create mode 100644 scripts/missions/tvr/10_2_Magh_Bihu_on_the_Prowl.lua create mode 100644 scripts/missions/tvr/10_3_101_Dazbogs.lua create mode 100644 scripts/missions/tvr/10_4_Kipdrix_the_Faithful.lua create mode 100644 scripts/missions/tvr/10_5_Duke_Allocess_Decision.lua create mode 100644 scripts/missions/tvr/10_6_Odins_Eye.lua create mode 100644 scripts/missions/tvr/11_1_Moglesse_Oblige.lua create mode 100644 scripts/missions/tvr/11_2_The_Voracious_Beast.lua create mode 100644 scripts/missions/tvr/11_3_Your_Decision.lua create mode 100644 scripts/missions/tvr/1_1_The_Voracious_Resurgence.lua create mode 100644 scripts/missions/tvr/1_2_The_Gloom_Phantoms_Approach.lua create mode 100644 scripts/missions/tvr/1_3_The_Brygid_Cup.lua create mode 100644 scripts/missions/tvr/1_4_The_Destiny_Destroyers.lua create mode 100644 scripts/missions/tvr/2_1_Kupipis_Dilemma.lua create mode 100644 scripts/missions/tvr/2_2_The_Cardians_Duty.lua create mode 100644 scripts/missions/tvr/2_3_Zhuu_Buxus_Gambit.lua create mode 100644 scripts/missions/tvr/2_4_Star_Onion_Fortune.lua create mode 100644 scripts/missions/tvr/2_5_The_Doll_Whisperer.lua create mode 100644 scripts/missions/tvr/3_1_Dancing_Prince.lua create mode 100644 scripts/missions/tvr/3_2_Claidies_Concern.lua create mode 100644 scripts/missions/tvr/3_3_Curilla_Unleashed.lua create mode 100644 scripts/missions/tvr/3_4_Run_Excenmille_Run.lua create mode 100644 scripts/missions/tvr/3_5_Of_Knights_and_Orcs.lua create mode 100644 scripts/missions/tvr/4_1_Best_Served_Cold.lua create mode 100644 scripts/missions/tvr/4_2_Cornelias_Call_to_Action.lua create mode 100644 scripts/missions/tvr/4_3_Naja_the_Ambitious.lua create mode 100644 scripts/missions/tvr/4_4_Raubahn_the_Blue.lua create mode 100644 scripts/missions/tvr/5_1_Ghatsads_Quandary.lua create mode 100644 scripts/missions/tvr/5_2_The_Revelation.lua create mode 100644 scripts/missions/tvr/5_3_Tateeyas_Worries.lua create mode 100644 scripts/missions/tvr/5_4_The_Seagull_Phratrie.lua create mode 100644 scripts/missions/tvr/5_5_The_Sea_Sage.lua create mode 100644 scripts/missions/tvr/6_1_Sky_Moon_Incantrix.lua create mode 100644 scripts/missions/tvr/6_2_Niis_Last_Stand.lua create mode 100644 scripts/missions/tvr/6_3_Dance_of_the_Tengu.lua create mode 100644 scripts/missions/tvr/7_1_Raebrimms_Rebirth.lua create mode 100644 scripts/missions/tvr/7_2_Uran_Mafran_of_the_Maelstrom.lua create mode 100644 scripts/missions/tvr/7_3_Koru_Morus_Hypothesis.lua create mode 100644 scripts/missions/tvr/7_4_Altennia_Burns_Bright.lua create mode 100644 scripts/missions/tvr/8_1_Maat_on_the_Rampage.lua create mode 100644 scripts/missions/tvr/8_2_Not_Just_a_Pretty_Face.lua create mode 100644 scripts/missions/tvr/8_3_Delkfutt_the_Great.lua create mode 100644 scripts/missions/tvr/9_1_Oshasha_Violation.lua create mode 100644 scripts/missions/tvr/9_2_Phantasmic_Heroes.lua create mode 100644 scripts/missions/tvr/9_3_Skokkr_Undrborns_Temptation.lua create mode 100644 scripts/missions/tvr/9_4_The_Prime_Weapons.lua create mode 100644 scripts/missions/tvr/Epilogue.lua diff --git a/scripts/globals/log_ids.lua b/scripts/globals/log_ids.lua index 3d764c65103..ccdd2ab06a6 100644 --- a/scripts/globals/log_ids.lua +++ b/scripts/globals/log_ids.lua @@ -262,6 +262,12 @@ local qmLogInfo = ['full_name'] = 'Rhapsodies of Vana\'diel', ['mission_log'] = 13, }, + + TVR = + { + ['full_name'] = 'The Voracious Resurgence', + ['mission_log'] = 14, -- TODO: Find the right ID for this + }, } local questLogs = @@ -295,6 +301,7 @@ local missionLogs = [11] = 'ASA', [12] = 'SOA', [13] = 'ROV', + [14] = 'TVR', -- TODO: Find the right ID for this } local function getQMLogInfo(cmdParamText, logNameTable) diff --git a/scripts/globals/missions.lua b/scripts/globals/missions.lua index 9afb0c86125..1077be5d8bd 100644 --- a/scripts/globals/missions.lua +++ b/scripts/globals/missions.lua @@ -18,6 +18,7 @@ xi.mission.log_id = ASA = 11, SOA = 12, ROV = 13, + TVR = 14, -- TODO: Find the right ID for this } xi.mission.area = @@ -36,6 +37,7 @@ xi.mission.area = [xi.mission.log_id.ASA] = 'asa', [xi.mission.log_id.SOA] = 'soa', [xi.mission.log_id.ROV] = 'rov', + [xi.mission.log_id.TVR] = 'tvr', } xi.mission.status = @@ -56,7 +58,7 @@ xi.mission.status = xi.mission.id = { ----------------------------------- - -- All Nations + -- All Nations ----------------------------------- ['nation'] = { @@ -68,7 +70,7 @@ xi.mission.id = }, ----------------------------------- - -- San d'Oria - Interaction Framework (0) + -- San d'Oria - Interaction Framework (0) ----------------------------------- [xi.mission.area[xi.mission.log_id.SANDORIA]] = { @@ -100,7 +102,7 @@ xi.mission.id = }, ----------------------------------- - -- Bastok - Interaction Framework (1) + -- Bastok - Interaction Framework (1) ----------------------------------- [xi.mission.area[xi.mission.log_id.BASTOK]] = { @@ -132,7 +134,7 @@ xi.mission.id = }, ----------------------------------- - -- Windurst - Interaction Framework (2) + -- Windurst - Interaction Framework (2) ----------------------------------- [xi.mission.area[xi.mission.log_id.WINDURST]] = { @@ -164,7 +166,7 @@ xi.mission.id = }, ----------------------------------- - -- Zilart Missions (3) + -- Zilart Missions (3) ----------------------------------- [xi.mission.area[xi.mission.log_id.ZILART]] = { @@ -190,7 +192,7 @@ xi.mission.id = }, ----------------------------------- - -- Promathia Missions (6) + -- Promathia Missions (6) ----------------------------------- [xi.mission.area[xi.mission.log_id.COP]] = { @@ -261,7 +263,7 @@ xi.mission.id = }, ----------------------------------- - -- Aht Urhgan Missions (4) + -- Aht Urhgan Missions (4) ----------------------------------- [xi.mission.area[xi.mission.log_id.TOAU]] = { @@ -316,7 +318,7 @@ xi.mission.id = }, ----------------------------------- - -- Wings of the Goddess (5) + -- Wings of the Goddess (5) ----------------------------------- [xi.mission.area[xi.mission.log_id.WOTG]] = { @@ -377,7 +379,7 @@ xi.mission.id = }, ----------------------------------- - -- A Crystalline Prophecy (9) + -- A Crystalline Prophecy (9) ----------------------------------- [xi.mission.area[xi.mission.log_id.ACP]] = { @@ -396,7 +398,7 @@ xi.mission.id = }, ----------------------------------- - -- A Moogle Kupo d'Etat (10) + -- A Moogle Kupo d'Etat (10) ----------------------------------- [xi.mission.area[xi.mission.log_id.AMK]] = { @@ -418,7 +420,7 @@ xi.mission.id = }, ----------------------------------- - -- A Shantotto Ascension (11) + -- A Shantotto Ascension (11) ----------------------------------- [xi.mission.area[xi.mission.log_id.ASA]] = { @@ -440,7 +442,7 @@ xi.mission.id = }, ----------------------------------- - -- Seekers of Adoulin (12) + -- Seekers of Adoulin (12) ----------------------------------- [xi.mission.area[xi.mission.log_id.SOA]] = { @@ -558,7 +560,7 @@ xi.mission.id = }, ----------------------------------- - -- Rhapsodies of Vana Diel (13) + -- Rhapsodies of Vana Diel (13) ----------------------------------- [xi.mission.area[xi.mission.log_id.ROV]] = { @@ -660,6 +662,76 @@ xi.mission.id = THE_ORBS_RADIANCE = 224, A_RHAPSODY_FOR_THE_AGES = 226, }, + + ----------------------------------- + -- The Voracious Resurgence (14) + -- + -- TODO: These are completely guessed, they need to be figured out from the client, + -- : also with their special relationship with the ROV missions. + ----------------------------------- + [xi.mission.area[xi.mission.log_id.TVR]] = + { + -- Part 1 + THE_VORACIOUS_RESURGENCE = 0, + THE_GLOOM_PHANTOMS_APPROACH = 1, + THE_BRYGID_CUP = 2, + THE_DESTINY_DESTROYERS = 3, + -- Part 2 + KUPIPIS_DILEMMA = 4, + THE_CARDIANS_DUTY = 5, + ZHUU_BUXUS_GAMBIT = 6, + STAR_ONION_FORTUNE = 7, + THE_DOLL_WHISPERER = 8, + -- Part 3 + DANCING_PRINCE = 9, + CLAIDIES_CONCERN = 10, + CURILLA_UNLEASHED = 11, + RUN_EXCENMILLE_RUN = 12, + OF_KNIGHTS_AND_ORCS = 13, + -- Part 4 + BEST_SERVED_COLD = 14, + CORNELIAS_CALL_TO_ACTION = 15, + NAJA_THE_AMBITIOUS = 16, + RAUBAHN_THE_BLUE = 17, + -- Part 5 + GHATSADS_QUANDARY = 18, + THE_REVELATION = 19, + TATEEYAS_WORRIES = 20, + THE_SEAGULL_PHRATRIE = 21, + THE_SEA_SAGE = 22, + -- Part 6 + SKY_MOON_INCANTRIX = 23, + NIIS_LAST_STAND = 24, + DANCE_OF_THE_TENGU = 25, + -- Part 7 + RAEBRIMMS_REBIRTH = 26, + URAN_MAFRAN_OF_THE_MAELSTROM = 27, + KORU_MORUS_HYPOTHESIS = 28, + ALTENNIA_BURNS_BRIGHT = 29, + -- Part 8 + MAAT_ON_THE_RAMPAGE = 30, + NOT_JUST_A_PRETTY_FACE = 31, + DELKFUTT_THE_GREAT = 32, + -- Part 9 + OSHASHAS_VIOLATION = 33, + PHANTASMIC_HEROES = 34, + SKOKKR_UNDRBORNS_TEMPTATION = 35, + THE_PRIME_WEAPONS = 36, + -- Part 10 + TO_MOVALPOLOS = 37, + MAGH_BIHU_ON_THE_PROWL = 38, + DAZBOGS_101 = 39, + KIPDRIX_THE_FAITHFUL = 40, + DUKE_ALLOCESS_DECISION = 41, + ODINS_EYE = 42, + -- Part 11 + MOGLESSE_OBLIGE = 43, + THE_VORACIOUS_BEAST = 44, + YOUR_DECISION = 45, + -- Epilogue + EPILOGUE = 46, + }, + [xi.mission.area[xi.mission.log_id.CAMPAIGN]] = {}, } diff --git a/scripts/missions/tvr/10_1_To_Movalpolos.lua b/scripts/missions/tvr/10_1_To_Movalpolos.lua new file mode 100644 index 00000000000..73b10fd6574 --- /dev/null +++ b/scripts/missions/tvr/10_1_To_Movalpolos.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- To Movalpolos! +-- The Voracious Resurgence M10-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.TO_MOVALPOLOS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.MAGH_BIHU_ON_THE_PROWL }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/10_2_Magh_Bihu_on_the_Prowl.lua b/scripts/missions/tvr/10_2_Magh_Bihu_on_the_Prowl.lua new file mode 100644 index 00000000000..38221523016 --- /dev/null +++ b/scripts/missions/tvr/10_2_Magh_Bihu_on_the_Prowl.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Magh Bihu on the Prowl +-- The Voracious Resurgence M10-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.MAGH_BIHU_ON_THE_PROWL) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.DAZBOGS_101 }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/10_3_101_Dazbogs.lua b/scripts/missions/tvr/10_3_101_Dazbogs.lua new file mode 100644 index 00000000000..6d6abd47d57 --- /dev/null +++ b/scripts/missions/tvr/10_3_101_Dazbogs.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- 101 Dazbogs +-- The Voracious Resurgence M10-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.DAZBOGS_101) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.KIPDRIX_THE_FAITHFUL }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/10_4_Kipdrix_the_Faithful.lua b/scripts/missions/tvr/10_4_Kipdrix_the_Faithful.lua new file mode 100644 index 00000000000..fc8a9e7782f --- /dev/null +++ b/scripts/missions/tvr/10_4_Kipdrix_the_Faithful.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Kipdrix the Faithful +-- The Voracious Resurgence M10-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.KIPDRIX_THE_FAITHFUL) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.DUKE_ALLOCESS_DECISION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/10_5_Duke_Allocess_Decision.lua b/scripts/missions/tvr/10_5_Duke_Allocess_Decision.lua new file mode 100644 index 00000000000..5f6a89a2852 --- /dev/null +++ b/scripts/missions/tvr/10_5_Duke_Allocess_Decision.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Duke Alloces's Decision +-- The Voracious Resurgence M10-5 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.DUKE_ALLOCESS_DECISION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.ODINS_EYE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/10_6_Odins_Eye.lua b/scripts/missions/tvr/10_6_Odins_Eye.lua new file mode 100644 index 00000000000..065f3e956c4 --- /dev/null +++ b/scripts/missions/tvr/10_6_Odins_Eye.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Odin's Eye +-- The Voracious Resurgence M10-6 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.ODINS_EYE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.MOGLESSE_OBLIGE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/11_1_Moglesse_Oblige.lua b/scripts/missions/tvr/11_1_Moglesse_Oblige.lua new file mode 100644 index 00000000000..c544f062cfd --- /dev/null +++ b/scripts/missions/tvr/11_1_Moglesse_Oblige.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Moglesse Oblige +-- The Voracious Resurgence M11-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.MOGLESSE_OBLIGE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_VORACIOUS_BEAST }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/11_2_The_Voracious_Beast.lua b/scripts/missions/tvr/11_2_The_Voracious_Beast.lua new file mode 100644 index 00000000000..638a4ddd4b9 --- /dev/null +++ b/scripts/missions/tvr/11_2_The_Voracious_Beast.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Voracious Beast +-- The Voracious Resurgence M11-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_VORACIOUS_BEAST) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.YOUR_DECISION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/11_3_Your_Decision.lua b/scripts/missions/tvr/11_3_Your_Decision.lua new file mode 100644 index 00000000000..b4970f9bbce --- /dev/null +++ b/scripts/missions/tvr/11_3_Your_Decision.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Your Decision +-- The Voracious Resurgence M11-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.YOUR_DECISION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.EPILOGUE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/1_1_The_Voracious_Resurgence.lua b/scripts/missions/tvr/1_1_The_Voracious_Resurgence.lua new file mode 100644 index 00000000000..a59ac839370 --- /dev/null +++ b/scripts/missions/tvr/1_1_The_Voracious_Resurgence.lua @@ -0,0 +1,29 @@ +----------------------------------- +-- The Voracious Resurgence +-- The Voracious Resurgence M1-1 +----------------------------------- +-- NOTE: This section of the mission menu won't appear +-- : unless you've flagged beyond (and maybe completed?) +-- : ROV: 3-34 The Orb's Radiance (!addmission 13 232) +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_VORACIOUS_RESURGENCE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_GLOOM_PHANTOMS_APPROACH }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/1_2_The_Gloom_Phantoms_Approach.lua b/scripts/missions/tvr/1_2_The_Gloom_Phantoms_Approach.lua new file mode 100644 index 00000000000..7666916bc6b --- /dev/null +++ b/scripts/missions/tvr/1_2_The_Gloom_Phantoms_Approach.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Gloom Phantom's Approach +-- The Voracious Resurgence M1-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_GLOOM_PHANTOMS_APPROACH) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_BRYGID_CUP }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/1_3_The_Brygid_Cup.lua b/scripts/missions/tvr/1_3_The_Brygid_Cup.lua new file mode 100644 index 00000000000..ea29dca89c2 --- /dev/null +++ b/scripts/missions/tvr/1_3_The_Brygid_Cup.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Brygid Cup +-- The Voracious Resurgence M1-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_BRYGID_CUP) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_DESTINY_DESTROYERS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/1_4_The_Destiny_Destroyers.lua b/scripts/missions/tvr/1_4_The_Destiny_Destroyers.lua new file mode 100644 index 00000000000..79b36267870 --- /dev/null +++ b/scripts/missions/tvr/1_4_The_Destiny_Destroyers.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Destiny Destroyers +-- The Voracious Resurgence M1-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_DESTINY_DESTROYERS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.KUPIPIS_DILEMMA }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/2_1_Kupipis_Dilemma.lua b/scripts/missions/tvr/2_1_Kupipis_Dilemma.lua new file mode 100644 index 00000000000..cff872ed0a1 --- /dev/null +++ b/scripts/missions/tvr/2_1_Kupipis_Dilemma.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Kupipi's Dilemma +-- The Voracious Resurgence M2-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.KUPIPIS_DILEMMA) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_CARDIANS_DUTY }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/2_2_The_Cardians_Duty.lua b/scripts/missions/tvr/2_2_The_Cardians_Duty.lua new file mode 100644 index 00000000000..f11acbb500f --- /dev/null +++ b/scripts/missions/tvr/2_2_The_Cardians_Duty.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Cardian's Duty +-- The Voracious Resurgence M2-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_CARDIANS_DUTY) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.ZHUU_BUXUS_GAMBIT }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/2_3_Zhuu_Buxus_Gambit.lua b/scripts/missions/tvr/2_3_Zhuu_Buxus_Gambit.lua new file mode 100644 index 00000000000..ab78ce43948 --- /dev/null +++ b/scripts/missions/tvr/2_3_Zhuu_Buxus_Gambit.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Zhuu Buxu's Gambit +-- The Voracious Resurgence M2-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.ZHUU_BUXUS_GAMBIT) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.STAR_ONION_FORTUNE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/2_4_Star_Onion_Fortune.lua b/scripts/missions/tvr/2_4_Star_Onion_Fortune.lua new file mode 100644 index 00000000000..5eb8c25ca89 --- /dev/null +++ b/scripts/missions/tvr/2_4_Star_Onion_Fortune.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Star Onion Fortune +-- The Voracious Resurgence M2-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.STAR_ONION_FORTUNE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_DOLL_WHISPERER }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/2_5_The_Doll_Whisperer.lua b/scripts/missions/tvr/2_5_The_Doll_Whisperer.lua new file mode 100644 index 00000000000..a5a87d8bec5 --- /dev/null +++ b/scripts/missions/tvr/2_5_The_Doll_Whisperer.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Doll Whisperer +-- The Voracious Resurgence M2-5 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_DOLL_WHISPERER) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.DANCING_PRINCE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/3_1_Dancing_Prince.lua b/scripts/missions/tvr/3_1_Dancing_Prince.lua new file mode 100644 index 00000000000..739b0a20e5e --- /dev/null +++ b/scripts/missions/tvr/3_1_Dancing_Prince.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Dancing Prince +-- The Voracious Resurgence M3-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.DANCING_PRINCE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.CLAIDIES_CONCERN }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/3_2_Claidies_Concern.lua b/scripts/missions/tvr/3_2_Claidies_Concern.lua new file mode 100644 index 00000000000..5a89aa2b319 --- /dev/null +++ b/scripts/missions/tvr/3_2_Claidies_Concern.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Claidie's Concern +-- The Voracious Resurgence M3-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.CLAIDIES_CONCERN) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.CURILLA_UNLEASHED }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/3_3_Curilla_Unleashed.lua b/scripts/missions/tvr/3_3_Curilla_Unleashed.lua new file mode 100644 index 00000000000..a590506b663 --- /dev/null +++ b/scripts/missions/tvr/3_3_Curilla_Unleashed.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Curilla Unleashed +-- The Voracious Resurgence M3-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.CURILLA_UNLEASHED) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.RUN_EXCENMILLE_RUN }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/3_4_Run_Excenmille_Run.lua b/scripts/missions/tvr/3_4_Run_Excenmille_Run.lua new file mode 100644 index 00000000000..ce5124d1ec5 --- /dev/null +++ b/scripts/missions/tvr/3_4_Run_Excenmille_Run.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Run, Excenmille, Run! +-- The Voracious Resurgence M3-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.RUN_EXCENMILLE_RUN) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.OF_KNIGHTS_AND_ORCS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/3_5_Of_Knights_and_Orcs.lua b/scripts/missions/tvr/3_5_Of_Knights_and_Orcs.lua new file mode 100644 index 00000000000..6d1143cedd6 --- /dev/null +++ b/scripts/missions/tvr/3_5_Of_Knights_and_Orcs.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Of Knights and Orcs +-- The Voracious Resurgence M3-5 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.OF_KNIGHTS_AND_ORCS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.BEST_SERVED_COLD }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/4_1_Best_Served_Cold.lua b/scripts/missions/tvr/4_1_Best_Served_Cold.lua new file mode 100644 index 00000000000..6abb97ffa6e --- /dev/null +++ b/scripts/missions/tvr/4_1_Best_Served_Cold.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Best Served Cold +-- The Voracious Resurgence M4-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.BEST_SERVED_COLD) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.CORNELIAS_CALL_TO_ACTION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/4_2_Cornelias_Call_to_Action.lua b/scripts/missions/tvr/4_2_Cornelias_Call_to_Action.lua new file mode 100644 index 00000000000..6a021b0fb64 --- /dev/null +++ b/scripts/missions/tvr/4_2_Cornelias_Call_to_Action.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Cornelia's Call to Action +-- The Voracious Resurgence M4-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.CORNELIAS_CALL_TO_ACTION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.NAJA_THE_AMBITIOUS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/4_3_Naja_the_Ambitious.lua b/scripts/missions/tvr/4_3_Naja_the_Ambitious.lua new file mode 100644 index 00000000000..be08b76a61f --- /dev/null +++ b/scripts/missions/tvr/4_3_Naja_the_Ambitious.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Naja the Ambitious +-- The Voracious Resurgence M4-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.NAJA_THE_AMBITIOUS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.RAUBAHN_THE_BLUE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/4_4_Raubahn_the_Blue.lua b/scripts/missions/tvr/4_4_Raubahn_the_Blue.lua new file mode 100644 index 00000000000..955d1f8aa2a --- /dev/null +++ b/scripts/missions/tvr/4_4_Raubahn_the_Blue.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Raubahn the Blue +-- The Voracious Resurgence M4-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.RAUBAHN_THE_BLUE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.GHATSADS_QUANDARY }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/5_1_Ghatsads_Quandary.lua b/scripts/missions/tvr/5_1_Ghatsads_Quandary.lua new file mode 100644 index 00000000000..dd1e24198de --- /dev/null +++ b/scripts/missions/tvr/5_1_Ghatsads_Quandary.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Ghatsad's Quandary +-- The Voracious Resurgence M5-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.GHATSADS_QUANDARY) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_REVELATION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/5_2_The_Revelation.lua b/scripts/missions/tvr/5_2_The_Revelation.lua new file mode 100644 index 00000000000..6390b2a2961 --- /dev/null +++ b/scripts/missions/tvr/5_2_The_Revelation.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Revelation +-- The Voracious Resurgence M5-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_REVELATION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.TATEEYAS_WORRIES }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/5_3_Tateeyas_Worries.lua b/scripts/missions/tvr/5_3_Tateeyas_Worries.lua new file mode 100644 index 00000000000..dcbd410afc8 --- /dev/null +++ b/scripts/missions/tvr/5_3_Tateeyas_Worries.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Tateeya's Worries +-- The Voracious Resurgence M5-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.TATEEYAS_WORRIES) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_SEAGULL_PHRATRIE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/5_4_The_Seagull_Phratrie.lua b/scripts/missions/tvr/5_4_The_Seagull_Phratrie.lua new file mode 100644 index 00000000000..d6c2415476f --- /dev/null +++ b/scripts/missions/tvr/5_4_The_Seagull_Phratrie.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Seagull Phratrie +-- The Voracious Resurgence M5-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_SEAGULL_PHRATRIE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_SEA_SAGE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/5_5_The_Sea_Sage.lua b/scripts/missions/tvr/5_5_The_Sea_Sage.lua new file mode 100644 index 00000000000..bb1a3af1c89 --- /dev/null +++ b/scripts/missions/tvr/5_5_The_Sea_Sage.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Sea Sage +-- The Voracious Resurgence M5-5 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_SEA_SAGE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.SKY_MOON_INCANTRIX }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/6_1_Sky_Moon_Incantrix.lua b/scripts/missions/tvr/6_1_Sky_Moon_Incantrix.lua new file mode 100644 index 00000000000..2afb3bdd1b6 --- /dev/null +++ b/scripts/missions/tvr/6_1_Sky_Moon_Incantrix.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Sky, Moon, Incantrix +-- The Voracious Resurgence M6-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.SKY_MOON_INCANTRIX) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.NIIS_LAST_STAND }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/6_2_Niis_Last_Stand.lua b/scripts/missions/tvr/6_2_Niis_Last_Stand.lua new file mode 100644 index 00000000000..2a9311b8b0d --- /dev/null +++ b/scripts/missions/tvr/6_2_Niis_Last_Stand.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Nii's Last Stand +-- The Voracious Resurgence M6-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.NIIS_LAST_STAND) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.DANCE_OF_THE_TENGU }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/6_3_Dance_of_the_Tengu.lua b/scripts/missions/tvr/6_3_Dance_of_the_Tengu.lua new file mode 100644 index 00000000000..0a0eca31710 --- /dev/null +++ b/scripts/missions/tvr/6_3_Dance_of_the_Tengu.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Dance of the Tengu +-- The Voracious Resurgence M6-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.DANCE_OF_THE_TENGU) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.RAEBRIMMS_REBIRTH }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/7_1_Raebrimms_Rebirth.lua b/scripts/missions/tvr/7_1_Raebrimms_Rebirth.lua new file mode 100644 index 00000000000..53d35874d6b --- /dev/null +++ b/scripts/missions/tvr/7_1_Raebrimms_Rebirth.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Raebrimm's Rebirth +-- The Voracious Resurgence M7-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.RAEBRIMMS_REBIRTH) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.URAN_MAFRAN_OF_THE_MAELSTROM }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/7_2_Uran_Mafran_of_the_Maelstrom.lua b/scripts/missions/tvr/7_2_Uran_Mafran_of_the_Maelstrom.lua new file mode 100644 index 00000000000..c6ac4214328 --- /dev/null +++ b/scripts/missions/tvr/7_2_Uran_Mafran_of_the_Maelstrom.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Uran-Mafran of the Maelstrom +-- The Voracious Resurgence M7-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.URAN_MAFRAN_OF_THE_MAELSTROM) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.KORU_MORUS_HYPOTHESIS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/7_3_Koru_Morus_Hypothesis.lua b/scripts/missions/tvr/7_3_Koru_Morus_Hypothesis.lua new file mode 100644 index 00000000000..44ba2611340 --- /dev/null +++ b/scripts/missions/tvr/7_3_Koru_Morus_Hypothesis.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Koru-Moru's Hypothesis +-- The Voracious Resurgence M7-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.KORU_MORUS_HYPOTHESIS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.ALTENNIA_BURNS_BRIGHT }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/7_4_Altennia_Burns_Bright.lua b/scripts/missions/tvr/7_4_Altennia_Burns_Bright.lua new file mode 100644 index 00000000000..3b97438e423 --- /dev/null +++ b/scripts/missions/tvr/7_4_Altennia_Burns_Bright.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Altennia Burns Bright +-- The Voracious Resurgence M7-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.ALTENNIA_BURNS_BRIGHT) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.MAAT_ON_THE_RAMPAGE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/8_1_Maat_on_the_Rampage.lua b/scripts/missions/tvr/8_1_Maat_on_the_Rampage.lua new file mode 100644 index 00000000000..e52b6f70682 --- /dev/null +++ b/scripts/missions/tvr/8_1_Maat_on_the_Rampage.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Maat on the Rampage +-- The Voracious Resurgence M8-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.MAAT_ON_THE_RAMPAGE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.NOT_JUST_A_PRETTY_FACE }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/8_2_Not_Just_a_Pretty_Face.lua b/scripts/missions/tvr/8_2_Not_Just_a_Pretty_Face.lua new file mode 100644 index 00000000000..f8f8337292c --- /dev/null +++ b/scripts/missions/tvr/8_2_Not_Just_a_Pretty_Face.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Not Just a Pretty Face +-- The Voracious Resurgence M8-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.NOT_JUST_A_PRETTY_FACE) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.DELKFUTT_THE_GREAT }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/8_3_Delkfutt_the_Great.lua b/scripts/missions/tvr/8_3_Delkfutt_the_Great.lua new file mode 100644 index 00000000000..4ab16b11631 --- /dev/null +++ b/scripts/missions/tvr/8_3_Delkfutt_the_Great.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Delkfutt the Great +-- The Voracious Resurgence M8-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.DELKFUTT_THE_GREAT) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.OSHASHAS_VIOLATION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/9_1_Oshasha_Violation.lua b/scripts/missions/tvr/9_1_Oshasha_Violation.lua new file mode 100644 index 00000000000..6f8740db5b3 --- /dev/null +++ b/scripts/missions/tvr/9_1_Oshasha_Violation.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Oshasha Violation +-- The Voracious Resurgence M9-1 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.OSHASHAS_VIOLATION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.PHANTASMIC_HEROES }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/9_2_Phantasmic_Heroes.lua b/scripts/missions/tvr/9_2_Phantasmic_Heroes.lua new file mode 100644 index 00000000000..78bfb59b142 --- /dev/null +++ b/scripts/missions/tvr/9_2_Phantasmic_Heroes.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Phantasmic Heroes +-- The Voracious Resurgence M9-2 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.PHANTASMIC_HEROES) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.SKOKKR_UNDRBORNS_TEMPTATION }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/9_3_Skokkr_Undrborns_Temptation.lua b/scripts/missions/tvr/9_3_Skokkr_Undrborns_Temptation.lua new file mode 100644 index 00000000000..f2364e16a4e --- /dev/null +++ b/scripts/missions/tvr/9_3_Skokkr_Undrborns_Temptation.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- Skokkr Undrborn's Temptation +-- The Voracious Resurgence M9-3 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.SKOKKR_UNDRBORNS_TEMPTATION) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.THE_PRIME_WEAPONS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/9_4_The_Prime_Weapons.lua b/scripts/missions/tvr/9_4_The_Prime_Weapons.lua new file mode 100644 index 00000000000..41ba93ab841 --- /dev/null +++ b/scripts/missions/tvr/9_4_The_Prime_Weapons.lua @@ -0,0 +1,26 @@ +----------------------------------- +-- The Prime Weapons +-- The Voracious Resurgence M9-4 +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.THE_PRIME_WEAPONS) + +mission.reward = +{ + nextMission = { xi.mission.log_id.TVR, xi.mission.id.tvr.TO_MOVALPOLOS }, +} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission diff --git a/scripts/missions/tvr/Epilogue.lua b/scripts/missions/tvr/Epilogue.lua new file mode 100644 index 00000000000..ba5926a4da5 --- /dev/null +++ b/scripts/missions/tvr/Epilogue.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Epilogue Quests +-- The Voracious Resurgence MEpilogue +----------------------------------- +-- TODO: Add correct !addmission command +----------------------------------- + +local mission = Mission:new(xi.mission.log_id.TVR, xi.mission.id.tvr.EPILOGUE) + +mission.reward = {} + +mission.sections = +{ + { + check = function(player, currentMission, missionStatus, vars) + return currentMission == mission.missionId + end, + + -- TODO: Add zones and interactions + }, +} + +return mission