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_html
in ASH becomesLib.printHtml
in 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
Monster
andItem
global objects, along with the rest of ASH's enumerated types (stat, phylum, location, etc.).Monster.get
takes a number or a string, just like$monster
in ASH, or an array of numbers and strings to construct an array of monsters.Monster.all
works like$monsters[]
in ASH; it takes no arguments and returns an array of all monsters. - Mafia supports
require
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
main
function, 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 = main
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.