Postado Julho 30, 2016 8 anos E ai galera, esses dias eu estava tentando fazer um script que o pessoal procura muito que é o famoso sistema de saga, que consiste no seguinte, o player só pode atacar e ser atacado por uma devida criatura se possuir certa storage caso contrario a criatura não ira se mover, bom, consegui fazer quase tudo em lua, só que existe um pequeno problema, que é o seguinte, esse problema está na parte que retorna a speed da criatura, a speed não retorna, tudo funciona corretamente exceto essa parte, tudo por conta do 'return false', esse comando retorna toda a função fazendo com que o onAttack não funcione ou seja o player não seja atacado mesmo possuindo a storage, peça humildemente a ajuda de vocês e agradeço desde já qualquer intenção, script: local name, storage = 'fire devil', 11112 local sto = 800000 local speedchange = 0 function onAttack(cid, target) if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 then setPlayerStorageValue(cid, sto, getCreatureSpeed(cid)) doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, speedchange) return false end if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) > 1 then -- O ERRO PERTENCE A ESSA PARTE doChangeSpeed(cid, -getCreatureSpeed(cid)) local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto) doChangeSpeed(cid, oldspeed) return false -- O PROBLEMA ESTA AQUI end return true end function onCombat(cid, target) if isPlayer(cid) and getCreatureStorage(cid, storage) < 0 and isMonster(target) and getCreatureName(target):lower() == name then doPlayerSendCancel(cid, 'You cannot attack this monster.') return false end if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 then return false end return true end function onKill(cid, target, lastHit) if isMonster(target) and getCreatureName(target):lower() == name and isPlayer(cid) and getCreatureStorage(cid, storage) > 0 then doCreatureSetStorage(cid, storage, -1) end return true end
Postado Julho 30, 2016 8 anos 16 minutos atrás, nbb147 disse: E ai galera, esses dias eu estava tentando fazer um script que o pessoal procura muito que é o famoso sistema de saga, que consiste no seguinte, o player só pode atacar e ser atacado por uma devida criatura se possuir certa storage caso contrario a criatura não ira se mover, bom, consegui fazer quase tudo em lua, só que existe um pequeno problema, que é o seguinte, esse problema está na parte que retorna a speed da criatura, a speed não retorna, tudo funciona corretamente exceto essa parte, tudo por conta do 'return false', esse comando retorna toda a função fazendo com que o onAttack não funcione ou seja o player não seja atacado mesmo possuindo a storage, peça humildemente a ajuda de vocês e agradeço desde já qualquer intenção, script: local name, storage = 'fire devil', 11112 local sto = 800000 local speedchange = 0 function onAttack(cid, target) if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 then setPlayerStorageValue(cid, sto, getCreatureSpeed(cid)) doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, speedchange) return false end if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) > 1 then -- O ERRO PERTENCE A ESSA PARTE doChangeSpeed(cid, -getCreatureSpeed(cid)) local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto) doChangeSpeed(cid, oldspeed) return false -- O PROBLEMA ESTA AQUI end return true end function onCombat(cid, target) if isPlayer(cid) and getCreatureStorage(cid, storage) < 0 and isMonster(target) and getCreatureName(target):lower() == name then doPlayerSendCancel(cid, 'You cannot attack this monster.') return false end if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 then return false end return true end function onKill(cid, target, lastHit) if isMonster(target) and getCreatureName(target):lower() == name and isPlayer(cid) and getCreatureStorage(cid, storage) > 0 then doCreatureSetStorage(cid, storage, -1) end return true end Não entendi porque esse return false está aí, essa é a condição que o player poderia atacar, porque tem o storage necessário e a speed retorna, troque por um return true
Postado Julho 30, 2016 8 anos Autor quando coloco return true, o personagem que possui a storag ao chegar perto da criatura é atacada mas o monstro fica travando, tipo, anda e para, anda e para, e se eu me afastar muito do monstro ele para totalmente e só volta a andar quando o personagem encosta novamente no monstro Editado Julho 30, 2016 8 anos por nbb147 (veja o histórico de edições)
Postado Agosto 1, 2016 8 anos acho melhor fazer por C++ esse código já está disponível https://otland.net/threads/passive-monsters-attack-when-attacked.232475/ [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Agosto 2, 2016 8 anos Autor mas ai não seria o que preciso, isso dai já é outra parada, mas de qualquer maneira agradeço. sem contar que isso dai é pra tfs 1.1, o meu tfs é 0.3, os locais são diferentes
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.