Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''ontalk''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

Encontrado 1 registro

  1. onTalk(cid, type, text, position) Estava de boa no meu serviço, sem nada pra fazer, então resolvi criar essa função ai, não sei se vai ter utilidade para alguém, mais ta ae, ela retorna tudo aquilo que foi dito pela criatura, o tipo, e a posição. Vamos as códigos: em creatureevent.h : depois de: CREATURE_EVENT_DIRECTION, adicione: CREATURE_EVENT_TALK, -- depois de: uint32_t executeDirection(Creature* creature, Direction old, Direction current); adicione: uint32_t executeTalk(Creature* creature, MessageClasses type, const std::string& text, const Position& position); em creatureevent.cpp : depois de: else if(type == "direction") _type = CREATURE_EVENT_DIRECTION; adicione: else if(type == "talk") _type = CREATURE_EVENT_TALK; -- depois de: case CREATURE_EVENT_DIRECTION: return "onDirection"; adicione: case CREATURE_EVENT_TALK: return "onTalk"; -- depois de: case CREATURE_EVENT_DIRECTION: adicione: case CREATURE_EVENT_TALK: return "cid, type, text, position"; -- procure pela função : uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current) depois que a função terminar adicione esta função: uint32_t CreatureEvent::executeTalk(Creature* creature, MessageClasses type, const std::string& text, const Position& position) { //onTalk(cid, type, text, pos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local type = " << (uint32_t)type << std::endl; scriptstream << "local text = " << text << std::endl; env->streamPosition(scriptstream, "position", position, 0); if(m_scriptData) scriptstream << *m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", creature->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, (uint32_t)type); lua_pushstring(L, text.c_str()); LuaInterface::pushPosition(L, position, 0); bool result = m_interface->callFunction(4); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeTalk] Call stack overflow." << std::endl; return 0; } } em game.cpp : procure a função: bool Game::internalCreatureSay(Creature* creature, MessageClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/, uint32_t statementId/* = 0*/) e depois de: Player* player = creature->getPlayer(); if(player && player->isAccountManager() && !ghostMode) { player->manageAccount(text); return true; } adicione isto: bool deny = false; CreatureEventList talkEvents = creature->getCreatureEvents(CREATURE_EVENT_TALK); for(CreatureEventList::iterator it = talkEvents.begin(); it != talkEvents.end(); ++it) { if(!(*it)->executeTalk(creature, type, text, creature->getPosition())) deny = true; } if(deny) return false; e pronto ja vai estar funcionando ! uma das utilidades dessa função é não permitir divulgação de outros server, mais pra qm tem criatividade da pra fazer mtas outras coisas, o exemplo de divulgação: local linkProibidos = {"no-ip.com", "servergame.com", "sytes.net"} function onTalk(cid, type, text, position) for _, link in pairs(linkProibidos) do if text:find(link) then return false end end return true end a tag pro xml fica: <event type="talk" name="AntiDivulga" event="script" value="antidivulga.lua"/> bom, não sei se alguém ja fez essa função mais eu sei q essa é 100% de minha autoria, e eu não permito que ela seja postada em outro forum a não ser o xtibia ! eu testei em um tfs 0.4 obrigado a todos, xotservx (miillerdomingues) bj
×
×
  • Criar Novo...