← 모듈 공장 리스트

🎖️파티 상태창2.2v

risum 모듈 — RISU modules[] — 기능 확장

🗒️ 제작자 게시글

자료원문 보기 ↗

조회 1251 · 2026-06-19

제작자 의도 — 본문 전문 (3,776자)
❖  D U N G E O N  ·  D I C E  ❖
─────────── RPG STATUS GRIMOIRE ───────────
PARTY STATUS
Ver. 2.2
스탯, 전투, 선택지까지. 이 모든 것을 한 화면에.
❖  PROLOGUE  ❖
위태로운 던전의 문 앞.
숨이 턱 끝까지 차오른 동료의 HP 바가 마지막 한 칸을 남기고 깜빡입니다.
눈앞의 고블린은 붉은 광기를 뿜어내며 검을 치켜들고 있죠.
『문 부수기 — STR · d100+5 vs 55』
화면 위로 가볍게 손가락을 얹고, 클릭합니다.
데굴데굴… 화면을 구르는 주사위. 결과는
아슬아슬한 실패.
절망이 스치려는 찰나, 당신의 텍스트가 시작되기도 전에 동료가 방패를 앞세우며 판을 뒤집고 들어옵니다.
그저 상상 속에서만 머물던 그 극적인 타이밍이, 이제 당신의 화면 위에서
실시간으로 살아 움직입니다.
텍스트 역할극(RP)의 한계를 넘어,
당신과 당신의 동료들이 함께 써내려갈 이야기에 가장 어울리는
스테이터스 모듈
입니다.
❖  CHAPTER I  ❖
하나의 모듈, 네 가지의 몰입
◆ ─────────── ◆
복잡한 설정은 필요 없습니다. 단 한 번의 토글로, 오늘 당신이 써 내려갈 모험의 깊이를 결정하세요.
① STAT PANEL
⟐
무게감을 더하다
캐릭터 카드 위에 새겨진 STR, DEX, INT… 이 숫자들은 단순한 텍스트가 아닙니다. 근력 1포인트가 굳게 닫힌 강철 문을 찢어발기고, 지능 1포인트가 발밑의 치명적인 함정을 간파합니다. 모든 수치가 세계관을 바꾸는,
가장 완벽한 D&D식 몰입
을 경험하세요.
② PARTY PANEL
⟐
오직 동료들에게 집중하도록
당신의 봇이 가진 고유의 개성은 그대로 두세요. 이 패널은 오직 당신 곁을 지키는
동료들만을 위해
빛납니다. 그들의 호흡과 체력, 능력을 메인 화면과 충돌 없이 가장 순수하고 깔끔하게 시각화합니다.
③ CP PANEL
⟐
직관적인 강함, 그 자체
그동안 숫자를 일일이 계산하느라 몰입이 깨지셨나요? 이제 그 무거운 짐을 내려놓으세요. 수많은 능력치를 하나의 압도적인 숫자,
CP(종합 전투력)
로 정제했습니다. 거추장스러운 데이터는 걷어내고, 오직 눈앞의 강함에만 직관적으로 반응하세요.
④ DICE PANEL
⟐
운명은 단 한 번의 롤로
검의 예리함도, 방패의 단단함도, 결국 운명의 순간에는
단 한 번의 주사위
로 결정됩니다. 스탯의 굴레에서 벗어나 주사위 판정 값(DC)만을 전면에 내세우세요. 오직 당신의 선택과 판단, 그리고 짜릿한 행운이 교차하는 스릴을 즐길 시간입니다.
❖  CHAPTER II  ❖
소설이 아닌, 진짜 '전투'
◆ ─────────── ◆
단 한 줄의 대사로 허무하게 쓰러지는 적들은 이제 없습니다. 보스들은 자신만의
HP 바와 고유의 스킬, 그리고 서늘한 난이도
를 품고 당신을 기다립니다. 공격이 격돌하고, 주사위가 운명을 가르며, 적의 체력 바가 한 칸씩 깎여 나갈 때의 그 팽팽한 긴장감. 이제 당신의 텍스트 RP는 읽는 소설을 넘어,
손끝으로 느끼는 TRPG
가 됩니다.
❖  CHAPTER III  ❖
클릭 한 번에, 파티 전체가 숨을 쉰다
◆ ─────────── ◆
이곳에서 당신의 선택은 살아 숨 쉬는 서사로 이어집니다. 선택지를 클릭하는 순간, 시스템은 당신이 고른 패널에 맞춰 주사위를 굴립니다. 그리고
진짜 마법은 그다음입니다.
판정에 실패하면 동료가 몸을 날려 당신을 엄호하고, 성공하면 약속이라도 한 듯 일제히 연계 공격을 퍼붓습니다. 텍스트 속 동료들이 비로소 당신과
'함께'
싸우기 시작합니다.
선택지 한 줄의 속살:
[1|한소리|고블린 시체에서 뇨루의 화살을 회수한다|상황|"화살... 주워올게요."]{성공|뇨루|보조|d50+4 vs 15|"조심해, 아직 날카로우니까."}
❖  CHAPTER IV  ❖
서사는 깊어지고, 시스템은 가벼워진다
◆ ─────────── ◆
모듈이 무거워 스토리의 흐름이 끊길까 걱정되시나요?
서브 모델(Sub-model) 연동 기능
이 그 고민을 완벽히 지워냅니다. 복잡하고 무거운 스테이터스 계산과 전투 연산은 뒤에 숨은 보조 모델이 조용히 처리합니다. 당신의 메인 모델은 오직 아름다운 서사와 스토리에만 모든 온도를 쏟아부을 수 있도록.
❖  CHAPTER V  ❖
감성까지 만족시키는 네 가지 테마
◆ ─────────── ◆
당신의 이야기가 가진 공기, 그 온도까지 담아낼 수 있도록 스테이터스의 옷을 갈아입히세요.
Classic
차분한 슬레이트 그레이와 싱그러운 민트. 정석적이고 신뢰감 있는 모험의 시작.
Paper
서글픈 빛바랜 양장지와 은은한 골드. 오래된 영웅의 일지를 한 장씩 들추는 듯한 아날로그 감성.
Jade
심연의 어둠 속에서 신비롭게 빛나는 비취색. 서늘한 던전의 공기와 고대 마법의 잔영.
Sanctus
절제된 잉크 블랙과 날카로운 실버. 오직 생과 사만이 존재하는 신성하고 선명한 모노크롬.
❖  CHAPTER VI  ❖
토글 가이드 — GM의 설정 시트
◆ ─────────── ◆
기능은 모두 토글로 켜고 끕니다. 변수가 많아 보여도 — 이 한 장이면 끝.
파티상태창
SELECT
비활성
메인
동료Only
CP
Dice
어떤 상태창을 띄울지 결정.
메인
=풀 스탯(STR~CHA) ·
동료Only
=동료만 ·
CP
=종합 전투력 한 줄 ·
Dice
=주사위 중심.
보조모델
ON / OFF
무겁고 복잡한 상태창·전투 연산을
보조 AI
에게 위임. 본 모델은 오직 서사에만 집중.
다이스 오버홀
SELECT
비활성
활성화
활성화+
· 비활성
— 상태창에 주사위 값이 포함되지 않습니다.
· 활성화
— 모듈의 모든 옵션에 관여하며, 주사위 굴림이 필요할 때 자동으로 굴립니다.
· 활성화+
— 주사위 보정값에 장비 등 스탯 외의 외적 요소가 포함됩니다.
적 상태창
ON / OFF
적의
HP 바 · 스킬 · 난이도
를 상태창에 추가. 전투의 긴장감을 시각화.
메세지창
ON / OFF
전투·아이템 획득·레벨업·퀘스트 진행 등을
시스템 메시지 로그
로 문단 사이에 표시.
선택지
ON / OFF
결정의 순간에
클릭형 선택지
블록을 출력.
선택지 주사위
ON / OFF
선택지마다
주사위 판정(성공/실패)
을 부여. 끄면 판정 없이 서사로만 진행.
파티원 반응
ON / OFF
선택 시 파티원이 조건부로
보조·저지·합동
. 동료들이 '함께' 싸우게 만드는 핵심.
테마
SELECT
클래식
페이퍼
제이드
상투스
상태창의 색 테마를 갈아입힘.
❖  EPILOGUE  ❖
준비는 끝났습니다
아래에서 모듈을 받아, 봇의 기존 상태창을 끄고, 토글을 켜세요.
다운로드
✦ Credits
본 선택지 메커니즘은 「
Choice Module: Capsule Extension」에게서 아이디어를 얻어 제작되었습니다. 대체 불가능한 완벽한 선택지를 만든 제작자에게 찬사를.
License — CC BY-NC-SA 4.0
이 저작물은 크리에이티브 커먼즈
저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스
에 따라 이용할 수 있습니다.
· 본 저작물은
아카라이브 커뮤니티 — AI 채팅 채널
을 위해 공개되었으며, 채널 외 타 사이트에서의 공유·배포·재배포가 불가능합니다.
· 상업적 용도로는 어떠한 이유로도 이용할 수 없습니다.
· 리믹스·변형·2차적 저작물을 작성·공유할 경우, 원 저작물과 동일한 조건의 CCL을 적용해야 합니다.
—
PARTY STATUS 2.2 —
잡설.
놀랍게도, 만들고 배포하려고 보니까 — 저번에 만든 것으로 딱 1년이 되는 날이었다.
1주년 기념 업데이트가 될 줄은 몰랐네.
호환성 문제가 있어서, 여기저기 손봤어.
손보면서 큰 찐빠가 있어서 수정도 했고.
내가 플레이하면서 불편한 부분 나오면 또 수정할 것 같은데, 업데이트가 없다면 문제가 없다는 뜻.

정체

📊 상태창·UI기술분류 FMT슬롯 output🎖️파티 상태창2.2v

설명

기존 봇의 상태창은 끄거나 제거해주세요.
파싱된 모듈 전체 (77,939자)
{
 "name": "🎖️파티 상태창2.2v",
 "description": "기존 봇의 상태창은 끄거나 제거해주세요.",
 "id": "ade125b6-ff6a-4ffe-bed9-3ede98dd70c9",
 "hideIcon": false,
 "lorebook": [
  {
   "key": "",
   "comment": "통합 상태창",
   "content": "@depth 0\n{{#if {{? {{getglobalvar::toggle_submodel}}=1}}}}[IMPORTANT] A separate system generates the <Status> and <party_choice> blocks. In your main reply, do NOT output any <Status> or <party_choice> block — write story prose only.\n[READ THE STATE] The most recent <Status> in context is the current truth — `[name|Lv|HPtag|MPtag|EXP|stats]`, `[Enemy|name|tier|HP cur/max|skill|diff]`, `[item|Currency|items]`, `[Quest|...]`. Read it and keep your narration strictly consistent with those values (HP, enemy HP, items, currency, EXP, quests, level).\n{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}[COMBAT — you still drive the rolls; the panel is generated separately]\n{{#if {{? {{getglobalvar::toggle_status_engine}}=1}}}}- Roll: \"1d100 + (relevant Stat / 2) + other bonuses\" vs enemy 1d100.\nchar 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=2}}}}- Roll: \"1d50 + (CP / 5) + other bonuses\" vs enemy 1d50.\nchar 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=3}}}}- Roll: \"1d50 + (CP / 5) + other bonuses\" vs enemy 1d50.\nchar 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=4}}}}- Roll: \"1d100 + Level + equipment DICE bonus\" vs enemy 1d100. Sequential weapons roll 2d100/3d100… (recycle values beyond 5).\nchar 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}{{/if}}\n- Skills: `스킬명(+보정값, 효과)` → ADD 보정값 to the action's roll; 효과 is a free narrative effect. No separate skill die.\n- Ask for a roll on: attacks, combat items, magic, saving/death saves.{{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n- Log between paragraphs: `- System Message: **<Char>'s [Action]: [Roll] ± [modifier] ± [bonus] = [Total] vs Enemy name [roll].**`{{/if}}{{/if}}{{/if}}\n{{#if {{? {{getglobalvar::toggle_submodel}}=0}}}}{{#if {{? {{getglobalvar::toggle_status_engine}}=1}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|STR:D|DEX:E|CON:F|INT:G|WIS:H|CHA:I]\n[{{Char}}|LvJ|{{HPtag}}|{{MPtag}}|EXP:K/L|STR:M|DEX:N|CON:O|INT:P|WIS:Q|CHA:R]\n[{{Char}}| …]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[로빈|Lv1|건강|풍족함|EXP:10/100|STR:10|DEX:10|CON:11|INT:8|WIS:7|CHA:12]\n[엘리스|Lv2|경상|부족|EXP:40/120|STR:7|DEX:9|CON:9|INT:15|WIS:13|CHA:14]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|추가 스텟: 2, 로빈 건틀릿 장착으로 무게 증가 STR 10→8]\n</Status>\n##Condition Stats\n-Used to judge character condition and action feasibility.\n-Based on D&D.\n-Apply as modifiers for dice rolls or checks.\n###HP, MP, EXP\n-HPtag: Healthy, Minor, Major, Critical, Near Death\n-MPtag: Full, Partial, Low, Unstable, Empty\n-EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n-On max EXP: Lv+1, gain +2 stats\n###Primary Stats\n-Used to provide explicit stat interpretation instructions to AI. Always reference primary stats first.\n####Stat Descriptions\n-STR: Strength (force, grappling)\n-DEX: Dexterity (evasion, speed, stealth)\n-CON: Constitution (endurance, stamina)\n-INT: Intelligence (logic, magic theory)\n-WIS: Wisdom (perception, awareness)\n-CHA: Charisma (speech, negotiation, presence)\n####Stat Value Guide\n-For values 21 and above, AI should determine effects situationally:\n1–5: Weak.\n6–10: Below average.\n11–15: Average.\n16–20: Skilled.\n21–30: Expert level\n31+: Interpret case-by-case.\n##etc\n- Quest:  Quest Names/Reward: Details/info.\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(Stat Score) / 2`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d100 + Level Modifier + Other Bonuses\" vs enemy 1d100.\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\n##log\nbetween paragraphs for Format:\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ± [stat Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d100].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of 3-5 numbered options:\n[N|{{user}}|short concrete action|the relevant Stat (STR/DEX/CON/INT/WIS/CHA)|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d100 + the Stat modifier ({mod} = Stat / 5); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|성문을 힘으로 부순다|STR|d100+5 vs 55|\"내가 부순다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|로빈|보조|d100+8 vs 50|\"틈이 생겼어!\"}{{/if}}\n[2|{{user}}|함정을 살핀다|WIS|d100+3 vs 45|\"잠깐, 수상해\"]\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=2}}}}\n#Party Status Window\n-Show current status for all allies. Do not include {{user}}.\n-MUST output the format below, filled with actual data. Place it at the end.\n##Format\n<Status>\n[{{char}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|CP:D]\n[{{char}}|LvF|{{HPtag}}|{{MPtag}}|EXP:G/H|CP:]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[etc|Any lines not matching the above format go here]\n</Status>\n##Example\n<Status>\n[엘리스|Lv2|경상|부족|EXP:40/120|CP:45]\n[로건|Lv4|경상|부족|EXP:40/160|CP:65]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[etc|로건 건틀릿 장착으로 무게 증가 STR 10→8, 엘리스는 자리를 비움]\n</Status>\n##Guide Line\n- Allies = HPtag, MPtag, CP, EXE only\n- HPtag: Healthy, Minor, Major, Critical, Near Death\n- MPtag: Full, Partial, Low, Unstable, Empty\n- CP guide: Influenced by equipment.\n  1–10 Weak / 11–20 Below Avg / 21–40 Avg / 41–60 Skilled / 61–100 Expert / 100+ Case-by-case\n- EXP: Follow setting rules.\n- On max EXP: Lv+1, gain CP (amount up to system).\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(CP Score) / 5`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d50 + Level Modifier + Other Bonuses\" vs enemy 1d50.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d50:  {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d50] ± [CP Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d50].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of 3-5 numbered options:\n[N|{{user}}|short concrete action|CP for allies — {{user}}=상황 판단|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d50 + the ally's CP modifier ({mod} = CP / 10); {{user}}'s OWN action is judged by the situation (omit the roll or set {difficulty} narratively); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|동료에게 돌파를 맡긴다|상황|\"맡길게\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{성공|로빈|합동|d50+4 vs 25|\"같이 가자!\"}{{/if}}\n[2|로빈|적 측면을 친다|CP|d50+6 vs 30|\"측면을 노려\"]\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=3}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|CP:D]\n[{{char}}|LvF|{{HPtag}}|{{MPtag}}|EXP:G/H|CP:]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[엘리스|Lv2|경상|부족|EXP:40/120|CP:44]\n[로건|Lv4|경상|부족|EXP:40/160|CP:65]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|로건 건틀릿 장착으로 무게 증가 STR 10→8, 엘리스는 자리를 비움]\n</Status>\n##Guide Line\n- HPtag, MPtag, CP, EXE only\n- HPtag: Healthy, Minor, Major, Critical, Near Death\n- MPtag: Full, Partial, Low, Unstable, Empty\n- CP guide: Influenced by equipment.\n  1–10 Weak / 11–20 Below Avg / 21–40 Avg / 41–60 Skilled / 61–100 Expert / 100+ Case-by-case\n- EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n- On max EXP: Lv+1, gain 2CP\n- Quest:  Quest Names/Reward: Details/info\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(CP Score) / 5`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d50 + Level Modifier + Other Bonuses\" vs enemy 1d50.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d50:  {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d50] ± [CP Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d50].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of 3-5 numbered options:\n[N|{{user}}|short concrete action|CP|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d50 + the CP modifier ({mod} = CP / 10); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|정면으로 돌파한다|CP|d50+6 vs 30|\"돌파한다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|로건|보조|d50+5 vs 25|\"내가 받친다\"}{{/if}}\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=4}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|B/C|D/E|EXP:F/G|DICE:+H]\n[{{char}}|LvF|{I/J|K/L|EXP:M/N|DICE:+O]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[엘리스|Lv2|5/10|8/10|EXP:40/120|DICE:+1]\n[로건|Lv4|8/10|5/10|EXP:40/160|DICE:+3]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|엘리스: 투지 상승 DICE+1, 로건:자리비움]\n</Status>\n##Guide Line\n- HP: MAX \"10\". HP-1 Hit on enemy attack.\n- MP: MAX \"10\". MP-1 on +3dice skill. MP-2 on +5dice skill. MP-3 on +10dice skill.\n- EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n- On max EXP: Lv+1, gain +1dice.\n- item: Equipment Items format \"item name(+X Dice)\" e.g:장검(+1dice)\n- Quest:  Quest Names/Reward: Details/info\n- DICE: 'Dice:+H' obtained in <status> are 'level gain only' dice.\n##combat rule\n- \"1d100 + Level Modifier + Other Bonuses\" vs enemy 1d100.\n- Weapons with sequential usage roll multiple dice:\nDepending on their traits, use 2d100, 3d100, etc.\nFor weapons exceeding 5d100, recycle the rolled values for calculation. Example: If the rolled results are 12, 34, 45, 56, 60, then a 10d100 sequential weapon is interpreted as: (12, 34, 45, 56, 60, 12, 34, 45, 56, 60).\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\na strong enemy1d200: {{roll::200}}, {{roll::200}}, {{roll::200}}, {{roll::200}}, {{roll::200}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ± [Level Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d100].**\n\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of 3-5 numbered options:\n[N|{{user}}|short concrete action|the relevant DICE/equipment stat|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d100 + the actor's DICE modifier from the status; success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|장검으로 베어낸다|DICE|d100+3 vs 50|\"벤다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|엘리스|보조|d100+1 vs 45|\"막아줄게!\"}{{/if}}\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_diceon}}=2}}}}\n##status guide line\n-In the info field of equipment and combat-related items, specify the DICE bonus modifier. Characters roll 1d100 for AC (Accuracy Check), and equipment/items should provide gradual bonus increases through modifiers.\nThe bonus modifier should either be:\nAppended directly to the item name, or Indicated according to the specified format guideline.\nBonus value guideline: Items with high accuracy receive a bonus of +5 to +20. Other gear should receive a bonus of +1 to +5.\nBonus modifiers apply per item. Ensure that the total combined bonus across all equipment does not exceed a 50% increase (though exceeding it is allowed if unavoidable).\n\n##dice rule\n- combat: \"1d100 + Other Modifier\" vs enemy 1d100.\n- SkillCheck: \"1d100 + Other Modifier\" vs AC 1d100.\n- Weapons with sequential usage roll multiple dice:\nDepending on their traits, use 2d100, 3d100, etc.\nFor weapons exceeding 5d100, recycle the rolled values for calculation. Example: If the rolled results are 12, 34, 45, 56, 60, then a 10d100 sequential weapon is interpreted as: (12, 34, 45, 56, 60, 12, 34, 45, 56, 60).\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\n\n###info format\n-When you do not have the specified instructions to enter the Other Modifier. Output the following Format exactly, filled with current data. Place it at the end.\n<status>{{user}}: weapon +Xac, ..., {char} weapon +Xac,...</status>\n\n##log\nbetween paragraphs for Format:\n{{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ±[Other Modifier] = [Total] vs Enemy name [1d100].**\n{{/if}}{{#if {{? {{getglobalvar::toggle_partymessage}}=0}}}}\n- Game Log: <Char>'s [Action]: [Roll d100] ± [Other Modifier] = [Total] vs Enemy name [1d100].\n{{/if}}{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n### System Message\n- Insert system messages between paragraphs.\n- **Format:** `- System Message: **<content>**`\n- Show key updates for {{char}}:\n  - Skill/item usage\n  - combat and kill enemy\n  - Changes in HP, MP tags\n  - EXP gain and level-ups\n  - Item/loot obtained\n  - Quest progress\n  - Stat or currency changes\n- When {{char}}’s value (e.g. HP, EXP, Cash) changes:\n  - Show change amount or tag\n  - Then show total: (old → new)\n{{/if}}{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}\n##Enemy\n- 등급(tier): easy / hard / extreme — 현재 파티 기준 체감 난이도.\n- HP: 정수 현재/최대. 스킬: 사용 가능 현재/최대 횟수.\n{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}- +N: 적이 스킬 사용 시 굴리는 주사위에 더하는 보너스.\n- diff(X): 이 적에 대한 판정 보정값. -20/-10/0/+5/+10/+20 중 하나(기본 0). 낮을수록 플레이어에게 유리. +20은 거의 불가능한 강적에만.{{/if}}{{/if}}\n{{/if}}",
   "mode": "normal",
   "insertorder": 999,
   "alwaysActive": true,
   "secondkey": "",
   "selective": false,
   "useRegex": false,
   "bookVersion": 2
  },
  {
   "key": "",
   "comment": "서브모델 포맷",
   "content": "{{#if {{? {{getglobalvar::toggle_status_engine}}=1}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|STR:D|DEX:E|CON:F|INT:G|WIS:H|CHA:I]\n[{{Char}}|LvJ|{{HPtag}}|{{MPtag}}|EXP:K/L|STR:M|DEX:N|CON:O|INT:P|WIS:Q|CHA:R]\n[{{Char}}| …]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[로빈|Lv1|건강|풍족함|EXP:10/100|STR:10|DEX:10|CON:11|INT:8|WIS:7|CHA:12]\n[엘리스|Lv2|경상|부족|EXP:40/120|STR:7|DEX:9|CON:9|INT:15|WIS:13|CHA:14]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|추가 스텟: 2, 로빈 건틀릿 장착으로 무게 증가 STR 10→8]\n</Status>\n##Condition Stats\n-Used to judge character condition and action feasibility.\n-Based on D&D.\n-Apply as modifiers for dice rolls or checks.\n###HP, MP, EXP\n-HPtag: Healthy, Minor, Major, Critical, Near Death\n-MPtag: Full, Partial, Low, Unstable, Empty\n-EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n-On max EXP: Lv+1, gain +2 stats\n###Primary Stats\n-Used to provide explicit stat interpretation instructions to AI. Always reference primary stats first.\n####Stat Descriptions\n-STR: Strength (force, grappling)\n-DEX: Dexterity (evasion, speed, stealth)\n-CON: Constitution (endurance, stamina)\n-INT: Intelligence (logic, magic theory)\n-WIS: Wisdom (perception, awareness)\n-CHA: Charisma (speech, negotiation, presence)\n####Stat Value Guide\n-For values 21 and above, AI should determine effects situationally:\n1–5: Weak.\n6–10: Below average.\n11–15: Average.\n16–20: Skilled.\n21–30: Expert level\n31+: Interpret case-by-case.\n##etc\n- Quest:  Quest Names/Reward: Details/info.\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(Stat Score) / 2`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d100 + Level Modifier + Other Bonuses\" vs enemy 1d100.\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\n##log\nbetween paragraphs for Format:\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ± [stat Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d100].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of exactly 5 numbered options:\n[N|{{user}}|short concrete action|the relevant Stat (STR/DEX/CON/INT/WIS/CHA)|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d100 + the Stat modifier ({mod} = Stat / 5); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|성문을 힘으로 부순다|STR|d100+5 vs 55|\"내가 부순다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|로빈|보조|d100+8 vs 50|\"틈이 생겼어!\"}{{/if}}\n[2|{{user}}|함정을 살핀다|WIS|d100+3 vs 45|\"잠깐, 수상해\"]\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=2}}}}\n#Party Status Window\n-Show current status for all allies. Do not include {{user}}.\n-MUST output the format below, filled with actual data. Place it at the end.\n##Format\n<Status>\n[{{char}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|CP:D]\n[{{char}}|LvF|{{HPtag}}|{{MPtag}}|EXP:G/H|CP:]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[etc|Any lines not matching the above format go here]\n</Status>\n##Example\n<Status>\n[엘리스|Lv2|경상|부족|EXP:40/120|CP:45]\n[로건|Lv4|경상|부족|EXP:40/160|CP:65]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[etc|로건 건틀릿 장착으로 무게 증가 STR 10→8, 엘리스는 자리를 비움]\n</Status>\n##Guide Line\n- Allies = HPtag, MPtag, CP, EXE only\n- HPtag: Healthy, Minor, Major, Critical, Near Death\n- MPtag: Full, Partial, Low, Unstable, Empty\n- CP guide: Influenced by equipment.\n  1–10 Weak / 11–20 Below Avg / 21–40 Avg / 41–60 Skilled / 61–100 Expert / 100+ Case-by-case\n- EXP: Follow setting rules.\n- On max EXP: Lv+1, gain CP (amount up to system).\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(CP Score) / 5`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d50 + Level Modifier + Other Bonuses\" vs enemy 1d50.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d50:  {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d50] ± [CP Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d50].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of exactly 5 numbered options:\n[N|{{user}}|short concrete action|CP for allies — {{user}}=상황 판단|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d50 + the ally's CP modifier ({mod} = CP / 10); {{user}}'s OWN action is judged by the situation (omit the roll or set {difficulty} narratively); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|동료에게 돌파를 맡긴다|상황|\"맡길게\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{성공|로빈|합동|d50+4 vs 25|\"같이 가자!\"}{{/if}}\n[2|로빈|적 측면을 친다|CP|d50+6 vs 30|\"측면을 노려\"]\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=3}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|{{HPtag}}|{{MPtag}}|EXP:B/C|CP:D]\n[{{char}}|LvF|{{HPtag}}|{{MPtag}}|EXP:G/H|CP:]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[엘리스|Lv2|경상|부족|EXP:40/120|CP:44]\n[로건|Lv4|경상|부족|EXP:40/160|CP:65]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|로건 건틀릿 장착으로 무게 증가 STR 10→8, 엘리스는 자리를 비움]\n</Status>\n##Guide Line\n- HPtag, MPtag, CP, EXE only\n- HPtag: Healthy, Minor, Major, Critical, Near Death\n- MPtag: Full, Partial, Low, Unstable, Empty\n- CP guide: Influenced by equipment.\n  1–10 Weak / 11–20 Below Avg / 21–40 Avg / 41–60 Skilled / 61–100 Expert / 100+ Case-by-case\n- EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n- On max EXP: Lv+1, gain 2CP\n- Quest:  Quest Names/Reward: Details/info\n\n{{#if {{? {{getglobalvar::toggle_diceon}}=1}}}}\n## Dice modifier\nStat damage Modifier: char as `(CP Score) / 5`, rounded down.\n- Skills: each skill is written `스킬명(+보정값, 효과)` (e.g. 강타(+8, 방어 무시)). To use a skill, ADD its 보정값 to the action's main roll; the 효과 is a free narrative effect at your discretion. There is NO separate skill die.\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n##combat rule\n- \"1d50 + Level Modifier + Other Bonuses\" vs enemy 1d50.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d50:  {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\nenemy 1d50: {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}, {{roll::50}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d50] ± [CP Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d50].**\n{{/if}}\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of exactly 5 numbered options:\n[N|{{user}}|short concrete action|CP|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d50 + the CP modifier ({mod} = CP / 10); success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d50+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|정면으로 돌파한다|CP|d50+6 vs 30|\"돌파한다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|로건|보조|d50+5 vs 25|\"내가 받친다\"}{{/if}}\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_status_engine}}=4}}}}\n#Status Window\n-Show current status for {{user}} and all allies (exclude NPCs/monsters).\n-Output the following Format exactly, filled with current data. Place it at the end.\n##Format\n<Status>\n[Date|YYYY-MM-DD|Time: HH|Loc: LOCATION]\n[{{user}}|LvA|B/C|D/E|EXP:F/G|DICE:+H]\n[{{char}}|LvF|{I/J|K/L|EXP:M/N|DICE:+O]\n[{{char}}|...]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|이름|등급|HP 현재/최대|스킬(현재/최대{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +N{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff X{{/if}}]{{/if}}\n[item|Currency:S|item1, item2, item3,...]\n[Quest|quset1, quest2,...]\n[etc|Any lines not matching the above format go here]\n</Status>\n###Format Example\n<Status>\n[Date|2025-05-16|Time: 18|Loc: LOCATION]\n[엘리스|Lv2|5/10|8/10|EXP:40/120|DICE:+1]\n[로건|Lv4|8/10|5/10|EXP:40/160|DICE:+3]\n{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}[Enemy|오크|hard|HP 8/10|스킬(2/3{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}, +10{{/if}}){{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}|diff +10{{/if}}]{{/if}}\n[item|Currency:30|마법석, HP포션x3]\n[Quest|고블린 퇴치(진행중)/보상 100G, 경험치 50/남은 고블린 수 1/4마리]\n[etc|엘리스: 투지 상승 DICE+1, 로건:자리비움]\n</Status>\n##Guide Line\n- HP: MAX \"10\". HP-1 Hit on enemy attack.\n- MP: MAX \"10\". MP-1 on +3dice skill. MP-2 on +5dice skill. MP-3 on +10dice skill.\n- EXP: Gained from combat, quests, and stat use. No XP from trivial acts.\n- On max EXP: Lv+1, gain +1dice.\n- item: Equipment Items format \"item name(+X Dice)\" e.g:장검(+1dice)\n- Quest:  Quest Names/Reward: Details/info\n- DICE: 'Dice:+H' obtained in <status> are 'level gain only' dice.\n##combat rule\n- \"1d100 + Level Modifier + Other Bonuses\" vs enemy 1d100.\n- Weapons with sequential usage roll multiple dice:\nDepending on their traits, use 2d100, 3d100, etc.\nFor weapons exceeding 5d100, recycle the rolled values for calculation. Example: If the rolled results are 12, 34, 45, 56, 60, then a 10d100 sequential weapon is interpreted as: (12, 34, 45, 56, 60, 12, 34, 45, 56, 60).\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\na strong enemy1d200: {{roll::200}}, {{roll::200}}, {{roll::200}}, {{roll::200}}, {{roll::200}}\n##log\nbetween paragraphs for Format:\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ± [Level Modifier] ± [Other Bonuses] = [Total] vs Enemy name [1d100].**\n\n{{#if {{? {{getglobalvar::toggle_choice_on}}=1}}}}\n## Player Choices (⚖️)\nAt a decision point, end your reply with ONE <party_choice> block of exactly 5 numbered options:\n[N|{{user}}|short concrete action|the relevant DICE/equipment stat|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"a short in-character line the player would say\"]\n{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}- Roll 1d100 + the actor's DICE modifier from the status; success = roll+mod >= {difficulty}. Scale {difficulty} to how hard the action is.\n{{/if}}{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}- A party member MAY react when it fits their personality (NOT every option). Append after the option: {condition|member|reaction|{{#if {{? {{getglobalvar::toggle_choice_dice}}=1}}}}d100+{mod} vs {difficulty}|{{/if}}\"the member's short line\"} — condition = 성공/실패, reaction = 보조/저지/합동. Keeps the party active.{{/if}}\nExample:\n<party_choice>\n[1|{{user}}|장검으로 베어낸다|DICE|d100+3 vs 50|\"벤다\"]{{#if {{? {{getglobalvar::toggle_choice_partyreact}}=1}}}}{실패|엘리스|보조|d100+1 vs 45|\"막아줄게!\"}{{/if}}\n</party_choice>\n{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_diceon}}=2}}}}\n##status guide line\n-In the info field of equipment and combat-related items, specify the DICE bonus modifier. Characters roll 1d100 for AC (Accuracy Check), and equipment/items should provide gradual bonus increases through modifiers.\nThe bonus modifier should either be:\nAppended directly to the item name, or Indicated according to the specified format guideline.\nBonus value guideline: Items with high accuracy receive a bonus of +5 to +20. Other gear should receive a bonus of +1 to +5.\nBonus modifiers apply per item. Ensure that the total combined bonus across all equipment does not exceed a 50% increase (though exceeding it is allowed if unavoidable).\n\n##dice rule\n- combat: \"1d100 + Other Modifier\" vs enemy 1d100.\n- SkillCheck: \"1d100 + Other Modifier\" vs AC 1d100.\n- Weapons with sequential usage roll multiple dice:\nDepending on their traits, use 2d100, 3d100, etc.\nFor weapons exceeding 5d100, recycle the rolled values for calculation. Example: If the rolled results are 12, 34, 45, 56, 60, then a 10d100 sequential weapon is interpreted as: (12, 34, 45, 56, 60, 12, 34, 45, 56, 60).\n\n### Player Roll Request Situations\n- Combat: attack rolls, use combat item, magic, saving throws, death saving throws.\n\n### Pre-rolled Values\n-This is the value of rolling the dice. Use it in order:\nchar 1d100:  {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\nenemy 1d100: {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}, {{roll::100}}\n\n###info format\n-When you do not have the specified instructions to enter the Other Modifier. Output the following Format exactly, filled with current data. Place it at the end.\n<status>{{user}}: weapon +Xac, ..., {char} weapon +Xac,...</status>\n\n##log\nbetween paragraphs for Format:\n{{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n- **Format:** `- System Message: **<Char>'s [Action]: [Roll d100] ±[Other Modifier] = [Total] vs Enemy name [1d100].**\n{{/if}}{{#if {{? {{getglobalvar::toggle_partymessage}}=0}}}}\n- Game Log: <Char>'s [Action]: [Roll d100] ± [Other Modifier] = [Total] vs Enemy name [1d100].\n{{/if}}{{/if}}\n{{/if}}{{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n### System Message\n- Insert system messages between paragraphs.\n- **Format:** `- System Message: **<content>**`\n- Show key updates for {{char}}:\n  - Skill/item usage\n  - combat and kill enemy\n  - Changes in HP, MP tags\n  - EXP gain and level-ups\n  - Item/loot obtained\n  - Quest progress\n  - Stat or currency changes\n- When {{char}}’s value (e.g. HP, EXP, Cash) changes:\n  - Show change amount or tag\n  - Then show total: (old → new)\n{{/if}}{{#if {{? {{getglobalvar::toggle_enemystatus}}=1}}}}\n##Enemy\n- 등급(tier): easy / hard / extreme — 현재 파티 기준 체감 난이도.\n- HP: 정수 현재/최대. 스킬: 사용 가능 현재/최대 횟수.\n{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}- +N: 적이 스킬 사용 시 굴리는 주사위에 더하는 보너스.\n- diff(X): 이 적에 대한 판정 보정값. -20/-10/0/+5/+10/+20 중 하나(기본 0). 낮을수록 플레이어에게 유리. +20은 거의 불가능한 강적에만.{{/if}}{{/if}}",
   "mode": "normal",
   "insertorder": 999,
   "alwaysActive": false,
   "secondkey": "",
   "selective": false,
   "useRegex": false,
   "bookVersion": 2
  },
  {
   "key": "",
   "comment": "Credit",
   "content": "\n⚖️ Choice system inspired by 'Choice Module: Capsule Extension' (arca.live/b/characterai, CC BY-NC-SA 4.0). Reimplemented from scratch; original code not used.\n\nCC BY-NC-SA 4.0 국제 라이선스 적용\n이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.\n이 저작물은 아카라이브 커뮤니티 - AI 채팅 채널을 위해 공개되었으며, AI 채팅 채널 외 타 사이트에서 공유, 배포, 재배포가 불가능 합니다.\n상업적 용도의 경우 어떠한 이유로도 이용할 수 없습니다.\n리믹스, 변형, 2차적 저작물을 작성하고 그 결과물을 공유할 경우에는 원 저작물과 동일한 조건의 CCL을 적용하여야 합니다.",
   "mode": "normal",
   "insertorder": 0,
   "alwaysActive": false,
   "secondkey": "",
   "selective": false,
   "useRegex": false,
   "bookVersion": 2
  }
 ],
 "regex": [
  {
   "comment": "Date/Time/Location 스크립트 ",
   "in": "^\\[Date\\|([^\\|]*)\\|Time:\\s*([^\\|]*)\\|Loc:\\s*([^\\|\\]]*)(?:\\|.*)?\\]",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap');\n  .header {\n    display: flex;\n    justify-content: space-between;\n    border-radius: 8px 8px 0 0;\n    padding: 12px 20px;\n    max-width: 800px; \n    background: linear-gradient(to right, #1D2025, #2A3040);\n    color: #D8D7EE;\n    font-family: 'Noto Sans KR', sans-serif;\n    font-weight: 500;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);\n    border-top: 1px solid #4A5568;\n    border-left: 1px solid #4A5568;\n    border-right: 1px solid #4A5568;\n    border-bottom: 2px solid #4A5568;\n  }\n  .date-time {\n    display: flex;\n    align-items: center;\n  }\n  .date-time:before {\n    content: \"🗓️\";\n    margin-right: 8px;\n    font-size: 1.1em;\n  }\n  .location {\n    display: flex;\n    align-items: center;\n  }\n  .location:before {\n    content: \"🗺️장소: \";\n    margin-right: 8px;\n    font-size: 1.1em;\n  }\n</style>\n  <div class=\"header\">\n<div class=\"date-time\">$1 🕦$2</div>\n<div class=\"location\">$3</div>\n  </div>\n</div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "mg<order 20>"
  },
  {
   "comment": "Char 스크립트",
   "in": "^\\[([^|\\]]+)\\|Lv([^\\|]+)\\|([^|\\]]*)\\|([^|\\]]*)\\|EXP:([^\\|\\/]+)\\/([^\\|]+)\\|STR:([^|]+)\\|DEX:([^|]+)\\|CON:([^|]+)\\|INT:([^|]+)\\|WIS:([^|]+)\\|CHA:(.+)\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700&display=swap');\n.status-box{padding:15px 18px 17px;background:linear-gradient(180deg,#2E3740,#272E36);color:#D8D7EE;max-width:800px;margin-bottom:0;position:relative;border-left:1px solid #4A5568;border-right:1px solid #4A5568;font-family:'Noto Sans KR',sans-serif;}\n.char-header{display:flex;justify-content:space-between;align-items:center;font-size:16px;font-weight:600;margin-bottom:12px;padding-bottom:8px;position:relative;}\n.char-header::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:1px;background:linear-gradient(to right,transparent,#3f4d6e,transparent);}\n.char-header span:first-child{display:flex;align-items:center;color:#f2f4f7;letter-spacing:.2px;}\n.char-header span:last-child{display:flex;gap:14px;font-size:14px;}\n.char-header .hp-value{color:#FF6B6B;font-weight:600;}\n.char-header .mp-value{color:#6B9CFF;font-weight:600;}\n.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;font-size:.95em;margin-bottom:14px;padding:10px 14px;background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.05);border-radius:6px;}\n.stat-item{display:flex;gap:8px;align-items:baseline;justify-content:flex-start;}\n.stat-name{color:#8d97a6;font-size:11px;letter-spacing:1px;}\n.stat-value{color:#e6e9ee;font-weight:600;}\n.exp-container{position:relative;background:rgba(255,255,255,.06);height:15px;border-radius:999px;overflow:hidden;border:1px solid rgba(255,255,255,.06);}\n.exp-bar{background:linear-gradient(90deg,#2E7D6B,#5FE3C0);height:100%;border-radius:999px;box-shadow:0 0 8px rgba(95,227,192,.45);transition:width .5s ease-in-out;}\n.exp-text{position:absolute;top:0;left:50%;transform:translateX(-50%);color:#dce0e8;font-size:11px;line-height:15px;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.7);}\n</style>\n<div class=\"rpg-container\">\n  <div class=\"status-box\">\n    <div class=\"char-header\">\n      <span>$1 (Lv$2)</span>\n      <span><span class=\"hp-value\">HP: $3</span> <span class=\"mp-value\">MP: $4</span></span>\n    </div>\n    <div class=\"stats\">\n      <div class=\"stat-item\"><span class=\"stat-name\">STR</span><span class=\"stat-value\">$7</span></div>\n      <div class=\"stat-item\"><span class=\"stat-name\">DEX</span><span class=\"stat-value\">$8</span></div>\n      <div class=\"stat-item\"><span class=\"stat-name\">CON</span><span class=\"stat-value\">$9</span></div>\n      <div class=\"stat-item\"><span class=\"stat-name\">INT</span><span class=\"stat-value\">$10</span></div>\n      <div class=\"stat-item\"><span class=\"stat-name\">WIS</span><span class=\"stat-value\">$11</span></div>\n      <div class=\"stat-item\"><span class=\"stat-name\">CHA</span><span class=\"stat-value\">$12</span></div>\n    </div>\n    <div class=\"exp-container\">\n      <div class=\"exp-bar\" style=\"width: calc(($5 / $6) * 100%);\"></div>\n      <div class=\"exp-text\">EXP $5/$6</div>\n    </div>\n  </div>\n</div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "m<order 21>g"
  },
  {
   "comment": "파티원만",
   "in": "^\\[([^|\\]]+)\\|Lv([^\\|]+)\\|([^|\\]]+)\\|([^|\\]]+)\\|EXP:([^\\/\\|]+)\\/([^\\|]+)\\|CP:([^\\]]+)\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700&display=swap');\n.status-box{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:linear-gradient(180deg,#2E3740,#272E36);color:#D8D7EE;max-width:800px;margin-bottom:0;position:relative;border-left:1px solid #4A5568;border-right:1px solid #4A5568;font-family:'Noto Sans KR',sans-serif;}\n.status-box>span:first-child{font-size:15px;font-weight:600;color:#f2f4f7;}\n.info-group{display:flex;align-items:center;gap:14px;font-size:14px;}\n.hp-value{color:#FF6B6B;font-weight:600;}\n.mp-value{color:#6B9CFF;font-weight:600;}\n.cp-value{color:#FFD700;font-weight:600;}\n.exp-container{position:relative;display:flex;align-items:center;background:rgba(255,255,255,.06);height:14px;width:200px;border-radius:999px;overflow:hidden;border:1px solid rgba(255,255,255,.06);}\n.exp-bar{background:linear-gradient(90deg,#2E7D6B,#5FE3C0);height:100%;border-radius:999px;box-shadow:0 0 8px rgba(95,227,192,.45);transition:width .5s ease-in-out;}\n.exp-text{position:absolute;left:50%;transform:translateX(-50%);font-size:11px;line-height:14px;white-space:nowrap;color:#dce0e8;text-shadow:0 1px 2px rgba(0,0,0,.7);}\n</style>\n<div class=\"rpg-container\">\n  <div class=\"status-box\">\n      <span>$1 (Lv$2)</span>\n      <span class=\"info-group\">\n        <span class=\"exp-container\">\n          <span class=\"exp-bar\" style=\"width: calc(($5 / $6) * 100%);\"></span>\n          <span class=\"exp-text\">EXP $5/$6</span>\n        </span>\n        <span class=\"hp-value\">HP: $3</span>\n        <span class=\"mp-value\">MP: $4</span>\n        <span class=\"cp-value\">CP: $7</span>\n      </span>\n    </div>\n  </div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm<order 22>"
  },
  {
   "comment": "다이스 전",
   "in": "^\\[([^|\\]]+)\\|Lv([^\\|]+)\\|([^|\\]]+)\\|([^|\\]]+)\\|EXP:([^\\/\\|]+)\\/([^\\|]+)\\|DICE:([^\\]]+)\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700&display=swap');\n.status-box{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:linear-gradient(180deg,#2E3740,#272E36);color:#D8D7EE;max-width:800px;margin-bottom:0;position:relative;border-left:1px solid #4A5568;border-right:1px solid #4A5568;font-family:'Noto Sans KR',sans-serif;}\n.status-box>span:first-child{font-size:15px;font-weight:600;color:#f2f4f7;}\n.info-group{display:flex;align-items:center;gap:14px;font-size:14px;}\n.hp-value{color:#FF6B6B;font-weight:600;}\n.mp-value{color:#6B9CFF;font-weight:600;}\n.cp-value{color:#FFD700;font-weight:600;}\n.exp-container{position:relative;display:flex;align-items:center;background:rgba(255,255,255,.06);height:14px;width:200px;border-radius:999px;overflow:hidden;border:1px solid rgba(255,255,255,.06);}\n.exp-bar{background:linear-gradient(90deg,#2E7D6B,#5FE3C0);height:100%;border-radius:999px;box-shadow:0 0 8px rgba(95,227,192,.45);transition:width .5s ease-in-out;}\n.exp-text{position:absolute;left:50%;transform:translateX(-50%);font-size:11px;line-height:14px;white-space:nowrap;color:#dce0e8;text-shadow:0 1px 2px rgba(0,0,0,.7);}\n</style>\n<div class=\"rpg-container\">\n  <div class=\"status-box\">\n      <span>$1 (Lv$2)</span>\n      <span class=\"info-group\">\n        <span class=\"exp-container\">\n          <span class=\"exp-bar\" style=\"width: calc(($5 / $6) * 100%);\"></span>\n          <span class=\"exp-text\">EXP $5/$6</span>\n        </span>\n        <span class=\"hp-value\">HP: $3</span>\n        <span class=\"mp-value\">MP: $4</span>\n        <span class=\"cp-value\">DC: $7</span>\n      </span>\n    </div>\n  </div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm<order 22>"
  },
  {
   "comment": "Item 스크립트",
   "in": "^\\[item\\|Currency:([^\\|]+)\\|(.+)\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap');\n  .inventory-title {\n    cursor: pointer;\n    background: linear-gradient(to right, #1D2025, #2A3040);\n    color: #D8D7EE;\n    padding: 12px 20px;\n    font-weight: 600;\n    max-width: 800px; \n    margin: 0;\n    border: 1px solid #4A5568;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n  }\n  .currency-badge {\n    font-size: 1.0em;\n    font-weight: 500;\n    color: #D8D7EE;\n  }\n  .currency-badge:before {\n    content: \" 🪙\";\n    margin-right: 7.5px;\n    font-size: 1.1em;\n  }\n  .inventory-title:after {\n    content: \"▼\";\n    font-size: 0.8em;\n    transition: transform 0.3s;\n  }\n  .inventory-title.closed:after {\n    transform: rotate(-90deg);\n  }\n  .inventory-content {\n    width: 100%;\n    max-width: 800px; \n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    padding: 16px;\n    background: linear-gradient(to right, #2E3740, #272E36);\n    border-left: 1px solid #4A5568;\n    border-right: 1px solid #4A5568;\n  }\n  .item {\n    display: inline-flex;\n    padding: 6px 12px;\n    color: #D8D7EE;\n    font-weight: 330;\n    font-size: 0.8em;\n    white-space: normal;\n    word-break: keep-all;\n    max-width: 100%;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n    align-items: flex-start;\n  }\n.left-block {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n</style>\n<details>\n  <summary class=\"inventory-title\">\n    <span class=\"left-block\">아이템<span class=\"currency-badge\">$1</span>\n    </span>\n  </summary>\n  <div class=\"inventory-content\">\n    <span class=\"item\">$2</span>\n  </div>\n</details>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "m<order 24>g"
  },
  {
   "comment": "Quest 스크립트",
   "in": "^\\[Quest\\|([\\s\\S]+?)\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap');\n  .quest-title {\n    cursor: pointer;\n    background: linear-gradient(to right, #1D2025, #2A3040);\n    color: #D8D7EE;\n    padding: 12px 20px;\n    max-width: 800px; \n    font-weight: 600;\n    margin: 0;\n    border-left: 1px solid #4A5568;\n    border-right: 1px solid #4A5568;\n    border-bottom: 1px solid #4A5568;\n    border-radius: 0 0 8px 8px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n  }\n  .quest-title:after {\n    content: \"▼\";\n    font-size: 0.8em;\n    transition: transform 0.3s;\n  }\n  .quest-title.closed:after {\n    transform: rotate(-90deg);\n  }\n  .quest-content {\n    width: 100%;\n    max-width: 800px; \n    margin-top: -5.2px;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    padding: 16px;\n    background: linear-gradient(to right, #2E3740, #272E36);\n    border-left: 1px solid #4A5568;\n    border-right: 1px solid #4A5568;\n    border-bottom: 1px solid #4A5568;\n    border-radius: 0 0 8px 8px;\n  }\n  .quest {\n    display: inline-flex;\n    padding: 6px 12px;\n    color: #D8D7EE;\n    font-weight: 330;\n    font-size: 0.8em;\n    white-space: normal;\n    word-break: keep-all;\n    max-width: 100%;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n    align-items: flex-start;\n  }\n  }\n</style>\n<details>\n  <summary class=\"quest-title\">Quest</summary>\n  <div class=\"quest-content\">\n      <span class=\"quest\">$1</span>\n  </div>\n</details>\n{{/if}}\n",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "m<order 25>g"
  },
  {
   "comment": "메세지창",
   "in": "^-\\s*(?:System\\s*Message|시스템\\s*메시지)\\s*:\\s*(?:\\*\\*(.*?)\\*\\*|(.+?))\\s*$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-15}}}}}}\n  {{#if {{? {{getglobalvar::toggle_partymessage}}=1}}}}\n\n<style>\n.regex-game-system-alert-wrapper {\n  display: block;\n  width: 100%;\n  padding: 0;\n  box-sizing: border-box;\n  text-align: center;\n  margin: 1em 0;\n}\n\n@keyframes regex-game-alert-slide-in {\n  from { opacity: 0; transform: translateX(-20px); }\n  to   { opacity: 1; transform: translateX(0); }\n}\n\n.regex-game-system-alert-wrapper .game-alert-content {\n  position: relative;\n  display: inline-block;\n  max-width: 100%;\n  padding: 8px 60px;\n  margin: 0;\n  background: linear-gradient(180deg, #1D2025 0%, #2A3040 100%);\n  border-width: 3.2px 0;\n  border-style: solid;\n  border-color: #4A5568;\n  font: bold <<PCFont>>px 'Cinzel', serif;\n  text-transform: uppercase;\n  letter-spacing: 2px;\n  color: #D8D7EE;\n  text-shadow: 0 1px 0 rgba(0,0,0,0.5);\n  animation: regex-game-alert-slide-in 0.4s ease-out forwards;\n  -webkit-mask-image: linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%);\n  mask-image: linear-gradient(to right, transparent 0%, black 10%, black 95%, transparent 100%);\n}\n\n@media (max-width: 600px) {\n  .regex-game-system-alert-wrapper .game-alert-content {\n    padding: 6px 40px;\n    font-size: <<MobileFont>>px;\n  }\n}\n</style>\n\n<div class=\"regex-game-system-alert-wrapper\">\n  <div class=\"game-alert-content\">\n    <span>$1$2</span>\n  </div>\n</div>\n  {{/if}}\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm"
  },
  {
   "comment": "메세지창 PC",
   "in": "<<PCFont>>",
   "out": "16",
   "type": "editdisplay",
   "ableFlag": false
  },
  {
   "comment": "메세지창 모바일",
   "in": "<<MobileFont>>",
   "out": "15",
   "type": "editdisplay",
   "ableFlag": false
  },
  {
   "comment": "강제 상단 올리기",
   "in": "<Status>(.*?)</Status>",
   "out": "$1\n",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gsm<move_top>"
  },
  {
   "comment": "꺼져라 사탄아!",
   "in": "^\\[etc\\|([\\s\\S]*)\\]$",
   "out": "",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm"
  },
  {
   "comment": "삭제",
   "in": "<Status>(.*?)</Status>",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-5}}}}}}\\n$&\\n{{/if}}",
   "type": "editprocess",
   "ableFlag": false
  },
  {
   "comment": "Enemy 스크립트",
   "in": "^\\[Enemy\\|([^|\\]]+)\\|(easy|hard|extreme)\\|HP\\s*(\\d+)\\s*\\/\\s*(\\d+)\\|스킬\\((\\d+\\s*\\/\\s*\\d+)(?:,\\s*(\\+\\d+))?\\)(?:\\|diff\\s*([+-]?\\d+))?\\]$",
   "out": "{{#if {{greater_equal::{{chat_index}}::{{? {{lastmessageid}}-3}}}}}}\n<style>\n.enemy-row{display:flex;align-items:center;gap:10px;padding:10px 16px;background:linear-gradient(180deg,#2E3740,#272E36);color:#D8D7EE;max-width:800px;margin-bottom:0;position:relative;border-left:1px solid #4A5568;border-right:1px solid #4A5568;font-family:'Noto Sans KR',sans-serif;font-size:13px;box-sizing:border-box;}\n.enemy-row .edot{width:9px;height:9px;border-radius:50%;flex:none;}\n.enemy-row[data-tier=\"easy\"] .edot{background:#5a9c85;}\n.enemy-row[data-tier=\"hard\"] .edot{background:#e0b13a;}\n.enemy-row[data-tier=\"extreme\"] .edot{background:#e05a4f;}\n.enemy-row .enm{font-weight:600;min-width:62px;}\n.enemy-row .ehpbar{position:relative;flex:none;width:104px;height:12px;border-radius:3px;background:rgba(255,255,255,.06);overflow:hidden;}\n.enemy-row .ehpbar .efill{position:absolute;left:0;top:0;height:100%;width:calc(var(--cur)/var(--max)*100%);background:linear-gradient(90deg,#c0463f,#ff7a72);}\n.enemy-row .ehptx{font-size:11px;color:#FF6B6B;font-weight:600;min-width:38px;}\n.enemy-row .esk{font-size:12px;color:#aeb6c2;}\n.enemy-row .esk .skb{color:#5fe3c0;font-weight:600;}\n.enemy-row .esk .skb:empty{display:none;}\n.enemy-row .edf{margin-left:auto;font-size:12px;font-weight:600;padding:3px 9px;border-radius:6px;}\n.enemy-row .edf:empty{display:none;}\n.enemy-row .edf[data-d=\"0\"]{color:#9aa6b5;background:rgba(255,255,255,.06);}\n.enemy-row .edf[data-d=\"-10\"],.enemy-row .edf[data-d=\"-20\"]{color:#7fd6b0;background:rgba(95,227,192,.12);}\n.enemy-row .edf[data-d=\"+5\"],.enemy-row .edf[data-d=\"+10\"]{color:#e8b357;background:rgba(224,177,58,.14);}\n.enemy-row .edf[data-d=\"+20\"]{color:#ff8077;background:rgba(224,90,79,.18);box-shadow:0 0 9px rgba(224,90,79,.5);}\n</style>\n<div class=\"rpg-container\">\n  <div class=\"enemy-row\" data-tier=\"$2\" style=\"--cur:$3;--max:$4;\">\n    <span class=\"edot\"></span><span class=\"enm\">$1</span><span class=\"ehpbar\"><span class=\"efill\"></span></span><span class=\"ehptx\">$3/$4</span><span class=\"esk\">스킬 $5 <b class=\"skb\">$6</b></span><span class=\"edf\" data-d=\"$7\">$7</span>\n  </div>\n</div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm<order 23>"
  },
  {
   "comment": "⚖️ 선택지 버튼",
   "in": "\\[(\\d+)\\|([^|]+)\\|([^|]+)\\|([^|]+)\\|(?:([^|\\]]+)\\|)?\"([^\"]*)\"\\](?:\\{[^}]*\\})?",
   "out": "{{#if {{greater_equal::{{chat_index}}::0}}}}\n<style>\n.ps-choice{display:block;width:100%;box-sizing:border-box;margin:-1px 0 0;padding:10px 13px 11px;background:linear-gradient(180deg,#2E3740,#262d35);color:#D8D7EE;max-width:800px;border:1px solid #4A5568;border-left:3px solid #5fe3c0;font-family:'Noto Sans KR',sans-serif;cursor:pointer;transition:box-shadow .18s;}\n.ps-choice:hover{box-shadow:inset 0 0 18px rgba(95,227,192,.12);}\n.ps-choice .pc-top{display:flex;align-items:center;gap:9px;}\n.ps-choice .pc-num{flex:none;width:21px;height:21px;border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;font-size:11px;font-weight:700;color:#5fe3c0;background:rgba(95,227,192,.12);border:1px solid rgba(95,227,192,.28);}\n.ps-choice .pc-num .pc-n{display:block;transform:translateY(-0.5px);}\n.ps-choice .pc-act{flex:1;font-weight:600;color:#f2f4f7;font-size:14px;line-height:1.4;}\n.ps-choice .pc-bot{display:flex;align-items:center;gap:8px;margin-top:8px;padding-left:30px;}\n.ps-choice .pc-stat{font-size:11px;font-weight:600;color:#a7ecd9;background:rgba(95,227,192,.1);border:1px solid rgba(95,227,192,.22);padding:2px 8px;border-radius:6px;white-space:nowrap;}\n.ps-choice .pc-stat[data-s=\"CP\"],.ps-choice .pc-stat[data-s=\"DICE\"]{display:none;}\n.ps-choice .pc-roll{margin-left:auto;font-size:11px;color:#5fe3c0;white-space:nowrap;font-variant-numeric:tabular-nums;}\n.ps-choice .pc-roll:empty{display:none;}\n.ps-choice .pc-roll:not(:empty)::before{content:\"🎲 \";}\n</style>\n<div class=\"rpg-container\">\n  <div class=\"ps-choice\" risu-btn=\"pchoice_{{chat_index}}_$1\">\n    <div class=\"pc-top\"><span class=\"pc-num\"><span class=\"pc-n\">$1</span></span><span class=\"pc-act\">$3</span></div>\n    <div class=\"pc-bot\"><span class=\"pc-stat\" data-s=\"$4\">$4</span><span class=\"pc-roll\">$5</span></div>\n  </div>\n</div>\n{{/if}}",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm<order 26>"
  },
  {
   "comment": "⚖️ 선택지 리퀘제거",
   "in": "\\[(\\d+)\\|([^|]+)\\|([^|]+)\\|([^|]+)\\|(?:([^|\\]]+)\\|)?\"([^\"]*)\"\\](?:\\{[^}]*\\})?",
   "out": "",
   "type": "editprocess",
   "ableFlag": true,
   "flag": "g<order 27>"
  },
  {
   "comment": "⚖️ 선택지 래퍼",
   "in": "</?party_choice>[ \\t]*\\n?",
   "out": "",
   "type": "editdisplay",
   "ableFlag": false
  },
  {
   "comment": "⚖️ 선택지 아래로",
   "in": "<party_choice>(.*?)</party_choice>",
   "out": "$1",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm<move_bottom>s"
  },
  {
   "comment": "주사위 성공",
   "in": "^🎲 (.+?): (d\\d+ \\d+[-+]?\\d*) = (\\d+) vs (\\d+) → 성공$",
   "out": "<span style=\"display:flex;align-items:center;gap:7px;margin:5px 0 0;padding:7px 12px;background:linear-gradient(180deg,#2E3740,#262d35);border:1px solid #3a4452;border-left:3px solid #5fe3c0;border-radius:7px;color:#D8D7EE;font:500 13px 'Noto Sans KR',sans-serif;\">🎲 <b style=\"color:#a7ecd9;\">$1</b><span style=\"color:#7e8a98;font-size:11px;\">$2</span>= <b style=\"color:#f2f4f7;\">$3</b><span style=\"color:#7e8a98;\">vs $4</span><b style=\"margin-left:auto;color:#5fe3c0;\">성공</b></span>",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm"
  },
  {
   "comment": "주사위 실패",
   "in": "^🎲 (.+?): (d\\d+ \\d+[-+]?\\d*) = (\\d+) vs (\\d+) → 실패$",
   "out": "<span style=\"display:flex;align-items:center;gap:7px;margin:5px 0 0;padding:7px 12px;background:linear-gradient(180deg,#2E3740,#262d35);border:1px solid #3a4452;border-left:3px solid #e0655a;border-radius:7px;color:#D8D7EE;font:500 13px 'Noto Sans KR',sans-serif;\">🎲 <b style=\"color:#a7ecd9;\">$1</b><span style=\"color:#7e8a98;font-size:11px;\">$2</span>= <b style=\"color:#f2f4f7;\">$3</b><span style=\"color:#7e8a98;\">vs $4</span><b style=\"margin-left:auto;color:#ff8077;\">실패</b></span>",
   "type": "editdisplay",
   "ableFlag": true,
   "flag": "gm"
  },
  {
   "comment": "파티반응",
   "in": "^→ (.+?) (보조|저지|합동)$",
   "out": "<span style=\"display:block;margin:5px 0 0;padding:2px 12px;color:#8d97a6;font:500 12px 'Noto Sans KR',sans-serif;\">↳ <b style=\"color:#cdd3dc;\">$1</b> <span style=\"color:#5fe3c0;\">$2</span></span>",
   "type": "editdisplay",
   "ableFlag": false
  },
  {
   "comment": "대사",
   "in": "^([^:\\n]+): \"([^\"]*)\"$",
   "out": "<span style=\"display:block;margin:2px 0 0;padding:2px 12px 2px 16px;font:400 13px 'Noto Sans KR',sans-serif;color:#b9c0ca;\"><b style=\"color:#a7ecd9;\">$1</b> <i>\"$2\"</i></span>",
   "type": "disabled",
   "ableFlag": true,
   "flag": "gm"
  }
 ],
 "trigger": [
  {
   "comment": "",
   "type": "start",
   "conditions": [],
   "effect": [
    {
     "type": "triggerlua",
     "code": "---------- 공용 ----------\nfunction cm_split(s, sep)\n  local t = {}\n  for x in (s .. sep):gmatch(\"(.-)\" .. sep) do t[#t + 1] = x end\n  return t\nend\n\nfunction cm_roll(spec)\n  if not spec then return nil end\n  local die = tonumber(spec:match(\"[dD](%d+)\"))\n  local mod = tonumber(spec:match(\"[dD]%d+([%+%-]%d+)\")) or 0\n  local diff = tonumber(spec:match(\"[vV][sS]%s*(%d+)\"))\n  if (not die) or (not diff) then return nil end\n  local roll = tonumber(cbs(\"{{roll::\" .. die .. \"}}\")) or 0\n  local total = roll + mod\n  return { die = die, roll = roll, mod = mod, total = total, diff = diff, success = (total >= diff) }\nend\n\nfunction cm_line(name, r)\n  local ms = \"\"\n  if r.mod > 0 then ms = \"+\" .. r.mod elseif r.mod < 0 then ms = tostring(r.mod) end\n  return string.format(\"🎲 %s: d%d %d%s = %d vs %d → %s\",\n    name, r.die, r.roll, ms, r.total, r.diff, (r.success and \"성공\" or \"실패\"))\nend\n\nfunction cm_parse(line)\n  local inner = line:match(\"^%[(.-)%]\")\n  if not inner then return nil end\n  local f = cm_split(inner, \"|\")\n  local o = { actor = f[2] or \"\", action = f[3] or \"\" }\n  if o.actor == \"{{user}}\" then o.actor = cbs(\"{{user}}\") end\n  for i = 4, #f do\n    local v = f[i]\n    if v:find(\"[vV][sS]\") and v:find(\"[dD]%d\") then o.spec = v\n    elseif v:match('^%s*\"') then o.line = v:match('\"(.-)\"') end\n  end\n  local pr = line:match(\"%]%s*(%b{})\")\n  if pr then\n    local pf = cm_split(pr:sub(2, -2), \"|\")\n    o.p = { cond = pf[1] or \"\", member = pf[2] or \"\", react = pf[3] or \"\" }\n    for i = 4, #pf do\n      local v = pf[i]\n      if v:find(\"[vV][sS]\") and v:find(\"[dD]%d\") then o.p.spec = v\n      elseif v:match('^%s*\"') then o.p.line = v:match('\"(.-)\"') end\n    end\n  end\n  return o\nend\n\nfunction processChoiceClick(t, c)\n  local ci, n = c:match(\"^pchoice_(%d+)_(%d+)$\")\n  if not ci then return end\n  ci = tonumber(ci)\n  local msg = getChat(t, ci)\n  if (not msg) or (not msg.data) then return end\n\n  local target\n  for ln in msg.data:gmatch(\"[^\\n]+\") do\n    if ln:match(\"^%[(%d+)|\") == n then target = ln; break end\n  end\n  if not target then return end\n\n  local o = cm_parse(target)\n  if not o then return end\n\n  local diceOn = (getGlobalVar(t, \"toggle_choice_dice\") or \"0\") == \"1\"\n  local out = { o.action }\n  local userR\n  if diceOn and o.spec then\n    userR = cm_roll(o.spec)\n    if userR then out[#out + 1] = cm_line(o.actor, userR) end\n  end\n  if o.line and o.line ~= \"\" then out[#out + 1] = string.format('%s: \"%s\"', o.actor, o.line) end\n\n  if o.p and o.p.member ~= \"\" then\n    local matched = true\n    if userR then\n      matched = (o.p.cond:find(\"성공\") and userR.success) or (o.p.cond:find(\"실패\") and not userR.success)\n    end\n    if matched then\n      out[#out + 1] = string.format(\"→ %s %s\", o.p.member, o.p.react)\n      if diceOn and o.p.spec then\n        local pr = cm_roll(o.p.spec)\n        if pr then out[#out + 1] = cm_line(o.p.member, pr) end\n      end\n      if o.p.line and o.p.line ~= \"\" then out[#out + 1] = string.format('%s: \"%s\"', o.p.member, o.p.line) end\n    end\n  end\n\n  addChat(t, \"user\", table.concat(out, \"\\n\"))\n  reloadDisplay(t)\nend\n\nfunction onButtonClick(t, c)\n  if (not c) or (not c:find(\"^pchoice_\")) then return end\n  local ok, err = pcall(processChoiceClick, t, c)\n  if not ok then log(\"choice click error: \" .. tostring(err)) end\nend\n\n-- ---------- 서브모델: <Status> (+ <party_choice>) 생성 ----------\nfunction processSubmodelStatus(id)\n  if (getGlobalVar(id, \"toggle_submodel\") or \"0\") ~= \"1\" then return end\n  local len = getChatLength(id)\n  if len < 1 then return end\n  local last = getChat(id, len - 1)\n  if (not last) or last.role ~= \"char\" then return end\n  -- (a) 메인-실수 가드 삭제: 건너뛰지 않고 아래에서 제거 후 보조모델로 덮어씀   ← 변경\n\n  local lore = getLoreBooks(id, \"서브모델 포맷\")\n  local fmt = (lore and lore[1] and lore[1].content) or \"\"\n\n  local full = getFullChat(id)\n  local ctx = {}\n  for i = math.max(1, #full - 6), #full do\n    local m = full[i]\n    local d = (m.data or \"\"):gsub(\"<!%-%-.-%-%->\", \"\")                              -- (b) HTML주석만 제거   ← 변경\n    if i == #full then d = d:gsub(\"<Status>.-</Status>\", \"\"):gsub(\"<party_choice>.-</party_choice>\", \"\") end  -- (b) 현재 메시지 메인-실수 패널 제거   ← 변경\n    ctx[#ctx + 1] = ((m.role == \"user\") and \"User: \" or \"Char: \") .. d\n  end\n\n  local sys = \"You generate the status panel for this RPG by following this format spec EXACTLY:\\n\\n\"\n            .. fmt\n            .. \"\\n\\nOutput ONLY the <Status>...</Status> block\"\n            .. \" (AND, if the spec includes a Player Choices section and the scene is at a decision point, ALSO the <party_choice>...</party_choice> block).\"\n            .. \" No story, no commentary, and NO reasoning / <Thoughts> / <think> tags - only those blocks, reflecting the latest state.\"\n  local msgs = {\n    { role = \"system\", content = sys },\n    { role = \"user\",   content = \"Recent conversation:\\n\" .. table.concat(ctx, \"\\n\\n\") .. \"\\n\\nOutput the updated blocks now.\" },\n  }\n\n  local result\n  if _G.axLLM then result = axLLM(id, msgs) else result = LLM(id, msgs) end\n  if type(result) == \"userdata\" or (type(result) == \"table\" and result.await) then\n    result = result:await()\n  end\n  if not (result and result.success) then return end\n\n  local text = result.message\n  if not text or text == \"\" then text = result.result end\n  if not text or text == \"\" then return end\n  text = text:gsub(\"<[Tt]houghts>.-</[Tt]houghts>\", \"\"):gsub(\"<[Tt]hink>.-</[Tt]hink>\", \"\"):gsub(\"<thinking>.-</thinking>\", \"\")  -- <Thoughts> 제거(이전 배치)\n\n  local statusB = string.match(text, \"<Status>.-</Status>\")\n  local choiceB = string.match(text, \"<party_choice>.-</party_choice>\")\n  local parts = {}\n  if statusB then parts[#parts + 1] = statusB end\n  if choiceB then parts[#parts + 1] = choiceB end\n  if #parts == 0 then return end                                                    -- 안전장치: 빈 결과면 메인 걸 안 건드림\n\n  local len2 = getChatLength(id)\n  local last2 = getChat(id, len2 - 1)\n  if (not last2) or last2.role ~= \"char\" then return end\n  local base = (last2.data or \"\"):gsub(\"<Status>.-</Status>\", \"\"):gsub(\"<party_choice>.-</party_choice>\", \"\"):gsub(\"%s+$\", \"\")  -- (c) 메인-실수 패널 제거   ← 변경\n  setChat(id, len2 - 1, base .. \"\\n\\n\" .. table.concat(parts, \"\\n\\n\"))              -- (c) 보조모델 출력으로 덮어씀   ← 변경\nend\n\nonOutput = async(function(id)\n  local ok, err = pcall(processSubmodelStatus, id)\n  if not ok then log(\"submodel status error: \" .. tostring(err)) end\nend)"
    }
   ],
   "lowLevelAccess": true
  }
 ],
 "lowLevelAccess": true,
 "customModuleToggle": "=🎖️파티상태창=group\nstatus_engine=🎖️파티상태창=select=비활성,메인,동료Only,CP,Dice\nsubmodel=🤖보조모델\ndiceon=🎲다이스 오버홀=select=비활성,활성화,활성화+\n=비활성화는 상태창에 주사위 값이 포함되지 않습니다.=caption\n=활성화+는 주사위 보정값에 장비등 스탯 외의 외적인 요소가 포함됍니다.=caption\n=활성화 시  모듈의 모든 옵션에 관여합니다.=caption\n=또한 주사위 굴림이 필요할 시에 자동으로 굴립니다.=caption\nenemystatus=👹적 상태창추가\npartymessage=🎖️메세지창 추가\nchoice_on=⚖️선택지\nchoice_dice=⚖️선택지 주사위\nchoice_partyreact=⚖️파티원반응\ntheme=🎨테마=select=클래식,페이퍼,제이드,상투스",
 "assets": [],
 "namespace": "파티상태",
 "backgroundEmbedding": "{{#if {{? {{getglobalvar::toggle_theme}}=1}}}}<style>.header,.inventory-title,.quest-title{background:linear-gradient(to right,#E6D8B8,#D8C49C)!important;color:#3E3526!important;border-color:#C9B68C!important}.status-box,.inventory-content,.quest-content{background:linear-gradient(180deg,#F3ECDA,#EAE0C6)!important;color:#3E3526!important;border-color:#C9B68C!important}.game-alert-content{background:linear-gradient(180deg,#E6D8B8 0%,#D8C49C 100%)!important;color:#3E3526!important;border-color:#C9B68C!important}.stats{background:rgba(150,125,80,0.14)!important;border-color:#B59E6E!important}.char-header>span:first-child,.status-box>span:first-child{color:#3E3526!important}.stat-name{color:#7C6B50!important}.stat-value,.item,.quest,.currency-badge,.exp-text{color:#3E3526!important}.char-header{border-bottom-color:#B59E6E!important}.char-header::after{background:linear-gradient(to right,transparent,#B8964E,transparent)!important}.exp-container{background:rgba(120,100,70,0.18)!important;border-color:#B59E6E!important}.exp-bar{background:linear-gradient(90deg,#A98B4E,#CBA24A)!important;box-shadow:0 0 8px rgba(203,162,74,0.40)!important}.hp-value{color:#B0473B!important}.mp-value{color:#3F6E9E!important}.cp-value{color:#B8860B!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=2}}}}<style>.header,.inventory-title,.quest-title{background:linear-gradient(to right,#0A1316,#0F2025)!important;color:#C8E8E3!important;border-color:#1E4640!important}.status-box,.inventory-content,.quest-content{background:linear-gradient(180deg,#0E1B1D,#0A1416)!important;color:#C8E8E3!important;border-color:#1E4640!important}.game-alert-content{background:linear-gradient(180deg,#0A1316 0%,#0F2025 100%)!important;color:#C8E8E3!important;border-color:#1E4640!important}.stats{background:rgba(18,52,48,0.40)!important;border-color:#2A5C54!important}.stat-name{color:#7FB3AC!important}.stat-value,.item,.quest,.currency-badge,.exp-text{color:#C8E8E3!important}.char-header{border-bottom-color:#2A5C54!important}.char-header::after{background:linear-gradient(to right,transparent,#2E7D6B,transparent)!important}.exp-container{background:rgba(40,90,84,0.22)!important;border-color:#2A5C54!important}.exp-bar{background:linear-gradient(90deg,#2E7D6B,#5FE3C0)!important;box-shadow:0 0 8px rgba(95,227,192,0.45)!important}.hp-value{color:#FF7B7B!important}.mp-value{color:#6BD0FF!important}.cp-value{color:#8FE3C0!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=3}}}}<style>.header,.inventory-title,.quest-title{background:linear-gradient(to right,#101013,#1B1B20)!important;color:#FAFAFA!important;border-color:#2E2E33!important}.status-box,.inventory-content,.quest-content{background:linear-gradient(180deg,#171719,#0F0F11)!important;color:#FAFAFA!important;border-color:#2E2E33!important}.game-alert-content{background:linear-gradient(180deg,#101013 0%,#1B1B20 100%)!important;color:#FAFAFA!important;border-color:#2E2E33!important}.stats{background:rgba(255,255,255,0.05)!important;border-color:#3C3C42!important}.stat-name{color:#A0A0A8!important}.stat-value,.item,.quest,.currency-badge,.exp-text{color:#FAFAFA!important}.char-header{border-bottom-color:#3C3C42!important}.char-header::after{background:linear-gradient(to right,transparent,#6A6A75,transparent)!important}.exp-container{background:rgba(255,255,255,0.07)!important;border-color:#3C3C42!important}.exp-bar{background:linear-gradient(90deg,#6A6A75,#D8D8E0)!important;box-shadow:0 0 8px rgba(216,216,224,0.35)!important}.hp-value{color:#E5484D!important}.mp-value{color:#8AB4F8!important}.cp-value{color:#E3C45F!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=1}}}}<style>.enemy-row{background:linear-gradient(180deg,#F3ECDA,#EAE0C6)!important;color:#3E3526!important;border-color:#C9B68C!important}.enemy-row .ehptx,.enemy-row .esk{color:#7C6B50!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=2}}}}<style>.enemy-row{background:linear-gradient(180deg,#0E1B1D,#0A1416)!important;color:#C8E8E3!important;border-color:#1E4640!important}.enemy-row .ehptx,.enemy-row .esk{color:#7FB3AC!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=3}}}}<style>.enemy-row{background:linear-gradient(180deg,#171719,#0F0F11)!important;color:#FAFAFA!important;border-color:#2E2E33!important}.enemy-row .ehptx,.enemy-row .esk{color:#A0A0A8!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_diceon}}!=0}}}}<style>.enemy-row .ehpbar::after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(90deg,transparent 0,transparent calc(100%/var(--max) - 2px),rgba(0,0,0,.45) calc(100%/var(--max) - 2px),rgba(0,0,0,.45) calc(100%/var(--max)))}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=1}}}}<style>.ps-choice{background:linear-gradient(180deg,#F3ECDA,#EAE0C6)!important;border-color:#C9B68C!important;border-left-color:#B8964E!important}.ps-choice:hover{box-shadow:0 0 14px rgba(184,150,78,.22)!important}.ps-choice .pc-num{color:#7A5C1E!important;background:rgba(184,150,78,.14)!important;border-color:rgba(184,150,78,.4)!important}.ps-choice .pc-act{color:#3E3526!important}.ps-choice .pc-stat{color:#6B5320!important;background:rgba(184,150,78,.14)!important;border-color:rgba(184,150,78,.35)!important}.ps-choice .pc-roll{color:#9A7B2E!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=2}}}}<style>.ps-choice{background:linear-gradient(180deg,#0E1B1D,#0A1416)!important;border-color:#1E4640!important;border-left-color:#5FE3C0!important}.ps-choice .pc-num{color:#5FE3C0!important;background:rgba(95,227,192,.12)!important;border-color:rgba(95,227,192,.3)!important}.ps-choice .pc-act{color:#EAFBF6!important}.ps-choice .pc-stat{color:#8FE3C0!important;background:rgba(95,227,192,.1)!important;border-color:rgba(95,227,192,.25)!important}.ps-choice .pc-roll{color:#5FE3C0!important}</style>{{/if}}{{#if {{? {{getglobalvar::toggle_theme}}=3}}}}<style>.ps-choice{background:linear-gradient(180deg,#171719,#0F0F11)!important;border-color:#2E2E33!important;border-left-color:#D8D8E0!important}.ps-choice .pc-num{color:#D8D8E0!important;background:rgba(216,216,224,.1)!important;border-color:rgba(216,216,224,.28)!important}.ps-choice .pc-act{color:#FAFAFA!important}.ps-choice .pc-stat{color:#C8C8D2!important;background:rgba(216,216,224,.08)!important;border-color:rgba(216,216,224,.22)!important}.ps-choice .pc-roll{color:#BFC0CC!important}</style>{{/if}}"
}

🔗 이것과 비슷한 인기 자산

🔫 Rex Trigger Volcan_T
🔫 Rex Statusbar — Update Rex Trigger Volcan's Statusbar Directive Goal: Dynamically modify the contents of the Rex Trigg
👍70 ·
📖 만화 스타일 상태창
상태창 지시문 — @@depth 0 Status Interface Always place this format at the very end of the output. [ Date: YYYY/MM/DD (day of
👍46 ·
🎮 미연시 상태창 fix2
⚙ Char/User 2인 상태창 — @@depth 0 Status Interface Always place this format at the very end of the output. format: [ Date:
👍41 ·
🔖🏷️태그마스터
이야기의 분위기를 바꾸세요
👍39 ·
🐞 W2 · /city/asset