AL
pedido

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

Por Allangod, 12 de dez. de 2012 em Scripts

22
2.4k
AllangodA
12 de dezembro de 2012 às 10:35

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 Dezembro 12 por Allangod

HidekiKtyH
12 de dezembro de 2012 às 10:58

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 Dezembro 12 por HidekiKty

MaXwEllDeNM
12 de dezembro de 2012 às 11:54

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 Dezembro 12 por MaXwEllDeN

SlicerS
12 de dezembro de 2012 às 13:27

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-

MaXwEllDeNM
12 de dezembro de 2012 às 13:43

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

caoticC
12 de dezembro de 2012 às 14:02

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

MaXwEllDeNM
12 de dezembro de 2012 às 14:12

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.

SlicerS
12 de dezembro de 2012 às 14:21

e eu nem pensei nela kk mas da nd.. no final da na ms ^^

HidekiKtyH
12 de dezembro de 2012 às 15:11

Sim sim tudo bem, obvio que é mais simples, mas obrigado mesmo assim.

AllangodA
12 de dezembro de 2012 às 17:33

Aonde que eu configuro o id do tile da areia?

AllangodA
12 de dezembro de 2012 às 17:39

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

MaXwEllDeNM
12 de dezembro de 2012 às 17:41

Posta tua spell aqui, fazendo favor.

AllangodA
12 de dezembro de 2012 às 17:43

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

HidekiKtyH
12 de dezembro de 2012 às 17:45

~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 Dezembro 12 por HidekiKty

AllangodA
12 de dezembro de 2012 às 17:47

Hide essa ae nao funfo :/