Difference between revisions of "LavishScript"

From Lavish Software Wiki
Jump to navigation Jump to search
Line 1: Line 1:
== Introduction ==
+
== Overview ==
=== Origin of LavishScript ===
 
LavishScript is the next iteration of a system [[User:Lax|Lax]] developed in 2004 for [http://www.macroquest2.com MacroQuest 2] (software for customization and automation of [http://www.everquest.com EverQuest 1]). LavishScript was originally developed specifically for [[Inner Space]], but was split from the project so that it could be used in [[Fury]] and other new products as well.
 
 
 
=== What is LavishScript? ===
 
 
LavishScript is a fully-featured scripting engine.  Its goal is to be an easy to learn (very few syntactical rules, as few operators as possible, and so on) command-based language.  It is [http://searchwebservices.techtarget.com/sDefinition/0,290660,sid26_gci212681,00.html object-oriented] and [http://whatis.techtarget.com/definition/0,,sid9_gci213058,00.html strongly typed].
 
LavishScript is a fully-featured scripting engine.  Its goal is to be an easy to learn (very few syntactical rules, as few operators as possible, and so on) command-based language.  It is [http://searchwebservices.techtarget.com/sDefinition/0,290660,sid26_gci212681,00.html object-oriented] and [http://whatis.techtarget.com/definition/0,,sid9_gci213058,00.html strongly typed].
  
Line 29: Line 25:
 
* [[LavishScript:Atoms|Atoms]]
 
* [[LavishScript:Atoms|Atoms]]
 
* [[LavishScript:File System|File System]]
 
* [[LavishScript:File System|File System]]
 +
* [[LavishScript:Modules]]
  
== Discussing LavishScript ==
 
When engaging in online conversation about LavishScript, please make an effort to use the correct terminology and semantics.  For example, there is no member of a Top-Level Object.  Read on: [[LavishScript:Discussing|Discussing LavishScript]]
 
 
== LavishScript Modules ==
 
LavishScript modules extend the functionality of LavishScript.  They may come in the form of extensions or plugins for LavishScript-enabled applications, or in the form of a direct LavishScript module (LSModules).  The "Developing ..." topics below apply equally to all modules.
 
=== Existing LSModules ===
 
* [[LSModule:ExtTypes|ExtTypes]]: Adds extended data types including collection, stack, and queue
 
* [[LSModule:Regex|Regex]]: Adds support for regular expressions, including match, split and substitution
 
* [[LSModule:Scheduler|Scheduler]]: Adds command scheduling (optionally recurring)
 
 
=== Installing and Using LSModules ===
 
To install a LavishScript module, extract the DLL file to the "LavishScript Modules" folder for the application you wish to use the module in.  After doing so, the module must be explicitly loaded in order to be used.  To load and later unload the module, use the [[Command:Module|Module command]] like so:
 
* Module -add LSModule
 
* Module -remove LSModule
 
A third form using the Module command can be used in scripts to ''require'' the module, and immediately end the script if it is not available:
 
* Module -require LSModule
 
While a module is loaded, any commands, aliases, data types, and Top-Level Objects are available for use as if they were built directly into LavishScript.
 
 
=== Development ===
 
=== Development ===
 
* [[LavishScript:LSModule System|LSModule System]]
 
* [[LavishScript:LSModule System|LSModule System]]
Line 52: Line 32:
 
* [[LavishScript:Developing Data Types|Developing Data Types]]
 
* [[LavishScript:Developing Data Types|Developing Data Types]]
 
* [[LavishScript:Developing Top-Level Objects|Developing Top-Level Objects]]
 
* [[LavishScript:Developing Top-Level Objects|Developing Top-Level Objects]]
 
+
* [[LavishScript:Discussing|Discussing LavishScript]]
 
== See Also ==
 
== See Also ==
 +
* [[Inner Space]]
 +
* [[LavishGUI]]
 
* [[LavishScript:Release Notes|LavishScript Release Notes]]
 
* [[LavishScript:Release Notes|LavishScript Release Notes]]
  
 
[[Category:LavishScript]]
 
[[Category:LavishScript]]

Revision as of 06:10, 19 October 2005

Overview

LavishScript is a fully-featured scripting engine. Its goal is to be an easy to learn (very few syntactical rules, as few operators as possible, and so on) command-based language. It is object-oriented and strongly typed.

LavishScript is designed with the idea that most scripting languages munge too many extra rules and operators to do different things. We believe that simplicity is key. Not necessarily simplicity in the range of available functionality, but simplicity in the structure of the language itself. The complete syntax for commands and data sequences is defined here. Script structure is also quite simple, and is defined here.

LavishScript is generally designed with non-programmers in mind (though logical thinking helps...). LavishScript isn't meant to be a replacement for other general-purpose languages, it is simply meant to be easy to use. If a "real" programming language is what you're looking for, maybe you should be using one instead of a scripting language, right? Most simple tasks can be completed with minimal research, but of course developing scripts will require some learning.

LavishScript allows any number of persistent scripts simultaneously, each of which are given a time slice per "pulse". Pulse timing is defined by the application (such as Fury or Inner Space), so each pulse may be defined as once per frame in a game (as in frames per second), or may simply be as soon as possible after the previous pulse, or can be distributed evenly at specific intervals. The priority level, dictating how much of a time slice is given per pulse, for a script may be set using the Turbo command.

Internally, LavishScript uses C++ objects to perform the scripting duties. By design, every command takes the same form as a standard C console application (i.e. int main(int argc, char *argv[])), as does every built-in variable (called Top-Level Objects) to a lesser extent. This means that developing a LavishScript module is just as painless as developing a console app.

Basics

LavishScript encompasses these basic parts

Development

See Also