Poke X Ice 52 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 (editado) Boa tarde, muito gente estava pedindo como adicionar essa pokemonbar ao jogo. então decidi postar testado na pokemon dash bolz 2.0 futura atualização: Spoiler depois vou atualizar esse tópico, poderá revive seu pokemon pela pokemonbar já tenho depois vou publicar. foto: Spoiler vamos começar? vá até servidor/data/action/goback.lua Spoiler embaixo de: Spoiler local effect = pokeballs[btype].effect if not effect then effect = 21 end adicione isso: Spoiler if not getItemAttribute(item.uid, "tadport") and ballName then doItemSetAttribute(item.uid, "tadport", fotos[ballName]) end embaixo de: Spoiler doCreatureSay(cid, mgo, TALKTYPE_MONSTER) adicione isso: Spoiler if getItemAttribute(item.uid, "ballorder") then doPlayerSendCancel(cid, "KGT,"..getItemAttribute(item.uid, "ballorder").."|".."0") doPlayerSendCancel(cid, "") end embaixo de: Spoiler if useOTClient then doPlayerSendCancel(cid, '12//,show') --alterado v1.7 end adicione isso: Spoiler local owner = getCreatureMaster(cid) doOTCSendPokemonHealth(owner) agora em servidor/data/lib/ crie um arquivo chamado liferBar.lua Spoiler e coloque isso dentro: Spoiler function onPokeBarLife(cid) if isSummon(cid) and isPlayer(getCreatureMaster(cid)) then local itemBall = getPlayerSlotItem(getCreatureMaster(cid), CONST_SLOT_FEET) local hp = math.ceil((getCreatureHealth(cid) * 100) / getCreatureMaxHealth(cid)) local orde = getItemAttribute(itemBall.uid, "ballorder") if orde then doPlayerSendCancel(getCreatureMaster(cid), "pGS,"..hp.."|"..orde.."|"..getPokeName(cid)) doPlayerSendCancel(getCreatureMaster(cid), "") end end end agora em servido/data/lib/somefunctions.lua Spoiler procure por: Spoiler doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") em baixo adicione: Spoiler doItemSetAttribute(item, "tadport", fotos[pokemon]) agora vá até ultima linha de dois espaços e adicione isso: Spoiler postado na pastebin pq aqui fica bugado: https://pastebin.com/qTd3dEzs agora vá em servidor/data/lib/catch system.lua Spoiler embaixo de Spoiler doItemSetAttribute(item, "description", description) adicione embaixo isso: Spoiler doItemSetAttribute(item, "tadport", fotos[poke]) agora vá em servidor/data/lib/cooldown bar.lua Spoiler troque por esse:https://pastebin.com/MLZsy8AK agora vá em servidor/data/lib/level system.lua Spoiler procure por: Spoiler doSendMagicEffect(getThingPos(item2.uid), 18) embaixo adicione isso: Spoiler doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo]) doItemSetAttribute(pokeball.uid, "tadport", fotos[theevo]) doUpdatePokemonsBar(cid) agora vá em servidor/data/creaturescript/script/exp2.0.lua Spoiler embaixo de : Spoiler if isSummon(cid) and valor ~= 0 then adicione isso Spoiler local owner = getCreatureMaster(cid) doOTCSendPokemonHealth(owner) doUpdatePokeInfo(owner) onPokeBarLife(cid) ficando assim: Spoiler if isSummon(cid) and valor ~= 0 then local owner = getCreatureMaster(cid) doOTCSendPokemonHealth(owner) doUpdatePokeInfo(owner) onPokeBarLife(cid) agora vá em servidor/data/creaturescript/script/goback.lua Spoiler dentro da função: Spoiler if useOTClient then end deixe ela assim: Spoiler if useOTClient then doPlayerSendCancel(owner, '12//,hide') --alterado v1.7 doPlayerSendCancel(owner, "pGS,".."0".."|"..getItemAttribute(thisball.uid, "ballorder").."|"..getPokeName(cid)) doPlayerSendCancel(owner, "") end agora vá em servidor/data/creaturescript/script/login.lua Spoiler procure por: Spoiler function onLogin(cid) adicione embaixo Spoiler doUpdatePokemonsBar(cid) procure por: Spoiler registerCreatureEvent(cid, "task_count") adicione embaixo: Spoiler doUpdatePokemonsBar(cid) agora vá em servidor/data/talkactions/script Spoiler crie um arquivo chamado: poke.lua e adicione isso dentro Spoiler local EFFECTS = { ["Perfect Zygarde Full"] = 45, ["Mystic Mewtwo"] = 136, ["Groudon"] = 34, ["Shiny Groudon"] = 44, ["Arch Heatran"] = 105, ["Obscure Arceus"] = 55, ["Zygarde M1"] = 45, ["Zygarde M2"] = 45, ["Zygarde M3"] = 105, ["Tornadus"] = 152, ["Landorus"] = 152, ["Thundurus"] = 152, ["Majestic Lugia M1"] = 136, ["Majestic Lugia M2"] = 136, ["Majestic Lugia M3"] = 136, ["Mew"] = 136, ["Mewtwo"] = 136, ["Shiny Mew"] = 136, ["Shiny Mewtwo"] = 136, ["Giratina Star"] = 55, ["Giratina Star M1"] = 55, ["Giratina Star M2"] = 55, ["Giratina Star M3"] = 55, ["Raikou"] = 360, ["Kyogre"] = 17, ["Shiny Kyogre"] = 17, ["Rayquaza"] = 17, ["Suicune"] = 17, ["Ditto"] = 17, ["Phione"] = 17, ["Zoroak"] = 55, ["Shiny Zoroak"] = 55, ["Zygard"] = 55, ["Regigigas"] = 35, ["Shiny Regigigas"] = 26, ["Genesect"] = 26, ["Zekrom"] = 26, ["Shiny Zekrom"] = 26, ["Black Zygarde"] = 55, ["Black Alpha Zekrom"] = 55, ["Black Groudon"] = 55, ["Deoxys Lunar"] = 55, } local cd = 1 local function volta(cid, init) exhausted = 10 storage = 31332 if(getPlayerStorageValue(cid, storage) > os.time() and getPlayerStorageValue(cid, storage) < 100+os.time()) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait another " .. getPlayerStorageValue(cid, storage) - os.time() .. ' second' .. ((getPlayerStorageValue(cid, storage) - os.time()) == 1 and "" or "s") .. " to use new pokemon.") return true end -- if getPlayerStorageValue(cid, 69891) >= 1 then -- doPlayerSendCancel(cid, "Voce nao pode chamar seu pokemon enquanto usa seu pet.") -- return false --alterado v1.5 -- end if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid > 0 then local item = getPlayerSlotItem(cid, CONST_SLOT_FEET) if getPlayerStorageValue(cid, 912351) > os.time () then doPlayerSendCancel(cid, "Espere "..getPlayerStorageValue(cid, 912351) - os.time ().." segundo(s) para usar novamente") return true end if exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true end if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 75846) >= 1 or getPlayerStorageValue(cid, 5700) >= 1 then --alterado v1.9 << return true end local ballName = getItemAttribute(item.uid, "poke") local btype = getPokeballType(item.itemid) local usando = pokeballs[btype].use local effect = pokeballs[btype].effect if not effect then effect = 21 end if not getItemAttribute(item.uid, "tadport") and ballName then doItemSetAttribute(item.uid, "tadport", fotos[ballName]) end unLock(item.uid) --alterado v1.8 if item.itemid == usando then -- if getPlayerStorageValue(cid, 990) == 1 then -- GYM -- doPlayerSendCancel(cid, "You can't return your pokemon during gym battles.") -- return true -- end if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end if #getCreatureSummons(cid) == 2 and getPlayerStorageValue(cid, 212124) >= 1 then doPlayerSendCancel(cid, "You can't do that while is controling a mind") return true --alterado v1.5 end if #getCreatureSummons(cid) <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local cd = getCD(item.uid, "blink", 30) if cd > 0 then setCD(item.uid, "blink", 0) end local z = getCreatureSummons(cid)[1] if getCreatureCondition(z, CONDITION_INVISIBLE) and not isGhostPokemon(z) then return true end doReturnPokemon(cid, z, item, effect) end if init then if item.itemid == pokeballs[btype].on then if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end --------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boost = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level+boost) then doPlayerSendCancel(cid, "You need level "..(x.level+boost).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --alterado v1.8 \/ if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then if not getItemAttribute(item.uid, "hands") then doSetItemAttribute(item.uid, "hands", 0) end local hands = getItemAttribute(item.uid, "hands") doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1) end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) end -------------------------------------------------------------------------- ---if getCreatureName(pk) == "Ditto" or getCreatureName(pk) == "Shiny Ditto" then --edited -- local left = getItemAttribute(item.uid, "transLeft") -- local name = getItemAttribute(item.uid, "transName") -- if left and left > 0 then -- setPlayerStorageValue(pk, 1010, name) -- doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) -- addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) -- doItemSetAttribute(item.uid, "transBegin", os.clock()) -- else -- setPlayerStorageValue(pk, 1010, getCreatureName(pk) == "Ditto" and "Ditto" or "Shiny Ditto") --edited -- end -- end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) -- doCureWithY(getCreatureMaster(pk), pk) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_ORANGE_1) if getItemAttribute(item.uid, "ballorder") then doPlayerSendCancel(cid, "KGT,"..getItemAttribute(item.uid, "ballorder").."|".."0") end setPlayerStorageValue(cid, 912351, os.time () + cd) doSendMagicEffect(getCreaturePosition(pk), effect) local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb, "addon") if not look then doSetItemAttribute(pb, "addon", 0) end if look and look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end if useOTClient then doPlayerSendCancel(cid, '12//,show') --alterado v1.7 end local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end end end end if useKpdoDlls then doUpdateMoves(cid) end return true end function onSay(cid, words, param, channel) if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid > 0 then if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "ballorder") == tonumber(param) then volta(cid, true) return true else volta(cid, false) end end doMoveBar(cid, tonumber(param)) volta(cid, true) return true end agora em servidor/data/talkactions.xml Spoiler adicione essa tag <talkaction words="!@pokebar@" script="poke.lua"/> agora vamos para source do jogo: Spoiler vamos em game.cpp embaixo de: Spoiler void Game::showHotkeyUseMessage(Player* player, Item* item) { int32_t subType = -1; if(item->hasSubType() && !item->hasCharges()) subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), subType, false); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } adicione isso: Spoiler bool Game::doMoveBar(uint32_t playerId, uint8_t opId) { Player* player = getPlayerByID(playerId); Container* container; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(Item* item = player->getInventoryItem((slots_t)i)) { boost::any value = (item)->getAttribute("poke"); boost::any border = (item)->getAttribute("ballorder"); if(value.type() == typeid(std::string) && border.type() == typeid(int32_t)) { if(boost::any_cast<int32_t>(border) == opId && i == ? return false; if(boost::any_cast<int32_t>(border) == opId && i == 10) { Thing* bthing = player->__getThing(10); Thing* ballPoke = player->__getThing(8); if(ballPoke && !ballPoke->getItem()->isNotMoveable()) { if(bthing) { boost::any bbpb1 = ballPoke->getItem()->getAttribute("poke"); boost::any bbpb2 = bthing->getItem()->getAttribute("poke"); boost::any borderS = bthing->getItem()->getAttribute("ballorder"); if (!bbpb1.empty() && !bbpb2.empty() && borderS.type() == typeid(int32_t)) { int32_t pouitS = boost::any_cast<int32_t>(borderS); if(opId == pouitS) { Cylinder* acylinder = ballPoke->getItem()->getParent(); Cylinder* bcylinder = bthing->getItem()->getParent(); int32_t aitemIndex = acylinder->__getIndexOfThing(ballPoke->getItem()); int32_t bitemIndex = bcylinder->__getIndexOfThing(bthing->getItem()); internalRemoveItem(NULL, ballPoke->getItem()); internalRemoveItem(NULL, bthing->getItem()); Item* aa = Item::CreateItem(ballPoke->getItem()->getID(), ballPoke->getItem()->getItemCount()); aa->copyAttributes(ballPoke->getItem()); internalAddItem(NULL, acylinder, aa, INDEX_WHEREEVER, FLAG_NOLIMIT); int16_t stcpos; Position posa; Position posb; posb.x = 65535; posb.y = 10; posb.z = 0; internalGetPosition(aa, posa, stcpos); playerMoveThing(playerId, posa, aa->getClientID(), 0, posb, 1); Item* bb = Item::CreateItem(bthing->getItem()->getID(), bthing->getItem()->getItemCount()); bb->copyAttributes(bthing->getItem()); internalAddItem(NULL, acylinder, bb, INDEX_WHEREEVER, FLAG_NOLIMIT); internalGetPosition(bb, posa, stcpos); posb.y = 8; playerMoveThing(playerId, posa, bb->getClientID(), 0, posb, 1); return true; } } } }else { if(bthing) { boost::any bbpb1 = bthing->getItem()->getAttribute("poke"); boost::any borderS = bthing->getItem()->getAttribute("ballorder"); if (!bbpb1.empty() && borderS.type() == typeid(int32_t)) { int32_t pouitS = boost::any_cast<int32_t>(borderS); if(opId == pouitS) { int16_t stcpos; Position posa; Position posb; posb.x = 65535; posb.y = 8; posb.z = 0; internalGetPosition(bthing->getItem(), posa, stcpos); playerMoveThing(playerId, posa, bthing->getItem()->getClientID(), 0, posb, 1); return true; } } } } } } /////////////////////////////////////////////// if(item->getContainer()) { container = item->getContainer(); for(ContainerIterator sb = container->begin(), end = container->end(); sb != end; ++sb) { Item* ballSLot = (*sb)->getItem(); if(ballSLot); { boost::any value = ballSLot->getAttribute("poke"); boost::any border = ballSLot->getAttribute("ballorder"); if(value.type() == typeid(std::string) && border.type() == typeid(int32_t)) { int32_t pouit = boost::any_cast<int32_t>(border); if(opId == pouit) { Thing* ballPoke = player->__getThing(8); if(ballPoke && !ballPoke->getItem()->isNotMoveable()) { Cylinder* ballPokeCylinder = ballPoke->getItem()->getParent(); //slot8 Cylinder* ballOrderCylinder = ballSLot->getParent(); //slotbag int32_t ballPokeIndex = ballPokeCylinder->__getIndexOfThing(ballPoke->getItem()); //slot8 int32_t ballOrderIndex = ballOrderCylinder->__getIndexOfThing(ballSLot); //slotbag internalRemoveItem(NULL, ballPoke->getItem()); //slot8 internalRemoveItem(NULL, ballSLot); //slotbag Item* CreateBallSLot = Item::CreateItem(ballSLot->getID(), ballSLot->getItemCount()); //slotbag CreateBallSLot->copyAttributes(ballSLot); //slotbag internalAddItem(NULL, ballPokeCylinder, CreateBallSLot, INDEX_WHEREEVER, FLAG_NOLIMIT); //slotbag Item* CreateBallBag = Item::CreateItem(ballPoke->getItem()->getID(), ballPoke->getItem()->getItemCount()); //slot8 CreateBallBag->copyAttributes(ballPoke->getItem()); //slot8 internalPlayerAddItem(NULL, player, CreateBallBag, false);// return true; }else { Cylinder* ballOrderCylinder = ballSLot->getParent(); int32_t ballOrderIndex = ballOrderCylinder->__getIndexOfThing(ballSLot); internalRemoveItem(NULL, ballSLot); Item* CreateBallSLot = Item::CreateItem(ballSLot->getID(), ballSLot->getItemCount()); CreateBallSLot->copyAttributes(ballSLot); internalPlayerAddItem(NULL, player, CreateBallSLot, false); return true; } } } } } } } } return false; } agora em game.h: embaixo de: Spoiler bool playerCancelRuleViolation(uint32_t playerId); adicione isso: Spoiler bool doMoveBar(uint32_t playerId, uint8_t opId); agora em luascript.cpp: embaixo de : Spoiler //getCreatureSummons(cid) lua_register(m_luaState, "getCreatureSummons", LuaScriptInterface::luaGetCreatureSummons); adicione: Spoiler //doUpdatePokemonsBar(cid) lua_register(m_luaState, "doUpdatePokemonsBar", LuaScriptInterface::luaDoUpdatePokemonsBar); //doMoveBar(playerid, item) lua_register(m_luaState, "doMoveBar", LuaScriptInterface::luaDoMoveBar); agora em baixo de: Spoiler int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L) { //doSendPlayerExtendedOpcode(cid, opcode, buffer) std::string buffer = popString(L); int opcode = popNumber(L); ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->sendExtendedOpcode(opcode, buffer); lua_pushboolean(L, true); } lua_pushboolean(L, false); return 1; } ou de int32_t LuaScriptInterface::luaBitUNot(lua_State* L) { uint32_t number = (uint32_t)popNumber(L); lua_pushnumber(L, ~number); return 1; } adicione isso: Spoiler int32_t LuaScriptInterface::luaDoMoveBar(lua_State* L) { ScriptEnviroment* env = getEnv(); uint8_t opId = popNumber(L); uint32_t playerId = popNumber(L); if(Player* player = env->getPlayerByUID(playerId)) lua_pushboolean(L, g_game.doMoveBar(playerId, opId)); else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaScriptInterface::luaDoUpdatePokemonsBar(lua_State* L) { //doUpdatePokemonsBar(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->doUpdatePokemonsBar(); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } agora em luascript.h. embaixo de : Spoiler //lua functions adicione isso Spoiler static int32_t luaDoUpdatePokemonsBar(lua_State* L); static int32_t luaDoMoveBar(lua_State* L); agora em player.cpp: embaixo de : Spoiler void Player::updateInventoryWeight() { inventoryWeight = 0.00; if(hasFlag(PlayerFlag_HasInfiniteCapacity)) return; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) inventoryWeight += item->getWeight(); } } adicione isso: Spoiler void Player::doUpdatePokemonsBar() { uint32_t slot = SLOT_FEET; const Container* container; std::stringstream s; s << "p#"; std::stringstream sd; int32_t bo = 1; for(int32_t i = SLOT_LAST-1; i >= SLOT_FIRST; --i) { if(Item* item = getInventoryItem((slots_t)i)) { boost::any value = (item)->getAttribute("poke"); if(value.type() == typeid(std::string)) { boost::any vanick = (item)->getAttribute("nick"); std::string pokename = boost::any_cast<std::string>(value); if(vanick.type() == typeid(std::string)) pokename = boost::any_cast<std::string>(vanick); boost::any tapot = (item)->getAttribute("tadport"); if(tapot.type() == typeid(int32_t)) { boost::any boostpo = (item)->getAttribute("boost"); boost::any hpPo = (item)->getAttribute("hp"); int32_t boost = 0; int32_t hpPok = 0; if(boostpo.type() == typeid(int32_t)) boost = boost::any_cast<int32_t>(boostpo); if(hpPo.type() == typeid(float)) hpPok = (int32_t)std::ceil((boost::any_cast<float>(hpPo)*100)); else if(hpPo.type() == typeid(int32_t)) hpPok = (int32_t)std::ceil((boost::any_cast<int32_t>(hpPo)*100)); (item)->setAttribute("ballorder", bo); const ItemType* foto; if(!(foto = Item::items.getElement(boost::any_cast<int32_t>(tapot)))) foto = Item::items.getElement(2395); if(hpPok <= 0) { sd << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; continue; } s << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; }else { (item)->setAttribute("ballorder", bo); const ItemType* foto = Item::items.getElement(2395); s << "," << foto->clientId << "|" << " " << "|" << bo << "|" << 0 << "|" << 0; bo += 1; } } if(container = item->getContainer()) { for(ContainerIterator it = container->begin(), end = container->end(); it != end; ++it) { boost::any value = (*it)->getAttribute("poke"); if(value.type() == typeid(std::string)) { boost::any vanick = (*it)->getAttribute("nick"); std::string pokename = boost::any_cast<std::string>(value); if(vanick.type() == typeid(std::string)) pokename = boost::any_cast<std::string>(vanick); boost::any tapot = (*it)->getAttribute("tadport"); if(tapot.type() == typeid(int32_t)) { boost::any boostpo = (*it)->getAttribute("boost"); boost::any hpPo = (*it)->getAttribute("hp"); int32_t boost = 0; int32_t hpPok = 0; if(boostpo.type() == typeid(int32_t)) boost = boost::any_cast<int32_t>(boostpo); if(hpPo.type() == typeid(float)) hpPok = (int32_t)std::ceil((boost::any_cast<float>(hpPo)*100)); else if(hpPo.type() == typeid(int32_t)) hpPok = (int32_t)std::ceil((boost::any_cast<int32_t>(hpPo)*100)); (*it)->setAttribute("ballorder", bo); const ItemType* foto; if(!(foto = Item::items.getElement(boost::any_cast<int32_t>(tapot)))) foto = Item::items.getElement(2395); if(hpPok <= 0) { sd << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; continue; } s << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; }else { (*it)->setAttribute("ballorder", bo); const ItemType* foto = Item::items.getElement(2395); s << "," << foto->clientId << "|" << " " << "|" << bo << "|" << 0 << "|" << 0; bo += 1; } } } } } } s << sd.str(); sendCancel(s.str()); sendCancel(""); } agora em player.h embaixo de: Spoiler void updateItemsLight(bool internal = false); adicione isso: Spoiler void doUpdatePokemonsBar(); Download: Spoiler poke_bar.rar scan:https://www.virustotal.com/gui/file/43988896fa6ff61225182a6c713395cede7153bfb4ff31e63dc48ca69fba1575/detection Creditos: Spoiler Marshmello Gristony/viktor/pokevks.com eu por posta no xtibia Editado Janeiro 3, 2020 por Poke X Ice Mixlortt, NiCaDo, FlamesAdmin e 8 outros reagiu a isso 8 1 2 Link para o comentário Compartilhar em outros sites More sharing options...
Taiger 286 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 Parabéns pela atitude. Chegando em casa irei testar. Rep+ Link para o comentário Compartilhar em outros sites More sharing options...
andrefelphes 2 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 Funcional 100% parabéns pelo post, ja usava antes... porque foi espalhado ne kkkk Link para o comentário Compartilhar em outros sites More sharing options...
Ayron5 40 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 2 horas atrás, Poke X Ice disse: Boa tarde, muito gente estava pedindo como adicionar essa pokemonbar ao jogo. então decidi postar testado na pokemon dash bolz 2.0 futura atualização: Mostrar conteúdo oculto depois vou atualizar esse tópico, poderá revive seu pokemon pela pokemonbar já tenho depois vou publicar. foto: Mostrar conteúdo oculto vamos começar? vá até servidor/data/action/goback.lua Mostrar conteúdo oculto embaixo de: Mostrar conteúdo oculto local effect = pokeballs[btype].effect if not effect then effect = 21 end adicione isso: Mostrar conteúdo oculto if not getItemAttribute(item.uid, "tadport") and ballName then doItemSetAttribute(item.uid, "tadport", fotos[ballName]) end embaixo de: Mostrar conteúdo oculto doCreatureSay(cid, mgo, TALKTYPE_MONSTER) adicione isso: Mostrar conteúdo oculto if getItemAttribute(item.uid, "ballorder") then doPlayerSendCancel(cid, "KGT,"..getItemAttribute(item.uid, "ballorder").."|".."0") doPlayerSendCancel(cid, "") end embaixo de: Mostrar conteúdo oculto if useOTClient then doPlayerSendCancel(cid, '12//,show') --alterado v1.7 end adicione isso: Mostrar conteúdo oculto local owner = getCreatureMaster(cid) doOTCSendPokemonHealth(owner) agora em servido/data/lib/somefunctions.lua Mostrar conteúdo oculto procure por: Mostrar conteúdo oculto doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") em baixo adicione: Mostrar conteúdo oculto doItemSetAttribute(item, "tadport", fotos[pokemon]) agora vá até ultima linha de dois espaços e adicione isso: Mostrar conteúdo oculto postado na pastebin pq aqui fica bugado: https://pastebin.com/qTd3dEzs agora vá em servidor/data/lib/cooldown bar.lua Mostrar conteúdo oculto troque por esse:https://pastebin.com/MLZsy8AK agora vá em servidor/data/lib/level system.lua Mostrar conteúdo oculto procure por: Mostrar conteúdo oculto doSendMagicEffect(getThingPos(item2.uid), 18) embaixo adicione isso: Mostrar conteúdo oculto doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo]) doItemSetAttribute(pokeball.uid, "tadport", fotos[theevo]) doUpdatePokemonsBar(cid) agora vá em servidor/data/creaturescript/script/goback.lua Mostrar conteúdo oculto dentro da função: Mostrar conteúdo oculto if useOTClient then end deixe ela assim: Mostrar conteúdo oculto if useOTClient then doPlayerSendCancel(owner, '12//,hide') --alterado v1.7 doPlayerSendCancel(owner, "pGS,".."0".."|"..getItemAttribute(thisball.uid, "ballorder").."|"..getPokeName(cid)) doPlayerSendCancel(owner, "") end agora vá em servidor/data/creaturescript/script/login.lua Mostrar conteúdo oculto procure por: Mostrar conteúdo oculto function onLogin(cid) adicione embaixo Mostrar conteúdo oculto doUpdatePokemonsBar(cid) procure por: Mostrar conteúdo oculto registerCreatureEvent(cid, "task_count") adicione embaixo: Mostrar conteúdo oculto doUpdatePokemonsBar(cid) agora vá em servidor/data/talkactions/script Mostrar conteúdo oculto crie um arquivo chamado: poke.lua e adicione isso dentro Mostrar conteúdo oculto local EFFECTS = { ["Perfect Zygarde Full"] = 45, ["Mystic Mewtwo"] = 136, ["Groudon"] = 34, ["Shiny Groudon"] = 44, ["Arch Heatran"] = 105, ["Obscure Arceus"] = 55, ["Zygarde M1"] = 45, ["Zygarde M2"] = 45, ["Zygarde M3"] = 105, ["Tornadus"] = 152, ["Landorus"] = 152, ["Thundurus"] = 152, ["Majestic Lugia M1"] = 136, ["Majestic Lugia M2"] = 136, ["Majestic Lugia M3"] = 136, ["Mew"] = 136, ["Mewtwo"] = 136, ["Shiny Mew"] = 136, ["Shiny Mewtwo"] = 136, ["Giratina Star"] = 55, ["Giratina Star M1"] = 55, ["Giratina Star M2"] = 55, ["Giratina Star M3"] = 55, ["Raikou"] = 360, ["Kyogre"] = 17, ["Shiny Kyogre"] = 17, ["Rayquaza"] = 17, ["Suicune"] = 17, ["Ditto"] = 17, ["Phione"] = 17, ["Zoroak"] = 55, ["Shiny Zoroak"] = 55, ["Zygard"] = 55, ["Regigigas"] = 35, ["Shiny Regigigas"] = 26, ["Genesect"] = 26, ["Zekrom"] = 26, ["Shiny Zekrom"] = 26, ["Black Zygarde"] = 55, ["Black Alpha Zekrom"] = 55, ["Black Groudon"] = 55, ["Deoxys Lunar"] = 55, } local cd = 1 local function volta(cid, init) exhausted = 10 storage = 31332 if(getPlayerStorageValue(cid, storage) > os.time() and getPlayerStorageValue(cid, storage) < 100+os.time()) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait another " .. getPlayerStorageValue(cid, storage) - os.time() .. ' second' .. ((getPlayerStorageValue(cid, storage) - os.time()) == 1 and "" or "s") .. " to use new pokemon.") return true end -- if getPlayerStorageValue(cid, 69891) >= 1 then -- doPlayerSendCancel(cid, "Voce nao pode chamar seu pokemon enquanto usa seu pet.") -- return false --alterado v1.5 -- end if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid > 0 then local item = getPlayerSlotItem(cid, CONST_SLOT_FEET) if getPlayerStorageValue(cid, 912351) > os.time () then doPlayerSendCancel(cid, "Espere "..getPlayerStorageValue(cid, 912351) - os.time ().." segundo(s) para usar novamente") return true end if exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true end if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 75846) >= 1 or getPlayerStorageValue(cid, 5700) >= 1 then --alterado v1.9 << return true end local ballName = getItemAttribute(item.uid, "poke") local btype = getPokeballType(item.itemid) local usando = pokeballs[btype].use local effect = pokeballs[btype].effect if not effect then effect = 21 end if not getItemAttribute(item.uid, "tadport") and ballName then doItemSetAttribute(item.uid, "tadport", fotos[ballName]) end unLock(item.uid) --alterado v1.8 if item.itemid == usando then -- if getPlayerStorageValue(cid, 990) == 1 then -- GYM -- doPlayerSendCancel(cid, "You can't return your pokemon during gym battles.") -- return true -- end if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end if #getCreatureSummons(cid) == 2 and getPlayerStorageValue(cid, 212124) >= 1 then doPlayerSendCancel(cid, "You can't do that while is controling a mind") return true --alterado v1.5 end if #getCreatureSummons(cid) <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local cd = getCD(item.uid, "blink", 30) if cd > 0 then setCD(item.uid, "blink", 0) end local z = getCreatureSummons(cid)[1] if getCreatureCondition(z, CONDITION_INVISIBLE) and not isGhostPokemon(z) then return true end doReturnPokemon(cid, z, item, effect) end if init then if item.itemid == pokeballs[btype].on then if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end --------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boost = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level+boost) then doPlayerSendCancel(cid, "You need level "..(x.level+boost).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then --alterado v1.8 \/ if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then if not getItemAttribute(item.uid, "hands") then doSetItemAttribute(item.uid, "hands", 0) end local hands = getItemAttribute(item.uid, "hands") doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1) end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) end -------------------------------------------------------------------------- ---if getCreatureName(pk) == "Ditto" or getCreatureName(pk) == "Shiny Ditto" then --edited -- local left = getItemAttribute(item.uid, "transLeft") -- local name = getItemAttribute(item.uid, "transName") -- if left and left > 0 then -- setPlayerStorageValue(pk, 1010, name) -- doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) -- addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) -- doItemSetAttribute(item.uid, "transBegin", os.clock()) -- else -- setPlayerStorageValue(pk, 1010, getCreatureName(pk) == "Ditto" and "Ditto" or "Shiny Ditto") --edited -- end -- end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) -- doCureWithY(getCreatureMaster(pk), pk) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_ORANGE_1) if getItemAttribute(item.uid, "ballorder") then doPlayerSendCancel(cid, "KGT,"..getItemAttribute(item.uid, "ballorder").."|".."0") end setPlayerStorageValue(cid, 912351, os.time () + cd) doSendMagicEffect(getCreaturePosition(pk), effect) local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb, "addon") if not look then doSetItemAttribute(pb, "addon", 0) end if look and look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end if useOTClient then doPlayerSendCancel(cid, '12//,show') --alterado v1.7 end local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end end end end if useKpdoDlls then doUpdateMoves(cid) end return true end function onSay(cid, words, param, channel) if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid > 0 then if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "ballorder") == tonumber(param) then volta(cid, true) return true else volta(cid, false) end end doMoveBar(cid, tonumber(param)) volta(cid, true) return true end agora em servidor/data/talkactions.xml Mostrar conteúdo oculto adicione essa tag <talkaction words="!@pokebar@" script="poke.lua"/> agora vamos para source do jogo: Ocultar conteúdo vamos em game.cpp embaixo de: Ocultar conteúdo void Game::showHotkeyUseMessage(Player* player, Item* item) { int32_t subType = -1; if(item->hasSubType() && !item->hasCharges()) subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), subType, false); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } adicione isso: Ocultar conteúdo bool Game::doMoveBar(uint32_t playerId, uint8_t opId) { Player* player = getPlayerByID(playerId); Container* container; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(Item* item = player->getInventoryItem((slots_t)i)) { boost::any value = (item)->getAttribute("poke"); boost::any border = (item)->getAttribute("ballorder"); if(value.type() == typeid(std::string) && border.type() == typeid(int32_t)) { if(boost::any_cast<int32_t>(border) == opId && i == ? return false; if(boost::any_cast<int32_t>(border) == opId && i == 10) { Thing* bthing = player->__getThing(10); Thing* ballPoke = player->__getThing(8); if(ballPoke && !ballPoke->getItem()->isNotMoveable()) { if(bthing) { boost::any bbpb1 = ballPoke->getItem()->getAttribute("poke"); boost::any bbpb2 = bthing->getItem()->getAttribute("poke"); boost::any borderS = bthing->getItem()->getAttribute("ballorder"); if (!bbpb1.empty() && !bbpb2.empty() && borderS.type() == typeid(int32_t)) { int32_t pouitS = boost::any_cast<int32_t>(borderS); if(opId == pouitS) { Cylinder* acylinder = ballPoke->getItem()->getParent(); Cylinder* bcylinder = bthing->getItem()->getParent(); int32_t aitemIndex = acylinder->__getIndexOfThing(ballPoke->getItem()); int32_t bitemIndex = bcylinder->__getIndexOfThing(bthing->getItem()); internalRemoveItem(NULL, ballPoke->getItem()); internalRemoveItem(NULL, bthing->getItem()); Item* aa = Item::CreateItem(ballPoke->getItem()->getID(), ballPoke->getItem()->getItemCount()); aa->copyAttributes(ballPoke->getItem()); internalAddItem(NULL, acylinder, aa, INDEX_WHEREEVER, FLAG_NOLIMIT); int16_t stcpos; Position posa; Position posb; posb.x = 65535; posb.y = 10; posb.z = 0; internalGetPosition(aa, posa, stcpos); playerMoveThing(playerId, posa, aa->getClientID(), 0, posb, 1); Item* bb = Item::CreateItem(bthing->getItem()->getID(), bthing->getItem()->getItemCount()); bb->copyAttributes(bthing->getItem()); internalAddItem(NULL, acylinder, bb, INDEX_WHEREEVER, FLAG_NOLIMIT); internalGetPosition(bb, posa, stcpos); posb.y = 8; playerMoveThing(playerId, posa, bb->getClientID(), 0, posb, 1); return true; } } } }else { if(bthing) { boost::any bbpb1 = bthing->getItem()->getAttribute("poke"); boost::any borderS = bthing->getItem()->getAttribute("ballorder"); if (!bbpb1.empty() && borderS.type() == typeid(int32_t)) { int32_t pouitS = boost::any_cast<int32_t>(borderS); if(opId == pouitS) { int16_t stcpos; Position posa; Position posb; posb.x = 65535; posb.y = 8; posb.z = 0; internalGetPosition(bthing->getItem(), posa, stcpos); playerMoveThing(playerId, posa, bthing->getItem()->getClientID(), 0, posb, 1); return true; } } } } } } /////////////////////////////////////////////// if(item->getContainer()) { container = item->getContainer(); for(ContainerIterator sb = container->begin(), end = container->end(); sb != end; ++sb) { Item* ballSLot = (*sb)->getItem(); if(ballSLot); { boost::any value = ballSLot->getAttribute("poke"); boost::any border = ballSLot->getAttribute("ballorder"); if(value.type() == typeid(std::string) && border.type() == typeid(int32_t)) { int32_t pouit = boost::any_cast<int32_t>(border); if(opId == pouit) { Thing* ballPoke = player->__getThing(8); if(ballPoke && !ballPoke->getItem()->isNotMoveable()) { Cylinder* ballPokeCylinder = ballPoke->getItem()->getParent(); //slot8 Cylinder* ballOrderCylinder = ballSLot->getParent(); //slotbag int32_t ballPokeIndex = ballPokeCylinder->__getIndexOfThing(ballPoke->getItem()); //slot8 int32_t ballOrderIndex = ballOrderCylinder->__getIndexOfThing(ballSLot); //slotbag internalRemoveItem(NULL, ballPoke->getItem()); //slot8 internalRemoveItem(NULL, ballSLot); //slotbag Item* CreateBallSLot = Item::CreateItem(ballSLot->getID(), ballSLot->getItemCount()); //slotbag CreateBallSLot->copyAttributes(ballSLot); //slotbag internalAddItem(NULL, ballPokeCylinder, CreateBallSLot, INDEX_WHEREEVER, FLAG_NOLIMIT); //slotbag Item* CreateBallBag = Item::CreateItem(ballPoke->getItem()->getID(), ballPoke->getItem()->getItemCount()); //slot8 CreateBallBag->copyAttributes(ballPoke->getItem()); //slot8 internalPlayerAddItem(NULL, player, CreateBallBag, false);// return true; }else { Cylinder* ballOrderCylinder = ballSLot->getParent(); int32_t ballOrderIndex = ballOrderCylinder->__getIndexOfThing(ballSLot); internalRemoveItem(NULL, ballSLot); Item* CreateBallSLot = Item::CreateItem(ballSLot->getID(), ballSLot->getItemCount()); CreateBallSLot->copyAttributes(ballSLot); internalPlayerAddItem(NULL, player, CreateBallSLot, false); return true; } } } } } } } } return false; } agora em game.h: embaixo de: Ocultar conteúdo bool playerCancelRuleViolation(uint32_t playerId); adicione isso: Ocultar conteúdo bool doMoveBar(uint32_t playerId, uint8_t opId); agora em luascript.cpp: embaixo de : Ocultar conteúdo //getCreatureSummons(cid) lua_register(m_luaState, "getCreatureSummons", LuaScriptInterface::luaGetCreatureSummons); adicione: Ocultar conteúdo //doUpdatePokemonsBar(cid) lua_register(m_luaState, "doUpdatePokemonsBar", LuaScriptInterface::luaDoUpdatePokemonsBar); //doMoveBar(playerid, item) lua_register(m_luaState, "doMoveBar", LuaScriptInterface::luaDoMoveBar); agora em baixo de: Ocultar conteúdo int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L) { //doSendPlayerExtendedOpcode(cid, opcode, buffer) std::string buffer = popString(L); int opcode = popNumber(L); ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->sendExtendedOpcode(opcode, buffer); lua_pushboolean(L, true); } lua_pushboolean(L, false); return 1; } ou de int32_t LuaScriptInterface::luaBitUNot(lua_State* L) { uint32_t number = (uint32_t)popNumber(L); lua_pushnumber(L, ~number); return 1; } adicione isso: Ocultar conteúdo int32_t LuaScriptInterface::luaDoMoveBar(lua_State* L) { ScriptEnviroment* env = getEnv(); uint8_t opId = popNumber(L); uint32_t playerId = popNumber(L); if(Player* player = env->getPlayerByUID(playerId)) lua_pushboolean(L, g_game.doMoveBar(playerId, opId)); else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaScriptInterface::luaDoUpdatePokemonsBar(lua_State* L) { //doUpdatePokemonsBar(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->doUpdatePokemonsBar(); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } agora em luascript.h. embaixo de : Ocultar conteúdo //lua functions adicione isso Ocultar conteúdo static int32_t luaDoUpdatePokemonsBar(lua_State* L); static int32_t luaDoMoveBar(lua_State* L); agora em player.cpp: embaixo de : Mostrar conteúdo oculto void Player::updateInventoryWeight() { inventoryWeight = 0.00; if(hasFlag(PlayerFlag_HasInfiniteCapacity)) return; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) inventoryWeight += item->getWeight(); } } adicione isso: Mostrar conteúdo oculto void Player::doUpdatePokemonsBar() { uint32_t slot = SLOT_FEET; const Container* container; std::stringstream s; s << "p#"; std::stringstream sd; int32_t bo = 1; for(int32_t i = SLOT_LAST-1; i >= SLOT_FIRST; --i) { if(Item* item = getInventoryItem((slots_t)i)) { boost::any value = (item)->getAttribute("poke"); if(value.type() == typeid(std::string)) { boost::any vanick = (item)->getAttribute("nick"); std::string pokename = boost::any_cast<std::string>(value); if(vanick.type() == typeid(std::string)) pokename = boost::any_cast<std::string>(vanick); boost::any tapot = (item)->getAttribute("tadport"); if(tapot.type() == typeid(int32_t)) { boost::any boostpo = (item)->getAttribute("boost"); boost::any hpPo = (item)->getAttribute("hp"); int32_t boost = 0; int32_t hpPok = 0; if(boostpo.type() == typeid(int32_t)) boost = boost::any_cast<int32_t>(boostpo); if(hpPo.type() == typeid(float)) hpPok = (int32_t)std::ceil((boost::any_cast<float>(hpPo)*100)); else if(hpPo.type() == typeid(int32_t)) hpPok = (int32_t)std::ceil((boost::any_cast<int32_t>(hpPo)*100)); (item)->setAttribute("ballorder", bo); const ItemType* foto; if(!(foto = Item::items.getElement(boost::any_cast<int32_t>(tapot)))) foto = Item::items.getElement(2395); if(hpPok <= 0) { sd << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; continue; } s << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; }else { (item)->setAttribute("ballorder", bo); const ItemType* foto = Item::items.getElement(2395); s << "," << foto->clientId << "|" << " " << "|" << bo << "|" << 0 << "|" << 0; bo += 1; } } if(container = item->getContainer()) { for(ContainerIterator it = container->begin(), end = container->end(); it != end; ++it) { boost::any value = (*it)->getAttribute("poke"); if(value.type() == typeid(std::string)) { boost::any vanick = (*it)->getAttribute("nick"); std::string pokename = boost::any_cast<std::string>(value); if(vanick.type() == typeid(std::string)) pokename = boost::any_cast<std::string>(vanick); boost::any tapot = (*it)->getAttribute("tadport"); if(tapot.type() == typeid(int32_t)) { boost::any boostpo = (*it)->getAttribute("boost"); boost::any hpPo = (*it)->getAttribute("hp"); int32_t boost = 0; int32_t hpPok = 0; if(boostpo.type() == typeid(int32_t)) boost = boost::any_cast<int32_t>(boostpo); if(hpPo.type() == typeid(float)) hpPok = (int32_t)std::ceil((boost::any_cast<float>(hpPo)*100)); else if(hpPo.type() == typeid(int32_t)) hpPok = (int32_t)std::ceil((boost::any_cast<int32_t>(hpPo)*100)); (*it)->setAttribute("ballorder", bo); const ItemType* foto; if(!(foto = Item::items.getElement(boost::any_cast<int32_t>(tapot)))) foto = Item::items.getElement(2395); if(hpPok <= 0) { sd << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; continue; } s << "," << foto->clientId << "|" << pokename << "|" << bo << "|" << hpPok << "|" << boost; bo += 1; }else { (*it)->setAttribute("ballorder", bo); const ItemType* foto = Item::items.getElement(2395); s << "," << foto->clientId << "|" << " " << "|" << bo << "|" << 0 << "|" << 0; bo += 1; } } } } } } s << sd.str(); sendCancel(s.str()); sendCancel(""); } agora em player.h embaixo de: Ocultar conteúdo void updateItemsLight(bool internal = false); adicione isso: Ocultar conteúdo void doUpdatePokemonsBar(); Download: Mostrar conteúdo oculto poke_bar.rar 32 kB · 2 downloads scan:https://www.virustotal.com/gui/file/43988896fa6ff61225182a6c713395cede7153bfb4ff31e63dc48ca69fba1575/detection Creditos: Mostrar conteúdo oculto Marshmello eu por posta no xtibia Tá dando erro na hora da compilação em game.cpp nessa linha, esse simbolo depois do i == if(boost::any_cast<int32_t>(border) == opId && i == ? return false; Link para o comentário Compartilhar em outros sites More sharing options...
iMalware 0 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 1 minuto atrás, Ayron5 disse: if(boost::any_cast<int32_t>(border) == opId && i == ? return false; em vez do emoji coloque 8_) sem o _ Link para o comentário Compartilhar em outros sites More sharing options...
Poke X Ice 52 Postado Outubro 22, 2019 Autor Share Postado Outubro 22, 2019 (editado) 15 minutos atrás, Ayron5 disse: Tá dando erro na hora da compilação em game.cpp nessa linha, esse simbolo depois do i == if(boost::any_cast<int32_t>(border) == opId && i == ? return false; vou colocar na pastebin Spoiler troque a variavel logo toda para n da erro https://pastebin.com/SynvXvF6 Editado Outubro 22, 2019 por Poke X Ice Link para o comentário Compartilhar em outros sites More sharing options...
Taiger 286 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 Não sei se é só aqui , mas a pokebar nao atualiza o hp do poke quando leva dano, quando captura algum pokemon. Link para o comentário Compartilhar em outros sites More sharing options...
Poke X Ice 52 Postado Outubro 22, 2019 Autor Share Postado Outubro 22, 2019 Agora, Taiger disse: Não sei se é só aqui , mas a pokebar nao atualiza o hp do poke quando leva dano, quando captura algum pokemon. está usando qual base? Link para o comentário Compartilhar em outros sites More sharing options...
Taiger 286 Postado Outubro 22, 2019 Share Postado Outubro 22, 2019 (editado) Pda com sources. Não era para atualizar a bar quando soltasse algum poke, ou desse catch? Editado Outubro 22, 2019 por Taiger Link para o comentário Compartilhar em outros sites More sharing options...
Poke X Ice 52 Postado Outubro 23, 2019 Autor Share Postado Outubro 23, 2019 1 hora atrás, Taiger disse: Pda com sources. Não era para atualizar a bar quando soltasse algum poke, ou desse catch? sim, depois de uma revisada! já adicionou os codigos na source? da uma recompilada lá Link para o comentário Compartilhar em outros sites More sharing options...
Hyaki 19 Postado Outubro 23, 2019 Share Postado Outubro 23, 2019 (editado) Precisa de alguma modificação no cliente? #Edit: Não sei se foi apenas no meu cliente, mas por falta do arquivo "UIImageViewBar", gerou um erro, quem tiver o mesmo problema basta criar um arquivo .lua com o nome UIImageViewBar na pasta corelib/ui do seu otclient e adicionar isto dentro: Spoiler -- @docclass UIImageViewBar = extends(UIWidget, "UIImageViewBar") function UIImageViewBar.create() local imageView = UIImageViewBar.internalCreate() imageView.zoom = 1 imageView.minZoom = math.pow(10, -2) imageView.maxZoom = math.pow(10, 2) imageView:setClipping(true) return imageView end function UIImageViewBar:getDefaultZoom() local width = self:getWidth() local height = self:getHeight() local textureWidth = self:getImageTextureWidth() local textureHeight = self:getImageTextureHeight() local zoomX = width / textureWidth local zoomY = height / textureHeight return math.min(zoomX, zoomY) end function UIImageViewBar:getImagePosition(x, y) x = x or self:getWidth() / 2 y = y or self:getHeight() / 2 local offsetX = self:getImageOffsetX() local offsetY = self:getImageOffsetY() local posX = (x - offsetX) / self.zoom local posY = (y - offsetY) / self.zoom return posX, posY end function UIImageViewBar:setImage(image) self:setImageSource(image) local zoom = self:getDefaultZoom() self:setZoom(zoom) self:center() end function UIImageViewBar:setZoom(zoom, x, y) zoom = math.max(math.min(zoom, self.maxZoom), self.minZoom) local posX, posY = self:getImagePosition(x, y) local textureWidth = self:getImageTextureWidth() local textureHeight = self:getImageTextureHeight() local imageWidth = textureWidth * zoom local imageHeight = textureHeight * zoom self:setImageWidth(imageWidth) self:setImageHeight(imageHeight) self.zoom = zoom self:move(posX, posY, x, y) end function UIImageViewBar:zoomIn(x, y) local zoom = self.zoom * 1.1 self:setZoom(zoom, x, y) end function UIImageViewBar:zoomOut(x, y) local zoom = self.zoom / 1.1 self:setZoom(zoom, x, y) end function UIImageViewBar:center() self:move(self:getImageTextureWidth() / 2, self:getImageTextureHeight() / 2) end function UIImageViewBar:move(x, y, centerX, centerY) x = math.max(math.min(x, self:getImageTextureWidth()), 0) y = math.max(math.min(y, self:getImageTextureHeight()), 0) local centerX = centerX or self:getWidth() / 2 local centerY = centerY or self:getHeight() / 2 local offsetX = centerX - x * self.zoom local offsetY = centerY - y * self.zoom self:setImageOffset({x=offsetX, y=offsetY}) end function UIImageViewBar:onDragEnter(pos) return true end function UIImageViewBar:onDragMove(pos, moved) local posX, posY = self:getImagePosition() self:move(posX - moved.x / self.zoom, posY - moved.y / self.zoom) return true end function UIImageViewBar:onDragLeave(widget, pos) return true end Editado Outubro 23, 2019 por Henrique GOD Vitor reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
Taiger 286 Postado Outubro 24, 2019 Share Postado Outubro 24, 2019 23 horas atrás, Poke X Ice disse: sim, depois de uma revisada! já adicionou os codigos na source? da uma recompilada lá Sim, ela funciona mas nao atualiza o hp dos pokes, só relogando Link para o comentário Compartilhar em outros sites More sharing options...
Hyaki 19 Postado Outubro 24, 2019 Share Postado Outubro 24, 2019 Aqui esta normal @Taiger, só que da pra atualizar ela com base no sistema de Poke Health que o @Gengo postou. A função na source é basicamente para mudar a posição do pokemon na pokebar. Link para o comentário Compartilhar em outros sites More sharing options...
Poke X Ice 52 Postado Outubro 24, 2019 Autor Share Postado Outubro 24, 2019 (editado) 1 hora atrás, Taiger disse: Sim, ela funciona mas nao atualiza o hp dos pokes, só relogando sobre essa parte voce precisa ter opcode na source voce tiver posso ensina como fazer isso funciona Editado Outubro 24, 2019 por Poke X Ice Link para o comentário Compartilhar em outros sites More sharing options...
Hyaki 19 Postado Outubro 24, 2019 Share Postado Outubro 24, 2019 (editado) Eu fiz uma alterações no design haha' #EDIT Deixei ela mais clean, acho que fica muita informação na tela do player. Spoiler Editado Outubro 24, 2019 por Henrique Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados