Jump to content
Close
Sign in to follow this  
underewarr

Scripting Fix TFS 0.4 Slots

Recommended Posts

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 



vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

Dota System 8.6 Com Buffs Automáticos + MAPA (100%) - PVP

Link para Downloadhttps://www.4shared.com/rar/SMta8CQ8fi/Dota_Venda.html?

[+]--------------------------------------[+]-------------------------------------------[+]

 

DISCORDvodkart#6090

 




Share this post


Link to post
Share on other sites

deu certo nãoimage.thumb.png.1d0cfc70a521f1ac5a542ef917aca104.png





Share this post


Link to post
Share on other sites
Em 21/11/2018 em 12:43, esnio12 disse:

deu certo nãoimage.thumb.png.1d0cfc70a521f1ac5a542ef917aca104.png

 

Recompile toda a solução,não só a estrutura do player.cpp ele não lincou as config
Caso o erro persista tente assim

@esnio12

Caso queira disponibilizo o executável, aqui compila normal.
 

Spoiler

ReturnValue Player::__queryAdd(int32_t index, const Thing* thing, uint32_t count, uint32_t flags) const
{
    const Item* item = thing->getItem();
    if(item == NULL)
        return RET_NOTPOSSIBLE;
 
    bool childIsOwner = hasBitSet(FLAG_CHILDISOWNER, flags);
    bool skipLimit = hasBitSet(FLAG_NOLIMIT, flags);
    if(childIsOwner)
    {
        //a child container is querying the player, just check if enough capacity
        if(skipLimit || hasCapacity(item, count))
            return RET_NOERROR;
 
        return RET_NOTENOUGHCAPACITY;
    }
 
    if(!item->isPickupable())
        return RET_CANNOTPICKUP;
 
    ReturnValue ret = RET_NOERROR;
    const int32_t& slotPosition = item->getSlotPosition();
    if((slotPosition & SLOTP_HEAD) || (slotPosition & SLOTP_NECKLACE) ||
        (slotPosition & SLOTP_BACKPACK) || (slotPosition & SLOTP_ARMOR) ||
        (slotPosition & SLOTP_LEGS) || (slotPosition & SLOTP_FEET) ||
        (slotPosition & SLOTP_RING)) {
        ret = RET_CANNOTBEDRESSED;
    } else if(slotPosition & SLOTP_TWO_HAND) {
        ret = RET_PUTTHISOBJECTINBOTHHANDS;
    } else if((slotPosition & SLOTP_RIGHT) || (slotPosition & SLOTP_LEFT)) {
        if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) {
            ret = RET_CANNOTBEDRESSED;
        } else {
            ret = RET_PUTTHISOBJECTINYOURHAND;
        }
    }
 
    switch(index)
    {
        case SLOT_HEAD:
        {
            if(slotPosition & SLOTP_HEAD)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_NECKLACE:
        {
            if(slotPosition & SLOTP_NECKLACE)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_BACKPACK:
        {
            if(slotPosition & SLOTP_BACKPACK)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_ARMOR:
        {
            if(slotPosition & SLOTP_ARMOR)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_RIGHT:
        {
            if(slotPosition & SLOTP_RIGHT)
            {
                if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) {
                    //check if we already carry an item in the other hand
                    if(slotPosition & SLOTP_TWO_HAND) {
                        if(inventory[SLOT_LEFT] && inventory[SLOT_LEFT] != item)
                            ret = RET_BOTHHANDSNEEDTOBEFREE;
                        else
                            ret = RET_NOERROR;
                    }
                } else if (slotPosition & SLOTP_TWO_HAND) {
                    if (inventory[SLOT_LEFT] && inventory[SLOT_LEFT] != item) {
                        ret = RET_BOTHHANDSNEEDTOBEFREE;
                    } else {
                        ret = RET_NOERROR;
                    }
                } else if(inventory[SLOT_LEFT]) {
                    const Item* leftItem = inventory[SLOT_LEFT];
                    WeaponType_t type = item->getWeaponType(), leftType = leftItem->getWeaponType();
                    if(leftItem->getSlotPosition() & SLOTP_TWO_HAND)
                        ret = RET_DROPTWOHANDEDITEM;
                    else if(item == leftItem && count == item->getItemCount())
                        ret = RET_NOERROR;
                    else if(leftType == WEAPON_SHIELD && type == WEAPON_SHIELD)
                        ret = RET_CANONLYUSEONESHIELD;
                    else if(leftType == WEAPON_NONE || type == WEAPON_NONE ||
                        leftType == WEAPON_SHIELD || leftType == WEAPON_AMMO
                        || type == WEAPON_SHIELD || type == WEAPON_AMMO)
                        ret = RET_NOERROR;
                    else
                        ret = RET_CANONLYUSEONEWEAPON;
                } else {
                    ret = RET_NOERROR;
                }
            }
            break;
        }
 
        case SLOT_LEFT:
        {
            if(slotPosition & SLOTP_LEFT)
            {
                if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) {
                    //check if we already carry an item in the other hand
                    if(slotPosition & SLOTP_TWO_HAND) {
                        if(inventory[SLOT_RIGHT] && inventory[SLOT_RIGHT] != item)
                            ret = RET_BOTHHANDSNEEDTOBEFREE;
                        else
                            ret = RET_NOERROR;
                    }
                } else if (slotPosition & SLOTP_TWO_HAND) {
                    if (inventory[SLOT_RIGHT] && inventory[SLOT_RIGHT] != item) {
                        ret = RET_BOTHHANDSNEEDTOBEFREE;
                    } else {
                        ret = RET_NOERROR;
                    }
                } else if(inventory[SLOT_RIGHT]) {
                    const Item* leftItem = inventory[SLOT_RIGHT];
                    WeaponType_t type = item->getWeaponType(), leftType = leftItem->getWeaponType();
                    if(leftItem->getSlotPosition() & SLOTP_TWO_HAND)
                        ret = RET_DROPTWOHANDEDITEM;
                    else if(item == leftItem && count == item->getItemCount())
                        ret = RET_NOERROR;
                    else if(leftType == WEAPON_SHIELD && type == WEAPON_SHIELD)
                        ret = RET_CANONLYUSEONESHIELD;
                    else if(leftType == WEAPON_NONE || type == WEAPON_NONE ||
                        leftType == WEAPON_SHIELD || leftType == WEAPON_AMMO
                        || type == WEAPON_SHIELD || type == WEAPON_AMMO)
                        ret = RET_NOERROR;
                    else
                        ret = RET_CANONLYUSEONEWEAPON;
                } else {
                    ret = RET_NOERROR;
                }
            }
            break;
        }
 
        case SLOT_LEGS:
        {
            if(slotPosition & SLOTP_LEGS)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_FEET:
        {
            if(slotPosition & SLOTP_FEET)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_RING:
        {
            if(slotPosition & SLOTP_RING)
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_AMMO:
        {
            if(slotPosition & SLOTP_AMMO || !g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS))
                ret = RET_NOERROR;
 
            break;
        }
 
        case SLOT_WHEREEVER:
        case -1:
            ret = RET_NOTENOUGHROOM;
            break;
 
        default:
            ret = RET_NOTPOSSIBLE;
            break;
    }
 
    if(ret == RET_NOERROR || ret == RET_NOTENOUGHROOM)
    {
        //need an exchange with source?
        if(getInventoryItem((slots_t)index) != NULL && (!getInventoryItem((slots_t)index)->isStackable()
            || getInventoryItem((slots_t)index)->getID() != item->getID()))
            return RET_NEEDEXCHANGE;
 
        if(!g_moveEvents->onPlayerEquip(const_cast<Player*>(this), const_cast<Item*>(item), (slots_t)index, true))
            return RET_CANNOTBEDRESSED;
 
        //check if enough capacity
        if(!hasCapacity(item, count))
            return RET_NOTENOUGHCAPACITY;
    }
 
    return ret;
}

 

 


Edited by underewarr (see edit history)



Share this post


Link to post
Share on other sites

Nice mestre.





Share this post


Link to post
Share on other sites
10 minutos atrás, Jobs disse:

Nice mestre.

 

Somos todos aprendizes.

Mas não somos eternos.





Share this post


Link to post
Share on other sites

Codigo mto basico





Share this post


Link to post
Share on other sites

Acho que altou você adicionar no config.lua caso não tenha:

classicEquipmentSlots = true

 

 



function table.key_to_str ( subyth )
	if "string" == type( subyth ) and string.match( subyth, "^[_%a][_%a%d]*$" ) then
		return subyth
	else
		return "[" .. table.val_to_str( subyth ) .. "]"
	end
end

 

bazinga.jpg




Share this post


Link to post
Share on other sites
3 horas atrás, Subyth disse:

Acho que altou você adicionar no config.lua caso não tenha:

classicEquipmentSlots = true

 

 

 

Adicionado ao tópico caso alguem queira por no config.lua, por default vem false.

6 horas atrás, Calidoress disse:

Codigo mto basico

 

Você disse código e básico,requisito necessário para se construir alguma coisa não acha?

 


Edited by underewarr (see edit history)



Share this post


Link to post
Share on other sites

@underewarr eu amo sua trabalho vc e boom prgramador





Share this post


Link to post
Share on other sites

:teimoso:





Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...