/*:ja * @target MZ * @author kurogoma knights * @base PluginCommonBase * @plugindesc Eventの便利機能を提供 */ (() => { 'use strict'; const script = document.currentScript; const param = PluginManagerEx.createParameter(script); window.Kurogoma = window.Kurogoma || {}; // イベントヘルパー class EventHelper { // 体験版スキップタグの有無チェック static isTrialSkip = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; // イベント本体のメモ欄を参照 const meta = event.event()?.meta; return !!meta?.TrialSkip; // true/falseで返す } // 敗北イベントタグの有無チェック static hasDefeatEvent = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; const eventName = event.event()?.name; if (!eventName) return false; // 同名の敵データを検索(Troops.jsonはJP名のままなのでブリッジ) const troop = $dataTroops.find(t => t && t.name === eventName); const enemy = troop ? $dataEnemies[troop.id] : $dataEnemies.find(e => e && e.name === eventName); if (!enemy) return false; // DefeatEventタグの有無をチェック const hasTag = //i.test(enemy.note); return hasTag; }; // 敗北時スチルIDを変数にセット static setDefeatSimpleStillIdToVariable = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; const eventName = event.event().name; if (!eventName) return false; // 敵データを名前一致で検索(Troops.jsonはJP名のままなのでブリッジ) const troop = $dataTroops.find(t => t && t.name === eventName); const enemy = troop ? $dataEnemies[troop.id] : $dataEnemies.find(e => e && e.name === eventName); if (!enemy) return false; // タグからIDを取得 const stillId = enemy.meta?.DefeatSimpleStillID; if (!stillId) { console.warn(`[EventHelper] タグが見つかりません: ${eventName}`); return false; } // 変数15番に格納 (centralized const) $gameVariables.setValue(Kurogoma.VariableConst.StillId, stillId); console.log(`[EventHelper] ${Kurogoma.VariableConst.StillId} に設定: ${stillId}`); return true; }; // 記憶所持チェック static hasMemory = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; const eventName = event.event().name; if (!eventName) return false; // 敵データから同名のものを探す(Troops.jsonはJP名のままなのでブリッジ) const troop = $dataTroops.find(t => t && t.name === eventName); const enemy = troop ? $dataEnemies[troop.id] : $dataEnemies.find(e => e && e.name === eventName); if (!enemy) return false; // DefeatEventタグを抽出 const match = enemy.note.match(//i); if (!match) return false; const memoryItemName = match[1].trim(); // アイテム所持チェック const item = $dataItems.find(i => i && i.name === memoryItemName); return !!(item && $gameParty.hasItem(item)); }; // 敗北記憶付与 static addMemory = function(notify = false) { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; const eventName = event.event()?.name; if (!eventName) return false; // 敵データから同名のものを探す(Troops.jsonはJP名のままなのでブリッジ) const troop = $dataTroops.find(t => t && t.name === eventName); const enemy = troop ? $dataEnemies[troop.id] : $dataEnemies.find(e => e && e.name === eventName); if (!enemy) return false; // DefeatEventタグを抽出 const match = enemy.note.match(//i); if (!match) { console.warn(`[EventHelper] DefeatEvent タグが見つかりません: ${eventName}`); return false; } const itemName = match[1].trim(); const item = $dataItems.find(i => i && i.name === itemName); if (!item) { console.warn(`[EventHelper] アイテムが見つかりません: ${itemName}`); return false; } // すでに所持していない場合のみ付与(重複防止) if ($gameParty.hasItem(item)) { console.log(`[EventHelper] 既に所持済み: ${item.name}`); return false; } // アイテムを1つ付与 $gameParty.gainItem(item, 1); console.log(`[EventHelper] 記憶アイテム付与: ${item.name}`); // 通知表示 if (notify) { const msg = `Obtained ${item.name}!`; Torigoya.NotifyMessage.Manager.notify(new Torigoya.NotifyMessage.NotifyItem({ message: msg, icon: item.iconIndex })); } return true; }; // 汎用敗北記憶付与 static addCommonMemory = function() { const item = $dataItems.find(i => i && i.name === "Memory of Defeat"); if (!item) { console.warn(`[EventHelper] Item not found: Memory of Defeat`); return false; } // すでに所持していない場合のみ付与(重複防止) if ($gameParty.hasItem(item)) { console.log(`[EventHelper] 既に所持済み: ${item.name}`); return false; } // アイテムを1つ付与 $gameParty.gainItem(item, 1); console.log(`[EventHelper] 記憶アイテム付与: ${item.name}`); return true; }; // HEvent タグの有無チェック(イベントメモ欄参照) static hasHEvent = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; // イベントのメモ欄から HEvent タグをチェック const hasTag = //i.test(event.event()?.note || ""); return hasTag; }; // エンディングイベントIDを取得(タグがない場合は空文字列を返す) static getEndingEvent = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return ""; const eventName = event.event()?.name; if (!eventName) return ""; // 同名の敵データを検索(Troops.jsonはJP名のままなのでブリッジ) const troop2 = $dataTroops.find(t => t && t.name === eventName); const enemy = troop2 ? $dataEnemies[troop2.id] : $dataEnemies.find(e => e && e.name === eventName); if (!enemy) return ""; // EndingEventタグからIDを抽出 const match = enemy.note.match(//i); if (!match) return ""; const endingId = match[1].trim(); console.log(`[EventHelper] エンディングID取得: ${endingId}`); return endingId; }; // エンディングイベントタグの有無チェック static hasEndingEvent = function() { return this.getEndingEvent() !== ""; }; // Hイベントの記憶付与(イベントメモ欄参照: ) static addHMemory = function() { const interpreter = this instanceof Game_Interpreter ? this : $gameMap._interpreter; const event = $gameMap.event(interpreter._eventId); if (!event) return false; // イベントのメモ欄から HEvent タグを抽出 const match = event.event()?.note.match(//i); if (!match) { console.warn(`[EventHelper] HEvent タグが見つかりません`); return false; } const itemName = match[1].trim(); const item = $dataItems.find(i => i && i.name === itemName); if (!item) { console.warn(`[EventHelper] アイテムが見つかりません: ${itemName}`); return false; } if ($gameParty.hasItem(item)) { console.log(`[EventHelper] 既に所持済み: ${item.name}`); return false; } $gameParty.gainItem(item, 1); console.log(`[EventHelper] 記憶アイテム付与: ${item.name}`); return true; }; } window.Kurogoma.EventHelper = EventHelper; })();