Ir para conteúdo
  • 0

Matar Monstro E Perder Storage


nbb147

Pergunta

11 respostass a esta questão

Posts Recomendados

  • 0

creaturescripts.xml:

 

<event type="kill" name="MonsterStor" script="monsterstor.lua.lua"/>

 

monsterstor.lua:

 

function onKill(cid, target)

local monsters = { -- Nome do monstro, storage e quanto perderá

["dragon"] = {stor = 1234, lost = 3},

["demon"] = {stor = 1234, lost = 3}

}

 

local m = monsters[target]

 

setPlayerStorageValue(cid, m.stor, getPlayerStorageValue(cid, m.stor-m.lost))

return true

end

 

 

login.lua:

 

registerCreatureEvent(cid, "MonsterStor")

 

Não sei se vai funcionar, mas tentemos, né.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

não vai funcionar como esperado, mas vai funcionar sim:

 

nessa expressão "getPlayerStorageValue(cid, m.stor-m.lost)", você vai estar pegando o valor da storage do player de key (m.stor - m.lost), no caso se ele matar um dragon, o storage 1234 vai ter o mesmo valor do storage 1231 do player...

mas pior ainda, porque target é o UID da criatura que morreu, e você tá procurando numa tabela que só tem index de string, então não vai encontrar nada... e mesmo se encontrasse, quand oo player matasse um monstro que não está configurado na tabela, também vai dar erro, o correto seria algo assim:

 

local monsters = { -- Nome do monstro, storage e quanto perderá
["dragon"] = {stor = 990, lose = 1},
["demon"] = {stor = 991, lose = 1}
}
function onKill(cid, target)
local m = monsters[getCreatureName(target):lower()]
if not m then return true end
setPlayerStorageValue(cid, m.stor, getPlayerStorageValue(cid, m.stor) - m.lose)
return true
end

 

e eu ainda recomendo fazer por onDeath, e não por onKill, pois o onKill vai ser executado sempre que o player matar alguma coisa, e o onDeath é executado apenas quando o específico monstro morre, portanto roda menos vezes. o onKill roda várias vezes desnecessariamente. Sem falar que o onKill só consta o player que deu o último golpe no monstro, e o onDeath registra todos que participaram na morte do monstro, assim:

 

local monsters = { -- Nome do monstro, storage e quanto perderá
["dragon"] = {stor = 990, lose = 1},
["demon"] = {stor = 991, lose = 1}
}
function onDeath(monster, corpse, deathList)
local m = monsters[getCreatureName(monster):lower()]
if not m then return true end
for _, cid in pairs (deathList) do
   if isCreature(cid) and isPlayer(cid) then
    setPlayerStorageValue(cid, m.stor, getPlayerStorageValue(cid, m.stor) - m.lose)
   end
end
return true
end

 

aí só precisaria adicionar a tag no creaturescripts.xml:

 

<event type="death" name="StorageChangeOnDeath" event="script" value="NOME_DO_SCRIPT.lua"/>

 

e adicionar esse código:

 

<script>
<event name="StorageChangeOnDeath"/>
</script>

 

antes do último </monster> no XML do monstro que vai mudar o storage de quem o matou

Link para o comentário
Compartilhar em outros sites

  • 0

cara funcionou perfeitamente cara, so uma coisa tem como adicionar um teleport ae? tipow quando ocara matar e o monstro e perder a storage ele ser teleportado para certa pos x ,y ,z...

 

---------------------EDIT----------------------------

 

vixe deu problema, pq quando eu uso mais de um script igual ai da merd@, nao funciona, tem como resolver isso?

----

 

-------------------EDIT--------------------------------

 

prooblema, agora nao nao ta pegando de jeito nenhum, nao da nenhum erro, mais tambem nao remove a storage... ajuda ae alguem por favor :o

Editado por nbb147
Link para o comentário
Compartilhar em outros sites

  • 0

cara nao sei oq ta acontecendo nao q nao ta perdendo a storage, olhai como eu estou usando o script:

 

 

 

local monsters = { -- Nome do monstro, storage e quanto perderá

["mizuki"] = {stor = 11110, lose = 1},

["ebisu"] = {stor = 11111, lose = 1}

}

function onDeath(monster, corpse, deathList)

local m = monsters[getCreatureName(monster):lower()]

if not m then return true end

for _, cid in pairs (deathList) do

if isCreature(cid) and isPlayer(cid) then

setPlayerStorageValue(cid, m.stor, getPlayerStorageValue(cid, m.stor) - m.lose)

end

end

return true

end

 

-----------------------------EDIT-----------------------------------

 

cara eu to envolvendo tres eventos no msm monstro, sera q nao é isso q esta atrapalhando?

Editado por nbb147
Link para o comentário
Compartilhar em outros sites

  • 0

tag creaturescript:

 

<event type="death" name="RemoveStorage" event="script" value="remove mizuki.lua"/>

 

monster:

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<monster name="mizuki" namedescription="a mizuki" race="blood" experience="6000" speed="215" manacost="0">
 <health now="600" max="600"/>
 <look type="81" corpse="0"/>
 <targetchange interval="2000" chance="0"/>
 <strategy attack="100" defense="0"/>
 <flags>
<flag summonable="0"/>
<flag attackable="1"/>
<flag hostile="1"/>
<flag illusionable="1"/>
<flag convinceable="1"/>
<flag pushable="0"/>
<flag canpushitems="1"/>
<flag canpushcreatures="0"/>
<flag targetdistance="1"/>
<flag staticattack="90"/>
<flag runonhealth="0"/>
 </flags>
 <attacks>
<attack name="melee" interval="2000" skill="40" attack="34"/>
 </attacks>
 <defenses armor="10" defense="7"/>
<elements>
 <element icePercent="0"/>
 <element holyPerent="0"/>
 <element earthPercent="0"/>
 <element deathPercent="0"/>
 </elements>
 <script>
	<event name="Mizuki"/>
 </script>
 <immunities>
<immunity physical="0"/>
<immunity energy="0"/>
<immunity fire="0"/>
<immunity poison="0"/>
<immunity lifedrain="0"/>
<immunity paralyze="0"/>
<immunity outfit="0"/>
<immunity drunk="0"/>
<immunity invisible="0"/>
 </immunities>
 <voices interval="5000" chance="10">
<voice sentence="Mim da esse pergaminho agora!"/>
<voice sentence="Voce vai morrer como o iruka."/>
 </voices>
 <loot>

 

cara consegui colocar pra funcionar vc ajudou muito ^^

ty rep+

Editado por nbb147
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...