This commit is contained in:
2026-04-28 08:04:01 -05:00
parent 19f2a2c616
commit a41b0e916b
57 changed files with 5023 additions and 3503 deletions
+92 -133
View File
@@ -6,236 +6,195 @@
*/
#pragma once
#include "script/scriptcontext.h"
#include "script/module/modulebase.h"
#include "item/inventory.h"
#include "item/backpack.h"
#include "assert/assert.h"
static int moduleInventoryItemExists(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryItemExists: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryItemExists) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryItemExists: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventoryItemExists: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventoryItemExists: Expected item ID as second argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
if(item == ITEM_ID_NULL) {
luaL_error(L, "inventoryItemExists: Item ID cannot be ITEM_ID_NULL");
return 0;
return JS_THROW("inventoryItemExists: Item ID cannot be ITEM_ID_NULL");
}
bool_t hasItem = inventoryItemExists(inventory, item);
lua_pushboolean(L, hasItem);
return 1;
return jerry_boolean(hasItem);
}
static int moduleInventorySet(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventorySet: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventorySet) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventorySet: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventorySet: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventorySet: Expected item ID as second argument");
}
if(!lua_isnumber(L, 3)) {
luaL_error(L, "inventorySet: Expected quantity as third argument");
return 0;
if(!jerry_value_is_number(args_p[2])) {
return JS_THROW("inventorySet: Expected quantity as third argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
uint8_t quantity = (uint8_t)lua_tonumber(L, 3);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
uint8_t quantity = (uint8_t)jerry_value_as_number(args_p[2]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
inventorySet(inventory, item, quantity);
return 0;
return jerry_undefined();
}
static int moduleInventoryAdd(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryAdd: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryAdd) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryAdd: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventoryAdd: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventoryAdd: Expected item ID as second argument");
}
if(!lua_isnumber(L, 3)) {
luaL_error(L, "inventoryAdd: Expected quantity as third argument");
return 0;
if(!jerry_value_is_number(args_p[2])) {
return JS_THROW("inventoryAdd: Expected quantity as third argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
uint8_t quantity = (uint8_t)lua_tonumber(L, 3);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
uint8_t quantity = (uint8_t)jerry_value_as_number(args_p[2]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
inventoryAdd(inventory, item, quantity);
return 0;
return jerry_undefined();
}
static int moduleInventoryRemove(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryRemove: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryRemove) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryRemove: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventoryRemove: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventoryRemove: Expected item ID as second argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
if(lua_gettop(L) >= 3) {
if(!lua_isnumber(L, 3)) {
luaL_error(L, "inventoryRemove: Expected quantity as third argument");
return 0;
if(args_count >= 3) {
if(!jerry_value_is_number(args_p[2])) {
return JS_THROW("inventoryRemove: Expected quantity as third argument");
}
uint8_t amount = (uint8_t)lua_tonumber(L, 3);
uint8_t amount = (uint8_t)jerry_value_as_number(args_p[2]);
uint8_t currentQuantity = inventoryGetCount(inventory, item);
if(amount >= currentQuantity) {
inventoryRemove(inventory, item);
return 0;
return jerry_undefined();
}
inventorySet(inventory, item, currentQuantity - amount);
return 0;
return jerry_undefined();
}
inventoryRemove(inventory, item);
return 0;
return jerry_undefined();
}
static int moduleInventoryGetCount(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryGetCount: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryGetCount) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryGetCount: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventoryGetCount: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventoryGetCount: Expected item ID as second argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
uint8_t count = inventoryGetCount(inventory, item);
lua_pushnumber(L, count);
return 1;
return jerry_number(count);
}
static int moduleInventoryIsFull(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryIsFull: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryIsFull) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryIsFull: Expected inventory pointer as first argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
bool_t isFull = inventoryIsFull(inventory);
lua_pushboolean(L, isFull);
return 1;
return jerry_boolean(isFull);
}
static int moduleInventoryItemFull(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventoryItemFull: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventoryItemFull) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventoryItemFull: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventoryItemFull: Expected item ID as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventoryItemFull: Expected item ID as second argument");
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
itemid_t item = (itemid_t)lua_tonumber(L, 2);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
itemid_t item = (itemid_t)jerry_value_as_number(args_p[1]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
bool_t isFull = inventoryItemFull(inventory, item);
lua_pushboolean(L, isFull);
return 1;
return jerry_boolean(isFull);
}
static int moduleInventorySort(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
if(!lua_islightuserdata(L, 1)) {
luaL_error(L, "inventorySort: Expected inventory pointer as first argument");
return 0;
JS_FUNC(moduleInventorySort) {
if(!jerry_value_is_object(args_p[0])) {
return JS_THROW("inventorySort: Expected inventory pointer as first argument");
}
if(!lua_isnumber(L, 2)) {
luaL_error(L, "inventorySort: Expected sort type as second argument");
return 0;
if(!jerry_value_is_number(args_p[1])) {
return JS_THROW("inventorySort: Expected sort type as second argument");
}
bool_t reverse = false;
if(lua_gettop(L) >= 3) {
if(!lua_isboolean(L, 3)) {
luaL_error(L, "inventorySort: Expected reverse flag as third argument");
return 0;
if(args_count >= 3) {
if(!jerry_value_is_boolean(args_p[2])) {
return JS_THROW("inventorySort: Expected reverse flag as third argument");
}
reverse = (bool_t)lua_toboolean(L, 3);
reverse = (bool_t)jerry_value_is_true(args_p[2]);
}
inventory_t *inventory = (inventory_t *)lua_touserdata(L, 1);
inventorysort_t sortBy = (inventorysort_t)lua_tonumber(L, 2);
inventory_t *inventory = (inventory_t *)jsUnwrapPointer(args_p[0]);
inventorysort_t sortBy = (inventorysort_t)jerry_value_as_number(args_p[1]);
assertNotNull(inventory, "Inventory pointer cannot be NULL.");
inventorySort(inventory, sortBy, reverse);
return 0;
return jerry_undefined();
}
static void moduleItem(lua_State *L) {
assertNotNull(L, "Lua state cannot be NULL");
static void moduleItem(void) {
jsEvalStr(ITEM_SCRIPT);
luaL_dostring(L, ITEM_SCRIPT);
jerry_value_t backpack = jsWrapPointer(&BACKPACK);
jsSetValue("BACKPACK", backpack);
jerry_value_free(backpack);
lua_pushlightuserdata(L, &BACKPACK);
lua_setglobal(L, "BACKPACK");
lua_register(L, "inventoryItemExists", moduleInventoryItemExists);
lua_register(L, "inventoryAdd", moduleInventoryAdd);
lua_register(L, "inventorySet", moduleInventorySet);
lua_register(L, "inventoryRemove", moduleInventoryRemove);
lua_register(L, "inventoryGetCount", moduleInventoryGetCount);
lua_register(L, "inventoryIsFull", moduleInventoryIsFull);
lua_register(L, "inventoryItemFull", moduleInventoryItemFull);
lua_register(L, "inventorySort", moduleInventorySort);
jsRegister("inventoryItemExists", moduleInventoryItemExists);
jsRegister("inventoryAdd", moduleInventoryAdd);
jsRegister("inventorySet", moduleInventorySet);
jsRegister("inventoryRemove", moduleInventoryRemove);
jsRegister("inventoryGetCount", moduleInventoryGetCount);
jsRegister("inventoryIsFull", moduleInventoryIsFull);
jsRegister("inventoryItemFull", moduleInventoryItemFull);
jsRegister("inventorySort", moduleInventorySort);
}