Itutorial
Excellent OT User
- Joined
- Dec 23, 2014
- Messages
- 2,307
- Solutions
- 68
- Reaction score
- 982
I am getting this error: PANIC: unprotected error in call to Lua API (attempt to index a nil value)
Im sure its something simple..
Events.cpp
Events.h
Player.cpp
events.lua
events.xml
Im sure its something simple..
Events.cpp
C++:
} else if (methodName == "onStepTile") {
info.playerOnStepTile = event;
C++:
bool Events::eventPlayerOnStepTile(Player* player, const Position& fromPosition, const Position& toPosition)
{
// Player:onStepTile(fromTile, toTile)
if (info.playerOnStepTile == -1) {
return true;
}
if (!scriptInterface.reserveScriptEnv()) {
std::cout << "[Error - Events::eventPlayerOnStepTile] Call stack overflow" << std::endl;
return false;
}
ScriptEnvironment* env = scriptInterface.getScriptEnv();
env->setScriptId(info.playerOnStepTile, &scriptInterface);
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.playerOnStepTile);
LuaScriptInterface::pushUserdata<Player>(L, player);
LuaScriptInterface::setMetatable(L, -1, "Player");
LuaScriptInterface::pushPosition(L, fromPosition);
LuaScriptInterface::pushPosition(L, toPosition);
return scriptInterface.callFunction(3);
}
Events.h
C++:
int32_t playerOnStepTile = -1;
C++:
bool eventPlayerOnStepTile(Player* player, const Position& fromPosition, const Position& toPosition);
Player.cpp
C++:
void Player::onWalk(Direction& dir)
{
const Position& fromPos = getPosition();
const Position& toPos = getNextPosition(dir, fromPos);
if (!g_events->eventPlayerOnStepTile(this, fromPos, toPos)) {
return;
}
Creature::onWalk(dir);
setNextActionTask(nullptr);
setNextAction(OTSYS_TIME() + getStepDuration(dir));
}
events.lua
Lua:
function Player:onStepTile(fromPosition, toPosition)
if hasEventCallback(EVENT_CALLBACK_ONSTEPTILE) then
return EventCallback(EVENT_CALLBACK_ONSTEPTILE, self, fromPosition, toPosition)
end
return true
end
events.xml
XML:
<event class="Player" method="onStepTile" enabled="1" />