Доброго времени суток, уважаемые форумчане!
Собственно сабж, имеется скилл "Луч Ксерея", вот его функция из skilleffect.lua
Код старался максимально закоментить
function SkillArea_Line_Ks_Ray ( sklv ) --"Kcerays ray"
local lenth = 500 + sklv * 30 --length (more)
local width = 100 + sklv * 10 --width (a bit more)
SetSkillRange ( 1 , lenth , width )
end
function SkillCooldown_Ks_Ray( sklv )
local Cooldown = 45000 --cd 45sec
return Cooldown
end
function SkillSp_Ks_Ray ( sklv )
local sp_reduce = 150+ sklv * 15 --10lvl req 300sp
return sp_reduce
end
function SkillEnergy_Ks_Ray ( sklv )
local energy_reduce = math.floor ( 30 + sklv * 3 ) --corall eng req, rand*(60) at 10lvl
return energy_reduce
end
function Skill_Ks_Ray_Begin ( role , sklv )
local sp = Sp(role)
local sp_reduce = SkillSp_Ks_Ray ( sklv )
if sp - sp_reduce < 0 then
SkillUnable(role)
return
end
Sp_Red (role , sp_reduce )
end
function Skill_Ks_Ray_End ( ATKER , DEFER , sklv )
local sta_atk= Sta ( ATKER )
local sta_def = Sta ( DEFER )
local AddStateLv = 0
AddStateLv = GetChaStateLv ( ATKER , STATE_MLCH )
local dmg = math.floor( 200 + sklv*3 +sta_atk*2 ) --dmg
--local map_name_DEFER = GetChaMapName ( DEFER ) возможно допилю интересные проверки, но лень
--local agi_atker = Agi(ATKER)
--local Can_Pk_Garner2 = Is_NormalMonster (DEFER)
local statelv = sklv
local statetime = 10
AddState ( ATKER , DEFER , STATE_ZD , statelv , statetime ) -- эффект ядовитого дротика, просто для примера
local hpdmg = 100 + statelv * 5 -- переменная, в которой лежит наносимый урон
AddState ( ATKER , DEFER , STATE_GJJZ , statelv , statetime ) -- тут добавляется эффект как у skill_ayzz, собственно росчерк тени
local dmg_fin = hpdmg -- просто потому что я захотел много переменных и это дебаг версия :)))
Hp_Endure_Dmg ( DEFER , dmg_fin ) -- здесь, как я понимаю, вызывается функция Hp_Endure_Dmg
AddState ( ATKER , DEFER , STATE_PJ , statelv , statetime ) --добавляется эффект как у скила бронелом
end
function State_Ks_Ray_Add ( role , statelv )
local defsa_dif = (-1) * ( 10 + 20 * statelv ) -- здесь величина отнимаемого дефа
local defsa = math.floor ( (DefSa(role) + defsa_dif ) * ATTR_RADIX ) -- собственно переменная с будущим дефом
SetCharaAttr( defsa , role , ATTR_STATEC_DEF )
ALLExAttrSet(role)
Check_Ys_Rem ( ATKER , DEFER )
local hpdmg = 100 + statelv * 5 -- по аналогии делал с печатями
ALLExAttrSet(role)
RefreshCha(role)
end
function State_Ks_Ray_Rem ( role , statelv ) -- возврат исходных значений дефа
local defsa_dif = (-1) * ( 10 + 20 * statelv )
local defsa = math.floor ( (DefSa(role) - defsa_dif ) * ATTR_RADIX )
SetCharaAttr( defsa , role , ATTR_STATEC_DEF )
ALLExAttrSet(role)
end
Он должен наносить урон активный, отнимать деф, наносить урон пассивный.
Вопрос вот в чем - деф отнимает, но точно так же как и навык бронелом. Мои предположения - это как-то связано с AddState, но я к сожалению не знаю как. То же самое и с уроном, наносится урон как у дротика. Визуально все эффекты добавляются.
Про AddState - STATE_PJ, STATE_GJJZ - это, как я понимаю, из массива variable.lua и просто добавляют визуальный эффект.
Очень хотелось бы, чтобы кто-нибудь помог разобраться как адекватно добавлять нужные эффекты к скилам, а не методом научного тыка