Ir para conteúdo
  • Cadastre-se

(Resolvido)Aol Duração 30 Death


Ir para solução Resolvido por Danihcv,

Posts Recomendados

to precisando de um Aol que funcione durante 30x porexemplo eu to com o Aol,ai morro 1,2,3,4... e meu Loot não cai(a menos que esteje red ou black),ai quando for a 30x q eu morri com o mesmo aol o aol some.

 

Rep+ pra quem ajuda

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites

Vê se assim funciona:

Vá na pasta data/creaturescripts/scripts e veja se tem um arquivo chamado preparedeath.lua se tiver basta substituir seu conteúdo inteiro por este:

  Mostrar conteúdo oculto

 

Se não tiver, adicione essa tag ao arquivo creaturescripts.xml:

	<event type="death" name="SkullAmulet" event="script" value="preparedeath.lua"/>

E crie o arquivo preparedeath.lua e coloque o código que eu coloquei aí.

 

 

 

Se funcionar, eu vejo se dá pra simplificar. 

É pq eu não sei se dá pra esvaziar uma table toda. To pesquisando aqui.

 

@Edit:

Independente do resultado do script acima, teste esse tambem:

local stor = {}

function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller)
if isPlayer(cid) == TRUE then
if (getPlayerSlotItem(cid, 2).itemid == 2173) then
doCreatureSetDropLoot(cid, false)
doPlayerSetLossSkill(cid, false)
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
if #stor < 30 then
table.insert(stor, (#stor + 1))
else
for k in pairs (t) do
    t[k] = nil
end
end
return TRUE
end
end
return TRUE
end

Obs: Não deixe de testar os dois códigos. O segundo está mais otimizado, por isso será melhor se ele funcionar logo de primeira. Mas se ele não funcionar, teste o primeiro e diga o resultado.

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

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

irei ver se funciona ja edito aki..

 

--edit--

funciono não ele fica Infinito ja fis meu char morre 40x '-'

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

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites

Testou os dois scripts?

Dá algum erro na distro?

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

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

não simplesmente,fica infinito,sem erro sem nada

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites

Nos dois scripts?

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Putz... Burrei, acabei de reler o 2° script e vi que eu declarei a table errada, uma table inexistente.

local stor = {}

function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller)
if isPlayer(cid) == TRUE then
if (getPlayerSlotItem(cid, 2).itemid == 2173) then
doCreatureSetDropLoot(cid, false)
doPlayerSetLossSkill(cid, false)
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
if #stor < 30 then
table.insert(stor, (#stor + 1))
else
for k in pairs(stor) do
    stor[k] = nil
end
end
end
end
return TRUE
end

Tenta agora.

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

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Faz um bom tempo que não scripteio, mas pelo que entendi da sua descrição, isso talvez baste. E eu não sei como esse AoL funciona (não jogo Tibia). Na verdade, só li o código do danihcv e tirei minha conclusão sobre.

Como ele quer que o item tenha 30 cargas, basta usar atributos. Fica mais fácil.

function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller)
    if isPlayer(cid) then
        if getPlayerSlotItem(cid, 2).itemid == 2173 then
            local v = getItemAttribute(getPlayerSlotItem(cid, 2).uid, "charges") or 0
            if v < 29 then  
                doCreatureSetDropLoot(cid, false)
                doPlayerSetLossSkill(cid, false)
                doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10)
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
                doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v + 1)                
            else
                doRemoveItem(getPlayerSlotItem(cid, 2).uid)
            end
        end
    end
    return true
end

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites
  Em 30/12/2014 em 01:15, zipter98 disse:

Faz um bom tempo que não scripteio, mas pelo que entendi da sua descrição, isso talvez baste. E eu não sei como esse AoL funciona (não jogo Tibia). Na verdade, só li o código do danihcv e tirei minha conclusão sobre.

Como ele quer que o item tenha 30 cargas, basta usar atributos. Fica mais fácil.

function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller)
    if isPlayer(cid) then
        if getPlayerSlotItem(cid, 2).itemid == 2173 then
            local v = getItemAttribute(getPlayerSlotItem(cid, 2).uid, "charges") or 0
            if v < 29 then  
                doCreatureSetDropLoot(cid, false)
                doPlayerSetLossSkill(cid, false)
                doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10)
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
                doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v + 1)                
            else
                doRemoveItem(getPlayerSlotItem(cid, 2).uid)
            end
        end
    end
    return true
end

Mostrar mais  
O certo não seria isso ?

 

function onDeath(cid, corpse, deathList, lastHitKiller, mostDamageKiller)
    if isPlayer(cid) then
        if getPlayerSlotItem(cid, 2).itemid == 2173 then
            local v = getItemAttribute(getPlayerSlotItem(cid, 2).uid, "charges") or 0
            if v >= 1 then  
                doCreatureSetDropLoot(cid, false)
                --[[doPlayerSetLossSkill(cid, false) < não precisa pois aol não salva skill]]
                doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 10)
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
                doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v - 1)                
            else
                doRemoveItem(getPlayerSlotItem(cid, 2).uid)
            end
        end
    end
    return true
end
/\ Não sei se estou certo, mas, pode ser uma possibilidade pois não testei nada.

@Edit

Meu deus, odeio quando os Quote buga.

Editado por Snowsz (veja o histórico de edições)
                              _
                          .-'` `}
                  _./)   /       }
                .'o   \ |       }
                '.___.'`.\    {`
                /`\_/  , `.    }                                      ME DA UMA NOZ!
                \=' .-'   _`\  {
                 `'`;/      `,  }
                    _\   @   ;  }
                   /__`;-...'--'

Cluck!

Link para o post
Compartilhar em outros sites
if v < 29 then 

Se as charges do seu AoL forem menores que 29, ou seja, você tiver morrido 29 vezes com ele, você não vai perder items, experiência, ou seja lá o quê você deixa de perder com AoL. Se você colocar como mostrou (v >= 1), o item vai ser removido automaticamente, visto que, caso as charges não sejam maiores ou iguais a 1, é programado para remover o item.

doPlayerSetLossSkill(cid, false)

E sobre essa função: como eu já disse, não faço ideia do quê AoL faz, e me baseei no código do danihcv. Você pode removê-la, se quiser.

doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v - 1)

E sobre isso: os atributos tem valor inicial nulo.

Neste código, fiz uma coisinha na variável v para que, no caso do valor do atributo charges ser nulo, o valor adotado seja 0. Setando o valor deste atributo para v - 1, as charges passariam a ser negativas. 

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites
  Em 30/12/2014 em 03:11, zipter98 disse:
if v < 29 then 

Se as charges do seu AoL forem menores que 29, ou seja, você tiver morrido 29 vezes com ele, você não vai perder items, experiência, ou seja lá o quê você deixa de perder com AoL. Se você colocar como mostrou (v >= 1), o item vai ser removido automaticamente, visto que, caso as charges não sejam maiores ou iguais a 1, é programado para remover o item.

doPlayerSetLossSkill(cid, false)

E sobre essa função: como eu já disse, não faço ideia do quê AoL faz, e me baseei no código do danihcv. Você pode removê-la, se quiser.

doItemSetAttribute(getPlayerSlotItem(cid, 2).uid, "charges", v - 1)

E sobre isso: os atributos tem valor inicial nulo.

Neste código, fiz uma coisinha na variável v para que, no caso do valor do atributo charges ser nulo, o valor adotado seja 0. Setando o valor deste atributo para v - 1, as charges passariam a ser negativas. 

 

Mostrar mais  

O problema é que não testei, e tenho certas batalhas com doItemSetAttribute e getPlayerSlotItem :P, quando tento checar o atributo attack do slot esquerdo da mão do player retorna nil, mesmo com espada, o desgraça...

                              _
                          .-'` `}
                  _./)   /       }
                .'o   \ |       }
                '.___.'`.\    {`
                /`\_/  , `.    }                                      ME DA UMA NOZ!
                \=' .-'   _`\  {
                 `'`;/      `,  }
                    _\   @   ;  }
                   /__`;-...'--'

Cluck!

Link para o post
Compartilhar em outros sites

testei todos os scripts nem um funcionou :'C,e a proposito o meu Servidor é de NTO

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites

Tente:

function onDeath(cid)
    aol = 2173
    slot = getPlayerSlotItem(cid, CONST_SLOT_NECKLACE)
    
    if slot.itemid == aol and getItemAttribute(slot.uid, 'charges') == 1 then
        doRemoveItem(slot.uid)
    end
    
    return true
end

PS: Não se esqueça de registrar o creature event death em login.lua




Se não obtiver sucesso, outro método possível seria por storage:

function onDeath(cid)
    aol = {2173, 30}
    stor = 76543
    slot = getPlayerSlotItem(cid, CONST_SLOT_NECKLACE)
    
    if slot.itemid == aol[1] then
        if getPlayerStorageValue(cid, stor) < 1 then
            setPlayerStorageValue(cid, stor, aol[2] - 1)
        elseif getPlayerStorageValue(cid, stor) == 1 then
            setPlayerStorageValue(cid, stor, -1)
            doRemoveItem(slot.uid)
        else
            setPlayerStorageValue(cid, stor, getPlayerStorageValue(cid, stor) - 1)
        end
    end
    
    return true
end

Novamente: Não se esqueça de registrar o creature event death em login.lua




Certifique-se de que a seguinte tag no seu amulet of loss em items.xml (por precaução):

<attribute key="preventDrop" value="1" />
Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Para que essas lenga lengas toda? o.O

 

vai em item.xml e mude isso

	<item id="2173" article="an" name="amulet of loss">
		<attribute key="weight" value="420"/>
		<attribute key="slotType" value="necklace"/>
		<attribute key="preventDrop" value="1"/>
		<attribute key="charges" value="1"/>
	</item>

para isso

	<item id="2173" article="an" name="amulet of loss">
		<attribute key="weight" value="420"/>
		<attribute key="slotType" value="necklace"/>
		<attribute key="preventDrop" value="1"/>
		<attribute key="charges" value="30"/>
	</item>

Te ajudei? Então Rep + ;)

Link para o post
Compartilhar em outros sites

  Em 30/12/2014 em 15:47, narazaky disse:
Para que essas lenga lengas toda? o.O
Mostrar mais  


Testei desse modo. As charges bugaram e deixaram o item infinito, por isso não indiquei essas tags.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

vdd, testei no otx nao bugou, ate que chegou na ultima charge, perdao pelo post

Te ajudei? Então Rep + ;)

Link para o post
Compartilhar em outros sites
  Em 30/12/2014 em 15:35, Suicide disse:

 

Tente:

function onDeath(cid)
    aol = 2173
    slot = getPlayerSlotItem(cid, CONST_SLOT_NECKLACE)
    
    if slot.itemid == aol and getItemAttribute(slot.uid, 'charges') == 1 then
        doRemoveItem(slot.uid)
    end
    
    return true
end

PS: Não se esqueça de registrar o creature event death em login.lua

Se não obtiver sucesso, outro método possível seria por storage:

function onDeath(cid)
    aol = {2173, 30}
    stor = 76543
    slot = getPlayerSlotItem(cid, CONST_SLOT_NECKLACE)
    
    if slot.itemid == aol[1] then
        if getPlayerStorageValue(cid, stor) < 1 then
            setPlayerStorageValue(cid, stor, aol[2] - 1)
        elseif getPlayerStorageValue(cid, stor) == 1 then
            setPlayerStorageValue(cid, stor, -1)
            doRemoveItem(slot.uid)
        else
            setPlayerStorageValue(cid, stor, getPlayerStorageValue(cid, stor) - 1)
        end
    end
    
    return true
end

Novamente: Não se esqueça de registrar o creature event death em login.lua

Certifique-se de que a seguinte tag no seu amulet of loss em items.xml (por precaução):

<attribute key="preventDrop" value="1" />
Mostrar mais  

poderia me manda a tag que eu preciso coloca na login.xml? é q to meio confuso com essa parada

 

--edit--

uma coisa que estou esquecendo de menciona e espero q esteje fazendo certo se caso estive augo errado me corrigem pfv

 

na items.xml colokei assim a tag

 

    <item id="2138" article="a" name="jashin amulet">
        <attribute key="description" value="Nao deixa perder items a menos que esteja redskull." />
        <attribute key="weight" value="5200" />
        <attribute key="armor" value="3" />
        <attribute key="slotType" value="necklace" />
        <attribute key="preventDrop" value="2" />
    </item>

na creaturescript.xml colokei assim

<event type="death" name="SkullAmulet" event="script" value="preparedeath.lua"/>

e em login.lua colokei assim

registerCreatureEvent(cid, "SkullAmulet") 

se caso augo estivér errado ou se falta augo porfavor ajuda ae é que essa Jam de 30 de duração é realmente importante para oque estou fazendo.

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

 

Projeto/Serviços que desenvolvi durante esse Tempo.

[SERVIDOR] - NTO By Madara Rinnegan - Criado em 2014

Link para o post
Compartilhar em outros sites
  Em 31/12/2014 em 01:30, Onepiece disse:
poderia me manda a tag que eu preciso coloca na login.xml? é q to meio confuso com essa parada
Expand   Mostrar mais  

 

Relaxa. Mas não é uma tag, é uma função e o arquivo é com extensão Lua.

Remova qualquer outro creaturescript de aol e faça o seguinte:

amuletofloss.lua (data\creaturescripts\scripts):

function onDeath(cid)
    aol = {2173, 30}
    stor = 76543
    slot = getPlayerSlotItem(cid, CONST_SLOT_NECKLACE)
    
    if slot.itemid == aol[1] then
        if getPlayerStorageValue(cid, stor) < 1 then
            setPlayerStorageValue(cid, stor, aol[2] - 1)
        elseif getPlayerStorageValue(cid, stor) == 1 then
            setPlayerStorageValue(cid, stor, -1)
            doRemoveItem(slot.uid)
        else
            setPlayerStorageValue(cid, stor, getPlayerStorageValue(cid, stor) - 1)
        end
    end
    
    return true
end

Tag - creaturescripts.xml (data\creaturescripts):

<event type="death" name="AmuletOfLoss" event="script" value="amuletofloss.lua"/>

Registre o creature event em login.lua (data\creaturescripts\scripts):

registerCreatureEvent(cid, "AmuletOfLoss")
Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo