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:
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):
A teraz ten sam czar tylko z innymi obra?aniami bo nie chcia?o mi si? przelicza? w moim systemie:
Deko kr?cej i przyjemniej wygl?da nieprawda?
Teraz kr?tko powiem jakie zmienne zamieszczamy w funkcji createCombat:
Kolejno:
Teraz animowane czary:
Od razu m?j system:
To 3 "klatkowy" animowany spell prostsze ni? wcze?niej nieprawda?
Wprowadzane zmienne do funkcji createAnimatedCombat:
Wzory na obra?enia:
Przyk?ad:
Wzory maj? form? zwyk?ego tekstu(w cudzys?owiach) co oznacza powy?szy przyk?ad nic prostszego ni?:
np masz 100 lvl i 10 mlvl przypuszczaj?c ?e ten wz?r dotyczy max obra?en to:
Taki b?dzie tw?j maksymalny hit.
Oczywi?cie do obliczania mo?esz u?ywa? wszystkich znak?w matematycznych:
To tyle mam nadzieje, ?e si? przyda,
Pozdrawiam,
Miziak
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?
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?
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
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