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

olha essa parte do script e eu vou explicando:

 

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 trueend

no onAttack existem dois if de checagem de storage no player, é feito uma checagem no player ao ser atacado pelo monstro, checa o nome da criatura(fire devil) para saber se é ela que está atacando, checa a storage no target(o player no caso), então é setada uma storage salvando a velocidade da criatura(setPlayerStorageValue(cid, sto, getCreatureSpedd(cid))), então a velocidade é alterada com o doChangeSpeed(cid, -getCreatureSpeed(cid)) e com o doChangeSpeed(cid, speedchange).

 

o próximo if, é para checar novamente, faz a mesma checagem, só que com uma pequena diferença chega se a storage é positiva que é o valor necessário para o monstro conseguir atacar e voltar a velocidade(essa checagem tbm é feita no player isPlayer(target)), então se o player tiver a storage e for a criatura fire devil que atacou ele a velocudade retornará ao que era antes, pois havia salvado.

 

resumindo a storage ganha pelo monstro depende da checagem que é feita da storage do player, espero que tenha entendido kkkkk valeu 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Citar

function onAttack(cid, target)

local oldspeed = getPlayerStorageValue(cid, sto) == -1 and getCreatureBaseSpeed(cid) or getPlayerStorageValue(cid, sto)

if(isMonster(cid) and getCreatureName(cid):lower() == name)then

 if(isPlayer(target) and getCreatureStorage(target, storage) < 0)then

    setPlayerStorageValue(cid, sto, getCreatureSpeed(cid))

doChangeSpeed(cid, oldspeed)

--doChangeSpeed(cid, speedchange)--desnecessario.

return false

elseif(isPlayer(target) and getCreatureStorage(target, storage) > 1)then

doChangeSpeed(cid, oldspeed)

end

end

return true

end

 

Refeito essa parte, segundo o que eu entendi.

O problema estava só nessa parte?

Link para o comentário
Compartilhar em outros sites

  • 0

sim, só nessa parte, mas agora ficou com o seguinte problema, o monstro fica com uma velocidade absurda a cada vez que chega um personagem que não tem storage e depois um que tem, a velocidade vai só aumentando, e o monstro fica seguindo quem não tem a storage, não acerta dano, mas fica perseguindo

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

  • 0

Na função onCombat:

Citar
if isMonster(cid) and getCreatureName(cid):lower() == name and isPlayer(target) and getCreatureStorage(target, storage) < 0 thenreturn falseend

Modifica o valor de retorno para true, ou remova-o.

Desconsidera o post acima.

Uma coisa que ainda não sei. 

Analisando o script, eu percebi que em momento algum o player receber store, apenas o monstro.

Citar
setPlayerStorageValue(cid, sto, getCreatureSpeed(cid))

 

Finalmente, como o player recebe a store?

Link para o comentário
Compartilhar em outros sites

  • 0

se eu colocar return true ou retira-lo isso não ira atrapalhar no processo de checagem? pois essa parte é a parte que checa se o player pode atacar ou não, isso não iria influenciar e acabar bugando? bom, essa storage o player ganha através de missões.

Link para o comentário
Compartilhar em outros sites

  • 0

Nao deu pra editar o post. Pedi para desconsidera-lo e quando postei denovo, ele mesclou os posts.

 

Substitua a parte inerente dessa:

Citar

local oldspeed = getCreatureStorage(target, storage) < 0 and getPlayerStorageValue(cid, sto) or 0

 

Descrevendo:

Se o player nao tiver a store, entao o monstro fica com speed marcada na store; caso contrario, o monstro ficara com speed 0 (zero).

Link para o comentário
Compartilhar em outros sites

  • 0

há foi mesmo, perdão, bom ficou do mesmo jeito, o monstro continua aumenta a velocidade e o monstro ainda corre atrás de quem não tem a storage, não entendo porque acontece isso

Link para o comentário
Compartilhar em outros sites

  • 0

Uma possivel causa, seja que a função speed nao esteja modificando a velocidade do monstro, ou seja, nao funciona para monstros.

 

 

Bem, mas como o monstro esta aumentando sua velocidade, entao, deva ser problema no getstore, mas tambem, pode ser que a funcao speed nao retire velocidade, apenas acrescente.

Faz um teste, coloca em todas as funcoes speed o valor 0 (zero).

Dificil entender.

Link para o comentário
Compartilhar em outros sites

  • 0

eu testei e é possível aumentar e diminuir a velocidade da criatura, intrigante isso, bem complexo de se entender msmo, faz tempo que analiso e tento modificar, mas sempre sem sucesso..

Link para o comentário
Compartilhar em outros sites

  • 0

Então, ja sabemos que nao é por culpa da funcao speed; agora vamos analisar a funcao getstore.

Adiciona essa linha de comando abaixo da funcao onAttack.

Citar

print('valor da store > '..getPlayerStorageValue(cid, sto) or 'nil')

 

Verifica no distro o valor retornado.

Link para o comentário
Compartilhar em outros sites

  • 0

print('11112 > '..getPlayerStorageValue(cid, sto) or 'nil')player que possui a sto:[01/08/2016 09:23:11] 11112 > -1player que não possui a sto:nesse caso não retorna nenhuma sto

 

 

print('800000 > '..getPlayerStorageValue(cid, sto) or 'nil')player que possui a storage 11112:[01/08/2016 09:26:07] 800000 > 300player que não possui a storage 11112:nesse caso tbm não retorna nada

caso não tenha compreendido a minha explicação, posso tentar explicar de uma outra maneira.

Link para o comentário
Compartilhar em outros sites

  • 0

Getstore, nao pode retornar nil, ele retorna -1 para quem nao tem a store. Tem algo errado ai.

 

Nesse caso, essa store é a que fica marcado no monstro com o speed dele?

Citar
[01/08/2016 09:26:07] 800000 > 300

 

O unico problema pelo que percebi, é com relacao a store do player que nao tem valor positivo.

Link para o comentário
Compartilhar em outros sites

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