Jump to content
  • 0

(resolvido) remover speed de criatura e depois retornar


nbb147

Question

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, peça a ajuda de vocês e agradeço desde já, script:

local name, storage = 'fire devil', 11112local sto = 800000local speedchange = 0function onAttack(cid, target)if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thensetPlayerStorageValue(cid, sto, getCreatureSpeed(cid))doChangeSpeed(cid, -getCreatureSpeed(cid))doChangeSpeed(cid, speedchange)return falseendif isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) > 1 then -- O ERRO PERTENCE A ESSA PARTEdoChangeSpeed(cid, -getCreatureSpeed(cid))local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto)doChangeSpeed(cid, oldspeed)return false -- O PROBLEMA ESTA AQUIendreturn trueendfunction onCombat(cid, target)if isPlayer(cid) and getCreatureStorage(cid, storage) < 0 and isMonster(target) and getCreatureName(target):lower() == name thendoPlayerSendCancel(cid, 'You cannot attack this monster.')return falseend if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thenreturn falseendreturn trueendfunction onKill(cid, target, lastHit)if isMonster(target) and getCreatureName(target):lower() == name and isPlayer(cid) and getCreatureStorage(cid, storage) > 0 thendoCreatureSetStorage(cid, storage, -1)endreturn trueend

 

Edited by nbb147
Link to comment
Share on other sites

Recommended Posts

  • 0

Não tenho certeza do que tô falando, vou apenas especular... Talvez o valor que retorne quando você pega a velocidade da criatura seja a velocidade atual, modificada, que está negativa, e, talvez, esse valor esteja marcado como unsigned na source, se tornando 0 ou NULL, tente pegar esse valor antes de mudá-lo, caso retorne normal, coloque-o em um storage.

Link to comment
Share on other sites

  • 0

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

o monstro está seguindo o jogador, mas como tem um return false na segunda checagem do onAttack o monstro não ataca o jogador que possui a storage(ou seja, persegue mas não acerta o dano), queria saber como faço para não precisar desse return false, pois ele retorna dizendo que a função onAttack é falsa ;c, com o meu baixo conhecimento sobre script não vejo um meio de fazer isso ;c 

Link to comment
Share on other sites

  • 0

quando coloca return true ele fica bugando(travando), acho que é porque o script retorna tudo como verdadeiro, até a parte que tira a speed, conhece algum método de fazer isso sem dar esse problema? ; /

Link to comment
Share on other sites

  • 0

Se ele está travando é porque ele está caindo em um loop.

Vou analisar esse seu script para tentar averiguar onde esteja o erro.

Link to comment
Share on other sites

  • 0

@Poccnn por favor cara, olha mesmo, por que tá foda, já endoidei muito com esse script, acho que apenas não tenho conhecimento o suficiente ainda para fazer o que desejo, agradeço desde já a sua colaboração.

 

@ricardo231 como? isso evitaria do return false deixar de atrapalhar o 'onAttack'?

Link to comment
Share on other sites

  • 0

Nao tem nada haver com sources.

Esse seu script está dificil de ser compreendido, então me explica; qual a finalidade desse script?

Link to comment
Share on other sites

  • 0

Bom, vou explicar cada parte "onAttack", "onCombat" e o "onKill": 

 

O onAttack checa se o player possui certa storage e se ele não tiver o monstro não consegue atacar o ele(nessa parte o player faz uma checagem da velocidade do monstro e guarda ela a ligando a uma storage), se ele tiver a storage o monstro consegue ataca-lo, e caso chegue primeiro um player que não possua ele ficará parado, em seguida se aparecer um player que tenha a storage ele faz a checagem novamente só que retornando a velocidade que o monstro tinha, pois ele guardou pois ele havia guardo. 

 

O onCombat ele faz com que o player não consiga atacar o monstro se ele não possuir storage, se ele possuir simplesmente consegue ataca-lo.

 

O onKill simplesmente retira uma storage e adiciona outra ao matar a criatura.

 

Obrigado por tentar ajudar.

Link to comment
Share on other sites

  • 0

Entao seria: o player e o monstro só pode atacar determinados seres que tenham a storage.

Teins certeza que a função setPlayerStorageValue, consegue adicionar esse valor em monstros?

Como o player e o monstro adquirem essa store?

Essa questão de paralisar um jogador que não tenha a store, como ele voltaria a andar?

Link to comment
Share on other sites

  • 0

exatamente, sim, certeza ela adiciona pois como eu disse ela funciona até certo ponto, e eu sei que funciona pois já usei em outras ocasiões, tipo é feito duas checagens a primeira na linha do if é pra saber se o player possui a storage, e a que adiciona ou tira a velocidade do monstro depende da checagem feito no jogador, tipo, checa a storage do jogador se ele possuir, é feito a checagem do monstro e nesse processo é adquirido a sto de velocidade, estou com pressa agora, qualquer coisa te explico mais tarde

 

Edited by nbb147
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...