Oneshot 732 Postado Julho 14, 2012 Share Postado Julho 14, 2012 (editado) 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 Julho 14, 2012 por Oneshot Link para o comentário https://xtibia.com/forum/topic/189725-doplayersendchannelsdialogcid/ Compartilhar em outros sites More sharing options...
Leoxtibia 137 Postado Julho 21, 2012 Share Postado Julho 21, 2012 Cara, juro que esses dias estava procurando exatamente isso, como que funcionava. Muito bom. Link para o comentário https://xtibia.com/forum/topic/189725-doplayersendchannelsdialogcid/#findComment-1297802 Compartilhar em outros sites More sharing options...
JoseAngel18 1 Postado Agosto 2, 2012 Share Postado Agosto 2, 2012 muito bom mano, você pode ajudar com esse código: http://www.xtibia.com/forum/topic/190881-funcao-getdirectiontowalk-pda/? é necessário pra order system o sistema de PDA Link para o comentário https://xtibia.com/forum/topic/189725-doplayersendchannelsdialogcid/#findComment-1307793 Compartilhar em outros sites More sharing options...
lucashgas 53 Postado Agosto 13, 2012 Share Postado Agosto 13, 2012 como eu faço para colocar uma storage no channel? só mostrar o canal help por exemplo se o player tiver a storage 1070? Link para o comentário https://xtibia.com/forum/topic/189725-doplayersendchannelsdialogcid/#findComment-1316086 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Agosto 13, 2012 Autor Share Postado Agosto 13, 2012 Você teria que editar seu chat.cpp e adicionar esse recurso. Link para o comentário https://xtibia.com/forum/topic/189725-doplayersendchannelsdialogcid/#findComment-1316192 Compartilhar em outros sites More sharing options...
Posts Recomendados