IZ
dúvida

função lua no c++

Por izac ximenes, 21 de set. de 2015 em Resolvidos

9
1.4k
21 de setembro de 2015 às 19:09

Galera fiz um função no c++ para inserir level do pokemon


int32_t LuaScriptInterface::luaSetPokemonLevel(lua_State* L)
{


//setPokemonLevel(cid,level)
ScriptEnviroment* env = getEnv();
int32_t levelpoke = popNumber(L);
if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
{
monster->levelsummon = levelpoke;
lua_pushboolean(L, true);
}
else
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
}


return 1;
}


so que quando uso ela no lua
da esse erro no console

 attempt to call global 'setPokemonLevel' (a nil value)

como resolvo isso alguem sabe?

zipter98Z
21 de setembro de 2015 às 19:16

Pelo fato da função não estar sendo encontrada no código Lua, significa que sua instalação não foi bem sucedida. Talvez você tenha esquecido de colocar alguma coisa em luascript.cpp/luascript.h, ou um erro tenha aparecido durante a compilação.

Em luascript.cpp, além dessa parte mostrada, você também deve colocar, em logicamente outra parte do arquivo, isso:

//setPokemonLevel(cid, level)
lua_register(m_luaState, "setPokemonLevel", LuaScriptInterface::luaSetPokemonLevel);
E em luascript.h, isso:
static int32_t luaSetPokemonLevel(lua_State* L);

Editado Setembro 21 por zipter98

21 de setembro de 2015 às 19:33

cara eu coloquei esse dois ai

zipter98Z
21 de setembro de 2015 às 19:43

Erros na compilação?

21 de setembro de 2015 às 19:44

nenhum erro

 

olha tentei melhora a função

 

int32_t LuaScriptInterface::luaSetPokemonLevel(lua_State* L)
{


//setPokemonLevel(cid,levelpoke)
int32_t levelpoke = (int32_t)popNumber(L);


ScriptEnviroment* env = getEnv();


if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
{
if(monster->isSummon())
{
monster->levelsummon = levelpoke;
lua_pushboolean(L, true);
}
else
{
monster->level = levelpoke;
lua_pushboolean(L, true); 
}
}
else
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
}


return 1;
}

 

GabrieltxuG
21 de setembro de 2015 às 23:05

está faltando você setar um valor a essa função entao cara , tipo sei la faz com que já começe com o valor 0

22 de setembro de 2015 às 07:27

está faltando você setar um valor a essa função entao cara , tipo sei la faz com que já começe com o valor 0

txu como assim ? olha levelsummon por padrão ele começa com numero 5 ja

olha

Monster::Monster(MonsterType* _mType):
Creature()
{
isIdle = true;
isMasterInRange = false;
teleportToMaster = false;
mType = _mType;
spawn = NULL;
raid = NULL;
levelsummon = 5;

 

Editado Setembro 22 por izac ximenes

dalvorsnD
24 de setembro de 2015 às 13:39

Considerando que tudo que tu disse é verdade, e que esta usando o binario correto gerado pela compilação, a unica coisa que poderia explicar isso é que em alguma lib esta setando a variavel setPokemonLevel como nil. Dê um find in files nos arquivos do servidor e veja se acha algo semelhante

1 mês depois...
LumusL
26 de outubro de 2015 às 23:25

Tópico Movido
Este tópico foi movido de "OTServSuporte OTServSuporte Programação"
para "OTServSuporte OTServSuporte ProgramaçãoPedidos e dúvidas resolvidos - Programação".