nyacronomicon/js/plugins/KN_EventHelper.js
2026-03-18 01:18:02 -05:00

239 lines
No EOL
10 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*: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 = /<DefeatEvent:\s*.+?\s*>/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] <DefeatSimpleStillID> タグが見つかりません: ${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(/<DefeatEvent:\s*(.+?)\s*>/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(/<DefeatEvent:\s*(.+?)\s*>/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 = /<HEvent:\s*.+?\s*>/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(/<EndingEvent:\s*(.+?)\s*>/i);
if (!match) return "";
const endingId = match[1].trim();
console.log(`[EventHelper] エンディングID取得: ${endingId}`);
return endingId;
};
// エンディングイベントタグの有無チェック
static hasEndingEvent = function() {
return this.getEndingEvent() !== "";
};
// Hイベントの記憶付与イベントメモ欄参照: <HEvent:ミミックの記憶>
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(/<HEvent:\s*(.+?)\s*>/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;
})();