-
Notifications
You must be signed in to change notification settings - Fork 18
How do I...
This page describes some common scenarios that may come up when writing mods.
Put the following in the mod's init.lua
, or a file required by it.
data:add {
_type = "base.event"
_id = "my_event_type",
params = {
{ name = "param_1", type = "int", desc = "Description of this parameter." }
},
returns = {
{ type = "int?" }
}
}
This event will have an _id
of <mod_id>.my_event_type
.
Add a new entry of type elona_sys.inventory_proto
with the filtering logic you want.
local inv_filter = {
_type = "elona_sys.inventory_proto",
_id = "my_inv_filter",
sources = { "chara", "equipment", "ground" },
icon = 17,
show_money = false,
query_amount = false,
text = "ui.inventory_command.identify",
filter = function(ctxt, item)
return item.has_charge and (item.charges or 0) > 0
end,
on_select = function(ctxt, item, amount)
return "player_turn_query"
end
}
data:add(inv_filter)
Then call Input.query_item()
to retrieve the item.
local result, canceled = Input.query_item(Chara.player(), "my_mod.my_inv_filter")
if canceled then
return
end
local item = result.item
Log.info("Item: %s", item:build_name())
First, use Draw.make_chip_batch()
to generate a sprite batch. This lets you draw a sequence of sprites in an efficient manner.
local batch = Draw.make_chip_batch("chip")
Here are the different types of sprite batches you can create this way.
-
"tile"
: Map tiles. -
"chip"
: Character, item, and feat sprites. -
"portrait"
: Portraits.
Then, add the sprites you want to draw. For a "tile"
batch, you pass in the ID of a base.map_tile
entry. For "chip"
, pass in a base.chip
ID, and for "portrait"
, pass in a base.portrait
ID.
batch:add("elona.chara_putit", x, y, self.tile_width, self.tile_height)
Finally, during the rendering phase, call :draw()
.
batch:draw(x, y)
To clear the batch, call :clear()
. Be sure to do this first if you want to update the tiles to draw.
batch:clear()