Ir para conteúdo

Posts Recomendados

Este erro acontece apenas com magias do tipo elétrico em tipos imunes? Ou, por exemplo, spammar magias psíquicas em tipo dark ou terrestres em tipo voador também acaba causando dano? Isto só acontece spammando magias iguais (temos que considerar que, se for o caso, jogadores normais não terão a liberdade de usar magias sem cooldown)? Por enquanto, este é o único problema?

Após responder estas perguntas, peço que faça o teste imprimindo as informações conforme indiquei no meu primeiro comentário desta página (mantendo, contudo, as mudanças que fizemos posteriormente).

Editado por zipter98
  Em 15/12/2016 em 22:09, zipter98 disse:

Este erro acontece apenas com magias do tipo elétrico em tipos imunes? Ou, por exemplo, spammar magias psíquicas em tipo dark ou terrestres em tipo voador também acaba causando dano? Por enquanto, este é o único problema?

Após responder estas perguntas, peço que faça o teste imprimindo as informações conforme indiquei no meu primeiro comentário desta página (mantendo, contudo, as mudanças que fizemos posteriormente).

Expand  

 

Fiz teste usando ursaring contra gengar selvagem (tava batendo melee nele n sei pq)

spammei tds as spells normals do ursaring e só bugou com o Fury Swipes

  Mostrar conteúdo oculto

agora usando um shiny gengar contra um ursaring selvagem bugou a shadow ball

  Mostrar conteúdo oculto

Shadow punch:

  Mostrar conteúdo oculto

 

spamando shadow storm + melee

  Mostrar conteúdo oculto

 

Shadow storm sem melee de ninguem (eu blocando o caminho pra nao bater melee) SHADOW STORM TB TEM MESMO PROBLEMA DO ELECTRIC STORM, MT STORM + 1 LICK e da hs

  Mostrar conteúdo oculto

 

Nightmare

  Mostrar conteúdo oculto

 

Agora shiny Hypno vs Umbreon, tudo segundo hit do Psy Pulse ta batendo dano

  Mostrar conteúdo oculto

 

tudo psyshock ta dando dano

  Mostrar conteúdo oculto

Miracle eye nao tira a inmunidade como deberia

  Mostrar conteúdo oculto

 

shockwave de rhydon num pidgeot (sem spam)

  Mostrar conteúdo oculto

 

O melee bater em pokémon fantasma e o Miracle Eye não funcionar não estão ligados diretamente a esse problema. De fato, não há proteções que anulam o melee em fantasmas e não há um código que ative o efeito do Miracle Eye.

No código da função:

function getEffectvineCombat(cid, attacker, value)

Abaixo de:

if getCreatureName(cid) == "Venusaur" and value ~= 0 and isMega(cid) and isInArray({"ice", "fire"}, pokeRaceAttacker)then -- Passiva thick fat	value = value / 2end

coloque:

if pokeRaceDefender == "ghost" then         --Melee ser anulado vs ghost type.	value = 0end

 

Depois, no código da função:

function getEffectvineSpell(attacker, spellNameFromAttacker, value, cid)

Troque:

if isInArray(typeTable[spellRace].non, pokeElement1) then	multiplier = multiplier * 0endif pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2) then	multiplier = multiplier * 0end

por:

--Miracle eyeif spellRace == "psychic" and (pokeElement1 == "dark" or pokeElement2 and pokeElement2 == "dark") and getPlayerStorageValue(attacker, 999457) > -1 then	multiplier = 0.75	setPlayerStorageValue(attacker, 999457, -1) else	if isInArray(typeTable[spellRace].non, pokeElement1) then 		 multiplier = multiplier * 0  	end	if pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2) then		multiplier = multiplier * 0	endend

 

Quanto às spells spammadas, você poderia fazer um teste com as spells Super Fang Tackle? Preciso confirmar uma (espero) última coisa.

Editado por zipter98
  Em 16/12/2016 em 18:08, zipter98 disse:

O melee bater em pokémon fantasma e o Miracle Eye não funcionar não estão ligados diretamente a esse problema. De fato, não há proteções que anulam o melee em fantasmas e não há um código que ative o efeito do Miracle Eye.

No código da função:

function getEffectvineCombat(cid, attacker, value)

Abaixo de:

if getCreatureName(cid) == "Venusaur" and value ~= 0 and isMega(cid) and isInArray({"ice", "fire"}, pokeRaceAttacker)then -- Passiva thick fat
	value = value / 2
end

coloque:

if pokeRaceDefender == "ghost" then         --Melee ser anulado vs ghost type.
	value = 0
end

 

Depois, no código da função:

function getEffectvineSpell(attacker, spellNameFromAttacker, value, cid)

Troque:

if isInArray(typeTable[spellRace].non, pokeElement1) then
	multiplier = multiplier * 0
end
if pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2) then
	multiplier = multiplier * 0
end

por:

--Miracle eye
if spellRace == "psychic" and (isInArray(typeTable[spellRace].non, pokeElement1) or pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2)) and getPlayerStorageValue(attacker, 999457) > -1 then
	multiplier = multiplier - 0.3
	setPlayerStorageValue(attacker, 999457, -1) 
else
	if isInArray(typeTable[spellRace].non, pokeElement1) then
 		 multiplier = multiplier * 0
  	end

	if pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2) then
		multiplier = multiplier * 0
	end
end

 

Quanto às spells spammadas, você poderia fazer um teste com as spells Super Fang Tackle? Preciso confirmar uma (espero) última coisa.

Expand  

 

Super fang NAO BUGA

  Mostrar conteúdo oculto

tackle tb nao buga

  Mostrar conteúdo oculto

 

codigos:

  Mostrar conteúdo oculto

edit: @zipter98 enquanto o miracle eye, umas veces funfa outras nao maiormente o dano é 0 e quando funfa 1200~

  Mostrar conteúdo oculto

 

Editado por Josegvb

OK. Primeiramente, testou o Miracle Eye e o melee em tipo fantasmas?

Todas as spells que apresentam erro tem alguma relação com addEvent - ou seja, são executadas num momento posterior ao que foram conjuradas.

Nas storms, Psyshock, Shockwave e Psy Pulse isso é mais óbvio. Entretanto, em spells como Fury Swipes, Nightmare e Shadow Punch, apenas lendo o código você irá reparar nisso.

Nessas duas primeiras, há uma função em comum:

doDanoWithProtectWithDelay

Ao ler o código desta função, você irá perceber que há um addEvent também. 

 

É possível padronizar uma correção aplicando-a diretamente no código da função (há várias funções de dano escritas em Lua, encontradas na lib). Porém, há sempre exceções: funções escritas em C++ e funções que não tem a spell como argumento.

 

No primeiro caso, há sim formas de simplificar a correção. No entanto, C++ não é muito minha praia e, além do mais, as spells que as usam dentro de um addEvent são pouquíssimas (como o Psyshock e o Shockwave; basta um CTRL + F para conferir). Em uns 10 minutos (no máximo), já seria possível aplicar a correção. Basicamente, acima do:

doAreaCombatHealth(...)

você colocaria:

if tostring(getPlayerStorageValue(cid, 21102)) ~= spell then    setPlayerStorageValue(cid, 21102, spell)end

 

No caso das funções em Lua, há funções como doMoveInArea2 doMoveDano2 que tem como um dos argumentos o nome da spell. Por causa disso, é possível colocar a proteção acima diretamente no código da função. Nas spells que usam estas funções, há o perigo do elemento ser substituído enquanto são executadas, por isso peço-lhe que poste o código de ambas as funções para que a proteção seja colocada.

Entretanto, em funções como doDanoWithProtect doDanoInTargetWithDelay, não temos este luxo. Seria até possível fazer algumas gambiarras usando o combat, mas isso atrapalharia situações como do Reflect. 

Então, sem a correção adequada na própria source do servidor (já que apresentar sempre o mesmo tipo de combat é um problema na fonte), resta apenas o trabalho braçal.

 

Leve em consideração que jogadores normais NÃO têm a liberdade de usar spells sem cooldown algum, como você fez nos testes. Caso, em condições normais de gameplay, não houverem problemas como estes, não vejo muito porque se preocupar.

Editado por zipter98

entao @zipter98 coloquei encima das 68  linhas do pokemon moves

doAreaCombatHealth(...)

aquele codigo q vc disse

 

paresce q arrumou td

enquanto oque voce disse do spam de cd, sim sei q jogador nao pode fazer isso mais apenas tava com duvida se o bug era originado por SPAM OU porque a spell era castado NO SEGUNDO EXAITO q outro spell ou melee ia acontecer...

 

ok entao enquanto as funçoes na libs

  Mostrar conteúdo oculto

 

 

o melee em tipo fanstama parou ^^ mas o do miracle eye em fantasma nao entendi ja que PSYCHIC é pra bater em fanstama mas nao em dark

Abaixo de:

function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)if not isCreature(cid) then return true end

coloque:

if tostring(getPlayerStorageValue(cid, 21102)) ~= spell then    setPlayerStorageValue(cid, 21102, spell)end

Depois, abaixo de:

function doMoveDano2(cid, pid, element, min, max, ret, spell)

coloque:

if tostring(getPlayerStorageValue(cid, 21102)) ~= spell then    setPlayerStorageValue(cid, 21102, spell)end

 

Quanto ao Miracle Eye, teoricamente, com ele ativado, uma magia psíquica pode atingir tipos dark. Não é isso que está acontecendo?

  Em 17/12/2016 em 01:06, zipter98 disse:

Abaixo de:

function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)if not isCreature(cid) then return true end

coloque:

if tostring(getPlayerStorageValue(cid, 21102)) ~= spell then    setPlayerStorageValue(cid, 21102, spell)end

Depois, abaixo de:

function doMoveDano2(cid, pid, element, min, max, ret, spell)

coloque:

if tostring(getPlayerStorageValue(cid, 21102)) ~= spell then    setPlayerStorageValue(cid, 21102, spell)end

 

Quanto ao Miracle Eye, teoricamente, com ele ativado, uma magia psíquica pode atingir tipos dark. Não é isso que está acontecendo?

Expand  

 

é mas voce disse pra tentar usar em ghost, nao dark

e nao, nem esta acontecendo psychic spells nao estao batendo nada em dark com miracle eye

 

tambem agora queria mencionar uma coisa q eu nao consegui entender ainda, no DxP se você colocar em Offense um valor maior a 2 os bixos ficam batendo danos ridiculos saberia me dizer o porque?

tambem as veces com spells em area tipo Bullet Seed, Petal Dance, etc as vecez daba HS no seu pokemon nem sei se for pelo valor do Offense de +2 OU por algum bug q ja acontece nos pdas q na area do "psywave" em um certo sqm daba dano de 283921834294 mas nos outros normal

 

 

 

Editado por Josegvb

Acho que foi erro de interpretação seu, eu não disse em momento algum para testá-lo em pokémons fantasmas (eu disse para testar o melee neles).

De qualquer jeito, fiz uma pequena edição no bloco do Miracle Eye. Teoricamente está certo, mas peço que o teste e confirme.

 

Nunca baixei essa base ou li outros códigos dela além dos que você postou, e, mesmo neles, li apenas o que era necessário para as correções. Por isso, não sei dizer o motivo disso. Talvez seja devido às fórmulas usadas no servidor, quem sabe.

Editado por zipter98
  Em 17/12/2016 em 01:59, zipter98 disse:

Acho que foi erro de interpretação seu, eu não disse em momento algum para testá-lo em pokémons fantasmas (eu disse para testar o melee neles).

De qualquer jeito, fiz uma pequena edição no bloco do Miracle Eye. Peço que teste-o e confirme se desta vez está funcionando.

 

Nunca baixei essa base ou li outros códigos dela além dos que você postou, e, mesmo neles, li apenas o que era necessário para as correções. Por isso, não sei dizer o motivo disso. Talvez seja devido às fórmulas usadas no servidor, quem sabe.

Expand  

 

testei aki e ainda nao, só AS VECES q funfa

  Mostrar conteúdo oculto

 

com o psychic funfou mais seguido:

  Mostrar conteúdo oculto

mas nao funfa mt seguido

enquanto o offense sim, eu ia te pedir pra vc dar uma olhada la msm no statschange q tem as formulas do offense se nao aqui a funçao getoffense

level system

  Mostrar conteúdo oculto

 

Substitua o bloco do Miracle Eye pelo seguinte:

if spellRace == "psychic" and (isInArray(typeTable[spellRace].non, pokeElement1) or pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2)) and getPlayerStorageValue(attacker, 999457) > -1 then    print("Miracle Eye ativado.")    multiplier = multiplier - 0.3    setPlayerStorageValue(attacker, 999457, -1)     print("multiplier = "..multiplier)else    print("Miracle eye não ativado.")	if isInArray(typeTable[spellRace].non, pokeElement1) then 		 multiplier = multiplier * 0  	end	if pokeElement2 and isInArray(typeTable[spellRace].non, pokeElement2) then		multiplier = multiplier * 0	endend

Depois, troque:

value = value * multiplier

por:

print("Multiplier final: "..multiplier)print("Value antes da fórmula: "..value)value = value * multiplierprint("Value depois da fórmula: "..value)

Depois, no creatureevent, abaixo de:

value = getEffectvineSpell(attacker, spellNameFromAttacker, value, cid) -- checagem de efetividades de magia

coloque:

print("Value após getEffectvineSpell: "..value)

Faça o teste novamente e informe o que for imprimido (peço que especifique, quando for postar as informações, quando o Miracle Eye foi ou não usado).

 

Quanto ao problema do offense, há várias fórmulas usando este fator em, imagino, alguns arquivos.

A função que o obtém retorna:

pokes["nome_do_pokémon"].offense * heldBonusAttack

Que é, basicamente, o valor configurado na tabela pokes multiplicado pelo bônus do held item. 

Imagino que não seja um bug, mas sim cálculos mal formulados. Recomendaria pegar um PDA e basear-se nas fórmulas nele presentes.

Editado por zipter98

@zipter98 ok testando aqui: Hypnosis+Miracle Eye + Dream eater (nao bate)

  Mostrar conteúdo oculto

 

Usando com a spell Psybeam

primer dano bateu, parou de bater o siguente tambem nao bateu e despois bateu acho

  Mostrar conteúdo oculto

 

agora Psywave: primer ataque bateu, segundo tb, 3º tb

4,5,6 nao bateram nele

  Mostrar conteúdo oculto

 

agora confusion

1,2 funfaram resto nemhum funfou

  Mostrar conteúdo oculto

em td o miracle eye foi ativado

 

em quanto o offense td em pda enquanto o offense acho mt diferente do DxP x.x

ja tentei comparar tds as offenses mas nao achei mt parecido

 

dxp a unica estranha q vi foi esse * 100

  Mostrar conteúdo oculto

pda:

  Mostrar conteúdo oculto

 

Aqui persiste o error de voltar para melee en spells que tem "addEvent" 

  Mostrar conteúdo oculto

 

 

Meu Statschange.lua

  Mostrar conteúdo oculto

 

Editado por Michyalex
  Em 18/12/2016 em 03:19, Michyalex disse:

Aqui persiste o error de voltar para melee en spells que tem "addEvent" 

  Mostrar conteúdo oculto

 

Expand  

 

se o erro persiste é pq vc colocou mal o codigo q ele falou  algumas tem o dano (0, 0)

tem que colocar o codigo encima das que falam (min, max)

Primeiramente, troque:

addEvent(removeSpell, 1500, cid)

por:

setPlayerStorageValue(cid, 21102, -1)addEvent(removeSpell, 10 * 1000, cid)

 

O Miracle Eye apresenta um problema semelhante aquele enfrentado inicialmente neste tópico - mais necessariamente, em spells com addEvent. 

Peço que teste, com a mudança acima, apenas spells instantâneas. Miracle Eye -> Spell. Espere um pouco. Teste de novo. 

Quando estiver funcionando adequadamente neste tipo de spell, partiremos para a solução das demais.

Editado por zipter98
Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...