BE
script

converter código em uma função ajuda

Por Bennyhappy, 30 de out. de 2015 em Scripts

function
resolvido
6
1.4k
BennyhappyB
30 de outubro de 2015 às 03:48

 		local slots = {
        ['head'] = CONST_SLOT_HEAD,
        ['armor'] = CONST_SLOT_ARMOR,
        ['legs'] = CONST_SLOT_LEGS,
        ['feet'] = CONST_SLOT_FEET,
        ['left'] = CONST_SLOT_LEFT,
        ['right'] = CONST_SLOT_RIGHT
    }	             
			   
			   local itemSlots, total = {}, 0
			   
                for slot, const in pairs(slots) do
                    local hasItemOn = getPlayerSlotItem(cid, const).uid
                    if hasItemOn ~= 0  then
                        itemSlots[slot] = hasItemOn
                    end
                end

				
                for slot, slottedItem in pairs(itemSlots) do
                local temp = getItemAttribute(slottedItem, 'IceProtec')
                total = total + (temp ~= nil and temp or 0 )
                end

Eu quero converter este código em uma função como esta:

 

//

getPlayerProtection(cid, 'IceProtec')

AntharazA
30 de outubro de 2015 às 04:29
local slots = {
        ['head'] = CONST_SLOT_HEAD,
        ['armor'] = CONST_SLOT_ARMOR,
        ['legs'] = CONST_SLOT_LEGS,
        ['feet'] = CONST_SLOT_FEET,
        ['left'] = CONST_SLOT_LEFT,
        ['right'] = CONST_SLOT_RIGHT
    }            
    
      local itemSlots, total = {}, 0

function getPlayerProtection(cid, param)

     
                for slot, const in pairs(slots) do
                    local hasItemOn = getPlayerSlotItem(cid, const).uid
                    if hasItemOn ~= 0  then
                        itemSlots[slot] = hasItemOn
                    end
                end
   
                for slot, slottedItem in pairs(itemSlots) do
                local temp = getItemAttribute(slottedItem, param)
                total = total + (temp ~= nil and temp or 0 )
                end
	end

Transformando somente em function é isto...

BennyhappyB
30 de outubro de 2015 às 04:37

Error em consola:

 

attempt to concatenate a nil value

 

 

você não está devolver qualquer valor na função, não é tão simples quanto você pensa.

 

 

yo modifique para:

function getPlayerProtection(cid, param)

     
                for slot, const in pairs(slots) do
                    local hasItemOn = getPlayerSlotItem(cid, const).uid
                    if hasItemOn ~= 0  then
                        itemSlots[slot] = hasItemOn
                    end
                end
   
                for slot, slottedItem in pairs(itemSlots) do
                local temp = getItemAttribute(slottedItem, param)
               return total + (temp ~= nil and temp or 0 )
                end
	end

mas eu tenho alguns erros, então eu pedi ajuda

AntharazA
30 de outubro de 2015 às 04:51
Melhor resposta

Na verdade, eu só botei return total no final, antes do último end e deu certo... deste seu jeito vai retornar apenas o valor do primeiro item porque você deixou o return dentro do loop.

local slots = {
        ['head'] = CONST_SLOT_HEAD,
        ['armor'] = CONST_SLOT_ARMOR,
        ['legs'] = CONST_SLOT_LEGS,
        ['feet'] = CONST_SLOT_FEET,
        ['left'] = CONST_SLOT_LEFT,
        ['right'] = CONST_SLOT_RIGHT
    }            
    
      local itemSlots, total = {}, 0

function getPlayerProtection(cid, param)

     
                for slot, const in pairs(slots) do
                    local hasItemOn = getPlayerSlotItem(cid, const).uid
                    if hasItemOn ~= 0  then
                        itemSlots[slot] = hasItemOn
                    end
                end
   
                for slot, slottedItem in pairs(itemSlots) do
                local temp = getItemAttribute(slottedItem, param)
                total = total + (temp ~= nil and temp or 0 )
                end
return total
	end

No TFS 0.3.7 funcionou...

Editado Outubro 30 por Antharaz

BennyhappyB
30 de outubro de 2015 às 05:04

Funcionou perfeitamente. obrigado :)

 

pequenos detalhes que fazem grandes erros kkk

 

testado em tfs 0.4

Editado Outubro 30 por beenii

DanihcvD
01 de novembro de 2015 às 17:14

Tópico movido para dúvidas / pedidos resolvidos.