Ir para conteúdo

Doplayersendchannelsdialog(Cid)


Posts Recomendados

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/

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 2 weeks later...
×
×
  • Criar Novo...