What's new

Lua Functions Maksymalnie uproszczony spell system

Status
Not open for further replies.

Miziak

Advanced User
Joined
Sep 16, 2008
Messages
175
Reaction score
27
Witam,

Dzi? z nud?w napisa?em sobie taki `lib`(bibliotek? funkcji) do tfs maksymalnie upraszczaj?c? pisanie czar?w zaczynamy:

Do data/lib/050-function.lua lub w starszych silnikach do data/global.lua lub data/functions.lua wklejamy:
Code:
function createCombat(typea, effect, distEffect, area, mins, maxs)
	local combat = createCombatObject()
	setCombatParam(combat, COMBAT_PARAM_TYPE, typea)
	setCombatParam(combat, COMBAT_PARAM_EFFECT, effect)
	if(distEffect)then
		setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, distEffect)
	end
	if(type(mins) == "string" and type(maxs) == "string")then
		function getSpellDamage(cid, skill, att, attackStrength)
			local lvl, mlvl, minss, maxss = getPlayerLevel(cid), getPlayerMagLevel(cid), "", ""
			minss = "return " .. mins
			minss = minss:gsub("lvl", lvl)
			minss = minss:gsub("mlvl", mlvl)
			maxss = "return " .. maxs
			maxss = maxss:gsub("lvl", lvl)
			maxss = maxss:gsub("mlvl", mlvl)
			local min = -math.ceil(loadstring(minss)())
			local max = -math.ceil(loadstring(maxss)())
					
			return min, max
		end
		setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "getSpellDamage")
	end
	if(type(area) == "table")then
		local areaa = createCombatArea(area)
		setCombatArea(combat, areaa)
	end
	return combat
end

function createAnimatedCombat(visableTbl, areaTbl, attacksTbl)
	local combatsTbl = {}
	if(#visableTbl == #areaTbl and #visableTbl == #attacksTbl)then
		for i,_ in pairs(visableTbl) do
			local combat = createCombat(visableTbl[i][1], visableTbl[i][2], visableTbl[i][3], areaTbl[i], attacksTbl[i][1], attacksTbl[i][2])
			table.insert(combatsTbl, combat)
		end
	end
	return combatsTbl
end

function executeAnimatedCombat(cid, var, combat, delay)
	if(#combat == 0)then
		return false
	else
		for i,_ in pairs(combat) do
			if(i == 1)then
				addEvent(function() doCombat(cid, combat[i], var) end, i, nil)
			else
				addEvent(function() doCombat(cid, combat[i], var) end, (i-1)*(delay*1000), nil)
			end
		end
		return true
	end
return false
end

Teraz obja?ni? jak tego u?ywa?:
Czary zwyk?e - te sk?adaj?ce si? z jednego uderzenia:
Przyk?ad w starym systemie Popularne "UE"(rage of the skies):
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 5, 12)

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

function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

A teraz ten sam czar tylko z innymi obra?aniami bo nie chcia?o mi si? przelicza? w moim systemie:
Code:
local combat = createCombat(COMBAT_ENERGYDAMAGE, CONST_ME_BIGCLOUDS, false, AREA_CROSS6X6, "lvl*10", "lvl*100")

function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

Deko kr?cej i przyjemniej wygl?da nieprawda? :D
Teraz kr?tko powiem jakie zmienne zamieszczamy w funkcji createCombat:
Kolejno:
Code:
createCombat(typ obra?e?,
efekt magiczny ma mapie,
efekt strza?u tj np w expri je?li nadamy mu cel je?li nie ma piszemy false,
obszar,
minimalne obra?enia,
maksymalne obra?enia)

Teraz animowane czary:
Od razu m?j system:
Code:
local arr = {
{0, 1, 0},
{1, 3, 1},
{0, 1, 0}
}

local arr1 = {
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}

local arr2 = {
{1, 0, 1, 0, 1},
{0, 1, 1, 1, 0},
{1, 1, 3, 1, 1},
{0, 1, 1, 1, 0},
{1, 0, 1, 0, 1}
}

local v = {{COMBAT_EARTHDAMAGE, CONST_ME_PLANTATTACK}, {COMBAT_EARTHDAMAGE, CONST_ME_PLANTATTACK}, {COMBAT_EARTHDAMAGE, CONST_ME_PLANTATTACK}}
local a = {{"lvl*10", "lvl*100"}, {"lvl*10", "lvl*100"}, {"lvl*10", "lvl*100"}}
local combat = createAnimatedCombat(v, {arr, arr1, arr2}, a)

function onCastSpell(cid, var)
	return executeAnimatedCombat(cid, var, combat, 1--[[op??nienie w sekundach]])
end

To 3 "klatkowy" animowany spell prostsze ni? wcze?niej nieprawda? :D
Wprowadzane zmienne do funkcji createAnimatedCombat:
Code:
createAnimatedCombat(tabela zawieraj?ca pod tabele z rodzajem ataku efektem magicznymi i efektem lotu,
tablica z obszarami,
tablica z pod tablicami w kt?rych znajduj? si? wzory na max i min obra?enia dla ka?dej "klatki")

Wzory na obra?enia:
Przyk?ad:
Code:
"lvl*100/mlvl"

Wzory maj? form? zwyk?ego tekstu(w cudzys?owiach) co oznacza powy?szy przyk?ad nic prostszego ni?:
tw?j level * 100 / na tw?j level magiczny

np masz 100 lvl i 10 mlvl przypuszczaj?c ?e ten wz?r dotyczy max obra?en to:
Code:
100*100/10 = 1000
Taki b?dzie tw?j maksymalny hit.

Oczywi?cie do obliczania mo?esz u?ywa? wszystkich znak?w matematycznych:
+ - dodawanie
- - odejmowanie
* - mno?enie
/ - dzielenie
% - dzielenie z reszt?
^ - pot?gowanie

To tyle mam nadzieje, ?e si? przyda,
Pozdrawiam,
Miziak ;)
 

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
Odp: Maksymalnie uproszczony spell system

Funkcja ?wietna. Nie sprawdza?em dog??bnie kodu, ale wierz? Ci na s?owo, ?e dzia?a jak nale?y. Ja osobi?cie nie robi? czar?w kilku efektowych, ale takim trollom na evo serwery jak najbardziej si? ?w funkcja przyda.
Wyt?umaczone dok?adnie, opisane maksymalnie zrozumiale. Czekam na wi?cej takich funkcji, ale niech nast?pne przydadz? si? tak?e i mnie ^^
 

Ulfur

Senior User
Joined
Aug 20, 2010
Messages
782
Reaction score
106
Age
30
Odp: Maksymalnie uproszczony spell system

tw?j level * 100 / na tw?j level magiczny

Wychodzi na to, ?e im wi?kszy mlvl tym mniejsze obra?enia? Bo przecie? im wi?kszy dzielnik tym wynik jest mniejszy.

Co do samego systemu. Jest ?wietny, mo?liwe nawet, ?e sam go wypr?buj?. Proste dzia?ania matematyczne i to jest to :)
 

Sassin

Forum friend
Joined
Jun 13, 2009
Messages
1,281
Reaction score
107
Odp: Maksymalnie uproszczony spell system

A mnie ciekawi jak zachowa si? silnik w przypadku gdy kto? wbije 120~mlvl (przyk?ad, ale chodzi mi o +100) i przypuszczalnie b?dzie mia? haka, albo b?dzie mu si? nudzi? i zbije si? do lvl'a pierwszego, a b?dzie jaki? czar bez ogranicze? lvl'owich... outsect, temat kt?ry poruszy?e? te? powinien trafi? w centrum uwagi.
 

Miziak

Advanced User
Joined
Sep 16, 2008
Messages
175
Reaction score
27
Odp: Maksymalnie uproszczony spell system

@outsect
To tylko g?upi przyk?ad Ty sobie mo?esz tam wpisa? co ci si? ?ywnie podoba,to ty ustalasz wz?r w kt?ry za lvl jest podstawiany tw?j aktualny level i za mlvl tw?j level magiczny wzory mog? by? r?wnie dobrze r?wne "0" wtedy czar nie zada obra?e?...

@Sassin
Kompletnie nie rozumiem o co Ci chodzi wyt?umacz ja?niej chetnie wtedy powiem jak zachowa si? skrypt.
 

jeztPolak

Active User
Joined
Oct 11, 2010
Messages
132
Reaction score
18
Odp: Maksymalnie uproszczony spell system

Mi te? si? podoba, ale to czasem ju? nie czas na przerzucenia si? na klasy, obiekty i ten ca?y magiczny ?wiat? Skrypt na pewno dzia?a dobrze, widz?c po wy?szych komentarzach i na pewno u?atwia pisanie to skrypt?w. Ode mnie masz reputa, kt?ry ci si? na pewno nale?y.​
 

Hitsugaya

Active User
Joined
Apr 4, 2008
Messages
114
Reaction score
3
Odp: Maksymalnie uproszczony spell system

A je?li chc? u?y? w funckji min i max obra?e? mam u?y? "skill, ID skilla" czy jak ?

Pozdrawiam
 

Honly

Active User
Joined
Oct 28, 2010
Messages
146
Reaction score
2
Odp: Maksymalnie uproszczony spell system

@UP Z tego co zrozumia?em z twojego postu to to czy mo?na tam u?ywa? skilli, skillid?
Z tego co wyczyta?em to nie (mog? si? myli?) bo
Code:
local lvl, mlvl, minss, maxss = getPlayerLevel(cid), getPlayerMagLevel(cid), "", ""
Zawiera lvl, mlvl a nie skille :) Musia?by? chyba doda?...
 

Yondaime

Advanced User
Joined
Apr 5, 2008
Messages
311
Reaction score
21
Odp: Maksymalnie uproszczony spell system

mam pytanie jak dodac czar z kilkoma atakami kt?ry atakuje jak exori vis ?e na przyk?ad 3 razy w cel leci?
A co do skryptu to na prawd? ?wietny!
Nawet ja ten.kt?ry nie ma zielonego poj?cia o robieniu czar?w dobrze sobie z nimi teraz radzi xD
 

Faza

New User
Joined
Apr 20, 2008
Messages
5
Reaction score
0
Odp: Maksymalnie uproszczony spell system

mam pytanie jak dodac czar z kilkoma atakami kt?ry atakuje jak exori vis ?e na przyk?ad 3 razy w cel leci?
A co do skryptu to na prawd? ?wietny!
Nawet ja ten.kt?ry nie ma zielonego poj?cia o robieniu czar?w dobrze sobie z nimi teraz radzi xD
W spells dodajesz pod nazwa exori visx3
Code:
local arr = {
{0, 0, 0},
{0, 3, 0},
{0, 0, 0}
}
local arr1 = {
{0, 0, 0},
{0, 3, 0},
{0, 0, 0}
}
local arr2 = {
{0, 0, 0},
{0, 3, 0},
{0, 0, 0}
}
local v = {{COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA}, {COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA}, {COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA}}
local a = {{"lvl*10", "lvl*30"}, {"lvl*10", "lvl*30"}, {"lvl*10", "lvl*30"}}
local combat = createAnimatedCombat(v, {arr, arr1, arr2}, a)
function onCastSpell(cid, var)
	return executeAnimatedCombat(cid, var, combat, 1)
end
a w spells.xml
Code:
<instant name="Energy Strikex3" words="exori vis max" lvl="36" mana="60" prem="1" range="3" [COLOR="Red"]casterTargetOrDirection="1"[/COLOR] blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="exori visx3.lua">
		<vocation id="1"/>
		<vocation id="2"/>
		<vocation id="5"/>
		<vocation id="6"/>
	</instant>
Dalej powiniene? wiedzie? jak to przekszta?ci? na w?asny u?ytek.
 

felek06

Advanced User
Joined
Aug 9, 2008
Messages
464
Reaction score
41
Odp: Maksymalnie uproszczony spell system

Mam male pytanie jak w takim systemie napisac czary leczace??
 

login989

Active User
Joined
Dec 4, 2010
Messages
120
Reaction score
2
Odp: Maksymalnie uproszczony spell system

Ca?kiem fajny skrpcik powiem ci ze na pozomie zaawansowanym ten skrypt jest 9/10.
 

DanJ93

ElfBot Helper
Joined
Jan 18, 2009
Messages
2,631
Reaction score
200
Odp: Maksymalnie uproszczony spell system

Dzi?ki wielkie :)
Teraz du?o lepiej mi si? b?dzie robi? animowane czary
 
Status
Not open for further replies.
Top