Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 01/17/19 em %

  1. Gengo

    [OtClient] Pokemon Health Info

    Eai galera do xtibia, hoje venho por meio desse post trazer para vocês uma pokebar, sei que já existe porém este é um pouco diferente do que costumamos ver. Antes de tudo faça o download do arquivo e vamos a configuração. OBS: Seu otClient precisa ter opcodes para poder funcionar. 1) Coloque o module na pasta do seu otClient em /modules. 2) No arquivo do seu servidor em data/lib/106-mainfunctions.lua coloque o seguinte trecho de código: 3) Ainda no mesmo arquivo 106-mainfunctions.lua procure pela função doOTCSendPokemonHealth e substitua ela pelo trecho a seguir: 4) Caso seu servidor não tenha a função table.serialize, adicione ela no arquivo do servidor em data/lib/012-table.lua: 5) No arquivo do seu servidor data/creaturescripts/script/login.lua coloque o seguinte trecho no final do onLogin antes do return sendPokeOTC(cid) 6) Abrindo o arquivo do npc Nurse Joy em especifico o script.lua, procure o trecho de codigo: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax) Substitui por esse: doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador")) E no finalzinho da função do mesmo arquivo lua, antes do end, coloque o seguinte codigo: for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end 7) E por ultimo no arquivo opcodes.lua localizado na pasta data/creaturescript/script/opcodes.lua procure por: if buffer == "refresh" then doOTCSendPokemonHealth(cid) end E substitui por: if buffer == "refresh" then for indice, value in pairs(getPlayerPokeballs(cid)) do doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador")) end end Bom é basicamente isso, a unica coisa que estará faltando e que vou deixar para vocês fazerem é quando o player colocar ou retirar outro pokemon na bag fazer com que o servidor chame a função sendPokeOTC(cid), não estarei ensinando essa parte pq o meu é bem diferente e não adiantaria eu mostrar como se faz, mas também não é um bixo de 7 cabeças fazer essa parte. Fazendo esse tutorial certinho e tudo mais, ficará assim no game: Espero que gostem e que entendam, desculpe-me por qualquer coisa não sou muito de explicar e ficar escrevendo tutorial. Download do arquivo: https://www.mediafire.com/file/p8wch1fogveh48e/game_poke.rar/file Scan do arquivo: https://www.virustotal.com/#/file/d88b33ad27520ddd28afdaeb7d17af26805fa3bf39400f1a30813a0da3ca1695/detection
    1 ponto
  2. #Introdução Bom hoje estarei trazendo aqui o sistema de Ping feito pelo Mock, com uma pequena adaptação feita por mim para funcionar em TFS 0.4(talvez podendo funcionar em outras) Pois o que ele disponibilizou foi apenas para TFS 0.3.6 e nem foi muito utilizado pela comunidade. Muitos servidores daqui para download tem script no talk mas a lib está totalmente errada e não tem o code nas sources. Esse sistema tem varias utilizades, podendo usar o comando !ping para verificar seu ms ou até mesmo você por para kikar jogadores com ms muito alto... Se você não sabe o cliente já tem um sistema de ping, e getOtsystime é como os.time () + os.clock (), você tem ano, mês, dia, hora, minutos, segundos, milisegundos... Enfim chega de enrolação e vamos lá! Code para TFS 0.4 e OTX: Code para TFS 0.3.6 LIB: Prontinho, agora seu servidor está pronto para utilizar as funções de Ping. Seja criativo! Ahh você é daqueles que quer tudo na mão né? Aqui vai um talkactions para ver o ping. Em talkactions/scripts crie um arquivo chamado playerping.lua, cole isto dentro: -- Script by Yan Liima(Night for xtibia.com) function onSay(cid, words, param, channel) local ms = ping.CheckPing(cid) doPlayerSendTextMessage(cid,22,"Ping aproximado --> ["..ms.."].") return true end Em talkactions.xml <talkaction words="!ping" event="script" value="playerping.lua"/>
    1 ponto
  3. Olá eu venho trazer ao Xtibia á função OnMove, bom sem mais delongas vamos ao código. Vá em creatureevent.h e procure por: CREATURE_EVENT_DIRECTION , Embaixo do texto acima cole: CREATURE_EVENT_MOVE , Depois procure por: uint32_t executeDirection(Creature* creature, Direction old, Direction current); Embaixo do texto acima cole: uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition); Vá em creatureevent.cpp e procure por: else if(tmpStr == "direction") m_type = CREATURE_EVENT_DIRECTION; Embaixo do texto acima cole: else if(tmpStr == "move") m_type = CREATURE_EVENT_MOVE; Depois procure por: case CREATURE_EVENT_DIRECTION: return "onDirection"; Embaixo do texto acima cole: case CREATURE_EVENT_MOVE: return "onMove"; Depois procure por: case CREATURE_EVENT_OUTFIT: return "cid, old, current"; Embaixo do texto acima cole: case CREATURE_EVENT_MOVE: return "cid, fromPosition, toPosition"; Agora encima da função: uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current) Coloque: uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition){ //onMove(cid, old, current) 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; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); 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[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(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)); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; }} Agora em game.cpp procure por: else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } Embaixo do ultimo " } " cole isso: bool deny = false; CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE); for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it) if(!(*it)->executeMove(creature, currentPos, destPos)) deny = true; if(deny) return RET_NOTPOSSIBLE; Pronto, Basta compilar e utilizar. Créditos Darkhaos (Por postar em outro fórum)Error404 (Por trazer ao Xtibia)
    1 ponto
  4. Liipe Silva3

    Slot

    Config.lua: classicEquipmentSlots = true Para: classicEquipmentSlots = false
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...