Creation/Dev/Dungeon Generator/Cave Fix: Difference between revisions
From Graal Bible
(Created page with 'If you use the dungeon generator to generate caves for Graal Kingdoms, you will find that it is possible for fast pla…') |
(+categories) |
||
Line 1: | Line 1: | ||
[[Category:Graal Kingdoms Development]][[Category:Scripting Reference]][[Category:Levels]] | |||
If you use the [[Creation/Dev/Dungeon Generator|dungeon generator]] to generate caves for [[Worlds/Graal Kingdoms|Graal Kingdoms]], you will find that it is possible for fast players to glitch on top of the non-walkable space and then walk around on it. | If you use the [[Creation/Dev/Dungeon Generator|dungeon generator]] to generate caves for [[Worlds/Graal Kingdoms|Graal Kingdoms]], you will find that it is possible for fast players to glitch on top of the non-walkable space and then walk around on it. | ||
Latest revision as of 19:17, 16 April 2011
If you use the dungeon generator to generate caves for Graal Kingdoms, you will find that it is possible for fast players to glitch on top of the non-walkable space and then walk around on it.
The problem is that the tile definitions used for caves use a non-blocking selection of tiles for outside of the path.
To fix that, place this script in an NPC on your server and run it, being sure to change the GMAP name near the top:
function onCreated() { // you can use a level or a GMAP here, just make sure to // use the proper extension temp.levelToFix = findLevel("mycave.gmap"); // don't change this if (levelToFix == null) { return echo("Error: Level doesn't exist!"); } temp.tilesToChange = { {2560, 2818}, {2561, 2819}, {2562, 2820}, {2563, 2821}, {2576, 2834}, {2577, 2835}, {2578, 2836}, {2579, 2837}, {2592, 2850}, {2593, 2851}, {2594, 2852}, {2595, 2853}, {2608, 2866}, {2609, 2867}, {2610, 2868}, {2611, 2869} }; // create simple arrays temp.changeFrom = null; temp.changeTo = null; // avoid max loop limit temp.i = 0; this.avoidLimit = function(i) { if (i >= (this.maxlooplimit - 1)) { sleep(0.1); return 0; } return (++ i); }; for (temp.tile : tilesToChange) { changeFrom.add(tile[0]); changeTo.add(tile[1]); i = this.avoidLimit(i); } // make changes for (temp.x = 0; x < levelToFix.width; x ++) { for (temp.y = 0; y < levelToFix.height; y ++) { temp.currentTile = levelToFix.tiles[x, y]; temp.fixIndex = changeFrom.index(@ currentTile); if (fixIndex > (- 1)) { temp.newTile = changeTo[fixIndex]; levelToFix.tiles[x, y] = newTile; } i = this.avoidLimit(i); } i = this.avoidLimit(i); } // save changes levelToFix.updateBoard2(0, 0, levelToFix.width, levelToFix.height); }
Keep in mind that some players will see the old levels until the modified date is changed. To change the modified date so that all players see the fixed levels, download and reupload the modified levels.