Nome: doPlayerSendChannelsDialog(cid)
Tipo: Função LUA
Autor: Oneshot
Fala, bandiputa!
Recentemente baixei um servidor de Pokémon pela primeira vez para ver como funcionavam os sistemas lá dentro e fiquei impressionado com o sistema de clicar no computador e abrir a janela de canais.
E então eu pensei comigo - "Vou ver como é que eles fizeram, né." - Fucei as pastas e não tinha nada e então a realidade me bateu na cara. Sim, aquela era uma função programada diretamente no código fonte do servidor e mais uma vez a realidade me bateu denovo - Ninguém disponibiliza as sources de servidores de Pokémon.
Então o que eu fiz? Simples, desenvolvi minha própria função de abrir a janela de canais e ela é realmente simples, vocês mesmos irão ver.
Em luascript.h, procure por:
static int32_t luaGetChannelList(lua_State* L);
Logo após, adicione:
static int32_t luaDoPlayerSendChannelsDialog(lua_State* L);
Em luascript.cpp, procure por:
lua_register(m_luaState, "getChannelList", LuaInterface::luaGetChannelList);
Logo após, adicione:
lua_register(m_luaState, "doPlayerSendChannelsDialog", LuaInterface::luaDoPlayerSendChannelsDialog);
Ainda em luascript.cpp, procure por:
int32_t LuaInterface::luaGetChannelList(lua_State* L) { //getChannelList() lua_newtable(L); ChannelList list = g_chat.getPublicChannels(); ChannelList::const_iterator it = list.begin(); for(uint32_t i = 1; it != list.end(); ++it, ++i) { createTable(L, i); setField(L, "id", (*it)->getId()); setField(L, "name", (*it)->getName()); setField(L, "flags", (*it)->getFlags()); setField(L, "level", (*it)->getLevel()); setField(L, "access", (*it)->getAccess()); pushTable(L); } return 1; }
E logo após, adicione:
int32_t LuaInterface::luaDoPlayerSendChannelsDialog(lua_State* L) { //doPlayerSendChannelsDialog(uid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->sendChannelsDialog(); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; }
Agora é só compilar seu servidor no IDE de sua preferência.
Exemplo de Uso:
function onUse(cid, item, fromPosition, itemEx, toPosition) return doPlayerSendChannelsDialog(cid) end
Se o nome estiver muito grande é só adicionar isso no 100-compat.lua
sendChannelsDialog = doPlayerSendChannelsDialog
Vale lembrar que isso é feito nas sources, no código-fonte do seu servidor.
Abração \o/