função lua no c++

izac ximenes
em Resolvidos

izac ximenes

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 26

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?

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

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);

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

izac ximenes

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 26

cara eu coloquei esse dois ai

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Erros na compilação?

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

izac ximenes

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 26

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;
}

 

Gabrieltxu

O Héroi
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/06/12Posts: 2180Gênero: MasculinoChar no Tibia: Supreme Player

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

Canal do facebook de lives!! cola la galera me ajudar seguindo a pagina hehe ! ❤️

 

               https://www.facebook.com/Tuxao0

izac ximenes

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 26

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;

 

dalvorsn

õ/
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/12/11Posts: 750Gênero: Masculino

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

"A covardia coloca a questão: É seguro? O comodismo coloca a questão: É popular? A etiqueta coloca a questão: é elegante? Mas a consciência coloca a questão, É correto? E chega uma altura em que temos de tomar uma posição que não é segura, não é elegante, não é popular, mas o temos de fazer porque a nossa consciência nos diz que é essa a atitude correta."

(Martin Luther King)