a primeira é um creaturescript onStatsChange, pra cada dano q ele receber vc checa se tem a storage que vc quer e faz um math.random(1, 100), se for <= 10 então retorna falso, do contrário retorna true.
a segunda passiva ativaria ao ser atacado tb? pq se for a é a mesma coisa que a primeira só que ai eu verificaria três coisas:
1- vc checa se tem a storage1 que vc quer e faz um math.random(1, 100), se for <= 10 então muda o storage2 pra ser os.time() + 5 * 60 [5 MINUTOS]
2- checa se o storage2 - os.time() <= 0 e retorna true ou falso
3- na primeira checagem vc tem que checar se ela ja não está ativada. Pra não acabar re-ativando com ela já ativada.
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

info
Grupo: Visconde
Registrado: 26/04/08
Posts: 251
Reputação: +36
Gênero: Masculino
Char no Tibia: Senhor Mithril

Se não for pedir muito, teria como você fazer para mim?
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

porque vc não tenta fazer e eu vou te ajudando pra direcionar rumo à resposta correta? acho q vc aprenderia mais desse modo...
info
Grupo: Conde
Registrado: 07/04/15
Posts: 962
Reputação: +258
Gênero: Masculino

Versão TFS??
info
Grupo: Visconde
Registrado: 26/04/08
Posts: 251
Reputação: +36
Gênero: Masculino
Char no Tibia: Senhor Mithril

Eu só conheço a linguagem lua das versões 8.10 pra baixo, apartir da 8.2+ mudou totalmente, então meio que me perdi, Quando tento fazer esses scripts utilizando outros de outras pessoas acabo me perdendo e bugando tudo,
Versão TFS 0.36
Tibia: 8.54
info
Grupo: Conde
Registrado: 07/04/15
Posts: 962
Reputação: +258
Gênero: Masculino

O.36 tem statschange wolf??
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

sim
a primeira é um creaturescript onStatsChange, pra cada dano q ele receber vc checa se tem a storage que vc quer e faz um math.random(1, 100), se for <= 10 então retorna falso, do contrário retorna true.
a segunda passiva ativaria ao ser atacado tb? pq se for a é a mesma coisa que a primeira só que ai eu verificaria três coisas:
1- vc checa se tem a storage1 que vc quer e faz um math.random(1, 100), se for <= 10 então muda o storage2 pra ser os.time() + 5 * 60 [5 MINUTOS]
2- checa se o storage2 - os.time() <= 0 e retorna true ou falso
3- na primeira checagem vc tem que checar se ela ja não está ativada. Pra não acabar re-ativando com ela já ativada.
Desculpe a falta de noção...Wolf...mas,
onStatsChange é um callback certo? que ativa quando a criatura ou player perde hp/mana,
se fazer o script dessa forma não daria erro em bloquear? porque tecnicamente o dano já teria sido removido...
estou tentando aprender, portanto posso estar completamente errado :smile_positivo:
Quase sempre que faço um script da um erro de sintaxe ou na propria logica da programação...
por isso nem vou arriscar esse que parece bem mais complexo.
Editado Fevereiro 16 por Darkraus
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

statschange
quando é executada:
-Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana)
Parametros:
- cid = creatureid do player ou monstro q ganha/perde vida/mana
- attacker = creatureid do player ou monstro que causou a mudança na health/mana
- type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo:
STATSCHANGE_HEALTHGAIN = 0
STATSCHANGE_HEALTHLOSS = 1
STATSCHANGE_MANAGAIN = 2
STATSCHANGE_MANALOSS = 3
- combat = o tipo de combat que causou a alteração, sendo esses tipos:
COMBAT_NONE = 0
COMBAT_PHYSICALDAMAGE = 1
COMBAT_ENERGYDAMAGE = 2
COMBAT_EARTHDAMAGE = 4
COMBAT_POISONDAMAGE = 4
COMBAT_FIREDAMAGE = 8
COMBAT_UNDEFINEDDAMAGE = 16
COMBAT_LIFEDRAIN = 32
COMBAT_MANADRAIN = 64
COMBAT_HEALING = 128
COMBAT_DROWNDAMAGE = 256
COMBAT_ICEDAMAGE = 512
COMBAT_HOLYDAMAGE = 1024
COMBAT_DEATHDAMAGE = 2048
- value = valor da mudança
quando está return false:
- O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas
Registra creature event:
- Sim
type="statschange"
function onStatsChange(cid, attacker, type, combat, value)
Eu estava com uma aba do navegador aberta neste tutorial seu. era uma duvida de interpretação mesmo.
Se eu tentasse fazer esse script que foi pedido assim :
local storage1 = xxx
local chance = math.random(1,100))
onStatsChange(cid, attacker, 1, 1, VALUE)
----------- edit2
fiz umas ediçoes para arrumar erros do script...
dê uma olhada:
local storage1 = xxx
local storage2 = yyy
local chance = math.random(1,100)
function onStatsChange(cid, attacker, type, combat, value)
if getPlayerStorageValue(cid) == storage1 then
if chance <= 10 then
doSendAnimatedText(getPlayerPosition(cid), Blocked, 180)
return false
else
return true
end
end
end
Editado Fevereiro 16 por Darkraus
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

hmm, foi quase mas faltou algumas pequenas coisas:
local storage1 = xxx function onStatsChange(cid, attacker, type, combat, value) -- isso aqui é padrão, oque vc pode é brincar com os parametros aqui embaixo: if type == STATSCHANGE_HEALTHLOSS or (type == STATSCHANGE_MANALOSS and getCreatureCondition(cid, CONDITION_MANASHIELD)) then if getPlayerStorageValue(cid, storage) >= 1 then -- a função estava sendo usada de forma errada local chance = math.random(1,100) -- a chance tem que ficar dentro do callback pra ser calculada toda vez que ele for executado, do contrário -- ela só vai ser calculada uma vez e ser aquele valor pra sempre até o servidor resetar if chance <= 10 then return false end end end return true end --- forma alternativa: local storage1 = xxx function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS or (type == STATSCHANGE_MANALOSS and getCreatureCondition(cid, CONDITION_MANASHIELD)) then if getPlayerStorageValue(cid, storage) >= 1 and math.random(1,100) <= 10 then return false end end return true end
if getPlayerStorageValue(cid, storage) >= 1 and math.random(1,100) <= 10 then
nossa, a função é completamente diferente do que eu pensei que fosse... acreditava que a função deveria retornar o valor.
mas aparentemente ela retorna se é verdadeiro ou não a igualdade...
mas fiquei com uma duvida:
se ">= 1" indica que "o player possui aquele storage.
"<=0" indicaria que o player não possui aquele storage?
por exemplo, supondo que eu precise fazer um script que a condição é justamente o contrario.
somente o jogador que tivesse o storage não pudesse participar. eu usaria:
if getPlayerStorageValue(cid, storage) == 0?
ou
if getPlayerStorageValue(cid, storage) <= 0?
não fui eu quem pedi o script porém, me serviu de aula haha.
obrigado Wolf.
( não testei o script, não posso dizer se funciona ou não )
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

getPlayerStorageValue -- pegar o valor de determinado storage.
O valor padrão pra todos os storages é -1, mas por convenção use sempre <= 0 e >= 1
Genial, obrigado por esclarecer essas duvidas...
quando o autor do topico voltar acredito q ele confirmará a funcionalidade do script.
eu fiz um teste rapido, removi a linha que verifica o storage e o adicionei como creaturescripts em um monstro para teste.
o script cumpre o que foi proposto, ele bloquea um dano. simples, tentei deixa-lo mais bonito usando
doSendAnimatedText(getCreaturePosition(cid), Blocked, 180).
mas por algum motivo não reconhece, enfim.
Obrigado pela ajuda.
Wolf Rep +





info
Grupo: Visconde
Registrado: 26/04/08
Posts: 251
Reputação: +36
Gênero: Masculino
Char no Tibia: Senhor Mithril
Olá, eu gostaria de pedir uma ajuda a vocês.
Sempre tive uma curiosidade de se é possivel fazer o sistema de passivas por storages para alguns otservs
O sistema consistiria no seguinte, se o player tiver tal storage no seu char ele terá essa passiva.
As passivas nas quais eu estou pedindo seriam as:
Uma de block, ou seja o player tem uma chance de 10% de negar qualquer dano
Uma de imortalidade, que o player teria uma chance de 10% de ficar 5 minutos imune a qualquer dano.
Se vocês tiverem como me ajudar, agradeço!