• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

OpenTibia SpellCreator: A graphical spell creation enviroment

I severely recommend to un-tick directional to begin with, and remove the space after direction. I think your XML fails to parse anyway.
 
My filter is blocking dropbox because of reasons. Any chance you could just upload it straight from your computer and put it on as an attachment?
 
I severely recommend to un-tick directional to begin with, and remove the space after direction. I think your XML fails to parse anyway.
Can you check the script and see whats wrong in it ? I'll be thankful .. :)
Code:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 6000ms
local combat60_Water_Drown = createCombatObject()
setCombatParam(combat60_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat60_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat60_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat60_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat60_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 4000ms
local combat40_Water_Drown = createCombatObject()
setCombatParam(combat40_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat40_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat40_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat40_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat40_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 2000ms
local combat20_Water_Drown = createCombatObject()
setCombatParam(combat20_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat20_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat20_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat20_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat20_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 0ms
local combat0_Water_Drown = createCombatObject()
setCombatParam(combat0_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat0_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat0_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat0_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat0_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 8000ms
local combat80_Water_Drown = createCombatObject()
setCombatParam(combat80_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat80_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat80_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat80_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat80_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 10000ms
local combat100_Water_Drown = createCombatObject()
setCombatParam(combat100_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat100_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat100_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat100_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat100_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 12000ms
local combat120_Water_Drown = createCombatObject()
setCombatParam(combat120_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat120_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat120_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat120_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat120_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 14000ms
local combat140_Water_Drown = createCombatObject()
setCombatParam(combat140_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat140_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat140_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat140_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat140_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 16000ms
local combat160_Water_Drown = createCombatObject()
setCombatParam(combat160_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat160_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat160_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat160_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat160_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 18000ms
local combat180_Water_Drown = createCombatObject()
setCombatParam(combat180_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat180_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat180_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat180_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat180_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 20000ms
local combat200_Water_Drown = createCombatObject()
setCombatParam(combat200_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat200_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat200_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat200_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat200_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
	if (isCreature(cid)) then
		doCombat(cid, c, var)
		if (dirList ~= nil) then -- Emit distance effects
			local i = 2;
			while (i < #dirList) do
				doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
				i = i + 2
			end		
		end
	end
end

function onCastSpell(cid, var)
	local startPos = getCreaturePosition(cid)
	addEvent(RunPart,6000,combat60_Water_Drown,cid,var,dfcombat60_Water_Drown,startPos)
	addEvent(RunPart,4000,combat40_Water_Drown,cid,var,dfcombat40_Water_Drown,startPos)
	addEvent(RunPart,2000,combat20_Water_Drown,cid,var,dfcombat20_Water_Drown,startPos)
	RunPart(combat0_Water_Drown,cid,var,dfcombat0_Water_Drown,startPos)
	addEvent(RunPart,8000,combat80_Water_Drown,cid,var,dfcombat80_Water_Drown,startPos)
	addEvent(RunPart,10000,combat100_Water_Drown,cid,var,dfcombat100_Water_Drown,startPos)
	addEvent(RunPart,12000,combat120_Water_Drown,cid,var,dfcombat120_Water_Drown,startPos)
	addEvent(RunPart,14000,combat140_Water_Drown,cid,var,dfcombat140_Water_Drown,startPos)
	addEvent(RunPart,16000,combat160_Water_Drown,cid,var,dfcombat160_Water_Drown,startPos)
	addEvent(RunPart,18000,combat180_Water_Drown,cid,var,dfcombat180_Water_Drown,startPos)
	addEvent(RunPart,20000,combat200_Water_Drown,cid,var,dfcombat200_Water_Drown,startPos)
	return true
end
 
ElectricUE.gif


It electrocutes all victims too :D

- - - Updated - - -

And another one since I can't edit mah post:
FrozenWasteland.gif


- - - Updated - - -

oh, hey, it edited it. sweet deal.
 
My filter is blocking dropbox because of reasons. Any chance you could just upload it straight from your computer and put it on as an attachment?

Just use a proxy or so to download it, Dropbox is one of the best hosters out there, so there's no need for alternatives in my eyes.


Can you check the script and see whats wrong in it ? I'll be thankful .. :)
Code:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 6000ms
local combat60_Water_Drown = createCombatObject()
setCombatParam(combat60_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat60_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat60_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat60_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat60_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 4000ms
local combat40_Water_Drown = createCombatObject()
setCombatParam(combat40_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat40_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat40_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat40_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat40_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 2000ms
local combat20_Water_Drown = createCombatObject()
setCombatParam(combat20_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat20_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat20_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat20_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat20_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 0ms
local combat0_Water_Drown = createCombatObject()
setCombatParam(combat0_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat0_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat0_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat0_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat0_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 8000ms
local combat80_Water_Drown = createCombatObject()
setCombatParam(combat80_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat80_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat80_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat80_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat80_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 10000ms
local combat100_Water_Drown = createCombatObject()
setCombatParam(combat100_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat100_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat100_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat100_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat100_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 12000ms
local combat120_Water_Drown = createCombatObject()
setCombatParam(combat120_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat120_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat120_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat120_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat120_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 14000ms
local combat140_Water_Drown = createCombatObject()
setCombatParam(combat140_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat140_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat140_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat140_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat140_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 16000ms
local combat160_Water_Drown = createCombatObject()
setCombatParam(combat160_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat160_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat160_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat160_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat160_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 18000ms
local combat180_Water_Drown = createCombatObject()
setCombatParam(combat180_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat180_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat180_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat180_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat180_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- Areas/Combat for 20000ms
local combat200_Water_Drown = createCombatObject()
setCombatParam(combat200_Water_Drown, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatParam(combat200_Water_Drown, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatArea(combat200_Water_Drown,createCombatArea({{3}}))
setCombatFormula(combat200_Water_Drown, COMBAT_FORMULA_SKILL, 1, 1, 1, 1)
local dfcombat200_Water_Drown = {CONST_ANI_ENERGY,0,0}

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
	if (isCreature(cid)) then
		doCombat(cid, c, var)
		if (dirList ~= nil) then -- Emit distance effects
			local i = 2;
			while (i < #dirList) do
				doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
				i = i + 2
			end		
		end
	end
end

function onCastSpell(cid, var)
	local startPos = getCreaturePosition(cid)
	addEvent(RunPart,6000,combat60_Water_Drown,cid,var,dfcombat60_Water_Drown,startPos)
	addEvent(RunPart,4000,combat40_Water_Drown,cid,var,dfcombat40_Water_Drown,startPos)
	addEvent(RunPart,2000,combat20_Water_Drown,cid,var,dfcombat20_Water_Drown,startPos)
	RunPart(combat0_Water_Drown,cid,var,dfcombat0_Water_Drown,startPos)
	addEvent(RunPart,8000,combat80_Water_Drown,cid,var,dfcombat80_Water_Drown,startPos)
	addEvent(RunPart,10000,combat100_Water_Drown,cid,var,dfcombat100_Water_Drown,startPos)
	addEvent(RunPart,12000,combat120_Water_Drown,cid,var,dfcombat120_Water_Drown,startPos)
	addEvent(RunPart,14000,combat140_Water_Drown,cid,var,dfcombat140_Water_Drown,startPos)
	addEvent(RunPart,16000,combat160_Water_Drown,cid,var,dfcombat160_Water_Drown,startPos)
	addEvent(RunPart,18000,combat180_Water_Drown,cid,var,dfcombat180_Water_Drown,startPos)
	addEvent(RunPart,20000,combat200_Water_Drown,cid,var,dfcombat200_Water_Drown,startPos)
	return true
end

Post your used XML, the script should be simply copy/pasted. Your XML is most likely wrong (unless you changed stuff in the script).
 
Just use a proxy or so to download it, Dropbox is one of the best hosters out there, so there's no need for alternatives in my eyes.




Post your used XML, the script should be simply copy/pasted. Your XML is most likely wrong (unless you changed stuff in the script).

The xml which appears in the program doesnt work idk why it just make the word casting of the spell appears as a normal chatting word without any effect thats why I changed it , and I changed it to one almost the same as another distance spell like exori vis ... etc so I think it should work so maybe the error in the script ? or there is something that I should tick on the program that you forgot to tell me or what :/ I really need it .. I'm sry for bothering you
 
The xml which appears in the program doesnt work idk why it just make the word casting of the spell appears as a normal chatting word without any effect thats why I changed it , and I changed it to one almost the same as another distance spell like exori vis ... etc so I think it should work so maybe the error in the script ? or there is something that I should tick on the program that you forgot to tell me or what :/ I really need it .. I'm sry for bothering you

Did you restart the server? Many revisions have /reload spells not working properly. What revision do you use in first place?
 
I only restarted the server and this should load the spells after changing also

- - - Updated - - -

Another thing .. The spell also atks without target ... although I clicked on Targert req.
 
I only restarted the server and this should load the spells after changing also

- - - Updated - - -

Another thing .. The spell also atks without target ... although I clicked on Targert req.

Your XML is wrong, as I've said before. The one the program outputs should just be copy/pasted for it to work properly, if it doesn't work, paste the exact console errors (again?), tell me the revision you use and paste the XML you use.
 
Your XML is wrong, as I've said before. The one the program outputs should just be copy/pasted for it to work properly, if it doesn't work, paste the exact console errors (again?), tell me the revision you use and paste the XML you use.

I have just copied/pasted the XML which appeared in the program and when I run the server in the server window it says ERROR on the spell cant load the script no such file or directory and It doesnt cast any spell now any idea ?
 
I have just copied/pasted the XML which appeared in the program and when I run the server in the server window it says ERROR on the spell cant load the script no such file or directory and It doesnt cast any spell now any idea ?

The XML you've copy/pasted contains the part script="Blabla.lua", you probably have to edit that.
 
The XML you've copy/pasted contains the part script="Blabla.lua", you probably have to edit that.

Yes true it worked ! Thanks man :D Can I ask for something else ? Can I change the color of the number of damage which appears up of the player to any other color from the program ? without changing the used effect ? just number color
 
Yes true it worked ! Thanks man :D Can I ask for something else ? Can I change the color of the number of damage which appears up of the player to any other color from the program ? without changing the used effect ? just number color

Change the brush damage type to something else.
 
TGYoshi , Can you tell me How can I use the magic level formula to the damage I want ? I don't understand How it works Thank you . :)
 
TGYoghi can u make video to learn me how to use it sweety :D i will be glad if u make it
help me dude :x:wub::wub::rolleyes:^_^:w00t::thumbup::peace:
 
TGYoshi , Can you tell me How can I use the magic level formula to the damage I want ? I don't understand How it works Thank you . :)

I severely recommend you to use a custom damage formula, this is easier to understand.

A custom damage formula, for example, is this:

Minimum damage: 10 * maglevel + 5 * level + 500
Maximum damage: 20 * maglevel + 8 * level + 600

If you'd have 10 magic levels and you're level 10, this would cause the damage to be between: 100 + 50 + 500 = 650 (min) and 200 + 80 + 600 = 880 (max) damage. This scales with level and magic level.


TGYoghi can u make video to learn me how to use it sweety :D i will be glad if u make it
help me dude :x:wub::wub::rolleyes:^_^:w00t::thumbup::peace:

It's very straight forward, press "New brush" at the left-bottom of the screen to start, pick an Area Effect, create the brush and you're basically set for a very simple spell.
 
TGYoghi can u make video to learn me how to use it sweety :D i will be glad if u make it
help me dude :x:wub::wub::rolleyes:^_^:w00t::thumbup::peace:

You shouldnt need a vid tutorial.. its a very easy program to use and its very straightforward.
 
How do you change the target .spr and .dat files? I have it set on 8.61 and want it to be set to 9.6.

Clear the fileDat and fileSpr values in settings.ini so the program asks to select them next time to start, or just set the new paths correctly there.
 
Back
Top