JavaScript Support: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 6: | Line 6: | ||
* Objects like monsters and items can be constructed via the <code>Monster</code> and <code>Item</code> global objects, along with the rest of ASH's enumerated types (stat, phylum, location, etc.). <code>Monster.get</code> takes a number or a string, just like <code>$monster</code> in ASH, or an array of numbers and strings to construct an array of monsters. <code>Monster.all</code> works like <code>$monsters[]</code> in ASH; it takes no arguments and returns an array of all monsters. | * Objects like monsters and items can be constructed via the <code>Monster</code> and <code>Item</code> global objects, along with the rest of ASH's enumerated types (stat, phylum, location, etc.). <code>Monster.get</code> takes a number or a string, just like <code>$monster</code> in ASH, or an array of numbers and strings to construct an array of monsters. <code>Monster.all</code> works like <code>$monsters[]</code> in ASH; it takes no arguments and returns an array of all monsters. | ||
* Mafia supports <code>require</code> for both ASH and JS scripts. For ASH scripts, it will execute top-level code but only export functions, not variables, in the top scope. | * Mafia supports <code>require</code> for both ASH and JS scripts. For ASH scripts, it will execute top-level code but only export functions, not variables, in the top scope. | ||
* If you want Mafia to run your <code>main</code> function, you '''<u>must</u>''' export it by adding it to module.exports, just as you would for a Node module. | * If you want Mafia to run your <code>main</code> function, you '''<u>must</u>''' export it by adding it to module.exports, just as you would for a Node module. For the uninitiated, this just means adding <code>module.exports.main = main</code> to the end of your script. You will want to do the same with any function or value you want to be available to other scripts via require. | ||
Revision as of 15:19, 27 November 2020
As of revision 20509, KoLmafia supports scripting in JavaScript! You can run JS code from the CLI using js <code>, and you can call scripts through any of the normal methods. Consult and "lifecycle" scripts (e.g. betweenBattleScript) are supported as well as of revision 20519. This support is still experimental - you have been warned.
- All the methods in the ASH runtime library are available, with names of methods converted to camelCase. So, for example,
print_htmlin ASH becomesLib.printHtmlin JS. In scripts called from a file, you can access the runtime library by callingrequire("kolmafia"). If running from the command line viajs, the runtime library functions are all available in the global scope (so you can dojs print("hello world");). - ASH maps are converted to plain JS objects, and ASH arrays are converted to JS arrays.
- You can look at the type reference for the JS version of the ASH runtime library with
jsref, which works just likeashref. - Objects like monsters and items can be constructed via the
MonsterandItemglobal objects, along with the rest of ASH's enumerated types (stat, phylum, location, etc.).Monster.gettakes a number or a string, just like$monsterin ASH, or an array of numbers and strings to construct an array of monsters.Monster.allworks like$monsters[]in ASH; it takes no arguments and returns an array of all monsters. - Mafia supports
requirefor both ASH and JS scripts. For ASH scripts, it will execute top-level code but only export functions, not variables, in the top scope. - If you want Mafia to run your
mainfunction, you must export it by adding it to module.exports, just as you would for a Node module. For the uninitiated, this just means addingmodule.exports.main = mainto the end of your script. You will want to do the same with any function or value you want to be available to other scripts via require.