Estou com um problema no PVP do meu poketibia server, tipo, a galera entra na área e pá, mesmo tanto PVP Enforced, ou No-PVP, pokémon ataca pokémon mais nao arranca life. =/
se alguem puder me ajudar, meu exp.lua ta ai abaixo! =]
local expcond = createConditionObject(CONDITION_INFIGHT) setConditionParam(expcond, CONDITION_PARAM_TICKS, 4500) local colors = { [PSYCHICDAMAGE] = {cor = COLOR_PSYCHIC}, [GRASSDAMAGE] = {cor = COLOR_GRASS}, [FIREDAMAGE] = {cor = COLOR_FIRE2}, [WATERDAMAGE] = {cor = COLOR_WATER}, [iCEDAMAGE] = {cor = COLOR_ICE}, [NORMALDAMAGE] = {cor = COLOR_NORMAL}, [FLYDAMAGE] = {cor = COLOR_FLYING}, [GHOSTDAMAGE] = {cor = COLOR_GHOST}, [GROUNDDAMAGE] = {cor = COLOR_GROUND}, [ELECTRICDAMAGE] = {cor = COLOR_ELECTRIC}, [ROCKDAMAGE] = {cor = COLOR_ROCK}, [bUGDAMAGE] = {cor = COLOR_BUG}, [FIGHTDAMAGE] = {cor = COLOR_FIGHTING}, [DRAGONDAMAGE] = {cor = COLOR_DRAGON}, [POISONDAMAGE] = {cor = COLOR_POISON}, [COMBAT_PHYSICALDAMAGE] = {cor = 0}, } function onStatsChange(cid, attacker, enps, combatee, value) if enps == STATSCHANGE_HEALTHGAIN then return true end if isPlayer(cid) then if #getCreatureSummons(cid) >= 1 then return false end if isPlayer(attacker) or isSummon(attacker) then return false end end local cores = 0 if colors[combatee] then cores = colors[combatee].cor end if getPlayerStorageValue(cid, 33) >= 1 then -- funcionamento do self destruction if isCreature(attacker) then return false end return true end if getPlayerStorageValue(cid, 34) >= 1 then -- REFLECT if combatee ~= COMBAT_PHYSICALDAMAGE then if isCreature(attacker) then doSendMagicEffect(getThingPos(cid), 135) doSendMagicEffect(getThingPos(attacker), 3) doSendAnimatedText(getThingPos(cid), "REFLECT", 215) doCreatureAddHealth(attacker, -value, 3, 191) -- 3 = efeito do reflect setPlayerStorageValue(cid, 34, 0) return false end end end if getPlayerStorageValue(cid, 35) >= 1 then -- MAGIAS DE MISS, STRING SHOT, MUD SHOT ETC if combatee ~= COMBAT_PHYSICALDAMAGE then if isCreature(attacker) then doSendAnimatedText(getThingPos(cid), "MISS", 215) setPlayerStorageValue(cid, 35, 0) return false end end end if not isCreature(attacker) then return true end if isPlayer(attacker) then return true end if getCreatureHealth(cid) <= value then if isPlayer(cid) then if isPlayer(attacker) or isSummon(attacker) then return false end doCreatureAddHealth(cid, -getCreatureHealth(cid), 3, 180) return false end if isSummon(cid) and (isPlayer(attacker) or isSummon(attacker)) then if not isInParty(getCreatureMaster(cid)) or not isInParty(getCreatureMaster(attacker)) then return false end if not getPlayerParty(getCreatureMaster(cid)) == getPlayerParty(getCreatureMaster(attacker)) then return false end end if isPlayer(getCreatureMaster(attacker)) then doTargetCombatHealth(getCreatureMaster(attacker), cid, combatee, -(getCreatureHealth(cid)), -(getCreatureHealth(cid)), 3) if isInArray({GROUNDDAMAGE, ELECTRICDAMAGE, ROCKDAMAGE, FLYDAMAGE, BUGDAMAGE, FIGHTINGDAMAGE, DRAGONDAMAGE, POISONDAMAGE}, combatee) then doSendAnimatedText(getThingPos(cid), value, cores) end return false end return true end if isPlayer(cid) then doCreatureAddHealth(cid, -value, 3, 180) return false end if isPlayer(getCreatureMaster(cid)) then doAddCondition(getCreatureMaster(cid), expcond) end if combatee == ELECTRICDAMAGE then if isInArray(electric2, getCreatureName(cid)) then x = 2 elseif isInArray(electric1, getCreatureName(cid)) then x = 0.5 elseif isInArray(electric0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == WATERDAMAGE then if isInArray(water2, getCreatureName(cid)) then x = 2 elseif isInArray(water1, getCreatureName(cid)) then x = 0.5 elseif isInArray(water0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == GRASSDAMAGE then if isInArray(grass2, getCreatureName(cid)) then x = 2 elseif isInArray(grass1, getCreatureName(cid)) then x = 0.5 elseif isInArray(grass0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == FLYDAMAGE then if isInArray(flying2, getCreatureName(cid)) then x = 2 elseif isInArray(flying1, getCreatureName(cid)) then x = 0.5 elseif isInArray(flying0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == FIREDAMAGE then if isInArray(fire2, getCreatureName(cid)) then x = 2 elseif isInArray(fire1, getCreatureName(cid)) then x = 0.5 elseif isInArray(fire0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == ROCKDAMAGE then if isInArray(rock2, getCreatureName(cid)) then x = 2 elseif isInArray(rock1, getCreatureName(cid)) then x = 0.5 elseif isInArray(rock0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == GROUNDDAMAGE then if isInArray(ground2, getCreatureName(cid)) then x = 2 elseif isInArray(ground1, getCreatureName(cid)) then x = 0.5 elseif isInArray(ground0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == GHOSTDAMAGE then if isInArray(ghost2, getCreatureName(cid)) then x = 2 elseif isInArray(ghost1, getCreatureName(cid)) then x = 0.5 elseif isInArray(ghost0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == BUGDAMAGE then if isInArray(bug2, getCreatureName(cid)) then x = 2 elseif isInArray(bug1, getCreatureName(cid)) then x = 0.5 elseif isInArray(bug0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == NORMALDAMAGE then if isInArray(normal2, getCreatureName(cid)) then x = 2 elseif isInArray(normal1, getCreatureName(cid)) then x = 0.5 elseif isInArray(normal0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == FIGHTDAMAGE then if isInArray(fighting2, getCreatureName(cid)) then x = 2 elseif isInArray(fighting1, getCreatureName(cid)) then x = 0.5 elseif isInArray(fighting0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == POISONDAMAGE then if isInArray(poison2, getCreatureName(cid)) then x = 2 elseif isInArray(poison1, getCreatureName(cid)) then x = 0.5 elseif isInArray(poison0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == PSYCHICDAMAGE then if isInArray(psychic2, getCreatureName(cid)) then x = 2 elseif isInArray(psychic1, getCreatureName(cid)) then x = 0.5 elseif isInArray(psychic0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == ICEDAMAGE then if isInArray(ice2, getCreatureName(cid)) then x = 2 elseif isInArray(ice1, getCreatureName(cid)) then x = 0.5 elseif isInArray(ice0, getCreatureName(cid)) then x = 0 else x = 1 end elseif combatee == DRAGONDAMAGE then if isInArray(dragon2, getCreatureName(cid)) then x = 2 elseif isInArray(dragon1, getCreatureName(cid)) then x = 0.5 elseif isInArray(dragon0, getCreatureName(cid)) then x = 0 else x = 1 end else x = 1 end local xx = x if not isSummon(attacker) then if not isPlayer(cid) and not isPlayer(getCreatureMaster(cid)) then return false end if isSummon(cid) and getCreatureHealth(cid) <= (getCreatureMaxHealth(cid)*0.15) and not exhaustion.get(getCreatureMaster(cid), 88726) then exhaustion.set(getCreatureMaster(cid), 88726, 6) doSendMagicEffect(getThingPos(cid), 178) end local damage = value if getPlayerStorageValue(cid, 4) >= 1 then doCreatureAddHealth(cid, -math.ceil(damage/2*xx), 2, cores) -- 2 é o efeito que aparece no pokemon quando tem harden e é atacado return false else doCreatureAddHealth(cid, -math.ceil(damage*xx), 3, cores) return false end return false end if isSummon(attacker) then if isPlayer(cid) then return false end if isSummon(cid) then if not isInParty(getCreatureMaster(cid)) or not isInParty(getCreatureMaster(attacker)) then return false end if not getPlayerParty(getCreatureMaster(cid)) == getPlayerParty(getCreatureMaster(attacker)) then return false end end local combatx = combatee local valor = value local life = getCreatureHealth(cid) if getPlayerStorageValue(cid, 4) >= 1 then doTargetCombatHealth(getCreatureMaster(attacker), cid, combatx, -math.ceil(valor/2*xx), -math.ceil(valor/2*xx+10), 255) life = life - getCreatureHealth(cid) if isInArray({GROUNDDAMAGE, ELECTRICDAMAGE, ROCKDAMAGE, FLYDAMAGE, BUGDAMAGE, FIGHTINGDAMAGE, DRAGONDAMAGE, POISONDAMAGE}, combatee) then doSendAnimatedText(getThingPos(cid), life, cores) end else doTargetCombatHealth(getCreatureMaster(attacker), cid, combatx, -math.ceil(valor*xx), -math.ceil(valor*xx + 10), 255) life = life - getCreatureHealth(cid) if isInArray({GROUNDDAMAGE, ELECTRICDAMAGE, ROCKDAMAGE, FLYDAMAGE, BUGDAMAGE, FIGHTINGDAMAGE, DRAGONDAMAGE, POISONDAMAGE}, combatee) then doSendAnimatedText(getThingPos(cid), life, cores) end end return false end return true end