Ir para conteúdo

PokeBar(Versão:0.3.6)


Poke X Ice

Posts Recomendados

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

image.png.d0076038e253851aa3cacbf5fce875b4.png

 

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

 

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:

Creditos:

Spoiler

Marshmello

Gristony/viktor/pokevks.com

eu por posta no xtibia

 

Editado por Poke X Ice
Link para o comentário
Compartilhar em outros sites

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

image.png.d0076038e253851aa3cacbf5fce875b4.png

 

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

 

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:

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

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 por Poke X Ice
Link para o comentário
Compartilhar em outros sites

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

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 por Henrique
Link para o comentário
Compartilhar em outros sites

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

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 por Poke X Ice
Link para o comentário
Compartilhar em outros sites

Eu fiz uma alterações no design haha'
image.png.3b855101e597326414b2369a8f721969.png

#EDIT
Deixei ela mais clean, acho que fica muita informação na tela do player.
 

Spoiler

image.png.78b9b89f75e5e3042dd9b6db6b5c4ecd.png

 

Editado por Henrique
Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...