Difference between revisions of "Manual:Mudlet Packages"

From Mudlet
Jump to navigation Jump to search
(37 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 +
{{TOC right}}
 
= What is a Mudlet package =
 
= What is a Mudlet package =
It's a archive file that ends with ''.mpackage'' or ''.zip'' that contains xml files to import along with any resources a package might have (images, sounds and etc). Packages can be installed / uninstalled via a window in Mudlet.
+
It's a zip file that ends with ''.mpackage'' or ''.zip'' that contains xml files to import along with any resources a package might have (images, sounds and etc), or simply an ''.xml'' file on its own. Packages can be installed / uninstalled via a window in Mudlet.
  
The system is backwards-compatible and existing ''.xml'' files will also be recognized as packages.
+
You'll see packages represented in brown in the script editor everywhere - triggers, aliases, etc. All items of a package have to go into a package folder that they belong in - so the user can know which package do items belong to, and modify the package for their needs (if it didn't have a folder, then you wouldn't be able to 'add' anything to a package).
 +
 
 +
= Where to find Mudlet packages =
 +
Check out the [https://forums.mudlet.org/viewforum.php?f=6 Scripts & Packages] section on Mudlet forums for an excellent selection of Mudlet packages.
 +
 
 +
Some Mudlet packages may also be exlusively available on your own game-specific website or forums, so make sure to check out what your game has to offer as well.
 +
 
 +
= What is a Mudlet module =
 +
It's the same thing as a Mudlet package - the only difference is how you import it: via the Module manager instead of the Package manager, and what happens after: Mudlet will save the module back to the original file instead of the profile save file. Really useful if you're writing Mudlet code to share with others - you won't have to ever manually export it again, Mudlet will do it automatically for you! You can version your modules using Git using this way.
 +
 
 +
You can also share a module across several profiles and automatically keep it in sync by installing the module in the relevant profiles and ticking the "sync" option in all of them.
  
 
= How to install a Mudlet package =
 
= How to install a Mudlet package =
== manually ==
+
== as a package ==
Toolbox→Package Manager will open the window where you can 'Install' to install a package.
+
Drag and drop the package into Mudlet (as of 4.8+) and it'll get installed. The package will then get merged into the Mudlet profile and the original file can be deleted.
 +
 
 +
Alternatively, Toolbox→Package Manager will open the window where you can hit 'Install'.
 +
 
 +
== as a module ==
 +
Use Toolbox→Module Manager to install a module.
 +
 
 +
== as a one-liner ==
 +
As a script writer, you can also allow people to just copy/paste a command into Mudlet to install your package - super easy. Here's a demo, paste this into Mudlet:
 +
 
 +
<syntaxhighlight lang="lua">
 +
lua function d(a,b)if not b:find("oci",1,true)then return end installPackage(b)os.remove(b)cecho("<lime_green>Package installed!\n")end registerAnonymousEventHandler("sysDownloadDone","d")downloadFile(getMudletHomeDir().."/oci.mpackage","http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage")
 +
</syntaxhighlight>
 +
 
 +
To get such a line for your script, do the following:
 +
 
 +
1) Copy/paste code below to https://mothereff.in/lua-minifier
 +
 
 +
<syntaxhighlight lang="lua">
 +
local URL = "http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage"
 +
 
 +
function d(_, f)
 +
  if not f:find("oci", 1, true) then return end
 +
 +
  installPackage(f)
 +
  os.remove(f)
 +
  cecho("<lime_green>Package installed!\n")
 +
end
 +
 +
registerAnonymousEventHandler("sysDownloadDone", "d")
 +
 
 +
downloadFile(getMudletHomeDir()..(URL:ends("xml") and "/oci.xml" or "/oci.zip"), URL)
 +
</syntaxhighlight>
 +
 
 +
2) replace the URL (the <code>http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage</code> bit) with your .zip, .mpackage, or .xml URL
 +
 
 +
3) find & replace all semicolons (;) with spaces ( ) in the minified version
 +
 
 +
4) prefix it with 'lua ' and paste it into Mudlet!
 +
 
 +
note: requires Mudlet 3.0 to work.
  
 
== from the MUD ==
 
== from the MUD ==
  
Packages can also be auto-installed from the MUD server via ATCP - the server should send "Client.GUI\n<url>", ie "Client.GUI\nhttp://blahblahblah.com/SomeGameUI.zip" and Mudlet will offer the user an option it downloading and using it automatically.
+
Packages can also be auto-installed from the MUD server via ATCP or GMCP - see [[Manual:ATCP_Extensions|ATCP extensions]] or [[Manual:GMCP_Extensions|GMCP extensions]] for more.
  
 
= How to create a Mudlet package =
 
= How to create a Mudlet package =
Create a zip file - the name of the file will be the name of the package - that ends with either ''.mpackage'' (preferred) or ''.zip''. Include all xml's that you'd like to be installed in the top level folder of the package (that is, don't have them within a folder in the archive - just have them be upfront).  
+
Create a zip file that ends with either ''.mpackage'' (preferred) or ''.zip''. Include all xml's that you'd like to be installed in the top level folder of the package (that is, don't have them within a folder in the archive - just have them be upfront).
 +
 
 +
== Naming the package ==
 +
Add a file at the top level of the package (so not inside any folders in the package) called '''config.lua''' that has the following line to name your package:
  
If you'd like to include other folders or files in the package, you can - they will be copied into ''getMudletHomeDir().."/"..packagename'' upon installation, so your scripts can use them - or example, if your package is called "sipper" (thus you have sipper.mpackage as the file) and you have health.png as an image in it, you can place on a label like so:
+
<syntaxhighlight lang="lua">
 +
mpackage = "<name of your package>"
 +
</syntaxhighlight>
  
<lua>
+
That's it. If you don't include config.lua, Mudlet will then deduce the package name from the file name.
 +
 
 +
== Including images, sounds, and other files ==
 +
If you'd like to include other folders or files in the package, you can - they will be copied into ''getMudletHomeDir().."/"..packagename'' upon installation, so your scripts can use them. Since Mudlet 3.10 you can include font files and they will be automatically available for your scripts to use.
 +
 
 +
For example, if your package is called "sipper" and you have health.png as an image in it, you can place on a label like so:
 +
 
 +
<syntaxhighlight lang="lua">
 
-- you don't have to worry about \ versus / for file paths - use / everywhere, Lua will make it work on Windows fine
 
-- you don't have to worry about \ versus / for file paths - use / everywhere, Lua will make it work on Windows fine
  
setBackgroundImage("my health", getMudletHomeDir().."/sipper/health.png")
+
setBackgroundImage("my health label", getMudletHomeDir().."/sipper/health.png")
</lua>
+
</syntaxhighlight>
 +
 
 +
Install the one-liner package demo above for an example of how to make use of images in packages.
 +
 
 +
== Using .lua files ==
 +
As of Mudlet 3.6.2 you can <code>require "myfile"</code> to load myfile.lua from the package folder.
 +
 
 +
As an example, if you have your package '''sipper''', using a custom echo function named '''sipperecho''' defined in '''customFunctions.lua''' you can
 +
 
 +
<syntaxhighlight lang="lua">
 +
require "sipper.customFunctions"
 +
 
 +
sipperecho("I work")
 +
</syntaxhighlight>
 +
 
 +
Alternatively you can rename '''customFunctions.lua''' to '''init.lua''', this will allow you to <code>require "<name of your package>"</code> and
 +
 
 +
<syntaxhighlight lang="lua">
 +
require "sipper"
 +
 
 +
sipperecho("I work")
 +
</syntaxhighlight>
  
== versioning ==
+
[[Category:Mudlet Manual]]
Now is available yet, will be done soon.
 

Revision as of 06:38, 17 April 2020

What is a Mudlet package

It's a zip file that ends with .mpackage or .zip that contains xml files to import along with any resources a package might have (images, sounds and etc), or simply an .xml file on its own. Packages can be installed / uninstalled via a window in Mudlet.

You'll see packages represented in brown in the script editor everywhere - triggers, aliases, etc. All items of a package have to go into a package folder that they belong in - so the user can know which package do items belong to, and modify the package for their needs (if it didn't have a folder, then you wouldn't be able to 'add' anything to a package).

Where to find Mudlet packages

Check out the Scripts & Packages section on Mudlet forums for an excellent selection of Mudlet packages.

Some Mudlet packages may also be exlusively available on your own game-specific website or forums, so make sure to check out what your game has to offer as well.

What is a Mudlet module

It's the same thing as a Mudlet package - the only difference is how you import it: via the Module manager instead of the Package manager, and what happens after: Mudlet will save the module back to the original file instead of the profile save file. Really useful if you're writing Mudlet code to share with others - you won't have to ever manually export it again, Mudlet will do it automatically for you! You can version your modules using Git using this way.

You can also share a module across several profiles and automatically keep it in sync by installing the module in the relevant profiles and ticking the "sync" option in all of them.

How to install a Mudlet package

as a package

Drag and drop the package into Mudlet (as of 4.8+) and it'll get installed. The package will then get merged into the Mudlet profile and the original file can be deleted.

Alternatively, Toolbox→Package Manager will open the window where you can hit 'Install'.

as a module

Use Toolbox→Module Manager to install a module.

as a one-liner

As a script writer, you can also allow people to just copy/paste a command into Mudlet to install your package - super easy. Here's a demo, paste this into Mudlet:

lua function d(a,b)if not b:find("oci",1,true)then return end installPackage(b)os.remove(b)cecho("<lime_green>Package installed!\n")end registerAnonymousEventHandler("sysDownloadDone","d")downloadFile(getMudletHomeDir().."/oci.mpackage","http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage")

To get such a line for your script, do the following:

1) Copy/paste code below to https://mothereff.in/lua-minifier

local URL = "http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage"

function d(_, f)
  if not f:find("oci", 1, true) then return end
 
  installPackage(f)
  os.remove(f)
  cecho("<lime_green>Package installed!\n")
end
 
registerAnonymousEventHandler("sysDownloadDone", "d")

downloadFile(getMudletHomeDir()..(URL:ends("xml") and "/oci.xml" or "/oci.zip"), URL)

2) replace the URL (the http://www.mudlet.org/wp-content/files/one-click-install-demo.mpackage bit) with your .zip, .mpackage, or .xml URL

3) find & replace all semicolons (;) with spaces ( ) in the minified version

4) prefix it with 'lua ' and paste it into Mudlet!

note: requires Mudlet 3.0 to work.

from the MUD

Packages can also be auto-installed from the MUD server via ATCP or GMCP - see ATCP extensions or GMCP extensions for more.

How to create a Mudlet package

Create a zip file that ends with either .mpackage (preferred) or .zip. Include all xml's that you'd like to be installed in the top level folder of the package (that is, don't have them within a folder in the archive - just have them be upfront).

Naming the package

Add a file at the top level of the package (so not inside any folders in the package) called config.lua that has the following line to name your package:

mpackage = "<name of your package>"

That's it. If you don't include config.lua, Mudlet will then deduce the package name from the file name.

Including images, sounds, and other files

If you'd like to include other folders or files in the package, you can - they will be copied into getMudletHomeDir().."/"..packagename upon installation, so your scripts can use them. Since Mudlet 3.10 you can include font files and they will be automatically available for your scripts to use.

For example, if your package is called "sipper" and you have health.png as an image in it, you can place on a label like so:

-- you don't have to worry about \ versus / for file paths - use / everywhere, Lua will make it work on Windows fine

setBackgroundImage("my health label", getMudletHomeDir().."/sipper/health.png")

Install the one-liner package demo above for an example of how to make use of images in packages.

Using .lua files

As of Mudlet 3.6.2 you can require "myfile" to load myfile.lua from the package folder.

As an example, if you have your package sipper, using a custom echo function named sipperecho defined in customFunctions.lua you can

require "sipper.customFunctions"

sipperecho("I work")

Alternatively you can rename customFunctions.lua to init.lua, this will allow you to require "<name of your package>" and

require "sipper"

sipperecho("I work")