Ir para conteúdo
  • 0

[AJUDA] Spell Que Precisa de Permissão


jvcasarin

Pergunta

Bom gente, eu tava olhando este tutorial aqui> TÓPICO e adorei, mas eu queria fazer esse sistema com QUALQUER SPELL,

 

O sistema é assim:

 

 

actions/scripts/questspell.lua

 

 

 

function onUse(cid, item, frompos, item2, topos)
spellName = "XXXXXX" -- Nome da spell
if getPlayerStorageValue(cid, 40000) <= 0 then
setPlayerStorageValue(cid, 40000, 1)
doPlayerSendTextMessage(cid, 20, "You received permission to use the ".. spellName ..".")
else
doPlayerSendTextMessage(cid, 20, "You already have permission to use the ".. spellName .." spell.")
end
return TRUE
end

actions.xml

 

<action actionid="6588" event="script" value="questspell.lua"/>

 

 

Uma spell de exemplo que eu gostaria de aplicar o sistema de permissão é essa:

 

frozen orb.lua

 

 

 

local config = {
velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 24, -- quantos hits vai dar
msg = "Frozen Orb", -- msg ao soltar a spell
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 36, -- efeito de distancia que vai ficar rodando
effect3 = 37, -- efeito ao castar a spell
effect4 = 43 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais,
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
function onTargetCreature(cid, target)
doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")
local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function initEffect(position)
for i = 0, 3 do
local pos = {x = position.x, y = position.y, z = position.z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(position, dir, config.effect1)
end
return true
end
function middleEffect(uid, param, lim, count)
n = count or 0
if isCreature(uid) and n < lim then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
doSendDistanceShoot(dir, dir2, config.effect1)
end
doCombat(uid, combat, {
pos = getCreaturePosition(uid),
type = 2
})
addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1)
end
return true
end
function endEffect(uid)
if isCreature(uid) then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1)
end
end
return true
end
function onCastSpell(cid, var)
if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then
setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
local position = getCreaturePosition(cid)
doCreatureSay(cid, config.msg, 20)
addEvent(endEffect, 8.55 * 1000, uid)
doSendMagicEffect(position, config.effect3)
initEffect(position)
addEvent(middleEffect, 200, cid, var, config.hits)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end

Por favor, apliquem o sistema nessa spell e ME EXPLIQUEM CADA COISA QUE DEVE SER ALTERADA NA SPELL.
Outro exemplo de spell, só que ela não usa storage:
magic of death.lua

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -59.3, -30, -69.7, 0)
local arr = {
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

POR FAVOR, PRECISO MUITO DISSO!!!
Quero colocar o sistema em várias spells!

 

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Perdão, erros da matina hudshudsuhdshuds

Try now:

local config = {
velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 24, -- quantos hits vai dar
msg = "Frozen Orb", -- msg ao soltar a spell
storage = {99998},
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 36, -- efeito de distancia que vai ficar rodando
effect3 = 37, -- efeito ao castar a spell
effect4 = 43 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]
 
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
function onTargetCreature(cid, target)
   doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")
 
local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}
 
local area = createCombatArea(arr)
setCombatArea(combat, area)
 
function initEffect(position)
for i = 0, 3 do
local pos = {x = position.x, y = position.y, z = position.z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(position, dir, config.effect1)
end
return true
end
 
function middleEffect(uid, param, lim, count)
n = count or 0
if isCreature(uid) and n < lim then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
doSendDistanceShoot(dir, dir2, config.effect1)
end
doCombat(uid, combat, {
pos = getCreaturePosition(uid),
type = 2
        })
addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1)
end
return true
end
 
function endEffect(uid)
if isCreature(uid) then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1)
end
end
return true
end
 
function onCastSpell(cid, var)
if getPlayerStorageValue(cid, config.storage[1]) >= 1 then
setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
local position = getCreaturePosition(cid)
doCreatureSay(cid, config.msg, 20)
addEvent(endEffect, 8.55 * 1000, uid)
doSendMagicEffect(position, config.effect3)
initEffect(position)
addEvent(middleEffect, 200, cid, var, config.hits)
else
doPlayerSendCancel(cid, "Desculpe,Você tem que comprar a permissao para usar está magia.")
end
return true
end
Editado por Absolute
Link para o comentário
Compartilhar em outros sites

  • 0

O Sistema é simples meu amigo, este item ao usar dará a storage x ao player, na magia ele irá checar se há a storage necessária para solta-la, se não houver ele da um sendcancel, se houver ele solta.

O Action item é apenas para setar a storage ao player que será capaz de soltar a magia na hora do checkstorage.

 

Poste a spell conforme tem no tópico que você linkou pois não consigo ver, não tenho conta naquela outra merd* de fórum pra visualizar.

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

  • 0

O Sistema é simples meu amigo, este item ao usar dará a storage x ao player, na magia ele irá checar se há a storage necessária para solta-la, se não houver ele da um sendcancel, se houver ele solta.

O Action item é apenas para setar a storage ao player que será capaz de soltar a magia na hora do checkstorage.

 

Poste a spell conforme tem no tópico que você linkou pois não consigo ver, não tenho conta naquela outra merd* de fórum pra visualizar.

Foi mal kkkkk, eu quero que a quest continue do jeito que está viu, só preciso de ajuda pra colocar a storage nessas duas magias e PRECISO aprender COMO e ONDE colocar em QUALQUER outra magia.

 

Ai vai a magia:

 

Spell sem STORAGE DA PERMISSÃO:

 

 

local config =

{

seconds = 10,

storage = 47112120,

msg = "Voc\ê preci\sa aguardar 10 segundos para acumular o esp\írito.",

mana = 995,

semMana = "Voc\ê n\ão t\êm mana suficiente."

}

 

local function useAgain(cid)

setPlayerStorageValue(cid, config.storage, 2)

return TRUE

end

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, 4)

setCombatFormula(combat,COMBAT_FORMULA_LEVELMAGIC, -3.0, -290, -3.5, -300)

 

local condition = createConditionObject(CONDITION_PARALYZE)

setConditionParam(condition, CONDITION_PARAM_TICKS, 20000)

-- setConditionParam(condition, CONDITION_PARAM_SPEED, -70)

setConditionFormula(condition, -0.9, 0, -0.9, 0)

setCombatCondition(combat, condition)

 

arr = {

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0},

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

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

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

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

{0, 0, 1, 1, 1, 3, 1, 1, 1, 0,0,0},

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

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

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

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

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0},

}

 

local area = createCombatArea(arr)

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

if getPlayerStorageValue(cid, config.storage) == 1 then

doPlayerSendCancel(cid, config.msg)

return TRUE

end

if getPlayerStorageValue(cid, config.storage) ~= 1 then

config.mana = getCreatureMaxMana(cid)*0.90

if getPlayerMana(cid) >= config.mana then

doPlayerAddMana(cid, -config.mana)

setPlayerStorageValue(cid, config.storage, 1)

addEvent(useAgain, config.seconds*1000, cid)

return doCombat(cid, combat, var)

else

doPlayerSendCancel(cid, config.semMana)

end

end

return TRUE

end

 

Spell COM A STORAGE DE PERMISSÃO

 

 

local config = {

seconds = 10,

storage = {40000, 47112120},

msg = "Voc\ê preci\sa aguardar 10 segundos para acumular o esp\írito.",

mana = 995,

semMana = "Voc\ê n\ão t\êm mana suficiente."

}

local function useAgain(cid)

setPlayerStorageValue(cid, config.storage[2], 2)

return TRUE

end

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, 4)

setCombatFormula(combat,COMBAT_FORMULA_LEVELMAGIC, -3.0, -290, -3.5, -300)

local condition = createConditionObject(CONDITION_PARALYZE)

setConditionParam(condition, CONDITION_PARAM_TICKS, 20000)

-- setConditionParam(condition, CONDITION_PARAM_SPEED, -70)

setConditionFormula(condition, -0.9, 0, -0.9, 0)

setCombatCondition(combat, condition)

arr = {

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0},

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

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

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

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

{0, 0, 1, 1, 1, 3, 1, 1, 1, 0,0,0},

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

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

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

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

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0},

}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)

if getPlayerStorageValue(cid, config.storage[2]) == 1 then

doPlayerSendCancel(cid, config.msg)

return TRUE

end

if getPlayerStorageValue(cid, config.storage[1]) >= 1 then

config.mana = getCreatureMaxMana(cid)*0.90

if getPlayerMana(cid) >= config.mana then

doPlayerAddMana(cid, -config.mana)

setPlayerStorageValue(cid, config.storage[2], 1)

addEvent(useAgain, config.seconds*1000, cid)

return doCombat(cid, combat, var)

else

doPlayerSendCancel(cid, config.semMana)

end

else

doPlayerSendCancel(cid, "Desculpe,Você tem que comprar a permissao para usar está magia.")

end

return TRUE

end

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

  • 0

@Edit, vamos lá, leia com atenção a explicação!

 

Em data/actions/scripts crie um arquivo com o nome de frozenorb.lua e adicione:

function onUse(cid, item, frompos, item2, topos)
          spellName = "SUA SPELL" -- Nome da spell
          if getPlayerStorageValue(cid, 99998) <= 0 then
                    setPlayerStorageValue(cid, 99998, 1)
                    doPlayerSendTextMessage(cid, 20, "You received permission to use the ".. spellName ..".")
          else
                    doPlayerSendTextMessage(cid, 20, "You already have permission to use the ".. spellName .." spell.")
          end
          return TRUE
end

Em data/actions/actions.xml adicione:

<action actionid="SUA ACTION" event="script" value="frozenorb.lua"/>

A Spell ficará assim:

local config = {
velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 24, -- quantos hits vai dar
msg = "Frozen Orb", -- msg ao soltar a spell
storage = {99998},
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 36, -- efeito de distancia que vai ficar rodando
effect3 = 37, -- efeito ao castar a spell
effect4 = 43 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]
 
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
function onTargetCreature(cid, target)
   doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")
 
local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}
 
local area = createCombatArea(arr)
setCombatArea(combat, area)
 
function initEffect(position)
for i = 0, 3 do
local pos = {x = position.x, y = position.y, z = position.z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(position, dir, config.effect1)
end
return true
end
 
function middleEffect(uid, param, lim, count)
n = count or 0
if isCreature(uid) and n < lim then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
doSendDistanceShoot(dir, dir2, config.effect1)
end
doCombat(uid, combat, {
pos = getCreaturePosition(uid),
type = 2
        })
addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1)
end
return true
end
 
function endEffect(uid)
if isCreature(uid) then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1)
end
end
return true
end
 
function onCastSpell(cid, var)
if getPlayerStorageValue(cid, config.storage[1]) >= 1 then
setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
local position = getCreaturePosition(cid)
doCreatureSay(cid, config.msg, 20)
addEvent(endEffect, 8.55 * 1000, uid)
doSendMagicEffect(position, config.effect3)
initEffect(position)
addEvent(middleEffect, 200, cid, var, config.hits)
else
doPlayerSendCancel(cid, "Desculpe,Você tem que comprar a permissao para usar está magia.")
end
return true
end

ATENÇÃO:

no frozenorb.lua note que há: spellName = "SUA SPELL" -- Nome da spell
Onde está SUA SPELL, você procura a spell no spells.xml e veja o nome dela em: <instant name="AQUI VAI ESTAR O NOME DELA".

Agora na linha do actions.xml em "SUA ACTION" é a ACTIONID que você colocará no baú que o player irá dar use (pelo remeres).

A Spell, basta edita-la conforme postei.


Conforme pedido, EXPLICAÇÃO:

O Que foi alterado?
No local da spell foi acionado o storage = {99998}, Este local foi feito para que quando o player executar a ação (soltar a spell) haverá uma função buscando o storage para checar se o player possui a mesma ou não.
A função que irá verificar foi adicionada, é á: if getPlayerStorageValue(cid, config.storage) >= 1 then
Caso o player não tenha a storage irá retornar com a função adicionada: doPlayerSendCancel(cid, "Sorry, you have to buy permission to use this.")
No seu caso eu adicionei a storage em local, pois não havia, mas caso for fazer em outra é houver já o storage, você irá acrescentar a storage na local/variavel e na hora de fazer o check storage você irá identifica-las na storage como: storage[1], storage[2], storage[3] e assim sucessivamente...
E então na hora de verificar você irá fazer o check normal, setando a creature com cid e irá identificar como [1], ficando assim:
cid, storage[1]

cid, storage[2]
cid, storage[3]



Bom, é isso aí, teste ai e tente fazer a próxima.
Desculpe pelo português ou qualquer erro, são 06h da manhã minha cabeça não funciona perfeitamente dshuhusdhusduhsd.
Obrigado, abraços.


Obs: Havia postado a spell do outro, como disse são 06hrs dbhsshduhuds, postei a sua, normalizado.

 

 

 

 

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

  • 0

@Edit, vamos lá, leia com atenção a explicação!

 

Em data/actions/scripts crie um arquivo com o nome de frozenorb.lua e adicione:

function onUse(cid, item, frompos, item2, topos)
          spellName = "SUA SPELL" -- Nome da spell
          if getPlayerStorageValue(cid, 99998) <= 0 then
                    setPlayerStorageValue(cid, 99998, 1)
                    doPlayerSendTextMessage(cid, 20, "You received permission to use the ".. spellName ..".")
          else
                    doPlayerSendTextMessage(cid, 20, "You already have permission to use the ".. spellName .." spell.")
          end
          return TRUE
end

Em data/actions/actions.xml adicione:

<action actionid="SUA ACTION" event="script" value="frozenorb.lua"/>

A Spell ficará assim:

 

local config = {
velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 24, -- quantos hits vai dar
storage = {99998}, -- storage do pedido
msg = "Frozen Orb", -- msg ao soltar a spell
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 36, -- efeito de distancia que vai ficar rodando
effect3 = 37, -- efeito ao castar a spell
effect4 = 43 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]
 
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
function onTargetCreature(cid, target)
   doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")
 
local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}
 
local area = createCombatArea(arr)
setCombatArea(combat, area)
 
function initEffect(position)
for i = 0, 3 do
local pos = {x = position.x, y = position.y, z = position.z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(position, dir, config.effect1)
end
return true
end
 
function middleEffect(uid, param, lim, count)
n = count or 0
if isCreature(uid) and n < lim then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
doSendDistanceShoot(dir, dir2, config.effect1)
end
doCombat(uid, combat, {
pos = getCreaturePosition(uid),
type = 2
        })
addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1)
end
return true
end
 
function endEffect(uid)
if isCreature(uid) then
for i = 0, 3 do
local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z}
local dir = getPosByDir(pos, i)
doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1)
end
end
return true
end
 
function onCastSpell(cid, var)
if Value(cid, config.key) - os.time() <= 0 then
setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
local position = getCreaturePosition(cid)
doCreatureSay(cid, config.msg, 20)
if getPlayerStorageValue(cid, config.storage) >= 1 then
addEvent(endEffect, 8.55 * 1000, uid)
doSendMagicEffect(position, config.effect3)
initEffect(position)
addEvent(middleEffect, 200, cid, var, config.hits)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
else
doPlayerSendCancel(cid, "Sorry, you have to buy permission to use this.")
end
return true
end

ATENÇÃO:

no frozenorb.lua note que há: spellName = "SUA SPELL" -- Nome da spell

Onde está SUA SPELL, você procura a spell no spells.xml e veja o nome dela em: <instant name="AQUI VAI ESTAR O NOME DELA".

 

Agora na linha do actions.xml em "SUA ACTION" é a ACTIONID que você colocará no baú que o player irá dar use (pelo remeres).

 

A Spell, basta edita-la conforme postei.

 

 

Conforme pedido, EXPLICAÇÃO:

O Que foi alterado?

No local da spell foi acionado o storage = {99998}, Este local foi feito para que quando o player executar a ação (soltar a spell) haverá uma função buscando o storage para checar se o player possui a mesma ou não.

A função que irá verificar foi adicionada, é á: if getPlayerStorageValue(cid, config.storage) >= 1 then

Caso o player não tenha a storage irá retornar com a função adicionada: doPlayerSendCancel(cid, "Sorry, you have to buy permission to use this.")

No seu caso eu adicionei a storage em local, pois não havia, mas caso for fazer em outra é houver já o storage, você irá acrescentar a storage na local/variavel e na hora de fazer o check storage você irá identifica-las na storage como: storage[1], storage[2], storage[3] e assim sucessivamente...

E então na hora de verificar você irá fazer o check normal, setando a creature com cid e irá identificar como [1], ficando assim:

cid, storage[1]

cid, storage[2]

cid, storage[3]

 

 

Bom, é isso aí, teste ai e tente fazer a próxima.

Desculpe pelo português ou qualquer erro, são 06h da manhã minha cabeça não funciona perfeitamente dshuhusdhusduhsd.

Obrigado, abraços.

 

 

Obs: Havia postado a spell do outro, como disse são 06hrs dbhsshduhuds, postei a sua, normalizado.

 

 

 

 

 

Ai cara, vlw, mas ta dando um erro com essa magia que vc editou, olha o erro:

 

 

[6:37:47.379] [Error - LuaInterface::loadFile] data/spells/scripts/frozenorb.lua:90: 'end' expected (to close 'function' at line 73) near 'endlocal'
[6:37:47.379] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/frozenorb.lua)
[6:37:47.383] data/spells/scripts/frozenorb.lua:90: 'end' expected (to close 'function' at line 73) near 'endlocal'
[6:37:47.391] [Error - LuaInterface::loadFile] data/spells/scripts/frozenorb.lua:90: 'end' expected (to close 'function' at line 73) near 'endlocal'
[6:37:47.391] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/frozenorb.lua)
[6:37:47.391] data/spells/scripts/frozenorb.lua:90: 'end' expected (to close 'function' at line 73) near 'endlocal'

Obs.: Eu uso TFS 0.4

 

Eu tbm gostaria de saber em que lugar do onCastSpell eu coloco a tag :

 

 

if getPlayerStorageValue(cid, config.storage) >= 1 then
Editado por jvcasarin
Link para o comentário
Compartilhar em outros sites

  • 0

Modifiquei, testa lá!

 

 

Apareceu outro erro olha:

 

 

 

[6:50:08.054] [Error - LuaInterface::loadFile] data/spells/scripts/frozenorb.lua:89: 'end' expected (to close 'function' at line 73) near '<eof>'
[6:50:08.055] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/frozenorb.lua)
[6:50:08.055] data/spells/scripts/frozenorb.lua:89: 'end' expected (to close 'function' at line 73) near '<eof>'
[6:50:08.061] [Error - LuaInterface::loadFile] data/spells/scripts/frozenorb.lua:89: 'end' expected (to close 'function' at line 73) near '<eof>'
[6:50:08.067] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/frozenorb.lua)
[6:50:08.067] data/spells/scripts/frozenorb.lua:89: 'end' expected (to close 'function' at line 73) near '<eof>'

Eu gostaria de saber o que você modificou pra tirar aquele erro ^^
E QUE POH* DE ERRO EH ESSE? KKKKKKKKKKKKKKKKKK "eof"
AAAN?
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...