Postado Maio 21, 2019 5 anos Preciso fazer a spell UE acertar apenas inimigos (monstros, summons, players) e nao afetar aliados da party (players, summons), o maximo que consegui foi acertar players fora da party sem acertar aliados, mas se estou solo nao afeta nada... nem mesmo monstros local minDano = 50 local minDanoLvl = 0.2 local minDanoMl = 8 local maxDano = 75 local maxDanoLvl = 0.2 local maxDanoMl = 12 local combat = createCombatObject() local area = createCombatArea(AREA_CROSS5X5) setCombatArea(combat, area) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) function onTargetCreature(caster, target) -- função para não bater em membros da party, ainda não esta funcionando. local castersParty = caster:getParty() if target:isPlayer() then -- adicionar elseif target:isMonster() quando concluir de player. local targetsParty = target:getParty() if castersParty == targetsParty then return true end end local min = - (minDano + minDanoLvl*caster:getLevel() + minDanoMl*caster:getMagicLevel()) local max = - (maxDano + maxDanoLvl*caster:getLevel() + maxDanoMl*caster:getMagicLevel()) local dano = math.random(min, max) target:addHealth(dano) -- aprender outros efeitos de target pra n usar mais formula de addHealth negativo. return true end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(caster, variant) return doCombat(caster, combat, variant) end Editado Maio 27, 2019 5 anos por torresmo01 (veja o histórico de edições)
Postado Maio 21, 2019 5 anos Cuidado com as verificações antes de confirmar a existência de dados. Por exemplo, suponha que nem o player (caster) tenha party e o alvo (player também), ou seja, (castersParty == nil and targetsParty == nil) ---> nil == nil Enfim, quando ambos não tiverem party, não será removido vida do jogador. O que você pode fazer, é verificar se castersParty existe antes de verificar a igualdade entre as que citei acima.
Postado Maio 21, 2019 5 anos Autor @lordzetros Vlw pela informação, mas ainda não cheguei ao resultado esperado. local castersParty = caster:getParty() local targetsParty = target:getParty() if castersParty == targetsParty then Se eu seto esses local pra serem usados no if para proteger membros da party, a função ja cai como eles tendo party obrigatoriamente, mesmo se usar castersParty == nil ou (not castersParty) e o mesmo para targetsParty, não reconhece como estando sem party. Procurei em tudo que é lugar algum modo de dar check na party mas não encontrei. Agradeço se alguem puder me ajudar a resolver!
Postado Maio 22, 2019 5 anos @torresmo01 Por nada. Acho que você não entendeu, ou não me expressei bem. O que quis dizer é que, quando o caster não tem party (nil), e um player alvo não tem party também (nil), vai entrar nessa condição que criou para party iguais: if castersParty == targetsParty then Porque nil == nill, logo, não terá dano aplicado sobre ele. Uma forma de solucionar este problema, seria checkar se o caster tem party, e se tiver, ser igual ao do target (caso ele tenha), para que assim, o dano seja anulado sobre amigos de party. Veja bem: local targetsParty = target:getParty() if (castersParty and castersParty == targetsParty) then return true end Editado Maio 22, 2019 5 anos por lordzetros (veja o histórico de edições)
Postado Maio 27, 2019 5 anos Autor @lordzetros muito obrigado. Estive sem tempo pra checar o forum pois estavam viajando e fiz uns testes offline e consegui chegar no resultado que vc descreveu acima graças a sua primeira resposta.
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.