Hi,
Im trying to avoid people using a item with a new event function but it seems like I did something wrong
events.cpp
and
events.h
and in game.cpp under playerUseItem and playerUseItemEx function
like that:

lua:
The script detects an onUse action, but I can still use the item
And yes I registed everything on events.xml, player.lua, eventscallback etc.
A experienced c++ prob can see the problem alredy xD
Im trying to avoid people using a item with a new event function but it seems like I did something wrong
events.cpp
C++:
void Events::eventPlayerOnUseItem(Player* player, Item* item)
{
// Player:onUseItem(item)
if (info.playerOnUseItem == -1) {
return;
}
if (!scriptInterface.reserveScriptEnv()) {
std::cout << "[Error - Events::eventPlayerOnUseItem] Call stack overflow" << std::endl;
return;
}
ScriptEnvironment* env = scriptInterface.getScriptEnv();
env->setScriptId(info.playerOnUseItem, &scriptInterface);
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.playerOnUseItem);
LuaScriptInterface::pushUserdata<Player>(L, player);
LuaScriptInterface::setMetatable(L, -1, "Player");
LuaScriptInterface::pushUserdata<Item>(L, item);
LuaScriptInterface::setItemMetatable(L, -1, item);
scriptInterface.callFunction(2);
}
and
C++:
} else if (methodName == "onUseItem") {
info.playerOnUseItem = event;
events.h
C++:
int32_t playerOnUseItem = -1;
and
void eventPlayerOnUseItem(Player* player, Item* item);
and in game.cpp under playerUseItem and playerUseItemEx function
C++:
g_events->eventPlayerOnUseItem(player, item);
like that:

lua:
LUA:
local ec = EventCallback
ec.onUseItem = function(player, item)
if player:getStorageValue(200) == 1 then
player:sendCancelMessage('Not Possible.')
return false
end
return true
end
ec:register()
And yes I registed everything on events.xml, player.lua, eventscallback etc.
A experienced c++ prob can see the problem alredy xD
Last edited: