Ir para conteúdo
  • 0

Usar spell só se tiver pisando no sqm (ajuda Vodkart)


Allangod

Pergunta

Eu tenho essa spell aqui

local combat1 = createCombatObject()

setCombatParam(combat1, COMBAT_PARAM_EFFECT, 35)

setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_NONEDAMAGE)

setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, 204)

function onGetFormulaValues(cid, level, maglevel)

min = -((level*1 + maglevel*1.6) + 125)

max = -((level*1 + maglevel*1.8) + 125)

return min, max

end

 

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

 

 

local combat2 = createCombatObject()

setCombatParam(combat2, COMBAT_PARAM_EFFECT, 19)

setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat2, COMBAT_PARAM_HITCOLOR, 204)

function onGetFormulaValues(cid, level, maglevel)

min = -((level*5.4 + maglevel*6.4))

max = -((level*5.5 + maglevel*6.5))

return min, max

end

 

setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

 

local arr1 = {

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 2, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

}

 

local arr2 = {

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 2, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

}

 

 

local area1 = createCombatArea(arr1)

local area2 = createCombatArea(arr2)

 

setCombatArea(combat1, area1)

setCombatArea(combat2, area2)

 

local function onCastSpell1(parameters)

return isPlayer(parameters.cid) and doCombat(parameters.cid, combat1, parameters.var)

end

 

local function onCastSpell2(parameters)

return isPlayer(parameters.cid) and doCombat(parameters.cid, combat2, parameters.var)

end

 

function onCastSpell(cid, var)

local parameters = { cid = cid, var = var}

addEvent(onCastSpell1, 100, parameters)

addEvent(onCastSpell2, 100, parameters)

return true

end

E gostaria de que ela só pudesse ser usada quando eu estivesse pisando num piso de areia por exemplo.

Gostaria de aproveitar e pedir uma spell que teleportasse o meu inimigo (target) para um lugar do mapa (Que eu possa editar as coordenadas).

VLW e REP+ para quem conseguir fazer.

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

Posts Recomendados

  • 0

Use esse script no lugar da sua spell:

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 35)
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_NONEDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, 204)
function onGetFormulaValues(cid, level, maglevel)
min = -((level*1 + maglevel*1.6) + 125)
max = -((level*1 + maglevel*1.8) + 125)
return min, max
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 19)
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_HITCOLOR, 204)
function onGetFormulaValues(cid, level, maglevel)
min = -((level*5.4 + maglevel*6.4))
max = -((level*5.5 + maglevel*6.5))
return min, max
end
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local arr1 = {
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 2, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
}
local arr2 = {
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 2, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
}

local area1 = createCombatArea(arr1)
local area2 = createCombatArea(arr2)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
local function onCastSpell1(parameters)
return isPlayer(parameters.cid) and doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
return isPlayer(parameters.cid) and doCombat(parameters.cid, combat2, parameters.var)
end
function onCastSpell(cid, var)
if getPlayerStorageValue(cid, 8585) >= 1 then
return false
end
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 100, parameters)
return true
end

 

Abra a pasta data/movements/scripts e crie um arquivo chamado spelltile.lua

Adicione o script:

local stor = 8585
function onStepIn(cid, item, frompos)
if getPlayerStorageValue(cid, stor) <= 0 then
setPlayerStorageValue(cid, stor, 1)
end
end
function onStepOut(cid, item, frompos)
if getPlayerStorageValue(cid, stor) >= 1 then
setPlayerStorageValue(cid, stor, 0)
end
end

Em data/movements abra o arquivo movements.xml

Adicione as tags:

<movevent type="StepIn" actionid="8585" event="script" value="spelltile.lua"/>
<movevent type="StepOut" actionid="8585" event="script" value="spelltile.lua"/>

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

  • 0

Nem precisava de tudo isso, só era colocar pra verificar se o tile que o cara tá é de areia, nem precisava criar esse stepin ai mano. Sempre tente fazer o script o mais simples possível.

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

  • 0

local areia = {1111, 2222, 3333}
local pos = getThingPos(cid)
pos.stackpos = 0
if not isInArray(areia, getThingfromPos(pos).itemid) then
return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")
end

algu +/- assim... -n liga pro ingles o.O-

Link para o comentário
Compartilhar em outros sites

  • 0

local areia = {1111, 2222, 3333}
local pos = getThingPos(cid)
pos.stackpos = 0
if not isInArray(areia, getThingfromPos(pos).itemid) then
return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")
end

algu +/- assim... -n liga pro ingles o.O-

Exatamente isso xD

Link para o comentário
Compartilhar em outros sites

  • 0

local areia = {1111, 2222, 3333}
local pos = getThingPos(cid)
pos.stackpos = 0
if not isInArray(areia, getThingfromPos(pos).itemid) then
return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")
end

algu +/- assim... -n liga pro ingles o.O-

Exatamente isso xD

 

Poderia ter usado getTileThingByPos(pos).

Mais seria a mesma coisa :D

Link para o comentário
Compartilhar em outros sites

  • 0

local areia = {1111, 2222, 3333}
local pos = getThingPos(cid)
pos.stackpos = 0
if not isInArray(areia, getThingfromPos(pos).itemid) then
return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")
end

algu +/- assim... -n liga pro ingles o.O-

Exatamente isso xD

 

Poderia ter usado getTileThingByPos(pos).

Mais seria a mesma coisa :D

Sim, eu sabia que tinha uma função que pegava direto o item do piso, só não lembrava a syntax dela.

Link para o comentário
Compartilhar em outros sites

  • 0

Mas tipo o do Slicer, eu coloco aonde na minha spell essa função que ele passou?

 

local areia = {1111, 2222, 3333}

local pos = getThingPos(cid)

pos.stackpos = 0

if not isInArray(areia, getThingfromPos(pos).itemid) then

return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")

end

Link para o comentário
Compartilhar em outros sites

  • 0

local combat1 = createCombatObject()

setCombatParam(combat1, COMBAT_PARAM_EFFECT, 35)

setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_NONEDAMAGE)

setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, 204)

function onGetFormulaValues(cid, level, maglevel)

min = -((level*1 + maglevel*1.6) + 125)

max = -((level*1 + maglevel*1.8) + 125)

return min, max

end

 

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

 

 

local combat2 = createCombatObject()

setCombatParam(combat2, COMBAT_PARAM_EFFECT, 19)

setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat2, COMBAT_PARAM_HITCOLOR, 204)

function onGetFormulaValues(cid, level, maglevel)

min = -((level*5.4 + maglevel*6.4))

max = -((level*5.5 + maglevel*6.5))

return min, max

end

 

setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

 

local arr1 = {

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 2, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

}

 

local arr2 = {

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 2, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

}

 

 

local area1 = createCombatArea(arr1)

local area2 = createCombatArea(arr2)

 

setCombatArea(combat1, area1)

setCombatArea(combat2, area2)

 

local function onCastSpell1(parameters)

return isPlayer(parameters.cid) and doCombat(parameters.cid, combat1, parameters.var)

end

 

local function onCastSpell2(parameters)

return isPlayer(parameters.cid) and doCombat(parameters.cid, combat2, parameters.var)

end

 

function onCastSpell(cid, var)

local parameters = { cid = cid, var = var}

addEvent(onCastSpell1, 100, parameters)

addEvent(onCastSpell2, 100, parameters)

return true

end

Link para o comentário
Compartilhar em outros sites

  • 0

~Edited

Use esse script:

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 35)
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_NONEDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_HITCOLOR, 204)
function onGetFormulaValues(cid, level, maglevel)
min = -((level*1 + maglevel*1.6) + 125)
max = -((level*1 + maglevel*1.8) + 125)
return min, max
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 19)
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_HITCOLOR, 204)
function onGetFormulaValues(cid, level, maglevel)
min = -((level*5.4 + maglevel*6.4))
max = -((level*5.5 + maglevel*6.5))
return min, max
end
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local arr1 = {
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 2, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
}
local arr2 = {
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 2, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
}
local area1 = createCombatArea(arr1)
local area2 = createCombatArea(arr2)
setCombatArea(combat1, area1)
setCombatArea(combat2, area2)
local function onCastSpell1(parameters)
return isPlayer(parameters.cid) and doCombat(parameters.cid, combat1, parameters.var)
end
local function onCastSpell2(parameters)
return isPlayer(parameters.cid) and doCombat(parameters.cid, combat2, parameters.var)
end
local areia = {1111, 2222, 3333}
local pos = getThingPos(cid)
pos.stackpos = 0
if not isInArray(areia, getThingfromPos(pos).itemid) then
return doPlayerSendTextMessage(cid, 20, "You can't use this spell out of sand!")
end
function onCastSpell(cid, var)
local parameters = { cid = cid, var = var}
addEvent(onCastSpell1, 100, parameters)
addEvent(onCastSpell2, 100, parameters)
return true
end

Modifique em local areia = {1111, 2222, 3333} pelos ids dos pisos de areia que o player poderá usar a spell.

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

×
×
  • Criar Novo...