Tente esse exp.lua
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
Se funcionar, REP + ![]()


info
Grupo: Campones
Registrado: 02/11/08
Posts: 45
Reputação: +3
Char no Tibia: Jezhur onyan
ae desculpa ae o incomodo mais eu já pesquisei muito sobre isso e até agora so axei um topico sobre esse assunto q tinha resposta, a resposta foi dada pelo scripter burn123(so q n a resposta lá n adianto no meu server, guuh torres v3), inclusive se vc ler isso e puder me ajuda eu agradeço, enfim o problema é esse:
Pokemons se atacam na pvp zone do map editor, porem, eles não hitam um ao outro, fica só naquela de um corre atras do otro e talz mais hitar que é bom nada, nem com atk fisico nem com os m1 ~ m12, eu n sei se o problema é no exp.lua mas de qlquer jeito vou colocar o meu aki, vlw ae pra quem tenta me ajuda vo dar muito reep pode ter ctz xD
exp.lua:
-----------------------------------------------------------------------------------------------------------------------------------
local expcond = createConditionObject(CONDITION_INFIGHT)
setConditionParam(expcond, CONDITION_PARAM_TICKS, 4500)
function onStatsChange(cid, attacker, enps, combatee, value)
if getPlayerStorageValue(cid, 33) >= 1 then
if isCreature(attacker) then
return false
end
return true
end
if getPlayerStorageValue(cid, 34) >= 1 then
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)
setPlayerStorageValue(cid, 34, 0)
doSendAnimatedText(getThingPos(attacker), -value, 191)
return false
end
end
end
if getPlayerStorageValue(cid, 35) >= 1 then
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 enps == STATSCHANGE_HEALTHGAIN then
return true
end
if enps == STATSCHANGE_HEALTHLOSS then
if getCreatureHealth(cid) <= value then
if isPlayer(cid) then
if #getCreatureSummons(cid) == 0 then
return true
end
return false
end
if isPlayer(getCreatureMaster(attacker)) then
doTargetCombatHealth(getCreatureMaster(attacker), cid, combatee, -(getCreatureHealth(cid)), -(getCreatureHealth(cid)), 3)
return false
end
return true
end
if isPlayer(getCreatureMaster(cid)) then
doAddCondition(getCreatureMaster(cid), expcond)
end
if not isPlayer(cid) then
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
else
x = 1
end
local xx = x
if combatee == PSYCHICDAMAGE then
cor = COLOR_PSYCHIC
elseif combatee == GRASSDAMAGE then
cor = COLOR_GRASS
elseif combatee == FIREDAMAGE then
cor = COLOR_FIRE2
elseif combatee == WATERDAMAGE then
cor = COLOR_WATER
elseif combatee == ICEDAMAGE then
cor = COLOR_ICE
elseif combatee == NORMALDAMAGE then
cor = COLOR_NORMAL
elseif combatee == FLYDAMAGE then
cor = COLOR_FLYING
elseif combatee == GHOSTDAMAGE then
cor = COLOR_GHOST
elseif combatee == GROUNDDAMAGE then
cor = COLOR_GROUND
elseif combatee == ELECTRICDAMAGE then
cor = COLOR_ELECTRIC
elseif combatee == ROCKDAMAGE then
cor = COLOR_ROCK
elseif combatee == BUGDAMAGE then
cor = COLOR_BUG
elseif combatee == FIGHTDAMAGE then
cor = COLOR_FIGHTING
elseif combatee == DRAGONDAMAGE then
cor = COLOR_DRAGON
elseif combatee == POISONDAMAGE then
cor = COLOR_POISON
elseif getCreatureName(cid) == "Kakuna" or getCreatureName(cid) == "Metapod" then
cor = COLOR_BUG
elseif getCreatureName(cid) == "Golem" or getCreatureName(cid) == "Graveler" or getCreatureName(cid) == "Geodude" then
cor = COLOR_ROCK
else
cor = NONE
end
local cores = cor
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
if isPlayer(cid) then
if #getCreatureSummons(cid) >= 1 then
return false
end
doCreatureAddHealth(cid, -value)
doSendAnimatedText(getThingPos(cid), value, 180)
doSendMagicEffect(getThingPos(cid), 3)
return false
end
if getPlayerStorageValue(cid, 4) >= 1 then
local damage = value
doSendMagicEffect(getThingPos(cid), 2)
doCreatureAddHealth(cid, -((math.floor(damage/2))*xx))
doSendAnimatedText(getThingPos(cid), (math.floor((damage)/2)*xx), cores)
else
local damage = value
if cor == NONE then
return true
end
doCreatureAddHealth(cid, -((math.floor(damage/1))*xx))
doSendAnimatedText(getThingPos(cid), (math.floor((damage)/1)*xx), cores)
doSendMagicEffect(getThingPos(cid), 3)
return false
end
return false
end
if isSummon(attacker) then
if isSummon(cid) then
return false
end
combatx = combatee
valor = value
if getPlayerStorageValue(cid, 4) >= 1 then
doTargetCombatHealth(getCreatureMaster(attacker), cid, combatx, -((valor / 2)*x), -(((valor / 2)+10)*x), 255)
else
doTargetCombatHealth(getCreatureMaster(attacker), cid, combatx, -((valor)*x), -((valor+10)*x), 255)
end
end
end
end
---------------------------------------------------------------------------------------------------------