Ir para conteúdo
Close
Entre para seguir isso  
underewarr

Scripting Fix TFS 0.4 Slots

Posts Recomendados

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

 

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}

 

 


Editado por underewarr (veja o histórico de edições)

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, Jobs disse:

Nice mestre.

 

Somos todos aprendizes.

Mas não somos eternos.


Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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?

 


Editado por underewarr (veja o histórico de edições)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@underewarr eu amo sua trabalho vc e boom prgramador


Compartilhar este post


Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

Entre para seguir isso  

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 partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade 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! A publicação do seu anuncio é instantânea!

×
×
  • Criar Novo...