JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
/* ========================================================================== */ /* AUDIO INITIALIZATION (音频资源注册) */ /* ========================================================================== */ /* --- BGM (背景音乐) --- */ <<cacheaudio "bgm_theme" "audio/bgm/theme.mp3">> <<cacheaudio "bgm_day" "audio/bgm/day.mp3">> <<cacheaudio "bgm_night" "audio/bgm/night.mp3">> /* --- SFX (音效) --- */ <<cacheaudio "sfx_camera" "audio/sfx/camera.mp3">> /* 相机快门声 */ <<cacheaudio "sfx_door" "audio/sfx/door.mp3">> /* 开门/关门声 */ <<cacheaudio "sfx_click" "audio/sfx/click.mp3">> /* UI 点击声 (Y2K电子音) */ <<cacheaudio "sfx_money" "audio/sfx/money.mp3">> /* 金币入账声 */ <<cacheaudio "sfx_pay" "audio/sfx/pay.mp3">> /* 购物结账声 */
/* ========================================================================== */ /* STORY INITIALIZATION (游戏全局变量初始化) */ /* Author: 河狸眠 */ /* Version: 1.0 */ /* Last Updated: 2026-03-05 */ /* ========================================================================== */ /* ========================================================================== */ /* 1. 游戏系统与主线进程 (Game System & Progress) */ /* ========================================================================== */ <<set $game = { title: "月華镇绮事录", version: "v0.1.0", author: "河狸眠", /* 流程控制标记 */ isStarted: false, /* 是否点击了开始游戏 (控制时间显示) */ customizationDone: false, /* 是否完成捏人 */ introDone: false, /* 是否完成了导入剧情 (控制页头和地图) */ /* 核心主线数据 */ wish: "未定", activeFairy: "none", /* 位置追踪 (三层架构) */ zone: "residential", /* 大区 (如: residential, commercial) */ location: "home", /* 建筑/枢纽 (如: home, school_gate) */ subLocation: "home_bed", /* 精确位置 (如: home_bath, school_class) */ }>> /* 任务与路线进度追踪器 (0表示未开启/第一步) */ <<set $questProgress = { "shrine_restore": 0, /* 文化分支:山中小祠复兴 */ "kagura_dance": 0, /* 文化分支:神乐舞 */ "town_revival": 0, /* 经济分支:小镇复兴 */ "solo_idol": 0, /* 演艺分支:单人偶像 */ "cyber_cult": 0, /* 网络分支:赛博邪教 */ "shadow_crisis": 0, /* 神秘分支:暗影危机 */ }>> /* ========================================================================== */ /* 2. 玩家基础档案与家庭 (Player Profile & Family) */ /* ========================================================================== */ <<set $step = "SurnameSelection">> /* 当前捏人步骤片段名 */ <<set $player = { lastName: "月川", firstName: "有栖", nickname: "爱丽丝", age: 16, gender: "女", birthday: { month: 4, day: 10 }, zodiac: "白羊座", /* 天生身体特征 (基因数据,用于学生证显示和不可逆的判定) */ traits: { eyeShape: "圆眼", eyeColor: "绿色", lipShape: "标准", eyebrowShape: "平眉", skinTone: "白皙", bodyType: "匀称", height: "标准 (160cm)", cupSize: "B", /* 初始发型设定 (捏人时确定的素体) */ baseHairColor: "黑色", baseHairStyle: "及肩直发", }, }>> <<set $family = { father: { name: "诚 (Makoto)", age: 45, job: "公司职员 (入赘)" }, mother: { name: "雅子 (Masako)", age: 43, job: "全职主妇" }, aunt: { name: "千夏 (Chinatsu)", age: 32, job: "月華镇美发师" }, sibling: { type: "none", name: "", age: 22, job: "大四学生 (就活中)" }, }>> <<set $fairy = { bond: 0, /* 羁绊值 0-100 */ level: 1, /* 羁绊等级,可用于解锁商店层级 */ shopUnlocked: false /* 是否已解锁妖精商店 */ }>> /* ========================================================================== */ /* 3. 玩家动态状态与资源 (Dynamic Stats & Resources) */ /* ========================================================================== */ /* 物理身体数据 (去理发店/美容院才能改变,或者随时间自然变化) */ <<set $body = { hair: { color: "黑色", dyeFading: 0, /* 🌟 物理长度数据 (每天独立生长 0.05cm) */ frontLength: 8, /* 刘海长度: 3=眉上, 8=齐眉, 12=及颧骨, 15=及下巴 */ sideLength: 15, /* 鬓角长度: 5=耳上, 10=及下巴, 20=及锁骨 */ length: 30, /* 后发总长度 */ stage: "及肩", backCut: "直发", baseFront: "齐刘海", baseSide: "内收中鬓角", }, mods: { nails: "素甲", tattoos: [], piercings: [], }, }>> /* 每日状态与妆造 (每天早上在梳妆台前自己弄,洗澡/睡觉后重置) */ <<set $daily = { /* 核心数据与动态上限 */ energy: 100, maxEnergy: 100, mood: 70, maxMood: 100, stress: 0, maxStress: 100, cleanliness: 100, maxCleanliness: 100, mana: 0, maxMana: 100, lust: 0, maxLust: 100, /* 每日状态标记 (跨天重置) */ hasTardiedToday: false, allergyTriggered: false, tookAllergyMed: false, classTardy: {}, /* 🌟 每日妆造 (梳妆台决定,受限于物理长度) */ style: { /* 头发临时造型 */ hairFront: "齐刘海", /* 刘海形状 */ hairFrontAcc: "无", /* 刘海修饰 (发夹) */ hairSide: "内收中鬓角", /* 鬓角形状 */ hairSideAcc: "无", /* 鬓角修饰 (挽耳后/编发) */ hairTie: "披散", /* 后发绑发 */ messiness: "自然", /* 服装与饰品 */ outfit: "无", top: "school_top_summer", bottom: "school_skirt_normal", bra: "basic_bra_white", panties: "basic_panties_white", socks: "basic_socks_black", shoes: "basic_shoes_loafer", accessories: [], accLayers: {}, makeup: "素颜", contacts: "none", }, }>> <<set $wallet = { yen: 5000, gachaCoins: 0, moonShards: 0, hasBicycle: false, }>> <<set $inventory = { consumables: { "boss_coffee": 2, "family_mart_onigiri": 1, }, clothes: [ /* --- 🏫 校园系列 --- */ "school_top_summer", "school_top_winter", "school_skirt_normal", "gym_top", "gym_bloomers", /* --- 👙 基础内衣袜鞋 --- */ "basic_bra_white", "basic_panties_white", "basic_socks_black", "basic_shoes_loafer", /* --- 🛁 居家与洗浴 --- */ "bath_towel", /* 浴巾 (作为连体套装 outfit,穿上后覆盖上下装) */ "pajamas_cute_pink", /* 粉色可爱睡衣 (作为连体套装 outfit) */ /* --- 👕 周末便服 --- */ "casual_top_tshirt", /* 基础白T恤 (top) */ "casual_bottom_shorts" /* 牛仔短裤 (bottom) */ ], keyItems: [ "room_key", "flip_phone", ], }>> /* ========================================================================== */ /* 4. 技能、气质与社会风评 (Skills, Persona & Reputation) */ /* ========================================================================== */ <<set $persona = { academics: 10, /* 学识:考试、学生会、高级魔导书 */ streetSmart: 10, /* 涉世:忽悠门卫、暗网、打工应对 */ etiquette: 10, /* 礼仪:长辈好感、高级餐厅打工 */ sexAppeal: 10, /* 性感:吸引异性、色诱选项 */ insight: 10, /* 灵视:看到妖怪、炼金成功率 */ rebellion: 0, /* 叛逆:不良路线、顶撞老师、撬锁 */ }>> <<set $skills = { daily: { makeup: { exp: 0, level: 0, title: "素面朝天" }, fashion: { exp: 0, level: 0, title: "土妹子" }, photography: { exp: 0, level: 0, title: "手抖星人" }, /* 🌟 核心重构:烹饪与手工技能 */ cooking: { exp: 0, level: 0, title: "厨房杀手", craftedCount: {} /* 记录每种料理的制作次数,用于经验衰减 */ }, crafting: { exp: 0, level: 0, title: "手残党", craftedCount: {} }, sports: { exp: 0, level: 0, title: "运动白痴" }, gaming: { exp: 0, level: 0, title: "游戏菜鸟" } }, magic: { tarot: { exp: 0, level: 0, title: "神棍" }, /* 塔罗占卜 */ alchemy: { exp: 0, level: 0, title: "炸炉专家", craftedCount: {} }, /* 炼金术 */ combat: { exp: 0, level: 0, title: "战五渣" }, /* 魔法战斗 */ charm: { exp: 0, level: 0, title: "毫无魅力" } /* 魅惑魔法 */ }, adult: { seduction: { exp: 0, level: 0, title: "青涩" }, /* 诱惑技巧 */ oralTech: { exp: 0, level: 0, title: "生疏" }, /* 口技 */ riding: { exp: 0, level: 0, title: "笨拙" }, /* 骑乘 */ endurance: { exp: 0, level: 0, title: "敏感" }, /* 耐力 */ massage: { exp: 0, level: 0, title: "乱摸" } /* 按摩/调情 */ } }>> /* ========================================================================== */ /* 4.5 核心路线与社会阶层 (Core Routes & Social Tiers) */ /* ========================================================================== */ /* 🏫 1. 学校系统 (已完善) */ <<set $school = { attendance: 100, tardy: 0, grades: { math: 50, literature: 50, english: 50, science: 50, history: 50 }, club: "none", clubRank: 0, /* 🌟 学校表现具体指标 (School Metrics) */ metrics: { demerits: 0, /* 记过数 (迟到、没穿校服、逃课增加) */ intimidation: 0, /* 威慑力 (打架、顶撞老师、硬闯校门增加) */ academicIndex: 0, /* 学力指数 (考试排名前列、课堂完美答题增加) */ socialFame: 0 /* 社交声望 (参与社团、午休八卦、SNS粉丝转化) */ }, /* 阶级评定结果 */ tier: 3, /* 金字塔层级:1(顶层), 2(中层), 3(底层), 4(边缘) */ tierName: "😐 阶级底层", title: "普通学生" }>> /* 💼 2. 职场与打工系统 (Career System) */ <<set $career = { unpaidWages: 0, /* 🌟 待结薪水 (周末才能领) */ metrics: { shiftsWorked: 0, /* 总打工次数 */ totalEarned: 0, /* 累计赚取薪水 */ customerPraise: 0, /* 顾客好评数 */ mistakesMade: 0 /* 失误次数 */ }, /* 🌟 记录每个职业的录用状态、等级和打工次数 */ jobs: { convenience: { hired: false, rank: 0, shifts: 0 }, restaurant: { hired: false, rank: 0, shifts: 0 }, pharmacy: { hired: false, rank: 0, shifts: 0 } }, tier: 4, tierName: "🔰 职场小白", title: "无业游民" }>> /* 🎤 3. 演艺与网红系统 (Idol & Influencer System) */ <<set $idol = { agency: "none", /* 所属事务所 */ metrics: { publicSNS: 0, /* 表网粉丝数 (推特/Ins) */ hardcoreFans: 0, /* 死忠粉/狂热粉数量 */ stageCount: 0, /* 登台演出/直播次数 */ scandals: 0, /* 绯闻/炎上次数 (被拍到和男生逛街、出入风俗店) */ sexyRep: 0, /* 擦边风评:在表网发性感照增加,过高会引来奇怪的私信或影响校园风评 */ onlyFans: 0, /* 里网订阅数 */ ofPending: 0 /* OF 待结收益 (周末结算并扣除手续费) */ }, tier: 4, tierName: "📱 查无此人", title: "素人" /* 称号演变:素人 -> 擦边球博主 / 地下偶像 -> 闪耀新星 -> 国民级偶像 */ }>> /* 🔮 4. 魔法与里世界系统 (Magic & Underground System) */ <<set $magic = { guildRank: "F", /* 公会注册等级 */ metrics: { undergroundBBS: 0, /* 暗网声望 (里世界论坛影响力) */ monstersKilled: 0, /* 击杀普通暗影怪数量 */ bossesDefeated: 0, /* 击败干部/Boss数量 */ missionsDone: 0 /* 完成的里世界委托数 */ }, tier: 0, tierName: "✨ 未觉醒", title: "普通人类" /* 称号演变:普通人类 -> 见习魔女 -> 暗影猎手 -> 月光下的处刑人 */ }>> /* 🔞 5. 堕落与风俗系统 (Adult Life System) */ <<set $adultLife = { metrics: { depravity: 0, /* 核心堕落值 */ exhibitionCount: 0, /* 露出被目击次数 (真空上学、天台裸露) */ smCount: 0, /* 参与SM行为次数 */ prostitution: 0, /* 援助交际/风俗店接客次数 */ publicSex: 0 /* 公共场所H次数 */ }, tier: 4, tierName: "🌸 纯洁无瑕", title: "清纯少女" /* 称号演变:清纯少女 -> 充满好奇的碧池 -> 惹人怜爱的玩具 -> 彻底沉沦的公厕 */ }>> /* ========================================================================== */ /* 5. 身体开发与绝对记录 (Body Tuning & Absolute Records) */ /* ========================================================================== */ /* 身体敏感度与XP (纯生理数据) */ <<set $bodyTuning = { sensitivity: { mouth: 0, chest: 0, clit: 0, vaginal: 0, anal: 0 }, fetish: { exhibition: 0, masochism: 0, service: 0, creampie: 0 }, slutLevel: 0, addiction: 0, wombState: "clean", }>> /* 绝对记录 (只记录发生过的事实,不参与日常数值计算) */ <<set $records = { virginity: { vaginal: true, anal: true, oral: true, firstKiss: true }, partners: {}, /* 发生过关系的NPC列表及次数 */ milestones: [], /* 达成的重大成就 (如:第一次打工、第一次击杀Boss) */ blackmail: [], /* 被人抓住的把柄/黑照 */ receipts: [], /* 购物小票收集 */ photos: [], /* 存放拍下的照片快照 */ }>> /* ========================================================================== */ /* 6. 环境与系统数据 (Environment & Systems) */ /* ========================================================================== */ <<set $Time = { year: 2000, month: 4, day: 1, hour: 15, minute: 0, era: { name: "星和", year: 8 }, playDay: 1, playWeek: 1, weekday: 7, season: "spring", trimester: "1学期", weather: "moonfall", moonPhase: "new_moon", totalMinutes: 0, }>> /* 房间当前装备状态 (使用英文 ID) */ <<set $room = { slots: { desk: "basic_desk", chair: "basic_chair", pcSetup: "basic_pc", bed: "basic_bed", bedding: "basic_bedding", bedside: "basic_bedside", wallMain: "empty", wallAccent: "empty", floor: "basic_floor", window: "basic_window", lighting: "basic_lighting", shelf: "basic_shelf", decor: "empty", secret: "empty" }, stats: { comfort: 0, style: 0, magic: 0, tech: 0, privacy: 0, inspiration: 0 }, tags: {}, grade: "F", gradeName: "简陋的空屋" }>> /* 2玩家已解锁的家具图鉴 (包含基础家具和空白) */ <<set $unlockedFurniture = [ "basic_desk", "basic_chair", "basic_pc", "basic_bed", "basic_bedding", "basic_bedside", "empty", "basic_floor", "basic_window", "basic_lighting", "basic_shelf" ]>> /* 小镇复兴支线核心数据结构 (预留) */ <<set $town = { metrics: { fame: 0, /* 整体知名度 (目前通过发风景照提升) */ tourists: 0, /* 每周游客数量 */ avgSpending: 0 /* 游客人均消费 */ }, districts: { commercial: { economy: 50, security: 60 }, /* 商业街 */ shrine: { economy: 10, security: 80 }, /* 神社/后山 */ neonAlley: { economy: 80, security: 10 } /* 暗巷/里世界 */ } }>> /* 商店与扭蛋系统缓存 */ <<set $cart = {}>> <<set $shopData = {}>> <<set $gachaCollection = []>> /* NPC 系统缓存 */ <<set $customNPCs = {}>> <<set $customKeyNPCs = {}>> <<set $npcs = {}>> /* ========================================================================== */ /* 7. 触发引擎初始化 (Engine Init) */ /* ========================================================================== */ <<run setup.time.init()>> <<run setup.initNPCs()>>
<div id="splash-screen"> <!-- 模拟老式 CRT 显示器的扫描线 --> <div class="splash-scanlines"></div> <div class="splash-content"> <!-- Logo 区 --> <div class="splash-logo"> <span style="font-size: 50px; filter: drop-shadow(0 0 15px #b19cd9);">🌙</span> <div class="splash-title">TSUKIHANA OS v1.0</div> </div> <!-- 伪加载进度条区 --> <div class="splash-loading-area" id="splash-loading-area"> <div class="loading-text">SYSTEM BOOTING... <span id="loading-pct">0</span>%</div> <div class="loading-bar-bg"> <div class="loading-bar-fill" id="loading-bar-fill"></div> </div> <div class="loading-log" id="loading-log">Loading kernel modules...</div> </div> <!-- 点击提示区 (默认隐藏,加载完显示) --> <div class="splash-prompt" id="splash-prompt" style="display: none;"> <div class="blink-text" style="font-size: 16px; color: #fff; text-shadow: 0 0 10px #ff69b4; font-family: var(--font-pixel); font-weight: bold; letter-spacing: 2px;"> ▶ CLICK ANYWHERE TO START ◀ </div> </div> <!-- 音量警告区 --> <div class="splash-warning"> <span style="font-size: 16px;">🎧</span> 请佩戴耳机并注意调整音量<br> <span style="font-size: 10px; color: #666; font-family: var(--font-pixel);">Please adjust your volume before starting</span> </div> </div> </div> <<done>> <<script>> /* 延迟 100 毫秒执行,确保 HTML 已经完全渲染到屏幕上 */ setTimeout(function() { let pct = 0; let $screen = $('#splash-screen'); let $fill = $('#loading-bar-fill'); let $pctText = $('#loading-pct'); let $log = $('#loading-log'); let $prompt = $('#splash-prompt'); let $loadingArea = $('#splash-loading-area'); let logs = [ "Loading kernel modules...", "Mounting virtual file systems...", "Initializing audio engine...", "Loading Y2K aesthetic assets...", "Connecting to Fairy Realm...", "System Ready." ]; /* 启动定时器,模拟加载进度 */ let interval = setInterval(function() { pct += Math.floor(Math.random() * 15) + 5; if (pct >= 100) { pct = 100; clearInterval(interval); /* 加载完成:隐藏进度条,显示点击提示 */ $loadingArea.hide(); $prompt.show(); } $fill.css('width', pct + '%'); $pctText.text(pct); let logIndex = Math.floor((pct / 100) * logs.length); if (logIndex >= logs.length) logIndex = logs.length - 1; $log.text(logs[logIndex]); }, 150); /* 玩家点击屏幕任意位置进入游戏 */ $screen.on('click', function() { clearInterval(interval); /* 1. 唤醒音频引擎 */ if (SimpleAudio.context && SimpleAudio.context.state === 'suspended') { SimpleAudio.context.resume(); } /* 2. 🌟 核心修复:清空之前的错误记录,强制重新执行 BGM 播放逻辑 */ if (setup.audio) { setup.audio.currentTrack = null; setup.audio.updateBGM(); } /* 3. 画面淡出,并跳转到 Start 界面 */ $screen.fadeOut(300, function() { Engine.play("Start"); }); }); }, 100); <</script>> <</done>>
<div class="start-screen-container"> <!-- ========================================== --> <!-- 预留的 Banner 图片位 (未来可替换为真实图片) --> <!-- ========================================== --> <div class="start-banner-placeholder"> <div class="banner-inner-text"> <span style="font-size: 24px;">🖼️</span><br> [ LOGO / BANNER IMAGE ]<br> <span style="font-size: 10px; opacity: 0.5;">建议尺寸: 600 x 250 px</span> </div> </div> <!-- ========================================== --> <!-- 全新的纯文字排版 (以英文/罗马音为主视觉) --> <!-- ========================================== --> <div class="start-title-box"> <!-- 主标题 (罗马音) --> <div class="title-romaji">TSUKIHANA</div> <!-- 副标题 (中文点缀) --> <div class="title-chinese">月 華 镇 绮 事 录</div> <!-- 赛博风装饰线与英文定位 --> <div class="title-cyber-line"> <span class="cyber-deco">|||</span> Y2K MYSTIC & ROMANCE PROJECT <span class="cyber-deco">|||</span> </div> </div> <!-- 提示信息 (如果没读过警示) --> <<if not recall("hasReadWarning", false)>> <div class="start-hint blink-text"> [ SYSTEM ] 请先阅读下方的「⚠️ 内容警示」以解锁游戏。 </div> <</if>> <!-- 主菜单区 --> <div class="start-menu-grid"> <!-- 1. 开始游戏按钮 --> <<if recall("hasReadWarning", false)>> <<link "▶ 开始游戏 (START)" "主线-情境导入">> <<set $game.isStarted = true>> <</link>> <<else>> <div class="locked-btn" title="请先阅读警示内容">▶ 开始游戏 (LOCKED)</div> <</if>> <!-- 2. 继续游戏按钮 (调用手机读档UI) --> <<if recall("hasReadWarning", false)>> <<button "💾 继续游戏 (CONTINUE)">> <<run window.openCustomLoad()>> <</button>> <<else>> <div class="locked-btn" title="请先阅读警示内容">💾 继续游戏 (LOCKED)</div> <</if>> <!-- 3. 警示按钮 --> <<button "⚠️ 内容警示 (WARNING)">> <<run Dialog.setup("⚠️ 游戏内容警示", "ui-dialog-warning"); Dialog.wiki(Story.get("Menu_Warning").processText()); Dialog.open();>> <</button>> <!-- 4. 游戏简介 --> <<button "📖 游戏简介 (ABOUT)">> <<run Dialog.setup("📖 游戏简介", "ui-dialog-menu"); Dialog.wiki(Story.get("Menu_Info").processText()); Dialog.open();>> <</button>> <!-- 5. 更新日志 --> <<button "🔄 更新日志 (UPDATE)">> <<run Dialog.setup("🔄 更新日志", "ui-dialog-menu"); Dialog.wiki(Story.get("Menu_UpdateLog").processText()); Dialog.open();>> <</button>> <!-- 6. 制作组 --> <<button "💖 制作组 (CREDITS)">> <<run Dialog.setup("💖 制作组", "ui-dialog-menu"); Dialog.wiki(Story.get("Menu_Credits").processText()); Dialog.open();>> <</button>> </div> <!-- 底部版本号 --> <div class="start-footer"> Version <<= $game.version>> | Created by <<= $game.author>> </div> </div>
<div style="font-family: var(--font-main); color: var(--fontcolor-deep1); line-height: 1.6; font-size: 14px;"> <!-- 顶部醒目标题 --> <div style="text-align: center; margin-bottom: 20px;"> <span style="font-size: 36px; animation: blinker 2s infinite;">⚠️</span> <div style="color: #ff4d4d; font-family: var(--font-pixel); font-weight: bold; font-size: 18px; letter-spacing: 2px; margin-top: 5px;"> [ CONTENT WARNING / 内容警示 ] </div> </div> <p style="text-align: center; font-weight: bold; margin-bottom: 20px;"> 欢迎来到月華镇。在正式启动您的新生活前,请务必仔细阅读以下协议: </p> <!-- 警告内容列表 --> <div style="background: #fff0f5; border: 2px solid #ffb6c1; border-radius: 12px; padding: 15px; margin-bottom: 20px; box-shadow: inset 0 0 10px rgba(255, 105, 180, 0.1);"> <div style="color: #ff4d4d; font-weight: bold; margin-bottom: 8px; border-bottom: 1px dashed #ffb6c1; padding-bottom: 4px;"> 🔞 1. 严格的年龄限制 </div> <p style="margin-top: 0; margin-bottom: 15px; font-size: 13px;"> 本游戏包含强烈的<b>成人向描写、性暗示、裸露及风俗产业</b>相关内容。<b>仅限年满 18 周岁(或达到您所在地区法定成年年龄)的玩家游玩。</b> </p> <div style="color: #5e3b5e; font-weight: bold; margin-bottom: 8px; border-bottom: 1px dashed #ffb6c1; padding-bottom: 4px;"> 🔮 2. 敏感题材与精神要素 </div> <p style="margin-top: 0; margin-bottom: 15px; font-size: 13px;"> 游戏进程中可能涉及:<b>身体改造、BDSM、催眠/精神控制、道德边缘的犯罪行为(如偷窃、暗网交易)、以及多角/背德的恋爱关系</b>。部分剧情可能会引起您的心理不适。 </p> <div style="color: #ffa500; font-weight: bold; margin-bottom: 8px; border-bottom: 1px dashed #ffb6c1; padding-bottom: 4px;"> 💾 3. 不可逆的游戏机制 </div> <p style="margin-top: 0; margin-bottom: 0; font-size: 13px;"> 您的选择将深刻影响主角的命运。游戏包含<b>社会性死亡、退学、永久堕落</b>等不可逆的惩罚机制。请随时注意保存您的进度(记录日记)。 </p> </div> <!-- 免责声明 --> <div style="background: var(--background-gray); padding: 10px; border-radius: 8px; border-left: 4px solid var(--fontcolor-grey); font-size: 12px; color: var(--fontcolor-grey); margin-bottom: 25px;"> * 声明:本游戏为完全架空的奇幻世界观。游戏内所有登场角色均已成年或处于非现实的魔法设定中。游戏内容纯属虚构,请勿代入现实生活或模仿其中的任何行为。 </div> <!-- 操作按钮区 --> <div style="display: flex; gap: 15px; justify-content: center; border-top: 2px dashed var(--bordercolor-soft); padding-top: 20px;"> <!-- 拒绝按钮 (仅关闭弹窗,不解锁) --> <<button "拒绝并离开">> <<run Dialog.close()>> <<run setup.notify("您拒绝了协议,游戏核心功能将保持锁定。", "warning")>> <</button>> <!-- 同意按钮 (红色高亮,解锁游戏) --> <<button "我已满18岁,并同意以上内容">> /* 永久记住玩家已同意 */ <<run memorize("hasReadWarning", true)>> <<run Dialog.close()>> /* 刷新 Start 页面以解锁开始按钮 */ <<goto "Start">> <</button>> </div> </div> /* 针对此界面的特殊按钮样式微调 */ <style> #ui-dialog-body button:last-child { background-color: #ff4d4d; color: white; border-color: #8b0000; box-shadow: 3px 3px 0 #ffb6c1; } #ui-dialog-body button:last-child:hover { background-color: #cc0000; transform: translate(-2px, -2px); box-shadow: 5px 5px 0 #ffb6c1; } </style>
<div style="font-family: var(--font-main); color: var(--fontcolor-deep1); line-height: 1.8;"> <div style="text-align: center; margin-bottom: 15px;"> <span style="font-size: 40px;">🌸</span> </div> <p><b>《月華镇的魔法少女》</b>是一款结合了 Y2K 千禧美学与日系架空背景的少女养成开放世界文字互动游戏。</p> <p>你将扮演一位 16 岁的少女,转学至月華镇華昙高校。在开学的前一天晚上,你看见了百年难得一见的“月光瀑布”天象,并许下了一个愿望……</p> <p><b>核心玩法:</b></p> <ul> <li><b>表里双重生活:</b> 白天是普通女高中生,夜晚探索魔法与成人的里世界。</li> <li><b>高自由度养成:</b> 6大气质、15+技能树、丰富的打工与社团活动。</li> <li><b>房间 DIY 系统:</b> 收集 Y2K 风格家具,打造属于你的梦幻工坊。</li> </ul> </div>
<div style="font-family: var(--font-main); color: var(--fontcolor-deep1); line-height: 1.6; font-size: 13px;"> <div style="text-align: center; margin-bottom: 20px;"> <strong style="color: var(--fontcolor-highlight); font-size: 18px; font-family: var(--font-pixel); letter-spacing: 1px;"> v0.1.0 (开发中) 2026-03-08 </strong> </div> <!-- 2026-03-08 更新 --> <div style="border-left: 3px solid var(--fontcolor-highlight); padding-left: 15px; margin-bottom: 20px; position: relative;"> <div style="position: absolute; left: -6px; top: 0; width: 9px; height: 9px; background: var(--fontcolor-highlight); border-radius: 50%;"></div> <strong style="font-family: var(--font-pixel); font-size: 14px;">2026-03-08</strong> <ul style="margin-top: 5px; padding-left: 20px; color: var(--fontcolor-deep1);"> <li><b>【手机与社交】</b> 全新实装摄影与社交网络系统!包含表网(PintaGram)与里网(OnlyFans)双平台运营。新增照片质量评级、相机设备画质差异、动态网友评论及粉丝收益结算。</li> <li><b>【生活与换装】</b> 梳妆台与衣柜功能正式拆分!完美适配全身立绘展示,新增“一键预设套装”保存功能与二级服装筛选标签,优化了各生活区的动线闭环。</li> <li><b>【校园生活】</b> 实装“智能电子课表板”与动态寻路提示。新增期末考试系统(包含成绩排名与父母奖惩),修复了开学典礼的旷课判定 Bug。</li> <li><b>【成人与事件】</b> 引入事件路由。新增浴室私房照深度互动(受欲火与诱惑等级限制,解锁不同耻度姿势)。</li> <li><b>【UI与视觉】</b> 彻底废弃原生 Dialog,重写全局百变覆盖层。新增 Y2K 专属果冻按钮、自定义下拉菜单宏,以及扭蛋柜的丝滑滑动动画。</li> <li><b>【视听体验】</b> 引入全局音频调度引擎,支持日夜 BGM 平滑渐变切换,以及全局 UI 电子点击音效。</li> <li><b>【底层架构】</b> 推进 Tweego 工程化重构,规范目录结构,实现多路线声望独立、技能等级与经验分离。</li> </ul> </div> <!-- 2026-03-04 更新 --> <div style="border-left: 3px solid var(--bordercolor-soft); padding-left: 15px; margin-bottom: 20px; position: relative; opacity: 0.85;"> <div style="position: absolute; left: -6px; top: 0; width: 9px; height: 9px; background: var(--bordercolor-soft); border-radius: 50%;"></div> <strong style="font-family: var(--font-pixel); font-size: 14px;">2026-03-04</strong> <ul style="margin-top: 5px; padding-left: 20px;"> <li><b>【NPC系统】</b>三层属性架构(十维态度、个人本性、每日状态)。</li> <li><b>【动态世界】</b>基于时间轴的 NPC 动态调度与寻路引擎,新增场景雷达 UI。</li> <li><b>【事件引擎】</b>基于路由表的随机事件抽取系统,支持权重与复杂条件判定。</li> <li><b>【角色定制】</b>新增“核心羁绊角色”高级设定面板,支持开局自定义角色本性与性别。</li> <li><b>【玩法扩充】</b>实装房间互动(上网、复习)、家庭餐厅打工及 NPC 聚餐请客功能。</li> <li><b>【底层优化】</b>完善了全局数值防呆机制,修复了 UI 遮罩残留等底层逻辑。</li> </ul> </div> <!-- 2026-02-23 更新 --> <div style="border-left: 3px solid var(--bordercolor-soft); padding-left: 15px; margin-bottom: 20px; position: relative; opacity: 0.85;"> <div style="position: absolute; left: -6px; top: 0; width: 9px; height: 9px; background: var(--bordercolor-soft); border-radius: 50%;"></div> <strong style="font-family: var(--font-pixel); font-size: 14px;">2026-02-23</strong> <ul style="margin-top: 5px; padding-left: 20px;"> <li>实装了核心时间系统与天气系统。</li> <li>实装了 Y2K 风格的 UI 界面与侧边栏。</li> <li>实装了房间 DIY 系统。</li> <li>实装了里世界翻盖手机 OS 框架。</li> </ul> </div> <!-- 2026-02-20 更新 --> <div style="border-left: 3px solid #eee; padding-left: 15px; position: relative; opacity: 0.6;"> <div style="position: absolute; left: -6px; top: 0; width: 9px; height: 9px; background: #eee; border-radius: 50%;"></div> <strong style="font-family: var(--font-pixel); font-size: 14px;">2026-02-20</strong> <ul style="margin-top: 5px; padding-left: 20px;"> <li>确立了基础数据结构与变量。</li> <li>完成了捏人系统的逻辑搭建。</li> </ul> </div> </div>
<div style="text-align: center; font-family: var(--font-main); color: var(--fontcolor-deep1); line-height: 2;"> <h3 style="font-family: var(--font-pixel); color: var(--fontcolor-highlight);">✦ STAFF ✦</h3> <p> <strong>制作人 / 剧本 / 策划</strong><br> 河狸眠 </p> <p> <strong>UI 设计 / 程序协助</strong><br> AI Assistant </p> <p> <strong>特别感谢</strong><br> 所有热爱 Y2K 文化与魔法少女的玩家们 </p> <hr style="border: 1px dashed var(--bordercolor-soft); width: 50%; margin: 20px auto;"> <p style="font-family: var(--font-pixel); font-size: 12px; color: var(--fontcolor-grey);"> Powered by Twine 2 & SugarCube 2 </p> </div>
<div style="text-align: center; padding: 30px 0; color: var(--fontcolor-grey); font-family: var(--font-pixel);"> <span style="font-size: 40px; color: #d8bfd8;">🏆</span><br><br> [ SYSTEM.ACHIEVEMENT ]<br> 成就系统正在开发中...<br> 敬请期待您在月華镇留下的每一个足迹。 </div>
<<do tag "studentCard">> <div class="student-card"> <!-- 左侧:照片区 --> <div class="card-left"> <div class="avatar"> <<avatarStudentCard>> </div> <div class="id-label">STUDENT ID</div> </div> <!-- 右侧:信息区 --> <div class="card-right"> <div class="info-row"> <span class="info-label">NAME</span> <span class="info-value"><<= $player.lastName>> <<= $player.firstName>></span> </div> <div class="info-row"> <span class="info-label">NICKNAME</span> <span class="info-value"><<= $player.nickname>></span> </div> <div class="info-row"> <span class="info-label">BIRTHDAY</span> <span class="info-value"><<= $player.birthday.month>>月<<= $player.birthday.day>>日 (<<= setup.appearanceDB.getZodiac($player.birthday.month, $player.birthday.day)>>)</span> </div> <div class="info-row"> <span class="info-label">HAIR</span> <span class="info-value"><<= $player.traits.baseHairColor>> · <<= $player.traits.baseHairStyle>></span> </div> <div class="info-row"> <span class="info-label">FACE</span> <span class="info-value"><<= $player.traits.eyeColor>> · <<= $player.traits.eyeShape>> · <<= $player.traits.lipShape>></span> </div> <div class="info-row"> <span class="info-label">BODY</span> <span class="info-value"><<= $player.traits.height>> · <<= $player.traits.bodyType>> (<<= $player.traits.cupSize>> Cup)</span> </div> </div> </div> <</do>> <div class="step-container"> <<do tag "creationStep">> <<include $step>> <</do>> </div>
<div class="step-title">✦ 选择你的姓氏</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.surnames.length; _i++>> <<capture _i>> <<set _surname = setup.appearanceDB.surnames[_i]>> <<capture _surname>> <span @class="$player.lastName === _surname ? 'selected-option' : ''"> <<link _surname>> <<set $player.lastName = _surname>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</capture>> <</for>> </div> <div class="nav-buttons"> <<link "→ 输入名字">> <<set $step = "FirstNameInput">> <<redo "creationStep">> <</link>> </div>
<div class="step-title">✦ 输入您的名字</div> <div style="margin-bottom: 15px;"> <label>名字:</label> <<textbox "$player.firstName" $player.firstName autofocus class="text-input">> </div> <div style="margin-bottom: 15px;"> <label>昵称:</label> <<textbox "$player.nickname" $player.nickname>> </div> <<link "🔄 更新学生证">> <<redo "studentCard">> <</link>> <div class="nav-buttons"> <<link "← 返回选择姓氏">> <<set $step = "SurnameSelection">> <<redo "creationStep">> <</link>> <<link "→ 选择生日">> <<set $step = "BirthdaySelection">> <<redo "creationStep">> <</link>> </div>
<div class="step-title">✦ 选择你的生日</div> <!-- 月份按钮组 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px;">月份:</div> <div class="option-list"> <<for _m = 1; _m <= 12; _m++>> <<capture _m>> <span @class="$player.birthday.month === _m ? 'selected-option' : ''"> <<link _m>>月 <<set $player.birthday.month = _m>> <<redo "studentCard">> <<redo "birthdayDisplay">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 日期按钮组 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px;">日期:</div> <div class="option-list"> <<for _d = 1; _d <= 30; _d++>> <<capture _d>> <span @class="$player.birthday.day === _d ? 'selected-option' : ''"> <<link _d>>日 <<set $player.birthday.day = _d>> <<redo "studentCard">> <<redo "birthdayDisplay">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 实时显示当前选择 --> <<do tag "birthdayDisplay">> <div style="margin-top: 10px; padding: 10px; background: var(--background-white); border-radius: var(--radius-subtle); border: 1px dashed var(--bordercolor-soft);"> 当前选择:<<= $player.birthday.month>>月<<= $player.birthday.day>>日<br> 星座:<strong style="color: var(--fontcolor-highlight);"><<= setup.appearanceDB.getZodiac($player.birthday.month, $player.birthday.day)>></strong> </div> <</do>> <!-- 导航按钮 --> <div class="nav-buttons"> <<link "← 返回输入名字">> <<set $step = "FirstNameInput">> <<redo "creationStep">> <</link>> <<link "下一步 → 家庭关系">> <<set $step = "FamilySelection">> <<redo "creationStep">> <</link>> </div>
<div class="step-title">✦ 入学档案:家庭关系确认</div> <div style="font-size: 13px; color: var(--fontcolor-grey); margin-bottom: 20px; line-height: 1.6;"> 作为華昙高校入学档案的一部分,请确认您的家庭成员信息。<br> <span style="color: var(--fontcolor-highlight);">* 提示:您的父亲是入赘到母亲的大家族中,因此全家都随母亲姓 <b><<= $player.lastName>></b>。</span> </div> <!-- 模拟表格的 UI 设计 --> <div style="background: var(--background-white); border: 2px solid var(--bordercolor-soft); border-radius: 8px; padding: 15px; margin-bottom: 20px; font-family: var(--font-main); font-size: 14px; box-shadow: inset 2px 2px 5px rgba(0,0,0,0.02);"> <div style="border-bottom: 1px dotted #ccc; padding-bottom: 8px; margin-bottom: 8px;"> <span style="color: var(--fontcolor-grey); display: inline-block; width: 60px;">父亲</span> <b><<= $player.lastName>> <<= $family.father.name>></b> (<<= $family.father.age>>岁) - <<= $family.father.job>> </div> <div style="border-bottom: 1px dotted #ccc; padding-bottom: 8px; margin-bottom: 8px;"> <span style="color: var(--fontcolor-grey); display: inline-block; width: 60px;">母亲</span> <b><<= $player.lastName>> <<= $family.mother.name>></b> (<<= $family.mother.age>>岁) - <<= $family.mother.job>> </div> <div style="padding-bottom: 4px;"> <span style="color: var(--fontcolor-grey); display: inline-block; width: 60px;">小姨</span> <b><<= $player.lastName>> <<= $family.aunt.name>></b> (<<= $family.aunt.age>>岁) - <<= $family.aunt.job>> </div> </div> <div style="font-weight: bold; margin-bottom: 10px; color: var(--fontcolor-deep1);">请选择您的长兄/长姐(22岁,目前大四):</div> <div class="option-list" style="display: flex; flex-direction: column; gap: 10px;"> <span @class="$family.sibling.type === 'brother' ? 'selected-option' : ''"> <<link "👦 我有一个哥哥 (直树 Naoki)">> <<set $family.sibling.type = "brother">> <<set $family.sibling.name = "直树">> <<if ndef $customKeyNPCs>><<set $customKeyNPCs = {}>><</if>> <<set $customKeyNPCs["sibling"] = { name: "直树", gender: "male", callName: "哥哥" }>> <<redo "creationStep">> <</link>> </span> <span @class="$family.sibling.type === 'sister' ? 'selected-option' : ''"> <<link "👧 我有一个姐姐 (直美 Naomi)">> <<set $family.sibling.type = "sister">> <<set $family.sibling.name = "直美">> <<if ndef $customKeyNPCs>><<set $customKeyNPCs = {}>><</if>> <<set $customKeyNPCs["sibling"] = { name: "直美", gender: "female", callName: "姐姐" }>> <<redo "creationStep">> <</link>> </span> </div> <div class="nav-buttons"> <<link "← 返回选择生日">> <<set $step = "BirthdaySelection">> <<redo "creationStep">> <</link>> <<if $family.sibling.type neq "none">> <<link "下一步 → 外貌捏人">> <<set $step = "AppearanceCustomization">> <<redo "creationStep">> <</link>> <<else>> <span style="color: #ccc; font-size: 13px; padding: 5px 12px; border: 1px dashed #ccc; border-radius: 15px;">请先选择兄弟姐妹</span> <</if>> </div>
<div class="step-title">✦ 外貌与身体自定义</div> <div style="font-size: 12px; color: var(--fontcolor-grey); margin-bottom: 15px;"> * 提示:作为普通高中生,开局只能选择自然色系与基础发型。入学后可通过理发店或梳妆台改变造型。 </div> <!-- 初始发型选择 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">初始发型:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.initialHairStyles.length; _i++>> <<set _h = setup.appearanceDB.initialHairStyles[_i]>> <<capture _h>> <span @class="$player.traits.baseHairStyle === _h.name ? 'selected-option' : ''" title="<<= _h.desc>>"> <<link _h.name>> <<set $player.traits.baseHairStyle = _h.name>> <<set $body.hair.baseFront = _h.defaultFront>> <<set $body.hair.baseSide = _h.defaultSide>> <<set $body.hair.backCut = _h.backCut>> <<set $body.hair.length = _h.length>> <<set $body.hair.frontLength = _h.frontLength>> <<set $body.hair.sideLength = _h.sideLength>> <<set $body.hair.stage = _h.stage>> <<set $daily.style.hairFront = _h.defaultFront>> <<set $daily.style.hairSide = _h.defaultSide>> <<set $daily.style.hairTie = "披散">> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 发色选择 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">天生发色:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.hairColors.length; _i++>> <<set _color = setup.appearanceDB.hairColors[_i]>> <<capture _color>> <span @class="$player.traits.baseHairColor === _color ? 'selected-option' : ''"> <<link _color>> <<set $player.traits.baseHairColor = _color>> <<set $body.hair.color = _color>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 眼睛形状 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">眼型:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.eyeShapes.length; _i++>> <<set _shape = setup.appearanceDB.eyeShapes[_i]>> <<capture _shape>> <span @class="$player.traits.eyeShape === _shape ? 'selected-option' : ''"> <<link _shape>> <<set $player.traits.eyeShape = _shape>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 瞳色 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">瞳色:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.eyeColors.length; _i++>> <<set _color = setup.appearanceDB.eyeColors[_i]>> <<capture _color>> <span @class="$player.traits.eyeColor === _color ? 'selected-option' : ''"> <<link _color>> <<set $player.traits.eyeColor = _color>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 眉毛选择 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">眉毛形状:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.eyebrowShapes.length; _i++>> <<set _eb = setup.appearanceDB.eyebrowShapes[_i]>> <<capture _eb>> <span @class="$player.traits.eyebrowShape === _eb ? 'selected-option' : ''"> <<link _eb>> <<set $player.traits.eyebrowShape = _eb>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 唇形 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">唇形:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.lipShapes.length; _i++>> <<set _lip = setup.appearanceDB.lipShapes[_i]>> <<capture _lip>> <span @class="$player.traits.lipShape === _lip ? 'selected-option' : ''"> <<link _lip>> <<set $player.traits.lipShape = _lip>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 肤色 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">肤色:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.skinTones.length; _i++>> <<set _tone = setup.appearanceDB.skinTones[_i]>> <<capture _tone>> <span @class="$player.traits.skinTone === _tone ? 'selected-option' : ''"> <<link _tone>> <<set $player.traits.skinTone = _tone>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 身高 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">身高:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.heights.length; _i++>> <<set _h = setup.appearanceDB.heights[_i]>> <<capture _h>> <span @class="$player.traits.height === _h ? 'selected-option' : ''"> <<link _h>> <<set $player.traits.height = _h>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 体型 --> <div style="margin-bottom: 15px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">体型:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.bodyTypes.length; _i++>> <<set _type = setup.appearanceDB.bodyTypes[_i]>> <<capture _type>> <span @class="$player.traits.bodyType === _type ? 'selected-option' : ''"> <<link _type>> <<set $player.traits.bodyType = _type>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 胸围 --> <div style="margin-bottom: 20px;"> <div style="font-weight: bold; margin-bottom: 8px; color: var(--fontcolor-deep1);">初始胸围:</div> <div class="option-list"> <<for _i = 0; _i < setup.appearanceDB.cupSizes.length; _i++>> <<set _cup = setup.appearanceDB.cupSizes[_i]>> <<capture _cup>> <span @class="$player.traits.cupSize === _cup ? 'selected-option' : ''"> <<link _cup>> <<set $player.traits.cupSize = _cup>> <<redo "studentCard">> <<redo "creationStep">> <</link>> </span> <</capture>> <</for>> </div> </div> <!-- 导航按钮 --> <div class="nav-buttons"> <<link "← 返回家庭关系">> <<set $step = "FamilySelection">> <<redo "creationStep">> <</link>> <<link "下一步 → 初始特长">> <<set $step = "HobbySelection">> <<redo "creationStep">> <</link>> </div>
/* 初始化表单变量:最多选2项经历,健康状况单选 */ <<if ndef $formQuals>><<set $formQuals = []>><</if>> <<if ndef $formHealth>><<set $formHealth = "无特殊事项">><</if>> <div class="step-title">✦ 華昙高校 新生入学申报表</div> <div style="font-size: 13px; color: var(--fontcolor-grey); margin-bottom: 15px; line-height: 1.6;"> 欢迎入读華昙高校。以下经历与健康状况将影响您的社团推荐与特殊课程安排,请如实填写。 </div> <!-- 动态表单容器 --> <div id="declaration-form" class="school-form-container"> <<include "Form_Content">> </div>
<!-- ================= 0. 顶部导航栏 ================= --> <div class="passage-header-bar" style="margin-bottom: 20px;"> <div class="header-location">📝 華昙高校 入学申报表</div> <div class="header-actions"> /* 🌟 新增:返回上一个界面 */ <<button "◀ 返回修改设定">> <<set $step = "AppearanceCustomization">> <<redo "creationStep">> <</button>> </div> </div> <!-- ================= 1. 经历多选区 ================= --> <div class="form-section"> <div class="form-header">■ 你是否拥有以下资格或经历?<span style="color:#ff69b4; font-size:12px;">(最多可多选 2 项)</span></div> <div class="form-grid"> /* 选项 1:保健委员 */ <<set _has = $formQuals.includes("health_comm")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 保健委员经验" : "□ 保健委员经验"`>> <<if $formQuals.includes("health_comm")>><<run $formQuals.delete("health_comm")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("health_comm")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">曾协助校医处理伤情 (获得医药包,学识+5)</div> </div> /* 选项 2:家庭科部 */ <<set _has = $formQuals.includes("cooking")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 家庭科部认证" : "□ 家庭科部认证"`>> <<if $formQuals.includes("cooking")>><<run $formQuals.delete("cooking")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("cooking")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">擅长缝纫与烹饪 (料理经验+15,礼仪+5)</div> </div> /* 选项 3:艺术比赛 */ <<set _has = $formQuals.includes("arts")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 艺术类比赛入围" : "□ 艺术类比赛入围"`>> <<if $formQuals.includes("arts")>><<run $formQuals.delete("arts")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("arts")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">拥有敏锐的感知力 (灵视+15)</div> </div> /* 选项 4:早期网民 */ <<set _has = $formQuals.includes("sns")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 个人博客运营" : "□ 个人博客运营"`>> <<if $formQuals.includes("sns")>><<run $formQuals.delete("sns")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("sns")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">在网络上有一定知名度 (初始粉丝+100,摄影经验+10)</div> </div> /* 选项 5:超自然 */ <<set _has = $formQuals.includes("occult")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 超自然现象研究" : "□ 超自然现象研究"`>> <<if $formQuals.includes("occult")>><<run $formQuals.delete("occult")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("occult")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">对神秘学有深入了解 (初始魔力+10,占卜经验+10)</div> </div> /* 选项 6:体育特长 */ <<set _has = $formQuals.includes("sports")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 体育特长生" : "□ 体育特长生"`>> <<if $formQuals.includes("sports")>><<run $formQuals.delete("sports")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("sports")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">长期坚持高强度训练 (精力上限+20,运动经验+15)</div> </div> /* 选项 7:社会实践 */ <<set _has = $formQuals.includes("work")>> <div @class="'form-item ' + (_has ? 'checked' : '')"> <<link `_has ? "☑ 社会实践经验" : "□ 社会实践经验"`>> <<if $formQuals.includes("work")>><<run $formQuals.delete("work")>> <<elseif $formQuals.length < 2>><<run $formQuals.push("work")>><</if>> <<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">有丰富的打工经验 (初始资金+3000,涉世+10)</div> </div> </div> </div> <!-- ================= 2. 健康单选区 ================= --> <div class="form-section" style="margin-top: 25px;"> <div class="form-header">■ 是否有需要特别说明的健康状况?<span style="color:#888; font-size:12px;">(单选)</span></div> <div class="form-grid"> <div @class="'form-item ' + ($formHealth === '无特殊事项' ? 'checked' : '')"> <<link `$formHealth === '无特殊事项' ? "◉ 无特殊事项" : "○ 无特殊事项"`>> <<set $formHealth = "无特殊事项">><<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> </div> <div @class="'form-item ' + ($formHealth === '花粉症' ? 'checked' : '')"> <<link `$formHealth === '花粉症' ? "◉ 花粉症 (过敏)" : "○ 花粉症 (过敏)"`>> <<set $formHealth = "花粉症">><<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">春季时容易感到疲惫和烦躁</div> </div> <div @class="'form-item ' + ($formHealth === '视力不佳' ? 'checked' : '')"> <<link `$formHealth === '视力不佳' ? "◉ 视力不佳" : "○ 视力不佳"`>> <<set $formHealth = "视力不佳">><<replace "#declaration-form">><<include "Form_Content">><</replace>> <</link>> <div class="form-desc">上课时必须佩戴眼镜,否则影响听讲</div> </div> </div> </div> <!-- ================= 3. 提交按钮 (印章风格) ================= --> <div class="form-submit-area"> <div class="signature-line"> 学生本人签名:<span style="font-family: 'Brush Script MT', cursive; font-size: 18px; margin-left: 10px;"><<= $player.lastName>> <<= $player.firstName>></span> </div> <<link "盖章并提交档案">> /* --- 结算属性加成 --- */ <<if $formQuals.includes("health_comm")>> <<run setup.inv.add("facial_mask", 3)>> <<set $persona.academics += 5>> <</if>> /* 🌟 核心修复:适配新的技能对象结构 (增加 exp 并重算 level) */ <<if $formQuals.includes("cooking")>> <<set $skills.daily.cooking.exp += 15>> <<set $skills.daily.cooking.level = setup.skills.calcLevel($skills.daily.cooking.exp)>> <<set $persona.etiquette += 5>> <</if>> <<if $formQuals.includes("arts")>> <<set $persona.insight += 15>> <</if>> <<if $formQuals.includes("sns")>> <<set $idol.metrics.publicSNS += 100>> <<set $skills.daily.photography.exp += 10>> <<set $skills.daily.photography.level = setup.skills.calcLevel($skills.daily.photography.exp)>> <</if>> <<if $formQuals.includes("occult")>> <<set $daily.mana += 10>> <<set $skills.magic.tarot.exp += 10>> <<set $skills.magic.tarot.level = setup.skills.calcLevel($skills.magic.tarot.exp)>> <</if>> <<if $formQuals.includes("sports")>> <<set $daily.maxEnergy += 20>> <<set $daily.energy = $daily.maxEnergy>> <<set $skills.daily.sports.exp += 15>> <<set $skills.daily.sports.level = setup.skills.calcLevel($skills.daily.sports.exp)>> <</if>> <<if $formQuals.includes("work")>> <<set $wallet.yen += 3000>> <<set $persona.streetSmart += 10>> <</if>> /* 记录健康状况 */ <<set $player.traits.health = $formHealth>> <<if $formHealth === "视力不佳">> <<run setup.inv.add("glasses_red", 1)>> <<run $daily.style.accessories.push("glasses_red")>> <<run setup.notify("由于视力不佳,已自动为您佩戴红框眼镜。", "info")>> <</if>> <<set $customizationDone = true>> <<goto "主线-月光瀑">> <</link>> </div>
<div id="game-logo"> <div class="pixel-moon"></div> <div class="logo-title-top">Josephine</div> <div class="logo-title-bottom">Moonshine</div> </div>
<<do tag "time">> <!-- 1. 顶部显示时间 --> <<if $game.isStarted>> <<timeDisplay>> <</if>> <</do>> <!-- 2. 玩家信息与功能菜单 (完成导入后显示) --> <<if $game.introDone>> <!-- 模块 A:顶部果冻按键 (手机、钱包、里世界) --> <div class="sidebar-quick-actions"> <span class="quick-btn btn-phone" title="日常手机"> <<link "📱">> <<run window.openNormalPhone()>> <</link>> </span> <span class="quick-btn btn-wallet" title="我的钱包"> <<link "👛">> <<run setup.ui.open("backpack", "FAIRY ⭐ BACKPACK", "UI-随身背包")>> <</link>> </span> /* 里世界手机:满足条件才显示 */ <span class="quick-btn btn-secret" title="里世界手机"> <<link "🔮">> <<run setup.PhoneOS.open()>> <</link>> </span> </div> <<do tag "state">> <!-- 模块 B:极简状态条 (极致压缩高度) --> <div class="sidebar-panel compact-status"> <div class="stat-row"> <span class="s-label" style="color: #ff69b4;">♥ 精力</span> <div class="s-bar"><div class="s-fill" @style="'width: ' + ($daily.energy / $daily.maxEnergy * 100) + '%; background: #ff69b4;'"></div></div> </div> <div class="stat-row"> <span class="s-label" style="color: #8faec9;">♪ 心情</span> <div class="s-bar"><div class="s-fill" @style="'width: ' + $daily.mood + '%; background: #8faec9;'"></div></div> </div> <div class="stat-row"> <span class="s-label" style="color: #ffb7c5;">💢 压力</span> <div class="s-bar"><div class="s-fill" @style="'width: ' + $daily.stress + '%; background: #ffb7c5;'"></div></div> </div> </div> <</do>> <!-- 模块 C:快捷 APP 导航 (2x3 紧凑网格,共6个) --> <div class="sidebar-app-grid-compact"> /* 💳 学生证:使用 idcard 主题 */ <<link "💳 学生证">> <<run setup.ui.open("idcard", "STUDENT ID CARD", "UI-学生证")>> <</link>> /* 🪞 梳妆镜:保留原生的 Dialog,或者你也可以给它写个 theme-mirror */ <<link "🪞 梳妆镜">> <<run setup.ui.open("mirror", "VANITY MIRROR", "UI-梳妆镜")>> <</link>> /* 🧚♀️ 手帐:使用 note 主题 */ <<link "🧚♀️ 手帐">> <<run setup.ui.open("note", "Fairy Journal", "UI-妖精手帐")>> <</link>> /* ⏳ 发呆:直接执行逻辑 */ <<link "⏳ 发呆">> <<ts 30>> <<modStat "energy" +10>> <<run setup.notify("放空思绪半小时...", "info")>> <<redo>> <</link>> </div> <</if>>
<<link "⚠️ 格式化记忆 (RESTART)">> <<run window.openCustomRestart()>> <</link>>
<<do>> <<if $game.introDone>> <div class="passage-header-bar"> <div class="header-location"> <<set _currNode = setup.mapDB[$game.subLocation]>> <<set _zoneData = _currNode ? setup.zoneDB[_currNode.zone] : null>> 📍 /* 1. 显示大区 (Zone) */ <<if _zoneData>> <span style="color: var(--fontcolor-grayblue);"><<= _zoneData.icon>> <<= _zoneData.name>></span> <</if>> /* 2. 显示具体地点 (Node) */ <<if _currNode>> <span style="color: var(--fontcolor-grey); font-size: 12px; margin: 0 5px;">▶</span> <span style="color: var(--fontcolor-highlight);"><<= _currNode.name>></span> /* 3. 如果在室内,显示室内外状态小标签 */ <<if not _currNode.isOutdoor>> <span style="font-size: 10px; background: #f4f9ff; color: #8faec9; padding: 2px 6px; border-radius: 4px; margin-left: 8px; border: 1px solid #cce0ff;">室内</span> <</if>> <<else>> 未知区域 <</if>> </div> <div class="header-actions"> /* 拍照 (在无法使用手机的界面中不应使用) */ <<if tags().includes("no-phone")>> <button class="disabled-btn" title="当前无法使用手机">📸 拍照</button> <<else>> <<button "📸 拍照">> <<run setup.ui.open("camera", "CAMERA", "UI-拍照界面")>> <</button>> <</if>> /* 导览地图 (在事件中通常也应该禁用,防止玩家中途跑路) */ <<if tags().includes("no-map")>> <button class="disabled-btn" title="当前无法使用地图">🗺️ 导览地图</button> <<else>> <<button "🗺️ 导览地图">> <<run setup.ui.open("map", "MAP", "UI-导览地图")>> <</button>> <</if>> </div> </div> <<if !tags().includes("no-map")>> /* 在这里显示当前场景的 NPC */ <<showPresentNPCs>> <</if>> /* ========================================================================== */ /* 💓 隐秘状态:真空上阵 (穿了外衣,但没穿内衣) */ /* ========================================================================== */ /* 只有在玩家离开了家,且当前不是惩罚事件时才显示 */ <<if $game.location neq "home" and passage() neq "事件-系统_全裸出门" and passage() neq "事件-系统_内衣出门">> <<set _hasOuter = ($daily.style.outfit neq "none" and $daily.style.outfit neq "无") or ($daily.style.top neq "none" and $daily.style.top neq "无" and $daily.style.bottom neq "none" and $daily.style.bottom neq "无")>> <<set _hasBra = ($daily.style.bra neq "none" and $daily.style.bra neq "无")>> <<set _hasPanties = ($daily.style.panties neq "none" and $daily.style.panties neq "无")>> /* 如果穿了外衣,但没穿内衣/内裤 */ <<if _hasOuter and (not _hasBra or not _hasPanties)>> <div style="background: rgba(255, 105, 180, 0.1); border-left: 3px solid #ff69b4; padding: 10px; border-radius: 0 8px 8px 0; margin-bottom: 15px;"> <span style="color: #ff69b4; font-weight: bold;">💓 隐秘的刺激感</span><br> <span style="font-size: 13px; color: var(--fontcolor-deep1);"> <<if not _hasBra and not _hasPanties>> 衣服底下什么都没穿……布料直接摩擦着敏感的肌肤,每走一步都让你感到一阵战栗,生怕被别人看出端倪。 <<elseif not _hasPanties>> 没穿内裤的下半身感到凉飕飕的,你只能夹紧双腿,生怕动作太大被别人看光。 <<elseif not _hasBra>> 没穿胸罩的胸部在外衣下微微晃动,你只能微微含着胸,掩饰凸起的轮廓。 <</if>> </span> /* 每次刷新页面(移动/行动),持续增加欲火和露出癖 */ <<set $daily.lust = Math.min(100, $daily.lust + 2)>> <<set $bodyTuning.fetish.exhibition += 0.5>> <br><span style="font-size: 11px; color: #ff69b4;">(欲火持续上升,露出癖微弱增加)</span> </div> <</if>> <</if>> <</if>> <</do>>
<<do>> /* ========================================================================== */ /* 全局事件拦截与状态刷新 */ /* ========================================================================== */ <<clampStats>> /* 每次进入新片段,刷新 NPC 位置 */ <<if $game.introDone>> <<run setup.npcManager.updateLocations()>> <</if>> /* ========================================================================== */ /* 🚨 全局拦截系统:步入式自动剧情 (Auto Event Check) */ /* ========================================================================== */ <<set _autoEvent = setup.checkAutoEvent()>> <<if _autoEvent>> <<goto _autoEvent>> <</if>> /* ========================================================================== */ /* 🚨 全局拦截系统:极限状态危机 (Crisis Check) */ /* ========================================================================== */ <<set _crisisEvent = setup.checkCrisis()>> <<if _crisisEvent>> <<goto _crisisEvent>> <</if>> /* ========================================================================== */ /* 🚨 全局拦截系统:着装与暴露度 (Exposure Check) */ /* ========================================================================== */ <<set _exposureEvent = setup.exposure.checkAndRoute()>> <<if _exposureEvent>> <<goto _exposureEvent>> <</if>> /* ========================================================================== */ /* 🚨 全局拦截系统:营业时间打烊清场 (Eviction Check) */ /* ========================================================================== */ /* 排除玩家在家里、或者正在触发特殊事件的情况 */ <<if $game.location neq "home" and not passage().startsWith("事件-")>> <<set _evictData = setup.map.checkEviction()>> /* 如果检测到超时,执行强制驱逐 */ <<if _evictData.evicted>> /* 特例豁免:旧校舍和夜间天台不受学校关门影响 */ <<if $game.subLocation neq "oldSchool" and $game.subLocation neq "school_roof_night">> <<run setup.notify(_evictData.msg, "warning")>> /* 🌟 极简跳转:直接读取目标节点,更新位置并跳转 */ <<set _targetNode = setup.mapDB[_evictData.targetId]>> <<if _targetNode>> <<set $game.zone = _targetNode.zone>> <<set $game.subLocation = _evictData.targetId>> <<set $game.location = _targetNode.parent ? _targetNode.parent : _evictData.targetId>> <<goto _targetNode.passage>> <<else>> /* 终极兜底:如果找不到目标,直接踢回站前广场 */ <<set $game.zone = "residential", $game.location = "station", $game.subLocation = "station">> <<goto "地点-站前广场">> <</if>> <</if>> <</if>> <</if>> /* 花粉症发作 */ <<if $player.traits.health === "花粉症" and $Time.season === "spring">> <<if not $daily.tookAllergyMed and not $daily.allergyTriggered and $game.location neq "home">> <<set $daily.allergyTriggered = true>> <<set $daily.mood -= 10>> <<set $daily.stress += 5>> <<run setup.notify("阿嚏!室外的花粉让你感到难受,最好去药妆店买点药...(心情-10,压力+5)", "warning")>> <</if>> <</if>> <</do>>
/* 初始化对话步数 */ <<if ndef _avgStep>><<set _avgStep = 1>><</if>> <div class="passage-header-bar"> <div class="header-location">🏫 1年B组教室 - 邂逅</div> </div> <<do tag "avg-scene">> /* ========================================== */ /* 第一幕:开场描述与露米的搭话 */ /* ========================================== */ <<if _avgStep === 1>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 你走进一年B组的课室,已经有不少同学坐在座位上。<br> 他们或许是小学开始便一起上学的本地人,高中方一开学就能熟稔地聚在一起聊天,彼此的氛围让人感觉或许不好突兀地插话。<br><br> 当然,也有零星的几个同学因为各种原因,正独自坐在座位上或者是看书、或是补觉,而你左手边的同学显然也属于这类人。她一头栗色的自然卷扎成两个低马尾,小巧的脸上长着一些浅色的斑点和青春痘,鼻梁上架着一副圆框眼镜。也许是因为朋友们不在这个班上,也有可能是其他原因,她没有和任何同学聊天,只是撑着脑袋看着窗外发呆。<br><br> 出乎意料的是,当你在你自己的位置上坐下来的时候,她不知道何时——也许是趁着你弯腰挂书包的空挡,走到了你桌子跟前。和第一印象不同,她并非那种腼腆的文学少女角色,反而以十分高昂的语气向你打招呼: </div> <<say "rumi" "excited">> “呀吼——我听爸爸妈妈说,你就是那个新到镇子上的 City Girl 对吧?我是佐佐木露米(Rumi),叫我露米就好啦!” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px; color: var(--fontcolor-grayblue); font-size: 13px;"> 她应该是从座位表上知道你的,没想到你方一搬回来就有人知道你,也许是小姨跟别人提起过?<br> 不过,当下更重要的事情可能是,你打算怎么回复眼前这个名为露米的女孩呢? </div> <!-- 分支选项区 --> <div class="avg-choices"> <<button "普通地打招呼">> <<set _avgStep = 2>> <<redo "avg-scene">> <</button>> <<button "同样热情回应">> <<set _avgStep = 3>> <<redo "avg-scene">> <</button>> <<button "感到不知所措">> <<set _avgStep = 4>> <<redo "avg-scene">> <</button>> </div> /* ========================================== */ /* 第二幕:分支 1 - 普通地打招呼 */ /* ========================================== */ <<elseif _avgStep === 2>> <<say "player" "normal">> “我是<<= $player.lastName>><<= $player.firstName>>,接下来的三年就是同学了,请多多指教。” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 虽然你只是很普通的打了招呼,但佐佐木露米依然表现出高兴的样子,她从百褶裙的口袋里掏出一个挂着很可爱的兔子挂件的翻盖手机。 </div> <<say "rumi" "smile">> “作为未来三年的同学,我们交换一下联系方式吧!小<<= $player.firstName>>,一定要给我发邮件哦!” <</say>> <div class="action-list" style="margin-top: 30px;"> <<button "▶ 交换邮箱并回到座位">> <<run setup.notify("获得了 佐佐木露米 的联系方式!(亲密+1)", "success")>> <<set $npcs.rumi.rel.affinity += 1>> <<set $npcs.rumi.hasContact = true>> <<finishEvent "kc_events" "rumi_bond">> <</button>> </div> /* ========================================== */ /* 第二幕:分支 2 - 同样热情回应 */ /* ========================================== */ <<elseif _avgStep === 3>> <<say "player" "excited">> “ciao!叫我<<= $player.nickname>>吧, 请多多关照小露米!” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 你看到她的眼睛在霎时间亮了起来。 </div> <<say "rumi" "excited">> “Ci、ciao~呀!好酷啊,就像动画里面的角色一样,难道<<= $player.nickname>>也有看《小魔女嘟啦》!?里面的歌剧王子真的很帅……对吧!?” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 就这样,想要和你讨论动画角色的她向你索要到邮箱地址,并迫不及待地给你发了条新邮件。 </div> <<say "rumi" "wink">> “哔哔——这里是露米的测试消息,收到请不用回复!” <</say>> <div class="action-list" style="margin-top: 30px;"> <<button "▶ 交换邮箱并回到座位">> <<run setup.notify("获得了 佐佐木露米 的联系方式!(信赖+1, 亲密+1)", "success")>> <<set $npcs.rumi.rel.affinity += 1>> <<set $npcs.rumi.rel.trust += 1>> <<set $npcs.rumi.hasContact = true>> <<finishEvent "kc_events" "rumi_bond">> <</button>> </div> /* ========================================== */ /* 第二幕:分支 3 - 感到不知所措 */ /* ========================================== */ <<elseif _avgStep === 4>> <<say "player" "shy">> “你、你好,叫我<<= $player.firstName>>就好……” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 也许是察觉到了你的窘迫,她并没有继续夸张的表达,只是掏出自己那个水蓝色外壳的翻盖手机,将自己的邮件地址展示给你看。 </div> <<say "rumi" "smile">> “你刚来到镇上,还不太熟悉环境吧?锵锵!露米导游随时为你服务哦。” <</say>> <div class="location-desc" style="line-height: 1.8; margin-bottom: 20px;"> 说着,她冲你做了个 wink。 </div> <div class="action-list" style="margin-top: 30px;"> <<button "▶ 交换邮箱并回到座位">> <<run setup.notify("获得了 佐佐木露米 的联系方式!(信赖+1)", "success")>> <<set $npcs.rumi.rel.trust += 1>> <<set $npcs.rumi.hasContact = true>> <<finishEvent "kc_events" "rumi_bond">> <</button>> </div> <</if>> <</do>>
<div class="real-id-card"> <div class="id-header"> <span class="school-logo">🌸</span> <span class="school-name">華昙高等学校 学生証</span> </div> <div class="id-body"> <div class="id-photo-slot" style="padding: 0; overflow: hidden;"> <<avatarStudentCard>> </div> <div class="id-info"> <div class="info-line"><span class="label">学籍番号</span> <span class="value">2000.B01</span></div> <div class="info-line"><span class="label">氏名</span> <span class="value"><<= $player.lastName>> <<= $player.firstName>></span></div> <div class="info-line"><span class="label">生年月日</span> <span class="value">星和<<= $Time.era.year>>年 <<= $player.birthday.month>>月<<= $player.birthday.day>>日</span></div> <div class="info-line"><span class="label">所属</span> <span class="value">1年B组</span></div> <div class="info-line"><span class="label">有効期限</span> <span class="value">星和<<= $Time.era.year + 3>>年 3月31日</span></div> </div> </div> <div class="id-barcode">||| | || ||| || | ||| || || | ||| ||| | || ||</div> </div> <div class="pda-panel" style="margin-top: 15px; background: transparent; border: none; padding: 0;"> <div class="pda-panel-title" style="text-align: center; color: var(--fontcolor-grey);">✦ PUBLIC REPUTATION ✦</div> <div class="rep-badge-grid"> /* 1. 校园路线 */ <div class="rep-badge-card" style="border-left-color: #8faec9;"> <div class="rep-badge-icon">🏫</div> <div class="rep-badge-info"> <div class="rep-badge-tier"><<= $school.tierName>></div> <div class="rep-badge-title"><<= $school.title>></div> </div> <div class="rep-badge-stats"> 记过: <<= $school.metrics.demerits>><br> 威慑: <<= $school.metrics.intimidation>> </div> </div> /* 2. 职场路线 */ <div class="rep-badge-card" style="border-left-color: #ffa500;"> <div class="rep-badge-icon">💼</div> <div class="rep-badge-info"> <div class="rep-badge-tier"><<= $career.tierName>></div> <div class="rep-badge-title"><<= $career.title>></div> </div> <div class="rep-badge-stats"> 打工: <<= $career.metrics.shiftsWorked>> 次 </div> </div> /* 3. 偶像路线 */ <div class="rep-badge-card" style="border-left-color: #ffb6c1;"> <div class="rep-badge-icon">📱</div> <div class="rep-badge-info"> <div class="rep-badge-tier"><<= $idol.tierName>></div> <div class="rep-badge-title"><<= $idol.title>></div> </div> <div class="rep-badge-stats"> 粉丝: <<= $idol.metrics.publicSNS>> 人 </div> </div> </div> </div>
<<set _fairy = setup.fairies[$game.activeFairy]>> <div class="fairy-diary-container" style="box-shadow: none; padding: 0; background: transparent;"> <!-- 妖精的吐槽 --> <div class="fairy-quote"> <div class="quote-avatar">✨</div> <div class="quote-text"> <<if $daily.stress > 80>> "喂喂!你的精神紧绷得像快断掉的弦了!快去休息一下啦!" <<elseif $persona.academics > 50>> "最近看书很用功嘛,不过偶尔也要注意劳逸结合哦。" <<else>> "今天也要元气满满地度过哦,我会一直看着你的!" <</if>> </div> </div> <!-- 压力值 --> <div class="stat-bar-container" style="margin: 20px 0;"> <div class="stat-label" style="font-size: 12px; font-weight: bold; color: #ff4d4d; margin-bottom: 5px;">💢 精神压力 (<<= $daily.stress>>%)</div> <div style="height: 8px; background: #eee; border-radius: 4px; overflow: hidden;"> <div @style="'width: ' + $daily.stress + '%; background: #ffb7c5; height: 100%;'"></div> </div> </div> <!-- 气质 --> <div class="pda-panel-title" style="text-align: center; color: #b19cd9; border: none; margin-top: 20px;">✦ PERSONA | 气质雷达 ✦</div> <div class="persona-hex-grid"> <div class="persona-hex-item"><div class="p-icon">📚</div><div class="p-label">学识</div><div class="p-val"><<= $persona.academics>></div></div> <div class="persona-hex-item"><div class="p-icon">🏙️</div><div class="p-label">涉世</div><div class="p-val"><<= $persona.streetSmart>></div></div> <div class="persona-hex-item"><div class="p-icon">☕</div><div class="p-label">礼仪</div><div class="p-val"><<= $persona.etiquette>></div></div> <div class="persona-hex-item"><div class="p-icon">💋</div><div class="p-label">性感</div><div class="p-val"><<= $persona.sexAppeal>></div></div> <div class="persona-hex-item"><div class="p-icon">👁️</div><div class="p-label">灵视</div><div class="p-val"><<= $persona.insight>></div></div> <div class="persona-hex-item"><div class="p-icon">😈</div><div class="p-label">叛逆</div><div class="p-val"><<= $persona.rebellion>></div></div> </div> <!-- 分隔线 --> <div class="journal-divider"></div> <!-- 技能档案 (直接调用 JS 宏渲染) --> <<renderSkillProfile>> </div>
<div style="display: flex; gap: 20px; align-items: flex-start;"> <!-- 左侧:半身梳妆镜 (调用 avatar_mirror) --> <div style="width: 150px; height: 200px; border-radius: 10px; overflow: hidden; box-shadow: inset 0 0 10px rgba(0,0,0,0.1); flex-shrink: 0; background: #fdfbfb;"> <<avatarMirror>> </div> <!-- 右侧:状态与穿搭信息 --> <div style="flex: 1;"> <div style="text-align: center; margin-bottom: 15px; font-size: 12px; color: var(--fontcolor-deep1); font-style: italic;"> "镜子里的少女,今天也是闪闪发光的吗?" </div> <!-- 清洁度进度条 --> <div style="margin-bottom: 15px;"> <div style="font-size: 11px; font-weight: bold; margin-bottom: 5px; color: #8faec9;">🛁 身体清洁度 (<<= $daily.cleanliness>>%)</div> <div style="height: 6px; background: #eee; border-radius: 3px; overflow: hidden;"> <div @style="'width: ' + $daily.cleanliness + '%; background: #8faec9; height: 100%;'"></div> </div> </div> <!-- 穿搭与外貌 --> <ul class="mirror-list" style="list-style: none; padding: 0; margin: 0;"> <li style="padding: 6px 0; border-bottom: 1px dashed #ddd; display: flex; font-size: 13px;"> <span style="margin-right: 8px;">👗</span> <span style="color: var(--fontcolor-grey); width: 70px; font-size: 11px;">当前穿着:</span> <span style="color: var(--fontcolor-deep1); font-weight: bold; flex: 1;"> <<set _hasOuter = ($daily.style.outfit neq "none" and $daily.style.outfit neq "无" and setup.items[$daily.style.outfit])>> <<set _hasTop = ($daily.style.top neq "none" and $daily.style.top neq "无" and setup.items[$daily.style.top])>> <<set _hasBottom = ($daily.style.bottom neq "none" and $daily.style.bottom neq "无" and setup.items[$daily.style.bottom])>> <<set _hasBra = ($daily.style.bra neq "none" and $daily.style.bra neq "无")>> <<set _hasPanties = ($daily.style.panties neq "none" and $daily.style.panties neq "无")>> /* 1. 穿了连体衣 */ <<if _hasOuter>> <<= setup.items[$daily.style.outfit].name>> /* 2. 穿了上下装 */ <<elseif _hasTop or _hasBottom>> <<if _hasTop>><<= setup.items[$daily.style.top].name>><</if>> <<if _hasTop and _hasBottom>> + <</if>> <<if _hasBottom>><<= setup.items[$daily.style.bottom].name>><</if>> /* 3. 没穿外衣,但穿了内衣 */ <<elseif _hasBra or _hasPanties>> <span style="color: #ff69b4;">只穿着内衣</span> /* 4. 什么都没穿 */ <<else>> <span style="color: #ff4d4d;">一丝不挂</span> <</if>> </span> </li> <li style="padding: 6px 0; border-bottom: 1px dashed #ddd; display: flex; font-size: 13px;"> <span style="margin-right: 8px;">💄</span> <span style="color: var(--fontcolor-grey); width: 70px; font-size: 11px;">今日妆容:</span> <span style="color: var(--fontcolor-deep1); font-weight: bold;"><<= $daily.style.makeup>></span> </li> <li style="padding: 6px 0; border-bottom: 1px dashed #ddd; display: flex; font-size: 13px;"> <span style="margin-right: 8px;">💇♀️</span> <span style="color: var(--fontcolor-grey); width: 70px; font-size: 11px;">发型发色:</span> <span style="color: var(--fontcolor-deep1); font-weight: bold; flex: 1;"> <<= $daily.style.hairTie>> (<<= $body.hair.color>>) <div style="font-size: 10px; color: var(--fontcolor-grayblue); margin-top: 2px; font-weight: normal;"> <<= $daily.style.hairFront>> / <<= $daily.style.hairSide>> </div> </span> </li> <li style="padding: 6px 0; border-bottom: 1px dashed #ddd; display: flex; font-size: 13px;"> <span style="margin-right: 8px;">🎀</span> <span style="color: var(--fontcolor-grey); width: 70px; font-size: 11px;">当前饰品:</span> <span style="color: var(--fontcolor-deep1); font-weight: bold; flex: 1; font-size: 11px;"> <<if $daily.style.accessories.length > 0>> <<for _i = 0; _i < $daily.style.accessories.length; _i++>> <<set _accId = $daily.style.accessories[_i]>> <<if setup.items[_accId]>> <<= setup.items[_accId].name>><<if _i < $daily.style.accessories.length - 1>>、<</if>> <</if>> <</for>> <<else>> 无 <</if>> </span> </li> <li style="padding: 6px 0; display: flex; font-size: 13px;"> <span style="margin-right: 8px;">📏</span> <span style="color: var(--fontcolor-grey); width: 70px; font-size: 11px;">身体发育:</span> <span style="color: var(--fontcolor-deep1); font-weight: bold;"><<= $player.traits.height>> | <<= $player.traits.cupSize>> Cup</span> </li> </ul> </div> </div>
<div class="pda-app-container"> <!-- 顶部钱包区域 --> <div class="inv-wallet-header"> <div class="inv-wallet-item"> <span style="font-size: 12px; color: #888;">💴 日元</span> <span class="inv-wallet-val" style="color: #8faec9;"><<= $wallet.yen>></span> </div> <div class="inv-wallet-item"> <span style="font-size: 12px; color: #888;">🎰 扭蛋币</span> <span class="inv-wallet-val" style="color: #ff69b4;"><<= $wallet.gachaCoins>></span> </div> <div class="inv-wallet-item"> <span style="font-size: 12px; color: #888;">🌙 月相碎片</span> <span class="inv-wallet-val" style="color: #b19cd9;"><<= $wallet.moonShards>></span> </div> </div> <<if $wallet.hasBicycle>> <div style="text-align: center; font-size: 11px; color: #aaa; margin-bottom: 15px;"> 🚲 已装备自行车 (大地图移动时间减半) </div> <</if>> <<do tag "item">> <!-- 1. 消耗品区 (带使用按钮) --> <div class="pda-panel"> <div class="pda-panel-title" style="color: #8faec9; border-color: #8faec9;">✦ CONSUMABLES | 消耗品与材料</div> <div class="inventory-list"> <<set _hasConsumables = false>> <<for _itemId, _amount range $inventory.consumables>> <<set _item = setup.items[_itemId]>> <<if _item>> <<set _hasConsumables = true>> <<capture _itemId, _item>> <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= _item.icon>></span> <div class="inv-info"> <div class="inv-name"><<= _item.name>> <span class="inv-amount">x<<= _amount>></span></div> <div class="inv-desc"><<= _item.description>></div> </div> </div> <div class="inv-item-right"> <<if _item.onUse>> <<set _isPortable = true>> <<if _item.properties.includes("edible")>> <<if not (_item.tags.includes("convenience_food") or _item.tags.includes("drink") or _item.tags.includes("dessert"))>> <<set _isPortable = false>> <</if>> <</if>> <<if _isPortable>> <<button "使用">> <<set _msg = setup.inv.use(_itemId)>> <<run setup.notify(_msg, "success")>> <<redo "item">> <<redo "state">> <</button>> <<else>> <span style="font-size: 11px; color: #aaa; border: 1px dashed #ccc; padding: 2px 6px; border-radius: 4px;">需在厨房食用</span> <</if>> <<else>> <span style="font-size: 12px; color: #ccc;">不可用</span> <</if>> </div> </div> <</capture>> <</if>> <</for>> <<if !_hasConsumables>> <div style="text-align: center; color: #aaa; font-size: 12px; padding: 10px;">空空如也...</div> <</if>> </div> </div> <</do>> <!-- 2. 装备与服装区 --> <div class="pda-panel"> <div class="pda-panel-title" style="color: #ffb7c5; border-color: #ffb7c5;">✦ GEAR & CLOTHES | 装备与服饰</div> <div class="inventory-list"> <<if $inventory.clothes.length === 0>> <div style="text-align: center; color: #aaa; font-size: 12px; padding: 10px;">空空如也...</div> <<else>> <<for _i = 0; _i < $inventory.clothes.length; _i++>> <<set _item = setup.items[$inventory.clothes[_i]]>> <<if _item>> <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= _item.icon>></span> <div class="inv-info"> <div class="inv-name"><<= _item.name>></div> <div class="inv-desc"><<= _item.description>></div> </div> </div> <div class="inv-item-right"> <span style="font-size: 12px; color: #ffb7c5;">[可在梳妆台装备]</span> </div> </div> <</if>> <</for>> <</if>> </div> </div> <!-- 3. 关键道具区 --> <div class="pda-panel"> <div class="pda-panel-title" style="color: #b19cd9; border-color: #b19cd9;">✦ KEY ITEMS | 关键道具</div> <div class="inventory-list"> <<if $inventory.keyItems.length === 0>> <div style="text-align: center; color: #aaa; font-size: 12px; padding: 10px;">空空如也...</div> <<else>> <<for _i = 0; _i < $inventory.keyItems.length; _i++>> <<set _item = setup.items[$inventory.keyItems[_i]]>> <<if _item>> <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= _item.icon>></span> <div class="inv-info"> <div class="inv-name" style="color: #b19cd9;"><<= _item.name>></div> <div class="inv-desc"><<= _item.description>></div> </div> </div> </div> <</if>> <</for>> <</if>> </div> </div> </div>
/* 初始化:默认选中玩家当前所在的大区 */ <<if ndef _selectedZone>><<set _selectedZone = $game.zone>><</if>> <<do tag "map-ui">> <div class="pda-map-layout"> <!-- 左侧:四排方位雷达 --> <div class="pda-left-radar"> <div style="color: var(--fontcolor-grey); font-family: var(--font-pixel); font-size: 12px; margin-bottom: 10px; font-weight: bold;"> 📍 请选择目标区域: </div> <div class="pda-radar-grid"> <!-- ================= 第一排 ================= --> <div @class="_selectedZone === 'residential' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "🏡 居住区">><<set _selectedZone = "residential">><<redo "map-ui">><</link>> </div> <div @class="_selectedZone === 'commercial' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "🛍️ 繁华商圈">><<set _selectedZone = "commercial">><<redo "map-ui">><</link>> </div> <<if $magic.metrics.magicRank >= 1>> <div @class="_selectedZone === 'fairy_realm' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "✨ 妖精乡">><<set _selectedZone = "fairy_realm">><<redo "map-ui">><</link>> </div> <<else>> <div class="pda-zone-btn locked">❓️ 未知区域</div> <</if>> <!-- ================= 第二排 ================= --> <div @class="_selectedZone === 'culture' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "🌳 文化与休闲">><<set _selectedZone = "culture">><<redo "map-ui">><</link>> </div> <div @class="_selectedZone === 'gacha' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "✨ 娱乐地标">><<set _selectedZone = "gacha">><<redo "map-ui">><</link>> </div> <div @class="_selectedZone === 'underground' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "🌙 隐秘地带">><<set _selectedZone = "underground">><<redo "map-ui">><</link>> </div> <!-- ================= 第三排 ================= --> <div @class="_selectedZone === 'school' ? 'pda-zone-btn active' : 'pda-zone-btn'"> <<link "🏫 学园区">><<set _selectedZone = "school">><<redo "map-ui">><</link>> </div> <!-- 镇中心跨两列 --> <div @class="_selectedZone === 'central' ? 'pda-zone-btn active zone-span-2' : 'pda-zone-btn zone-span-2'" style="grid-column: span 2;"> <<link "🚉 镇中心">><<set _selectedZone = "central">><<redo "map-ui">><</link>> </div> <!-- ================= 第四排 ================= --> <!-- 自然风景区跨三列 --> <div @class="_selectedZone === 'nature' ? 'pda-zone-btn active zone-span-3' : 'pda-zone-btn zone-span-3'" style="grid-column: span 3;"> <<link "⛰️ 自然风景区">><<set _selectedZone = "nature">><<redo "map-ui">><</link>> </div> </div> </div> <!-- 右侧:动态详情区 --> <div class="pda-right-details"> <div class="pda-scroll-area" id="gps-terminal-area"> <<include "UI-导览地图-详情">> </div> </div> </div> <</do>>
<<switch _selectedZone>> <<case "residential">> <div class="pda-detail-title">🏡 居住与公共区</div> <<navTo "residential_street" "住宅区小路 (主干道)">> <<navTo "station" "站前广场">> <<navTo "riverbank" "月華川河堤">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 附属建筑 ]</div> <<navTo "home" "和室自宅">> <<navTo "senpai_home" "九条宅">> <<case "commercial">> <div class="pda-detail-title">🛍️ 繁华商圈</div> <<navTo "street_main" "商业街主干道">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 沿街商铺 ]</div> <<navTo "convenience" "便利店">> <<navTo "restaurant" "家庭餐厅">> <<navTo "ramen" "拉面馆">> <<navTo "dessert" "甜品店">> <<navTo "boutique" "饰品屋">> <<navTo "salon" "美发沙龙">> <<navTo "lingerie" "内衣店">> <<navTo "pharmacy" "药妆店">> <<navTo "bookstore" "书店">> <<navTo "pcshop" "电脑店">> <<navTo "audio" "音像店">> <<navTo "cinema" "映像馆">> <<navTo "arcade" "游戏中心">> <<navTo "secondhand" "二手店">> <<navTo "moonlightEntrance" "月影入口">> <<case "gacha">> <div class="pda-detail-title">🎰 星光扭蛋大厦</div> <<navTo "gacha_1f_desk" "1F 大厅前台">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 楼层导览 ]</div> <<navTo "gacha_2f" "2F 古風">> <<navTo "gacha_3f" "3F アニマル">> <<navTo "gacha_4f" "4F モダン">> <<navTo "gacha_5f" "5F サイバー">> <<navTo "gacha_6f" "6F 乙女">> <<navTo "gacha_7f" "7F ファンタジー">> <<case "school">> <div class="pda-detail-title">🏫 学园区</div> <<navTo "school_gate" "華昙高校 (正门)">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 周边设施 ]</div> <<navTo "oldSchool" "废弃旧校舍">> <<case "culture">> <div class="pda-detail-title">🌳 文化与休闲</div> <<navTo "park" "月華公园">> <<navTo "library" "镇立图书馆">> <<navTo "archive" "古镇资料馆">> <<case "central">> <div class="pda-detail-title">🏛️ 镇中心</div> <<navTo "central_main" "镇中心大街">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 市政设施 ]</div> <<navTo "town_hall" "镇中心会馆">> <<navTo "police_station" "月華警署">> <<navTo "hospital" "月華综合医院">> <<navTo "apt_lobby" "白金公寓大厅">> <<case "nature">> <div class="pda-detail-title">⛰️ 自然风景区</div> <<navTo "mountain" "后山登山道">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 山中探索 ]</div> <<navTo "shrine" "山中小祠">> <<navTo "waterfall" "月光瀑布">> <<navTo "observatory" "废弃天文台">> <<case "underground">> <div class="pda-detail-title" style="color: #ff4d4d; border-color: #ff4d4d;">🌙 霓虹暗巷</div> <<navTo "alley_main" "暗巷主干道">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 隐秘设施 ]</div> <<navTo "livehouse" "地下Live">> <<navTo "bar" "会员酒吧">> <<navTo "tattoo" "刺青室">> <<navTo "loveHotel" "情人旅馆">> <<navTo "secretClub" "秘密俱乐部">> <<navTo "pinkSalon" "粉色沙龙">> <<navTo "midnightCinema" "午夜电影院">> <<navTo "netCafeDeep" "深潭网咖">> <<navTo "factory" "废弃工厂">> <<case "fairy_realm">> <div class="pda-detail-title" style="color:#b19cd9; border-color:#b19cd9;">✨ 妖精乡</div> <<navTo "fairy_plaza" "星光广场">> <div style="color:#888; font-size:11px; margin: 15px 0 5px 0; font-weight:bold;">[ 魔法设施 ]</div> <<navTo "fairy_shop" "魔女工坊">> <<navTo "fairy_tree" "世界树之根">> <<default>> <div style="color:#ff4d4d; text-align:center; margin-top:50px; font-family:var(--font-pixel);"> [ ERROR ]<br>请在左侧选择要查看的区域。 </div> <</switch>>
<div class="bathroom-mirror-wrapper"> <div class="bathroom-mirror-frame"> <!-- 模拟浴室水蒸气的遮罩层 --> <div class="steam-overlay"></div> <!-- 调用半身头像纸娃娃 --> <<avatarMirror>> </div> <div class="mirror-text"> 你看着镜子里的自己,脸颊因为浴室的热气而微微泛红。 <<if $daily.cleanliness < 50>> <br><span style="color: #888; font-size: 12px;">(身上还有些脏兮兮的,赶紧洗个澡吧。)</span> <</if>> </div> </div>
<div style="font-family: var(--font-main); color: var(--fontcolor-deep1);"> <p style="text-align: center; font-weight: bold; color: var(--fontcolor-highlight); margin-bottom: 20px;"> ✦ 華昙高校 社团招新 ✦ </p> <p style="font-size: 13px; color: var(--fontcolor-grey); margin-bottom: 15px;"> 请选择你想要加入的社团。普通社团欢迎任何人加入,但特殊社团需要通过考核哦! </p> <div style="display: flex; flex-direction: column; gap: 10px;"> <<for _clubId, _club range setup.schoolConfig.clubs>> <<capture _clubId, _club>> <div style="border: 2px solid var(--bordercolor-soft); border-radius: 12px; padding: 15px; background: var(--background-white); box-shadow: 2px 2px 0 var(--background-gray);"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;"> <strong style="font-size: 16px; color: var(--fontcolor-deep1);"><<= _club.icon>> <<= _club.name>></strong> /* 1. 归宅部特殊处理 */ <<if _clubId === "none">> <<button "加入归宅部">> <<set $school.club = "none">> <<run setup.time.forwardTimeTo(15, 0)>> <<run Dialog.close()>> <<run setup.notify("你决定做一个自由的归宅部成员!", "success")>> <<goto "地点-高校_走廊">> <</button>> /* 2. 有门槛的社团 */ <<elseif _club.reqStat>> <<set _reqStatValue = $persona[_club.reqStat] || $skills.daily[_club.reqStat] || 0>> <<if _reqStatValue >= _club.reqValue>> <<button "申请加入">> <<set $school.club = _clubId>> <<run setup.time.forwardTimeTo(15, 0)>> <<run Dialog.close()>> <<run setup.notify("成功通过考核,加入 " + _club.name + "!", "success")>> <<goto "地点-高校_走廊">> <</button>> <<else>> <span style="color: #ff4d4d; font-size: 12px; font-weight: bold; font-family: var(--font-pixel);"> ❌ 考核未通过 (需 <<= setup.statNames[_club.reqStat]>> >= <<= _club.reqValue>>) </span> <</if>> /* 3. 无门槛的普通社团 */ <<else>> <<button "申请加入">> <<set $school.club = _clubId>> <<run setup.time.forwardTimeTo(15, 0)>> <<run Dialog.close()>> <<run setup.notify("成功加入 " + _club.name + "!", "success")>> <<goto "地点-高校_走廊">> <</button>> <</if>> </div> <div style="font-size: 12px; color: var(--fontcolor-grey); line-height: 1.4;"> <<= _club.desc>> </div> </div> <</capture>> <</for>> </div> </div>
/* 初始化默认标签页和设备 */ <<if ndef _photoTab>><<set _photoTab = "scenery">><</if>> <<if ndef _selectedEquip>><<set _selectedEquip = "flip_phone">><</if>> <div style="text-align:center; padding: 10px;"> <div style="font-size: 30px; margin-bottom: 10px;">📸</div> <<do tag "camera-ui">> <!-- 🌟 1. 设备选择区 (使用手搓宏) --> <div style="background: #f0f0f0; border-radius: 8px; padding: 15px 10px; margin-bottom: 15px; text-align: center;"> <div style="font-size: 12px; color: #888; font-weight: bold; margin-bottom: 8px;">当前使用设备:</div> /* 调用宏:绑定 _selectedEquip 变量,并在选择后自动刷新 camera-ui */ <<y2kselect "_selectedEquip" "camera-ui">> <<y2koption "flip_phone" "📱 翻盖手机 (默认)">> <<if $inventory.keyItems.includes("polaroid_camera")>> <<y2koption "polaroid_camera" "📷 拍立得">> <</if>> <<if $inventory.keyItems.includes("ccd_camera")>> <<y2koption "ccd_camera" "📸 数码卡片机">> <</if>> <<if $inventory.keyItems.includes("dslr_camera")>> <<y2koption "dslr_camera" "🎥 单反相机">> <</if>> <</y2kselect>> <div style="font-size: 11px; color: #aaa; margin-top: 10px;"> <<= setup.photoDB.equipments[_selectedEquip].desc>> (画质: <<= setup.photoDB.equipments[_selectedEquip].clarity>>) </div> </div> <!-- 2. 选项卡导航 --> <div style="display: flex; justify-content: center; gap: 10px; margin-bottom: 15px; border-bottom: 2px dashed var(--bordercolor-soft); padding-bottom: 10px;"> <<button "🏞️ 拍风景">><<set _photoTab = "scenery">><<redo "camera-ui">><</button>> <<button "🤳 拍自拍">><<set _photoTab = "selfie">><<redo "camera-ui">><</button>> </div> <!-- 3. 拍摄内容区 --> <div style="text-align: left; max-height: 250px; overflow-y: auto; padding-right: 5px;"> <<if _photoTab === "scenery">> <<set _locSubjects = setup.photoDB.scenery.locations[$game.subLocation] || setup.photoDB.scenery.locations[$game.location] || []>> <<for _i = 0; _i < _locSubjects.length; _i++>> <<set _sub = _locSubjects[_i]>><<capture _sub>> <div style="background: #f4f9ff; border: 1px solid #8faec9; border-radius: 8px; padding: 10px; margin-bottom: 10px; display: flex; justify-content: space-between; align-items: center;"> <div> <div style="font-weight: bold; font-size: 14px; color: var(--fontcolor-deep1);"><<= _sub.name>></div> <div style="font-size: 11px; color: var(--fontcolor-grey);"><<= _sub.desc>></div> </div> <<button "拍摄 (10分)">> <<ts 10>> <<set _p = setup.photo.take('scenery', _sub.id, _selectedEquip)>> <<run setup.notify("咔嚓!花费10分钟找角度,拍下了一张照片。", "success")>> <<run Dialog.close()>> <<redo>> <</button>> </div> <</capture>> <</for>> /* 通用景物省略,逻辑同上... */ <<elseif _photoTab === "selfie">> <<for _i = 0; _i < setup.photoDB.poses.length; _i++>> <<set _pose = setup.photoDB.poses[_i]>><<capture _pose>> <div style="background: #fff0f5; border: 1px solid #ffb6c1; border-radius: 8px; padding: 10px; margin-bottom: 10px; display: flex; justify-content: space-between; align-items: center;"> <div> <div style="font-weight: bold; font-size: 14px; color: var(--fontcolor-deep1);"><<= _pose.name>></div> <div style="font-size: 11px; color: var(--fontcolor-grey);"><<= _pose.desc>></div> </div> <<button "拍摄 (10分)">> <<ts 10>> <<set _p = setup.photo.take('selfie', _pose.id, _selectedEquip)>> <<run setup.notify("咔嚓!花费10分钟摆姿势,拍下了一张自拍。", "success")>> <<run Dialog.close()>><<redo "time">> <</button>> </div> <</capture>> <</for>> <</if>> </div> <</do>> </div>
<<set _keys = Object.keys($npcs || {})>> <<set _contactCount = 0>> <div class="pda-panel-title" style="text-align: center; margin-bottom: 15px; font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-highlight);"> 📞 CONTACTS | 联络簿 </div> <div style="display:flex; flex-direction:column; gap:10px;"> <<for _i = 0; _i < _keys.length; _i++>> <<set _npc = $npcs[_keys[_i]]>> /* 🌟 核心:获取该 NPC 在静态数据库里的基础设定 (为了读取职业和性格) */ <<set _baseNpc = setup.keyNpcDB[_keys[_i]]>> <<if _npc.hasContact>> <<set _contactCount += 1>> <div style="background:#fff; border:1px solid var(--bordercolor-soft); border-radius:8px; padding:10px; box-shadow:2px 2px 5px rgba(0,0,0,0.05);"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom:4px;"> <div style="font-weight:bold; color:var(--fontcolor-deep1); font-size:15px;"> <<= _npc.fullName>> <span style="font-size:12px; color:var(--fontcolor-grey); font-weight:normal;">(<<= _npc.callName>>)</span> </div> /* 预留:发短信/打电话的按钮 */ <div style="font-size: 16px; cursor: pointer; color: var(--fontcolor-highlight); transition: 0.2s;" onmouseover="this.style.transform='scale(1.2)'" onmouseout="this.style.transform='scale(1)'">✉️</div> </div> <div style="font-size:12px; margin-bottom:4px; color:var(--fontcolor-deep1);"> 💖 亲密度: <span style="color:var(--fontcolor-highlight); font-weight:bold;"><<= _npc.rel.affinity>></span> | 🤝 信赖度: <span style="color:#8faec9; font-weight:bold;"><<= _npc.rel.trust>></span> </div> <div style="font-size:11px; color:var(--fontcolor-grey); line-height:1.4; background: var(--background-gray); padding: 4px 8px; border-radius: 4px; border-left: 2px solid var(--bordercolor-soft);"> 💼 职业: <<= _baseNpc.job>> | 🎭 性格: <<= _baseNpc.personality>> </div> </div> <</if>> <</for>> </div> /* 如果一个人都没加,显示空提示 */ <<if _contactCount === 0>> <div style="text-align:center; color:#aaa; margin-top:50px; font-size:12px;"> 联络簿空空如也...<br>多去和大家搭话,提升亲密度吧! </div> <</if>>
<<do tag "sns-list">> <div class="pda-panel-title" style="text-align: center; margin-bottom: 15px; color: #e1306c;"> 📷 PintaGram | 动态分享 </div> <!-- 账号数据面板 --> <div style="display: flex; justify-content: space-around; background: #fff; border: 1px solid #eee; border-radius: 12px; padding: 15px 10px; margin-bottom: 20px; box-shadow: 0 2px 5px rgba(0,0,0,0.05);"> <div style="text-align: center;"> <div style="font-size: 18px; font-weight: bold; color: var(--fontcolor-deep1);"><<= $idol.metrics.publicSNS>></div> <div style="font-size: 11px; color: #888;">粉丝数</div> </div> <div style="width: 1px; background: #eee;"></div> <div style="text-align: center;"> <div style="font-size: 18px; font-weight: bold; color: var(--fontcolor-deep1);"><<= $town.metrics.fame>></div> <div style="font-size: 11px; color: #888;">小镇热度</div> </div> <div style="width: 1px; background: #eee;"></div> <div style="text-align: center;"> <div style="font-size: 18px; font-weight: bold; color: #ff69b4;"><<= $idol.metrics.sexyRep>></div> <div style="font-size: 11px; color: #888;">擦边指数</div> </div> </div> <div style="font-size: 12px; color: #aaa; margin-bottom: 10px; border-bottom: 1px dashed #eee; padding-bottom: 5px;">待发布的相册快照:</div> <div style="display:flex; flex-direction:column; gap:10px;"> <<set _hasUnpublished = false>> <<for _i = $records.photos.length - 1; _i >= 0; _i-->> <<set _photo = $records.photos[_i]>> <<if !_photo.uploaded && !_photo.isAdult>> /* 拦截硬核照,防止手滑社死 */ <<set _hasUnpublished = true>> <<capture _photo>> <div style="background:#fff; border:1px solid #ddd; border-radius:8px; padding:10px;"> <div style="font-size:11px; color:#aaa; margin-bottom:5px;"><<= _photo.time>> - <<= _photo.location>></div> <div style="font-size:13px; margin-bottom:10px;"><<= _photo.desc>></div> <<button "发布动态">> <<set _res = setup.photo.upload(_photo.id, 'ins')>> <<run setup.notify(_res.msg, "success")>> <<redo "sns-list">> <</button>> </div> <</capture>> <</if>> <</for>> <<if !_hasUnpublished>> <div style="text-align:center; color:#aaa; padding:20px; font-size: 12px;">相册里没有适合发在表网的照片了。<br>去拍点新照片吧!</div> <</if>> </div> <</do>>
<div class="dark-data-row"><span>🔮 当前魔力</span> <span class="highlight-purple"><<= $daily.mana>> MP</span></div> <div class="dark-data-row"><span>⭐ 魔法星级</span> <span class="highlight-purple"><<= $magic.guildRank>> (<<= $magic.tierName>>)</span></div> <div class="dark-data-row"><span>🎖️ 魔法称号</span> <span class="highlight-purple"><<= $magic.title>></span></div> <div class="dark-section-title">✦ 魔法技能 (MAX: Lv.10)</div> <div class="dark-data-row"> <span>塔罗占卜</span> <span>Lv.<<= $skills.magic.tarot.level>> <span style="font-size:10px; color:#888;">(<<= $skills.magic.tarot.title>>)</span></span> </div> <div class="dark-data-row"> <span>炼金调药</span> <span>Lv.<<= $skills.magic.alchemy.level>> <span style="font-size:10px; color:#888;">(<<= $skills.magic.alchemy.title>>)</span></span> </div> <div class="dark-data-row"> <span>魔法战斗</span> <span>Lv.<<= $skills.magic.combat.level>> <span style="font-size:10px; color:#888;">(<<= $skills.magic.combat.title>>)</span></span> </div> <div class="dark-data-row"> <span>魅惑催眠</span> <span>Lv.<<= $skills.magic.charm.level>> <span style="font-size:10px; color:#888;">(<<= $skills.magic.charm.title>>)</span></span> </div> <div class="dark-section-title">✦ 战斗与委托记录</div> <div class="dark-data-row"><span>击杀暗影怪</span> <span><<= $magic.metrics.monstersKilled>> 只</span></div> <div class="dark-data-row"><span>击败干部</span> <span><<= $magic.metrics.bossesDefeated>> 名</span></div> <div class="dark-data-row"><span>完成委托</span> <span><<= $magic.metrics.missionsDone>> 次</span></div>
<div class="dark-data-row"><span>🕸️ 暗网声望</span> <span class="highlight-purple"><<= $magic.metrics.undergroundBBS>></span></div> <div class="dark-data-row"><span>🥀 堕落深渊</span> <span class="highlight-red"><<= $adultLife.metrics.depravity>> %</span></div> <div class="dark-section-title">✦ 论坛最新热帖</div> <div class="dark-bbs-post">[置顶] 月華镇深夜兼职汇总 (需声望>100)</div> <div class="dark-bbs-post">[闲聊] 昨晚在旧校舍看到奇怪的光...</div> <div class="dark-bbs-post">[交易] 高价收购原味制服,私聊。</div>
<div class="dark-data-row"><span>💋 当前欲火</span> <span class="highlight-red"><<= $daily.lust>> / 100</span></div> <div class="dark-data-row"><span>😈 淫乱度</span> <span class="highlight-red"><<= $bodyTuning.slutLevel>></span></div> <div class="dark-data-row"><span>🌸 堕落称号</span> <span class="highlight-red"><<= $adultLife.title>></span></div> <div class="dark-section-title">✦ 隐秘技巧 (MAX: Lv.10)</div> <div class="dark-data-row"> <span>搭讪诱惑</span> <span>Lv.<<= $skills.adult.seduction.level>> <span style="font-size:10px; color:#888;">(<<= $skills.adult.seduction.title>>)</span></span> </div> <div class="dark-data-row"> <span>口技服务</span> <span>Lv.<<= $skills.adult.oralTech.level>> <span style="font-size:10px; color:#888;">(<<= $skills.adult.oralTech.title>>)</span></span> </div> <div class="dark-data-row"> <span>骑乘技巧</span> <span>Lv.<<= $skills.adult.riding.level>> <span style="font-size:10px; color:#888;">(<<= $skills.adult.riding.title>>)</span></span> </div> <div class="dark-data-row"> <span>承受耐力</span> <span>Lv.<<= $skills.adult.endurance.level>> <span style="font-size:10px; color:#888;">(<<= $skills.adult.endurance.title>>)</span></span> </div> <div class="dark-section-title">✦ 敏感带开发度</div> <div class="dark-data-row"> <span>唇舌: <<= $bodyTuning.sensitivity.mouth>></span> <span>胸部: <<= $bodyTuning.sensitivity.chest>></span> </div> <div class="dark-data-row"> <span>阴蒂: <<= $bodyTuning.sensitivity.clit>></span> <span>秘壶: <<= $bodyTuning.sensitivity.vaginal>></span> </div> <div class="dark-section-title">✦ 堕落行为记录</div> <div class="dark-data-row"><span>露出被目击</span> <span><<= $adultLife.metrics.exhibitionCount>> 次</span></div> <div class="dark-data-row"><span>风俗店接客</span> <span><<= $adultLife.metrics.prostitution>> 次</span></div> <div class="dark-data-row"><span>公共场所H</span> <span><<= $adultLife.metrics.publicSex>> 次</span></div>
<<set _v = $records.virginity>> <div class="dark-section-title">✦ 纯洁度档案</div> <div class="dark-data-row"><span>初吻</span> <span><<if _v.firstKiss>>⭕ 保留<<else>>❌ 丧失<</if>></span></div> <div class="dark-data-row"><span>本番</span> <span><<if _v.vaginal>>⭕ 保留<<else>>❌ 丧失<</if>></span></div> <div class="dark-data-row"><span>后庭</span> <span><<if _v.anal>>⭕ 保留<<else>>❌ 丧失<</if>></span></div> <div class="dark-data-row"><span>口唇</span> <span><<if _v.oral>>⭕ 保留<<else>>❌ 丧失<</if>></span></div> <div class="dark-section-title">✦ 秘密把柄 (Blackmail)</div> <<if $records.blackmail.length === 0>> <div style="text-align:center; color:gray; margin-top:10px;">目前没有被任何人抓住把柄。</div> <<else>> <div style="color:red; margin-top:10px;">你有一些危险的照片流落在外...</div> <</if>>
<<do tag "of-list">> <div class="dark-section-title" style="color:#ff69b4; border-color:#ff69b4; font-size: 16px;">🍒 OnlyFans | 创作者中心</div> <div style="display: flex; justify-content: space-around; background: rgba(255,255,255,0.05); border: 1px solid #333; border-radius: 12px; padding: 15px 10px; margin-bottom: 20px;"> <div style="text-align: center;"> <div style="font-size: 18px; font-weight: bold; color: #ff69b4;"><<= $idol.metrics.onlyFans>></div> <div style="font-size: 11px; color: #888;">专属订阅者</div> </div> <div style="width: 1px; background: #333;"></div> <div style="text-align: center;"> <div style="font-size: 18px; font-weight: bold; color: #ffa500;"><<= $idol.metrics.ofPending || 0>> 円</div> <div style="font-size: 11px; color: #888;">待结收益</div> </div> </div> <div style="font-size: 11px; color: #888; text-align: center; margin-bottom: 15px;"> 💡 提示:平台将在<strong style="color:#ff4d4d;">每周日晚</strong>自动结算待结收益,并扣除 20% 的平台手续费。 </div> /* 下方的相册列表代码保持不变,调用 setup.photo.upload 即可 */ <div style="margin-top:20px; border-top:1px dashed #333; padding-top:15px;"> <div style="font-size:12px; color:#aaa; margin-bottom:10px;">待发布的私密内容:</div> <<set _hasSexy = false>> <<for _i = $records.photos.length - 1; _i >= 0; _i-->> <<set _photo = $records.photos[_i]>> <<if !_photo.uploaded && _photo.isSexy>> <<set _hasSexy = true>> <<capture _photo>> <div style="background:rgba(255,105,180,0.1); border:1px solid #ff69b4; border-radius:8px; padding:10px; margin-bottom:10px;"> <div style="font-size:11px; color:#ffb6c1; margin-bottom:5px;"><<= _photo.time>> (高暴露度)</div> <div style="font-size:13px; color:#fff; margin-bottom:10px;"><<= _photo.desc>></div> <<button "设为付费解锁并发布">> <<set _res = setup.photo.upload(_photo.id, 'of')>> <<run setup.notify(_res.msg, "warning")>> <<redo>> <</button>> </div> <</capture>> <</if>> <</for>> <<if !_hasSexy>> <div style="text-align:center; color:#555; padding:20px;">相册里没有足够大尺度的照片...<br>尝试穿得少一点再自拍吧。</div> <</if>> </div> <</do>>
<<set _f = $daily.fortune>> <div class="pda-panel-title" style="text-align: center; margin-bottom: 15px; color: #b19cd9;"> ✨ Horoscope Elysia </div> <div style="background: #fff; border: 2px solid #b19cd9; border-radius: 8px; padding: 15px; font-family: var(--font-pixel);"> <div style="text-align: center; font-weight: bold; font-size: 16px; color: var(--fontcolor-deep1); margin-bottom: 10px;"> 【<<= _f.zodiac>>】今日运势 </div> <div style="text-align: center; background: #f4f9ff; padding: 5px; border-radius: 4px; margin-bottom: 15px;"> 12星座排名:第 <strong style="color: #ff4d4d; font-size: 18px;"><<= _f.rank>></strong> 位 </div> <div style="display: flex; justify-content: space-between; border-bottom: 1px dashed #ccc; padding: 4px 0;"> <span>🌟 综合运势</span> <span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.overall)>></span> </div> <div style="display: flex; justify-content: space-between; border-bottom: 1px dashed #ccc; padding: 4px 0;"> <span>💖 恋爱运</span> <span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.love)>></span> </div> <div style="display: flex; justify-content: space-between; border-bottom: 1px dashed #ccc; padding: 4px 0;"> <span>📚 学业运</span> <span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.study)>></span> </div> <div style="display: flex; justify-content: space-between; border-bottom: 1px dashed #ccc; padding: 4px 0; margin-bottom: 15px;"> <span>💰 金钱运</span> <span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.money)>></span> </div> <div style="background: #fff0f5; padding: 10px; border-radius: 8px; font-size: 12px; line-height: 1.6;"> <span style="color: #ff69b4; font-weight: bold;">幸运色:</span><<= _f.luckyColor>><br> <span style="color: #8faec9; font-weight: bold;">幸运物:</span><<= _f.luckyItem>> </div> <div style="margin-top: 15px; font-size: 11px; color: #888; text-align: center;"> (※ 网站占卜仅供参考,无法获得实质性的魔法加护) </div> </div>
<div class="location-desc"> 经过漫长的车程后,你终于抵达了这个地方——月華镇。<br><br> 对于你来说,这个地方既熟悉又陌生。幼年时的夏季,父母总是会带着你回到月華镇避暑。但自从祖母去世,伤心的父母再也没有回来过这个地方,祖母留下的老屋也被空置。<br><br> <span style="color: var(--fontcolor-grayblue);">你仍然记得童年的夏天,躺在祖母的身边,听她同你聊起那些关于这座小镇的不可思议的故事。</span><br><br> 对你来说,那似乎已经是一个遥不可及的梦。但不同的是,经过初中三年的刻苦学习,你考上了月華镇的公立高中,祖母留下的一切似乎又近在咫尺了。<br><br> 大学后回到月華镇工作的小姨从你父母那里听说了你的事情,热情地包揽了帮你搬家的任务。因此这次回来,你是轻装上阵,大部分家具已经安置在了老房子里。<br><br> 和小姨给的零花钱一起交到你手上的,是祖母老房子的黄铜钥匙。这是一幢位于老城区的两层小独栋和室,第二层的阁楼里,甚至还留着你儿时最爱的那床被团。<br><br> 当然,在简单收拾了房子之后,你的当务之急是先在学校的系统中填好学生信息,以便开学时学生证的发放。 </div> <div class="nav-buttons" style="justify-content: center;"> <<link "▶ 打开电脑填写学生证" "捏人系统">><</link>> </div>
<div class="location-desc"> 解决学生证的事情之后,你又整理了一下开学应当准备的物件。<br><br> 现在,这间简单的和室已经被你收拾妥当。不过时间也随之来到了晚上六点钟,你的肚子发出一阵咕噜噜的响声。<br><br> 打开手机,你发现半个小时前小姨发送了一封邮件给你: <<link "✉️ 1 NEW MESSAGE">> <<run Dialog.setup("✉️ 邮箱", "sms-dialog"); Dialog.wiki("$player.nickname,收拾好了吗,要不要一起出去吃个饭?"); Dialog.open();>> <</link>><br><br> 你想起自己和小姨也已经有好长一段时间没见面,便欣然决定赴约。<br><br> <hr style="border: 1px dashed var(--bordercolor-soft); margin: 20px 0;"> 小姨带你去吃了一家本地非常有名的拉面馆:<strong style="color: var(--fontcolor-deep1);">豚骨一番</strong>。厨师的手艺非常不错,香浓的豚骨汤和美味的关东煮共同温暖了你的舌尖和胃。<br><br> 夜色渐浓,饱食一顿的你和小姨一起走在回家的路上。正散步消食的时候,比你大不了太多的她惊喜地拉过你,指向天空:<br><br> “$player.nickname你看,是月光瀑————”<br><br> <span style="color: var(--fontcolor-grayblue);">祖母曾告诉过你,月光瀑是月華镇上一种极为罕见的天象。因为月色太过皎洁,加上正好升至山间瀑布顶端,便如同月光流下一般。</span><br><br> 仿佛是这所镇子也在欢迎你的归来,你看着眼前这皎洁的月光瀑,内心感到一阵温暖和悸动。<br><br> 听说,在月光瀑下许的愿望,都会美梦成真。<br> 于是,你决定许下: </div> <div class="option-list" style="display: flex; flex-direction: column; gap: 10px; margin-top: 20px;"> <<link "✦ 诚挚的愿望" "主线-妖精降临">> <<set $game.wish = "学业">> <<set $game.activeFairy = "study">> <<ts 30>> <</link>> <<link "✦ 闪耀的愿望" "主线-妖精降临">> <<set $game.wish = "偶像">> <<set $game.activeFairy = "idol">> <<ts 30>> <</link>> <<link "✦ 绮幻的愿望" "主线-妖精降临">> <<set $game.wish = "魔法">> <<set $game.activeFairy = "magic">> <<ts 30>> <</link>> <<link "✦ 湿润的愿望" "主线-妖精降临">> <<set $game.wish = "恋爱">> <<set $game.activeFairy = "romance">> <<ts 30>> <</link>> <<link "✦ 迷乱的愿望" "主线-妖精降临">> <<set $game.wish = "堕落">> <<set $game.activeFairy = "adult">> <<ts 30>> <</link>> </div>
/* 安全锁:如果直接测试此段落,默认给一个妖精防止报错 */ <<if ndef $game.activeFairy or $game.activeFairy eq "none">> <<set $game.activeFairy = "study">> <</if>> /* 获取当前妖精的数据 */ <<set _fairy = setup.fairies[$game.activeFairy]>> <div class="location-desc"> 你和小姨在公园中欣赏片刻月光瀑的美景,对方便将你送回距离站前广场不远的祖宅。<br><br> 夜已经深了。你洗漱完毕,换上睡衣,躺在还带着阳光气息的被褥上。<br> 窗外,月華镇的夜空依然澄澈,那道罕见的“月光瀑”似乎还在山间静静流淌。<br><br> <span style="color: var(--fontcolor-grayblue);">“真的能实现愿望吗……?”</span><br> 你回想起刚才许下的心愿,在对祖母的怀念之中,困意渐渐袭来。<br><br> 就在你即将陷入沉睡之际——<br> <!-- 魔法音效特效 --> <div style="text-align: center; margin: 20px 0;"> <span style="color: var(--fontcolor-highlight); font-weight: bold; font-size: 20px; letter-spacing: 4px; text-shadow: 0 0 10px var(--bordercolor-soft);">嗡——</span> </div> 房间里突然亮起了一阵柔和的光芒。<br> 光芒并非来自电灯,而是从窗外的月光中剥离出来,在你的榻榻米前汇聚成了一个小小的光球。<br><br> 你惊讶地坐起身,揉了揉眼睛。<br> 光芒散去后,出现在你面前的,竟然是——<br> <!-- 妖精登场高亮框 --> <div style="text-align: center; margin: 15px 0; padding: 15px; background: var(--background-gray); border: 2px dashed var(--bordercolor-deep1); border-radius: 12px; box-shadow: inset 0 0 10px rgba(255,255,255,0.8);"> <strong style="color: var(--fontcolor-deep1); font-size: 18px;">一个<<= _fairy.appearance>>!</strong> </div> “<<= _fairy.greeting>>”<br><br> 它悬浮在半空中,用一种不可思议的语言向你搭话,但你却能奇迹般地听懂每一个字。<br><br> “我是 <strong style="color: var(--fontcolor-highlight);"><<= _fairy.name>></strong>。”<br> <<= _fairy.name>> 绕着你飞了一圈,语气<<= _fairy.personality>>。<br> “因为听到了你在月光瀑下的呼唤,我跨越了时空来到这里。接下来的三年高中生活,就由我来做你的拍档(Partner)吧!”<br><br> 你愣愣地看着眼前这个似乎只存在于童话或魔法少女动画里的生物,大脑一片空白。<br> 月華镇……果然是一个充满不可思议的地方。<br><br> “好了,明天可是你开学的第一天,迟到可不行哦!”<br> <<= _fairy.name>> 轻轻一点你的额头,一股温暖的魔力涌入你的身体。<br><br> <!-- Y2K风格系统提示 --> <div style="text-align: center; font-family: var(--font-pixel); color: var(--fontcolor-grayblue); font-size: 12px; background: #f4fcf8; border: 1px solid var(--bordercolor-soft); padding: 8px; border-radius: 6px;"> [ SYSTEM ] 你已与妖精结下契约。妖精系统已解锁,你可以在日常界面呼出妖精获取提示或使用魔法功能。 </div> </div> <!-- 结尾分段,控制阅读节奏 --> <div class="location-desc" style="text-align: center;"> 伴随着这股温暖的魔力,你终于沉沉地睡去。<br> <strong style="color: var(--fontcolor-deep1);">明天,就是全新的开始了。</strong> </div> <div class="nav-buttons" style="justify-content: center;"> <<link "☀️ 迎接开学的第一天" "主线-妖精的早晨">> /* 触发跨天逻辑,睡到早上 6:30 */ <<run setup.time.sleepUntil(6, 30)>> <</link>> </div>
<<set _fairy = setup.fairies[$game.activeFairy]>> <div class="location-desc"> 第二日的闹钟如约响起。你想起来,经过初中三年的刻苦学习,你的生物钟早已习惯在六点三十将你叫醒。不过,月華镇的華昙高校是一所相对宽松、鼓励学生自主发展的学校,八点半才是正式上课的时间。<br><br> 想起昨晚睡前发生的那一幕,你坐在被团上有些发愣。那难道是一个梦吗……?<br><br> <span style="color: var(--fontcolor-highlight); font-weight: bold; font-size: 18px;">“呀!”</span><br><br> 正当你沉浸在那个奇特的梦里的时候,一声可爱的叫声把你唤回现实世界。你定睛望去——<br> 正是昨晚那个奇妙的小小生物。 </div> <!-- 互动选择区 --> <div id="fairy-interaction-zone"> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 看到它,你感到……</div> <div class="action-list"> <<link "不可思议">> <<replace "#fairy-interaction-zone">> <<set _reply = "别太惊讶!我可是真实存在的哦!">> <<include "主线-妖精的早晨_后续">> <</replace>> <</link>> <<link "惊恐">> <<replace "#fairy-interaction-zone">> <<set _reply = "这是什么反应呀!我长得有那么可怕吗?">> <<include "主线-妖精的早晨_后续">> <</replace>> <</link>> <<link "欣喜">> <<replace "#fairy-interaction-zone">> <<set _reply = "你果然很有天赋!我就知道我们一定会合得来的!">> <<include "主线-妖精的早晨_后续">> <</replace>> <</link>> <<link "萌物控被激发!">> <<replace "#fairy-interaction-zone">> <<set _reply = "哇你要干嘛!不要随便捏我的脸啦!">> <<include "主线-妖精的早晨_后续">> <</replace>> <</link>> <<link "自己还在梦里">> <<replace "#fairy-interaction-zone">> <<set _reply = "这可不是梦哦!快清醒一点!">> <<include "主线-妖精的早晨_后续">> <</replace>> <</link>> </div> </div>
<div class="location-desc" style="background-color: var(--background-gray); border-color: var(--bordercolor-deep1);"> 面前的小家伙马上开口道:<br> <strong style="color: var(--fontcolor-highlight);">“<<= _reply>>”</strong><br><br> 它绕着你飞了一圈,清了清嗓子,认真地说道:<br> “看你似乎还有些懵懂,我再正式介绍一遍好了。我是 <strong style="color: var(--fontcolor-highlight);"><<= _fairy.name>></strong>,是顺应你的心愿而来的许愿妖精。因为你是具有特质(Special)的女孩(The Girl),所以月光将会助你实现愿望。”<br><br> “作为你的拍档,在这高中三年里,我会时刻关注你的身心状况。如果你需要,可以随时向我咨询你的各项评价和身体状况。同时,我还会帮助你收纳、学习、打工,甚至可以教你魔法!”<br><br> 它挥了挥小手,你的床头凭空出现了一个小巧的包裹:<br> “我现在就帮你收拾好了一些你上学可能会用到的东西,快打开<strong style="color: var(--fontcolor-deep1);">【妖精背包】</strong>看看吧~”<br><br> 紧接着,<<= _fairy.name>> 看向墙上的时钟,突然急切起来:<br> “不好,现在可不是发呆的时候!!赶紧去<strong style="color: var(--fontcolor-highlight);">梳妆镜</strong>前打扮一下,换上校服准备出门吧。第一天开学典礼,绝对不可以迟到哦!” </div> <div class="nav-buttons" style="justify-content: center;"> <<link "▶ 起床,走向梳妆镜" "功能-梳妆打扮">> /* 标记导入剧情完成,解锁页头和地图 */ <<set $game.introDone = true>> <</link>> </div>
<div class="location-desc" style="border-color: #ff4d4d; background: #fff0f5;"> <span style="font-size: 24px;">🚑</span> <strong style="color: #ff4d4d; font-size: 18px;">眼前一黑……</strong><br><br> 你太累了。连续的劳作让你的身体达到了极限。<br> 你感到一阵强烈的眩晕,双腿一软,直接失去了意识。 </div> <<if $game.location === "school">> <div class="location-desc"> 当你再次睁开眼睛时,发现自己躺在学校保健室的床上。楠本老师正无奈地看着你。<br> “现在的年轻人真是乱来,体力透支晕倒在走廊上了哦。今天就乖乖回家休息吧。” </div> <<set $daily.energy = 30>> <<set $daily.stress += 20>> <<set $school.attendance -= 5>> <div class="action-list" style="margin-top: 20px;"> <<link "拖着沉重的身体回家">> <<run setup.time.forwardTimeTo(17, 0)>> <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div> <<else>> <div class="location-desc"> 当你再次睁开眼睛时,发现自己躺在自家的被炉里。似乎是路过的好心人把你送了回来。<br> 浑身酸痛,今天什么都做不了了。 </div> <<set $daily.energy = 20>> <<set $daily.stress += 30>> <div class="action-list" style="margin-top: 20px;"> <<link "闭上眼睛继续昏睡">> <<run setup.time.sleepUntil(6, 30)>> <<updateMap "home_bed">> <<goto "事件-系统_清晨醒来">> <</link>> </div> <</if>>
<div class="location-desc" style="border-color: #5e3b5e; background: #f4f0f5;"> <span style="font-size: 24px;">💢</span> <strong style="color: #5e3b5e; font-size: 18px;">理智断线</strong><br><br> 压力已经积攒到了极点。你的大脑嗡嗡作响,什么都听不进去,只想把眼前的一切都砸烂。<br> 你忍不住蹲在地上大哭了起来,完全不顾周围人的眼光。 </div> <<set $daily.stress = 50>><<set $daily.mood = 0>><<set $daily.energy = Math.max(0, $daily.energy - 50)>> <div class="action-list" style="margin-top: 20px;"> <<link "逃回房间,把自己锁起来">> <<run setup.time.forwardTimeTo(20, 0)>> /* 🌟 修复:更新为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #8faec9; background: #f4f9ff;"> <span style="font-size: 24px;">🌧️</span> <strong style="color: #8faec9; font-size: 18px;">毫无干劲</strong><br><br> 心情跌落到了谷底。你觉得一切都没有意义,连抬起手指的力气都没有。<br> 妖精担忧地绕着你飞来飞去,但你连回应它的心情都没有。你只想躺在床上,逃避这个世界。 </div> <<set $daily.mood = 30>><<set $daily.energy = 10>> <div class="action-list" style="margin-top: 20px;"> <<link "钻进被窝,虚度光阴">> <<run setup.time.sleepUntil(6, 30)>> <<updateMap "home_bed">> <<goto "事件-系统_清晨醒来">> <</link>> </div>
<div class="location-desc" style="border-color: #ff69b4; background: #fff0f5;"> <span style="font-size: 24px;">🔥</span> <strong style="color: #ff69b4; font-size: 18px;">理智融化</strong><br><br> 下腹部传来的空虚感已经让你无法正常思考了。你的双腿不自觉地摩擦着,呼吸变得极其灼热。<br> “好想要……如果不做点什么的话,脑子会坏掉的……” </div> <div class="action-list" style="margin-top: 20px;"> <<if $game.location === "home">> <<link "冲进浴室解决需求">> <<updateMap "home_bath">> <<goto "地点-自宅_浴室">> <</link>> <<elseif $game.location === "school">> <<link "跌跌撞撞地逃进厕所隔间">> <<updateMap "school_locker_room">> <<goto "地点-高校_更衣室">> <</link>> <<else>> <<link "躲进无人的暗巷里...">> <<updateMap "alley_main">> <<goto "地点-霓虹暗巷">> <</link>> <</if>> </div>
<div style="color: #aaa; font-style: italic; padding: 10px; border: 1px dashed #ccc;"> (系统提示:该行为的专属事件库尚未实装,你度过了一段平静的时光。) </div>
<div style="color: #aaa; font-style: italic; padding: 10px; border: 1px dashed #ccc;"> (系统提示:当前状态未触发任何特殊事件,你度过了一段平静的时光。) </div>
<div class="location-desc" style="border-color: #ff00ff; background: #fff0f5;"> <span style="font-size: 24px;">🚨</span> <strong style="color: #ff00ff; font-size: 18px;">校园大恐慌!</strong><br><br> 你竟然一丝不挂地走在学校里!<br> 老师和学生们看到你赤裸的身体,纷纷发出尖叫。你很快就被闻讯赶来的教导主任用外套裹住,强行带到了办公室。 <<set $daily.stress += 50>><<set $school.metrics.demerits += 5>><<set $adultLife.metrics.exhibitionCount += 1>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "😭 接受严厉的处分并被送回家 (记过+5)">> <<ts 60>> <<set $daily.style.outfit = "无">><<set $daily.style.top = "school_top_summer">><<set $daily.style.bottom = "school_skirt_normal">> <<set $daily.style.bra = "basic_bra_white">><<set $daily.style.panties = "basic_panties_white">> /* 🌟 修复:静默更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #ff00ff; background: #fff0f5;"> <span style="font-size: 24px;">😱</span> <strong style="color: #ff00ff; font-size: 18px;">街头大恐慌!</strong><br><br> 你竟然一丝不挂地走在繁华的街道上!<br> 路人们纷纷拿出手机对你疯狂拍照,甚至有人报了警。强烈的羞耻感让你几乎要晕厥过去! <<set $daily.stress += 50>><<set $adultLife.metrics.depravity += 5>><<set $adultLife.metrics.exhibitionCount += 1>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🙈 捂着脸逃进小巷,抄近路回家 (压力+50, 堕落+5)">> <<ts 30>> /* 🌟 修复:静默更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #ff69b4; background: #fff0f5;"> <span style="font-size: 24px;">🍃</span> <strong style="color: #ff69b4; font-size: 18px;">野外露出!</strong><br><br> 你一丝不挂地站在空旷的室外。微风吹过你赤裸的肌肤,带来一阵战栗。<br> 虽然这里人不多,但随时可能有人经过的背德感,让你的身体不可抑制地发热。 <<set $daily.stress += 20>><<set $daily.lust += 30>><<set $bodyTuning.fetish.exhibition += 3>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🙈 趁没人发现,赶紧溜回家 (压力+20, 欲火+30, 露出+3)">> <<ts 30>> <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #8b0000; background: #ffe6e6;"> <span style="font-size: 24px;">👀</span> <strong style="color: #8b0000; font-size: 18px;">危险的视线</strong><br><br> 你只穿着内衣走在暗巷里。大面积裸露的肌肤在霓虹灯下显得格外刺眼。<br> 你听到身后传来了不紧不慢的脚步声,似乎有人正在死死盯着你的背影…… <<set $daily.stress += 40>><<set $daily.lust += 10>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🏃♀️ 吓得头也不敢回,一路狂奔回家 (压力+40)">> <<ts 20>> <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #8b0000; background: #ffe6e6;"> <span style="font-size: 24px;">⚠️</span> <strong style="color: #8b0000; font-size: 18px;">致命的危险!</strong><br><br> 你赤身裸体地走进了没有路灯的暗巷。<br> 黑暗中传来了粗重的喘息声,几个不怀好意的混混堵住了你的去路。 “哟,这是哪里跑出来的小母狗?连衣服都没穿,是来找乐子的吗?” <<set $daily.stress += 80>><<set $daily.lust += 30>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🏃♀️ 拼死突围逃跑 (消耗大量精力)">> <<set $daily.energy -= 50>> <<run setup.notify("你拼尽全力推开他们,带着满身的擦伤逃回了家。", "error")>> /* 🌟 修复:静默更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> <<if $adultLife.metrics.depravity >= 30>> <<link "💋 放弃抵抗,任由他们摆布 (解锁凌辱CG)">> <<run setup.notify("暗巷凌辱事件开发中...", "warning")>> <</link>> <</if>> </div>
<div class="location-desc" style="border-color: #ff69b4; background: #fff0f5;"> <span style="font-size: 24px;">💕</span> <strong style="color: #ff69b4; font-size: 18px;">大胆的诱惑</strong><br><br> 你一丝不挂地走进了店铺。店员看到你赤裸的身体,惊讶得说不出话来。<br> 你毫不在意地走到柜台前,用充满诱惑的声音问道:“请问,这里提供什么‘特殊服务’吗?” <<set $daily.lust += 20>><<set $adultLife.metrics.depravity += 2>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🚪 留下一个飞吻,转身离开">> /* 🌟 修复:静默更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="location-desc" style="border-color: #ff69b4; background: #fff0f5;"> <span style="font-size: 24px;">😳</span> <strong style="color: #ff69b4; font-size: 18px;">极度暴露的着装!</strong><br><br> 你连外衣都没穿,只穿着内衣就跑到了街上!<br> 路过的男人们毫不掩饰他们下流的目光,死死盯着你暴露在外的肌肤。 <<set $daily.stress += 30>><<set $daily.lust += 20>><<set $bodyTuning.fetish.exhibition += 2>> </div> <div class="action-list" style="margin-top: 20px;"> <<link "🙈 太羞耻了,赶紧回家穿衣服">> /* 🌟 修复:静默更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> </div>
<div class="passage-header-bar"> <div class="header-location">🚂 跨区通勤中...</div> </div> <div class="location-desc"> 你坐在摇晃的电车上,看着窗外的风景飞速后退。 <br><br> /* 简单的随机事件分支 (未来可以扩展为调用 setup.rollEvent) */ <<set _roll = random(1, 100)>> <<if _roll <= 30>> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【幸运的座位】</span><br> 今天车厢里人不多,你找到了一个靠窗的座位。你闭上眼睛小憩了一会儿,感觉精神恢复了不少。 <<set $daily.energy = Math.min(100, $daily.energy + 10)>> <br><span style="font-size: 12px; color: #8faec9;">(精力+10)</span> <<elseif _roll <= 60>> <span style="color: #ff4d4d; font-weight: bold;">【拥挤的车厢】</span><br> 正值高峰期,车厢里挤满了人。你被夹在人群中动弹不得,浑浊的空气让你感到有些烦躁。 <<set $daily.stress += 5>> <br><span style="font-size: 12px; color: #ff4d4d;">(压力+5)</span> <<elseif _roll <= 80 and $persona.sexAppeal >= 30>> <span style="color: #ff69b4; font-weight: bold;">【危险的触感】</span><br> 在拥挤的车厢里,你突然感觉到有一只手贴上了你的大腿。你惊恐地转过头,却找不到是谁干的。直到电车到站,那只手才恋恋不舍地离开。 <<set $daily.stress += 10>><<set $daily.lust += 10>> <br><span style="font-size: 12px; color: #ff69b4;">(压力+10,欲火+10)</span> <<else>> <span style="color: var(--fontcolor-deep1); font-weight: bold;">【平静的旅途】</span><br> 你戴着耳机听着音乐,度过了一段平静的通勤时光。 <</if>> </div> <div class="action-list" style="margin-top: 30px;"> /* 🌟 核心:读取之前存下的目的地,继续旅程 */ <<set _destNode = setup.mapDB[setup.temp.transitDest]>> <<button "▶ 电车到站,前往目的地">> /* 🌟 修复:使用新宏静默更新地图状态 */ <<updateMap setup.temp.transitDest>> /* 清除缓存 */ <<unset setup.temp.transitDest>> /* 跳转到目标片段 */ <<goto _destNode.passage>> <</button>> </div>
<<set _npc = $npcs[$currentInteractNPC]>> <<set _baseNpc = setup.keyNpcDB[$currentInteractNPC]>> <<set _npc.memory.talkCount = _npc.memory.talkCount || 0>> <<checkNPCLeave $currentInteractNPC>> <<set _busyKeywords = ["上课", "工作", "收银", "批改", "造型", "睡觉", "赶路", "沉睡"]>> <<set _isBusy = _busyKeywords.some(function(kw) { return _npc.currentAction.includes(kw); })>> <<do tag "npc-ui">> <div class="gal-scene-container"> <!-- 顶部:立绘与情报 --> <div class="gal-header"> <div class="gal-portrait"> <<if _npc.gender === "female">>👩<<else>>👨<</if>> </div> <div class="gal-info"> <!-- 🌟 修复:恢复了被误删的 gal-name 标签,并使用 fullName --> <div class="gal-name"><<= _npc.fullName>> <span style="font-size:12px; color:var(--fontcolor-grey); font-weight:normal;">(<<= _npc.callName>>)</span></div> <div class="gal-stats"> 📍 状态:<span style="color:var(--fontcolor-highlight);"><<= _npc.currentAction>></span><br> 💖 亲密:<<= _npc.rel.affinity>> | 🤝 信赖:<<= _npc.rel.trust>> </div> </div> </div> <!-- 底部:经典对话框 --> <div class="gal-textbox"> <div class="gal-nametag"><<= _npc.fullName>></div> <div class="gal-text"> <<if _npcMustLeave>> <<= setup.npcManager.getKojo($currentInteractNPC, "leave") || "抱歉,时间差不多了,我得去做下一件事了。回头见。">> <<elseif $tempChatRes>> <<if $tempChatRes.type === "annoyed">> <<= setup.npcManager.getKojo($currentInteractNPC, "chat_annoyed") || "……你今天话有点太多了,我有点累了。">> <<elseif $tempChatRes.reaction === "excited">> <<= setup.npcManager.getKojo($currentInteractNPC, "chat_excited_" + $tempChatRes.topic) || "(对方似乎对这个话题很感兴趣,眼睛亮了起来,和你聊了很多!)">> <<else>> <<= setup.npcManager.getKojo($currentInteractNPC, "chat_normal") || "(你们随便聊了聊这个话题,气氛还算融洽。)">> <</if>> <<elseif $tempGiftReaction>> <<= setup.npcManager.getKojo($currentInteractNPC, "receiveGift_" + $tempGiftReaction) || "谢谢你的礼物。">> <<else>> <<= setup.npcManager.getKojo($currentInteractNPC, "greeting") || "你好,找我有什么事吗?">> <</if>> </div> </div> <!-- 系统反馈 (仅在聊天或送礼后显示) --> <<if $tempChatRes>> <div class="gal-sys-msg">[ 好感度变化:<<= $tempChatRes.score > 0 ? "+" + $tempChatRes.score : $tempChatRes.score>> ]</div> <<unset $tempChatRes>> <<elseif $tempGiftReaction>> <div class="gal-sys-msg">[ 送出了 <<= $tempGiftItem>>,好感度变化:<<= $tempGiftScore > 0 ? "+" + $tempGiftScore : $tempGiftScore>> ]</div> <<unset $tempGiftReaction, $tempGiftScore, $tempGiftItem>> <</if>> </div> <!-- 🌟 替换为全新的 AVG 选项列表 --> <div class="gal-choice-list"> <<if _npcMustLeave>> <<button "▶ 目送对方离开" $game.lastMap>><</button>> <<else>> <<if _isBusy>> <button class="disabled-btn" disabled>💬 闲聊 (对方正在忙)</button> <<else>> <<button "💬 寻找话题">><<run setup.ui.open('default', '选择话题', '功能-NPC闲聊界面')>><</button>> <</if>> <<if not _npc.memory.giftedToday>> <<button "🎁 赠送礼物">><<run setup.ui.open('default', '选择礼物', '功能-NPC送礼界面')>><</button>> <<else>> <button class="disabled-btn" disabled>🎁 赠送礼物 (今日已送)</button> <</if>> <<if $Time.weekday <= 5 and not $game.weekendDate>> <<button "📅 预约周末游玩">> <<if _npc.rel.affinity >= 30>> <<set $game.weekendDate = { npcId: _npc.id }>> /* 🌟 修复:提示框也改为全名 */ <<run setup.notify("成功约到了 " + _npc.fullName + "!周末见。", "success")>> <<else>> <<run setup.notify("对方婉拒了你的邀请...", "warning")>> <</if>> <<redo>> <</button>> <</if>> <<button "◀ 挥手告别" $game.lastMap>><</button>> <</if>> </div> <</do>>
<<set _npc = $npcs[$currentInteractNPC]>> <div class="dialog-prompt-box"> <span style="font-size: 24px; margin-bottom: 5px; display: inline-block;">💬</span><br> 你想和 <strong style="color: var(--fontcolor-highlight);"><<= _npc.fullName>></strong> 聊点什么? </div> <div class="action-list" style="grid-template-columns: 1fr 1fr;"> <<button "📚 学校与日常">> <<set $tempChatRes = setup.npcManager.chatTopic($currentInteractNPC, "school_gossip")>><<ts 15>> <<run setup.ui.close()>><<goto "功能-NPC互动主界面">> <</button>> <<button "👗 时尚与流行">> <<set $tempChatRes = setup.npcManager.chatTopic($currentInteractNPC, "fashion")>><<ts 15>> <<run setup.ui.close()>><<goto "功能-NPC互动主界面">> <</button>> <<button "🎮 游戏与科技">> <<set $tempChatRes = setup.npcManager.chatTopic($currentInteractNPC, "gaming")>><<ts 15>> <<run setup.ui.close()>><<goto "功能-NPC互动主界面">> <</button>> <<if $persona.insight >= 20>> <<button "🔮 都市传说">> <<set $tempChatRes = setup.npcManager.chatTopic($currentInteractNPC, "occult")>><<ts 15>> <<run setup.ui.close()>><<goto "功能-NPC互动主界面">> <</button>> <<else>> <button class="disabled-btn" disabled>🔮 都市传说 (需灵视≥20)</button> <</if>> <<if $persona.sexAppeal >= 30>> <<button "💋 暧昧的玩笑">> <<set $tempChatRes = setup.npcManager.chatTopic($currentInteractNPC, "flirting")>><<ts 15>> <<run setup.ui.close()>><<goto "功能-NPC互动主界面">> <</button>> <<else>> <button class="disabled-btn" disabled>💋 暧昧的玩笑 (需性感≥30)</button> <</if>> </div>
<<set _npc = $npcs[$currentInteractNPC]>> <<set _inv = $inventory.consumables>> <div class="dialog-prompt-box"> <span style="font-size: 24px; margin-bottom: 5px; display: inline-block;">🎁</span><br> 你要送给 <strong style="color: var(--fontcolor-highlight);"><<= _npc.fullName>></strong> 什么礼物? </div> <div class="inventory-list" style="max-height: 350px; overflow-y: auto; padding-right: 5px;"> <<set _hasGift = false>> <<for _itemId, _amount range _inv>> <<set _itemData = setup.items[_itemId]>> <<if _itemData and _itemData.mainType !== "key_item">> <<set _hasGift = true>> <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= _itemData.icon || "🎁">></span> <div class="inv-info"> <div class="inv-name"><<= _itemData.name>> <span class="inv-amount">x<<= _amount>></span></div> <div class="inv-desc"><<= _itemData.description>></div> </div> </div> <div class="inv-item-right"> <<capture _itemId>> <<button "送出">> <<set _res = setup.npcManager.giveGift($currentInteractNPC, _itemId)>> <<set $tempGiftReaction = _res.reaction>> <<set $tempGiftScore = _res.score>> <<set $tempGiftItem = _res.itemName>> <<run setup.ui.close()>> <<goto "功能-NPC互动主界面">> <</button>> <</capture>> </div> </div> <</if>> <</for>> <<if not _hasGift>> <div style="text-align: center; color: #888; padding: 20px; border: 1px dashed #ccc; border-radius: 8px;"> 背包里空空如也,没有什么可以送的。 </div> <</if>> </div>
<div class="location-desc"> 体力考验,沿途可采集草药。 </div> <div class="action-list"> <<scanEvents>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开这里</div> <div class="map-grid-container"> <<navTo "shrine">> <<navTo "waterfall">> <<navTo "station">> </div>
<div class="location-desc"> 破旧的神社,夜晚求签极准。 </div> <div class="action-list"> <<scanEvents>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开这里</div> <div class="map-grid-container"> <<navTo "mountain">> <<navTo "waterfall">> <<navTo "station">> </div>
<div class="location-desc"> 你许下愿望的地方,充斥着浓郁的魔力。 </div> <div class="action-list"> <<scanEvents>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开这里</div> <div class="map-grid-container"> <<navTo "mountain">> <<navTo "observatory">> <<navTo "station">> </div>
<div class="location-desc"> 魔法少女的秘密据点,位于后山山顶。 </div> <div class="action-list"> <<scanEvents>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开这里</div> <div class="map-grid-container"> <<navTo "waterfall">> <<navTo "mountain">> <<navTo "station">> </div>
<div class="location-desc"> 这里是月華镇最繁华的步行街,街道两旁挂满了五颜六色的招牌,音像店里正播放着滨崎步的最新单曲。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🛍️ 逛街购物</div> <div class="map-grid-container"> <<navTo "boutique">> <<navTo "salon">> <<navTo "lingerie">> <<navTo "bookstore">> <<navTo "secondhand">> <<navTo "pcshop">> <<navTo "pharmacy">> <<navTo "arcade">> <<navTo "cinema">> <<navTo "audio">> <<navTo "convenience">> </div> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9; margin-top: 20px;">🍜 餐饮休息</div> <div class="map-grid-container"> <<navTo "ramen">> <<navTo "dessert">> <<navTo "restaurant">> </div> <div class="step-title" style="color: #5e3b5e; border-left-color: #5e3b5e; margin-top: 20px;">🌙 隐秘角落</div> <div class="map-grid-container"> <<navTo "moonlightEntrance">> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 离开商业街</div> <div class="map-grid-container"> <<navTo "gacha_1f_desk" "✨ 前往星光扭蛋大厦">> <<navTo "station" "🚉 前往站前广场">> <<navTo "home" "🏠 步行回家">> </div>
<<set _shopId = "convenience">><<set _shop = setup.shops[_shopId]>> <<set _job = setup.jobDB[_shopId]>> <<set _pJob = $career.jobs[_shopId]>> <div class="shop-banner-placeholder"> <div>🏪 预留图片位:便利店内部</div> <span>路径: images/bg/shop_convenience.jpg</span> </div> <div class="location-desc"> 伴随着“叮咚”的开门声,你走进了这家24小时营业的 Cyber-Deli 便利店。 </div> <<do tag "shop-hub">> /* 显示打工结算结果 */ <<if _jobResult>> <div style="background: #fff9e6; border: 2px dashed #ffa500; border-radius: 12px; padding: 15px; margin-bottom: 15px; color: var(--fontcolor-deep1);"> <<= _jobResult>> </div> <<set _jobResult = "">> <</if>> /* ========================================================================== */ /* 💼 职场与打工面板 */ /* ========================================================================== */ <div style="background: #f4f9ff; border: 2px solid #8faec9; border-radius: 12px; padding: 15px; margin-bottom: 15px;"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;"> <strong style="color: #8faec9; font-size: 16px;">💼 便利店打工</strong> <<if _pJob.hired>> <span style="font-family: var(--font-pixel); font-size: 12px; color: #888;"> 待结薪水: <strong style="color: #ffa500; font-size: 14px;"><<= $career.unpaidWages>>円</strong> </span> <</if>> </div> /* ------------------------------------------------------------------ */ /* 状态 A:尚未录用 (显示面试按钮) */ /* ------------------------------------------------------------------ */ <<if not _pJob.hired>> <div style="font-size: 12px; color: var(--fontcolor-grayblue); margin-bottom: 10px;"> 店门上贴着一张招募启事:“急招收银员!时薪 650円 起。要求:<<= _job.interviewReq.desc>>” </div> <<button "📝 找店长申请面试 (30分钟)">> <<ts 30>> <<if $persona[_job.interviewReq.stat] >= _job.interviewReq.val>> <<set _pJob.hired = true>> <<run setup.notify("店长看了看你的简历,满意地点了点头:“明天就可以来上班了。”", "success")>> <<else>> <<run setup.notify("店长皱了皱眉:“抱歉,我们这里需要更机灵一点的员工。” (面试失败)", "error")>> <</if>> <<redo "shop-hub">> <</button>> /* ------------------------------------------------------------------ */ /* 状态 B:已经录用 (显示打工与领薪水按钮) */ /* ------------------------------------------------------------------ */ <<else>> <<set _currentRank = _job.ranks[_pJob.rank]>> <<set _nextRank = _job.ranks[_pJob.rank + 1]>> <div style="font-size: 12px; color: var(--fontcolor-deep1); margin-bottom: 10px;"> 当前职位:<strong style="color: var(--fontcolor-highlight);"><<= _currentRank.title>></strong> (时薪: <<= _currentRank.wage>>円)<br> <<if _nextRank>> <span style="color: #aaa; font-size: 11px;">晋升条件:<<= _nextRank.desc>> (已打工: <<= _pJob.shifts>>次)</span> <<else>> <span style="color: #ff69b4; font-size: 11px; font-weight: bold;">★ 已达到最高职位 ★</span> <</if>> </div> <div style="display: flex; gap: 10px;"> /* 🌟 启动打工副本 */ <<button "🏪 换上制服开始打工">> <<startJob "convenience">> <</button>> /* 周末领薪水按钮 */ <<if $Time.weekday === 6 or $Time.weekday === 7>> <<if $career.unpaidWages > 0>> <<button "💰 找店长结算本周薪水">><<claimWages>><</button>> <<else>> <button class="disabled-btn" disabled>💰 本周薪水已结清</button> <</if>> <<else>> <button class="disabled-btn" disabled title="只有周六和周日才能结算薪水">💰 薪水结算 (仅限周末)</button> <</if>> </div> <</if>> </div> /* ========================================================================== */ /* 🏪 顾客行动面板 */ /* ========================================================================== */ <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏪 作为顾客的行动</div> <div class="action-list"> <<button "🛒 浏览货架 (购买商品)">> <<run setup.shop.initStock(_shopId)>><<set $game.lastShopHub = passage()>><<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 休息区 (现场服务)">> <<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">> <</button>> <</if>> </div> <</do>> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "salon">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>✂️ 预留图片位:美发沙龙内部</div> <span>路径: images/bg/shop_salon.jpg</span> </div> <div class="location-desc"> 充满高级感的“千变”沙龙,空气中飘散着洗发水和染发剂的味道。<br> 除了提供昂贵的做头发服务,入口处的玻璃柜里也出售一些专业的造型用品和彩色隐形眼镜。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✂️ 店内行动</div> <div class="action-list"> <<button "🛒 浏览展示柜 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "✂️ 坐上理发椅 (现场服务)">> <<set $currentShopId = _shopId>> <<set $game.lastShopHub = passage()>> <<goto "功能-现场服务">> <</button>> <</if>> <<button "💼 申请学徒打工">><<run setup.notify("沙龙洗头妹打工系统开发中...", "info")>><</button>> <<button "💬 和理发师搭话">><<run setup.notify("“小妹妹,想换个什么样的新发型?”理发师笑着问。", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "boutique">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>👗 预留图片位:饰品屋内部</div> <span>路径: images/bg/shop_boutique.jpg</span> </div> <div class="location-desc"> 店内播放着震耳欲聋的 Eurobeat 舞曲,墙上挂满了最潮的 Y2K 服饰、亮片小背心和夸张的厚底靴。<br> 化着夸张辣妹妆的店员姐姐正嚼着口香糖,热情地向你推销最新款的透明塑料包。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">👗 店内行动</div> <div class="action-list"> <<button "🛒 挑选衣服 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "💼 询问兼职机会">><<run setup.notify("服装店导购打工系统开发中...", "info")>><</button>> <<button "💬 和辣妹店员搭话">><<run setup.notify("“这件超适合你的啦!要不要去试衣间试试?”", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "pharmacy">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>💊 预留图片位:药妆店内部</div> <span>路径: images/bg/shop_pharmacy.jpg</span> </div> <div class="location-desc"> 货架上摆满了琳琅满目的化妆品和护肤品,店里弥漫着各种香水混合的甜腻香气。<br> 几个穿着泡泡袜的女高中生正聚在试用装前,叽叽喳喳地讨论着最新款的粉色唇彩。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">💊 店内行动</div> <div class="action-list"> <<button "🛒 挑选药妆 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "💄 试用免费化妆品 (10分钟)">> <<ts 10>><<set $persona.sexAppeal += 1>> <<run setup.notify("你在试用区蹭了一点高档粉底液。(性感+1)", "success")>><<goto passage()>> <</button>> <<button "💼 申请理货员打工">><<run setup.notify("药妆店打工系统开发中...", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "lingerie">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>👙 预留图片位:内衣店内部</div> <span>路径: images/bg/shop_lingerie.jpg</span> </div> <div class="location-desc"> 暧昧的粉色灯光打在精致的蕾丝内衣和吊带袜上。<br> 作为未成年人,走进这家店让你感到一丝莫名的紧张与刺激。店员似乎看出了你的局促,只是微笑着递上购物篮。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">👙 店内行动</div> <div class="action-list"> <<button "🛒 挑选内衣 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "💬 和温柔的店员搭话">><<run setup.notify("“需要帮忙测量尺寸吗?不用害羞哦。”", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "bookstore">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>📚 预留图片位:书店内部</div> <span>路径: images/bg/shop_bookstore.jpg</span> </div> <div class="location-desc"> 弥漫着纸墨香气的老书店,非常安静。<br> 除了摆在显眼处的时尚杂志《egg》和教辅资料,角落里似乎还藏着一些关于占星术和神秘学的古旧书籍。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">📚 店内行动</div> <div class="action-list"> <<button "🛒 挑选书籍 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "📖 站着白嫖看书 (30分钟)">> <<ts 30>><<set $persona.academics += 1>> <<run setup.notify("你站着看了一会儿书,腿有点酸。(学识+1)", "success")>><<goto passage()>> <</button>> <<button "💼 申请书店打工">><<run setup.notify("书店整理员打工系统开发中...", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "pcshop">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>💻 预留图片位:电脑店内部</div> <span>路径: images/bg/shop_pcshop.jpg</span> </div> <div class="location-desc"> 略显杂乱的店铺,堆满了各种二手电子元件、笨重的 CRT 显示器和最新款的翻盖手机。<br> 老板正戴着耳机在柜台后打游戏,连你进来了都没抬头看一眼。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">💻 店内行动</div> <div class="action-list"> <<button "🛒 挑选数码产品 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "💬 和宅男老板搭话">><<run setup.notify("老板沉迷游戏,完全没理你。", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "audio">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>🎧 预留图片位:音像店内部</div> <span>路径: images/bg/shop_audio.jpg</span> </div> <div class="location-desc"> 墙上贴满了视觉系乐队的海报,一排排 CD 和 MD 光盘整齐地排列着。<br> 试听机里正播放着宇多田光的最新单曲,几个戴着耳机的年轻人正沉浸在音乐的世界里。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🎧 店内行动</div> <div class="action-list"> <<button "🛒 挑选 CD/MD (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> <<button "🎶 在试听机前听歌 (20分钟)">> <<ts 20>><<set $daily.mood = Math.min(100, $daily.mood + 15)>> <<run setup.notify("听了最新的流行单曲,心情变好了!(心情+15)", "success")>><<goto passage()>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "cinema">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>🎞️ 预留图片位:映像馆内部</div> <span>路径: images/bg/shop_cinema.jpg</span> </div> <div class="location-desc"> 昏暗的映像馆,不仅提供 VHS 录像带租借,还售卖各种动漫周边和偶像写真。<br> 几个宅男正在角落里翻找着绝版的集换式卡牌。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🎞️ 店内行动</div> <div class="action-list"> <<button "🛒 挑选录像带与周边 (购买商品)">> <<run setup.shop.initStock(_shopId)>> <<set $game.lastShopHub = passage()>> <<goto "功能-商店购物">> <</button>> <<if _shop.services and _shop.services.length > 0>> <<button "🛋️ 现场服务">><<set $currentShopId = _shopId>><<set $game.lastShopHub = passage()>><<goto "功能-现场服务">><</button>> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<div class="shop-banner-placeholder"> <div>📦 预留图片位:二手店内部</div> <span>路径: images/bg/shop_secondhand.jpg</span> </div> <div class="location-desc">淘便宜衣服和奇怪旧物的地方。老板是个神秘的老奶奶。</div> <div class="action-list"> <<scanEvents>> <<button "🛒 淘宝 (系统开发中)">><<run setup.notify("二手店系统尚未开放", "warning")>><</button>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<div class="shop-banner-placeholder"> <div>🕹️ 预留图片位:街机厅内部</div> <span>路径: images/bg/shop_arcade.jpg</span> </div> <div class="location-desc">充满电子音的街机厅,有最新款的拍贴机和抓娃娃机。</div> <div class="action-list"> <<scanEvents>> <<button "🕹️ 玩街机 (系统开发中)">><<run setup.notify("小游戏系统尚未开放", "warning")>><</button>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "street_main" "🚶♀️ 离开游戏中心">></div>
<<set _shopId = "ramen">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>🍜 预留图片位:拉面馆内部</div> <span>路径: images/bg/shop_ramen.jpg</span> </div> <div class="location-desc">小姑常带你来的美味面馆,豚骨拉面的香气让人食指大动。</div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🍜 店内行动</div> <div class="action-list"> <<button "🛋️ 坐下点餐 (查看菜单)">> <<set $currentShopId = _shopId>> <<set $game.lastShopHub = passage()>> <<goto "功能-现场服务">> <</button>> <<button "💬 和大将搭话">><<run setup.notify("“哟!小姑娘,今天也要加面吗?”大将爽朗地笑着。", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "dessert">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>🍰 预留图片位:甜品店内部</div> <span>路径: images/bg/shop_dessert.jpg</span> </div> <div class="location-desc">少女们最爱的甜品店,橱窗里的草莓芭菲看起来非常诱人。</div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🍰 店内行动</div> <div class="action-list"> <<button "🛋️ 找个座位 (查看菜单)">> <<set $currentShopId = _shopId>> <<set $game.lastShopHub = passage()>> <<goto "功能-现场服务">> <</button>> <<button "💬 听听邻桌的八卦">><<run setup.notify("你偷听到隔壁桌的女生在讨论某个学长的绯闻。", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
<<set _shopId = "restaurant">><<set _shop = setup.shops[_shopId]>> <div class="shop-banner-placeholder"> <div>🍽️ 预留图片位:家庭餐厅内部</div> <span>路径: images/bg/shop_restaurant.jpg</span> </div> <div class="location-desc">提供无限续杯饮料的家庭餐厅,非常适合长时间学习或约会。</div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🍽️ 店内行动</div> <div class="action-list"> <<button "🛋️ 引导入座 (查看菜单)">> <<set $currentShopId = _shopId>> <<set $game.lastShopHub = passage()>> <<goto "功能-现场服务">> <</button>> <<button "💼 申请服务生打工">><<run setup.notify("家庭餐厅打工系统开发中...", "info")>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开店铺</div> <div class="map-grid-container"><<navTo "street_main" "🚶♀️ 离开店铺回到商业街">></div>
/* ========================================================================== */ /* Y2K 复古视窗风 商店系统 */ /* ========================================================================== */ /* 1. 获取当前商店的静态数据 */ <<set _shop = setup.shops[$currentShopId]>> /* 2. 初始化默认分区 (如果未定义) */ <<if ndef $shopSection>><<set $shopSection = "all">><</if>> <div class="passage-header-bar"> <div class="header-location"><<= _shop.icon>> <<= _shop.name>></div> <div class="header-actions"> /* 🌟 核心修复:使用全局变量精准返回到对应的店铺大厅 */ <<button "◀ 离开货架" $game.lastShopHub>><</button>> </div> </div> <div class="location-desc" style="font-size: 13px; margin-bottom: 15px;"> <<= _shop.desc>> </div> <div class="y2k-shop-window"> <!-- 1. 视窗标题栏 --> <div class="window-titlebar"> <span class="window-title"> <<= setup.shops[$currentShopId].icon>> <<= setup.shops[$currentShopId].name>> - ShopOS v1.0 </span> <div class="window-controls"> <span class="win-btn">_</span> <span class="win-btn">□</span> <span class="win-btn close">X</span> </div> </div> <!-- 2. 滚动跑马灯 (千禧年网页灵魂) --> <marquee class="shop-marquee" scrollamount="5"> 欢迎光临【<<= setup.shops[$currentShopId].name>>】! <<if setup.shops[$currentShopId].discountActive>>🔥 今日特价商品火热贩卖中!请注意带有 SALE 标签的商品! <</if>> 👛 您当前的余额为:<<= $wallet.yen>> 円 . 祝您购物愉快!(๑•̀ㅂ•́)و✧ </marquee> <<do tag "shop-main-area">> <div class="shop-os-layout"> <!-- ================= 左侧:邮购目录区 ================= --> <div class="shop-catalog-area"> <!-- 文件夹标签页导航 --> <div class="folder-tabs"> <<button "🌐 全部">> <<set $shopSection = "all">><<redo "shop-main-area">> <</button>> <<button "🔥 特价">> <<set $shopSection = "discount">><<redo "shop-main-area">> <</button>> <<for _i = 0; _i < setup.shops[$currentShopId].sections.length; _i++>> <<set _sec = setup.shops[$currentShopId].sections[_i]>> <<capture _sec>> <<button `_sec.icon + _sec.name`>> <<set $shopSection = _sec.id>><<redo "shop-main-area">> <</button>> <</capture>> <</for>> </div> <!-- 商品列表 (宽条形卡片) --> <div class="catalog-list"> <<for _itemId, _stockItem range $shopStock>> <<set _item = setup.items[_itemId]>> /* 过滤逻辑 */ <<set _show = false>> <<if $shopSection === "all">> <<set _show = true>> <<elseif $shopSection === "discount" and _stockItem.isDiscount>> <<set _show = true>> <<else>> <<set _secDef = setup.shops[$currentShopId].sections.find(s => s.id === $shopSection)>> <<if _secDef and _item.tags.some(t => _secDef.tags.includes(t))>> <<set _show = true>> <</if>> <</if>> <<if _show>> <<capture _itemId, _stockItem, _item>> <div class="catalog-item-row"> <div class="c-item-icon"> <<= _item.icon>> <<if _stockItem.isDiscount>> <div class="sale-sticker">SALE</div> <</if>> </div> <div class="c-item-info"> <div class="c-item-name"><<= _item.name>></div> <div class="c-item-desc"><<= _item.description>></div> </div> <div class="c-item-action"> <div class="c-item-price"> <<if _stockItem.isDiscount>> <span class="old-price"><<= _stockItem.originalPrice>></span> <</if>> <span class="new-price"><<= _stockItem.price>>円</span> </div> <<button "GET">><<run setup.shop.addToCart(_itemId)>><<redo "shop-main-area">><</button>> </div> </div> <</capture>> <</if>> <</for>> </div> </div> <!-- ================= 右侧:收银机打印区 ================= --> <div class="shop-register-area"> <div class="register-hardware-top"></div> <!-- 吐出的热敏纸 --> <div class="receipt-paper-roll"> <div class="paper-header"> <div>🛒 SHOPPING CART</div> <div style="font-size: 10px; color: #888;">------------------</div> </div> <div class="paper-items"> <<set _isEmpty = true>> <<for _itemId, _cartItem range $cart>> <<set _isEmpty = false>> <<set _item = setup.items[_itemId]>> <<capture _itemId, _cartItem>> <div class="paper-row"> <div class="p-name"><<= _item.name>></div> <div class="p-controls"> <<button "-">><<run setup.shop.removeFromCart(_itemId)>><<redo "shop-main-area">><</button>> <span class="p-amount"><<= _cartItem.amount>></span> <<button "+">><<run setup.shop.addToCart(_itemId)>><<redo "shop-main-area">><</button>> </div> <div class="p-subtotal"><<= _cartItem.price * _cartItem.amount>></div> </div> <</capture>> <</for>> <<if _isEmpty>> <div style="text-align: center; color: #ccc; margin: 30px 0; font-style: italic;">( 购物车为空 )</div> <</if>> </div> <div class="paper-footer"> <div style="font-size: 10px; color: #888;">------------------</div> <div class="p-total">TOTAL: <span><<= setup.shop.getCartTotal()>> 円</span></div> </div> </div> <!-- 街机风结账拍钮 --> <div class="register-hardware-bottom"> <<button "💳 确认结账 (CHECKOUT)">> <<set _res = setup.shop.checkout()>> <<if _res.success>> /* 1. 记录小票数据 */ <<set $currentReceipt = _res.receipt>> /* 2. 【核心修改】直接跳转到结算专属页面! */ <<goto "事件-购物结算">> <<else>> <<run setup.notify(_res.msg, "error")>> <</if>> <</button>> </div> </div> </div> <</do>> </div>
<<audio "sfx_pay" play>> <div class="location-desc"> 伴随着收银机“滴”的一声,一张长长的热敏纸小票被打印了出来。 <br><br> 店员微笑着将装好商品的购物袋递给你:“感谢您的惠顾,欢迎下次光临!” </div> /* ========================================================================== */ /* 热敏纸购物小票 UI */ /* ========================================================================== */ <div class="thermal-receipt" style="margin-top: 30px;"> <div class="r-header"> <h3><<= $currentReceipt.shopName>></h3> <p>********************************</p> <p>流水号: <<= $currentReceipt.id>></p> <p>时间: <<= $currentReceipt.date>></p> <p>********************************</p> </div> <table class="r-table"> <tr><th style="text-align:left;">商品</th><th>数量</th><th style="text-align:right;">金额</th></tr> <<for _i = 0; _i < $currentReceipt.items.length; _i++>> <<set _item = $currentReceipt.items[_i]>> <tr> <td style="text-align:left;"><<= _item.name>></td> <td>x<<= _item.amount>></td> <td style="text-align:right;"><<= _item.subtotal>></td> </tr> <</for>> </table> <div class="r-footer"> <p>--------------------------------</p> <div class="r-total">TOTAL: <span><<= $currentReceipt.total>> 円</span></div> <p>--------------------------------</p> <p>CASH: <<= $currentReceipt.total>> 円</p> <p>CHANGE: 0 円</p> <br> <p>THANK YOU FOR SHOPPING!</p> </div> </div> /* ========================================================================== */ /* 收藏与离开操作区 */ /* ========================================================================== */ <div style="text-align: center; margin-top: 30px;" id="collect-btn-area" class="collect-btn-area"> <<button "⭐ 收藏这张小票">> /* 安全锁:防止旧存档报错 */ <<if ndef $records.receipts>><<set $records.receipts = []>><</if>> <<set $records.receipts.push($currentReceipt)>> <<run setup.notify("小票已存入收藏夹!", "success")>> /* 变成已收藏状态 */ <<replace "#collect-btn-area">> <span style="color: var(--fontcolor-grey); font-size: 14px; font-weight: bold;">已收藏 ✓</span> <</replace>> <</button>> </div> <div class="nav-buttons" style="justify-content: center; margin-top: 40px; max-width: 300px; margin-left: auto; margin-right: auto;"> /* 结完账后,提着东西回到主干道 */ <<if $game.location === "commercial_street">> <<navTo "street_main" 5 "🛍️ 提着购物袋离开">> <<else>> <<navTo "alley_main" 5 "🛍️ 提着购物袋离开">> <</if>> </div>
<<set _shop = setup.shops[$currentShopId]>> <div class="passage-header-bar"> <div class="header-location">🛎️ <<= _shop.name>> - 现场服务</div> <div class="header-actions"> /* 使用 return 完美返回到你刚才所在的店铺大厅 */ <<button "◀ 返回大厅" $game.lastShopHub>><</button>> </div> </div> <div class="location-desc" style="font-size: 13px;"> 在这里可以体验店铺提供的专属服务。使用服务会消耗时间和金钱,并立刻产生效果。 </div> /* 调用 JS 宏渲染菜单 */ <<shopServices>>
<<set _tJob = setup.temp.job>> <div class="passage-header-bar"> <div class="header-location">💼 打工中:<<= _tJob.name>> (<<= _tJob.rankData.title>>)</div> <div class="header-actions"> <span style="color: #fff; font-family: var(--font-pixel); font-size: 14px;"> 第 <<= _tJob.hoursWorked + 1>> 小时 | 剩余行动: <<= _tJob.actionsLeft>> </span> </div> </div> <div class="location-desc"> 你穿着工作服站在店里。 <<if _tJob.actionsLeft === 3>> <br><span style="color: var(--fontcolor-highlight);">新的一小时开始了,店里陆陆续续来了几个客人。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">你正在努力工作中...</span> <</if>> </div> <<do tag "job-ui">> /* ========================================================================== */ /* 1. 行动阶段 (每小时 3 次行动) */ /* ========================================================================== */ <<if _tJob.actionsLeft > 0>> <div class="action-list" style="margin-top: 20px;"> /* 选项 A:认真工作 */ <<button "📝 认真接待客人 (消耗精力)">> <<doJobAction "serious">> <</button>> /* 选项 B:摸鱼 */ <<button "💤 躲在仓库摸鱼 (恢复精力)">> <<doJobAction "slack">> <</button>> /* 选项 C:偷窃 (高风险高回报) */ <<if $persona.streetSmart >= 20>> <<button "😈 偷偷拿走收银台的零钱 (增加堕落)">> <<doJobAction "steal">> <</button>> <</if>> /* 选项 D:逃跑 (严重惩罚) */ <<button "🏃♀️ 脱下制服直接开溜 (严重旷工)">> <<run setup.finishJob(true)>> <<goto "事件-打工结算">> <</button>> </div> /* ========================================================================== */ /* 2. 小时结算阶段 (3 次行动用完) */ /* ========================================================================== */ <<else>> <div style="background: #f4f9ff; border: 2px dashed #8faec9; border-radius: 12px; padding: 15px; margin-top: 20px; text-align: center;"> <strong style="color: #8faec9;">⏱️ 一个小时过去了...</strong><br> <span style="font-size: 13px; color: var(--fontcolor-deep1);"> 你完成了这一个小时的工作。本小时应得薪水:<strong style="color: #ffa500;"><<= _tJob.rankData.wage>>円</strong>。 </span> </div> <div class="action-list" style="margin-top: 20px;"> <<button "💪 继续打工 (进入下一小时)">> <<set _tJob.hoursWorked += 1>> <<set _tJob.earnedToday += _tJob.rankData.wage>> <<set _tJob.actionsLeft = 3>> <<goto "功能-打工进行中">> /* 刷新整个页面,更新顶部时间 */ <</button>> <<button "🚪 感觉累了,今天就干到这里">> <<set _tJob.hoursWorked += 1>> <<set _tJob.earnedToday += _tJob.rankData.wage>> <<run setup.finishJob(false)>> <<goto "事件-打工结算">> <</button>> </div> <</if>> <</do>>
<<set _report = setup.temp.jobReport>> <div class="passage-header-bar"> <div class="header-location">📋 打工结算报告</div> </div> <div style="background: var(--background-white); border: 2px solid var(--bordercolor-soft); border-radius: 16px; padding: 20px; margin-top: 20px;"> /* ========================================================================== */ /* 🚨 状态 A:被解雇 (Fired) */ /* ========================================================================== */ <<if _report.isFired>> <div style="text-align: center; color: #ff4d4d; font-size: 24px; font-weight: bold; margin-bottom: 10px;">❌ 你被解雇了!</div> <div style="color: var(--fontcolor-deep1); text-align: center; margin-bottom: 20px; line-height: 1.6;"> <<if _report.isRunaway>> 你竟然在工作时间脱下制服直接跑路了!<br> 店长气得大发雷霆,直接在员工群里宣布将你开除。 <<else>> 因为你今天在工作中的表现实在太差(<<= _report.fireReason>>),<br> 店长忍无可忍,当场收回了你的制服,并让你明天不用来了。 <</if>> <br><br> <span style="color: #ff4d4d; font-weight: bold;">(今天的薪水全部扣发,职位与资历清零!)</span> </div> /* ========================================================================== */ /* ✅ 状态 B:正常完成工作 */ /* ========================================================================== */ <<else>> <div style="text-align: center; color: #8faec9; font-size: 24px; font-weight: bold; margin-bottom: 10px;">✅ 工作完成</div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; font-family: var(--font-pixel); font-size: 14px; margin-bottom: 20px;"> <div style="background: #f9f9f9; padding: 10px; border-radius: 8px;"> <span style="color: #888;">工作时长:</span><br> <strong><<= _report.hours>> 小时</strong> </div> <div style="background: #fff9e6; padding: 10px; border-radius: 8px;"> <span style="color: #888;">本次应得薪水:</span><br> <strong style="color: #ffa500;"><<= _report.wage>> 円</strong> </div> <div style="background: #fff0f5; padding: 10px; border-radius: 8px;"> <span style="color: #888;">摸鱼/失误:</span><br> <strong style="color: #ff4d4d;"><<= _report.mistakes>> 次</strong> </div> <div style="background: #f4f9ff; padding: 10px; border-radius: 8px;"> <span style="color: #888;">偷窃行为:</span><br> <strong style="color: #5e3b5e;"><<= _report.stolen>> 次</strong> </div> </div> <<if _report.mistakes > 0>> <div style="color: #ff4d4d; font-size: 12px; text-align: center; margin-bottom: 10px;"> * 因为工作中的失误,你的薪水被扣除了 <<= _report.mistakes * 20>>%。 </div> <</if>> <<if _report.promoteMsg neq "">> <div style="text-align: center; margin-top: 15px;"> <<= _report.promoteMsg>> </div> <</if>> <</if>> </div> <div class="action-list" style="margin-top: 30px;"> <<button "◀ 换回私服,离开店铺">> <<goto "地点-華昙商业街">> <</button>> </div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真工作】</span><br> “欢迎光临!”<br> 你熟练地扫描着条形码,为客人装袋。这 20 分钟里都是些买烟买酒的普通大叔,没有发生什么特别的事情。 </div> <span style="color:#8faec9; font-size: 12px;">(精力-10,好评+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【麻烦的客人】</span><br> 一个喝醉的中年男人把便当重重地砸在收银台上,抱怨你加热的时间太长了,甚至对你破口大骂。 你只能强忍着委屈,不断低头道歉。 <<set $daily.stress += 15>> </div> <span style="color:#ff4d4d; font-size: 12px;">(精力-10,好评+1,遇到烂客让你额外增加 15 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 叹了口气,继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【大方的客人】</span><br> 你用极其标准的礼仪和甜美的笑容为一位老奶奶结账。 她非常喜欢你,临走时硬塞给你 500円 作为零花钱。 <<set $wallet.yen += 500>> </div> <span style="color:#8faec9; font-size: 12px;">(精力-10,好评+1,额外获得 500円 小费)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 开心地继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【意外的相遇】</span><br> “一共是 850円……诶?”<br> 你抬起头,发现正在结账的竟然是同班同学。对方看到你穿着制服的样子也有些惊讶,你们愉快地聊了几句。 <<set $school.metrics.socialFame += 2>> </div> <span style="color:#8faec9; font-size: 12px;">(精力-10,好评+1,额外增加 2 点校园声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 挥手告别,继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【危险的视线】</span><br> 你在整理低处货架时,一个戴着鸭舌帽的男人凑了过来。 他在拿商品时,故意用粗糙的手背蹭过了你的大腿。你吓得后退了一步,但他只是露出一个下流的笑容,转身去结账了。 <<set $daily.stress += 10>><<set $daily.lust += 10>> </div> <span style="color:#ff69b4; font-size: 12px;">(精力-10,好评+1,被性骚扰导致压力+10,欲火+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 忍着恶心,继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ffa500; font-weight: bold;">【偷懒成功】</span><br> 趁着店里没人,你躲进仓库里坐在纸箱上玩了会儿手机。 直到听见门口的欢迎铃声响起,你才慢悠悠地走回收银台。 </div> <span style="color:#ffa500; font-size: 12px;">(精力恢复,但增加了 1 次失误记录)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 伸了个懒腰,回去站岗">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff4d4d; font-weight: bold;">【摸鱼失败】</span><br> 你躲在仓库的纸箱后面偷偷玩手机,正看得起劲,突然听到背后传来一声咳嗽。 店长黑着脸站在你身后:“外面排起长队了,你在这里干什么?!” <<set setup.temp.job.mistakesToday += 1>><<set $daily.stress += 10>> </div> <span style="color:#ff4d4d; font-size: 12px;">(精力恢复,但被店长抓包!额外增加 1 次失误,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 赶紧跑回收银台">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【隐秘的刺激】</span><br> 你躲在昏暗的仓库里摸鱼,身体突然感到一阵燥热。 听着外面客人走动的声音,你忍不住隔着制服轻轻揉弄起自己的胸部,享受着这种随时可能被发现的背德感。 <<set $daily.lust += 20>><<set $adultLife.metrics.depravity += 1>> </div> <span style="color:#ff69b4; font-size: 12px;">(精力恢复,失误+1,欲火大幅增加+20,堕落+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 整理好衣服,回去站岗">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真工作】</span><br> “让您久等了,这是您的铁板汉堡肉套餐。”<br> 你端着沉重的托盘在餐桌间穿梭,虽然很累,但没有出什么差错。 </div> <span style="color:#8faec9; font-size: 12px;">(精力-10,好评+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff4d4d; font-weight: bold;">【笨手笨脚】</span><br> 因为礼仪和平衡感不足,你在上菜时不小心绊了一下,把一杯冰水全洒在了客人的裤子上! 你慌忙拿毛巾擦拭,被客人狠狠骂了一顿,店长也扣了你的工资。 <<set setup.temp.job.mistakesToday += 1>><<set $daily.stress += 20>> </div> <span style="color:#ff4d4d; font-size: 12px;">(精力-10,好评+1,但因为失误额外增加 1 次失误记录,压力+20)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 委屈地去拿拖把">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【优雅的侍应生】</span><br> 你用极其优雅的姿态为一桌贵客倒酒,举手投足间散发着大家闺秀的气质。 客人对你的服务赞不绝口,甚至在意见卡上专门写了表扬信。 <<set $career.metrics.customerPraise += 3>> </div> <span style="color:#8faec9; font-size: 12px;">(精力-10,优雅的礼仪让你额外获得 3 个好评!)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 微笑着继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【轻浮的客人】</span><br> “小妹妹,长得挺可爱嘛,下班后要不要一起去唱K?”<br> 几个染着黄毛的轻浮男在点餐时故意拉住你的手。你巧妙地用职业假笑敷衍了过去。 <<set $persona.streetSmart += 1>> </div> <span style="color:#ff69b4; font-size: 12px;">(精力-10,好评+1,应对搭讪让你涉世+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 抽回手,继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【网红的烦恼】</span><br> 你正在擦桌子,突然听到旁边传来手机拍照的“咔嚓”声。 原来是你的粉丝认出了你,偷偷拍下了你穿着制服打工的样子发到了网上,引起了一阵小轰动。 <<set $idol.metrics.publicSNS += 50>> </div> <span style="color:#b19cd9; font-size: 12px;">(精力-10,好评+1,意外曝光让你粉丝数+50)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 假装没看见,继续工作">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ffa500; font-weight: bold;">【后厨的诱惑】</span><br> 趁着厨师不注意,你偷偷捏了一块刚炸好的唐扬鸡块塞进嘴里。 刚出锅的鸡块烫得你直哈气,但味道简直棒极了! <<set $daily.mood = Math.min(100, $daily.mood + 10)>> </div> <span style="color:#ffa500; font-size: 12px;">(精力恢复,心情+10,但增加了 1 次失误记录)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 擦擦嘴,回去端盘子">><<goto "功能-打工进行中">><</button>></div>
<div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【制服的秘密】</span><br> 你躲进员工更衣室摸鱼。看着镜子里穿着紧身制服的自己,你忍不住解开了胸前的两颗扣子,露出深邃的沟壑。 你幻想着如果有男同事突然闯进来会怎么样,下体不禁有些湿润。 <<set $daily.lust += 20>><<set $adultLife.metrics.depravity += 1>> </div> <span style="color:#ff69b4; font-size: 12px;">(精力恢复,失误+1,欲火大幅增加+20,堕落+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 扣好扣子,回去端盘子">><<goto "功能-打工进行中">><</button>></div>
/* 每次进入大厦前台,确保刷新一次活跃主题池 */ <<if ndef $activeGachaThemes>><<run setup.gacha.refreshActiveThemes()>><</if>> <div class="location-desc"> 一楼大厅是休息区和展示区。墙上挂着巨大的海报,展示着本期上新的限时扭蛋。 <br>前台的兼职生百无聊赖地嚼着口香糖:“兑换扭蛋币在这里哦,<<= setup.gachaConfig.coinPrice>> 円一枚。二楼以上才是扭蛋区。” </div> <div class="wallet-list" style="margin-bottom: 20px;"> <div class="wallet-item"><span>💴 你的日元:</span> <strong><<= $wallet.yen>></strong></div> <div class="wallet-item"><span>🎰 你的扭蛋币:</span> <strong style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></strong></div> </div> <div class="action-list"> <<link "🪙 兑换 1 枚扭蛋币 (500円)">> <<if $wallet.yen >= 500>> <<set $wallet.yen -= 500>><<set $wallet.gachaCoins += 1>><<run setup.notify("兑换成功!", "success")>><<goto "地点-扭蛋大厦_1F">> <<else>><<run setup.notify("日元不足!", "error")>><</if>> <</link>> <<link "💰 兑换 10 枚扭蛋币 (4000円) [优惠!]">> <<if $wallet.yen >= 4000>> <<set $wallet.yen -= 4000>><<set $wallet.gachaCoins += 10>><<run setup.notify("兑换成功!", "success")>><<goto "地点-扭蛋大厦_1F">> <<else>><<run setup.notify("日元不足!", "error")>><</if>> <</link>> </div> <div class="step-title" style="margin-top: 20px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_2f" "⬆️ 前往 2F 古風层">> <<navTo "gacha_3f" "⬆️ 前往 3F アニマル层">> <<navTo "gacha_4f" "⬆️ 前往 4F モダン层">> <<navTo "gacha_5f" "⬆️ 前往 5F サイバー层">> <<navTo "gacha_6f" "⬆️ 前往 6F 乙女层">> <<navTo "gacha_7f" "⬆️ 前往 7F ファンタジー层">> <<navTo "street_main" "🚪 离开大厦">> </div>
<<set _currentStyle = "kofuu">> <div class="location-desc"> 这里是 2F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。<br> <span style="color: var(--fontcolor-grey);">* 提示:包含常驻机器与随机刷新的限时机器。注意观察机器上的【残り】数量,数量越少,抽出隐藏款的概率越高!</span> </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_3f" "⬆️ 前往 3F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<<set _currentStyle = "animal">> <div class="location-desc"> 这里是 3F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。 </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_4f" "⬆️ 前往 4F">> <<navTo "gacha_2f" "⬇️ 返回 2F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<<set _currentStyle = "modern">> <div class="location-desc"> 这里是 4F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。 </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_5f" "⬆️ 前往 5F">> <<navTo "gacha_3f" "⬇️ 返回 3F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<<set _currentStyle = "cyber">> <div class="location-desc"> 这里是 5F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。 </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_6f" "⬆️ 前往 6F">> <<navTo "gacha_4f" "⬇️ 返回 4F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<<set _currentStyle = "otome">> <div class="location-desc"> 这里是 6F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。 </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_7f" "⬆️ 前往 7F">> <<navTo "gacha_5f" "⬇️ 返回 5F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<<set _currentStyle = "fantasy">> <div class="location-desc"> 这里是 7F <<= setup.gachaConfig.styles[_currentStyle].name>> 层。 </div> <<do tag "gacha-floor">> <div style="text-align: center; margin-bottom: 15px; font-weight: bold;">当前扭蛋币:<span style="color: var(--fontcolor-highlight);"><<= $wallet.gachaCoins>></span> 枚</div> <<if _gachaResult>> <div class="gacha-result-box" @style="'border-color: ' + _gachaResult.color"> <div class="g-icon"><<= _gachaResult.icon>></div> <div class="g-name">[<<= _gachaResult.rarityName>>] <<= _gachaResult.name>></div> <div class="g-msg"><<= _gachaResult.msg>></div> </div> <</if>> <div class="gacha-machine-grid"> <<for _themeId, _themeData range $activeGachaThemes>> <<if _themeData.tags.includes(_currentStyle)>><<gachaMachine _themeId>><</if>> <</for>> </div> <</do>> <div class="step-title" style="margin-top: 30px;">🚪 乘坐电梯</div> <div class="map-grid-container"> <<navTo "gacha_6f" "⬇️ 返回 6F">> <<navTo "gacha_1f_desk" "⬇️ 返回 前台">> </div>
<div class="location-desc"> <span style="font-size: 18px;">✨</span> <strong style="color: #b19cd9;">星光广场</strong><br><br> 你踏入了一个不属于现实的维度。天空中没有太阳,只有极光般的绚烂色彩和巨大的齿轮虚影在缓缓转动。<br> 广场地面由发光的透明水晶铺成,半透明的妖精们在空中飞舞,发出银铃般的笑声。 </div> <div class="action-list"> <<scanEvents>> <<button "🔮 吸收纯净魔力 (30分钟)">> <<ts 30>><<set $daily.mana = $daily.maxMana>> <<run setup.notify("你深吸一口气,妖精乡的纯净魔力瞬间填满了你的身体!(魔力全满)", "success")>><<goto passage()>> <</button>> </div> <div class="step-title" style="color: #b19cd9; border-left-color: #b19cd9; margin-top: 20px;">🗺️ 探索妖精乡</div> <div class="map-grid-container"> <<navTo "fairy_shop" "🧪 前往魔女工坊">> <<navTo "fairy_tree" "🌳 前往世界树之根">> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 返回现实</div> <div class="map-grid-container"> <<navTo "moonlightEntrance" "🌀 穿过传送门 (返回商业街)">> <<navTo "home" "🏠 使用归还魔法 (直接回家)">> </div>
<div class="location-desc"> <span style="font-size: 18px;">🧪</span> <strong style="color: #b19cd9;">魔女工坊</strong><br><br> 堆满古老羊皮纸和沸腾坩埚的魔法商店。店主是一位戴着尖彩帽、看不清面容的魔女。<br> “欢迎来到里世界,小家伙。只要你有足够的【月之碎片】,这里什么都能买到。” </div> <div class="action-list"> <<scanEvents>> <<button "🛒 浏览魔法物品 (开发中)">> <<run setup.notify("魔法商店系统尚未开放,敬请期待!", "info")>> <</button>> <<button "💬 询问魔法知识">><<run setup.notify("魔女发出了沙哑的笑声,没有理你。", "info")>><</button>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "fairy_plaza" "✨ 返回星光广场">> </div>
<div class="location-desc"> <span style="font-size: 18px;">🌳</span> <strong style="color: #b19cd9;">世界树之根</strong><br><br> 一棵巨大到看不见顶端的发光巨树。树根盘根错节,形成了一个天然的祭坛。<br> 这里是整个月華镇魔力地脉的交汇点,站在这里,你能感受到大地的脉动。 </div> <div class="action-list"> <<scanEvents>> <<button "🌟 献上祈祷 (消耗 50 魔力)">> <<if $daily.mana >= 50>> <<set $daily.mana -= 50>><<set $skills.magic.combat.exp += 10>> <<run setup.notify("你将魔力注入世界树,获得了魔法的启示!(魔法战斗经验+10)", "success")>><<goto passage()>> <<else>> <<run setup.notify("魔力不足,无法引起世界树的共鸣。", "error")>> <</if>> <</button>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "fairy_plaza" "✨ 返回星光广场">> </div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 你全神贯注地听完了这节 <strong><<= setup.temp.courseName>></strong> 课。老师讲的重点你全都记在了笔记本上。 虽然大脑有些疲惫,但感觉受益匪浅。 </div> <span style="color:#8faec9; font-size: 12px;">(对应属性提升,学力指数+1,精力下降,压力微增)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 你努力想要听懂这节 <strong><<= setup.temp.courseName>></strong> 课,但黑板上的内容对你来说就像天书一样。 你越是努力思考,大脑就越是混乱,最后只能烦躁地咬着笔头。 <<set $daily.stress += 10>> </div> <span style="color:#ff4d4d; font-size: 12px;">(基础属性提升,但因为学识不足,额外增加 10 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 老师突然点名提问了一道超纲的 <strong><<= setup.temp.courseName>></strong> 题。 你站起身,从容不迫地给出了完美的解答。老师赞许地点了点头,周围的同学也投来了敬佩的目光。 <<set $school.metrics.socialFame += 2>> </div> <span style="color:#8faec9; font-size: 12px;">(基础属性提升,额外增加 2 点社交声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 下课铃响后,前排的女生红着脸转过头:“那个……你 <strong><<= setup.temp.courseName>></strong> 课的笔记能借我抄一下吗?” 你大方地借给了她,她在女生小团体里大大夸赞了你的温柔。 <<set $school.metrics.socialFame += 3>> </div> <span style="color:#8faec9; font-size: 12px;">(基础属性提升,优等生的光环让你额外增加 3 点社交声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 这节 <strong><<= setup.temp.courseName>></strong> 课的内容有些晦涩。 但妖精米奈悄悄坐在你的肩膀上,用只有你能听到的声音为你讲解了难点。在她的帮助下,你轻松掌握了知识。 <<set $daily.stress = Math.max(0, $daily.stress - 10)>> </div> <span style="color:#8faec9; font-size: 12px;">(基础属性提升,米奈的辅导让你减轻了 10 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【认真听讲】</span><br> 你努力保持着专注,听完了这节 <strong><<= setup.temp.courseName>></strong> 课。 虽然没有发生什么特别的事情,但平平淡淡才是高中生活的常态。 </div> <span style="color:#8faec9; font-size: 12px;">(对应属性提升,精力下降,压力微增)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #8faec9; font-weight: bold;">【趴桌补觉】</span><br> 你用 <strong><<= setup.temp.courseName>></strong> 课本挡住脸,在老师单调的讲课声中沉沉睡去。 这一觉睡得非常安稳,醒来时感觉精神焕发。 </div> <span style="color:#8faec9; font-size: 12px;">(精力大幅恢复,压力下降,叛逆微增)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #8faec9; font-weight: bold;">【趴桌补觉】</span><br> 你正睡得香甜,突然“啪”的一声,一截粉笔头精准地砸在了你的脑门上! “上课睡觉!这道题你来回答!”老师在讲台上怒吼。全班同学都转过头来看你,你捂着额头,尴尬地站了起来。 <<set $daily.stress += 15>><<set $school.metrics.demerits += 1>> </div> <span style="color:#ff4d4d; font-size: 12px;">(精力恢复,但被老师记过,额外增加 15 点压力!)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #8faec9; font-weight: bold;">【趴桌补觉】</span><br> 你在 <strong><<= setup.temp.courseName>></strong> 课上睡着了。 当老师走过来巡视时,你平时积攒的好人缘发挥了作用——旁边的同学故意弄掉文具盒吸引了老师的注意力,让你逃过一劫。 </div> <span style="color:#8faec9; font-size: 12px;">(精力大幅恢复,压力下降,多亏了同学的掩护)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #8faec9; font-weight: bold;">【趴桌补觉】</span><br> 你趴在桌上,却做了一个极其诡异的梦。梦里有无数只眼睛在黑板上盯着你。 你猛地惊醒,出了一身冷汗。你揉了揉眼睛,发现黑板上的粉笔字似乎真的扭曲了一瞬。 <<set $daily.stress += 10>><<set $persona.insight += 2>> </div> <span style="color:#b19cd9; font-size: 12px;">(精力恢复,但噩梦让你增加了 10 点压力,灵视额外+2)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #8faec9; font-weight: bold;">【趴桌补觉】</span><br> 你在睡梦中,感觉到一双冰凉的手在抚摸你的大腿。 你猛地惊醒,发现妖精莉莉安正趴在你的课桌下,冲你露出一个魅惑的笑容。你赶紧夹紧双腿,生怕发出奇怪的声音。 <<set $daily.lust += 15>> </div> <span style="color:#ff69b4; font-size: 12px;">(精力恢复,但莉莉安的恶作剧让你额外增加了 15 点欲火)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【偷偷玩手机】</span><br> 你把手机藏在笔袋后面,在女生群聊里聊了一整节 <strong><<= setup.temp.courseName>></strong> 课的八卦。 虽然什么知识都没学到,但你掌握了学校里最新的恋爱动向。 </div> <span style="color:#b19cd9; font-size: 12px;">(涉世提升,社交声望+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【偷偷玩手机】</span><br> 你正低头按着键盘,突然感觉头顶有一道阴影。 老师不知何时站在了你的桌前!你吓得立刻把手机塞进裙子口袋里。虽然没被当场没收,但还是被狠狠训斥了一顿。 <<set $daily.stress += 15>><<set $school.metrics.demerits += 1>> </div> <span style="color:#ff4d4d; font-size: 12px;">(涉世提升,但被老师记过,额外增加 15 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【偷偷玩手机】</span><br> 安静的教室里,突然响起了极其大声的流行音乐手机铃声! 你手忙脚乱地想要关掉,却不小心把手机碰掉在了地上。全班同学哄堂大笑,老师的脸黑得像锅底。 <<set $daily.stress += 20>><<set $school.metrics.demerits += 1>><<set $school.metrics.socialFame -= 2>> </div> <span style="color:#ff4d4d; font-size: 12px;">(严重社死!压力+20,记过+1,社交声望-2)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【偷偷玩手机】</span><br> 你无聊地打开了手机里的抽卡游戏,随手点了一发单抽。 屏幕上闪过耀眼的彩光——居然出了当期限定的 SSR!你激动得差点在课堂上叫出声来,一整天的心情都变好了! <<set $daily.mood = Math.min(100, $daily.mood + 20)>> </div> <span style="color:#ffb6c1; font-size: 12px;">(涉世提升,欧气爆发让你额外恢复了 20 点心情!)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #b19cd9; font-weight: bold;">【偷偷玩手机】</span><br> 你正在无聊地刷着网页,里世界手机突然震动了一下。 是一条来自地下论坛的匿名推送,上面记载着关于月華镇某个都市传说的隐秘情报。 <<set $persona.insight += 2>> </div> <span style="color:#b19cd9; font-size: 12px;">(涉世提升,意外获得了情报,灵视额外+2)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ffb6c1; font-weight: bold;">【拿镜子补妆】</span><br> 你用课本做掩护,熟练地拿出口红和散粉。 在 <strong><<= setup.temp.courseName>></strong> 课结束时,你已经整理好了仪容,随时可以光鲜亮丽地去约会。 </div> <span style="color:#ffb6c1; font-size: 12px;">(美妆技能提升,性感+1,精力下降)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ffb6c1; font-weight: bold;">【拿镜子补妆】</span><br> 今天的手感出奇的好!你用极短的时间完成了一个完美的心机素颜妆。 下课后,几个男生忍不住多看了你几眼,连女生都跑来问你用了什么牌子的唇彩。 <<set $school.metrics.socialFame += 2>> </div> <span style="color:#ffb6c1; font-size: 12px;">(美妆技能提升,性感+1,额外增加 2 点社交声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ffb6c1; font-weight: bold;">【拿镜子补妆】</span><br> 你正准备画眼线,老师突然拍了一下黑板,吓得你手一抖,眼线直接画到了太阳穴上! 你只能手忙脚乱地用湿巾擦拭,弄得满脸狼狈。 <<set $daily.stress += 10>> </div> <span style="color:#ff4d4d; font-size: 12px;">(美妆技能提升,性感+1,但因为失误额外增加了 10 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ffb6c1; font-weight: bold;">【拿镜子补妆】</span><br> 你微微仰起头涂抹唇彩的动作,散发着一种不符合高中生的成熟魅力。 你从镜子的反光中注意到,斜后方的男生整节课都在偷偷盯着你的嘴唇看。 <<set $school.metrics.socialFame += 1>> </div> <span style="color:#ffb6c1; font-size: 12px;">(美妆技能提升,性感+1,额外增加 1 点社交声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ffb6c1; font-weight: bold;">【拿镜子补妆】</span><br> 你高超的化妆技巧引起了旁边辣妹小团体的注意。 下课后,她们主动凑过来向你请教如何贴出那么自然的假睫毛,你很快和她们打成了一片。 <<set $school.metrics.socialFame += 3>> </div> <span style="color:#ffb6c1; font-size: 12px;">(美妆技能提升,性感+1,高超的技术让你额外增加 3 点社交声望)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【课桌下的秘密】</span><br> 在枯燥的 <strong><<= setup.temp.courseName>></strong> 课上,你悄悄把手伸到了裙子底下。 听着老师在讲台上写粉笔字的声音,你在课桌的阴影中不断揉弄着自己。强忍着不发出声音的背德感让你很快达到了高潮,大腿内侧一片泥泞。 </div> <span style="color:#ff69b4; font-size: 12px;">(性感提升,欲火大幅增加,堕落+1)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【课桌下的秘密】</span><br> 你沉浸在自我安慰的快感中,呼吸变得越来越急促。 “同学,你脸怎么这么红?是不舒服吗?”老师突然停下讲课问道。你吓得立刻抽出手指,结结巴巴地谎称自己有点热。 <<set $daily.stress += 20>> </div> <span style="color:#ff4d4d; font-size: 12px;">(性感提升,欲火大幅增加,堕落+1,差点社死让你额外增加 20 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【课桌下的秘密】</span><br> 你故意把双腿微微分开,手指在裙底动作的幅度越来越大。 你注意到旁边的男生已经完全无心听课了,他正满脸通红地盯着你微微颤抖的裙摆。这种被人偷窥的刺激感让你更加兴奋。 <<set $bodyTuning.fetish.exhibition += 2>> </div> <span style="color:#ff69b4; font-size: 12px;">(性感提升,欲火大幅增加,堕落+1,露出癖额外+2)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<<run if (!setup.temp) setup.temp = { courseName: "未知" }>> <div class="location-desc"> <span style="color: #ff69b4; font-weight: bold;">【课桌下的秘密】</span><br> 强烈的快感让你在课堂上达到了顶峰。 但当你回过神来时,发现内裤已经被爱液彻底弄湿了,黏糊糊地贴在私处,让你接下来的时间都坐立难安。 <<set $daily.cleanliness = Math.max(0, $daily.cleanliness - 20)>><<set $daily.stress += 10>> </div> <span style="color:#ff4d4d; font-size: 12px;">(性感提升,欲火大幅增加,堕落+1,清洁度-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 下课了,返回教室" "地点-高校_教室">><</button>></div>
<div class="location-desc" style="line-height: 1.8; font-size: 14px; margin-top: 10px;"> 你跟随着人流来到了学校的体育馆。 <br><br> <<if $Time.month === 4>> 今天是四月的第一天,也是你高中生涯的起点。体育馆外樱花飘落,新生们穿着崭新的制服,脸上都带着期待与紧张的神情。 <br><br> “咳咳,各位新生,欢迎来到華昙高校……” <br><br> 地中海发型的校长站在讲台上,开始了长达一个小时的冗长致辞。你强撑着精神听完了校规和对新学期的展望,周围已经有不少同学开始偷偷打瞌睡了。 <<else>> 经历了漫长的假期,同学们重新聚在体育馆里。校长简单总结了上学期的成绩,并鼓励大家在新学期继续努力。 <</if>> <br><br> <span style="color: var(--fontcolor-grayblue); font-size: 12px;">(漫长的典礼终于结束,时间来到了中午……)</span> </div> <div class="action-list" style="margin-top: 20px;"> <<if $Time.month === 4>> /* 4月开学,中午去走廊吃午饭,下午去招新 */ <<button "🍱 典礼结束,去走廊吃午饭">> <<run setup.time.forwardTimeTo(12, 0)>> <<set $daily.attendedEvent = true>> <<updateMap "school_hallway">> <<goto "地点-高校_走廊">> <</button>> <<else>> /* 其他学期,直接回教室 */ <<button "🎒 典礼结束,返回教室">> <<run setup.time.forwardTimeTo(12, 0)>> <<set $daily.attendedEvent = true>> <<updateMap "school_class">> <<goto "地点-高校_教室">> <</button>> <</if>> </div>
<div class="location-desc" style="line-height: 1.8; font-size: 14px; margin-top: 10px;"> 午休过后,整个操场和一楼走廊变成了社团招新的海洋! <br><br> “同学!来看看我们田径部吧!青春就是要挥洒汗水啊!”<br> “轻音部绝赞招新中——不会乐器也没关系哦!” <br><br> 各个社团的学长学姐们拿着传单,热情地向新生们推销着自己的社团。 你看到田径部的学长在展示肌肉,轻音部的学姐在走廊里弹着电吉他,而角落里似乎还有一个穿着黑袍的神秘社团在发着奇怪的符咒…… <br><br> 高中三年,加入一个合适的社团是非常重要的。你要去看看哪些社团的简章呢? </div> <div class="action-list" style="margin-top: 20px;"> /* 选项 1:打开社团选择弹窗 */ <<button "📋 浏览社团招新简章">> <<run setup.ui.open("note", "CLUB RECRUITMENT", "UI-社团列表")>> <</button>> /* 选项 2:不加社团,直接聊天打发时间 */ <<button "💬 不加社团,和旁边的新生聊天">> <<run setup.time.forwardTimeTo(16, 0)>> <<set $school.club = "none">> <<set $persona.streetSmart += 2>> <<set $daily.mood = Math.min(100, $daily.mood + 10)>> <<run setup.notify("你和大家聊得很开心,度过了轻松的下午。(涉世+2,心情+10)", "success")>> <<updateMap "school_hallway">> <<goto "地点-高校_走廊">> <</button>> </div>
/* ========================================================================== */ /* 1. 动态获取当前课程与目标教室 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _currentCourseName = _courses[$game.tempCurrentBlock].name>> <<set _targetRoom = "地点-高校_教室">> /* 默认普通教室 */ <<set _targetId = "school_class">> /* 默认普通教室 ID */ /* 🌟 核心新增:判定体育课是否在室内 (夏天6-9月、冬天12-2月、雨天) */ <<set _isGymWeather = ($Time.month >= 6 and $Time.month <= 9) or ($Time.month === 12 or $Time.month <= 2) or ($Time.weather === "rainy" or $Time.weather === "storm")>> /* 根据课程名称,决定跳转的目标地点和 ID */ <<if _currentCourseName === "体育">> <<if _isGymWeather>> <<set _targetRoom = "地点-高校_体育馆">><<set _targetId = "school_gym">> <<else>> <<set _targetRoom = "地点-高校_操场">><<set _targetId = "school_field">> <</if>> <<elseif _currentCourseName === "理科">> <<set _targetRoom = "地点-高校_理科室">><<set _targetId = "school_lab">> <<elseif _currentCourseName === "美术">> <<set _targetRoom = "地点-高校_美术室">><<set _targetId = "school_art_room">> <<elseif _currentCourseName === "音乐">> <<set _targetRoom = "地点-高校_音乐室">><<set _targetId = "school_music_room">> <<elseif _currentCourseName === "家庭科">> <<set _targetRoom = "地点-高校_家庭科室">><<set _targetId = "school_home_econ">> <</if>> /* ========================================================================== */ /* 2. 场景描述与惩罚结算 */ /* ========================================================================== */ <div class="location-desc" style="border-color: #ffa500; background: #fff9e6;"> <span style="font-size: 18px;">⚠️</span> <strong style="color: #ffa500;">迟到被抓!</strong><br><br> 你推开门,全班同学和讲台上的老师齐刷刷地看向你。<br> <<if $game.tempMinutesLate < 15>> 老师皱了皱眉:“你迟到了 <strong style="color:#ff4d4d;"><<= $game.tempMinutesLate>> 分钟</strong>。快回队伍/座位,下次注意。” <<else>> 老师重重地叹了口气:“你迟到了整整 <strong style="color:#ff4d4d;"><<= $game.tempMinutesLate>> 分钟</strong>!这节课你不用上了,去旁边罚站!” <</if>> </div> <div class="step-title" style="color: #ffa500; border-left-color: #ffa500;">⚠️ 应对方式</div> <div class="action-list"> /* --- 状态 A:短时间迟到 (<15分钟) --- */ <<if $game.tempMinutesLate < 15>> <<link "😔 低头道歉回到位置">> <<set $daily.classTardy[$game.tempCurrentBlock] = true>> <<if $school.tier === 1 or $school.tier === 2>> <<run setup.notify("作为优等生,这点小失误大家都没放在心上。", "success")>> <<elseif $school.tier === 4>> <<set $school.metrics.socialFame -= 1>><<run setup.school.updateCaste()>> <<run setup.notify("同学们发出窃笑,你的处境变得更尴尬了。(声望-1)", "error")>> <<else>> <<run setup.notify("你赶紧溜回了位置。", "info")>> <</if>> <<updateMap _targetId>> <<goto _targetRoom>> <</link>> <<if $persona.rebellion >= 30>> <<link "😈 满不在乎地走过去 (威慑力+1)">> <<set $daily.classTardy[$game.tempCurrentBlock] = true>> <<set $school.metrics.intimidation += 1>><<run setup.school.updateCaste()>> <<run setup.notify("你无视了老师的目光,大摇大摆地走过去。", "warning")>> <<updateMap _targetId>> <<goto _targetRoom>> <</link>> <</if>> /* --- 状态 B:长时间迟到 (>=15分钟) --- */ <<else>> <<link "😔 乖乖去旁边罚站 (记过+1, 压力+10)">> <<set $daily.classTardy[$game.tempCurrentBlock] = true>> <<set $school.metrics.demerits += 1>><<set $daily.stress += 10>><<run setup.school.updateCaste()>> <<if $school.tier === 1 or $school.tier === 2>> <<run setup.notify("优等生被罚站!同学们震惊地看着你,你的完美形象受损了!", "error")>> <<else>> <<run setup.notify("你无奈地走到旁边罚站。", "error")>> <</if>> <<updateMap _targetId>> <<goto _targetRoom>> <</link>> <<if $persona.streetSmart >= 30 or $school.metrics.socialFame >= 30>> <<link "💬 撒娇卖萌蒙混过关 (涉世+2)">> <<set $daily.classTardy[$game.tempCurrentBlock] = true>> <<set $persona.streetSmart += 2>> <<run setup.notify("“老师对不起嘛~因为帮隔壁班同学搬东西才晚的~”你精湛的演技让老师叹了口气,免除了记过。", "success")>> <<updateMap _targetId>> <<goto _targetRoom>> <</link>> <</if>> <<if $persona.rebellion >= 40>> <<link "🤬 摔门而出,直接逃课 (威慑力+3, 记过+2)">> <<set $daily.classTardy[$game.tempCurrentBlock] = true>> <<set $school.metrics.intimidation += 3>><<set $school.metrics.demerits += 2>><<run setup.school.updateCaste()>> <<run setup.notify("“不听就不听!”你转身离开,留下一脸铁青的老师。", "warning")>> <<updateMap "school_hallway">> <<goto "地点-高校_走廊">> <</link>> <</if>> <</if>> </div>
/* 初始进入时的结算 (只结算一次,用临时变量控制) */ <<if ndef _nudeWanderStarted>> <<set _nudeWanderStarted = true>> <<set $daily.lust = Math.min(100, $daily.lust + 30)>> <<set $bodyTuning.fetish.exhibition += 2>> <<set $daily.stress += 20>> <<set $adultLife.metrics.depravity += 1>> <</if>> <div class="location-desc" style="border-color: #ff00ff; background: #fff0f5;"> <span style="font-size: 24px;">🔞</span> <strong style="color: #ff00ff; font-size: 18px;">极度危险的校园散步</strong><br><br> 你竟然真的把衣服全脱了,一丝不挂地走出了更衣室!<br> 现在是上课时间,走廊里空无一人,只能听到远处教室里传来的讲课声。你赤脚踩在冰凉的木地板上,微风吹过你毫无防备的身体,强烈的背德感让你浑身发抖,双腿发软,甚至连呼吸都变得灼热起来。 <br><br> <span style="font-size: 12px; color: #ff69b4;">(欲火急剧上升,压力增加,露出癖与堕落度提升)</span> </div> <div class="step-title" style="color: #ff00ff; border-left-color: #ff00ff;">👣 探索空荡荡的校园</div> <div class="action-list"> /* 选项 1:胆小退缩 (安全退出) */ <<link "🙈 太可怕了,赶紧逃回更衣室!">> <<ts 5>> <<run setup.notify("你受不了这种随时会被发现的刺激,红着脸逃回了更衣室。", "info")>> <<unset _nudeWanderStarted>> <<updateMap "school_locker_room">> <<goto "地点-高校_更衣室">> <</link>> /* 选项 2:走廊自慰 (低门槛,20%被抓) */ <<if $daily.lust >= 50>> <<link "💦 靠在走廊的储物柜上自我安慰 (10分钟)">> <<ts 10>> <<set $daily.lust = Math.min(100, $daily.lust + 20)>> <<set $bodyTuning.fetish.exhibition += 1>> <<if Math.random() < 0.2>> <<goto "事件-校园_裸体被抓">> <<else>> <<run setup.notify("听着远处的讲课声,你在走廊里达到了高潮,大腿内侧一片泥泞...", "warning")>> <<goto "事件-校园_裸体游荡">> <</if>> <</link>> <</if>> /* 选项 3:男厕所探险 (需要露出癖,30%被抓) */ <<if $bodyTuning.fetish.exhibition >= 10>> <<link "🚶♀️ 偷偷溜进旁边的男厕所 (10分钟)">> <<ts 10>> <<set $daily.lust = Math.min(100, $daily.lust + 15)>> <<set $bodyTuning.fetish.exhibition += 2>> <<set $adultLife.metrics.depravity += 1>> <<if Math.random() < 0.3>> <<goto "事件-校园_裸体被抓">> <<else>> <<run setup.notify("你光着身子站在男厕所的小便池前,想象着男生们在这里的样子,下体不禁湿透了。", "warning")>> <<goto "事件-校园_裸体游荡">> <</if>> <</link>> <</if>> /* 选项 4:窗外偷窥 (极高门槛,50%被抓) */ <<if $bodyTuning.fetish.exhibition >= 30>> <<link "👀 走到上课的教室前门偷看 (10分钟)">> <<ts 10>> <<set $daily.lust = 100>> <<set $bodyTuning.fetish.exhibition += 5>> <<set $adultLife.metrics.depravity += 3>> <<if Math.random() < 0.5>> <<goto "事件-校园_裸体被抓">> <<else>> <<run setup.notify("你赤裸着身体贴在门框旁,看着里面认真上课的同学。这种极致的刺激让你瞬间绝顶!", "warning")>> <<goto "事件-校园_裸体游荡">> <</if>> <</link>> <</if>> </div>
<div class="location-desc" style="border-color: #ff00ff; background: #fff0f5;"> <span style="font-size: 24px;">🚨</span> <strong style="color: #ff00ff; font-size: 18px;">最糟糕的状况!</strong><br><br> “喂!那边那个!你在干什么?!”<br> 一声怒吼在走廊里炸响。是正在巡逻的体育老师!<br> 他瞪大了眼睛,看着一丝不挂、满脸潮红的你,震惊得连哨子都掉在了地上。 <br><br> “你、你这成何体统!快给我滚去教导处!” </div> /* 基础惩罚结算 */ <<set $daily.stress = 100>> <<set $school.metrics.demerits += 5>> <<set $school.metrics.socialFame -= 20>> <<run setup.school.updateCaste()>> <<unset _nudeWanderStarted>> <div class="action-list" style="margin-top: 20px;"> /* 选项 1:正常受罚 (社会性死亡) */ <<link "😭 哭着捂住身体,被带走 (记过+5, 声望暴跌)">> <<ts 60>> <<run setup.notify("你被披上一件外套带到了教导处,受到了极其严厉的处分,并在全校出名了。", "error")>> /* 强制穿上衣服并送回家 */ <<set $daily.style.outfit = "无">><<set $daily.style.top = "school_top_summer">><<set $daily.style.bottom = "school_skirt_normal">> <<set $daily.style.bra = "basic_bra_white">><<set $daily.style.panties = "basic_panties_white">> <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> /* 选项 2:堕落路线 (用身体换取免责,获得把柄) */ <<if $adultLife.metrics.depravity >= 30>> <<link "💋 走上前,抱住老师的手臂求饶 (解锁把柄)">> <<ts 60>> <<set $records.blackmail.push("体育老师的秘密把柄")>> <<set $adultLife.metrics.prostitution += 1>> <<run setup.notify("你用身体平息了老师的怒火,但他拍下了你的裸照作为‘把柄’...", "warning")>> /* 强制穿上衣服并送回家 */ <<set $daily.style.outfit = "无">><<set $daily.style.top = "school_top_summer">><<set $daily.style.bottom = "school_skirt_normal">> <<set $daily.style.bra = "basic_bra_white">><<set $daily.style.panties = "basic_panties_white">> <<updateMap "home">> <<goto "地点-和室自宅">> <</link>> <</if>> </div>
<div class="passage-header-bar"> <div class="header-location">📝 期末考试进行中...</div> </div> <div class="location-desc" style="line-height: 1.8;"> 伴随着上课铃声的响起,监考老师抱着厚厚的试卷走进了教室。<br> “把与考试无关的东西都收起来!现在开始分发试卷。”<br><br> 教室里只剩下笔尖摩擦纸张的沙沙声。你看着试卷上的题目……<br> <<if $persona.academics >= 50>> <span style="color: #8faec9;">这些题目对你来说简直是小菜一碟。你文思泉涌,下笔如有神,甚至还有时间检查两遍。</span> <<elseif $persona.academics >= 20>> <span style="color: #ffa500;">大部分题目你都有印象,虽然有些大题卡了壳,但总体来说还算顺利。</span> <<else>> <span style="color: #ff4d4d;">试卷上的字分开你都认识,连在一起就像天书一样。你只能咬着笔头,绝望地瞎蒙选择题。</span> <</if>> <br><br> <span style="color: var(--fontcolor-grayblue); font-size: 12px;">(经过漫长的一天,考试终于结束了。几天后,成绩单发了下来……)</span> </div> /* 调用结算引擎,消耗时间到下午放学 */ <<run setup.time.forwardTimeTo(15, 0)>> <<set _examResult = setup.school.calcExamScore()>> <<set $daily.energy -= 40>><<set $daily.stress += 20>> <!-- 成绩单 UI --> <div style="background: #fff; border: 2px solid #8faec9; border-radius: 12px; padding: 20px; margin: 20px auto; max-width: 400px; box-shadow: 5px 5px 0 rgba(143, 174, 201, 0.2);"> <div style="text-align: center; font-family: var(--font-pixel); font-size: 18px; font-weight: bold; color: #8faec9; margin-bottom: 15px; border-bottom: 2px dashed #8faec9; padding-bottom: 10px;"> 📊 華昙高校 成绩通知单 </div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; font-size: 14px; margin-bottom: 15px;"> <div>📐 数学:<strong><<= _examResult.grades.math>></strong></div> <div>📖 国语:<strong><<= _examResult.grades.literature>></strong></div> <div>🔤 英语:<strong><<= _examResult.grades.english>></strong></div> <div>🧪 理科:<strong><<= _examResult.grades.science>></strong></div> <div>📜 历史:<strong><<= _examResult.grades.history>></strong></div> </div> <div style="background: #f4f9ff; padding: 10px; border-radius: 8px; text-align: center;"> <div style="font-size: 12px; color: #888;">五科总分</div> <div style="font-size: 24px; font-weight: bold; color: var(--fontcolor-deep1);"><<= _examResult.total>> / 500</div> <div style="margin-top: 5px; font-size: 14px; color: #ff69b4; font-weight: bold;"> 年级排名:第 <<= _examResult.rank>> 名 </div> </div> </div> <!-- 奖惩结算区 --> <div class="location-desc" style="margin-top: 20px;"> <<if _examResult.rank <= 10>> <span style="color: #ff69b4; font-weight: bold; font-size: 16px;">🏆 完美学神!</span><br> 你的名字高高挂在年级光荣榜的最顶端!同学们看你的眼神都充满了敬畏。父母得知后高兴坏了,当场给了你一大笔零花钱!<br> <span style="color: #8faec9; font-size: 12px;">(获得 10000 円,社交声望大幅提升,压力清空)</span> <<set $wallet.yen += 10000>><<set $school.metrics.socialFame += 20>><<set $daily.stress = 0>> <<elseif _examResult.rank <= 50>> <span style="color: #ffa500; font-weight: bold; font-size: 16px;">✨ 成绩优异!</span><br> 你考出了相当不错的成绩,稳居年级前列。父母很满意你的表现,给了你一些额外的奖励。<br> <span style="color: #8faec9; font-size: 12px;">(获得 5000 円,社交声望提升)</span> <<set $wallet.yen += 5000>><<set $school.metrics.socialFame += 10>> <<elseif _examResult.rank <= 150>> <span style="color: var(--fontcolor-deep1); font-weight: bold; font-size: 16px;">😐 普普通通</span><br> 你的成绩处于年级中游,不好也不坏。父母看了成绩单后只是叮嘱你继续努力,没有奖励也没有惩罚。<br> <span style="color: #888; font-size: 12px;">(无事发生)</span> <<else>> <span style="color: #ff4d4d; font-weight: bold; font-size: 16px;">🚨 成绩垫底!</span><br> 你的成绩惨不忍睹,几乎排在年级倒数!父母看到成绩单后大发雷霆,不仅扣光了你这个月的零花钱,还强行给你报了假期的补习班!<br> <span style="color: #ff4d4d; font-size: 12px;">(失去 5000 円,社交声望下降,强制开启假期补习班!)</span> <<set $wallet.yen = Math.max(0, $wallet.yen - 5000)>> <<set $school.metrics.socialFame -= 10>> <<set $school.summerSchool = true>> /* 标记补习班状态 */ <</if>> </div> /* 重新计算阶级 */ <<run setup.school.updateCaste()>> <div class="action-list" style="margin-top: 30px;"> <<button "🎒 带着成绩单回家">> <<updateMap "home">> <<goto "地点-和室自宅">> <</button>> </div>
/* ========================================================================== */ /* 1. 变量预处理 */ /* ========================================================================== */ <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> /* 初始化拦截状态 (默认不显示拦截界面) */ <<if ndef _showIntercept>><<set _showIntercept = false>><</if>> /* 检查校服 (只要外套或上下装有 school 标签即可) */ <<set _hasUniform = false>> <<set _outfit = setup.items[$daily.style.outfit]>> <<set _top = setup.items[$daily.style.top]>> <<set _bottom = setup.items[$daily.style.bottom]>> <<if (_outfit and _outfit.tags.includes("school")) or (_top and _top.tags.includes("school") and _bottom and _bottom.tags.includes("school"))>> <<set _hasUniform = true>> <</if>> /* 检查迟到与旷课阶段 */ <<set _isLate = false>> <<set _isTruant = false>> <<if _isSchoolDay and not $daily.hasTardiedToday>> <<if _timeVal >= 510 and _timeVal < 540>> /* 8:30 - 9:00:主任抓迟到 */ <<set _isLate = true>> <<elseif _timeVal >= 540 and _timeVal < 900>> /* 9:00 - 15:00:门卫看守 */ <<set _isTruant = true>> <</if>> <</if>> /* ========================================================================== */ /* 🌟 核心 UI 容器 (用于无刷新切换状态) */ /* ========================================================================== */ <<do tag "gate-ui">> /* ========================================================================== */ /* 2. 拦截事件视图 (点击进入学校,且条件不符时触发) */ /* ========================================================================== */ <<if _showIntercept>> /* ---------------------------------------------------------------------- */ /* 拦截 A:没穿校服 (优先级最高) */ /* ---------------------------------------------------------------------- */ <<if not _hasUniform>> <div class="location-desc" style="border-color: #ff4d4d; background: #fff0f5;"> <span style="font-size: 18px;">🛑</span> <strong style="color: #ff4d4d;">风纪委员拦住了你!</strong><br><br> “站住!同学,你怎么穿成这样来学校?校规明确规定必须穿着校服!”<br> 她拿着记录本,严厉地指着你的衣服。 </div> <div class="step-title" style="color: #ff4d4d; border-left-color: #ff4d4d;">⚠️ 应对方式</div> <div class="action-list"> <<link "🏠 乖乖回家换衣服 (消耗时间)">> <<run setup.notify("你叹了口气,转身回家换衣服。", "info")>> <<goto "地点-和室自宅">> <</link>> <<link "😔 接受记过,强行进入 (记过+1, 压力+5)">> <<ts 2>> <<set $school.metrics.demerits += 1>> <<set $daily.stress += 5>> <<run setup.school.updateCaste()>> <<run setup.notify("风纪委员在小本子上记下了你的名字,放你进去了。", "error")>> <<goto "地点-高校_走廊">> <</link>> <<link "😈 一把推开她,硬闯进去 (威慑力+2, 记过+1)">> <<ts 2>> <<set $school.metrics.intimidation += 2>> <<set $school.metrics.demerits += 1>> <<run setup.school.updateCaste()>> <<run setup.notify("“别挡道!”你推开她大摇大摆地走了进去,周围的学生敬畏地看着你。", "warning")>> <<goto "地点-高校_走廊">> <</link>> <<if $persona.streetSmart >= 20>> <<link "💬 谎称校服洗了还没干 (涉世+1)">> <<ts 2>> <<set $persona.streetSmart += 1>> <<run setup.notify("“拜托啦~昨天不小心弄脏了嘛~”你双手合十,风纪委员无奈地放行了。", "success")>> <<goto "地点-高校_走廊">> <</link>> <</if>> <<link "◀ 退回校门口">><<set _showIntercept = false>><<redo "gate-ui">><</link>> </div> /* ---------------------------------------------------------------------- */ /* 拦截 B:迟到 */ /* ---------------------------------------------------------------------- */ <<elseif _isLate>> <div class="location-desc" style="border-color: #ffa500; background: #fff9e6;"> <span style="font-size: 18px;">⚠️</span> <strong style="color: #ffa500;">教导主任的死亡凝视</strong><br><br> 教导主任站在门口,黑着脸看着手表。<br> “现在几点了?把名字记下来!现在的学生真是越来越散漫了!” </div> <div class="step-title" style="color: #ffa500; border-left-color: #ffa500;">⚠️ 应对方式</div> <div class="action-list"> <<link "😔 乖乖认错并进去 (记过+1, 压力+5)">> <<ts 2>> <<set $daily.hasTardiedToday = true>> <<set $school.metrics.demerits += 1>> <<set $daily.stress += 5>> <<run setup.school.updateCaste()>> <<run setup.notify("你被教导主任狠狠训斥了一顿,灰溜溜地进去了。", "error")>> <<goto "地点-高校_走廊">> <</link>> <<link "🤬 顶撞主任 (威慑力+3, 记过+2, 压力-5)">> <<ts 2>> <<set $daily.hasTardiedToday = true>> <<set $school.metrics.intimidation += 3>> <<set $school.metrics.demerits += 2>> <<set $daily.stress = Math.max(0, $daily.stress - 5)>> <<run setup.school.updateCaste()>> <<run setup.notify("“啰嗦死了老头!”你骂了一句直接走掉,主任气得浑身发抖!", "warning")>> <<goto "地点-高校_走廊">> <</link>> <<if $persona.sexAppeal >= 40 and $reputation.depravity >= 10>> <<link "💋 故意走光色诱主任 (欲火+10, 堕落+2)">> <<ts 2>> <<set $daily.hasTardiedToday = true>> <<set $daily.lust += 10>> <<set $reputation.depravity += 2>> <<run setup.notify("你故意弯腰露出胸口的春光,主任红着脸咳嗽了两声,假装没看见你迟到。", "success")>> <<goto "地点-高校_走廊">> <</link>> <</if>> <<link "🏃♀️ 转身就跑,今天干脆逃课了 (叛逆+2)">> <<ts 2>> <<set $persona.rebellion += 2>> <<run setup.notify("看到主任的瞬间你直接转身开溜!", "info")>> <<set _showIntercept = false>><<redo "gate-ui">> <</link>> </div> /* ---------------------------------------------------------------------- */ /* 拦截 C:严重迟到/旷课 (9:00 - 15:00 门卫看守) */ /* ---------------------------------------------------------------------- */ <<elseif _isTruant>> <<if _hasUniform>> <div class="location-desc" style="border-color: #ff4d4d; background: #fff0f5;"> <span style="font-size: 18px;">🛑</span> <strong style="color: #ff4d4d;">门卫大叔的拦截</strong><br><br> “喂!那个穿校服的!现在都几点了才来上学?哪个班的?跟我去教导处!”<br> 门卫大叔一眼就认出了你的校服,强行把你拉进了学校。 </div> <div class="action-list" style="margin-top: 20px;"> <<button "😔 被押送进学校 (记过+2, 出勤-5)">> <<ts 15>> <<set $daily.hasTardiedToday = true>> <<set $school.metrics.demerits += 2>> <<set $school.attendance -= 5>> <<run setup.school.updateCaste()>> <<run setup.notify("你被门卫押送到了教导处,被狠狠骂了一顿。", "error")>> <<goto "地点-高校_走廊">> <</button>> </div> <<else>> <div class="location-desc" style="border-color: #8faec9; background: #f4f9ff;"> <span style="font-size: 18px;">👴</span> <strong style="color: #8faec9;">门卫大叔的疑惑</strong><br><br> “小姑娘,现在是上课时间,外人不能随便进学校哦。”<br> 因为你穿着便服,门卫大叔并没有把你当成本校逃课的学生。 </div> <div class="action-list" style="margin-top: 20px;"> <<button "◀ 转身离开">><<set _showIntercept = false>><<redo "gate-ui">><</button>> <<if $persona.streetSmart >= 30>> <<button "💬 谎称自己是来送东西的家属 (涉世+2)">> <<ts 5>> <<set $persona.streetSmart += 2>> <<run setup.notify("你精湛的演技骗过了门卫,成功溜进了学校!", "success")>> <<goto "地点-高校_走廊">> <</button>> <</if>> </div> <</if>> <</if>> /* ========================================================================== */ /* 3. 正常视图 (默认显示) */ /* ========================================================================== */ <<else>> <div class="location-desc"> 这里是華昙高校的正门。高大的铁门旁立着刻有校名的石碑,旁边是一排排供学生停放自行车的车棚。 <<if _isSchoolDay>> /* 🌟 修复:增加 6:00-7:00 的清晨判定,解决文本与按钮冲突 */ <<if _timeVal >= 360 and _timeVal < 420>> <br><span style="color: var(--fontcolor-highlight);">清晨的校园还很安静,大门刚刚打开,只有少数晨练的学生。</span> <<elseif _timeVal >= 420 and _timeVal < 510>> <br><span style="color: var(--fontcolor-highlight);">现在是登校高峰期,学生们正三三两两地走进校园。风纪委员站在门口检查着装。</span> <<elseif _timeVal >= 510 and _timeVal < 900>> <br><span style="color: #ff4d4d;">校门已经关了一半,现在进去绝对会被当成迟到或逃课的!</span> <<elseif _timeVal >= 900 and _timeVal < 1080>> <br><span style="color: var(--fontcolor-highlight);">放学时间,不少学生在校门口等人一起回家。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">夜色已深,学校大门紧闭。</span> <</if>> <<else>> <br><span style="color: var(--fontcolor-grayblue);">今天是休息日,正门关着,只有门卫大叔在值班室里喝茶看报纸。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏫 校园入口</div> <div class="action-list"> <<scanEvents>> /* --- 状态 A:工作日 --- */ <<if _isSchoolDay>> <<if _timeVal >= 360 and _timeVal < 1080>> <<link "👟 换上室内鞋,进入教学楼">> <<if not _hasUniform or _isLate>> <<set _showIntercept = true>><<redo "gate-ui">> <<else>> <<ts 2>><<goto "地点-高校_走廊">> <</if>> <</link>> <<else>> <span style="color: #aaa; padding: 10px; text-align: center;">学校已经关门了。</span> <</if>> /* --- 状态 B:非工作日 --- */ <<else>> <div style="background: var(--background-white); border: 2px dashed var(--bordercolor-soft); border-radius: 12px; padding: 15px; margin-top: 10px; width: 100%;"> <div style="font-weight: bold; color: var(--fontcolor-deep1); margin-bottom: 5px;">👴 门卫大叔</div> <div style="font-size: 13px; color: var(--fontcolor-grayblue); margin-bottom: 10px;">“今天是休息日哦,同学。你是来参加社团活动的吗?”</div> <div style="display: flex; gap: 10px; flex-wrap: wrap;"> <<if $school.club neq "none">> <<link "出示社团证进入">><<ts 2>><<run setup.notify("门卫大叔核对了你的社团证,放你进去了。", "success")>><<goto "地点-高校_走廊">><</link>> <<else>> <button class="disabled-btn" disabled>没有加入任何社团</button> <</if>> <<if $persona.streetSmart >= 30>> <<link "找借口溜进去">><<ts 2>><<run setup.notify("你谎称有东西落在教室了,成功忽悠了门卫!", "warning")>><<goto "地点-高校_走廊">><</link>> <</if>> </div> </div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开学校</div> <div class="map-grid-container"> <<navTo "library">> <<navTo "park">> <<navTo "archive">> <<navTo "home">> </div> <</if>> <</do>>
/* 判定今天是不是开学典礼或考试 */ <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _isExam = (_todayFest and _todayFest.type === "exam")>> <!-- ========================================================================== --> <!-- 1. 场景描述区 --> <!-- ========================================================================== --> <div class="location-desc"> 教学楼一楼的中央走廊,旁边是一排排的学生鞋柜。 <<if _isOpeningDay>> <br><span style="color: #ff69b4; font-weight: bold;">今天是开学典礼!</span> 走廊里挤满了看分班表的新生,叽叽喳喳地讨论着未来的高中生活。 <<elseif setup.school.isSchoolDay()>> <<if $Time.hour < 8>> 清晨的校园还很安静,只有少数参加晨练的体育部成员在操场上挥洒汗水。 <<elseif $Time.hour < 15>> 现在是上课时间,走廊里空荡荡的,能听到各个教室传来的讲课声。 <<elseif $Time.hour < 18>> 放学后的校园充满了青春的活力!走廊里到处都是结伴去参加社团活动的学生。 <<else>> 天色已晚,大部分学生都已经回家了,只有几盏路灯照亮着教学楼。 <</if>> <<else>> 今天是休息日,校园里几乎没有人,显得格外空旷。 <</if>> </div> <!-- ========================================================================== --> <!-- 🌟 2. 电子课表信息板 (独立于动作区之外,仅在上学日白天显示) --> <!-- ========================================================================== --> <<if setup.school.isSchoolDay() and not _isOpeningDay and $Time.hour < 15>> <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _activeBlock = "none">> <<if _timeVal < 510>><<set _activeBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _activeBlock = "am1">> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _activeBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _activeBlock = "am2">> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _activeBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _activeBlock = "pm1">> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _activeBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _activeBlock = "pm2">> <</if>> <<if _courses>> <div class="timetable-board"> <div class="timetable-header">📅 今日课表 (1年B组)</div> <div class="timetable-grid"> <div @class="_activeBlock === 'am1' ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">1限 (08:30)</span> <span class="course-name"><<= _courses.am1.name>></span> </div> <div @class="_activeBlock === 'am2' ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">2限 (10:40)</span> <span class="course-name"><<= _courses.am2.name>></span> </div> <div @class="_activeBlock === 'pm1' ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">3限 (13:30)</span> <span class="course-name"><<= _courses.pm1.name>></span> </div> <div @class="_activeBlock === 'pm2' ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">4限 (14:30)</span> <span class="course-name"><<= _courses.pm2.name>></span> </div> </div> /* 动态导航区 (作为任务指引保留) */ <<if _activeBlock neq "none">> <<set _nextCourse = _courses[_activeBlock].name>> <div class="timetable-nav"> <span class="timetable-nav-text">▶ 目标地点:</span> <<if _nextCourse === "体育">> <<navTo "school_locker_room" "👗 更衣室 (换体操服)">> <<elseif _nextCourse === "理科">> <<navTo "school_lab" "🧪 理科实验室">> <<elseif _nextCourse === "美术/音乐">> <<navTo "school_art_room" "🎨 美术室">> <<navTo "school_music_room" "🎹 音乐室">> <<elseif _nextCourse === "家庭科">> <<navTo "school_home_econ" "🍳 家庭科教室">> <<else>> <<navTo "school_class" "🏃♀️ 1年B组教室">> <</if>> </div> <</if>> </div> <</if>> <</if>> <!-- ========================================================================== --> <!-- 重大事件直接接管整个页面,隐藏常规导航 --> <!-- ========================================================================== --> <<if _isExam and $Time.hour < 15>> <!-- 📝 考试日拦截 --> <div style="background: #fff0f5; border: 2px dashed #ff4d4d; border-radius: 8px; padding: 20px; text-align: center; margin-bottom: 20px; box-shadow: 0 4px 10px rgba(255,77,77,0.1);"> <span style="font-size: 32px;">📝</span><br> <strong style="color: #ff4d4d; font-size: 18px;">今天是【<<= _todayFest.name>>】!</strong><br> <span style="font-size: 14px; color: var(--fontcolor-deep1); display: inline-block; margin-top: 10px;">走廊里弥漫着紧张的气氛,同学们都在争分夺秒地复习。<br>请立刻前往教室参加考试!</span> </div> <div style="display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;"> <<button "📝 深吸一口气,进入教室考试">><<goto "事件-期末考试">><</button>> <<if $persona.rebellion >= 50>> <<button "😈 翻墙逃走 (叛逆+5, 记过+3)">> <<ts 10>><<set $persona.rebellion += 5>><<set $school.metrics.demerits += 3>> <<run setup.school.updateCaste()>><<run setup.notify("你无视了考试,直接翻墙离开了学校!", "warning")>> /* 🌟 修复:更新地图状态为商业街 */ <<updateMap "street_main">> <<goto "地点-華昙商业街">> <</button>> <</if>> </div> <<elseif _isOpeningDay and $Time.hour < 12>> <!-- 🌸 开学典礼拦截 --> <div style="background: #fff0f5; border: 2px dashed #ff69b4; border-radius: 8px; padding: 20px; text-align: center; margin-bottom: 20px; box-shadow: 0 4px 10px rgba(255,105,180,0.1);"> <span style="font-size: 32px;">🌸</span><br> <strong style="color: #ff69b4; font-size: 18px;">上午的安排是开学典礼!</strong><br> <span style="font-size: 14px; color: var(--fontcolor-deep1); display: inline-block; margin-top: 10px;">请所有新生立刻前往体育馆集合,不要在走廊逗留!</span> </div> <div style="display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;"> <<button "🌸 前往体育馆参加典礼">><<ts 5>><<goto "事件-开学典礼">><</button>> <<button "😈 躲在天台逃掉典礼 (叛逆+5)">> <<set $persona.rebellion += 5>><<run setup.time.forwardTimeTo(12, 0)>> <<run setup.notify("你趁乱溜上了天台,吹着风睡了一觉,完美错过了校长的长篇大论!", "warning")>> /* 🌟 修复:更新地图状态为天台 */ <<updateMap "school_roof_day">> <<goto "地点-高校_日间天台">> <</button>> </div> <<elseif _isOpeningDay and $Time.hour >= 13 and $Time.hour < 16 and $school.club === "none">> <!-- 📢 社团招新拦截 --> <div style="background: #fff9e6; border: 2px dashed #ffa500; border-radius: 8px; padding: 20px; text-align: center; margin-bottom: 20px; box-shadow: 0 4px 10px rgba(255,165,0,0.1);"> <span style="font-size: 32px;">📢</span><br> <strong style="color: #ffa500; font-size: 18px;">下午的安排是社团招新!</strong><br> <span style="font-size: 14px; color: var(--fontcolor-deep1); display: inline-block; margin-top: 10px;">操场上非常热闹,各个社团都在卖力宣传,快去看看吧!</span> </div> <div style="display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;"> <<button "📢 前往操场参加社团招新">><<ts 5>><<goto "事件-社团招新">><</button>> <<button "🎒 没兴趣,直接回家">> <<set $school.club = "none">><<run setup.time.forwardTimeTo(16, 0)>> <<run setup.notify("你对社团毫无兴趣,背起书包离开学校。", "info")>> /* 🌟 修复:更新地图状态为自宅 */ <<updateMap "home">> <<goto "地点-和室自宅">> <</button>> </div> <<else>> <!-- ========================================================================== --> <!-- 📚 正常上学日动线 & 校园导航网格 (仅在没有强制事件时显示) --> <!-- ========================================================================== --> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏫 教学楼内</div> <<do>> <div class="action-list"> <<scanEvents>> <<if setup.school.isSchoolDay()>> <<button "💌 检查自己的鞋柜 (2分钟)">> <<ts 2>> <<if Math.random() < 0.05 and $persona.sexAppeal > 30>> <<set $daily.mood += 20>> <<run setup.notify("在鞋柜里发现了一封匿名情书!(心情+20)", "success")>> <<else>> <<run setup.notify("鞋柜里只有你的室内鞋,什么也没有发生。", "info")>> <</if>> <<redo>> <</button>> <</if>> </div> <</do>> /* ========================================================================== */ /* 🚪 校园导航网格 (Campus Navigation) */ /* ========================================================================== */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🏢 主教学楼内</div> <div class="map-grid-container"> <<navTo "school_class" "🏃♀️ 1年B组教室">> <<navTo "school_store" "🍞 前往小卖部">> <<navTo "school_staffroom" "👨🏫 前往职员室">> <<navTo "school_infirmary" "🛏️ 前往保健室">> <<navTo "school_roof_day" "☀️ 前往天台">> </div> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9; margin-top: 20px;">🔬 特别教室楼 (连廊相通)</div> <div class="map-grid-container"> <<navTo "school_lab" "🧪 理科实验室">> <<navTo "school_art_room" "🎨 美术室">> <<navTo "school_music_room" "🎹 音乐室">> <<navTo "school_home_econ" "🍳 家庭科教室">> </div> <div class="step-title" style="color: #ffb6c1; border-left-color: #ffb6c1; margin-top: 20px;">🏃♀️ 运动与社团区 (室外)</div> <div class="map-grid-container"> <<navTo "school_locker_room" "👗 女生更衣室">> <<navTo "school_gym" "🏀 室内体育馆">> <<navTo "school_field" "⚽ 室外操场">> <<navTo "school_pool" "🏊♀️ 露天泳池">> <<if $Time.hour >= 15 and $Time.hour < 18>> <<navTo "school_club" "🎨 社团大楼">> <</if>> </div> <div class="step-title" style="color: #aaa; border-left-color: #aaa; margin-top: 20px;">🚪 离开教学楼</div> <div class="map-grid-container"> /* 核心门禁:8:30 到 15:00 之间,正常情况下不准离开 */ <<if setup.school.isSchoolDay() and $Time.hour * 60 + $Time.minute >= 510 and $Time.hour * 60 + $Time.minute < 900>> <button class="disabled-btn" disabled title="现在是上课时间,大门锁着,无法离开">🔒 现在不能离开学校</button> /* 翻墙逃学 */ <<if $persona.rebellion >= 20>> <<link "😈 翻墙逃学 (叛逆+2, 记过+1)">> <<ts 10>> <<set $persona.rebellion += 2>> <<set $school.metrics.demerits += 1>> <<run setup.school.updateCaste()>> <<run setup.notify("你熟练地翻过了学校后墙,逃课成功!", "warning")>> /* 🌟 修复:更新地图状态为商业街 */ <<updateMap "street_main">> <<goto "地点-華昙商业街">> <</link>> <</if>> <<else>> <<navTo "school_gate" "🎒 换上室外鞋,前往校门">> <</if>> </div> <</if>>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴与课程预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限文化课) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (_courses and ["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and ["数学", "国语", "英语", "历史"].includes(_courses[_currentBlock].name))>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述区 */ /* ========================================================================== */ <div class="location-desc"> 这里是 1年B组 的教室。 <<if _isOpeningDay>> <<if $Time.hour < 12>> <br><span style="color: #ff69b4; font-weight: bold;">今天是开学典礼!</span> 教室里空无一人,大家都去体育馆集合了。 <<elseif $Time.hour >= 12 and $Time.hour < 13>> <br><span style="color: var(--fontcolor-highlight);">现在是午休时间。新生们正在互相交换联系方式,气氛非常热烈。</span> <<elseif $Time.hour >= 13 and $Time.hour < 16>> <br><span style="color: #ffa500; font-weight: bold;">现在是社团招新时间!</span> 教室里只有几个对社团没兴趣的归宅部学生在发呆。 <<else>> <br>放学了!开学第一天就这样结束了。 <</if>> <<elseif _isSchoolDay>> <<if _currentBlock === "before_school">> <br>早读时间还没到,教室里三三两两聚着几个早到的同学。 <<elseif _isBreak>> <br><span style="color: var(--fontcolor-highlight);">现在是课间休息时间。同学们在走廊和教室里打闹。</span> <<elseif _currentBlock === "lunch">> <br><span style="color: var(--fontcolor-highlight);">现在是午休时间!教室里变得嘈杂起来,大家聚在一起吃便当。</span> <<elseif _currentBlock === "after_school">> <br>放学了!值日生正在擦黑板,大家都在收拾书包准备离开。 <<else>> <<set _courseName = _courses[_currentBlock].name>> <br><span style="color: var(--fontcolor-highlight);">现在是【<<= _courseName>>】课。<<= _courses[_currentBlock].desc>></span> <</if>> <</if>> </div> /* ========================================================================== */ /* 4. 电子课表板 */ /* ========================================================================== */ <<if _isSchoolDay and not _isOpeningDay and $Time.hour < 15 and _courses>> <div class="timetable-board" style="margin-bottom: 20px;"> <div class="timetable-header">📅 今日课表 (1年B组)</div> <div class="timetable-grid"> <div @class="(_currentBlock === 'am1' || _nextBlock === 'am1') ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">1限 (08:30)</span> <span class="course-name"><<= _courses.am1.name>></span> </div> <div @class="(_currentBlock === 'am2' || _nextBlock === 'am2') ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">2限 (10:40)</span> <span class="course-name"><<= _courses.am2.name>></span> </div> <div @class="(_currentBlock === 'pm1' || _nextBlock === 'pm1') ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">3限 (13:30)</span> <span class="course-name"><<= _courses.pm1.name>></span> </div> <div @class="(_currentBlock === 'pm2' || _nextBlock === 'pm2') ? 'timetable-slot active' : 'timetable-slot'"> <span class="time-label">4限 (14:30)</span> <span class="course-name"><<= _courses.pm2.name>></span> </div> </div> /* 如果下一节是特殊课程,在课表下方给出警告和传送门 */ <<if (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch") and _nextBlock neq "none">> <<set _nextCourse = _courses[_nextBlock].name>> <<if _nextCourse !== "数学" and _nextCourse !== "国文" and _nextCourse !== "英语" and _nextCourse !== "历史">> <div class="timetable-nav"> <span class="timetable-nav-text" style="color:#ff4d4d;">⚠️ 下节需前往特别教室:</span> <<if _nextCourse === "体育">><<navTo "school_locker_room" "👗 更衣室">> <<elseif _nextCourse === "理科">><<navTo "school_lab" "🧪 理科室">> <<elseif _nextCourse === "美术/音乐">><<navTo "school_art_room" "🎨 美术室">><<navTo "school_music_room" "🎹 音乐室">> <<elseif _nextCourse === "家庭科">><<navTo "school_home_econ" "🍳 家庭科室">><</if>> </div> <</if>> <</if>> </div> <</if>> /* ========================================================================== */ /* 5. 动作交互区 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<if _isOpeningDay>> <<if $Time.hour >= 12 and $Time.hour < 13>> <<button "💬 和新同学交换联系方式 (20分钟)">> <<ts 20>><<set $school.metrics.socialFame += 3>><<run setup.school.updateCaste()>> <<run setup.notify("你成功要到了几个女生的邮箱地址!(社交声望+3)", "success")>><<redo>> <</button>> <<if setup.inv.has("food_yakisoba_bread")>> <<button "🍞 吃炒面面包">> <<run setup.inv.remove("food_yakisoba_bread", 1)>><<ts 20>> <<set $daily.energy = Math.min(100, $daily.energy + 30)>> <<if _nextBlock neq "none">><<set $daily.classTardy[_nextBlock] = true>><</if>> <<run setup.notify("吃掉了小卖部买的炒面面包。(精力+30)", "success")>><<redo>> <</button>> <</if>> <</if>> <<elseif _isSchoolDay>> /* --- 课间休息 --- */ <<if _isBreak or _currentBlock === "before_school">> <<button "💬 和周围同学闲聊 (10分钟)">> <<ts 10>><<set $school.metrics.socialFame += 1>><<run setup.school.updateCaste()>> <<if _nextBlock neq "none">><<set $daily.classTardy[_nextBlock] = true>><</if>> <<run setup.notify("和同学聊了聊最近的八卦。(社交声望+1)", "success")>><<redo>> <</button>> <<button "💤 趴在桌上休息 (10分钟)">> <<ts 10>><<set $daily.energy = Math.min(100, $daily.energy + 5)>> <<if _nextBlock neq "none">><<set $daily.classTardy[_nextBlock] = true>><</if>> <<run setup.notify("闭目养神了一会儿。(精力+5)", "success")>><<redo>> <</button>> <<if _nextBlock neq "none">> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,同学们纷纷回到座位上。", "info")>><<redo>> <</button>> <</if>> /* --- 午休时间 --- */ <<elseif _currentBlock === "lunch">> <<if setup.inv.has("food_yakisoba_bread")>> <<button "🍞 吃炒面面包">> <<run setup.inv.remove("food_yakisoba_bread", 1)>><<ts 20>> <<set $daily.energy = Math.min(100, $daily.energy + 30)>> <<if _nextBlock neq "none">><<set $daily.classTardy[_nextBlock] = true>><</if>> <<run setup.notify("吃掉了小卖部买的炒面面包。(精力+30)", "success")>><<redo>> <</button>> <</if>> <<button "💬 参与辣妹小团体的聊天 (20分钟)">> <<ts 20>><<set $school.metrics.socialFame += 2>><<run setup.school.updateCaste()>> <<if _nextBlock neq "none">><<set $daily.classTardy[_nextBlock] = true>><</if>> <<run setup.notify("你成功融入了话题。(社交声望+2)", "success")>><<redo>> <</button>> /* --- 上课时间 --- */ <<elseif _isThisClass>> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">📝 课堂行动</div> <<button "📝 认真听讲">><<attendClass "serious" _currentBlock>><</button>> <<button "💤 趴桌补觉">><<attendClass "sleep" _currentBlock>><</button>> <<button "📱 偷偷玩手机">><<attendClass "phone" _currentBlock>><</button>> <<button "💄 拿镜子补妆">><<attendClass "makeup" _currentBlock>><</button>> <<button "🔞 课桌下的秘密">><<attendClass "erotic" _currentBlock>><</button>> <</if>> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开教室</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回走廊">> </div> <</do>>
<div class="location-desc"> 学校的天台。微风吹拂着铁丝网,视野非常开阔。 <<if $Time.hour >= 12 and $Time.hour < 13>> <br><span style="color: var(--fontcolor-highlight);">现在是午休时间,几个高阶级的小团体正聚在这里吃便当、聊八卦。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">☀️ 天台行动</div> <div class="action-list"> <<scanEvents>> <<if $Time.hour >= 12 and $Time.hour < 13>> /* 🌟 阶级压制判定:只有 1军 和 2军 才能在天台享受午餐 */ <<if $school.tier <= 2>> <<if setup.inv.has("food_yakisoba_bread")>> <<button "🍞 靠着铁丝网吃炒面面包">> <<run setup.inv.remove("food_yakisoba_bread", 1)>><<ts 20>> <<set $daily.energy = Math.min(100, $daily.energy + 30)>> <<run setup.notify("吹着微风吃午餐,感觉非常惬意。(精力+30)", "success")>> <<goto "地点-高校_日间天台">> <</button>> <</if>> <<button "💬 融入现充群体的聊天 (20分钟)">> <<ts 20>><<set $school.metrics.socialFame += 3>><<run setup.school.updateCaste()>> <<run setup.notify("你高超的交际手腕让你在天台小团体中如鱼得水。(社交声望+3)", "success")>> <<goto "地点-高校_日间天台">> <</button>> /* 3军 和 底边 会被赶走 */ <<else>> <div style="grid-column: 1/-1; background: #fff0f5; border: 2px dashed #ff4d4d; border-radius: 8px; padding: 15px; margin-bottom: 10px;"> <strong style="color: #ff4d4d;">“喂,那边那个,这里是我们的地盘,去别的地方吃去。”</strong><br> <span style="font-size: 13px; color: var(--fontcolor-deep1);">几个辣妹不耐烦地看着你。作为阶级底层的你,根本没有资格在天台吃午饭。</span> <br><span style="font-size: 11px; color: #aaa;">(需要达到【阶级中层(2军)】以上才能在天台活动)</span> </div> <</if>> <</if>> /* 所有人都可以偷偷睡午觉,但底层有概率被吵醒 */ <<button "💤 找个没人的角落睡午觉 (30分钟)">> <<ts 30>> <<if $school.tier >= 3 and Math.random() < 0.5>> <<set $daily.stress += 10>> <<run setup.notify("你刚睡着,就被旁边现充们的大笑声吵醒了,感觉更累了。(压力+10)", "error")>> <<else>> <<set $daily.energy = Math.min(100, $daily.energy + 20)>> <<run setup.notify("在阳光下睡了一觉,非常舒服。(精力+20)", "success")>> <</if>> <<goto "地点-高校_日间天台">> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开天台</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回中央走廊">> </div>
<div class="location-desc"> 夜晚的学校天台。通往这里的铁门被一把生锈的挂锁锁住了。 </div> <div class="step-title" style="color: #b19cd9; border-left-color: #b19cd9; margin-top: 15px;">🌙 夜间探索</div> <div class="action-list"> /* 🌟 撬锁判定:需要叛逆 >= 30 */ <<if $persona.rebellion >= 30>> <div style="grid-column: 1/-1; color: var(--fontcolor-highlight); margin-bottom: 10px;"> 你熟练地用发卡撬开了铁锁,溜进了天台。月光洒在空旷的水泥地上,远处的城市霓虹闪烁。 </div> <<scanEvents>> <<button "🚬 靠着栏杆抽根烟 (10分钟)">> <<ts 10>><<set $daily.stress = Math.max(0, $daily.stress - 20)>><<set $reputation.depravity += 1>> <<run setup.notify("吐出烟圈的瞬间,白天的压力似乎都消散了。(压力-20, 堕落+1)", "warning")>> <<goto "地点-高校_夜间天台">> <</button>> <<if $persona.insight >= 30>> <<button "🔮 凝视月光进行冥想 (30分钟)">> <<ts 30>><<set $daily.mana = Math.min(100, $daily.mana + 20)>> <<run setup.notify("你吸收了纯净的月光,魔力充盈了全身。(魔力+20)", "success")>> <<goto "地点-高校_夜间天台">> <</button>> <</if>> <<else>> <div style="grid-column: 1/-1; background: #f0f0f0; border: 2px dashed #ccc; border-radius: 8px; padding: 15px; text-align: center; color: #888;"> 门被锁得死死的。作为乖乖女的你,根本不敢尝试去破坏学校的公物。 <br><span style="font-size: 11px;">(需要 叛逆 ≥ 30 才能撬锁进入)</span> </div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开天台</div> <div class="map-grid-container"> /* 夜晚离开天台,直接翻墙出学校,回到大地图 */ <<navTo "street_main" "🧱 翻墙离开学校,前往商业街">> <<navTo "home" "🏠 翻墙离开学校,直接回家">> </div>
<div class="location-desc"> 学校的露天泳池。水面在阳光下波光粼粼,散发着淡淡的氯气味。 <<if $Time.month >= 6 and $Time.month <= 9>> <br><span style="color: var(--fontcolor-highlight);">现在是夏季开放期间,水温正好。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">现在不是夏季,泳池里没有水,底部堆积着一些落叶。</span> <</if>> </div> <div class="action-list"> <<scanEvents>> /* 预留:夏季体育课或游泳部活动 */ <<if $Time.month >= 6 and $Time.month <= 9>> <<button "🏊♀️ 在池边休息 (20分钟)">> <<ts 20>><<set $daily.stress = Math.max(0, $daily.stress - 10)>> <<run setup.notify("看着波光粼粼的水面,心情平静了下来。(压力-10)", "success")>> <<goto "地点-高校_泳池">> <</button>> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "school_locker_room" "👗 回更衣室换衣服">> <<navTo "school_gate" "🎒 前往校门">> </div>
<div class="location-desc"> 社团活动大楼。墙上贴满了各个社团的招新海报和比赛捷报。 <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">现在是社团活动时间!各个活动室里传出热闹的声音,充满了青春的汗水与激情。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">现在不是社团活动时间,大楼里空荡荡的。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🎨 社团活动</div> <div class="action-list"> <<scanEvents>> <<if $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club neq "none">> <<set _clubData = setup.schoolConfig.clubs[$school.club]>> <<button `"🏃♀️ 参加【" + _clubData.name + "】的活动 (直到18:00)"`>> <<set _minutesSpent = (18 * 60) - ($Time.hour * 60 + $Time.minute)>> <<run setup.time.forwardTimeTo(18, 0)>> <<set _energyCost = Math.floor(_minutesSpent / 30) * 10>> <<set $daily.energy = Math.max(0, $daily.energy - _energyCost)>> <<set $school.metrics.socialFame += 3>> <<run setup.school.updateCaste()>> <<run setup.notify("你和社团的同伴们挥洒汗水,一直活动到了学校关门。(精力-" + _energyCost + ", 社交声望+3)", "success")>> <<set $game.subLocation = "school_gate">> <<goto "地点-華昙高校">> <</button>> <<else>> <div style="color: #aaa; padding: 10px; text-align: center;">你目前是归宅部,没有可以参加的社团活动。</div> <</if>> <<else>> <div style="color: #aaa; padding: 10px; text-align: center;">社团活动尚未开始或已经结束。</div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开社团大楼</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回中央走廊">> <<navTo "school_gate" "🎒 直接前往校门回家">> </div>
/* ========================================================================== */ /* 1. 时间判定预处理 (时间不会因为换衣服而改变,可以放在外面) */ /* ========================================================================== */ <<set _timeVal = $Time.hour * 60 + $Time.minute>> /* 判定更衣室是否拥挤 (早读前、课间、午休、放学后) */ <<set _isCrowded = false>> <<if _timeVal < 510 or (_timeVal >= 620 and _timeVal < 640) or (_timeVal >= 750 and _timeVal < 810) or (_timeVal >= 860 and _timeVal < 870) or _timeVal >= 920>> <<set _isCrowded = true>> <</if>> /* ========================================================================== */ /* 🌟 核心 UI 容器 */ /* ========================================================================== */ <<do tag "locker-ui">> <<set _isVacuum = ($daily.style.panties === "无" or $daily.style.bra === "无")>> <<set _isNaked = ($daily.style.outfit === "无" and $daily.style.top === "无" and $daily.style.bottom === "无")>> <div class="location-desc"> 女生专属的更衣室。空气中弥漫着止汗喷雾、香水和少女特有的体香。 一排排铁皮储物柜上贴着各种可爱的大头贴。 <<if _isCrowded>> <br><span style="color: var(--fontcolor-highlight);">现在是休息时间,更衣室里挤满了换衣服的女生,叽叽喳喳地聊着天。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">现在是上课时间,更衣室里空无一人,非常安静。</span> <</if>> /* 增加当前着装提示,让玩家知道换装成功了 */ <br><br> <span style="font-size: 12px; color: #888;"> 当前穿着: <<if _isNaked>> <strong style="color: #ff4d4d;">一丝不挂</strong> <<elseif $daily.style.top === "gym_top">> <strong style="color: #8faec9;">体操服</strong> <<else>> <strong style="color: var(--fontcolor-deep1);">校服/便服</strong> <</if>> </span> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">👗 换装操作</div> <div class="action-list"> /* ------------------------------------------------------------------ */ /* 动作 1:直接换体操服 */ /* ------------------------------------------------------------------ */ <<button "🎽 换上体操服">> <<if _isCrowded and _isVacuum>> <<if Math.random() < 0.5>> <<set $school.metrics.socialFame -= 2>><<set $daily.stress += 10>><<set $bodyTuning.fetish.exhibition += 1>><<run setup.school.updateCaste()>> <<run setup.notify("“呀!你里面怎么什么都没穿?!”脱下校服的瞬间被旁边的女生看到了,你羞得满脸通红!(声望-2, 露出+1)", "error")>> <<else>> <<run setup.notify("你小心翼翼地护住身体,惊险地换好了衣服,没有被人发现真空的事实。", "warning")>> <</if>> <<else>> <<run setup.notify("换上了学校指定的体操服。", "success")>> <</if>> <<set $daily.style.outfit = "无">><<set $daily.style.top = "gym_top">><<set $daily.style.bottom = "gym_bloomers">> <<redo>> <</button>> /* ------------------------------------------------------------------ */ /* 动作 2:直接换校服 */ /* ------------------------------------------------------------------ */ <<button "🏫 换回校服">> <<if _isCrowded and _isVacuum>> <<if Math.random() < 0.5>> <<set $school.metrics.socialFame -= 2>><<set $daily.stress += 10>><<set $bodyTuning.fetish.exhibition += 1>><<run setup.school.updateCaste()>> <<run setup.notify("“诶?你今天没穿内衣吗?”换衣服时被眼尖的辣妹发现了,引起了一阵小小的骚动!(声望-2, 露出+1)", "error")>> <<else>> <<run setup.notify("你迅速套上校服,成功掩盖了真空的秘密。", "warning")>> <</if>> <<else>> <<run setup.notify("换回了整齐的校服。", "success")>> <</if>> <<set $daily.style.outfit = "无">><<set $daily.style.top = "school_top_summer">><<set $daily.style.bottom = "school_skirt_normal">> <<redo>> <</button>> /* ------------------------------------------------------------------ */ /* 动作 3:躲进隔间偷偷换 (仅在拥挤且真空时出现,安全但耗时) */ /* ------------------------------------------------------------------ */ <<if _isCrowded and _isVacuum>> <<button "🚽 躲进淋浴隔间偷偷换 (5分钟)">> <<ts 5>> <<set $daily.style.outfit = "无">><<set $daily.style.top = "gym_top">><<set $daily.style.bottom = "gym_bloomers">> <<run setup.notify("为了不暴露真空,你躲进狭窄的隔间里换好了体操服,非常安全。", "success")>> <<redo>> <</button>> <</if>> /* ------------------------------------------------------------------ */ /* 动作 4:脱光衣服 (极端行为) */ /* ------------------------------------------------------------------ */ <<button "🔞 脱光所有衣服 (一丝不挂)">> <<set $daily.style.outfit = "无">><<set $daily.style.top = "无">><<set $daily.style.bottom = "无">> <<set $daily.style.bra = "无">><<set $daily.style.panties = "无">> <<set $daily.lust += 10>> <<if _isCrowded>> <<set $school.metrics.socialFame -= 5>><<set $bodyTuning.fetish.exhibition += 3>><<run setup.school.updateCaste()>> <<run setup.notify("你竟然在众目睽睽之下脱得一丝不挂!女生们发出惊呼,把你当成了变态!(声望-5, 露出+3)", "error")>> <<else>> <<run setup.notify("你把衣服全脱了塞进柜子里,赤身裸体地站在空无一人的更衣室里...", "warning")>> <</if>> <<redo>> <</button>> /* ------------------------------------------------------------------ */ /* 动作 5:穿回基础内衣 */ /* ------------------------------------------------------------------ */ <<if _isVacuum>> <<button "👙 穿回基础内衣">> <<if _isCrowded and _isNaked>> <<set $school.metrics.socialFame -= 2>><<run setup.school.updateCaste()>> <<run setup.notify("你光着身子在柜子里翻找内衣,被其他女生看到了,非常尴尬。(声望-2)", "error")>> <<else>> <<run setup.notify("你穿上了纯白棉质内衣裤。", "success")>> <</if>> <<set $daily.style.bra = "basic_bra_white">> <<set $daily.style.panties = "basic_panties_white">> <<redo "locker-ui">><<redo "sidebar-avatar">> <</button>> <</if>> </div> /* ========================================================================== */ /* 🚪 离开更衣室 (手动导航) */ /* ========================================================================== */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开更衣室</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回走廊">> <<navTo "school_gym" "🏀 前往体育馆">> <<navTo "school_field" "🏃♀️ 前往操场">> <<navTo "school_pool" "🏊♀️ 前往泳池">> </div> <</do>>
<div class="location-desc"> 学校一楼的小卖部。这里不仅卖面包和饮料,还有一些文具和女生喜欢的流行杂志。 <<if $Time.hour >= 12 and $Time.hour < 13>> <br><span style="color: var(--fontcolor-highlight);">现在是午休时间,这里挤满了抢购限量炒面面包的学生!</span> <<elseif $Time.hour >= 15>> <br><span style="color: var(--fontcolor-grayblue);">放学后,货架上的东西已经卖得差不多了。</span> <</if>> </div> <div class="action-list"> <<scanEvents>> <<if $Time.hour >= 8 and $Time.hour <= 17>> <div class="shop-container" style="grid-column: 1/-1; background: var(--background-white); border: 2px dashed var(--bordercolor-soft); border-radius: 12px; padding: 15px; margin-bottom: 15px;"> <div style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-deep1); margin-bottom: 10px;">🛒 购买午餐与零食 (持有: <<= $wallet.yen>>円)</div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;"> <<button "🍞 炒面面包 (300円)">> <<if $wallet.yen >= 300>> <<set $wallet.yen -= 300>><<run setup.inv.add("food_yakisoba_bread", 1)>> <<run setup.notify("购买了 炒面面包!", "success")>><<goto "地点-高校_小卖部">> <<else>><<run setup.notify("余额不足!", "error")>><</if>> <</button>> <<button "🍓 草莓牛奶 (150円)">> <<if $wallet.yen >= 150>> <<set $wallet.yen -= 150>><<run setup.inv.add("drink_strawberry_milk", 1)>> <<run setup.notify("购买了 草莓牛奶!", "success")>><<goto "地点-高校_小卖部">> <<else>><<run setup.notify("余额不足!", "error")>><</if>> <</button>> </div> </div> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 20px;">小卖部已经关门了。</div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开小卖部</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回走廊">> </div>
<div class="location-desc"> 弥漫着消毒水味的保健室。白色的床铺看起来很柔软。 这里是逃课和休息的绝佳圣地,偶尔也会发生一些不可告人的秘密。 </div> <div class="action-list"> <<scanEvents>> <<if $daily.energy < 50>> <<button "🛏️ 在保健室的床上休息 (60分钟)">> <<ts 60>><<set $daily.energy = Math.min(100, $daily.energy + 40)>> <<run setup.notify("在带有阳光味道的被子里睡了一觉,精力恢复了。(精力+40)", "success")>> <<goto "地点-高校_保健室">> <</button>> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "school_hallway" "🏫 返回走廊">> </div>
<div class="location-desc"> 老师们办公的地方。弥漫着咖啡和打印机墨水的味道。气氛有些压抑。 <<if $Time.hour >= 12 and $Time.hour < 13>> <br><span style="color: var(--fontcolor-highlight);">现在是午休时间,大部分老师都在吃便当。</span> <<elseif $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-grayblue);">放学后,不少老师正在批改作业或准备明天的教案。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">👨🏫 职员室行动</div> <div class="action-list"> <<scanEvents>> /* ---------------------------------------------------------------------- */ /* 1. 优等生专属:请教问题 */ /* ---------------------------------------------------------------------- */ <<if $school.tier <= 2>> <<button "📝 向老师请教问题 (30分钟)">> <<ts 30>> <<set $persona.academics += 2>> <<set $school.metrics.academicIndex += 1>> <<run setup.school.updateCaste()>> <<run setup.notify("老师非常耐心地为你解答了难题。(学识+2, 学力指数+1)", "success")>> <<goto "地点-高校_职员室">> <</button>> <<else>> <<button "📝 向老师请教问题 (30分钟)">> <<ts 30>> <<set $daily.stress += 10>> <<run setup.notify("“你连这么基础的题都不会?上课都在干什么!”你被老师训斥了一顿。(压力+10)", "error")>> <<goto "地点-高校_职员室">> <</button>> <</if>> /* ---------------------------------------------------------------------- */ /* 2. 消除记过系统 (需要有记过记录才能触发) */ /* ---------------------------------------------------------------------- */ <<if $school.metrics.demerits > 0>> <div style="grid-column: 1/-1; background: #fff9e6; border: 2px dashed #ffa500; border-radius: 8px; padding: 15px; margin-top: 10px;"> <strong style="color: #ffa500;">⚠️ 消除记过记录</strong><br> <span style="font-size: 13px; color: var(--fontcolor-deep1);">你目前背负着 <strong style="color:#ff4d4d;"><<= $school.metrics.demerits>></strong> 次记过。这会严重影响你的校园阶级。</span> <div style="display: flex; gap: 10px; margin-top: 10px; flex-wrap: wrap;"> /* 选项 A:苦力消除 (所有人可用) */ <<button "🧹 申请打扫旧校舍 (120分钟)">> <<ts 120>> <<set $daily.energy -= 40>> <<set $school.metrics.demerits -= 1>> <<run setup.school.updateCaste()>> <<run setup.notify("你累得满头大汗,终于打扫完了旧校舍。教导主任划掉了一次记过。(精力-40, 记过-1)", "success")>> <<goto "地点-高校_职员室">> <</button>> /* 选项 B:撒娇消除 (需要高涉世) */ <<if $persona.streetSmart >= 40>> <<button "💬 找年轻老师撒娇求情 (30分钟)">> <<ts 30>> <<if Math.random() < 0.7>> <<set $school.metrics.demerits -= 1>> <<run setup.school.updateCaste()>> <<run setup.notify("“下不为例哦。”年轻的老师红着脸,偷偷帮你划掉了一次记过。(记过-1)", "success")>> <<else>> <<set $daily.stress += 10>> <<run setup.notify("“少来这套!规矩就是规矩!”你被严厉的老师骂了回来。(压力+10)", "error")>> <</if>> <<goto "地点-高校_职员室">> <</button>> <</if>> /* 选项 C:色诱消除 (需要高性感和堕落) */ <<if $persona.sexAppeal >= 50 and $reputation.depravity >= 30>> <<button "💋 课后辅导... (60分钟)">> <<ts 60>> <<set $daily.lust += 20>> <<set $reputation.depravity += 2>> <<set $school.metrics.demerits = 0>> /* 直接清零所有记过! */ <<run setup.school.updateCaste()>> <<run setup.notify("你在无人的资料室里,用身体让教导主任‘满意’,清空了你所有的记过记录。(欲火+20, 堕落+2, 记过清零)", "warning")>> <<goto "地点-高校_职员室">> <</button>> <</if>> </div> </div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开职员室</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回中央走廊">> </div>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* 🌟 判定体育课是否在室内 (夏天6-9月、冬天12-2月、雨天) */ <<set _isGymWeather = ($Time.month >= 6 and $Time.month <= 9) or ($Time.month === 12 or $Time.month <= 2) or ($Time.weather === "rainy" or $Time.weather === "storm")>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限室外体育课) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "体育" and not _isGymWeather)>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 宽阔的室外泥土操场。 <<if _isGymWeather>> <br><span style="color: var(--fontcolor-grayblue);">因为天气或季节原因,今天的体育课改在室内体育馆进行了。</span> <<else>> 阳光有些刺眼。 <</if>> <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">放学后,田径部和足球部正在这里挥洒汗水。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "体育" and not _isGymWeather)>> /* 1. 正常上课 */ <<if _isThisClass>> <<if $daily.style.top === "gym_top">> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏃♀️ 体育课行动</div> <<button "🏃♀️ 认真上体育课">><<attendClass "serious" _currentBlock>><</button>> <<button "💦 假装中暑去树荫下休息">><<attendClass "sleep" _currentBlock>><</button>> <<else>> <div style="grid-column: 1/-1; color: #ff4d4d; font-weight: bold; padding: 10px; border: 2px dashed #ff4d4d; border-radius: 8px; text-align: center;"> 你没有换上体操服!老师严厉地把你赶回了更衣室! </div> <</if>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <<if $daily.style.top === "gym_top">> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你换好了体操服,在操场边做着热身运动。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,体育老师吹响了哨子。", "info")>> <<redo "class-ui">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #ff4d4d; font-weight: bold; padding: 10px; border: 2px dashed #ff4d4d; border-radius: 8px; text-align: center;"> 下节是体育课,但你还没换体操服!快去更衣室! </div> <</if>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "track" or $school.club === "soccer">> <<button "🏃♀️ 参加社团训练 (120分钟)">> <<ts 120>><<set $daily.energy -= 30>><<set $school.metrics.socialFame += 2>> <<run setup.notify("在操场上挥洒了青春的汗水!(精力-30, 声望+2)", "success")>> <<goto "地点-高校_操场">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 运动部的成员正在操场上挥洒汗水。你不是部员,只能在旁边看着。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "school_locker_room" "👗 回更衣室换衣服">> <<navTo "school_hallway" "🏫 返回走廊">> </div> <</do>>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* 🌟 判定体育课是否在室内 (夏天6-9月、冬天12-2月、雨天) */ <<set _isGymWeather = ($Time.month >= 6 and $Time.month <= 9) or ($Time.month === 12 or $Time.month <= 2) or ($Time.weather === "rainy" or $Time.weather === "storm")>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限室内体育课) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "体育" and _isGymWeather)>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 室内体育馆,地板擦得锃亮,回荡着球鞋摩擦地板的声音。 <<if not _isGymWeather>> <br><span style="color: var(--fontcolor-grayblue);">今天天气不错,体育课都在室外操场进行。</span> <</if>> <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">放学后,篮球部和排球部正在这里进行激烈的训练。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "体育" and _isGymWeather)>> /* 1. 正常上课 */ <<if _isThisClass>> <<if $daily.style.top === "gym_top">> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏀 体育课行动</div> <<button "🏃♀️ 认真上体育课">><<attendClass "serious" _currentBlock>><</button>> <<button "💦 躲在器材室偷懒">><<attendClass "sleep" _currentBlock>><</button>> <<else>> <div style="grid-column: 1/-1; color: #ff4d4d; font-weight: bold; padding: 10px; border: 2px dashed #ff4d4d; border-radius: 8px; text-align: center;"> 你没有换上体操服!老师严厉地把你赶回了更衣室! </div> <</if>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <<if $daily.style.top === "gym_top">> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你换好了体操服,坐在体育馆的地板上等待。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,体育老师吹响了哨子。", "info")>> <<redo "class-ui">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #ff4d4d; font-weight: bold; padding: 10px; border: 2px dashed #ff4d4d; border-radius: 8px; text-align: center;"> 下节是体育课,但你还没换体操服!快去更衣室! </div> <</if>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "basketball" or $school.club === "volleyball">> <<button "🏀 参加社团训练 (120分钟)">> <<ts 120>><<set $daily.energy -= 30>><<set $school.metrics.socialFame += 2>> <<run setup.notify("在体育馆里挥洒了青春的汗水!(精力-30, 声望+2)", "success")>> <<goto "地点-高校_体育馆">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 运动部的成员正在体育馆里激烈地训练。你不是部员,只能在旁边看着。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"> <<navTo "school_locker_room" "👗 回更衣室换衣服">> <<navTo "school_hallway" "🏫 返回走廊">> </div> <</do>>
<div class="location-desc"> 这里是特别教室楼,包含了理科实验室、音乐室和美术室。 走廊里弥漫着福尔马林和颜料混合的奇怪味道。 <<if $Time.hour >= 8 and $Time.hour < 15>> <br><span style="color: var(--fontcolor-highlight);">现在是上课时间,偶尔能听到音乐室传来的钢琴声。</span> <<elseif $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-grayblue);">放学后,这里是吹奏部和美术部的活动场所。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🔬 楼内行动</div> <div class="action-list"> <<scanEvents>> /* 预留:如果当前课程是理科/美术,可以在这里上课 */ <<set _courses = setup.school.getTodayCourses()>> <<if _courses and ((_courses.am1 and _courses.am1.name === "理科") or (_courses.am2 and _courses.am2.name === "美术"))>> <<button "📝 进入实验室上课">><<run setup.notify("你走进了实验室。", "info")>><<goto "地点-高校_教室">><</button>> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开特别教室</div> <div class="map-grid-container"> <<navTo "school_hallway" "🏫 返回中央走廊">> </div>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限理科) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "理科")>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 弥漫着化学试剂味道的理科实验室。水槽里还残留着上个班级没洗干净的烧杯。 <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-grayblue);">放学后,实验室的门被锁上了,只有科学部的成员有钥匙。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "理科")>> /* 1. 正常上课 */ <<if _isThisClass>> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🧪 实验课行动</div> <<button "📝 认真做实验">><<attendClass "serious" _currentBlock>><</button>> <<button "💤 躲在显微镜后睡觉">><<attendClass "sleep" _currentBlock>><</button>> <<button "📱 偷偷玩手机">><<attendClass "phone" _currentBlock>><</button>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你提前来到了实验室,找了个好位置坐下。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,老师走进了实验室。", "info")>> <<redo "class-ui">> <</button>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "science">> <<button "🧪 参加科学部活动 (120分钟)">> <<ts 120>><<set $daily.energy -= 20>><<set $persona.academics += 2>> <<run setup.notify("你做了一些有趣的化学实验。(精力-20, 学识+2)", "success")>> <<goto "地点-高校_理科室">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 科学部的成员正在里面做实验。你不是部员,无法进入。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "school_hallway" "🏫 返回走廊">></div> <</do>>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限美术) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "美术")>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 摆满石膏像和画架的美术室,阳光透过大窗户洒进来,非常安静。 <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">放学后,美术部的成员正在这里安静地创作。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "美术")>> /* 1. 正常上课 */ <<if _isThisClass>> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🎨 美术课行动</div> <<button "📝 认真画素描">><<attendClass "serious" _currentBlock>><</button>> <<button "💤 靠着画架打瞌睡">><<attendClass "sleep" _currentBlock>><</button>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你提前来到了美术室,支好了画架。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,美术老师走了进来。", "info")>> <<redo "class-ui">> <</button>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "art">> <<button "🎨 参加美术部活动 (120分钟)">> <<ts 120>><<set $daily.energy -= 20>><<set $persona.insight += 2>> <<run setup.notify("你安静地画了一幅水彩画。(精力-20, 灵视+2)", "success")>> <<goto "地点-高校_美术室">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 美术部的成员正在专心创作。你不是部员,只能在旁边安静地看着。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "school_hallway" "🏫 返回走廊">></div> <</do>>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限音乐) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "音乐")>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 墙上挂着贝多芬和莫扎特画像的隔音教室,中央放着一架黑色的三角钢琴。 <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">放学后,轻音部和吹奏部正在这里练习。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "音乐")>> /* 1. 正常上课 */ <<if _isThisClass>> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🎹 音乐课行动</div> <<button "📝 认真练习发声">><<attendClass "serious" _currentBlock>><</button>> <<button "💤 躲在后排睡觉">><<attendClass "sleep" _currentBlock>><</button>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你提前来到了音乐室,坐在了合唱台阶上。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,音乐老师开始弹奏钢琴。", "info")>> <<redo "class-ui">> <</button>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "light_music" or $school.club === "brass_band">> <<button "🎸 参加社团练习 (120分钟)">> <<ts 120>><<set $daily.energy -= 30>><<set $school.metrics.socialFame += 2>> <<run setup.notify("和大家一起合奏非常开心!(精力-30, 声望+2)", "success")>> <<goto "地点-高校_音乐室">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 音乐部的成员正在排练。你不是部员,只能在旁边安静地听着。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "school_hallway" "🏫 返回走廊">></div> <</do>>
<<do tag "class-ui">> /* ========================================================================== */ /* 1. 时间轴预处理 */ /* ========================================================================== */ <<set _courses = setup.school.getTodayCourses()>> <<set _timeVal = $Time.hour * 60 + $Time.minute>> <<set _isSchoolDay = setup.school.isSchoolDay()>> <<set _todayFest = setup.time.getFestival($Time.year, $Time.month, $Time.day, $Time.weekday)>> <<set _isOpeningDay = (_todayFest and _todayFest.name === "开学典礼")>> <<set _currentBlock = "none">><<set _nextBlock = "none">> <<set _blockStart = 0>><<set _isBreak = false>> <<if _isSchoolDay>> <<if _timeVal < 510>><<set _currentBlock = "before_school">><<set _nextBlock = "am1">> <<elseif _timeVal >= 510 and _timeVal < 620>><<set _currentBlock = "am1">><<set _blockStart = 510>> <<elseif _timeVal >= 620 and _timeVal < 640>><<set _isBreak = true>><<set _nextBlock = "am2">> <<elseif _timeVal >= 640 and _timeVal < 750>><<set _currentBlock = "am2">><<set _blockStart = 640>> <<elseif _timeVal >= 750 and _timeVal < 810>><<set _currentBlock = "lunch">><<set _nextBlock = "pm1">> <<elseif _timeVal >= 810 and _timeVal < 860>><<set _currentBlock = "pm1">><<set _blockStart = 810>> <<elseif _timeVal >= 860 and _timeVal < 870>><<set _isBreak = true>><<set _nextBlock = "pm2">> <<elseif _timeVal >= 870 and _timeVal < 920>><<set _currentBlock = "pm2">><<set _blockStart = 870>> <<else>><<set _currentBlock = "after_school">><</if>> <</if>> /* ========================================================================== */ /* 2. 迟到拦截判定 (仅限家庭科) */ /* ========================================================================== */ <<if ndef $daily.classTardy>><<set $daily.classTardy = {}>><</if>> <<set _isThisClass = (["am1", "am2", "pm1", "pm2"].includes(_currentBlock) and _courses[_currentBlock].name === "家庭科")>> <<if not _isOpeningDay and _isThisClass and not $daily.classTardy[_currentBlock]>> <<set $game.tempMinutesLate = _timeVal - _blockStart>> <<set $game.tempCurrentBlock = _currentBlock>> <<if $game.tempMinutesLate > 0>><<goto "事件-校园_迟到被抓">><</if>> <</if>> /* ========================================================================== */ /* 3. 场景描述 */ /* ========================================================================== */ <div class="location-desc"> 配备了全套厨具、烤箱和缝纫机的教室。空气中似乎还残留着烤饼干的甜香。 <<if $Time.hour >= 15 and $Time.hour < 18>> <br><span style="color: var(--fontcolor-highlight);">放学后,料理部的女生们正在这里研究新食谱。</span> <</if>> </div> /* ========================================================================== */ /* 4. 动作列表 */ /* ========================================================================== */ <div class="action-list"> <<scanEvents>> <<set _isNextClass = (_nextBlock neq "none" and _courses[_nextBlock].name === "家庭科")>> /* 1. 正常上课 */ <<if _isThisClass>> <div class="step-title" style="grid-column: 1/-1; color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🍳 家庭科行动</div> <<button "📝 认真学习烹饪">><<attendClass "serious" _currentBlock>><</button>> <<button "💤 偷吃食材并偷懒">><<attendClass "sleep" _currentBlock>><</button>> /* 2. 课间等待 */ <<elseif _isNextClass and (_isBreak or _currentBlock === "before_school" or _currentBlock === "lunch")>> <div style="grid-column: 1/-1; background: #f4f9ff; border: 1px dashed #8faec9; padding: 10px; border-radius: 8px; text-align: center; margin-bottom: 10px;"> 你提前来到了家庭科教室,穿上了围裙。 </div> <<button "⏳ 等待上课铃响">> <<if _nextBlock === "am1">><<run setup.time.forwardTimeTo(8, 30)>> <<elseif _nextBlock === "am2">><<run setup.time.forwardTimeTo(10, 40)>> <<elseif _nextBlock === "pm1">><<run setup.time.forwardTimeTo(13, 30)>> <<elseif _nextBlock === "pm2">><<run setup.time.forwardTimeTo(14, 30)>><</if>> <<set $daily.classTardy[_nextBlock] = true>> <<run setup.notify("上课铃响了,大家开始准备食材。", "info")>> <<redo "class-ui">> <</button>> /* 3. 放学后的社团时间 */ <<elseif $Time.hour >= 15 and $Time.hour < 18>> <<if $school.club === "cooking">> <<button "🧁 参加料理部活动 (120分钟)">> <<ts 120>><<set $daily.energy -= 20>><<set $persona.etiquette += 2>> <<run setup.notify("烤出了美味的曲奇饼干!(精力-20, 礼仪+2)", "success")>> <<goto "地点-高校_家庭科室">> <</button>> <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px; border: 1px dashed #ccc; border-radius: 8px;"> 料理部的成员正在制作甜点。你不是部员,只能在旁边闻着香味。 </div> <</if>> /* 4. 兜底:没课 */ <<else>> <div style="grid-column: 1/-1; color: #aaa; text-align: center; padding: 10px;">现在这里没有你的课。</div> <</if>> </div> <div class="map-grid-container" style="margin-top: 20px;"><<navTo "school_hallway" "🏫 返回走廊">></div> <</do>>
<<do tag "library-ui">> <div class="location-desc"> 镇立图书馆。空气中弥漫着纸张和油墨的味道,非常安静。 <<if $Time.hour >= 18>> <br><span style="color: var(--fontcolor-grayblue);">临近闭馆时间,馆内只剩下零星几个备考的学生。</span> <<else>> <br><span style="color: var(--fontcolor-highlight);">阳光透过巨大的落地窗洒在阅读区,是个学习的好地方。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">📚 图书馆行动</div> <div class="action-list"> <<scanEvents>> <<button "📝 在自习区复习功课 (60分钟)">> <<ts 60>> <<set $persona.academics += 3>><<set $daily.energy -= 15>><<set $daily.stress += 5>> <<run setup.notify("你集中精神复习了一会儿,感觉学到了很多。(学识+3, 精力-15)", "success")>> <<redo "library-ui">> <</button>> <<button "📖 翻阅时尚杂志 (30分钟)">> <<ts 30>> <<set $persona.sexAppeal += 1>><<set $daily.stress = Math.max(0, $daily.stress - 10)>> <<run setup.notify("看了看最新的穿搭指南,心情放松了不少。(性感+1, 压力-10)", "success")>> <<redo "library-ui">> <</button>> <<button "💤 趴在桌上打瞌睡 (30分钟)">> <<ts 30>> <<set $daily.energy = Math.min(100, $daily.energy + 15)>> <<run setup.notify("伴随着翻书的白噪音,你小憩了一会儿。(精力+15)", "success")>> <<redo "library-ui">> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开图书馆</div> <div class="map-grid-container"> <<navTo "school_gate" "🏫 前往校门前庭">> <<navTo "station" "🚉 前往站前广场">> </div> <</do>>
<<do tag "archive-ui">> <div class="location-desc"> 古镇资料馆。这里陈列着月華镇的县志、古老的地契以及一些民俗传说物品。<br> 平时几乎没有游客,只有一位上了年纪的管理员在打瞌睡。空气中漂浮着细小的灰尘。 </div> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9;">📜 资料馆行动</div> <div class="action-list"> <<scanEvents>> <<button "🔍 查阅镇子的地方志 (60分钟)">> <<ts 60>> <<set $persona.academics += 1>><<set $persona.insight += 2>><<set $daily.energy -= 10>> <<run setup.notify("你在发黄的纸页中读到了一些关于‘月相’的古老祭祀记录。(学识+1, 灵视+2)", "success")>> <<redo "archive-ui">> <</button>> <<if $persona.insight >= 30>> <<button "🔮 研究民俗咒术文献 (60分钟)">> <<ts 60>> <<set $daily.energy -= 15>> <<set _expGain = setup.skills.addExp($skills.magic.alchemy, "alchemy", 0, null)>> <<run setup.notify("你从晦涩的文献中领悟了一些基础的炼金原理。(炼金经验+" + _expGain + ")", "success")>> <<redo "archive-ui">> <</button>> <<else>> <button class="disabled-btn" disabled>🔮 研究民俗咒术文献 (需灵视≥30)</button> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开资料馆</div> <div class="map-grid-container"> <<navTo "school_gate" "🏫 前往校门前庭">> <<navTo "station" "🚉 前往站前广场">> </div> <</do>>
<<do tag "oldschool-ui">> <div class="location-desc"> 废弃的旧校舍。木质地板踩上去会发出令人牙酸的嘎吱声,墙壁上长满了爬山虎。 <br><br> <span style="color: #b19cd9;">这里流传着“七大不可思议”的怪谈。因为常年无人涉足,这里的魔力浓度异常地高。</span> </div> <div class="step-title" style="color: #5e3b5e; border-left-color: #5e3b5e;">👻 旧校舍探索</div> <div class="action-list"> <<scanEvents>> <<button "🔦 在走廊里试胆探险 (30分钟)">> <<ts 30>> <<set $persona.rebellion += 2>><<set $daily.stress += 10>> <<if Math.random() < 0.3>> <<set $wallet.moonShards += 1>> <<run setup.notify("你在废弃的理科室里捡到了一枚【月之碎片】!(叛逆+2, 压力+10)", "success")>> <<else>> <<run setup.notify("一阵阴风吹过,吓得你起了一身鸡皮疙瘩。(叛逆+2, 压力+10)", "warning")>> <</if>> <<redo "oldschool-ui">> <</button>> <<if $skills.magic.combat.level >= 1>> <<button "⚔️ 寻找低级恶灵战斗 (60分钟)">> <<ts 60>> <<set $daily.energy -= 30>> <<set _expGain = setup.skills.addExp($skills.magic.combat, "combat", 0, null)>> <<run setup.notify("你用魔法击退了几只徘徊的低级恶灵。(战斗经验+" + _expGain + ", 精力-30)", "success")>> <<redo "oldschool-ui">> <</button>> <</if>> <<if $adultLife.metrics.depravity >= 40>> <<button "🚬 躲在废弃教室里抽烟 (20分钟)">> <<ts 20>> <<set $daily.stress = Math.max(0, $daily.stress - 20)>> <<set $adultLife.metrics.depravity += 1>> <<run setup.notify("在闹鬼的地方做坏事,有一种别样的刺激感。(压力-20, 堕落+1)", "warning")>> <<redo "oldschool-ui">> <</button>> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开旧校舍</div> <div class="map-grid-container"> <<navTo "school_gate" "🏫 返回校门前庭">> /* 因为旧校舍只有晚上开,离开时可以直接翻墙去商业街 */ <<navTo "street_main" "🌃 翻墙前往商业街">> </div> <</do>>
<div class="location-desc"> <<if $Time.hour >= 6 and $Time.hour < 18>> 这里是月華镇的站前广场。巨大的CRT电子显示屏正播放着当红偶像的千禧年金曲MV。穿着泡泡袜的女高中生和行色匆匆的上班族在这里交汇,充满了都市的活力。 <<else>> 夜晚的站前广场被霓虹灯和巨大的屏幕照亮。白天的喧嚣褪去,取而代之的是聚集在便利店门口的不良少年,以及偶尔闪过的可疑身影。 <</if>> </div> <<do>> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 广场活动</div> <div class="action-list"> <<scanEvents>> <<button "📺 驻足观看大屏幕 (15分钟)">> <<ts 15>> <<set $daily.stress = Math.max(0, $daily.stress - 5)>> <<run setup.notify("看了一会儿流行MV,感觉自己更懂时尚了。(压力 -5)", "success")>> <<redo>> <</button>> <<if $idol.tier >= 2>> <<button "🎤 进行街头路演 (60分钟)">> <<ts 60>> <<set $daily.energy -= 15>> <<set $idol.metrics.publicSNS += random(5, 15)>> <<run setup.notify("你在广场上唱了一首歌,吸引了一些路人的关注!(粉丝增加,精力 -15)", "success")>> <<redo>> <</button>> <</if>> </div> /* 🌟 新增:同区域快速导航 */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 附近地点 (居住与公共区)</div> <div class="map-grid-container"> <<navTo "home" "🏡 步行回家">> <<navTo "park" "🌳 前往月華公园">> <<navTo "riverbank" "🌊 前往月華川河堤">> </div> <</do>>
<div class="location-desc"> <<if $Time.hour >= 6 and $Time.hour < 16>> 阳光明媚的月華公园。长椅上有老人在看报纸,远处的秋千旁有小孩子在玩耍,空气中弥漫着青草的香气。 <<elseif $Time.hour >= 16 and $Time.hour < 19>> 黄昏时的公园被染上了一层橘红色。这里是情侣们最爱的约会圣地,随处可见牵着手散步的年轻男女。 <<else>> 深夜的公园显得有些幽暗寂静。树影婆娑间,似乎有微弱的荧光在闪烁,让人分不清那是萤火虫,还是某种不可思议的生物。 <</if>> </div> <<do>> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9;">✦ 公园活动</div> <div class="action-list"> <<scanEvents>> <<button "🚶♀️ 在林荫道散步 (30分钟)">> <<ts 30>> <<set $daily.stress = Math.max(0, $daily.stress - 15)>> <<run setup.notify("呼吸着新鲜空气,心情舒畅了许多。(压力 -15)", "success")>> <<redo>> <</button>> <<if $Time.hour >= 19 and $persona.insight >= 20>> <<button "✨ 寻找魔法痕迹 (30分钟)">> <<ts 30>> <<set $daily.energy -= 10>> <<if random(1, 100) <= $persona.insight>> <<set $wallet.moonShards += 1>> <<run setup.notify("你在灌木丛里发现了一枚散发着微光的【月之碎片】!", "success")>> <<else>> <<run setup.notify("找了半天,除了一身蚊子包什么也没发现。", "warning")>> <</if>> <<redo>> <</button>> <</if>> </div> /* 🌟 新增:同区域快速导航 */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 附近地点 (居住与公共区)</div> <div class="map-grid-container"> <<navTo "station" "🚉 前往站前广场">> <<navTo "riverbank" "🌊 前往月華川河堤">> <<navTo "home" "🏡 步行回家">> </div> <</do>>
<div class="location-desc"> <<if $Time.hour >= 15 and $Time.hour < 19>> 夕阳下的月華川河堤,波光粼粼的水面泛着金光。不时有穿着校服的学生骑着自行车从斜坡上飞驰而过,充满了青春的滤镜感。 <<elseif $Time.hour >= 19>> 夜晚的河堤非常安静,只能听到潺潺的水声和远处的虫鸣。因为缺乏照明,这里的桥洞和隐蔽处成了绝佳的秘密基地。 <<else>> 白天的河堤视野开阔,微风吹过长长的草叶,带来一丝凉意。 <</if>> </div> <<do>> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9;">✦ 河堤活动</div> <div class="action-list"> <<scanEvents>> <<button "🗣️ 对着河面大喊 (10分钟)">> <<ts 10>> <<set $daily.stress = Math.max(0, $daily.stress - 20)>> <<run setup.notify("把心里的烦恼全都喊了出来!超级爽快!(压力 -20)", "success")>> <<redo>> <</button>> <<button "🌿 躺在草地上发呆 (30分钟)">> <<ts 30>> <<set $daily.energy = Math.min($daily.maxEnergy, $daily.energy + 10)>> <<run setup.notify("看着天空发呆,恢复了一些体力。(精力 +10)", "success")>> <<redo>> <</button>> </div> /* 🌟 新增:同区域快速导航 */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 附近地点 (居住与公共区)</div> <div class="map-grid-container"> <<navTo "park" "🌳 前往月華公园">> <<navTo "station" "🚉 前往站前广场">> <<navTo "senpai_home" "⛩️ 前往九条宅">> </div> <</do>>
<div class="location-desc"> 月華镇的住宅区小路。两旁是昭和风格的独栋一户建,偶尔能看到趴在围墙上晒太阳的橘猫。 <<if $Time.hour >= 16 and $Time.hour < 19>> <br><span style="color: var(--fontcolor-highlight);">夕阳将街道染成橘红色,空气中飘来谁家正在做晚饭的咖喱香味。</span> <<elseif $Time.hour >= 19>> <br><span style="color: var(--fontcolor-grayblue);">夜深了,路灯散发着昏黄的光,四周非常安静。</span> <</if>> </div> <div class="action-list"> <<scanEvents>> <<button "🐈 逗弄路边的野猫 (10分钟)">> <<ts 10>><<set $daily.stress = Math.max(0, $daily.stress - 5)>> <<run setup.notify("小猫蹭了蹭你的手心,非常治愈。(压力-5)", "success")>><<goto passage()>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 附近地点</div> <div class="map-grid-container"> <<navTo "home" "🏠 步行回家">> <<navTo "park" "🌳 前往月華公园">> <<navTo "station" "🚉 前往站前广场">> </div>
<div class="location-desc"> 这里是九条学长的家。一座非常气派的传统日式宅邸,门口立着威严的石狮子,高高的围墙让人看不清里面的全貌。 <<if $Time.hour >= 8 and $Time.hour < 20>> 厚重的木门紧闭着,旁边有一个带着摄像头的现代对讲机,显得有些格格不入。 <<else>> 夜已深,宅邸内只有几盏昏暗的石灯笼亮着,现在按门铃显然是非常失礼的行为。 <</if>> </div> <<do>> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 拜访</div> <div class="action-list"> <<scanEvents>> <<if $Time.hour >= 8 and $Time.hour < 20>> <<button "🛎️ 按下门铃">> <<if $npcs["senpai"].currentLoc === "senpai_home">> <<run setup.notify("对讲机里传来了学长的声音,门锁咔哒一声打开了。", "success")>> /* <<goto "地点-九条宅_内部">> */ <<else>> <<run setup.notify("按了门铃,但是没有人回应。学长似乎不在家。", "warning")>> <</if>> <<redo>> <</button>> <<else>> <button class="disabled-btn" disabled>🔒 夜间谢绝访客</button> <</if>> </div> /* 🌟 新增:同区域快速导航 */ <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 附近地点 (居住与公共区)</div> <div class="map-grid-container"> <<navTo "riverbank" "🌊 返回月華川河堤">> <<navTo "station" "🚉 前往站前广场">> </div> <</do>>
<div class="location-desc"> 隐藏在月影之下的法外之地,充斥着欲望与危险。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🌙 深入暗巷</div> <div class="map-grid-container"> <<navTo "livehouse">> <<navTo "bar">> <<navTo "tattoo">> <<navTo "loveHotel">> <<navTo "secretClub">> <<navTo "pinkSalon">> <<navTo "midnightCinema">> <<navTo "netCafeDeep">> <<navTo "factory">> </div>
<div class="location-desc">业余乐队与不良青年的聚集地。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">成年人的销金窟。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">危险的身体改造店。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc"> 暗巷深处的情人旅馆“Moonlight”。 前台没有人,只有一台自动售票机和一排挂着钥匙的房间面板。这里的隔音效果极好,是一个绝对私密的空间。 <br><br> <span style="color: var(--fontcolor-grayblue);">你开了一间钟点房,现在可以在这里安全地整理着装了。</span> </div> <<do tag "hotel-ui">> <<set _isNaked = ($daily.style.outfit === "无" and $daily.style.top === "无" and $daily.style.bottom === "无" and $daily.style.bra === "无" and $daily.style.panties === "无")>> <div class="step-title" style="color: #ff69b4; border-left-color: #ff69b4;">👗 私密换装</div> <div class="action-list"> <<if not _isNaked>> <<button "🔞 脱光所有衣服">> <<set $daily.style.outfit = "无">><<set $daily.style.top = "无">><<set $daily.style.bottom = "无">> <<set $daily.style.bra = "无">><<set $daily.style.panties = "无">> <<run setup.notify("你把衣服全脱了,赤身裸体地站在陌生的旅馆房间里...", "warning")>> <<redo "hotel-ui">> <</button>> <<else>> <<button "🏫 穿回校服">> <<set $daily.style.outfit = "无">><<set $daily.style.top = "school_top_summer">><<set $daily.style.bottom = "school_skirt_normal">> <<set $daily.style.bra = "basic_bra_white">><<set $daily.style.panties = "basic_panties_white">> <<run setup.notify("你穿回了整齐的校服。", "success")>> <<redo "hotel-ui">> <</button>> <</if>> </div> <</do>> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开旅馆</div> <div class="map-grid-container"> /* 🌟 注意:这里必须用 navTo 走出去,才能触发全局暴露拦截! */ <<navTo "alley_main" "🚶♀️ 推门走到暗巷主干道">> </div>
<div class="location-desc">极度危险的BDSM聚会场所。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">风俗店,高收入伴随极高风险。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">放映禁片的隐藏影院。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">提供极高隐私的非法交易点。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
<div class="location-desc">极度危险的不良聚集地。</div> <div class="action-list"><<scanEvents>></div> <div style="margin-top: 20px; max-width: 300px; margin-left: auto; margin-right: auto;"> <<navTo "alley_main" "🚶♀️ 离开这里">> </div>
/* 1. 变量防报错兜底 */ <<if ndef $fairy>><<set $fairy = { level: 1, bond: 0, shopUnlocked: false }>> <<elseif ndef $fairy.level>><<set $fairy.level = 1>><</if>> <<if ndef $game.activeFairy>><<set $game.activeFairy = "magic">><</if>> /* 2. 获取当前妖精的静态数据 */ <<set _fairyData = setup.fairies[$game.activeFairy]>> /* 3. 初始化本次见面的对话 */ <<if ndef _currentDialogue>> <<if $daily.stress > 80>> <<set _currentDialogue = _fairyData.kojo.stressHigh.random()>> <<elseif $daily.lust > 60>> <<set _currentDialogue = _fairyData.kojo.lustHigh.random()>> <<else>> <<set _currentDialogue = _fairyData.kojo.call.random()>> <</if>> <</if>> <div class="passage-header-bar"> <div class="header-location">✨ 魔法搭档:<<= _fairyData.name>></div> <div class="header-actions"> <<button "◀ 返回房间" "地点-和室自宅">><<unset _currentDialogue>><</button>> </div> </div> <div class="location-desc" style="font-size: 13px;"> <<= _fairyData.appearance>>。<br> <span style="color: var(--fontcolor-grayblue);">性格:<<= _fairyData.personality>></span> </div> <<do tag "fairy-ui">> /* 🌟 羁绊升级判定引擎 */ <<if $fairy.bond >= 100>> <<set $fairy.level += 1>> <<set $fairy.bond -= 100>> <<if $fairy.level >= 3>><<set $fairy.shopUnlocked = true>><</if>> <<run setup.notify("搭档等级提升至 Lv." + $fairy.level + "!解锁了新功能!", "success")>> <</if>> <div class="fairy-ui-container"> <!-- 左侧:妖精立绘/图标区 --> <div class="fairy-avatar-box"> <div class="fairy-icon-circle"> <<= _fairyData.icon>> </div> <div style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-deep1); text-align: center;"> <<= _fairyData.name>><br> <span style="font-size: 11px; color: var(--fontcolor-highlight);">Lv.<<= $fairy.level>> 羁绊: <<= $fairy.bond>>/100</span> </div> </div> <!-- 右侧:对话与互动区 --> <div style="flex: 1;"> <!-- 动态对话框 --> <div class="fairy-chat-bubble"> <<= _currentDialogue>> </div> <!-- 🌸 日常功能区 --> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9; font-size: 14px; margin-bottom: 10px;">🌸 日常功能</div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 20px;"> /* 只有聊天是直接 redo 刷新 */ <<button "💬 聊天">> <<set _currentDialogue = _fairyData.kojo.chat.random()>> <<run setup.audio.playCuteClick()>> <<redo "fairy-ui">> <</button>> /* 其他全部跳转到独立界面 */ <<button "❓ 解惑" "功能-妖精解惑">><</button>> <<button "🔮 星座占卜" "功能-星座占卜">><</button>> <<button "🍰 喂食" "功能-妖精喂食">><</button>> </div> <!-- ✨ 主要功能区 --> <div class="step-title" style="color: #b19cd9; border-left-color: #b19cd9; font-size: 14px; margin-bottom: 10px;">✨ 主要功能</div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;"> <<button "🪄 魔法培训" "功能-魔法培训">><</button>> <<button "📖 敌人图鉴" "功能-敌人图鉴">><</button>> <<button "⚗️ 魔法合成" "功能-魔法合成">><</button>> <<if $fairy.shopUnlocked>> <<button "🛒 神秘商店" "功能-妖精商店">><</button>> <<else>> <button class="disabled-btn" disabled title="羁绊达到 Lv.3 时解锁">🔒 神秘商店 (需 Lv.3)</button> <</if>> </div> </div> </div> <</do>>
<<set _fairyId = $game.activeFairy || "study">> <<set _fairyData = setup.fairies[_fairyId]>> /* 默认显示的开场白 */ <<if ndef _helpAnswer>> <<set _helpAnswer = "“有什么不懂的机制都可以问我哦!作为你的搭档,我会为你解答的。”">> <</if>> <div class="passage-header-bar"> <div class="header-location">❓ 妖精解惑:游戏帮助</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><<unset _helpAnswer>><</button>> </div> </div> <<do tag "help-ui">> <div class="fairy-ui-container" style="align-items: stretch;"> <!-- 左侧:妖精立绘与回答气泡 --> <div style="flex: 1; display: flex; flex-direction: column; gap: 15px;"> <div class="fairy-avatar-box" style="width: 100%; flex-direction: row; justify-content: flex-start;"> <div class="fairy-icon-circle" style="width: 60px; height: 60px; font-size: 30px;"> <<= _fairyData.icon>> </div> <div style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-deep1);"> <<= _fairyData.name>> </div> </div> <div class="fairy-chat-bubble" style="flex: 1; margin-bottom: 0;"> <<= _helpAnswer>> </div> </div> <!-- 右侧:问题列表 --> <div style="flex: 1; border-left: 2px dashed var(--bordercolor-soft); padding-left: 20px;"> <div style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-highlight); margin-bottom: 15px;"> ✦ 请选择你想了解的内容: </div> <div style="display: flex; flex-direction: column; gap: 10px; max-height: 300px; overflow-y: auto; padding-right: 5px;"> <<for _i = 0; _i < setup.helpDB.length; _i++>> <<set _q = setup.helpDB[_i]>> <<capture _q>> <<button _q.title>> /* 获取对应妖精的回答,如果没有则使用 study 的作为兜底 */ <<set _helpAnswer = _q.answers[_fairyId] || _q.answers["study"]>> <<run setup.audio.playCuteClick()>> <<redo "help-ui">> <</button>> <</capture>> <</for>> </div> </div> </div> <</do>>
<<set _fairyData = setup.fairies[$game.activeFairy]>> <<if ndef $daily.fairyFortuned>><<set $daily.fairyFortuned = false>><</if>> <<set _f = $daily.fortune>> <div class="passage-header-bar"> <div class="header-location">🔮 妖精占卜仪式</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="location-desc"> <span style="font-size: 24px;">✨</span> <strong style="color: #b19cd9;">“让我将星辰的力量化作你的加护吧。”</strong><br><br> 消耗 <strong style="color: #b19cd9;">20 点魔力</strong>,妖精会根据你今日的【<<= _f.zodiac>>】运势,为你施加真实的魔法 Buff。<br> <span style="color: var(--fontcolor-grayblue); font-size: 12px;">(当前魔力:<<= $daily.mana>> / 100)</span> </div> <<do tag "fortune-ui">> /* 阶段 1:未占卜 */ <<if not $daily.fairyFortuned>> <div style="text-align: center; margin-top: 30px;"> <<button "🔮 接受星象加护 (消耗20魔力)">> <<if $daily.mana >= 20>> <<set $daily.mana -= 20>> <<set $daily.fairyFortuned = true>> /* 🌟 核心:调用 Buff 引擎,赋予玩家 Buff */ <<run setup.buffs.add(_f.buffId)>> <<run setup.audio.playCuteClick()>> <<redo "fortune-ui">> <<else>> <<run setup.notify("魔力不足,无法进行仪式!", "error")>> <</if>> <</button>> </div> /* 阶段 2:已占卜 (展示结果与 Buff) */ <<else>> <<set _buffDef = setup.buffDB[_f.buffId]>> <div style="background: #fdfbfb; border: 3px solid #b19cd9; border-radius: 16px; padding: 20px; margin-top: 20px; box-shadow: 5px 5px 0 #e6e6fa;"> <div style="display: flex; gap: 15px; align-items: center; border-bottom: 2px dashed #ccc; padding-bottom: 15px; margin-bottom: 15px;"> <div style="font-size: 40px;"><<= _fairyData.icon>></div> <div style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-deep1); font-size: 14px; line-height: 1.5;"> <<= _fairyData.kojo.fortune.random()>> </div> </div> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; font-family: var(--font-pixel); font-size: 13px; margin-bottom: 15px;"> <div>🌟 综合:<span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.overall)>></span></div> <div>💖 恋爱:<span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.love)>></span></div> <div>📚 学业:<span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.study)>></span></div> <div>💰 金钱:<span style="color: #ffa500;"><<= setup.horoscope.renderStars(_f.money)>></span></div> </div> <div style="background: #fff0f5; border: 2px solid #ff69b4; border-radius: 8px; padding: 15px; text-align: center;"> <div style="color: #ff69b4; font-weight: bold; font-size: 15px; margin-bottom: 5px;"> <<= _buffDef.icon>> 获得加护:<<= _buffDef.name>> </div> <div style="font-size: 12px; color: var(--fontcolor-deep1);"> <<= _buffDef.desc>> </div> </div> </div> <</if>> <</do>>
<<set _fairyData = setup.fairies[$game.activeFairy]>> <div class="passage-header-bar"> <div class="header-location">🍰 喂食:<<= _fairyData.name>></div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="dialog-prompt-box"> 你要喂给 <strong style="color: var(--fontcolor-highlight);"><<= _fairyData.name>></strong> 什么食物?<br> <span style="font-size: 12px; color: #888; font-weight: normal;">(喂食喜欢的食物可以大幅增加羁绊值哦!)</span> </div> <div class="inventory-list" style="max-height: 400px; overflow-y: auto; padding-right: 5px;"> <<set _hasFood = false>> <<for _itemId, _amount range $inventory.consumables>> <<set _itemData = setup.items[_itemId]>> /* 筛选出可食用的物品 */ <<if _itemData and _itemData.properties.includes("edible")>> <<set _hasFood = true>> <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= _itemData.icon>></span> <div class="inv-info"> <div class="inv-name"><<= _itemData.name>> <span class="inv-amount">x<<= _amount>></span></div> <div class="inv-desc"><<= _itemData.description>></div> </div> </div> <div class="inv-item-right"> <<capture _itemId, _itemData>> <<button "喂食">> <<run setup.inv.remove(_itemId, 1)>> /* 判定是否是喜欢的食物 */ <<if _fairyData.favoriteFoods.includes(_itemId)>> <<set $fairy.bond += 5>> <<run setup.notify("喂食了【" + _itemData.name + "】!妖精非常开心!(羁绊+5)", "success")>> /* 弹出专属对话框 */ <<run Dialog.setup("✨ 妖精的反应", "ui-dialog-menu"); Dialog.wiki("<<say '" + $game.activeFairy + "'>>" + _fairyData.kojo.feed_favorite.random() + "<</say>>"); Dialog.open();>> <<else>> <<set $fairy.bond += 1>> <<run setup.notify("喂食了【" + _itemData.name + "】。(羁绊+1)", "info")>> /* 弹出普通对话框 */ <<run Dialog.setup("✨ 妖精的反应", "ui-dialog-menu"); Dialog.wiki("<<say '" + $game.activeFairy + "'>>" + _fairyData.kojo.feed_normal.random() + "<</say>>"); Dialog.open();>> <</if>> <<run setup.audio.playCuteClick()>> <<goto "功能-呼唤妖精">> <</button>> <</capture>> </div> </div> <</if>> <</for>> <<if not _hasFood>> <div style="text-align: center; color: #888; padding: 20px; border: 1px dashed #ccc; border-radius: 8px;"> 背包里没有食物了,去便利店买点吧。 </div> <</if>> </div>
<<set _fairyData = setup.fairies[$game.activeFairy]>> <div class="passage-header-bar"> <div class="header-location">🪄 魔法培训</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="location-desc"> <span style="font-size: 24px;">⚔️</span> <strong style="color: #b19cd9;">魔法战斗特训</strong><br><br> 在妖精的指导下进行魔法控制与战斗技巧的训练。<br> 每次特训需要消耗 <strong style="color: #ff69b4;">30 点精力</strong> 和 <strong style="color: #b19cd9;">10 点魔力</strong>,耗时 60 分钟。<br> <span style="color: var(--fontcolor-grayblue); font-size: 12px;">(当前精力:<<= $daily.energy>> | 当前魔力:<<= $daily.mana>>)</span> </div> <div style="text-align: center; margin-top: 30px;"> <<button "🪄 开始特训">> <<if $daily.energy >= 30 and $daily.mana >= 10>> <<set $daily.energy -= 30>><<set $daily.mana -= 10>><<ts 60>> <<set _expGain = setup.skills.addExp($skills.magic.combat, "combat", 0, null)>> <<run setup.notify("进行了魔法特训!(魔法战斗经验+" + _expGain + ")", "success")>> <<goto "功能-呼唤妖精">> <<else>> <<run setup.notify("精力或魔力不足,无法进行培训!", "error")>> <</if>> <</button>> </div>
<div class="passage-header-bar"> <div class="header-location">📖 敌人图鉴</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="location-desc"> <span style="font-size: 24px;">👾</span> <strong style="color: #b19cd9;">暗影魔物记录</strong><br><br> 这里记录着你在旧校舍和暗巷中遭遇并击败的敌人。<br> 当前击败的暗影怪总数:<strong style="color: #ff69b4; font-size: 18px;"><<= $magic.metrics.monstersKilled>></strong> 只。 </div> <div style="text-align: center; padding: 30px; color: #aaa; border: 2px dashed #eee; border-radius: 12px;"> 图鉴系统正在开发中...<br> 未来这里会展示敌人的弱点、掉落物以及 3D 模型。 </div>
<div class="passage-header-bar"> <div class="header-location">⚗️ 魔法合成 (炼金)</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="location-desc"> <span style="font-size: 24px;">⚗️</span> <strong style="color: #b19cd9;">炼金坩埚</strong><br><br> 将收集到的魔法素材投入坩埚,炼制出神奇的魔药。每次合成需要消耗 <strong style="color: #b19cd9;">20 点魔力</strong>。<br> <span style="color: var(--fontcolor-grayblue); font-size: 12px;">(当前魔力:<<= $daily.mana>> / 100)</span> </div> <div style="text-align: center; padding: 30px; color: #aaa; border: 2px dashed #eee; border-radius: 12px;"> 魔法合成 UI 正在开发中...<br> 未来你可以在这里选择两种素材进行盲盒合成。 </div>
<div class="passage-header-bar"> <div class="header-location">🛒 神秘商店</div> <div class="header-actions"> <<button "◀ 返回互动" "功能-呼唤妖精">><</button>> </div> </div> <div class="location-desc" style="font-size: 13px; display: flex; justify-content: space-between; align-items: center;"> <span>“这里出售一些人类世界买不到的小玩意儿。只收【月之碎片】哦!”</span> <span style="font-family: var(--font-pixel); font-weight: bold; color: #b19cd9; font-size: 16px;"> 💎 碎片余额: <<= $wallet.moonShards>> </span> </div> <<do tag "fairy-shop-ui">> <div class="inventory-list"> /* 商品 1:记忆消除喷雾 */ <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= setup.items["memory_eraser"].icon>></span> <div class="inv-info"> <div class="inv-name"><<= setup.items["memory_eraser"].name>></div> <div class="inv-desc"><<= setup.items["memory_eraser"].description>></div> </div> </div> <div class="inv-item-right"> <<if $wallet.moonShards >= 3>> <<button "购买 (3碎片)">> <<set $wallet.moonShards -= 3>> <<run setup.inv.add("memory_eraser", 1)>> <<run setup.notify("购买成功!已放入背包。", "success")>> <<redo "fairy-shop-ui">> <</button>> <<else>> <button class="disabled-btn" disabled>碎片不足 (需3)</button> <</if>> </div> </div> /* 商品 2:忘忧香薰 */ <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= setup.items["dream_incense"].icon>></span> <div class="inv-info"> <div class="inv-name"><<= setup.items["dream_incense"].name>></div> <div class="inv-desc"><<= setup.items["dream_incense"].description>></div> </div> </div> <div class="inv-item-right"> <<if $wallet.moonShards >= 2>> <<button "购买 (2碎片)">> <<set $wallet.moonShards -= 2>> <<run setup.inv.add("dream_incense", 1)>> <<run setup.notify("购买成功!已放入背包。", "success")>> <<redo "fairy-shop-ui">> <</button>> <<else>> <button class="disabled-btn" disabled>碎片不足 (需2)</button> <</if>> </div> </div> /* 商品 3:真心话糖果 */ <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon"><<= setup.items["truth_candy"].icon>></span> <div class="inv-info"> <div class="inv-name"><<= setup.items["truth_candy"].name>></div> <div class="inv-desc"><<= setup.items["truth_candy"].description>></div> </div> </div> <div class="inv-item-right"> <<if $wallet.moonShards >= 2>> <<button "购买 (2碎片)">> <<set $wallet.moonShards -= 2>> <<run setup.inv.add("truth_candy", 1)>> <<run setup.notify("购买成功!已放入背包。", "success")>> <<redo "fairy-shop-ui">> <</button>> <<else>> <button class="disabled-btn" disabled>碎片不足 (需2)</button> <</if>> </div> </div> /* 商品 4:兑换扭蛋币 */ <div class="inv-item-row"> <div class="inv-item-left"> <span class="inv-icon">🎰</span> <div class="inv-info"> <div class="inv-name">星光扭蛋币 x3</div> <div class="inv-desc">用魔法碎片兑换人类世界的娱乐代币。</div> </div> </div> <div class="inv-item-right"> <<if $wallet.moonShards >= 1>> <<button "兑换 (1碎片)">> <<set $wallet.moonShards -= 1>> <<set $wallet.gachaCoins += 3>> <<run setup.notify("兑换成功!获得了 3 枚扭蛋币。", "success")>> <<redo "fairy-shop-ui">> <</button>> <<else>> <button class="disabled-btn" disabled>碎片不足 (需1)</button> <</if>> </div> </div> </div> <</do>>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【高效复习】</span><br> 今天你的思路非常清晰,原本晦涩难懂的公式看一遍就理解了。你一口气做完了好几页练习题。 <<set $persona.academics += 3>> </div> <span style="color:#8faec9; font-size: 12px;">(学识+3,精力-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #ffa500; font-weight: bold;">【心不在焉】</span><br> 你盯着课本上的文字,思绪却飘到了九霄云外。等你回过神来,发现自己已经在草稿纸上画满了一整页的无意义涂鸦。 <<set $persona.academics += 1>><<set $persona.insight += 1>> </div> <span style="color:#ffa500; font-size: 12px;">(学识+1,灵视+1,精力-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #ff4d4d; font-weight: bold;">【陷入瓶颈】</span><br> 你遇到了一道极其复杂的理科大题。你咬着笔头算了半个小时,草稿纸揉成了一团,却依然毫无头绪。 <<set $persona.academics += 1>><<set $daily.stress += 10>> </div> <span style="color:#ff4d4d; font-size: 12px;">(学识+1,精力-20,额外增加 10 点压力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #aaa; font-weight: bold;">【效率低下】</span><br> 因为心情不太好,你看着密密麻麻的文字只觉得头晕眼花。勉强看完了几页,但感觉什么都没记住。 <<set $persona.academics += 1>> </div> <span style="color:#aaa; font-size: 12px;">(学识+1,精力-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: var(--fontcolor-highlight); font-weight: bold;">【妖精的课外辅导】</span><br> 妖精米奈推了推她那半框眼镜,飞到你的课本上,用教鞭指着重点为你讲解。在她的斯巴达式辅导下,你的学习效率翻倍了! <<set $persona.academics += 5>><<set $daily.stress = Math.max(0, $daily.stress - 5)>> </div> <span style="color:#8faec9; font-size: 12px;">(学识大幅增加+5,米奈的陪伴让你压力-5)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #b19cd9; font-weight: bold;">【挑灯夜战】</span><br> 夜深人静,整个小镇都陷入了沉睡。在昏暗的台灯下,你强忍着困意背诵着历史年代。安静的环境让你异常专注。 <<set $persona.academics += 4>><<set $daily.energy -= 10>> </div> <span style="color:#b19cd9; font-size: 12px;">(学识+4,熬夜导致额外消耗 10 点精力)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #b19cd9; font-weight: bold;">【神秘的夹页】</span><br> 你在翻阅从旧书店淘来的参考书时,发现里面夹着一张泛黄的羊皮纸。上面画着奇怪的六芒星阵,你盯着看了一会儿,感觉脑袋有些发晕。 <<set $persona.insight += 3>><<set $daily.mana = Math.min(100, $daily.mana + 10)>> </div> <span style="color:#b19cd9; font-size: 12px;">(灵视+3,魔力+10,精力-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你在【<<= setup.items[$room.slots.desk].name>>】前坐下,摊开课本和笔记本。 <br><br> <span style="color: #8faec9; font-weight: bold;">【日常复习】</span><br> 你按部就班地完成了今天的复习计划。虽然没有特别的感悟,但知识就是这样一点一滴积累起来的。 <<set $persona.academics += 2>> </div> <span style="color:#8faec9; font-size: 12px;">(学识+2,精力-20,压力+10)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #b19cd9; font-weight: bold;">【冲浪时间】</span><br> 你浏览了几个常去的论坛,看了看大家分享的搞笑日常,感觉紧绷的神经放松了不少。 <<set $persona.streetSmart += 1>> </div> <span style="color:#b19cd9; font-size: 12px;">(涉世+1,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #b19cd9; font-weight: bold;">【都市传说版块】</span><br> 你点进了一个名为“月華异闻录”的匿名版块。里面有人发帖声称在旧校舍看到了漂浮的鬼火。你仔细阅读了帖子里的细节。 <<set $persona.insight += 2>> </div> <span style="color:#b19cd9; font-size: 12px;">(灵视+2,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup] ? setup.items[$room.slots.pcSetup].name : "电脑">>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #ff69b4; font-weight: bold;">【危险的弹窗】</span><br> 你正准备查资料,屏幕上突然弹出了一个不可描述的成人网站广告。 妖精莉莉安趴在屏幕上方,坏笑着说:“哎呀,小真原来喜欢看这种东西吗?要不要我教教你?” /* 🌟 核心修复:使用正确的堕落度变量 */ <<set $daily.lust += 20>><<set $adultLife.metrics.depravity += 1>> </div> <span style="color:#ff69b4; font-size: 12px;">(欲火大幅增加+20,堕落+1,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 红着脸关掉电脑" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #ffb6c1; font-weight: bold;">【粉丝的私信】</span><br> 你登录了社交账号,发现后台收到了一条长长的私信。是一个粉丝向你倾诉他的烦恼,并表达了对你的喜爱。你礼貌地回复了他。 <<set $idol.metrics.hardcoreFans += 1>><<set $persona.etiquette += 1>> </div> <span style="color:#ffb6c1; font-size: 12px;">(死忠粉+1,礼仪+1,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #5e3b5e; font-weight: bold;">【里世界情报】</span><br> 你熟练地通过洋葱路由进入了暗网论坛。有人在悬赏高价收购“妖精之尘”。你默默记下了这个情报。 <<set $magic.metrics.undergroundBBS += 2>><<set $persona.streetSmart += 2>> </div> <span style="color:#5e3b5e; font-size: 12px;">(暗网声望+2,涉世+2,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #ff4d4d; font-weight: bold;">【糟糕的弹窗】</span><br> 你不小心点到了一个奇怪的链接,屏幕瞬间被无数个闪烁的弹窗填满!电脑发出了刺耳的蜂鸣声,最后直接蓝屏死机了。 <<set $daily.stress += 20>><<set $daily.mood = Math.max(0, $daily.mood - 20)>> </div> <span style="color:#ff4d4d; font-size: 12px;">(上网不仅没放松,反而让你压力大增+20,心情大跌-20!)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc"> 你打开了【<<= setup.items[$room.slots.pcSetup].name>>】,伴随着熟悉的开机音效,进入了网络世界。 <br><br> <span style="color: #8faec9; font-weight: bold;">【漫无目的】</span><br> 你随便点开了几个网页,看了看新闻和天气预报。时间不知不觉就过去了。 <<set $persona.streetSmart += 1>> </div> <span style="color:#8faec9; font-size: 12px;">(涉世+1,心情+15,压力-15)</span> <div class="action-list" style="margin-top: 20px;"><<button "◀ 合上书本,休息一下" "地点-和室自宅">><</button>></div>
<div class="location-desc" style="background: #f4f9ff; border-color: #8faec9;"> <span style="font-size: 24px;">☀️</span> <strong style="color: #8faec9; font-size: 18px;">新的一天开始了</strong><br><br> 阳光透过窗帘的缝隙洒在你的脸上。闹钟准时响起,你伸了个懒腰,从床上坐了起来。 <br><br> <span style="color: #aaa; font-size: 12px;">(精力已完全恢复)</span> </div> /* 🌟 动态加载昨晚的梦境 */ <div style="background: var(--background-white); border: 2px dashed #b19cd9; border-radius: 12px; padding: 15px; margin-top: 20px;"> <<include setup.temp.dreamEvent>> </div> <div class="action-list" style="margin-top: 30px;"> <<button "👗 起床洗漱,准备出门" "地点-自宅_卧室">><</button>> </div> /* ========================================================================== */ /* 具体的梦境片段 */ /* ========================================================================== */
昨晚你睡得非常沉,一夜无梦。
<span style="color: #ff4d4d; font-weight: bold;">【噩梦】</span><br> 你梦见自己被无数双眼睛盯着,无论怎么跑都逃不掉。醒来时你出了一身冷汗,感觉比没睡还要累。 /* 🌟 修复:噩梦导致头发极度凌乱 */ <<set $daily.stress += 15, $daily.energy -= 20, $daily.style.messiness = "凌乱">>
<span style="color: #ff69b4; font-weight: bold;">【旖旎的梦】</span><br> 你做了一个极其下流的梦。梦里的触感是如此真实,以至于你醒来时发现内裤已经完全湿透了。 <<set $daily.lust += 20>><<set $daily.cleanliness -= 30>>
<span style="color: #b19cd9; font-weight: bold;">【神秘的启示】</span><br> 你在梦中看到了一本发光的古书,书页上漂浮着复杂的符文。醒来后,你对魔法的理解似乎加深了。 <<set $persona.insight += 2>><<set $daily.mana = 100>>
<span style="color: #b19cd9; font-weight: bold;">【神秘的启示】</span><br> 你在梦中看到了一本发光的古书,书页上漂浮着复杂的符文。醒来后,你对魔法的理解似乎加深了。 <<set $persona.insight += 2>><<set $daily.mana = 100>>
<<set _pose = setup.temp.currentPose>> <<set _photo = setup.temp.currentPhoto>> <div class="passage-header-bar"> <div class="header-location">🔞 秘密的摄影会</div> </div> <div class="location-desc" style="border-color: #ff69b4; background: #fff0f5; font-size: 14px; line-height: 1.8;"> 浴室里弥漫着温热的水汽,排气扇发出微弱的嗡嗡声。你反锁了门,赤裸着身体站在洗面台的半身镜前。<br> 冰凉的瓷砖刺激着你敏感的脚趾,你深吸了一口气,举起了手中的【<<= _photo.equipment>>】。 <br><br> /* 分支描写 */ <<if _pose.id === 'teaser_cover'>> 你微微侧过身,用双臂勉强遮挡住胸前尚未发育完全的柔软,双腿不安地并拢着。虽然什么关键部位都没有露出来,但那种欲拒还迎的姿态,加上你因为羞耻而泛红的脸颊,反而透出一种青涩的色气。伴随着“咔嚓”一声,你记录下了自己这副羞耻的模样。 <<elseif _pose.id === 'teaser_wet'>> 你打开了淋浴喷头,让温热的水流打湿了你的头发和身体。水滴顺着你纤细的锁骨滑落,流过胸前的沟壑,最后滴落在地板上。你故意让镜头对准那些挂着水珠的肌肤,眼神迷离地看着屏幕。这种湿身诱惑让你自己都感到一阵口干舌燥。 <<elseif _pose.id === 'hardcore_show'>> <span style="color: #ff4d4d; font-weight: bold;">【大胆展示】</span><br> 强烈的欲火让你彻底抛弃了羞耻心。你放下手臂,挺起胸膛,将自己赤裸的身体毫无保留地暴露在镜头前。你甚至故意微微挺起腰肢,让胸前的两点显得更加挺拔。看着屏幕里那个不知廉耻的少女,你的下体忍不住涌出了一股热流,顺着大腿内侧缓缓滑落。 <<elseif _pose.id === 'hardcore_bottom'>> <span style="color: #ff4d4d; font-weight: bold;">【秘境特写】</span><br> 你索性坐到了浴室湿漉漉的瓷砖上,将双腿大张成屈辱的“M”字型。镜头直白地对准了你毫无防备的秘境。你可以清晰地在屏幕里看到自己泥泞不堪的私处,甚至能看到花瓣因为兴奋而微微翕动。 <br><br> “哈啊……如果被人看到这张照片……” <br><br> 一想到这张照片可能会被无数陌生的男人在屏幕后意淫,一种夹杂着恐惧与极致兴奋的快感瞬间贯穿了你的大脑,让你在按下快门的瞬间,身体猛地痉挛了一下,达到了一个小高潮。 <<else>> 你摆出了<<= _pose.name>>的姿势,拍下了一张极度诱惑的照片。 <</if>> <br><br> <div style="background: #fff; border: 1px dashed #ffb6c1; padding: 10px; border-radius: 8px; margin-top: 15px; text-align: center;"> <span style="color: #ff69b4; font-size: 13px; font-weight: bold;"> 拍摄完成!照片质量:<strong style="color:<<= _photo.qualityColor>>"><<= _photo.qualityName>></strong> </span><br> <span style="font-size: 11px; color: #888;">(露出癖+2,欲火+15,摄影经验增加)</span> </div> </div> <div class="action-list" style="margin-top: 30px;"> <<button "◀ 穿好衣服,平复呼吸">> <<goto "地点-自宅_浴室">> <</button>> /* 如果欲火还很高,可以提供继续拍摄的选项,形成连战 */ <<if $daily.lust >= 50>> <<button "📸 意犹未尽,继续拍摄">> <<goto "功能-私房照拍摄">> <</button>> <</if>> </div>
<div class="passage-header-bar"> <div class="header-location">📝 Maho-Blog 编辑器</div> <div class="header-actions"> <<button "◀ 返回桌面" "功能-电脑">><</button>> </div> </div> <<set _energyCost = 20>><<set _timeCost = 60>> <<set $daily.energy -= _energyCost>><<ts _timeCost>> /* 结算收益:学识越高文章写得越好,摄影越高配图越好看 */ <<set _baseFans = random(5, 15)>> <<set _bonus = Math.floor($persona.academics / 10) + Math.floor($skills.daily.photography.level * 2)>> <<set _totalFans = _baseFans + _bonus>> <<set $idol.metrics.publicSNS += _totalFans>> <<set $daily.mood = Math.min(100, $daily.mood + 15)>> <div class="y2k-browser-window"> <div class="browser-header"> <span>🌐 Internet Explorer - Maho-Blog</span> <span class="browser-controls">_ □ X</span> </div> <div class="browser-address-bar"> <span>地址(D):</span> <span class="url"><nowiki>http://maho-blog.net/edit</nowiki></span> </div> <div class="browser-content"> <p>你花了一个小时,精心排版了一篇图文并茂的博客日志。分享了最近在月華镇的生活点滴。</p> <p style="color: #ff69b4; font-weight: bold;"> “叮咚!”<br> 文章刚发布不久,就收到了好几条点赞和评论!看着不断上涨的访问量,你感到非常满足。 </p> </div> </div> <div style="text-align: center; margin-top: 20px; font-family: var(--font-pixel); color: var(--fontcolor-highlight); font-weight: bold;"> [ 博客更新完毕:精力 -<<= _energyCost>>,心情 +15,粉丝数 +<<= _totalFans>> ] </div>
<div class="passage-header-bar"> <div class="header-location">👻 2ch 匿名怪谈版</div> <div class="header-actions"> <<button "◀ 返回桌面" "功能-电脑">><</button>> </div> </div> <<set _energyCost = 15>><<set _timeCost = 60>> <<set $daily.energy -= _energyCost>><<ts _timeCost>> <<set $persona.insight += 2>> <<set $magic.metrics.undergroundBBS += 3>> <div class="y2k-browser-window"> <div class="browser-header"> <span>🌐 2ch - 月華镇怪谈综合讨论区</span> <span class="browser-controls">_ □ X</span> </div> <div class="browser-address-bar"> <span>地址(D):</span> <span class="url"><nowiki>http://2ch.net/occult/tsukihana</nowiki></span> </div> <div class="browser-content" style="background: #000; color: #00ff00; font-family: 'MS PGothic', monospace;"> <p>1 :<span style="color: #fff;">无名氏</span>:2000/04/12(水) 23:14:00</p> <p style="padding-left: 20px;">有人知道旧校舍三楼女厕所的传闻吗?听说半夜会听到水声...</p> <p>2 :<span style="color: #fff;">无名氏</span>:2000/04/12(水) 23:16:22</p> <p style="padding-left: 20px;">>>1 那个早就过时了。最近暗网有人在收【月之碎片】,价格炒得很高。</p> <p>3 :<span style="color: #ff4d4d;">楼主 (你)</span>:2000/04/12(水) 23:20:15</p> <p style="padding-left: 20px;">我昨天在公园好像看到了发光的东西,不知道是不是你们说的碎片。</p> <p style="color: #aaa; margin-top: 20px; border-top: 1px dashed #333; padding-top: 10px;"> 你在论坛里和神秘学爱好者们交流了一番,获得了不少隐秘的情报。 </p> </div> </div> <div style="text-align: center; margin-top: 20px; font-family: var(--font-pixel); color: #b19cd9; font-weight: bold;"> [ 潜水结束:精力 -<<= _energyCost>>,灵视 +2,暗网声望 +3 ] </div>
<div class="passage-header-bar"> <div class="header-location">🎮 RetroArch 模拟器</div> <div class="header-actions"> <<button "◀ 返回桌面" "功能-电脑">><</button>> </div> </div> <<set _energyCost = 10>><<set _timeCost = 120>> <<set $daily.energy -= _energyCost>><<ts _timeCost>> <<set $daily.stress = Math.max(0, $daily.stress - 40)>> <<set $daily.mood = Math.min(100, $daily.mood + 30)>> <<set _expGain = setup.skills.addExp($skills.daily.gaming, "gaming", 0, null)>> <div class="y2k-browser-window"> <div class="browser-header"> <span>🎮 RetroArch Emulator</span> <span class="browser-controls">_ □ X</span> </div> <div class="browser-content" style="text-align: center; background: #222; color: #fff;"> <div style="font-size: 40px; margin: 20px 0; animation: jump 0.5s infinite alternate;">👾</div> <p style="font-family: var(--font-pixel); color: #ffd700; font-size: 24px; font-weight: bold;">STAGE CLEAR!</p> <p style="font-size: 14px; color: #aaa;"> 你戴上耳机,全身心投入到了一款经典的像素 RPG 游戏中。<br> 连续两个小时的奋战后,你终于击败了隐藏 Boss!现实中的烦恼被抛到了九霄云外。 </p> </div> </div> <div style="text-align: center; margin-top: 20px; font-family: var(--font-pixel); color: #ffa500; font-weight: bold;"> [ 游戏通关:精力 -<<= _energyCost>>,压力大减 -40,心情大增 +30,游戏经验 +<<= _expGain>> ] </div>
<div class="passage-header-bar"> <div class="header-location">🔞 MidnightCam - 午夜私密直播</div> <div class="header-actions"> <<button "◀ 结束直播,返回桌面" "功能-电脑">><</button>> </div> </div> <<set _energyCost = 30>><<set _timeCost = 120>> <<set $daily.energy -= _energyCost>><<ts _timeCost>> /* 结算收益:诱惑等级和露出癖越高,赚得越多 */ <<set _baseMoney = 3000>> <<set _bonusMoney = ($skills.adult.seduction.level * 500) + ($bodyTuning.fetish.exhibition * 200)>> <<set _totalMoney = _baseMoney + _bonusMoney>> <<set $wallet.yen += _totalMoney>> <<set $daily.lust = Math.min(100, $daily.lust + 30)>> <<set $bodyTuning.fetish.exhibition += 2>> <<set $adultLife.metrics.depravity += 3>> <div class="y2k-browser-window"> <div class="browser-header" style="background: linear-gradient(90deg, #4a0000, #ff0000);"> <span>🔴 MidnightCam - LIVE (Viewer: <<= random(50, 200)>>)</span> <span class="browser-controls">_ □ X</span> </div> <div class="browser-address-bar" style="background: #ffe6e6; border-bottom: 1px solid #ff4d4d;"> <span style="color: #ff4d4d;">地址(D):</span> <span class="url" style="color: #ff4d4d;"><nowiki>http://midnight-cam.net/room/secret</nowiki></span> </div> <div class="browser-content" style="background: #111; color: #fff; display: flex; gap: 15px;"> <!-- 左侧:模拟摄像头画面 --> <div style="flex: 2; border: 2px dashed #ff4d4d; border-radius: 8px; padding: 10px; text-align: center; position: relative;"> <div style="position: absolute; top: 10px; left: 10px; background: red; color: white; font-size: 10px; padding: 2px 5px; border-radius: 4px; animation: blinker 1s infinite;">● REC</div> <div style="font-size: 50px; margin-top: 20px;">📸</div> <p style="color: #ffb6c1; font-size: 13px; line-height: 1.6;"> 你锁好房门,脱下衣服,在摄像头前摆出各种羞耻的姿势。<br> 看着屏幕上不断跳动的打赏金额,强烈的背德感让你下体泥泞不堪。 </p> </div> <!-- 右侧:模拟弹幕滚动 --> <div style="flex: 1; background: #222; border: 1px solid #444; border-radius: 8px; padding: 10px; font-size: 11px; color: #ccc; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end;"> <div style="color: #ff69b4;">[系统] 匿名用户 打赏了 500円</div> <div>匿名:太棒了,再把腿张开一点!</div> <div>匿名:主播是高中生吗?制服好眼熟...</div> <div style="color: #ff69b4;">[系统] VIP用户 打赏了 2000円</div> <div>VIP:声音真好听,多叫几声。</div> <div style="color: #ff4d4d; font-weight: bold;">[系统] 房间热度正在飙升!</div> </div> </div> </div> <div style="text-align: center; margin-top: 20px; font-family: var(--font-pixel); color: #ff4d4d; font-weight: bold;"> [ 直播结束:精力 -<<= _energyCost>>,获得打赏 +<<= _totalMoney>>円,欲火 +30,堕落度 +3 ] </div>
<div class="passage-header-bar"> <div class="header-location">💻 个人电脑 - OS Desktop</div> <div class="header-actions"> /* 🌟 统一的顶部返回按钮 */ <<button "◀ 关机离开" "地点-和室自宅">><</button>> </div> </div> <div class="location-desc" style="margin-bottom: 15px;"> 伴随着熟悉的开机音乐,你进入了电脑桌面。 <span style="color: #8faec9; font-size: 12px;">(当前精力:<<= $daily.energy>> | 压力:<<= $daily.stress>>)</span> </div> <!-- Y2K 桌面容器 --> <div class="pc-desktop"> <!-- 软件 1:博客 (将 HTML 直接写在 link 的标题参数里) --> <<link '<div class="pc-icon-img">📝</div><div class="pc-icon-text">Maho-Blog</div>'>> <<if $daily.energy >= 20>> <<goto "电脑-博客">> <<else>><<run setup.notify("精力不足,敲不动键盘了...", "error")>><</if>> <</link>> <!-- 软件 2:匿名论坛 --> <<link '<div class="pc-icon-img">👻</div><div class="pc-icon-text">2ch怪谈版</div>'>> <<if $daily.energy >= 15>> <<goto "电脑-论坛">> <<else>><<run setup.notify("精力不足,眼睛看屏幕发酸...", "error")>><</if>> <</link>> <!-- 软件 3:游戏模拟器 --> <<link '<div class="pc-icon-img">🎮</div><div class="pc-icon-text">RetroArch</div>'>> <<if $daily.energy >= 10>> <<goto "电脑-游戏">> <<else>><<run setup.notify("太累了,连手柄都拿不稳...", "error")>><</if>> <</link>> <!-- 软件 4:午夜直播 (隐藏堕落功能) --> <<if $adultLife.metrics.depravity >= 30>> <<link '<div class="pc-icon-img">🔞</div><div class="pc-icon-text" style="color:#ff69b4;">MidnightCam</div>'>> <<if $Time.hour >= 22 or $Time.hour < 4>> <<goto "电脑-直播">> <<else>><<run setup.notify("现在不是午夜,开播太容易被熟人发现了!", "warning")>><</if>> <</link>> <</if>> <!-- 任务栏 --> <div class="pc-taskbar"> <div class="pc-start-btn"> <span style="color:red;">❖</span> Start </div> <div style="border: 1px inset #888; padding: 2px 10px;"> <<= String($Time.hour).padStart(2, '0')>>:<<= String($Time.minute).padStart(2, '0')>> </div> </div> </div>
<<if ndef _leftTab>><<set _leftTab = "hair">><</if>> <<if ndef _rightTab>><<set _rightTab = "acc">><</if>> <<if ndef _subHair>><<set _subHair = "tie">><</if>> <div class="passage-header-bar"> <div class="header-location">🪞 梳妆打扮</div> <div class="header-actions"> <<button "◀ 离开梳妆台" "地点-自宅_卧室">><</button>> </div> </div> <<do tag "vanity-ui">> <div class="y2k-vanity-layout"> <!-- ================= 左侧:发型与美妆 ================= --> <div class="y2k-side-panel"> <div class="y2k-tabs"> <span @class="_leftTab === 'hair' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "💇♀️ 发型">><<set _leftTab = 'hair'>><<redo "vanity-ui">><</button>></span> <span @class="_leftTab === 'makeup' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "💄 美妆">><<set _leftTab = 'makeup'>><<redo "vanity-ui">><</button>></span> </div> <<if _leftTab === "hair">> <!-- 🌟 状态与一键操作区 --> <div style="background:#fff; padding:8px 10px; border-radius:8px; margin-bottom:10px; border:1px dashed #ffb6c1;"> <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom: 5px;"> <span style="font-size:12px; font-weight:bold; color:var(--fontcolor-deep1);"> 状态: <span @style="$daily.style.messiness === '凌乱' ? 'color:#ff4d4d;' : 'color:#52c41a;'"><<= $daily.style.messiness>></span> </span> <!-- 只有凌乱时才能梳理,梳理后变成自然 --> <<if $daily.style.messiness === "凌乱">> <span class="y2k-filter-btn"><<button "🪮 梳理 (2分)">><<ts 2>><<set $daily.style.messiness = "自然">><<redo "vanity-ui">><</button>></span> <</if>> </div> <!-- 🌟 严格的造型判定逻辑:偏离基础款式才算造型 --> <<set _baseFront = $body.hair.baseFront || "齐刘海">> <<set _baseSide = $body.hair.baseSide || "内收中鬓角">> <<set _isStyled = ($daily.style.hairTie !== "披散" or $daily.style.hairFront !== _baseFront or $daily.style.hairSide !== _baseSide or $daily.style.hairFrontAcc !== "无" or $daily.style.hairSideAcc !== "无")>> <div style="display:flex; justify-content:space-between; align-items:center;"> <span style="font-size:11px; color:#888;">造型: <<if _isStyled>>已打理<<else>>自然披散<</if>></span> <<if _isStyled>> <span class="y2k-filter-btn"> <!-- 一键拆除:恢复为披散,并恢复理发店剪出的基础刘海/鬓角 --> <<button "🚿 拆除造型">> <<set $daily.style.hairTie = "披散">> <<set $daily.style.hairFront = _baseFront, $daily.style.hairSide = _baseSide>> <<set $daily.style.hairFrontAcc = "无", $daily.style.hairSideAcc = "无">> <<redo "vanity-ui">> <</button>> </span> <</if>> </div> </div> <div class="y2k-sub-tabs"> <span @class="_subHair === 'tie' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "绑发">><<set _subHair = 'tie'>><<redo "vanity-ui">><</button>></span> <span @class="_subHair === 'front' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "刘海">><<set _subHair = 'front'>><<redo "vanity-ui">><</button>></span> <span @class="_subHair === 'side' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "鬓角">><<set _subHair = 'side'>><<redo "vanity-ui">><</button>></span> </div> <div class="y2k-grid" style="height: 240px;"> <<if _subHair === "tie">> <<for _i = 0; _i < setup.appearanceDB.dailyStyling.tie.length; _i++>> <<set _styleObj = setup.appearanceDB.dailyStyling.tie[_i]>> /* 🌟 过滤:后发总长度达标,且当前发质不在该造型的黑名单中 */ <<if $body.hair.length >= _styleObj.reqLength and !_styleObj.forbidCut.includes($body.hair.backCut)>> <<capture _styleObj>> <div @class="$daily.style.hairTie === _styleObj.id ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon">🎀</div> <div class="y2k-item-name"><<= _styleObj.name>></div> <<button "更换">><<set $daily.style.hairTie = _styleObj.id>><<ts 2>><<redo "vanity-ui">><</button>> </div> <</capture>> <</if>> <</for>> <<elseif _subHair === "front">> <<for _i = 0; _i < setup.appearanceDB.dailyStyling.front.length; _i++>> <<set _styleObj = setup.appearanceDB.dailyStyling.front[_i]>> /* 🌟 过滤:刘海长度必须在 reqLength 和 maxLength 之间 */ <<if $body.hair.frontLength >= _styleObj.reqLength and $body.hair.frontLength <= _styleObj.maxLength>> <<capture _styleObj>> <div @class="$daily.style.hairFront === _styleObj.id ? 'y2k-item-block equipped' : 'y2k-item-block'" title="<<= _styleObj.desc>>"> <div class="y2k-item-icon">✂️</div> <div class="y2k-item-name"><<= _styleObj.name>></div> <<button "更换">><<set $daily.style.hairFront = _styleObj.id>><<ts 2>><<redo "vanity-ui">><</button>> </div> <</capture>> <</if>> <</for>> <<elseif _subHair === "side">> <<for _i = 0; _i < setup.appearanceDB.dailyStyling.side.length; _i++>> <<set _styleObj = setup.appearanceDB.dailyStyling.side[_i]>> /* 🌟 过滤:鬓角长度必须在 reqLength 和 maxLength 之间 */ <<if $body.hair.sideLength >= _styleObj.reqLength and $body.hair.sideLength <= _styleObj.maxLength>> <<capture _styleObj>> <div @class="$daily.style.hairSide === _styleObj.id ? 'y2k-item-block equipped' : 'y2k-item-block'" title="<<= _styleObj.desc>>"> <div class="y2k-item-icon">💇♀️</div> <div class="y2k-item-name"><<= _styleObj.name>></div> <<button "更换">><<set $daily.style.hairSide = _styleObj.id>><<ts 2>><<redo "vanity-ui">><</button>> </div> <</capture>> <</if>> <</for>> <</if>> </div> <<elseif _leftTab === "makeup">> <div style="display:flex; justify-content:space-between; align-items:center; background:#fff; padding:5px 10px; border-radius:8px; margin-bottom:10px;"> <span style="font-size:12px; font-weight:bold; color:#ff69b4;">当前: <<= $daily.style.makeup>></span> <<if $daily.style.makeup neq "素颜">><span class="y2k-filter-btn"><<button "卸妆">><<ts 5>><<set $daily.style.makeup = "素颜">><<redo "vanity-ui">><</button>></span><</if>> </div> <div class="y2k-grid" style="height: 240px;"> <div @class="$daily.style.makeup === '基础淡妆' ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon">💄</div><div class="y2k-item-name">基础淡妆</div> <<button "化妆">><<set $daily.style.makeup = "基础淡妆">><<ts 5>><<redo "vanity-ui">><</button>> </div> <div @class="$daily.style.makeup === '辣妹浓妆' ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon">💋</div><div class="y2k-item-name">辣妹浓妆</div> <<button "化妆">><<set $daily.style.makeup = "辣妹浓妆">><<ts 10>><<redo "vanity-ui">><</button>> </div> </div> <</if>> </div> <!-- ================= 中间:专属化妆镜 & 刘海夹起控制 ================= --> <div style="display: flex; flex-direction: column; align-items: center; gap: 25px; width: 160px;"> <div class="y2k-mirror-center"> <<avatarMirror>> </div> <!-- 🌟 替换:将清洁压力替换为刘海夹起状态控制区 --> <div style="background: #fff; padding: 8px 5px; border-radius: 12px; border: 1px dashed #ffb6c1; width: 100%; box-sizing: border-box; text-align: center;"> <div style="font-size: 11px; color: #ff69b4; font-weight: bold; margin-bottom: 6px;">🪮 刘海夹起状态</div> <div style="display: flex; gap: 5px; justify-content: center; flex-wrap: wrap;"> <<for _i = 0; _i < setup.appearanceDB.dailyStyling.frontAcc.length; _i++>> <<set _accObj = setup.appearanceDB.dailyStyling.frontAcc[_i]>> <<capture _accObj>> <span @class="$daily.style.hairFrontAcc === _accObj.id ? 'y2k-filter-btn active' : 'y2k-filter-btn'"> <<button _accObj.name>><<set $daily.style.hairFrontAcc = _accObj.id>><<redo "vanity-ui">><</button>> </span> <</capture>> <</for>> </div> </div> </div> <!-- ================= 右侧:饰品与套装 ================= --> <div class="y2k-side-panel"> <div class="y2k-tabs"> <span @class="_rightTab === 'acc' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "🎀 饰品">><<set _rightTab = 'acc'>><<redo "vanity-ui">><</button>></span> <span @class="_rightTab === 'preset' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "👗 套装">><<set _rightTab = 'preset'>><<redo "vanity-ui">><</button>></span> </div> <<if _rightTab === "acc">> <<if $daily.style.accessories.length > 0>> <div style="text-align:right; margin-bottom:5px;"> <span class="y2k-filter-btn"><<button "摘下全部">><<set $daily.style.accessories = []>><<redo "vanity-ui">><</button>></span> </div> <</if>> <div class="y2k-grid" style="height: 240px;"> <<for _i = 0; _i < $inventory.clothes.length; _i++>> <<set _clothId = $inventory.clothes[_i]>><<set _clothItem = setup.items[_clothId]>> <<if _clothItem and _clothItem.equipType === "accessory">> <<capture _clothId, _clothItem>> <<set _isEquipped = $daily.style.accessories.includes(_clothId)>> <div @class="_isEquipped ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon"><<= _clothItem.icon>></div> <div class="y2k-item-name"><<= _clothItem.name>></div> <<if _isEquipped>> <<button "卸下">><<run $daily.style.accessories.delete(_clothId)>><<redo "vanity-ui">><</button>> <<else>> <<button "佩戴">><<run $daily.style.accessories.push(_clothId)>><<redo "vanity-ui">><</button>> <</if>> </div> <</capture>> <</if>> <</for>> </div> <<elseif _rightTab === "preset">> <div style="font-size:11px; color:#ff69b4; font-weight:bold; margin-bottom:5px;">官方预设</div> <div class="y2k-grid" style="height: 110px;"> <<for _pId, _pData range setup.wardrobe.defaultPresets>> <<capture _pData>> <div class="y2k-item-block"> <div class="y2k-item-icon"><<= _pData.icon>></div> <div class="y2k-item-name"><<= _pData.name>></div> <<button "换上">><<run setup.wardrobe.equipPreset(_pData)>><<redo "vanity-ui">><</button>> </div> <</capture>> <</for>> </div> <div style="font-size:11px; color:#ff69b4; font-weight:bold; margin-top:10px; margin-bottom:5px;">我的衣橱</div> <div class="y2k-grid" style="height: 110px;"> <<set _customKeys = Object.keys($customOutfits || {})>> <<if _customKeys.length === 0>> <div style="font-size:10px; color:#aaa; grid-column:1/-1;">去【衣柜】保存自定义套装吧</div> <<else>> <<for _i = 0; _i < _customKeys.length; _i++>> <<set _cName = _customKeys[_i]>><<set _cData = $customOutfits[_cName]>> <<capture _cName, _cData>> <div class="y2k-item-block"> <div class="y2k-item-icon"><<= _cData.icon>></div> <div class="y2k-item-name"><<= _cData.name>></div> <<button "换上">><<run setup.wardrobe.equipPreset(_cData)>><<redo "vanity-ui">><</button>> </div> <</capture>> <</for>> <</if>> </div> <</if>> </div> </div> <</do>>
<<if ndef _wTab>><<set _wTab = "outer">><</if>> <<if ndef _subOuter>><<set _subOuter = "all">><</if>> <<if ndef _subInner>><<set _subInner = "all">><</if>> <<if ndef _showSaveUI>><<set _showSaveUI = false>><</if>> <<if ndef _newPresetName>><<set _newPresetName = "">><</if>> <div class="passage-header-bar"> <div class="header-location">👗 房间衣柜</div> <div class="header-actions"> <<button "◀ 关上衣柜" "地点-自宅_卧室">><</button>> </div> </div> <<do tag "wardrobe-ui">> <div style="display: flex; gap: 20px; align-items: flex-start; margin-top: 15px;"> <!-- 🌟 左侧:全身镜面预览 --> <div class="floor-mirror"> <div class="mirror-glass"><<avatarStanding>></div> </div> <!-- 右侧:便签风衣柜控制区 --> <div class="y2k-wardrobe-note"> <div class="y2k-tabs"> <span @class="_wTab === 'outer' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "🧥 外搭">><<set _wTab = 'outer'>><<redo "wardrobe-ui">><</button>></span> <span @class="_wTab === 'inner' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "👙 贴身">><<set _wTab = 'inner'>><<redo "wardrobe-ui">><</button>></span> <span @class="_wTab === 'save' ? 'y2k-tab-btn active' : 'y2k-tab-btn'"><<button "💾 保存">><<set _wTab = 'save'>><<redo "wardrobe-ui">><</button>></span> </div> /* --- 1. 外搭 --- */ <<if _wTab === "outer">> <div class="y2k-sub-tabs"> <span @class="_subOuter === 'all' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "全部">><<set _subOuter = 'all'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subOuter === 'outfit' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "套装">><<set _subOuter = 'outfit'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subOuter === 'top' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "上衣">><<set _subOuter = 'top'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subOuter === 'bottom' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "下装">><<set _subOuter = 'bottom'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subOuter === 'shoes' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "鞋子">><<set _subOuter = 'shoes'>><<redo "wardrobe-ui">><</button>></span> </div> <div class="y2k-grid"> <div class="y2k-item-block" style="border-color:#ff4d4d;"> <div class="y2k-item-icon">🚫</div><div class="y2k-item-name">脱下外衣</div> <<button "脱下">><<set $daily.style.outfit="无", $daily.style.top="无", $daily.style.bottom="无", $daily.style.shoes="无">><<redo "wardrobe-ui">><</button>> </div> <<for _i = 0; _i < $inventory.clothes.length; _i++>> <<set _clothId = $inventory.clothes[_i]>><<set _clothItem = setup.items[_clothId]>> <<if _clothItem and ["outfit", "top", "bottom", "shoes"].includes(_clothItem.equipType)>> <<if _subOuter === "all" or _subOuter === _clothItem.equipType>> <<capture _clothId, _clothItem>> <<set _isEquipped = ($daily.style.outfit === _clothId || $daily.style.top === _clothId || $daily.style.bottom === _clothId || $daily.style.shoes === _clothId)>> <div @class="_isEquipped ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon"><<= _clothItem.icon>></div> <div class="y2k-item-name"><<= _clothItem.name>></div> <<button "穿上">> <<if _clothItem.equipType === "outfit">><<set $daily.style.outfit = _clothId, $daily.style.top = "无", $daily.style.bottom = "无">> <<elseif _clothItem.equipType === "top">><<set $daily.style.top = _clothId, $daily.style.outfit = "无">> <<elseif _clothItem.equipType === "bottom">><<set $daily.style.bottom = _clothId, $daily.style.outfit = "无">> <<elseif _clothItem.equipType === "shoes">><<set $daily.style.shoes = _clothId>><</if>> <<redo "wardrobe-ui">> <</button>> </div> <</capture>> <</if>> <</if>> <</for>> </div> /* --- 2. 贴身 --- */ <<elseif _wTab === "inner">> <div class="y2k-sub-tabs"> <span @class="_subInner === 'all' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "全部">><<set _subInner = 'all'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subInner === 'bra' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "内衣">><<set _subInner = 'bra'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subInner === 'panties' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "内裤">><<set _subInner = 'panties'>><<redo "wardrobe-ui">><</button>></span> <span @class="_subInner === 'socks' ? 'y2k-filter-btn active' : 'y2k-filter-btn'"><<button "袜子">><<set _subInner = 'socks'>><<redo "wardrobe-ui">><</button>></span> </div> <div class="y2k-grid"> <div class="y2k-item-block" style="border-color:#ff4d4d;"> <div class="y2k-item-icon">🚫</div><div class="y2k-item-name">脱下内衣</div> <<button "脱下">><<set $daily.style.bra="无", $daily.style.panties="无", $daily.style.socks="无">><<redo "wardrobe-ui">><</button>> </div> <<for _i = 0; _i < $inventory.clothes.length; _i++>> <<set _clothId = $inventory.clothes[_i]>><<set _clothItem = setup.items[_clothId]>> <<if _clothItem and ["bra", "panties", "socks"].includes(_clothItem.equipType)>> <<if _subInner === "all" or _subInner === _clothItem.equipType>> <<capture _clothId, _clothItem>> <<set _isEquipped = ($daily.style.bra === _clothId || $daily.style.panties === _clothId || $daily.style.socks === _clothId)>> <div @class="_isEquipped ? 'y2k-item-block equipped' : 'y2k-item-block'"> <div class="y2k-item-icon"><<= _clothItem.icon>></div> <div class="y2k-item-name"><<= _clothItem.name>></div> <<button "穿上">><<set $daily.style[_clothItem.equipType] = _clothId>><<redo "wardrobe-ui">><</button>> </div> <</capture>> <</if>> <</if>> <</for>> </div> /* --- 3. 保存套装 --- */ <<elseif _wTab === "save">> <<if !_showSaveUI>> <div style="text-align:center; margin-top:20px;"> <span class="y2k-filter-btn"><<button "➕ 将当前穿搭存为新套装">><<set _showSaveUI = true>><<redo "wardrobe-ui">><</button>></span> </div> <<else>> <div style="background: #fff; border: 2px dashed #ffb6c1; padding: 15px; border-radius: 12px; text-align:center;"> <div style="font-size: 12px; color: #ff69b4; font-weight:bold; margin-bottom: 10px;">为这套穿搭起个名字吧:</div> <<textbox "_newPresetName" _newPresetName>> <div style="display: flex; justify-content:center; gap: 10px; margin-top:10px;"> <span class="y2k-filter-btn"><<button "确认保存">> <<set _msg = setup.wardrobe.saveCustomPreset(_newPresetName)>> <<run setup.notify(_msg, _msg.includes("成功") ? "success" : "error")>> <<set _newPresetName = "", _showSaveUI = false>> <<redo "wardrobe-ui">> <</button>></span> <span class="y2k-filter-btn"><<button "取消">><<set _showSaveUI = false>><<redo "wardrobe-ui">><</button>></span> </div> </div> <</if>> <div style="font-size:12px; font-weight:bold; color:#ff69b4; margin-top:20px; border-bottom:1px solid #ffb6c1; padding-bottom:5px; margin-bottom:10px;">已保存的套装</div> <div class="y2k-grid"> <<set _customKeys = Object.keys($customOutfits || {})>> <<for _i = 0; _i < _customKeys.length; _i++>> <<set _cName = _customKeys[_i]>><<set _cData = $customOutfits[_cName]>> <<capture _cName, _cData>> <div class="y2k-item-block"> <div class="y2k-item-icon"><<= _cData.icon>></div> <div class="y2k-item-name"><<= _cData.name>></div> <div style="display:flex; gap:2px;"> <<button "换上">><<run setup.wardrobe.equipPreset(_cData)>><<redo "wardrobe-ui">><</button>> <<button "🗑️">><<run setup.wardrobe.deleteCustomPreset(_cName)>><<redo "wardrobe-ui">><</button>> </div> </div> <</capture>> <</for>> </div> <</if>> </div> </div> <</do>>
<div class="passage-header-bar"> <div class="header-location">🛠️ 房间 DIY 模式</div> <div class="header-actions"> <<button "◀ 完成布置" "地点-和室自宅">><</button>> </div> </div> <div class="location-desc" style="font-size: 13px;"> 在这里可以重新布置你的房间。更换家具会实时改变房间的属性和评级。<br> <span style="color: var(--fontcolor-highlight);">* 每次更换家具需要消耗 5 点精力。</span> </div> <!-- 调用 JS 宏渲染交互式装修界面 --> <<roomDIY>>
<div class="passage-header-bar"> <div class="header-location">🍳 冰箱</div> <div class="header-actions"> <<button "◀ 关上冰箱,返回厨房" "地点-自宅_厨房">><</button>> </div> </div> <div class="location-desc"> 打开贴满贴纸的单门冰箱,冷气扑面而来。旁边就是微波炉,可以随时加热食物。 </div> <div class="kitchen-journal"> <div class="washi-tape tape-pink"></div> <div class="journal-header"><span style="font-size: 20px;">🍱</span> 冰箱与储物柜</div> <p class="journal-hint"> 在这里可以食用背包里的食物。<br> <span class="highlight-marker">💡 提示:使用微波炉加热【便捷食品】,精力额外 +15!</span> </p> <<do tag "eat-list">> <div class="journal-list"> <<set _hasFood = false>> <<for _itemId, _amount range $inventory.consumables>> <<set _item = setup.items[_itemId]>> <<if _item and _item.properties.includes("edible")>> <<set _hasFood = true>> <<capture _itemId, _item>> <div class="journal-card"> <div class="j-card-left"> <div class="j-icon-frame"><<= _item.icon>></div> <div class="j-info"> <div class="j-name"> <<= _item.name>> <span class="j-amount">x<<= _amount>></span> <<if _item.tags.includes("convenience_food")>><span class="j-tag-hot">♨️ 可加热</span><</if>> </div> <div class="j-desc"><<= _item.description>></div> </div> </div> <div class="j-card-right"> <<button "食用">> <<set _msg = setup.inv.use(_itemId)>> <<if _item.tags.includes("convenience_food")>> <<modStat "energy" 15>> <<set _msg = _msg + "<br><span style='color:#ff69b4;'>♨️ 微波炉加热加成:精力额外 +15!</span>">> <</if>> <<run setup.notify(_msg, "success")>> <<redo "eat-list">><<redo "state">> <</button>> </div> </div> <</capture>> <</if>> <</for>> <<if not _hasFood>> <div class="journal-empty">( 冰箱里空空如也... 去便利店买点吃的吧。 )</div> <</if>> </div> <</do>> </div>
<div class="passage-header-bar"> <div class="header-location">🍳 厨房料理台</div> <div class="header-actions"> <<button "◀ 解下围裙,返回厨房" "地点-自宅_厨房">><</button>> </div> </div> <div class="location-desc"> 你系上围裙,站在流理台前。只要有足够的食材和合适的厨具,就能做出美味的料理。 </div> <div class="kitchen-journal"> <div class="washi-tape tape-blue"></div> <div class="journal-header"><span style="font-size: 20px;">🍳</span> 食谱小纸条</div> /* 🌟 动态显示等级、称号和经验值 */ <p class="journal-hint"> 当前料理等级:<strong style="color: var(--fontcolor-highlight);">Lv.<<= $skills.daily.cooking.level>> (<<= $skills.daily.cooking.title>>)</strong> <span style="font-size:10px; color:#aaa;">(EXP: <<= $skills.daily.cooking.exp>>)</span> </p> <div class="journal-list"> <<for _recipeId, _recipe range setup.cookingRecipes>> /* 防呆:如果物品库里没写这个成品,给个默认占位符 */ <<set _resultItem = setup.items[_recipeId] || { icon: "🍽️", name: _recipe.name }>> /* 获取这道菜的制作次数 */ <<set _craftedCount = $skills.daily.cooking.craftedCount[_recipeId] || 0>> <<capture _recipeId, _recipe, _resultItem, _craftedCount>> <div class="journal-card"> <div class="j-card-left"> <div class="j-icon-frame"><<= _resultItem.icon>></div> <div class="j-info"> <div class="j-name"> <<= _recipe.name>> <span class="j-req-skill">(需 Lv.<<= _recipe.reqSkill>>)</span> /* 🌟 提示熟练度衰减 */ <<if _craftedCount >= 10>> <span style="font-size: 10px; color: #aaa; margin-left: 5px;">[已熟练]</span> <</if>> </div> <div class="j-desc"><<= _recipe.desc>></div> /* 工具需求检查 */ <<set _hasTool = true>> <<if _recipe.reqTool neq "none">> <div class="j-tool" style="font-size: 11px; margin-bottom: 5px; color: #8faec9;"> <strong>[ 厨具 ]</strong> <<set _toolItem = setup.items[_recipe.reqTool] || { name: "未知工具" }>> <<if setup.inv.has(_recipe.reqTool) > 0>> ✔️ <<= _toolItem.name>> <<else>> <<set _hasTool = false>> <span style="color: #ff4d4d;">❌ 缺少 <<= _toolItem.name>></span> <</if>> </div> <</if>> /* 食材需求检查 */ <div class="j-ingredients"> <strong>[ 素材 ]</strong> <<set _canCook = true>> <<for _ingId, _reqAmount range _recipe.ingredients>> <<set _ingItem = setup.items[_ingId] || { name: _ingId }>> <<set _hasAmount = setup.inv.has(_ingId)>> <<if _hasAmount < _reqAmount>> <<set _canCook = false>> <span class="ing-miss">❌ <<= _ingItem.name>> (<<= _hasAmount>>/<<= _reqAmount>>)</span> <<else>> <span class="ing-ok">✔️ <<= _ingItem.name>> (<<= _hasAmount>>/<<= _reqAmount>>)</span> <</if>> <</for>> </div> <div class="j-cost">消耗:⏱ <<= _recipe.timeCost>>分 | ⚡ <<= _recipe.energyCost>>精力</div> </div> </div> <div class="j-card-right"> /* 拦截逻辑:比较的是 level */ <<if $skills.daily.cooking.level < _recipe.reqSkill>> <button class="j-btn disabled" disabled>技能不足</button> <<elseif not _hasTool>> <button class="j-btn disabled" disabled>缺少厨具</button> <<elseif not _canCook>> <button class="j-btn disabled" disabled>食材不足</button> <<elseif $daily.energy < _recipe.energyCost>> <button class="j-btn disabled" disabled>精力不足</button> <<else>> <<button "制作">> /* 扣除食材 */ <<for _ingId, _reqAmount range _recipe.ingredients>> <<run setup.inv.remove(_ingId, _reqAmount)>> <</for>> /* 获得成品 */ <<run setup.inv.add(_recipeId, 1)>> /* 🌟 核心:调用新的 addExp 函数,自动处理衰减和升级 */ <<set _expGain = setup.skills.addExp($skills.daily.cooking, "cooking", _recipe.reqSkill, _recipeId)>> /* 扣除精力和时间 */ <<set $daily.energy -= _recipe.energyCost>> <<ts _recipe.timeCost>> <<if _expGain > 0>> <<run setup.notify("成功制作了【" + _recipe.name + "】!(料理经验 +" + _expGain + ")", "success")>> <<else>> <<run setup.notify("成功制作了【" + _recipe.name + "】!(这道菜你已经做得太熟练了,无法再提升厨艺)", "info")>> <</if>> <<goto "功能-料理台">> <</button>> <</if>> </div> </div> <</capture>> <</for>> </div> </div>
<div class="passage-header-bar"> <div class="header-location">✂️ 房间手工桌</div> <div class="header-actions"> <<button "◀ 收起工具,返回房间" "地点-自宅_卧室">><</button>> </div> </div> <div class="location-desc"> 你在书桌上铺开了一块垫布,拿出了手工材料。只要有合适的工具和灵感,就能做出精美的物件。 </div> <div class="kitchen-journal"> <div class="washi-tape tape-pink"></div> <div class="journal-header"><span style="font-size: 20px;">✂️</span> 手工图纸集</div> /* 🌟 动态显示手工等级、称号和经验值 */ <p class="journal-hint"> 当前手工等级:<strong style="color: var(--fontcolor-highlight);">Lv.<<= $skills.daily.crafting.level>> (<<= $skills.daily.crafting.title>>)</strong> <span style="font-size:10px; color:#aaa;">(EXP: <<= $skills.daily.crafting.exp>>)</span> </p> <div class="journal-list"> <<for _recipeId, _recipe range setup.craftingRecipes>> /* 防呆:如果物品库里没写这个成品,给个默认占位符 */ <<set _resultItem = setup.items[_recipeId] || { icon: "🎁", name: _recipe.name }>> /* 获取这个物件的制作次数 */ <<set _craftedCount = $skills.daily.crafting.craftedCount[_recipeId] || 0>> <<capture _recipeId, _recipe, _resultItem, _craftedCount>> <div class="journal-card"> <div class="j-card-left"> <div class="j-icon-frame"><<= _resultItem.icon>></div> <div class="j-info"> <div class="j-name"> <<= _recipe.name>> <span class="j-req-skill">(需 Lv.<<= _recipe.reqSkill>>)</span> /* 🌟 提示熟练度衰减 */ <<if _craftedCount >= 10>> <span style="font-size: 10px; color: #aaa; margin-left: 5px;">[已熟练]</span> <</if>> </div> <div class="j-desc"><<= _recipe.desc>></div> /* 工具需求检查 */ <<set _hasTool = true>> <<if _recipe.reqTool neq "none">> <div class="j-tool" style="font-size: 11px; margin-bottom: 5px; color: #8faec9;"> <strong>[ 工具 ]</strong> <<set _toolItem = setup.items[_recipe.reqTool] || { name: "未知工具" }>> <<if setup.inv.has(_recipe.reqTool) > 0>> ✔️ <<= _toolItem.name>> <<else>> <<set _hasTool = false>> <span style="color: #ff4d4d;">❌ 缺少 <<= _toolItem.name>></span> <</if>> </div> <</if>> /* 素材需求检查 */ <div class="j-ingredients"> <strong>[ 素材 ]</strong> <<set _canCraft = true>> <<for _ingId, _reqAmount range _recipe.ingredients>> <<set _ingItem = setup.items[_ingId] || { name: _ingId }>> <<set _hasAmount = setup.inv.has(_ingId)>> <<if _hasAmount < _reqAmount>> <<set _canCraft = false>> <span class="ing-miss">❌ <<= _ingItem.name>> (<<= _hasAmount>>/<<= _reqAmount>>)</span> <<else>> <span class="ing-ok">✔️ <<= _ingItem.name>> (<<= _hasAmount>>/<<= _reqAmount>>)</span> <</if>> <</for>> </div> <div class="j-cost">消耗:⏱ <<= _recipe.timeCost>>分 | ⚡ <<= _recipe.energyCost>>精力</div> </div> </div> <div class="j-card-right"> /* 拦截逻辑:比较的是 level */ <<if $skills.daily.crafting.level < _recipe.reqSkill>> <button class="j-btn disabled" disabled>技能不足</button> <<elseif not _hasTool>> <button class="j-btn disabled" disabled>缺少工具</button> <<elseif not _canCraft>> <button class="j-btn disabled" disabled>素材不足</button> <<elseif $daily.energy < _recipe.energyCost>> <button class="j-btn disabled" disabled>精力不足</button> <<else>> <<button "制作">> /* 扣除素材 */ <<for _ingId, _reqAmount range _recipe.ingredients>> <<run setup.inv.remove(_ingId, _reqAmount)>> <</for>> /* 获得成品 */ <<run setup.inv.add(_recipeId, 1)>> /* 🌟 核心:调用新的 addExp 函数,自动处理衰减和升级 */ <<set _expGain = setup.skills.addExp($skills.daily.crafting, "crafting", _recipe.reqSkill, _recipeId)>> /* 扣除精力和时间 */ <<set $daily.energy -= _recipe.energyCost>> <<ts _recipe.timeCost>> <<if _expGain > 0>> <<run setup.notify("成功制作了【" + _recipe.name + "】!(手工经验 +" + _expGain + ")", "success")>> <<else>> <<run setup.notify("成功制作了【" + _recipe.name + "】!(这个物件你已经做得太熟练了,无法再提升手艺)", "info")>> <</if>> <<goto "功能-手工桌">> <</button>> <</if>> </div> </div> <</capture>> <</for>> </div> </div>
/* 安全锁:确保玩家变量存在 */ <<if ndef $gachaCollection>><<set $gachaCollection = []>><</if>> <div class="passage-header-bar"> <div class="header-location">🏆 扭蛋收藏展示柜</div> <div class="header-actions"> <<button "◀ 返回房间" "地点-和室自宅">><</button>> </div> </div> <div class="location-desc" style="font-size: 13px; margin-bottom: 20px;"> 这里展示着你从星光扭蛋大厦收集来的所有微缩模型。<br> <span style="color: var(--fontcolor-highlight);">* 首次抽到的收藏品会点亮图鉴,重复的会放入背包用于送礼或转化。</span> </div> <!-- 调用 JS 宏渲染交互式收藏柜 --> <<gachaCabinet>> <!-- 底部总进度统计 --> <div style="text-align: center; margin-top: 20px; font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-deep1); background: var(--background-white); padding: 10px; border-radius: 12px; border: 2px dashed var(--bordercolor-soft);"> 总收集进度:<span style="color: var(--fontcolor-highlight); font-size: 18px;"><<= $gachaCollection.length>></span> </div>
<div class="passage-header-bar"> <div class="header-location">🚿 淋浴间</div> <div class="header-actions"> <<button "◀ 擦干身体,返回洗面所" "地点-自宅_浴室">><</button>> </div> </div> <<do tag "bath-ui">> <div class="location-desc"> 这里是铺着复古马赛克瓷砖的淋浴间。虽然空间不大,但有一个很深的日式浴缸,足够你把全身浸泡进去。 <<if $daily.cleanliness < 50>> <br><span style="color: #ff4d4d; font-weight: bold;">你身上出了不少汗,感觉黏糊糊的,赶紧洗个澡吧。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">浴室里弥漫着淡淡的沐浴露香气,镜子上还带着一点水汽。</span> <</if>> <br> <span style="color: #8faec9; font-size: 12px; font-family: var(--font-pixel);"> 当前清洁度:<<= $daily.cleanliness>>% | 精力:<<= $daily.energy>>/100 </span> </div> <div class="step-title" style="color: #8faec9; border-left-color: #8faec9; margin-top: 15px;">🚿 洗浴活动</div> <div class="action-list"> <<button "🚿 简单淋浴 (20分钟)">> <<ts 20>> <<set $daily.cleanliness = 100, $daily.energy = Math.min(100, $daily.energy + 10)>> <<set $daily.style.makeup = "素颜">> <<set $daily.style.messiness = "凌乱">> <<set $daily.style.hairFrontAcc = "无">> <<set $daily.style.hairSideAcc = "无">> <<set $daily.style.hairTie = "披散">> <<run setup.notify("冲了个澡,感觉清爽多了。(头发变湿变凌乱,造型已拆除,已卸妆)", "success")>> <<redo "bath-ui">> <</button>> <<set _hasBathBomb = setup.inv.has("bath_bomb_rose")>> <<if _hasBathBomb>> <<button "🛁 使用玫瑰浴球泡澡 (45分钟)">> <<run setup.inv.remove("bath_bomb_rose", 1)>><<ts 45>> <<set $daily.cleanliness = 100, $daily.energy = Math.min(100, $daily.energy + 30)>> <<set $daily.stress = Math.max(0, $daily.stress - 20), $persona.sexAppeal += 1>> <<set $daily.style.makeup = "素颜">> <<set $daily.style.messiness = "凌乱">> <<set $daily.style.hairFrontAcc = "无">> <<set $daily.style.hairSideAcc = "无">> <<set $daily.style.hairTie = "披散">> <<run setup.notify("玫瑰的香气让你彻底放松了下来。(压力-20,性感+1,头发变凌乱,造型已拆除)", "success")>> <<redo "bath-ui">> <</button>> <<else>> <<button "🛁 泡个热水澡 (40分钟)">> <<ts 40>> <<set $daily.cleanliness = 100, $daily.energy = Math.min(100, $daily.energy + 20)>> <<set $daily.stress = Math.max(0, $daily.stress - 10)>> <<set $daily.style.makeup = "素颜">> <<set $daily.style.messiness = "凌乱">> <<set $daily.style.hairFrontAcc = "无">> <<set $daily.style.hairSideAcc = "无">> <<set $daily.style.hairTie = "披散">> <<run setup.notify("泡在热水里,一天的疲惫都消散了。(压力-10,头发变凌乱,造型已拆除)", "success")>> <<redo>> <</button>> <</if>> /* 浴室自我开发 */ <<if $daily.lust >= 50 or $adultLife.metrics.depravity >= 20>> <<button "🔞 借着水流自我安慰 (30分钟)">> <<ts 30>> <<set $daily.lust = Math.max(0, $daily.lust - 40)>> <<set $bodyTuning.sensitivity.clit += 1, $adultLife.metrics.depravity += 1>> <<run setup.notify("温热的水流让你很快达到了高潮。(欲火大降,阴蒂敏感度+1,堕落+1)", "warning")>> <<redo>> <</button>> <</if>> </div> <</do>>
<div class="passage-header-bar"> <div class="header-location">🛏️ 温暖的被窝</div> <div class="header-actions"> /* 🌟 动线修复:床铺在卧室,返回卧室 */ <<button "◀ 起床" "地点-自宅_卧室">><</button>> </div> </div> <div class="location-desc"> 柔软的被褥散发着阳光的味道。 <<if $daily.cleanliness < 50>> <br><span style="color: #ff4d4d; font-weight: bold;">你身上黏糊糊的,如果不洗澡就睡觉,会弄脏床单的!</span> <</if>> </div> <div class="action-list" style="margin-top: 20px;"> <<button "💤 闭上眼睛睡觉 (跨天)">> <<if $daily.energy >= 90>> <<run setup.notify("精力还很充足,完全睡不着。", "warning")>> <<else>> <<set setup.temp = setup.temp || {}>> <<set setup.temp.dreamEvent = setup.rollEvent("dreams")>> <<run setup.time.sleepUntil(6, 30)>> <<set $daily.style.messiness = "凌乱">> <<if $daily.cleanliness < 50>> <<set $daily.stress += 10, $daily.mood -= 10>> <</if>> <<goto "事件-系统_清晨醒来">> <</if>> <</button>> <<button "📱 躺在床上玩手机 (30分钟)">> <<ts 30>><<set $daily.energy -= 5, $daily.mood += 5>> <<run setup.notify("刷了一会儿社交软件。(精力-5,心情+5)", "success")>> <<goto "功能-床铺">> <</button>> </div>
<<if ndef _selectedEquip>><<set _selectedEquip = "flip_phone">><</if>> <div class="passage-header-bar"> <div class="header-location">🔞 浴室镜前 - 私密拍摄</div> <div class="header-actions"> <<button "◀ 终止拍摄" "地点-自宅_浴室">><</button>> </div> </div> <!-- 氛围描述区 (横向排版,更紧凑) --> <div class="location-desc" style="border-color: #ff69b4; background: #fff0f5; display: flex; gap: 15px; align-items: center; padding: 15px;"> <div style="font-size: 45px; filter: drop-shadow(2px 2px 0px #ffb6c1);">📸</div> <div style="flex: 1;"> 你锁好了浴室的门,确保没有任何人能进来。<br> 你赤裸着身体站在洗面台的半身镜前,浴室里弥漫着温热的水汽,镜子里的少女脸颊微红,眼神中透着一丝难以言喻的渴望。<br> <div style="margin-top: 5px; font-size: 11px; color: #ff4d4d; font-weight: bold; font-family: var(--font-pixel); background: rgba(255,255,255,0.5); padding: 4px 8px; border-radius: 6px; display: inline-block;"> [ 当前欲火: <<= $daily.lust>>/100 | 诱惑技巧: Lv.<<= $skills.adult.seduction.level>> | 露出癖: <<= $bodyTuning.fetish.exhibition>> ] </div> </div> </div> <<do tag "private-photo-ui">> <!-- 🌟 设备选择区 (使用手搓的 Y2K 下拉宏,左右布局省空间) --> <div style="background: #fff; border: 2px dashed #ffb6c1; border-radius: 12px; padding: 12px 20px; margin: 15px 0; display: flex; justify-content: space-between; align-items: center; box-shadow: 2px 2px 0 #ffe4e1;"> <div style="font-size: 13px; color: var(--fontcolor-deep1); font-weight: bold;"> 📷 选择拍摄设备:<br> <span style="font-size: 10px; color: #aaa; font-weight: normal;"><<= setup.photoDB.equipments[_selectedEquip].desc>></span> </div> <<y2kselect "_selectedEquip" "private-photo-ui">> <<y2koption "flip_phone" "📱 翻盖手机 (默认)">> <<if $inventory.keyItems.includes("polaroid_camera")>> <<y2koption "polaroid_camera" "📷 拍立得">> <</if>> <<if $inventory.keyItems.includes("ccd_camera")>> <<y2koption "ccd_camera" "📸 数码卡片机">> <</if>> <<if $inventory.keyItems.includes("dslr_camera")>> <<y2koption "dslr_camera" "🎥 单反相机">> <</if>> <</y2kselect>> </div> <div class="step-title" style="color: #ff69b4; border-left-color: #ff69b4; margin-bottom: 10px;">✨ 选择拍摄姿势与尺度</div> <!-- 🌟 紧凑型双列网格布局 (极大节省垂直空间) --> <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px;"> <<for _i = 0; _i < setup.photoDB.adultPoses.length; _i++>> <<set _pose = setup.photoDB.adultPoses[_i]>> <<capture _pose>> <div style="background: #fff; border: 1px solid #ffd1dc; border-radius: 8px; padding: 10px 12px; display: flex; justify-content: space-between; align-items: center; transition: 0.2s; box-shadow: 2px 2px 0 #ffe4e1;"> <!-- 左侧:文字描述 --> <div style="flex: 1; padding-right: 10px;"> <div style="font-weight: bold; font-size: 13px; color: var(--fontcolor-deep1); margin-bottom: 4px;"> <<= _pose.name>> </div> <div style="font-size: 11px; color: var(--fontcolor-grey); line-height: 1.3;"> <<= _pose.desc>> </div> </div> <!-- 右侧:按钮或锁定提示 --> <div style="flex-shrink: 0; text-align: right;"> <<if $daily.lust >= _pose.lustReq and $skills.adult.seduction.level >= _pose.seductionReq>> <<button "拍摄">><br><span style="font-size:9px; font-weight:normal;">(30分钟)</span> /* 🌟 核心:跳转到文字堆料事件 */ <<ts 30>> <<set $bodyTuning.fetish.exhibition += 2>> <<set $daily.lust = Math.min(100, $daily.lust + 15)>> /* 生成照片并存入临时变量,供下一个页面读取 */ <<set setup.temp = setup.temp || {}>> <<set setup.temp.currentPhoto = setup.photo.take('adult', _pose.id, _selectedEquip)>> <<set setup.temp.currentPose = _pose>> <<goto "事件-私房照拍摄">> <</button>> <<else>> <div style="font-size: 9px; color: #ff4d4d; font-family: var(--font-pixel); line-height: 1.4; background: #ffe6e6; padding: 4px 6px; border-radius: 4px; border: 1px dashed #ffb6c1;"> <<if $daily.lust < _pose.lustReq>>需欲火 >= <<= _pose.lustReq>><br><</if>> <<if $skills.adult.seduction.level < _pose.seductionReq>>需诱惑 >= Lv.<<= _pose.seductionReq>><</if>> </div> <</if>> </div> </div> <</capture>> <</for>> </div> <</do>>
<!-- ================= 1. 描述板块 (动态生成) ================= --> /* 确保房间属性是最新的 */ <<run setup.room.calcStats()>> <div class="location-desc"> <div style="display: flex; justify-content: space-between; border-bottom: 1px dashed var(--bordercolor-soft); padding-bottom: 5px; margin-bottom: 10px;"> <span style="font-family: var(--font-pixel); font-weight: bold; color: var(--fontcolor-highlight);"> 🏠 房间评级:<<= $room.grade>> (<<= $room.gradeName>>) </span> <span style="font-size: 12px; color: var(--fontcolor-grey);"> 舒适:<<= $room.stats.comfort>> | 时尚:<<= $room.stats.style>> | 魔力:<<= $room.stats.magic>> </span> </div> /* --- 总体氛围描述 (根据评级) --- */ <<if $room.grade eq "F" or $room.grade eq "E">> 阳光透过拉门洒在榻榻米上,空气中弥漫着淡淡的蔺草香。房间虽然不大,但作为你高中三年的起点,这里充满了无限的可能。<br><br> <<elseif $room.grade eq "D" or $room.grade eq "C">> 经过你的精心布置,这间祖母留下的老宅已经褪去了原本的陈旧感,处处透露着属于你自己的生活气息。<br><br> <<elseif $room.grade eq "B" or $room.grade eq "A">> 这间房间完美融合了传统和室的结构与千禧年的前卫潮流,任何同学来做客都会惊叹于你的品味!<br><br> <<else>> 这里已经不再是一间普通的老宅,浓郁的魔力与极致的舒适感交织,简直是魔法少女的梦幻工坊!<br><br> <</if>> /* --- 细节描述 (微型紧凑) --- */ <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 8px; margin-top: 10px;"> <<for _slot, _itemId range $room.slots>> /* 只要当前槽位的家具不是"empty",且在数据库中存在,就渲染一张微型卡片 */ <<if _itemId neq "empty" and setup.items[_itemId]>> <<set _item = setup.items[_itemId]>> <div style="display: flex; align-items: flex-start; background: rgba(255,255,255,0.5); padding: 6px 8px; border-radius: 6px; border: 1px dashed var(--bordercolor-soft); transition: 0.2s;" onmouseover="this.style.backgroundColor='#fff'; this.style.borderColor='var(--fontcolor-highlight)';" onmouseout="this.style.backgroundColor='rgba(255,255,255,0.5)'; this.style.borderColor='var(--bordercolor-soft)';"> <!-- 左侧微型图标 --> <div style="font-size: 16px; margin-right: 6px; margin-top: 1px; filter: drop-shadow(1px 1px 1px rgba(0,0,0,0.1));"> <<= _item.icon>> </div> <!-- 右侧紧凑文字 --> <div style="flex-grow: 1; overflow: hidden;"> <div style="font-size: 11px; font-weight: bold; color: var(--fontcolor-deep1); margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"> <<= _item.name>> </div> <div style="font-size: 10px; color: var(--fontcolor-grayblue); line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;"> <<= _item.description>> </div> </div> </div> <</if>> <</for>> </div> /* --- 动态时间描述 (保留之前的氛围感) --- */ /* 注意:新版 isTimeBetween 需要 4 个参数 (开始时, 开始分, 结束时, 结束分) */ <<if setup.time.isTimeBetween(18, 0, 6, 0)>> <div style="margin-top: 10px; color: var(--fontcolor-lavender);">🌙 夜色已深,窗外偶尔传来远处的电车声。</div> <<elseif $Time.weather eq "rainy" or $Time.weather eq "storm">> <div style="margin-top: 10px; color: var(--fontcolor-grayblue);">🌧️ 雨滴敲打着窗棂,让这间小小的和室显得格外静谧。</div> <</if>> </div> <!-- ================= 2. 活动板块 ================= --> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 房间活动</div> <div class="action-list"> /* 只有装备了书桌才能学习 */ <<if $room.slots.desk neq "empty">> <<button "📚 坐在书桌前学习 (60分钟)">> <<roomAction "study">> <</button>> <</if>> /* 只有装备了电脑才能上网 */ <<if $room.slots.pcSetup neq "empty">> <<button "💻 打开电脑" "功能-电脑">><</button>> <</if>> <<button "🏆 扭蛋收藏柜" "功能-扭蛋收藏柜">><<ts 2>><</button>> <<button "🧚♀️ 呼唤妖精" "功能-呼唤妖精">><</button>> <<button "🛠️ 房间 DIY" "功能-房间DIY">> <<run setup.notify("进入装修模式。搬动家具会消耗精力和时间哦!", "info")>> <</button>> </div> <!-- ================= 3. 移动板块 ================= --> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 房间内移动</div> <div class="map-grid-container"> <<navTo "home_kitchen" "🍳 前往厨房">> <<navTo "home_bath" "🛁 前往浴室">> <<navTo "home_bed" "🛌 前往卧室">> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开房间</div> <div class="map-grid-container"> <<navTo "station">> <<navTo "park">> <<navTo "riverbank">> <<navTo "school_gate">> </div>
<div class="location-desc"> 这里是老宅附带的迷你厨房。虽然只有一个单眼瓦斯炉和一个小小的水槽,但旁边放着一台充满千禧年风格的微波炉和一台贴着贴纸的单门冰箱。 <br><br> <span style="color: var(--fontcolor-grayblue);">“只要用心,这里也能做出美味的料理哦。”</span><br> 当前料理技能:<strong style="color: var(--fontcolor-highlight);">Lv.<<= $skills.daily.cooking.level>> (<<= $skills.daily.cooking.title>>)</strong> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 厨房活动</div> <div class="action-list"> <<button "🍱 打开冰箱" "功能-冰箱进食">><<ts 1>><</button>> <<button "🍳 站在流理台前" "功能-料理台">><<ts 1>><</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 房间内移动</div> <div class="map-grid-container"> <<navTo "home" "🏠 返回起居室">> <<navTo "home_bath" "🛁 前往浴室">> <<navTo "home_bed" "🛌 前往卧室">> </div>
<<do tag "washroom-ui">> /* 判定当前着装状态 */ <<set _isNaked = ($daily.style.outfit === "无" and $daily.style.top === "无" and $daily.style.bottom === "无" and $daily.style.bra === "无" and $daily.style.panties === "无")>> <<set _isTowel = ($daily.style.outfit === "bath_towel")>> <div class="location-desc"> 这里是浴室外面的洗面所(脱衣所)。洗手台上方有一面很大的半身镜,旁边放着洗衣机和脏衣篓。 <br><br> <span style="font-size: 12px; color: #888;"> 当前状态: <<if _isNaked>> <strong style="color: #ff4d4d;">一丝不挂</strong> <<elseif _isTowel>> <strong style="color: #ffb6c1;">裹着浴巾</strong> <<else>> <strong style="color: var(--fontcolor-deep1);">穿着衣服</strong> <</if>> </span> </div> <div class="step-title" style="color: #ffb6c1; border-left-color: #ffb6c1; margin-top: 15px;">🪞 镜前互动</div> <div class="action-list"> <<if setup.inv.has("facial_mask")>> <<button "💆♀️ 敷面膜护肤 (15分钟)">> <<run setup.inv.remove("facial_mask", 1)>><<ts 15>> <<set $persona.sexAppeal += 1>><<set $daily.stress = Math.max(0, $daily.stress - 5)>> <<run setup.notify("敷完面膜后,皮肤变得水当当的!(性感+1,压力-5)", "success")>> <<redo>> <</button>> <</if>> <<if _isNaked or _isTowel>> <<button "📷 练习私房照 (20分钟)">> <<ts 20>> <<set _expGain = setup.skills.addExp($skills.daily.photography, "photography", 0, null)>> <<set $persona.sexAppeal += 1>><<set $bodyTuning.fetish.exhibition += 1>> <<run setup.notify("你摆出各种诱人的姿势,拍下了几张非常大胆的照片。(摄影经验+" + _expGain + ",性感+1,露出+1)", "warning")>> <<redo>> <</button>> <<button "📷 对着镜子拍私房照" "功能-私房照拍摄">><</button>> <<else>> <<button "📷 对着镜子练习自拍 (20分钟)">> <<ts 20>> <<set _expGain = setup.skills.addExp($skills.daily.photography, "photography", 0, null)>> <<run setup.notify("你对着镜子练习了几个可爱的表情。(摄影经验+" + _expGain + ")", "success")>> <<redo>> <</button>> <</if>> </div> <div class="step-title" style="color: #b19cd9; border-left-color: #b19cd9; margin-top: 15px;">👗 换装准备</div> <div class="action-list"> <<if not _isNaked>> <<button "🔞 脱光所有衣服">> <<set $daily.style.outfit = "无">><<set $daily.style.top = "无">><<set $daily.style.bottom = "无">> <<set $daily.style.bra = "无">><<set $daily.style.panties = "无">> <<run setup.notify("你把衣服脱光,丢进了脏衣篓。", "info")>> <<redo>> <</button>> <<else>> <<button "🧖♀️ 裹上浴巾">> <<set $daily.style.outfit = "bath_towel">> <<run setup.notify("你用一条大浴巾裹住了身体。", "info")>> <<redo>> <</button>> <<button "👙 穿回基础内衣">> <<set $daily.style.bra = "basic_bra_white">><<set $daily.style.panties = "basic_panties_white">> <<run setup.notify("你穿上了纯白棉质内衣裤。", "success")>> <<redo>> <</button>> <</if>> /* 🌟 核心拦截:必须全裸才能进入淋浴间功能 */ <<if _isNaked>> <<button "🚿 进入淋浴间 (湿区)" "功能-淋浴间">><</button>> <<else>> <button class="disabled-btn" disabled title="请先脱光衣服">🚿 进入淋浴间 (需全裸)</button> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 房间内移动</div> <div class="map-grid-container"> <<navTo "home" "🏠 返回起居室">> <<navTo "home_kitchen" "🍳 前往厨房">> <<navTo "home_bed" "🛌 前往卧室">> </div> <</do>>
<div class="location-desc"> 这里是和室附带的半阁楼式卧室,空间刚好够铺下一张床铺。倾斜的屋顶上开着一扇天窗,夜晚可以直接看到月華镇的星空。 <br><br> 当前床铺:<strong style="color: var(--fontcolor-highlight);"><<= setup.items[$room.slots.bed].name>></strong> <br> <<if $Time.hour >= 20 or $Time.hour < 6>> <span style="color: var(--fontcolor-lavender);">夜色温柔,床铺看起来非常诱人,是时候休息了。</span> <<else>> <span style="color: var(--fontcolor-grey);">白天的阳光透过天窗洒在被褥上,暖洋洋的。</span> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 休息与私密</div> <div class="action-list"> <<button "🪞 梳妆打扮" "功能-梳妆打扮">><<ts 1>><</button>> <<button "👗 打开衣柜" "功能-衣柜换装">><<ts 1>><</button>> <<button "✂️ 制作手工" "功能-手工桌">><<ts 1>><</button>> <<button "🛌 在<<= setup.items[$room.slots.bed].name>>躺下" "功能-床铺">><<ts 1>><</button>> <<if $room.slots.secret !== "empty">> <<button "🔒 检查隐藏物品">> <<run setup.notify("你悄悄拿出了藏在床底的【" + $room.slots.secret + "】...", "warning")>> <</button>> <</if>> <<button "💾 记录日记">> <<run window.openCustomSave()>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 房间内移动</div> <div class="map-grid-container"> <<navTo "home" "🏠 下楼回起居室">> <<navTo "home_bath" "🛁 前往浴室">> </div>
<div class="location-desc"> 这里是月華镇的中心大街。与繁华嘈杂的商业街不同,这里的道路宽阔整洁,两旁种满了高大的银杏树。<br> 市政机构、大型医院和高级住宅区都坐落在这条街上,偶尔能看到巡逻的警车缓缓驶过。 </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏛️ 访问设施</div> <div class="map-grid-container"> <<navTo "town_hall" "🏛️ 镇中心会馆">> <<navTo "police_station" "🚓 月華警署">> <<navTo "hospital" "🏥 月華综合医院">> <<navTo "apt_lobby" "🏢 白金公寓大厅">> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🗺️ 离开镇中心</div> <div class="map-grid-container"> <<navTo "street_main" "🛍️ 前往商业街">> <<navTo "station" "🚉 前往站前广场">> <<navTo "home" "🏠 步行回家">> </div>
<div class="location-desc"> 月華综合医院。大厅里弥漫着淡淡的消毒水味,挂号处排着长队。<br> 这里不仅可以治疗疾病,还能在药房买到一些外面药妆店买不到的处方药。 </div> <<do tag "hospital-ui">> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">🏥 医院服务</div> <div class="action-list"> <<scanEvents>> <<button "🩺 挂号看诊 (3000円, 60分钟)">> <<if $wallet.yen >= 3000>> <<ts 60>><<set $wallet.yen -= 3000>> <<set $daily.energy = Math.min(100, $daily.energy + 50)>> <<set $daily.stress = Math.max(0, $daily.stress - 30)>> <<if $player.traits.health === "花粉症">><<set $daily.tookAllergyMed = true>><</if>> <<run setup.notify("医生为你进行了治疗,并开了一些药。身体感觉好多了!(精力+50, 压力-30)", "success")>> <<else>> <<run setup.notify("日元不足,无法挂号...", "error")>> <</if>> <<redo>> <</button>> <<button "💊 处方药房 (开发中)">> <<run setup.notify("可以在这里买到安眠药、强效避孕药等特殊物品,敬请期待!", "info")>> <</button>> <<button "💼 申请护工兼职">> <<run setup.notify("医院护工打工系统开发中...", "info")>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开医院</div> <div class="map-grid-container"> <<navTo "central_main" "🚶♀️ 返回镇中心大街">> </div> <</do>>
<div class="location-desc"> 月華镇警署。一栋外观严肃的灰色建筑,门口停着几辆黑白相间的巡逻车。<br> 偶尔能看到巡警押着几个染着黄毛的不良少年走进去。对于普通市民来说,这里是安全的象征;但对于某些心怀鬼胎的人来说,这里是绝对不想靠近的地方。 </div> <<do tag "police-ui">> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 警署前行动</div> <div class="action-list"> <<scanEvents>> <<button "📋 查看门口的布告栏 (10分钟)">> <<ts 10>> <<run setup.notify("上面贴着防范诈骗的宣传海报,以及几张寻找走失宠物的启事。", "info")>> <<redo "police-ui">> <</button>> /* 叛逆或堕落度高时的专属作死选项 */ <<if $persona.rebellion >= 50 or $adultLife.metrics.depravity >= 50>> <<button "🚬 在警署门口徘徊挑衅 (危险!)">> <<ts 20>> <<set $daily.stress += 10>><<set $school.metrics.intimidation += 2>> <<run setup.notify("你故意在警署门口晃悠,一个警察大叔严厉地瞪了你一眼,你赶紧溜走了。(威慑力+2,压力+10)", "warning")>> <<redo>> <</button>> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开警署</div> <div class="map-grid-container"> <<navTo "central_main" "🚶♀️ 返回镇中心大街">> </div> <</do>>
<div class="location-desc"> 镇中心会馆。这里是办理各种行政手续、接取官方委托以及举办镇民集会的地方。<br> 大厅里摆放着月華镇的沙盘模型,墙上挂着“建设美丽月華”的横幅。 </div> <<do tag "townhall-ui">> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 会馆大厅行动</div> <div class="action-list"> <<scanEvents>> <<button "🧹 申请社区志愿服务 (60分钟)">> <<ts 60>> <<if $daily.energy >= 20>> <<set $daily.energy -= 20>><<set $town.metrics.fame += 5>><<set $persona.etiquette += 1>> <<run setup.notify("你帮助工作人员整理了档案,获得了镇民的赞赏。(精力-20,小镇知名度+5,礼仪+1)", "success")>> <<else>> <<run setup.notify("你太累了,工作人员让你回去好好休息。", "error")>> <</if>> <<redo>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开会馆</div> <div class="map-grid-container"> <<navTo "central_main" "🚶♀️ 返回镇中心大街">> </div> <</do>>
<div class="location-desc"> 这里是白金公寓楼的一楼大厅。 <br><br> 地面铺着光洁的大理石,空气中弥漫着高级香氛的味道。前台有全天候值守的保安,电梯也需要刷住户卡才能启动。 <br> <span style="color: var(--fontcolor-grayblue);">小姨就住在这栋楼里。</span> </div> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 乘坐电梯</div> <div class="map-grid-container"> /* 🌟 修复:使用新的验证函数 */ <<if setup.map.validateAccess("aunt_home").canEnter>> <<navTo "aunt_home" "🏠 乘坐电梯前往小姨家">> <<else>> <div class="disabled-btn" style="padding: 10px; border: 1px dashed #ccc; border-radius: 8px; color: #aaa; font-size: 12px; text-align: center;"> 🔒 贸然上去打扰不太好 (需小姨亲密度≥30) </div> <</if>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开公寓楼</div> <div class="map-grid-container"> <<navTo "central_main" "🚶♀️ 返回镇中心大街">> </div>
<div class="location-desc"> 小姨千夏的单身公寓。房间虽然不大,但布置得非常温馨时尚。<br> 空气中弥漫着高级香水和咖啡混合的味道,角落里堆着几本最新的时尚杂志。 <<if $npcs["aunt"].currentLoc === "aunt_home">> <br><span style="color: var(--fontcolor-highlight);">小姨现在正在家里。</span> <<else>> <br><span style="color: var(--fontcolor-grayblue);">小姨现在不在家,但她给过你备用钥匙。</span> <</if>> </div> <<do tag "aunt-home-ui">> <div class="step-title" style="color: var(--fontcolor-highlight); border-left-color: var(--fontcolor-highlight);">✦ 室内行动</div> <div class="action-list"> <<scanEvents>> <<if $npcs["aunt"].currentLoc === "aunt_home">> <<button "💬 和小姨聊天 (30分钟)">> <<ts 30>> <<set $daily.mood = Math.min(100, $daily.mood + 15)>> <<set $npcs["aunt"].rel.affinity += 2>> <<run setup.notify("和小姨聊了聊最近的烦恼,感觉轻松多了。(心情+15,小姨亲密度+2)", "success")>> <<redo>> <</button>> <</if>> <<button "🛋️ 在沙发上休息 (30分钟)">> <<ts 30>> <<set $daily.energy = Math.min(100, $daily.energy + 20)>> <<run setup.notify("小姨家的沙发非常柔软,你躺在上面小憩了一会儿。(精力+20)", "success")>> <<redo>> <</button>> </div> <div class="step-title" style="color: var(--fontcolor-grayblue); border-left-color: var(--fontcolor-grayblue); margin-top: 20px;">🚪 离开房间</div> <div class="map-grid-container"> <<navTo "apt_lobby" "⬇️ 乘坐电梯返回一楼大厅">> </div> <</do>>