Tenta usar a função onKill, onDeath é quando morre, onKill é quando mata...
checar storage, matar monstro e ganhar outra storage
Por nbb147, 31 de jul. de 2016 em Scripts
info
Grupo: Infante
Registrado: 06/03/13
Posts: 1.6k
Reputação: +319
Gênero: Masculino
Char no Tibia: Lord Sorte

info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado

ficou do mesmo jeito, eu percebi que o problema está na checagem da storage, pois quando tiro a checagem funciona normalmente.
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

A variavel 'storage' nao foi declarada:
CitargetCreatureStorage(target, storage)
Pelo o que eu vi no script, existe uma variavel chamada 'Storage', com a primeira letra maiuscula; lembre-se, lua diferencia maiuscula de minuscula.
Outra coisa, numca faça isso:
Citarfor _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)endendfor _, var in pairs(players) dosetPlayerStorageValue(var, Storage, 3)end
Não ha necessidade de adicionar os valores em uma tabela para depois pecorrer ela, sendo que tudo pode ser feito no mesmo loop.
Citarfor _, check in pairs(deathList) do
if isPlayer(check) then
setPlayerStorageValue(check, Storage, 3)
end
end
info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado

concertei a parte da storage, e depois removi essa checagem, já que é inútil, e não funcionou, agora até mesmo sem a checagem da sto o player não recebe a nova sto.
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

O parametro da variavel target declarado nas funções getstore e isplayer, não foi declarada.
CitargetCreatureStorage(target, storage) == 2
CitarisPlayer(target)
Nesse caso, para verificar se o player tem a store, ou se é player, voce teria que varrer a tabela deathlist.
info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado

como eu poderia fazer isso? dessa forma?
for _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Numca faça isso.
Lembra dessa parte que refiz pra voce?
Citarfor _, check in pairs(deathList) do
if isPlayer(check) then
setPlayerStorageValue(check, Storage, 3)
end
end
Então, ele ja esta percorrendo a tabela deathlist, logo, voce so precisa modificar a condição.
Citarif isPlayer(check) and getCreatureStorage(check, storage) == 2 then
Lembre-se de remover a sentença posta no if inicial:
Citarif isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and isPlayer(target) and getCreatureStorage(target, storage) == 2 then
Remove o isplayer e getstore.
info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado

fiz de uma maneira aqui que ela sem o getsto funciona perfeitamente, agora quando coloco diz que a não reconhece a criatura:
[31/07/2016 15:14:36] [Error - CreatureScript Interface] [31/07/2016 15:14:36] data/creaturescripts/scripts/ryuuthemonk.lua:onDeath[31/07/2016 15:14:36] Description: [31/07/2016 15:14:36] (luaGetCreatureStorage) Creature not found
e o script ficou assim:
function onDeath(cid, corpse, deathList)local monstName,players = "Ashar", {}if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and getCreatureStorage(check, storage) == 2 thendoCreatureSay(cid, "Você matou Ashar o líder da ceita.", TALKTYPE_ORANGE_1)for _, check in pairs(deathList) doif isPlayer(check) thensetPlayerStorageValue(check, 92000, 3)return trueendend endend
agora me explica uma coisa, você disse para eu remover o isplayer e o getsto do if, bom o isplayer eu até entendi o porque, mas o getsto porque eu iria retirar? como eu iria fazer a checagem da storage?
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

Simplesmente por causa do erro que esta acontecendo, dele nao encotrar a criatura.
CitargetCreatureStorage(check, storage) == 2
A variavel 'check', nao foi declarada, nao esta visivel para essa funcao ou nao é uma criatura; por isso pedi para remover de la e por no loop onde tem a variavel check valida como criatura.
Citarfunction onDeath(cid, corpse, deathList)
local monstName,players,storage = "Ashar", {},0000
if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) then
for _, check in pairs(deathList) do
if isPlayer(check) and getCreatureStorage(check, storage) == 2 then
doCreatureSay(check, "Você matou Ashar o líder da ceita.", TALKTYPE_ORANGE_1)
setPlayerStorageValue(check, 92000, 3)
end
end
end
rerurn true
end
info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado

simplesmente perfeito, gostaria muito de compreender os scripts como você compreende, vou continuar estudando pra alcançar esse nível, muito obrigado e rep+



info
Grupo: Visconde
Registrado: 06/04/11
Posts: 350
Reputação: +8
Char no Tibia: Mulekepirado
e ai pessoal, eu estava montando um creaturescript pra quando o player matar um monstro checar se ele(o player) possui uma storage e caso ele tenha, ser adicionado uma outra storage por cima, no caso a storage só é adicionada ao matar o monstro, se o player possuir uma devida storage, sou uma bosta em montar creaturescript, eles nunca funcionam como eu imagino que funcionam
venho aqui pedir a ajuda de alguém mais experiente : O
agradeço desde já qualquer ajuda, script: