Jump to content

PokeBar(Versão:0.3.6)


Poke X Ice

Recommended Posts

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

 

Edited by Poke X Ice
Link to comment
Share on other 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 to comment
Share on other 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

 

Edited by Poke X Ice
Link to comment
Share on other 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 to comment
Share on other 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

 

Edited by Henrique
Link to comment
Share on other 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 to comment
Share on other 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

Edited by Poke X Ice
Link to comment
Share on other 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

 

Edited by Henrique
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...