NB
tfs 0.3

checar storage, matar monstro e ganhar outra storage

Por nbb147, 31 de jul. de 2016 em Scripts

monstro
storage
ganha
perde
creaturescri
11
2.4k
nbb147N
31 de julho de 2016 às 12:02

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:AreYouSerious-min:

venho aqui pedir a ajuda de alguém mais experiente  : O 

agradeço desde já qualquer ajuda, script:

 

function onDeath(cid, corpse, deathList)local Storage,monstName,players = 92000, "Ashar", {}if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and isPlayer(target) and getCreatureStorage(target, storage) == 2 thendoCreatureSay(cid, "Você matou Ashar o líder da ceita.", TALKTYPE_ORANGE_1)for _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)endendfor _, var in pairs(players) dosetPlayerStorageValue(var, Storage, 3)endend return trueend

 

kttallanK
31 de julho de 2016 às 12:22

Tenta usar a função onKill, onDeath é quando morre, onKill é quando mata...

nbb147N
31 de julho de 2016 às 12:50

ficou do mesmo jeito, eu percebi que o problema está na checagem da storage, pois quando tiro a checagem funciona normalmente.

PoccnnP
31 de julho de 2016 às 13:03

A variavel 'storage' nao foi declarada:

Citar
getCreatureStorage(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:

Citar
for _, 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.

Citar

for _, check in pairs(deathList) do

if isPlayer(check) then

setPlayerStorageValue(check, Storage, 3)

end

end

 

nbb147N
31 de julho de 2016 às 13:31

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.

PoccnnP
31 de julho de 2016 às 14:19

O parametro da variavel target declarado nas funções getstore e isplayer, não foi declarada.

Citar
getCreatureStorage(target, storage) == 2
Citar
isPlayer(target)

 

Nesse caso, para verificar se o player tem a store, ou se é player, voce teria que varrer a tabela deathlist.

nbb147N
31 de julho de 2016 às 14:33

como eu poderia fazer isso? dessa forma?

 

for _, check in pairs(deathList) doif isPlayer(check) thentable.insert(players, check)

 

PoccnnP
31 de julho de 2016 às 14:42

Numca faça isso.

 

Lembra dessa parte que refiz pra voce?

Citar

for _, 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.

Citar

if isPlayer(check) and getCreatureStorage(check, storage) == 2 then

 

Lembre-se de remover a sentença posta no if inicial:

Citar
if isMonster(cid) and string.lower(getCreatureName(cid)) == string.lower(monstName) and isPlayer(target) and getCreatureStorage(target, storage) == 2 then

 

Remove o isplayer e getstore.

nbb147N
31 de julho de 2016 às 15:19

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?
 

PoccnnP
01 de agosto de 2016 às 08:44

Simplesmente por causa do erro que esta acontecendo, dele nao encotrar a criatura.

Citar
getCreatureStorage(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.

 

Citar

function 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 

 

nbb147N
01 de agosto de 2016 às 09:13

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