LE
dúvida

ajuda com script de spell

Por leandrozera, 05 de ago. de 2015 em Scripts

otserv
22
3.1k
leandrozeraL
05 de agosto de 2015 às 07:51

olá galerinha do Xtibia gostaria de saber como faço para por quando player não tiver ml para usar tal magia usar a forma

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")

em vez de

 

sendCancel("You do not have enough magic level.");

 

 

nessa magia aqui no caso

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end
SkyLighS
05 de agosto de 2015 às 07:58

tente

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
    return doCombat(cid, combat, var)
end
leandrozeraL
05 de agosto de 2015 às 08:03

 

tente

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
    return doCombat(cid, combat, var)
end

dessa forma se ele não tiver ml continua usando função

sendCancel("You do not have enough magic level.");

caso tenha ele tenha ml vai apenas executar magia normalmente + mensagem em

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
SkyLighS
05 de agosto de 2015 às 08:23

foi mal msm pensei merda na hora.

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
local ml = 100 --- QUANTO DE ML VAI PRECISAR

if getPlayerMagLevel(cid) == ml then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
    return doCombat(cid, combat, var)
end
end

edita o ml na linha ali e poem no spells.xml também

leandrozeraL
05 de agosto de 2015 às 08:36

foi mal msm pensei merda na hora.

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
local ml = 100 --- QUANTO DE ML VAI PRECISAR

if getPlayerMagLevel(cid) == ml then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
    return doCombat(cid, combat, var)
end
end

edita o ml na linha ali e poem no spells.xml também

não apareceu nem um erro no console mais também não esta aparecendo nem uma mensagem quando mando spell

SkyLighS
05 de agosto de 2015 às 08:44


local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

 

local arr = {

{0, 1, 0},

{0, 1, 0},

{0, 1, 0},

}

 

local area = createCombatArea(arr)

 

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

local ml = 100 --- QUANTO DE ML VAI PRECISAR

 

if getPlayerMagLevel(cid) == ml then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "")

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")

return doCombat(cid, combat, var)

end

end

 

leandrozeraL
05 de agosto de 2015 às 08:57
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0},
}

local area = createCombatArea(arr)

setCombatArea(combat, area)

function onCastSpell(cid, var)
local ml = 100 --- QUANTO DE ML VAI PRECISAR

if getPlayerMagLevel(cid) == ml then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")
    return doCombat(cid, combat, var)
end
end

agora aparece mensagem "você precisa ter ml x para usar essa magia!." + mensagem do nome da spell e gasta a mana se player n tiver magic level

BrunoB
05 de agosto de 2015 às 09:04

agora aparece mensagem "você precisa ter ml x para usar essa magia!." + mensagem do nome da spell e gasta a mana se player n tiver magic level

Tente assim:

local ml = 100 --- QUANTO DE ML VAI PRECISAR

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
		return false
	else
		return doCombat(cid, combat, var)
	end
end

Editado Agosto 5 por Bruno Minervino

SkyLighS
05 de agosto de 2015 às 09:05


local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

 

local arr = {

{0, 1, 0},

{0, 1, 0},

{0, 1, 0},

}

 

local area = createCombatArea(arr)

 

setCombatArea(combat, area)

 

function onCastSpell(cid, var)

local ml = 100 --- QUANTO DE ML VAI PRECISAR

 

if getPlayerMagLevel(cid) == ml then

doPlayerSendCancel(MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml x para usar essa magia!.")

return doCombat(cid, combat, var)

end

end

 

leandrozeraL
05 de agosto de 2015 às 09:13

 

Tente assim:

local ml = 100 --- QUANTO DE ML VAI PRECISAR

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
		return false
	else
		return doCombat(cid, combat, var)
	end
end

 

v5uJ14u.png

dessa forma agora deu certo só que player fica apertando hotkay sem parar n tem exhausted isso pode lagar o server, poderia colocar um magicefect tb, constpoft?

Editado Agosto 5 por leandrozera

SkyLighS
05 de agosto de 2015 às 09:22

com exhaust

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local exhastor = 5 --- Segundos de exhaust

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
 if exhaustion.check(cid, exhastor) then
return true
end
	if getPlayerMagLevel(cid) < ml then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
		return false
	else
		return doCombat(cid, combat, var)
	end
end
BrunoB
05 de agosto de 2015 às 09:25

dessa forma agora deu certo só que player fica apertando hotkay sem parar n tem exhausted isso pode lagar o server, poderia colocar um magicefect tb, constpoft?

Segue:

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local storage = 99488 -- STORAGE PARA CONTROLAR O EXAUST
local seconds = 60 -- TEMPO EM SEGUNDOS PARA REPETIR A MENSAGEM

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		if getPlayerStorageValue(tid, storage) < os.time() then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
			setPlayerStorageValue(tid, storage, os.time() + seconds)
		end
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	else
		return doCombat(cid, combat, var)
	end
end
leandrozeraL
05 de agosto de 2015 às 09:28

 

com exhaust

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local exhastor = 5 --- Segundos de exhaust

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
 if exhaustion.check(cid, exhastor) then
return true
end
	if getPlayerMagLevel(cid) < ml then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
		return false
	else
		return doCombat(cid, combat, var)
	end
end

ainda fico do mesmo jeito amigo

Segue:

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local storage = 99488 -- STORAGE PARA CONTROLAR O EXAUST
local seconds = 60 -- TEMPO EM SEGUNDOS PARA REPETIR A MENSAGEM

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		if getPlayerStorageValue(tid, storage) < os.time() then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
			setPlayerStorageValue(tid, storage, os.time() + seconds)
		end
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	else
		return doCombat(cid, combat, var)
	end
end
[5/8/2015 9:25:44] [Error - Spell Interface] 
[5/8/2015 9:25:45] data/spells/scripts/magias/super exevo mas mort.lua:onCastSpell
[5/8/2015 9:25:45] Description: 
[5/8/2015 9:25:45] data/spells/scripts/magias/super exevo mas mort.lua:24: attempt to compare boolean with number
[5/8/2015 9:25:45] stack traceback:
[5/8/2015 9:25:45] 	data/spells/scripts/magias/super exevo mas mort.lua:24: in function <data/spells/scripts/pbot/super exevo mas mort.lua:22>

BrunoB
05 de agosto de 2015 às 09:36

 

[5/8/2015 9:25:44] [Error - Spell Interface] 
[5/8/2015 9:25:45] data/spells/scripts/magias/super exevo mas mort.lua:onCastSpell
[5/8/2015 9:25:45] Description: 
[5/8/2015 9:25:45] data/spells/scripts/magias/super exevo mas mort.lua:24: attempt to compare boolean with number
[5/8/2015 9:25:45] stack traceback:
[5/8/2015 9:25:45] 	data/spells/scripts/magias/super exevo mas mort.lua:24: in function <data/spells/scripts/pbot/super exevo mas mort.lua:22>

 

Usando a função que já existe no servidor:

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local storage = 99488 -- STORAGE PARA CONTROLAR O EXAUST
local seconds = 60 -- TEMPO EM SEGUNDOS PARA REPETIR A MENSAGEM

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		if exhaustion.check(cid, storage) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
			exhaustion.set(cid, storage, seconds)
		end
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	else
		return doCombat(cid, combat, var)
	end
end
leandrozeraL
05 de agosto de 2015 às 09:56

Usando a função que já existe no servidor:

local ml = 100 --- QUANTO DE ML VAI PRECISAR
local storage = 99488 -- STORAGE PARA CONTROLAR O EXAUST
local seconds = 60 -- TEMPO EM SEGUNDOS PARA REPETIR A MENSAGEM

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -60.0, -30, -50.0, 90)

local arr = {
	{0, 1, 0},
	{0, 1, 0},
	{0, 1, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
	if getPlayerMagLevel(cid) < ml then
		if exhaustion.check(cid, storage) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")
			exhaustion.set(cid, storage, seconds)
		end
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
		return false
	else
		return doCombat(cid, combat, var)
	end
end

CONST_ME_POFF agora deu certo so não esta mostrando mensagem

 

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter ml " .. ml .. " para usar essa magia!.")

Editado Agosto 5 por leandrozera