Carregando variáves de arquivo LUA
Autor: Mauricio Sipmann | Publicado: 2009-08-13T07:41:00-03:00

Ol&#225;, depois de um tempo sem postar nada, trago um exemplo de como se carregar vari&#225;veis de um arquivo lua para o seu aplicativo em c++, utilizando Dev-C++. A linguagem lua vem sendo utilizada em muitos jogos, um grande exemplo &#233; o jogo online Tibia, n&#227;o &#233; grande a atua&#231;&#227;o da linguagem lua neste jogo, ela &#233; utilizada para se carregar vari&#225;veis como SERVIDOR, USUARIO, VERS&#195;O, entre outros detalhes.Ent&#227;o vamos l&#225;. Primeiramente temos que entender que a biblioteca que utilizaremos para carregar arquivos lua foi inicialmente desenvolvida para C, portanto, se voc&#234; pretende utilizar C++ &#233; necess&#225;rio um comando para que seja possivel utilizar.externn "C" {    #include "lua.h"    #include "lualib.h"    #include "lauxlib.h"}Agora vamos ao nosso arquivo lua que guardar&#225; as vari&#225;veis. Crie um arquivo com a exten&#231;&#227;o lua e grave as seguintes varei&#225;veis:SERVIDOR = "localhost"USUARIO = "ROOT"SENHA = "123"Salve-o com o nome que desejar, desde que esteja na mesma pasta que o seu projeto. Para que o nosso programa possa ler as vari&#225;veis quando quiser, sem necessitar de um c&#243;digo enorme toda a vez que for capturar a vari&#225;vel, vamos criar uma fun&#231;&#227;o CarregaVariavel do tipo Const Char*. Esta fun&#231;&#227;o recebera o seguinte par&#226;metro:variavel é a variavel que será carregada.const char* CarregaVariavel(char* variavel){   // Variavel   lua_State *LuaVar = lua_open();   // Carrega o arquivo   int sts = luaL_loadfile(LuaVar, "hello.lua");   // Se carregou o arquivo   if( sts== 0 ) {      // Carrega os dados do arquivo em si...      sts = lua_pcall(LuaVar, 0, LUA_MULTRET,0);}   // Captura o valor da variavel entre aspas.   lua_getglobal(LuaVar,variavel);   // Atribui a uma variavel o valor capturado   return lua_tostring(LuaVar,-1);   lua_close(LuaVar);}Para chamarmos a nossa fun&#231;&#227;o, declararemos uma variavel do tipo const char e chamamos a nossa fun&#231;&#227;o. como abaixoconst char *teste;teste = CarregaVariavel("SERVIDOR");O nosso programa final pode ser visto na listagem abaixo.const char* CarregaVariavel(char* variavel);int main( int argc, char ** argv) {    const char *servidor;    const char *usuario;    const char *senha;    servidor = CarregaVariavel( "SERVIDOR" );    cout << servidor << endl;    usuario = CarregaVariavel("USUARIO");    cout << usuario << endl;    senha = CarregaVariavel("SENHA");    cout << senha << endl;    system("pause");    return 0;}const char* CarregaVariavel(char* variavel){   // Variavel   lua_State *LuaVar = lua_open();   // Carrega o arquivo   int sts = luaL_loadfile(LuaVar, "hello.lua");   // Se carregou o arquivo   if( sts== 0 ) {      // Carrega os dados do arquivo em si...      sts = lua_pcall(LuaVar, 0, LUA_MULTRET,0);}   // Captura o valor da variavel entre aspas.   lua_getglobal(LuaVar,variavel);   // Atribui a uma variavel o valor capturado   return lua_tostring(LuaVar,-1);   lua_close(LuaVar);}"Mas pô sipmann.. deu erro na hora de compila aqui no dev...??"... Para poder compilar &#233; necess&#225;rio baixar o pacote (atrav&#233;s do sistema de pacotes do dev mesmo) "lua"... "Prontooo... e agora???"... Agora &#233; necess&#225;rio dizer ao compilador que iremos utilizar a biblioteca que acabamos de baixar (lembram do acesso ao mysql??? mesma coisa) Project >> Project Options >> Parameters... ai na lista "Linker" adicionem as duas linhas a seguir...-lLua -lLualibPronto... s&#243; compilar e brincar... Abra&#231;&#227;o e espero que tenham gostado... qualquer duvida s&#243; posta ai... at&#233;