Ir para conteúdo
  • 0

(resolvido) remover speed de criatura e depois retornar


nbb147

Pergunta

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

 

Editado por nbb147
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

 

Editado por nbb147
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...