Pegar nome do item na mao do boneco

f55felipe
em Scripts

f55felipe

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/12/15Posts: 10

Fala estou com uma duvida acho que simples so que nao estou conseguindo resolver, vamos la

 

estou usando essa linha de codigo

 

local name = getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid
        
        doPlayerSendCancel(cid, tostring(name))

 

So que eu queria pegar o nome do item, eu ja tentei itemname, item.name e etc, esse ai ta pegando o id dele.

 

consegui ja, podem deletar

 

local name = getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name")

Yan Oliveira

Yan18
avatar
Moderador
Moderador

INFOS

Grupo: ModeradorRegistrado: 05/06/12Posts: 2221Gênero: Masculino

Você também pode usar a função getItemName(uid) ou getItemNameById(itemid) para pegar o nome do item, no seu caso vai usar a função getItemNameById(itemid):

local item_name = getItemNameById(getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid)

 

f55felipe

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/12/15Posts: 10

Sim , mas aquela me atende bem tbm mas vlw porem , tipo estou com um problema aqui, 

estou usando essa funcao

string.match(name,'sword')

porem se ela nao acha oque eu quero ela retorna value nil e da erra na distro,

tem algum jeito que quando ela retornase nil value nao desse o erro?

mesmo com if varias condicoes ela retorna o mesmo erro acho que e a funcao mesmo que nao pode retorna valor nulo.

Yan Oliveira

Yan18
avatar
Moderador
Moderador

INFOS

Grupo: ModeradorRegistrado: 05/06/12Posts: 2221Gênero: Masculino
19 horas atrás, f55felipe disse:

Sim , mas aquela me atende bem tbm mas vlw porem , tipo estou com um problema aqui, 

estou usando essa funcao

string.match(name,'sword')

porem se ela nao acha oque eu quero ela retorna value nil e da erra na distro,

tem algum jeito que quando ela retornase nil value nao desse o erro?

mesmo com if varias condicoes ela retorna o mesmo erro acho que e a funcao mesmo que nao pode retorna valor nulo.

Mas, o que exatamente você quer fazer com essa string do sword no string.match? Me explica sua ideia e tento te ajudar.

f55felipe

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/12/15Posts: 10

Opa eu consigui, ti, essa parte eu resolvi com string.len() ai nao da mais erro quando do string.match().

 

 

 

4 horas atrás, Yan18 disse:

Mas, o que exatamente você quer fazer com essa string do sword no string.match? Me explica sua ideia e tento te ajudar.

Estou com um problema ve se voce consegue me ajudar, tenho essa script aqui que muda de voc conforme a arma nao mao so que se o player morrer com ela

ele volta para lv 1 e perde a voc os items tbm e bug mana e vida. queria que isso nao acontecesse.

 

local effect = 30 -- Efeito que vai usar
local delay = 5000 -- em ms
 
if not setItemName then
 
    function setItemName(uid,name)
                return doItemSetAttribute(uid,'name',name)
    end
end
function onLogin(cid)
 
SendEffect(cid)
 
return true
end
function SendEffect(cid)
    if not isCreature(cid) then return end
    if (isItemEquipped(cid, CONST_SLOT_LEFT, 10223== TRUE) then          
        
             local name = getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"
             name = tostring(name)            
             local verify = string.len(name)
            if verify == 3 or verify == 34 or verify == 26 then
                doPlayerSendCancel(cid, "sua arma e lv 0")
            else
                local lvl = string.match(name,'%s%+(%d+)%s*')
                local lvnumero = tonumber(lvl) + 5
                doSendAnimatedText(getPlayerPosition(cid), "ARMA+".. tonumber(lvl) ..";)" , TEXTCOLOR_RED)
                doSendMagicEffect(getThingPos(cid), effect)
                doPlayerSetVocation(cid, lvnumero)
                doCreatureSetDropLoot(cid, false)
                doPlayerSetLossPercent(cid, PLAYERLOSS_ITEMS, 0)
                doPlayerSetLossPercent(cid, PLAYERLOSS_CONTAINERS, 0)                            
           end           
                                                             
           
    end
 
    if (isItemEquipped(cid, CONST_SLOT_LEFT, 10223== FALSE) then
        doPlayerSendCancel(cid, "o item não 10223 está em suas mãos.")        
        doPlayerSetVocation(cid, 2)
        registerCreatureEvent(cid, "BlessedPlayer")     
    end      
    addEvent(SendEffect, delay, cid)
 
end

Yan Oliveira

Yan18
avatar
Moderador
Moderador

INFOS

Grupo: ModeradorRegistrado: 05/06/12Posts: 2221Gênero: Masculino
9 horas atrás, f55felipe disse:

Opa eu consigui, ti, essa parte eu resolvi com string.len() ai nao da mais erro quando do string.match().

 

 

 

Estou com um problema ve se voce consegue me ajudar, tenho essa script aqui que muda de voc conforme a arma nao mao so que se o player morrer com ela

ele volta para lv 1 e perde a voc os items tbm e bug mana e vida. queria que isso nao acontecesse.

 

local effect = 30 -- Efeito que vai usar
local delay = 5000 -- em ms
 
if not setItemName then
 
    function setItemName(uid,name)
                return doItemSetAttribute(uid,'name',name)
    end
end
function onLogin(cid)
 
SendEffect(cid)
 
return true
end
function SendEffect(cid)
    if not isCreature(cid) then return end
    if (isItemEquipped(cid, CONST_SLOT_LEFT, 10223== TRUE) then          
        
             local name = getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"
             name = tostring(name)            
             local verify = string.len(name)
            if verify == 3 or verify == 34 or verify == 26 then
                doPlayerSendCancel(cid, "sua arma e lv 0")
            else
                local lvl = string.match(name,'%s%+(%d+)%s*')
                local lvnumero = tonumber(lvl) + 5
                doSendAnimatedText(getPlayerPosition(cid), "ARMA+".. tonumber(lvl) ..";)" , TEXTCOLOR_RED)
                doSendMagicEffect(getThingPos(cid), effect)
                doPlayerSetVocation(cid, lvnumero)
                doCreatureSetDropLoot(cid, false)
                doPlayerSetLossPercent(cid, PLAYERLOSS_ITEMS, 0)
                doPlayerSetLossPercent(cid, PLAYERLOSS_CONTAINERS, 0)                            
           end           
                                                             
           
    end
 
    if (isItemEquipped(cid, CONST_SLOT_LEFT, 10223== FALSE) then
        doPlayerSendCancel(cid, "o item não 10223 está em suas mãos.")        
        doPlayerSetVocation(cid, 2)
        registerCreatureEvent(cid, "BlessedPlayer")     
    end      
    addEvent(SendEffect, delay, cid)
 
end

Não acho viável fazer a verificação via Creaturescripts pelo evento onLogin, já que depende do item no inventário para mudar a vocation, o ideal seria fazer em Movements no evento onEquip (e onDeEquip caso tenha condição se ficar sem item). Sobre ele perder esses atributos, só acontece isso com esse seu script?

f55felipe

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/12/15Posts: 10
1 hora atrás, Yan18 disse:

Não acho viável fazer a verificação via Creaturescripts pelo evento onLogin, já que depende do item no inventário para mudar a vocation, o ideal seria fazer em Movements no evento onEquip (e onDeEquip caso tenha condição se ficar sem item). Sobre ele perder esses atributos, só acontece isso com esse seu script?

Arrumei ja vlw pela tentativa de me ajudar , nao vou mecher ja tenho tdos os scripts feitos. 

Yan Oliveira

Yan18
avatar
Moderador
Moderador

INFOS

Grupo: ModeradorRegistrado: 05/06/12Posts: 2221Gênero: Masculino
16 horas atrás, f55felipe disse:

Arrumei ja vlw pela tentativa de me ajudar , nao vou mecher ja tenho tdos os scripts feitos. 

Ai você que vê, se quiser posso te ajudar com esse script de mudar vocation de acordo com item equipado.