Skip to content

[lua] Add Campaign Teleport: Xarcabard [S] - #11209

Open
Davraena wants to merge 4 commits into
LandSandBoat:basefrom
Davraena:feature/xarcabard-campaign-teleport
Open

[lua] Add Campaign Teleport: Xarcabard [S]#11209
Davraena wants to merge 4 commits into
LandSandBoat:basefrom
Davraena:feature/xarcabard-campaign-teleport

Conversation

@Davraena

@Davraena Davraena commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Implements campaign teleports. Wenonah (Windurst's Campaign Arbiter) teleports to Xarcabard [S] for Allied Notes; Xarcabard has its own 4 return-trip arbiters, one per campaign-allegiance state.
Position, fee, and event/option encoding for the outgoing teleport confirmed against a real capture (credit: Wiggo, https://www.youtube.com/watch?v=png3EUxWE5E).
Fee formula (base cost by zone distance + control cost + foreign-arbiter surcharge) from https://ffxiclopedia.fandom.com/wiki/Allied_Notes.

Steps to test

  • !addkeyitem BRONZE_RIBBON_OF_SERVICE (return arbiters are gated on holding this or higher)
  • !addcurrency allied_notes 200 (need enough to cover the fees)
  • !godmode suggested -- Xarcabard has aggressive mobs (Amphiptere) near the arbiters
  • Talk to Wenonah in Windurst Waters [S], select Xarcabard, confirm the fee is charged and you land at the right spot
  • At Xarcabard, talk to whichever return arbiter is visible (or use !npchere on the other three), confirm the return trip works
  • Confirm canceling out of either menu without choosing does NOT charge Allied Notes or teleport you

Wenonah (outbound) plus Xarcabard's own 4 return arbiters. Position,
fee, and event/option encoding confirmed against a real capture
(Wiggo). Proof of a pattern meant to extend to all 20 WOTG
destinations and all 3 nations' outbound arbiters; this PR wires up
one destination and one nation.
@github-actions

Copy link
Copy Markdown

✨ Hello and thanks for the PR! ✨

🤖: This is a friendly automated reminder that the maintainers won't look at your PR until you've properly completed all of the checkboxes in the pre-filled template.

local entity = {}

local defaultEventId = 452
local teleportEventId = 456

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please no. Create a table in the global campaign teleport file with the npc name as a key and define the events in it. Like we do in other places.

Comment thread scripts/globals/campaign_teleport.lua Outdated
@@ -0,0 +1,212 @@
-----------------------------------

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have a teleports folder. this file should go there

Move campaign_teleport.lua into scripts/globals/teleports/, and key
zoneArbiterEvents by npc:getName() instead of passing event ids as
function params -- matches eschan_portals.lua's portalData shape.
Confirmed in-client: picking "No" sends option 0, not the cancel
sentinel, so it fell through the previous check and teleported anyway.
Checking option == 1 (the only real confirm value) rejects both.
The pointer to campaign_teleport.lua's zoneArbiterEvents table is
already obvious from the code below it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants