Ir para conteúdo
  • 0

[Pedido] Por Para Magia Nao Atravesar Parede E Potion Por % De Hp.


Janmix

Pergunta

Primeiramente quero pedir para arrumar uma magia para mim se puder ele é:

local config = {
efeitoTele = 10, -- efeito q ira aparacer a cada teleport.
efeitoDamage = 22, -- efeito q ira aparecer ao hitar no alvo
hits = 5, -- quantos hits vai dar
delay = 500, -- intervalo de tempo a cada hit
min = 1000, -- dano minimo
max = 3000, -- dano maximo
damage = COMBAT_PHYSICALDAMAGE -- tipo do dano
}
function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 5.5 + levelTotal), -(skillTotal * 8.5 + levelTotal)
end
function isWalkable(pos, creature, pz, proj) -- nord
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and not pz then return false end
local n = not proj and 3 or 2
for i = 0, 255 do
		pos.stackpos = i
		local tile = getTileThingByPos(pos)
		if tile.itemid ~= 0 and not isCreature(tile.uid) then
				if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
						return false
				end
		end
end
return true
end
function getPosDirs(p, dir) -- mkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function validPos(pos)
tb = {}
for i = 1, 8 do
 newpos = getPosDirs(pos, i)
 if isWalkable(newpos) then
  table.insert(tb, newpos)
 end
end
table.insert(tb, pos)
return tb
end
spell = {
start = function (cid, target, markpos, hits)
if not isCreature(cid) then return true end
if not isCreature(target) or hits < 1 then
	 doTeleportThing(cid, markpos)
	 doSendMagicEffect(getThingPos(cid), config.efeitoTele)
	 return true
end
posAv = validPos(getThingPos(target))
rand = #posAv == 1 and 1 or #posAv - 1
doSendMagicEffect(getThingPos(cid), config.efeitoTele)
doTeleportThing(cid, posAv[math.random(1, rand)])
doAreaCombatHealth(cid, config.damage, getThingPos(target), 0, -config.min, -config.max, config.efeitoDamage)
addEvent(spell.start, config.delay, cid, target, markpos, hits - 1)
  end
}
function onCastSpell(cid)
target = getCreatureTarget(cid)
if target == isMonster or isCreature then
 spell.start(cid, target, getThingPos(cid), config.hits)
end
return true
end

 

o problema dela é que ela só ataca com target mais mesmo sem target o cara usa ai gasta mana atoa e ela ta passando por walls "paredes" o cara de fora de uma hunt que tenha parede ataca outro por fora mesmo por exemplo.

e eu ja tentei pelas tag por o blockwall e o target mais nao funfou acho que se vai funcionar com algum script adicionado na magia.

 

agora outro pedido para economizar topicos é:

Uma Runa ou Potion (de preferencia potion) que cure por % de hp uma player que tem 5k de hp e 3000 de mana vai curar cada pot 500 de hp e 300 de mana cada potion ou runa.

curar só mana ou só hp pode ser tbm mais se por para curar 10% de mana e de hp com o mesmo item ficaria melhor para mim.

 

REP+ para quem me ajudar.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Seu segundo pedido:

 

actions.xml:

 

<action itemid="xxxx" script="potion.lua"/>

 

Substitua o xxxx pelo id da sua potion.

 

potion.lua:

 

local php = getCreatureMaxHealth(cid)

local pmp = getCreatureMaxMana(cid)

local porcentagem = 10 -- Porcentagem de heal

local infinita = "sim" -- Infinita? Sim ou nao

local c = porcentagem/100

 

local exhaust = createConditionObject(CONDITION_EXHAUST)

setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if isPlayer(itemEx.uid) == FALSE then

return FALSE

end

 

if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then

doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)

return TRUE

end

 

if infinita == "nao" then

doRemoveItem(item.uid, 1)

end

doCreatureAddHealth(itemEx.uid, php*c)

doCreatureAddMana(itemEx.uid, pmp*c)

doAddCondition(cid, exhaust)

doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)

doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)

return TRUE

end

 

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Erro:

 

[19/08/2012 22:59:13] [Error - Action Interface]
[19/08/2012 22:59:13] data/actions/scripts/potion.lua
[19/08/2012 22:59:13] Description:
[19/08/2012 22:59:13] (luaGetCreatureMaxHealth) Creature not found

[19/08/2012 22:59:13] [Error - Action Interface]
[19/08/2012 22:59:13] data/actions/scripts/potion.lua
[19/08/2012 22:59:13] Description:
[19/08/2012 22:59:13] (luaGetCreatureMaxMana) Creature not found

Editado por Janmix
Link para o comentário
Compartilhar em outros sites

  • 0

 

local php = getCreatureMaxHealth(itemEx.uid)

local pmp = getCreatureMaxMana(itemEx.uid)

local porcentagem = 10 -- Porcentagem de heal

local infinita = "sim" -- Infinita? Sim ou nao

local c = porcentagem/100

 

local exhaust = createConditionObject(CONDITION_EXHAUST)

setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if isPlayer(itemEx.uid) == FALSE then

return FALSE

end

 

if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then

doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)

return TRUE

end

 

if infinita == "nao" then

doRemoveItem(item.uid, 1)

end

doCreatureAddHealth(itemEx.uid, php*c)

doCreatureAddMana(itemEx.uid, pmp*c)

doAddCondition(cid, exhaust)

doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)

doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)

return TRUE

end

 

 

Vê se assim funciona.

Link para o comentário
Compartilhar em outros sites

  • 0

ainda não deu olha o novo erro:

[20/08/2012 21:53:04] [Error - Action Interface]
[20/08/2012 21:53:04] data/actions/scripts/potion.lua
[20/08/2012 21:53:04] Description:
[20/08/2012 21:53:04] data/actions/scripts/potion.lua:1: attempt to index global 'itemEx' (a nil value)
[20/08/2012 21:53:04] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/potion.lua)

Link para o comentário
Compartilhar em outros sites

  • 0

esse if da callback da spell ta todo errado, ele ta comparando um numeral com uma função =s, enfim ta ai arrumado


local config = {
efeitoTele = 10, -- efeito q ira aparacer a cada teleport.
efeitoDamage = 22, -- efeito q ira aparecer ao hitar no alvo
hits = 5, -- quantos hits vai dar
delay = 500, -- intervalo de tempo a cada hit
min = 1000, -- dano minimo
max = 3000, -- dano maximo
damage = COMBAT_PHYSICALDAMAGE -- tipo do dano
}
function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 5.5 + levelTotal), -(skillTotal * 8.5 + levelTotal)
end
function isWalkable(pos, creature, pz, proj) -- nord
       if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
       if getTopCreature(pos).uid > 0 and creature then return false end
       if getTileInfo(pos).protection and not pz then return false end
       local n = not proj and 3 or 2
       for i = 0, 255 do
                       pos.stackpos = i
                       local tile = getTileThingByPos(pos)
                       if tile.itemid ~= 0 and not isCreature(tile.uid) then
                                       if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                                                       return false
                                       end
                       end
       end
       return true
end
function getPosDirs(p, dir) -- mkalo
       return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end
function validPos(pos)
tb = {}
for i = 1, 8 do
 newpos = getPosDirs(pos, i)
 if isWalkable(newpos) then
  table.insert(tb, newpos)
 end
end
table.insert(tb, pos)
return tb
end
spell = {
start = function (cid, target, markpos, hits)
       if not isCreature(cid) then return true end
       if not isCreature(target) or hits < 1 then
                doTeleportThing(cid, markpos)
                doSendMagicEffect(getThingPos(cid), config.efeitoTele)
                return true
       end
       posAv = validPos(getThingPos(target))
       rand = #posAv == 1 and 1 or #posAv - 1
       doSendMagicEffect(getThingPos(cid), config.efeitoTele)
       doTeleportThing(cid, posAv[math.random(1, rand)])
       doAreaCombatHealth(cid, config.damage, getThingPos(target), 0, -config.min, -config.max, config.efeitoDamage)
       addEvent(spell.start, config.delay, cid, target, markpos, hits - 1)
  end
}
function onCastSpell(cid)
   target = getCreatureTarget(cid)
   if isCreature(target) then
       spell.start(cid, target, getThingPos(cid), config.hits)
       return true
   end

   return false

end

Link para o comentário
Compartilhar em outros sites

  • 0

ele ainda ta podendo usar a magia de fora de uma parede exemplo ele um player ta em 1 casa toda fechada por parede e ele consegue usar magia de fora e atingir o player dentro da casa.

Link para o comentário
Compartilhar em outros sites

  • 0

ele ainda ta podendo usar a magia de fora de uma parede exemplo ele um player ta em 1 casa toda fechada por parede e ele consegue usar magia de fora e atingir o player dentro da casa.

bom, ai é na tag

pelo que vi nas sources é so colocar na tag do spells.xml isso: blocking = "yes"

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...