From 9292634f2f8d71a53879ff07e1330c671b207d51 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 6 Jul 2026 23:05:04 -0400 Subject: feat: split the concept of hidden and impassable exits. add player_flag for discovered hidden exits. --- internal/admin/static/map.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'internal/admin/static') diff --git a/internal/admin/static/map.js b/internal/admin/static/map.js index 0dab98c..8080451 100644 --- a/internal/admin/static/map.js +++ b/internal/admin/static/map.js @@ -253,10 +253,12 @@ function renderMap(data) { if (!fr || !tr) return; var x1 = fr.x * CELL + CELL/2, y1 = fr.y * CELL + CELL/2; var x2 = tr.x * CELL + CELL/2, y2 = tr.y * CELL + CELL/2; + if (l.always_blocked) { + g += ''; + return; + } if (l.hidden) { - // Hidden course-link exit: distinct color (map_course, ~#1B6FC0) and - // tighter dashed arrow style. - g += ''; + g += ''; return; } var c = blendColors(fr.color, tr.color).replace('#',''); @@ -1232,15 +1234,18 @@ function renderExitsSection(r) { var setFlags = (typeof exit === 'object' && exit.set_flags) ? exit.set_flags : null; var setPlayerFlags = (typeof exit === 'object' && exit.set_player_flags) ? exit.set_player_flags : null; var hidden = (typeof exit === 'object' && exit.hidden) ? exit.hidden : false; - var isConditional = !!(cond || bmsg || setFlags || setPlayerFlags || hidden); + var alwaysBlocked = (typeof exit === 'object' && exit.always_blocked) ? exit.always_blocked : false; + var isConditional = !!(cond || bmsg || setFlags || setPlayerFlags || hidden || alwaysBlocked); var isBidi = mapData && mapData.links && mapData.links.some(function(l) { return l.bidirectional && ((l.from === r.id && l.to === target) || (l.from === target && l.to === r.id)); }); h += '
'; h += '' + d + ''; h += '# ' + target + ''; + if (alwaysBlocked) h += 'Impassable'; if (bmsg) h += 'Blocked: ' + esc(bmsg) + ''; if (cond) h += 'Conditional'; + if (hidden) h += 'Hidden'; h += ''; if (isBidi) h += ''; h += ''; @@ -1271,6 +1276,7 @@ function editExitCondition(dir) { var setFlags = exit.set_flags || null; var setPlayerFlags = exit.set_player_flags || null; var hidden = exit.hidden || false; + var alwaysBlocked = exit.always_blocked || false; var flagsStr = ''; if (setFlags) flagsStr = Object.keys(setFlags).map(function(k) { return k + '=' + setFlags[k]; }).join(', '); @@ -1290,6 +1296,7 @@ function editExitCondition(dir) { h += '
'; h += '
'; h += '
'; + h += '
'; h += '
'; h += ''; @@ -1429,6 +1436,8 @@ function saveExitCondition() { exit.blocked_message = (bmsg && bmsg.value) ? bmsg.value : ''; var hiddenEl = document.getElementById('exitHidden'); exit.hidden = hiddenEl ? hiddenEl.checked : false; + var alwaysBlockedEl = document.getElementById('exitAlwaysBlocked'); + exit.always_blocked = alwaysBlockedEl ? alwaysBlockedEl.checked : false; var flagsStr = document.getElementById('exitFlags'); var pflagsStr = document.getElementById('exitPFlags'); exit.set_flags = parseFlagInput(flagsStr ? flagsStr.value : ''); @@ -1475,6 +1484,10 @@ function clearExitCondition() { if (ef) ef.value = ''; var pf = document.getElementById('exitPFlags'); if (pf) pf.value = ''; + var hx = document.getElementById('exitHidden'); + if (hx) hx.checked = false; + var ab = document.getElementById('exitAlwaysBlocked'); + if (ab) ab.checked = false; } function parseFlagInput(val) { -- cgit v1.2.3