Diancecht's Waterfall
Gardens location (configurable city, default: main village) featuring Druid Diancecht behind hidden waterfall. Two services: Resurrection (pay 10 gems default to revive dead player - target redirected from Detention/Graveyard to newday with 100 deathpower refunded, placer gets +15 alignment and +10 house points, once per day via has pref), or Transfer Favor (give your deathpower to dead player, grants up to +10 alignment based on amount transferred). Access gardens → "Diancecht's Waterfall". Pass through vines to clearing, discover waterfall with opening behind it, jump rock to rock, enter dimly lit cave with fire and tall Druid. He welcomes you asking if you're Airmid then realizes you're not his daughter. One use per day enforced - if you bash him (visit again same day), he throws you out mumbling "Airmid. where are you?" Resurrection requires gem payment, shows fuzzy search of dead players by name with level display. Transfer favor lets you donate deathpower to corpses. Where you encounter an Irish druid hiding behind a waterfall in the gardens who is clearly waiting for someone named Airmid and will help you resurrect dead players or transfer death favor but only once per day or else he gets violent and literally hurls you from behind the waterfall.
Location & Access
Where: Diancecht's Waterfall (gardens location)
City Location: Configurable via waterloc setting (default: villagename/main village)
Navigation: Gardens → "Explore" section → "Diancecht's Waterfall" → runmodule.php?module=dianfall&op=enter
Requirement: Must be in correct city (waterloc setting)
Auto-Update: If village renamed, waterloc setting updates via changesetting hook
The Entrance
Discovery Scene:
- "Passing and weaving through the entangled vines of the Gardens, you come upon a clearing."
- "At one end, you discover a thick patch of shrubbery; at the other, you find a waterfall."
- "Behind the waterfall, you can just make out a small opening."
- "Dashing over, you jump from rock to rock, no bounds to your agility."
- "You wander inside, and see a dimly lit fire."
- "Next to the fire, a tall Druid stands."
First Visit (has = 0):
- "Welcome, my child. Oh. you are not Airmid. who are you, and what do you wish of me?"
- Two service options appear
Second Visit Same Day (has = 1):
- "You step forward, seeing the familiar face of Diancecht."
- "With his quickness, he bashes you over the head, and hurls you from behind the Waterfall."
- "He casts a glance at you, and then sighs, mumbling under his breath. 'Airmid. where are you?'"
- NO services available (kicked out)
Service 1: Resurrection
Requirements (Admin Setting ressing = 1):
- 10 gems (default gem setting, configurable)
- Target must be dead (alive=0)
- Haven't used Diancecht today (has pref = 0)
Process:
- Select "Resurrection" from wishes menu
- Diancecht introduces himself: "My name is Diancecht. and I am the Healer of the Gods."
- Explains resurrection costs gems
- If you have enough gems: Enter target's name (fuzzy search)
- System searches for dead players matching name
- Displays table with Name and Level (up to 25 matches)
- Select target from list
- Confirm resurrection
Resurrection Effects:
- Cost: -10 gems (default) from resurrector
- Target:
- A fresh one-time
restokenis generated and stored against the target's account — this is a randomly-generated string, not a simple yes/no flag - who pref set to resurrector's name
- Redirected from Detention/Graveyard/Valhalla to resurrection screen
- Flash of light: "It seems that one of your little friends has decided to resurrect you. Their name is [Name]. I suggest that ye thank them."
- Button: "Continue" → newday.php?resurrection=true&dianfalltoken=[the exact token that was issued]
- On newday, the target only gets a +100 deathpower refund if the token in the URL they actually clicked matches the stored
restokenand the request carriesresurrection=true— an unrelated newday rollover, or a resurrection triggered by tunnel.php/phoenix.php/valhalla.php's own separate mechanisms, does not trip this refund
- A fresh one-time
- Resurrector:
- +15 alignment (if alignment module active)
- +10 house points
- has pref set to 1 (daily limit)
- News announcement: "[Your Name] has most graciously talked with Bellatrix. [Target Name] is to be resurrected!"
If Not Enough Gems:
- Diancecht scoffs: "I am sorry, but you do not have the required gems for this action. you need %s more."
- No service provided
Service 2: Transfer Favor
Requirements (Admin Setting trans = 1):
- You have deathpower > 0
- Target must be dead (alive=0)
- Haven't used Diancecht today (has pref = 0)
Process:
- Select "Transfer Favor" from wishes menu
- Diancecht checks your favor: "You have decided to part with some of your Favor of Bellatrix. I see. I estimate, that you have a total of %s Favor."
- If you have 0 favor: "I am sorry. but my services are of no use to you. Bellatrix would be quite displeased with me." (rejected)
- If you have favor: Enter target's name (fuzzy search)
- System shows dead players with Name and Favor columns (up to 25)
- Select target
- Enter amount to transfer
- Confirm transfer
Transfer Effects:
- If amount > your deathpower: Capped at your current deathpower
- Your deathpower -= amount
- Target's deathpower += amount
- Alignment gain: +(amount / 10), capped at +10 maximum
- has pref set to 1 (daily limit)
- Confirmation: "You have transfered %s Favor to your target, now they have %s favor."
- News: "[Your Name] has recieved permission from Bellatrix to send [Target Name] %s favor!"
Daily Limit System
has Preference:
- Tracks if you've used ANY Diancecht service today
- Set to 1 when you use Resurrection OR Transfer Favor
- Resets to 0 at newday hook
- If has = 1, Diancecht bashes you and throws you out
Limitation Logic:
- Can use either service once per day
- Can't use both services same day
- Can't use same service twice same day
- Prevents service spam
Alignment Integration
Resurrection: +15 alignment (fixed)
Transfer Favor: +(amount / 10) alignment, max +10
- Transfer 10 favor = +1 alignment
- Transfer 50 favor = +5 alignment
- Transfer 100 favor = +10 alignment
- Transfer 200 favor = +10 alignment (capped)
Requires Alignment Module: align() function called if module active
House Points Integration
Resurrection Only: +10 house points
Function: awardhpoints(10) via housepoints/pointslib.php
Rewards: Resurrector's House gets 10 points
Transfer Favor: NO house points
Redirect Mechanics
Resurrection Interception:
- footer-shades hook: If a
restokenis pending for you, redirect to dianfall intvene - footer-graveyard hook: Same check — pending
restokenredirects to dianfall intvene - footer-runmodule hook: If module=valhalla and a
restokenis pending, redirect - Prevents dead player from seeing Detention/Graveyard/Valhalla
- Shows resurrection message with resurrector's name
Newday Compensation — Token-Gated, Not a Simple Flag:
- Newday normally costs deathpower; the resurrection refund is meant to offset that loss
- The refund only fires if the newday request is flagged
resurrection=trueand carries adianfalltokenthat exactly matches the one-timerestokenissued to this account - On a match: +100 deathpower is granted and the
restokenis cleared so it can't be reused - On no match (an ordinary day rollover, or any newday call that isn't this specific resurrection's own redirect): nothing happens, and the pending token is left untouched for a legitimate future match
Why it changed: an earlier version of this module used a plain boolean res pref instead of a token. Because the newday hook fires on every newday call — including ordinary day rollovers and the unrelated resurrection flows in tunnel.php, phoenix.php, and valhalla.php — a bare "were you resurrected, yes/no" flag could pay out the +100 deathpower refund on any of those triggers, without a genuine Diancecht resurrection having actually happened. The current one-time, per-resurrection token (checked with hash_equals() against the exact URL clicked) closes that off structurally, mirroring a similar fix applied to tunnel.php's escape-token flow.
Admin Settings
Module Settings:
- trans: Allow favor transfers? (bool, default: 1)
- ressing: Allow resurrections? (bool, default: 1)
- gem: Gem cost for resurrection (int, default: 10)
- waterloc: Location of waterfall (location, default: villagename)
User Preferences:
- restoken: One-time token staking a pending resurrection favor-refund, matched against the exact URL the player clicks (string, default: empty = no refund pending)
- has: Has user used Diancecht today? (bool, default: 0)
- who: Who last resurrected this user (text, default: "")
Search System
Fuzzy Name Matching:
- Takes input name: "bob"
- Creates search pattern: "%b%o%b%" (each char surrounded by %)
- SQL: WHERE name LIKE '%b%o%b%' OR login LIKE '%b%o%b%'
- Matches partial names (e.g., "bob", "Bobby", "Robby")
- Limit: 25 results maximum
Display Table:
- Resurrection: Shows Name, Level
- Transfer Favor: Shows Name, Favor (current deathpower)
- Clickable links to select target
Lore & Flavor
Diancecht:
- Irish/Celtic god of healing (real mythology)
- "Healer of the Gods" (self-introduction)
- Waiting for daughter Airmid (also real mythology)
- Mistakes you for Airmid initially
- Becomes violent if you bother him twice
Airmid References:
- First visit: "Oh. you are not Airmid."
- Second visit: "Airmid. where are you?" (mumbling)
- Lore: Airmid was Diancecht's daughter, also a healer
- Implies she's missing/left him
Waterfall Aesthetics:
- Hidden behind vines in gardens
- Rock-jumping required (agility flavor)
- Dimly lit cave with fire
- Mysterious/sacred location
Strategy & Usage
When to Resurrect:
- Friend died and wants to skip Detention
- You have spare gems (10 default cost)
- Want +15 alignment boost
- Want +10 house points for your House
- Emergency resurrection for important player
When to Transfer Favor:
- Dead friend needs deathpower for resurrection
- You have excess favor to spare
- Want moderate alignment gain (up to +10)
- Supporting house member's graveyard activities
Cost Analysis:
- Resurrection: 10 gems = ~1000-2000 gold value (expensive)
- Benefit: +15 alignment, +10 house points, friend skips Detention
- Transfer: Free (just your favor), gain alignment
Diancecht's Waterfall: where you weave through entangled vines in the gardens to discover a clearing with a waterfall that has a small opening behind it so naturally you dash over and jump from rock to rock with no bounds to your agility because apparently you're a parkour expert now and you wander into a dimly lit cave with a fire where a tall Irish druid stands waiting for someone named Airmid who is definitely not you but he welcomes you anyway as "my child" before realizing his mistake and asking what you want. If this is your first visit today he offers two services: resurrection where he introduces himself as Diancecht the Healer of the Gods and explains you can resurrect a dead friend for ten gems which causes him to mint a fresh one-time token and stake it against their account, so when they try to visit Detention or the Graveyard or Valhalla they get redirected to a flash of light message saying "one of your little friends has decided to resurrect you" with your name attached and a suggestion they thank you, then they click through to newday carrying that exact token in the URL, and only if it matches the one Diancecht issued do they get the hundred deathpower refund to compensate for newday's usual penalty (a plain yes/no flag used to do this job and could be tricked into paying out on any unrelated newday, which is why it's a single-use matched token now) while you the resurrector get fifteen alignment points and ten house points and a news announcement saying you graciously talked with Bellatrix about bringing them back. Alternatively you can choose Transfer Favor where Diancecht traces a finger along your chest in a somewhat questionable manner and tells you how much favor you have then lets you search for dead players and donate your deathpower to them granting you alignment based on amount divided by ten capped at plus ten maximum so transferring one hundred favor gives you ten alignment and the target gets the deathpower added to their total with a news announcement about Bellatrix granting permission. Either way after you use any service the has preference gets set to 1 and if you try to visit Diancecht again the same day he recognizes you immediately and with his quickness bashes you over the head and hurls you from behind the waterfall while mumbling sadly about where Airmid has gone, enforcing the strict once-per-day limit on services. The module hooks into footer-shades, footer-graveyard, and footer-runmodule to intercept resurrected players and redirect them, uses gardens hook to add navigation in the correct city based on waterloc setting which auto-updates if village name changes via changesetting hook, and at newday resets the has preference to 0 while also checking whether the newday request is a genuine resurrection carrying the matching one-time token, granting that one hundred deathpower compensation only on a real match so resurrection doesn't end up costing favor and ordinary day rollovers can't be mistaken for one. The fuzzy name search creates a pattern with percent signs around each character so searching "bob" becomes "%b%o%b%" matching partial names in SQL LIKE queries with a twenty-five result limit displayed in tables showing either name and level for resurrection or name and favor for transfers, and the whole system integrates with alignment module calling align() function and house points calling awardhpoints() for resurrections only while transfers just give alignment scaling with the amount donated. It's basically a magical Irish druid running a resurrection service out of a waterfall cave who is clearly depressed about his missing daughter Airmid and will violently throw you out if you bother him more than once per day.