luanmaximus123
New Member
- Joined
- Oct 28, 2010
- Messages
- 11
- Reaction score
- 1
Hi guys, I'm trying to add the addWing function, but something seems to be wrong. I don't know what it could be. Can someone please help me?
player.cpp
player.h
luascript.cpp
luascript.h
.lua
Error:
player.cpp
Lua:
bool Player::addWing(uint8_t wingId)
{
if (!g_game.wings.getWingByID(wingId)) {
return false;
}
const uint8_t tmpWingId = wingId - 1;
const uint32_t key = PSTRG_WINGS_RANGE_START + (tmpWingId / 31);
int32_t value;
if (getStorageValue(key, value)) {
value |= (1 << (tmpWingId % 31));
}
else {
value = (1 << (tmpWingId % 31));
}
addStorageValue(key, value);
return true;
}
bool Player::addAura(uint8_t auraId)
{
if (!g_game.auras.getAuraByID(auraId)) {
return false;
}
const uint8_t tmpAuraId = auraId - 1;
const uint32_t key = PSTRG_AURAS_RANGE_START + (tmpAuraId / 31);
int32_t value;
if (getStorageValue(key, value)) {
value |= (1 << (tmpAuraId % 31));
}
else {
value = (1 << (tmpAuraId % 31));
}
addStorageValue(key, value);
return true;
}
player.h
Code:
bool addAura(uint8_t auraId);
bool addWing(uint8_t wingId);
luascript.cpp
Code:
registerMethod("Player", "addWing", LuaScriptInterface::luaPlayerAddWing);
registerMethod("Player", "addAura", LuaScriptInterface::luaPlayerAddAura);
Code:
int LuaScriptInterface::luaPlayerAddWing(lua_State* L)
{
// player:addWing(wingId or wingName)
Player* player = getUserdata<Player>(L, 1);
if (!player) {
lua_pushnil(L);
return 1;
}
Wing* wing = nullptr;
if (isNumber(L, 2)) {
wing = g_game.wings.getWingByID(getNumber<uint8_t>(L, 2));
}
else {
wing = g_game.wings.getWingByName(getString(L, 2));
}
if (!wing) {
lua_pushnil(L);
return 1;
}
pushBoolean(L, player->addWing(wing->id));
return 1;
}
int LuaScriptInterface::luaPlayerAddAura(lua_State* L)
{
// player:addAura(id or name)
Player* player = getUserdata<Player>(L, 1);
if (!player) {
lua_pushnil(L);
return 1;
}
Aura* aura = nullptr;
if (isNumber(L, 2)) {
aura = g_game.auras.getAuraByID(getNumber<uint8_t>(L, 2));
}
else {
aura = g_game.auras.getAuraByName(getString(L, 2));
}
if (!aura) {
lua_pushnil(L);
return 1;
}
pushBoolean(L, player->addAura(aura->id));
return 1;
}
luascript.h
Code:
static int luaPlayerAddWing(lua_State* L);
static int luaPlayerAddAura(lua_State* L);
.lua
Code:
player:addWing(1)
Error:
Code:
Lua Script Error: [Scripts Interface]
C:\forgottenserver-1.4\data\scripts\actions\tools\wings.lua:callback
C:\forgottenserver-1.4\data\scripts\actions\tools\wings.lua:16: attempt to call method 'addWings' (a nil value)
stack traceback:
[C]: in function 'addWings'
C:\forgottenserver-1.4\data\scripts\actions\tools\wings.lua:16: in function <C:\forgottenserver-1.4\data\scripts\actions\tools\wings.lua:6>