Add error handler to prevent crashes and make investagation easier
This commit is contained in:
parent
75bb676741
commit
79ad2e5f2a
4 changed files with 494 additions and 407 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,12 @@
|
||||||
// Generated by RPG Maker.
|
// Generated by RPG Maker.
|
||||||
// Do not edit this file directly.
|
// Do not edit this file directly.
|
||||||
var $plugins = [
|
var $plugins = [
|
||||||
|
{
|
||||||
|
name: "ErrorHandler",
|
||||||
|
status: true,
|
||||||
|
description: "Shows detailed error messages for script calls instead of crashing",
|
||||||
|
parameters: {},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "PluginCommonBase",
|
name: "PluginCommonBase",
|
||||||
status: true,
|
status: true,
|
||||||
|
|
|
||||||
40
js/plugins/ErrorHandler.js
Normal file
40
js/plugins/ErrorHandler.js
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
// ==================================================
|
||||||
|
// ERROR HANDLER PATCH FOR RPG MAKER MZ
|
||||||
|
// Place this in js/plugins and enable it
|
||||||
|
// ==================================================
|
||||||
|
|
||||||
|
/*:
|
||||||
|
* @target MZ
|
||||||
|
* @plugindesc Shows detailed error messages for script calls instead of crashing
|
||||||
|
* @author Debug Helper
|
||||||
|
*
|
||||||
|
* @help This plugin catches script execution errors and displays them
|
||||||
|
* in the console with the actual code that failed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(() => {
|
||||||
|
const _Game_Interpreter_command355 = Game_Interpreter.prototype.command355;
|
||||||
|
|
||||||
|
Game_Interpreter.prototype.command355 = function() {
|
||||||
|
const script = this.currentCommand().parameters[0];
|
||||||
|
try {
|
||||||
|
return _Game_Interpreter_command355.call(this);
|
||||||
|
} catch (e) {
|
||||||
|
console.error('==========================================');
|
||||||
|
console.error('SCRIPT EXECUTION ERROR CAUGHT:');
|
||||||
|
console.error('==========================================');
|
||||||
|
console.error('Error:', e.message);
|
||||||
|
console.error('Script that failed:');
|
||||||
|
console.error(script);
|
||||||
|
console.error('==========================================');
|
||||||
|
|
||||||
|
// Show error in battle log if available
|
||||||
|
if (BattleManager._logWindow) {
|
||||||
|
BattleManager._logWindow.addText('\\c[18][SCRIPT ERROR: ' + e.message + ']');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue execution instead of crashing
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})();
|
||||||
41
validate_scripts.js
Normal file
41
validate_scripts.js
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Script to validate all code 355 JavaScript commands in CommonEvents.json
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
console.log('Loading CommonEvents.json...');
|
||||||
|
const data = JSON.parse(fs.readFileSync('./data/CommonEvents.json', 'utf8'));
|
||||||
|
|
||||||
|
let errorCount = 0;
|
||||||
|
let totalScripts = 0;
|
||||||
|
|
||||||
|
console.log('Validating script calls...\n');
|
||||||
|
|
||||||
|
data.forEach((event, eventIndex) => {
|
||||||
|
if (!event || !event.list) return;
|
||||||
|
|
||||||
|
event.list.forEach((command, cmdIndex) => {
|
||||||
|
if (command.code === 355 && command.parameters && command.parameters[0]) {
|
||||||
|
totalScripts++;
|
||||||
|
const script = command.parameters[0];
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Try to parse the script as a Function to check syntax
|
||||||
|
new Function(script);
|
||||||
|
} catch (e) {
|
||||||
|
errorCount++;
|
||||||
|
console.log(`ERROR in Event ${event.id} "${event.name}" (Command index ${cmdIndex}):`);
|
||||||
|
console.log(`Script: ${script.substring(0, 100)}...`);
|
||||||
|
console.log(`Error: ${e.message}\n`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`\n=== VALIDATION COMPLETE ===`);
|
||||||
|
console.log(`Total scripts checked: ${totalScripts}`);
|
||||||
|
console.log(`Errors found: ${errorCount}`);
|
||||||
|
|
||||||
|
if (errorCount === 0) {
|
||||||
|
console.log('\nAll scripts are syntactically valid!');
|
||||||
|
} else {
|
||||||
|
console.log('\nPlease fix the errors above.');
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue