Ir para conteúdo

Samuel Galdino

Membro
  • Registro em

  • Última visita

Tudo que Samuel Galdino postou

  1. Para adicionar um tutor robô que responde automaticamente no canal de ajuda (Help Channel) quando um jogador escreve algo e o ADM não está online, você precisa editar o script do creaturescripts ou criar um sistema que detecta mensagens no canal de help. Como o TFS 0.3.6 (Tibia 8.60) não possui um sistema interno de interceptação direta no Help Channel, você pode contornar isso com um sistema de creaturescript que detecta mensagens no canal de help (canal 9) e responde automaticamente caso o ADM não esteja online. Passo a passo: Criando um tutor robô para o canal de ajuda 1. Abra ou crie este arquivo: data/creaturescripts/scripts/help_bot.lua 2. Adicione este script: lua Copiar Editar local ADM_NAME = "ADM" -- Nome do personagem do administradorlocal HELP_CHANNEL_ID = 9 function onTalk(cid, type, channel, msg) -- Verifica se a mensagem é no Help Channel if channel == HELP_CHANNEL_ID then -- Verifica se o ADM está online local admPlayer = getPlayerByNameWildcard(ADM_NAME) if not isPlayer(admPlayer) then doPlayerSendChannelMessage(0, "Tutor Robo", "Para suporte, mande um ticket para o ADM no e-mail: [email protected] ou adicione ele no WhatsApp: +55 11 91230-8360.", TALKTYPE_CHANNEL_O, HELP_CHANNEL_ID) end end return trueend3. Adicione o creaturescript no creaturescripts.xml: Abra o arquivo data/creaturescripts/creaturescripts.xml e adicione: xml Copiar Editar <event type="channel" name="HelpBot" script="help_bot.lua"/>4. Registre o evento no login.lua: Abra o arquivo data/creaturescripts/scripts/login.lua e adicione esta linha dentro da função onLogin: lua Copiar Editar registerCreatureEvent(cid, "HelpBot") Resultado Agora, sempre que um jogador mandar uma mensagem no Help Channel (canal 9), se o personagem chamado "ADM" não estiver online, o tutor robô automaticamente responderá com: "Para suporte, mande um ticket para o ADM no e-mail: [email protected] ou adicione ele no WhatsApp: +55 11 91230-8360." Se quiser que o nome do ADM seja outro, é só mudar a variável ADM_NAME = "ADM". Quer que ele só responda uma vez a cada X segundos por jogador, ou algo mais inteligente? Posso melhorar o script. Você disse: nao pego no tfs 0.3.6 O ChatGPT disse: Perfeito, obrigado pelo retorno! Como o TFS 0.3.6 (8.60) não possui suporte ao evento onTalk com type="channel" no creaturescripts, precisamos usar uma outra abordagem, baseada em talkactions ou em modificações no source (mais avançado). A melhor solução sem mexer no source é usar talkactions para detectar mensagens específicas e simular um tutor robô. 1. Habilitar o evento onTalk no server (creaturescript) Arquivo: luascript.cpp Procure por a função: cpp Copiar Editar void LuaScriptInterface::registerFunctions()`` Dentro dela, **adicione esta linha** (se ainda não existir): ```cpp lua_register(m_luaState, "registerCreatureEvent", LuaInterface::luaRegisterCreatureEvent); Arquivo: creatureevent.h Procure a enumeração CreatureEventType e adicione o novo tipo TALK: cpp Copiar Editar enum CreatureEventType { ... CREATURE_EVENT_CHANNEL, ... CREATURE_EVENT_TALK, // Adicione isso }; Arquivo: creatureevent.cpp Adicione o novo tipo de evento ao final do getType: cpp Copiar Editar CreatureEventType CreatureEvents::getType(const std::string& str){ ... else if(str == "talk")return CREATURE_EVENT_TALK; // novo ...} Na função configureEvent, adicione suporte ao onTalk: cpp Copiar Editar bool CreatureEvent::configureEvent(xmlNodePtr p){ ... if(m_type == CREATURE_EVENT_TALK) m_interface->reserveScriptEnv(); // reserva ambiente para o script ...} 2. Chamar o evento onTalk quando jogador fala no canal Arquivo: chat.cpp Encontre a função: cpp Copiar Editar bool Chat::talkToChannel(Player* player, MessageClasses type, const std::string& text, uint16_t channelId) Logo no início dessa função, adicione a chamada do evento: cpp Copiar Editar if (player) { CreatureEventList talkEvents = player->getCreatureEvents(CREATURE_EVENT_TALK); for(CreatureEventList::iterator it = talkEvents.begin(); it != talkEvents.end(); ++it)(*it)->executeTalk(player, type, text, channelId);} 3. Criar a função executeTalk no CreatureEvent Arquivo: creatureevent.cpp Adicione esta função: cpp Copiar Editar bool CreatureEvent::executeTalk(Creature* creature, MessageClasses type, const std::string& text, uint16_t channel){ // Função só ativa se for script registrado if(m_type != CREATURE_EVENT_TALK)return false;// Prepara o script if (!m_interface->reserveScriptEnv()) { std::cout << "[Error - CreatureEvent::executeTalk] Call stack overflow." << std::endl;return false; } ScriptEnviroment* env = m_interface->getScriptEnv(); env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition());// Empilha argumentos lua_State* L = m_interface->getLuaState(); m_interface->pushFunction(m_scriptId); LuaScriptInterface::pushThing(L, creature, false); lua_pushnumber(L, type); lua_pushstring(L, text.c_str()); lua_pushnumber(L, channel);return m_interface->callFunction(4);} Arquivo: creatureevent.h Adicione no final da classe CreatureEvent: cpp Copiar Editar bool executeTalk(Creature* creature, MessageClasses type, const std::string& text, uint16_t channel);

Informação Importante

Confirmação de Termo