Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''ongainexp(cid value)''.

  • 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. Function onGainExp(cid, value) Criador: knightxd Descrição: Esta função é ativada quando uma criatura ganha EXP. E você pode retornar falso (return false) para que está criatura não ganhe EXP. Instalação: Creatureevent.h procure por : CREATURE_EVENT_OUTFIT, e adicione embaixo : CREATURE_EVENT_GAINEXP, Novamente, Procure por uint32_t executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current); e adicione embaixo: uint32_t executeGainExp(Player* player, int32_t value); Agora, Abra creatureevent.cpp e Procure por : else if(tmpStr == "outfit") m_type = CREATURE_EVENT_OUTFIT; e adicione embaixo: else if(tmpStr == "gainexp") m_type = CREATURE_EVENT_GAINEXP; Procure por: case CREATURE_EVENT_OUTFIT: return "onOutfit"; e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "onGainExp"; Agora, Procure por: case CREATURE_EVENT_OUTFIT: return "cid, old, current";~ e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "cid, value"; Agora, Procure por: std::cout << "[Error - CreatureEvent::executeStatsChange] Call stack overflow." << std::endl; return 0; } } embaixo adicione: uint32_t CreatureEvent::executeGainExp(Player* player, int32_t value) { //onGainExp(cid, value) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local value = " << value << std::endl; 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", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, value); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeGainExp] Call stack overflow." << std::endl; return 0; } } Agora em Player.cpp procure por bool Player::gainExperience(double& gainExp e embaixo adicione: if(gainExp >= 1) { bool deny = false; CreatureEventList gainExpEvents = this->getCreatureEvents(CREATURE_EVENT_GAINEXP); for(CreatureEventList::iterator it = gainExpEvents.begin(); it != gainExpEvents.end(); ++it) { if(!(*it)->executeGainExp(this, gainExp)) deny = true; } if(deny) return false; } Exemplo de uso: function onGainExp(cid, value) print(value) end Não esqueça de registrar o evento no onlogin Considerações finais: Sim eu sei que já existe um sistema igual no xtibia, porem ele esta errado, este funciona em qualquer source. Desculpem pessoal, mais o xtibia tinha cortado um pedaço do tutorial, e ele estava incompleto, Agora ja foi corrigido.
×
×
  • Criar Novo...