Trilobytes MV #1: Dude, Where's My Autorun?

Trihan

Speedy Scripter
Veteran
Joined
Apr 12, 2012
Messages
1,483
Reaction score
986
First Language
English
Primarily Uses

Dude, Where's My Autorun? Version 1.0
Created by Trihan

Introduction
Have you ever been test playing your game when all of a sudden the player couldn't move any more? Ah, crap, looks like you probably have an errant autorun event that's screwing things up. But this is a 500x500 map with 150 events on it, and your autorun could be ANY ONE OF THEM! What to do, what to do...if only there were a plugin that could help. Well, now there is!

Features
- Display a list of every autorun page in the game that meets its conditions to run.
- Tells you how you can activate higher-numbered pages to turn the page off.
- Tells you whether the autorun page has an "erase event" command that makes it turn itself off.

Screenshots


How to Use
Install the plugin pretty much anywhere. Its functionality is entirely contained within a new DataManager function, so it won't cause compatibility issues with any other plugin unless for some reason another plugin adds a function to DataManager called locateAutorun, which I can't imagine will happen any time soon.

In order to use it, there are two commands; due to the utility-based nature of this plugin, you have to run it from the console as you can run it from any point in the game. The volume of potential output is too great to use message boxes or a scene for it. So press F8 to open the console and then enter one of the following:

DataManager.locateAutorun()

This will look through every map in the game for events with autorunning pages, and if it finds any will tell you whether they meet their conditions and what you'd have to do to turn them off. It won't give you every single autorun page; if it finds a non-autorun page that's higher than the autorun and has its conditions met, it won't mention that page.

Note that as this loads up the data for every map in the game, larger games may take a while to process.

DataManager.locateAutorun(mapId)

This will cause the output to be limited to the specific map ID you enter.

Demo
No demo available at present.

Script
Code:
//=============================================================================
// DudeWheresMyAutorun.js v1.0
//=============================================================================

/*:
 * @plugindesc Gives you a list of all autorun events in the game with locations.
 * Handy if you have a game freeze and don't know where the autoruns are.
 * @author John Clifford (Trihan)
 *
 * @help
 *
 * Open a console by pressing F8 and type one of the following to call the
 * relevant function:
 *
 * DataManager.locateAutorun();
 * The plugin will display a list of all maps detailing events with autorun pages,
 * detailing conditions and whether they are met.
 *
 * NOTE: Due to this function having to load data for every map in the game, it
 * may take some time to process for large games.
 *
 * DataManager.locateAutorun(mapId);
 * The plugin will display a list of events on the given map with autorun pages,
 * detailing conditions and whether they are met.
 *
 * ============================================================================
 * Changelog
 * ============================================================================
 * Version 1.0 - Initial release
 * ============================================================================
 */
 

(function() {
    DataManager.locateAutorun = function(mapId) {
        if (mapId) {
            if ($dataMapInfos[mapId]) {
                outputMapData($dataMapInfos[mapId]);
            } else {
                console.log("ERROR: Invalid map ID.");
            }
        } else {
            $dataMapInfos.forEach(function(mapInfo) {
                if (mapInfo) {
                    outputMapData(mapInfo);
                }
            });
        }
    };
  
    function outputMapData(mapInfo) {
        var autorunEvents = [];
                var xhr = new XMLHttpRequest();
                xhr.open("GET", 'data/Map%1.json'.format(mapInfo.id.padZero(3)));
                xhr.overrideMimeType('application/json');
                xhr.onload = function ()
                {
                    if(xhr.status < 400)
                    {
                        var mapData = JSON.parse(xhr.responseText);
                        var events = mapData.events;
                        events.forEach(function(ev) {
                            if (ev) {
                                ev.pages.forEach(function(page, index) {
                                    if (page.trigger === 3 && !autorunEvents.contains(ev)) {
                                        autorunEvents.push(ev);
                                    }
                                });
                            }
                        });
                        if (autorunEvents.length > 0) {
                            console.log("Map " + mapInfo.id + "(\"" + mapInfo.name + "\") contains " + autorunEvents.length + " autorun event" + (autorunEvents.length > 1 ? "s" : "") + ":");
                            autorunEvents.forEach(function(autoEv) {
                                console.log("  \"" + autoEv.name + "\" located at (" + autoEv.x + ", " + autoEv.y + ")");
                                var requiredConditions = [];
                                for (var i = autoEv.pages.length - 1; i >= 0; i--) {
                                    var conditionsMet = true;
                                    var page = autoEv.pages[i];
                                    if (page.trigger === 3) {
                                        console.log("    Page " + (i + 1) + ":");
                                    }
                                    var conditions = page.conditions;
                                    var condition;
                                    if (conditions.switch1Valid) {
                                        condition = $gameSwitches.value(conditions.switch1Id);
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires switch " + conditions.switch1Id + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (conditions.switch2Valid) {
                                        condition = $gameSwitches.value(conditions.switch2Id);
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires switch " + conditions.switch2Id + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (conditions.variableValid) {
                                        condition = $gameVariables.value(conditions.variableId) >= conditions.variableValue;
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires variable " + conditions.variableId + " >= " + conditions.variableValue + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (conditions.selfSwitchValid) {
                                        condition = $gameSelfSwitches.value([mapInfo.id, autoEv.id, conditions.selfSwitchCh]);
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires self switch " + conditions.selfSwitchCh + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (conditions.itemValid) {
                                        condition = $gameParty.hasItem($dataItems[conditions.itemId]);
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires item " + conditions.itemId + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (conditions.actorValid) {
                                        condition = $gameParty.members().contains($gameActors.actor(conditions.actorId));
                                        if (!condition) {
                                            conditionsMet = false;
                                        }
                                        if (page.trigger === 3) console.log("      Requires actor " + conditions.actorId + " (" + (condition ? "MET" : "NOT MET") + ")");
                                    }
                                    if (page.trigger === 3) {
                                        if (conditionsMet) {
                                            console.log("    This page meets all conditions and will run on map entry");
                                            if (!conditions.switch1Valid && !conditions.switch2Valid && !conditions.variableValid && !conditions.selfSwitchValid && !conditions.itemValid && !conditions.actorValid) {
                                                var eraseEvent = false;
                                                var eventCommands = autoEv.pages[i].list;
                                                eventCommands.forEach(function(command) {
                                                    if (command.code === 214) {
                                                        eraseEvent = true;
                                                    }
                                                });
                                                if (!eraseEvent) {
                                                    if (i === autoEv.pages.length - 1) {
                                                        console.log("    WARNING: This page has no defined conditions and there are no non-autorun pages higher than it, so it is currently impossible to shut off.");
                                                    } else {
                                                        console.log("    WARNING: This page has no defined conditions. In order to shut it off, you will have to turn on a higher page by meeting the following conditions:");
                                                        requiredConditions.forEach(function(conditionSet) {
                                                            console.log("      Page " + (conditionSet[0] + 1) + ":");
                                                            if (conditionSet[1].switch1Valid) {
                                                                console.log("      - Turn ON switch " + conditionSet[1].switch1Id);
                                                            }
                                                            if (conditionSet[1].switch2Valid) {
                                                                console.log("      - Turn ON switch " + conditionSet[1].switch2Id);
                                                            }
                                                            if (conditionSet[1].variableValid) {
                                                                console.log("      - Set variable " + conditionSet[1].variableId + " to " + conditionSet[1].variableValue + " or higher");
                                                            }
                                                            if (conditionSet[1].selfSwitchValid) {
                                                                console.log("      - Turn ON self switch " + conditionSet[1].selfSwitchCh);
                                                            }
                                                            if (conditionSet[1].itemValid) {
                                                                console.log("      - Acquire item " + conditionSet[1].itemId);
                                                            }
                                                            if (conditionSet[1].actorValid) {
                                                                console.log("      - Add actor " + conditionSet[1].actorId + " to the party");
                                                            }
                                                        });
                                                    }
                                                } else {
                                                    console.log("    It erases itself so no further action necessary.");
                                                }
                                            }
                                            break;
                                        }
                                        else {
                                            console.log("    This page does not meet its conditions and will not run");
                                        }
                                    } else {
                                        if (conditionsMet) {
                                            console.log("    A higher non-autorun page (" + (i + 1) + ") meets its conditions, the autorun page will not run");
                                            break;
                                        }
                                        else {
                                            requiredConditions.push([i, conditions]);
                                        }
                                    }
                                }
                            });
                        } else {
                            console.log("Map " + mapInfo.id + " contains no autorun events.");
                        }
                    }
                }
                xhr.send();
    };
})();

FAQ
No questions at present.

Terms of Use
This plugin can be used freely for both commercial and non-commercial projects. No credit is necessary due to it being strictly for developer utility.

Credit and Thanks
- Trihan
- Thanks to all the newbies who have posted threads where this was their problem, prompting the idea in the first place.
 
Last edited:

Point08

Veteran
Veteran
Joined
Feb 10, 2015
Messages
115
Reaction score
115
First Language
English
This sounds like quite the useful tool. I love the stuff this community comes up with to make all our lives easier.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

suspended on twitter for calling an ahole an ahole & appealing the tweet; furious at myself for being even slightly upset with my suspension: oh no, you've been temporarily banned from hell. GET OVER IT, me.
how can you download the tiles from a forum post here? HELP
That moment when you post the wrong download link to your game and wonder why it got so few downloads... :mad:
Trying to make it so my map is cleared of "random" events after the player leaves the map... to little success >.< I think I might need to ask help for this.
Had my first interaction with a legit homophobe concerning one of my games today. Tempting to engage, but pointless.

Forum statistics

Threads
94,245
Messages
919,367
Members
123,959
Latest member
CecilGP
Top