Ir para conteúdo
  • Cadastre-se

(Resolvido)[dxp] alguns pokémons com revive bugado


Ir para solução Resolvido por marcot,

Posts Recomendados

alguns pokemons estão conseguindo receber revives mesmo fora da pokebola, não creio q o problema seja no script de revive mas:

 

Spoiler

local storage = 121212 --storage da quest

function onUse(cid, item, frompos, item2, topos)

if getPlayerStorageValue(cid, storage) == 0 then
   doPlayerSendCancel(cid, "You already have used the limit of revives for this quest.")
   return true
elseif getPlayerStorageValue(cid, 990) >= 1 then
   doPlayerSendCancel(cid, "You can't use revive during gym battles.")
   return true
elseif getPlayerStorageValue(cid, 321321) >= 1 or getPlayerStorageValue(cid, 3213211) >= 1 then
   doPlayerSendCancel(cid, "You can't use revive during PVP")
   return true
elseif isInDuel(cid) then
   doPlayerSendCancel(cid, "You can't do that while a duel.") --alterado v1.6
   return true
elseif isPlayer(item2.uid) then
   doPlayerSendCancel(cid, "Please, use revive only on pokeballs.")
   return true
end
for a, b in pairs (pokeballs) do
    if not item2.itemid == b.on or not item2.itemid == b.off then
           doPlayerSendCancel(cid, "Please, use revive only on pokeballs.")
           return true
    end
end

local pokeball = getPlayerSlotItem(cid, 8)
for a, b in pairs (pokeballs) do
    if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then --edited deixei igual ao do PXG
           doTransformItem(item2.uid, b.on)
           doSetItemAttribute(item2.uid, "hpToDraw", 0)
           for c = 1, 15 do
                   local str = "move"..c
                   setCD(item2.uid, str, 0)
           end
           setCD(item2.uid, "control", 0)
           setCD(item2.uid, "blink", 0) --alterado v1.6
           doSendMagicEffect(getThingPos(cid), 13)
           doRemoveItem(item.uid, 1)
           doCureBallStatus(getPlayerSlotItem(cid, 8).uid, "all")
           doCureStatus(cid, "all", true)
           cleanBuffs2(item2.uid) --alterado v1.5
           
           if getPlayerStorageValue(cid, storage) > 0 then
                  setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage)-1)
           end
           doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, item2).."|"..getBallMaxHealth(cid, item2))
           return true
    end
end
return true
end

 

alguem sabe o motivo?

 

Link para o post
Compartilhar em outros sites

@Danxi

Na linha 30 tente mudar:

if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

Por 

if (item2.itemid == b.on or item2.itemid == b.off) and (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

E teste para ver se funciona.

Dei uma olhada apressada mas estranhei muito esse if, porque quando você tem or e um deles é verdadeiro a expressão se torna verdadeira, então só de cumprir uma das duas primeiras condições já anula todo o restante.

Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
2 minutos atrás, marcot disse:

Na linha 30 tente mudar:


if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

Por 


if (item2.itemid == b.on or item2.itemid == b.off) and (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

Pra ver se funciona

 

cara, agora o revive parou de funcionar de todos os jeitos, o que esse and significa? desculpa a pergunta mas eu gosto de aprender não só ter as coisas na mão kkkkk

Link para o post
Compartilhar em outros sites
10 minutos atrás, Danxi disse:

 

cara, agora o revive parou de funcionar de todos os jeitos, o que esse and significa? desculpa a pergunta mas eu gosto de aprender não só ter as coisas na mão kkkkk

IF é uma condicional que só executa seu bloco quando a expressão dele tem TRUE (Verdadeiro) como resultado. Expressões deste tipo podem ser chamadas expressões booleanas e podem ter resultados TRUE ou FALSE. 

Essas expressões são feitas com operadores de negação (not em LUA, em C++/Java), ou (or em LUA, || em C++/Java) e e (and em LUA, && em C++).

As expressões seguem as tabelas abaixo:

 

Resultado de imagem para tabela not

 

Note que os exemplos acima são exemplos reais de aplicação em circuitos eletrônicos (os desenhos acima das tabelas são as representações dos componentes que usamos), ignore NOR e NAND.

 

Ou seja, no exemplo acima do seu script, temos:

if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

IF será executado caso (item2.itemid == b.on) ou  (item2.itemid == b.off) ou (item2.itemid == b.use E quantidadeDeSumons < 1 e (não(estarNoRideSurfRide))

Por isso estranhei, porque ele só verifica se você está sem poke na parte da direita e-e

Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
3 minutos atrás, marcot disse:

IF é uma condicional que só executa seu bloco quando a expressão dele tem TRUE (Verdadeiro) como resultado. Expressões deste tipo podem ser chamadas expressões booleanas e podem ter resultados TRUE ou FALSE. 

Essas expressões são feitas com operadores de negação (not em LUA, em C++/Java), ou (or em LUA, || em C++/Java) e e (and em LUA, && em C++).

As expressões seguem as tabelas abaixo:

 

Resultado de imagem para tabela not

 

Ou seja, no exemplo acima do seu script, temos:


if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

IF será executado caso (item2.itemid == b.on) ou  (item2.itemid == b.off) ou (item2.itemid == b.use E quantidadeDeSumons < 1 e (não(estarNoRideSurfRide))

Por isso estranhei, porque ele só verifica se você está sem poke na parte da direita e-e

 

 

não entendi nada cara!!! mas eu queria muito aprender isso tudo, se vc aceitar um aluno prometo me dedicar :p

 

--edit

 

cara sobre o script, o que é mais estranho:

 

apenas pokémons da terceira geração tem esse erro, o resto segue normal, e aí quando eu tento tirar o pokémon após esse erro do revive acontece o seguinte:

Spoiler

image.thumb.png.ec2fa2a942bb88ac351ca103feed8be3.png

 

ele duplica. entendeu? eu acho que não tem nada a ver com esse script do revive...

 

Editado por Danxi (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução
2 minutos atrás, Danxi disse:

 

não entendi nada cara!!! mas eu queria muito aprender isso tudo, se vc aceitar um aluno prometo me dedicar :p

Só uma ultima tentativa,

tenta trocar pra:

if (item2.itemid == b.on and #getCreatureSummons(cid) < 1) or (item2.itemid == b.off and #getCreatureSummons(cid) < 1) or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

 

 

Saindo do lado mais técnico para tentar simplificar: num if você tem uma expressão assim como (1 + 2), mas com apenas verdadeiro falso como possíveis resultados. Caso a expressão resulte em verdadeiro, o que está dentro do bloco do if será executado:

if true then
	<bloco do if>
else
	<bloco do else>
end

Caso o if não seja executado, o else será executado.

A expressão do script se for traduzir ficaria algo assim:

SE id do item for igual a b.on ou id do item igual a b.off ou (id do item igual a b.use e quantidade de summons do player menor que um e não estiver em ride/fly/surf faça

 

if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then
Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
3 minutos atrás, marcot disse:

Só uma ultima tentativa,

tenta trocar pra:


if (item2.itemid == b.on and #getCreatureSummons(cid) < 1) or (item2.itemid == b.off and #getCreatureSummons(cid) < 1) or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then

deu certo, você é um genio UIAHSFIUAJSFU

sabe me explicar o que estava acontecendo? o que foi mudado ai?

 

muito obrigado cara, rep+!

 

(SE QUISER UM ALUNO AI É NOIS)

Link para o post
Compartilhar em outros sites
6 minutos atrás, Danxi disse:

deu certo, você é um genio UIAHSFIUAJSFU

sabe me explicar o que estava acontecendo? o que foi mudado ai?

 

muito obrigado cara, rep+!

 

(SE QUISER UM ALUNO AI É NOIS)

Então, ele tinha 3 possibilidades de o revive funcionar:

  1. Se você usasse o revive no tal do item b.on que deve estar definido em algum lugar do seu server (mas que provavelmente é a pokeball "ligada)
  2. Se você usasse o revive no tal do item b.off que deve estar definido, também, em algum lugar (mas que pode ser a pokeball "desligada")
  3. Se você usasse o revive no item b.use (que nao sei o que é) enquanto você tiver menos de uma summon e sem estar no ride

Ele não verificava a quantidade de summons nos 2 primeiros casos, então o revive funcionava.

 

Gênio nada kk, minha facul é isso de cima a baixo

Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
1 minuto atrás, marcot disse:

Então, ele tinha 3 possibilidades de o revive funcionar:

  1. Se você usasse o revive no tal do item b.on que deve estar definido em algum lugar do seu server (mas que provavelmente é a pokeball "ligada)
  2. Se você usasse o revive no tal do item b.off que deve estar definido, também, em algum lugar (mas que pode ser a pokeball "desligada")
  3. Se você usasse o revive no item b.use (que nao sei o que é) enquanto você tiver menos de uma summon e sem estar no ride

Ele não verificava a quantidade de summons nos 2 primeiros casos, então o revive funcionava.

 

acredito eu que b.on é quando o pokémon tá pra dentro da ball (vivo), b.off é quando está morto, e b.use é quando ele não está dentro da ball mas também não está morto.

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo