282 lines
7.5 KiB
Plaintext
282 lines
7.5 KiB
Plaintext
SkillHelperFunc = {}
|
||
|
||
--客戶端使用的各事件監聽列舉
|
||
local Base_PreConditionType={
|
||
AfterUseSkill = 1,
|
||
WearEquip = 2,
|
||
HpLessThan = 3,
|
||
MyselfState = 4,
|
||
Partner = 5,
|
||
Buff = 6,
|
||
--檢測學習了某個技能,不需要註冊監聽事件
|
||
LearnedSkill = 7,
|
||
BeingState = 8,
|
||
EquipTakeOff = 9,
|
||
EquipBreak = 10,
|
||
}
|
||
|
||
--前置條件Protype列舉
|
||
local SKILL_ABACHECK = 1
|
||
local SKILL_ARCH = 2
|
||
local SKILL_Lianhuan = 3
|
||
local SKILL_HUPAO = 4
|
||
local SKILL_Machine = 5
|
||
local SKILL_WOLF = 6
|
||
local SKILL_POISON = 7
|
||
local SKILL_SOLO = 8
|
||
local SKILL_ENSEMBLE = 9
|
||
|
||
--前置條件Protype 所牽涉到的基礎事件列舉陣列
|
||
local Pro_PreCondtionType = {
|
||
--Aba
|
||
[SKILL_ABACHECK] = {baseTypes = {6}},
|
||
[SKILL_ARCH] = {baseTypes = {6}},
|
||
[SKILL_Lianhuan]= {baseTypes = {6}},
|
||
[SKILL_HUPAO] = {baseTypes = {6}},
|
||
[SKILL_Machine] = {baseTypes = {6}},
|
||
[SKILL_WOLF] = {baseTypes = {5,6}},
|
||
[SKILL_POISON] = {baseTypes = {6}},
|
||
[SKILL_SOLO] = {baseTypes = {2,6}},
|
||
[SKILL_ENSEMBLE] = {baseTypes = {2,6}},
|
||
}
|
||
|
||
--客戶端通過Protype獲取需要監聽的事件列舉
|
||
function SkillHelperFunc.GetProRelateCheckTypes(proType)
|
||
local config = Pro_PreCondtionType[proType]
|
||
if(config) then
|
||
return config.baseTypes
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--前後端通過protype和傳入srcuser,檢測是否滿足protype釋放條件
|
||
function SkillHelperFunc.CheckPrecondtionByProType(proType,srcuser,skillid)
|
||
if(proType~=nil and srcuser~=nil) then
|
||
local func = Pro_PreCondtionType[proType].Func
|
||
if(func) then
|
||
return func(srcuser,skillid)
|
||
else
|
||
error(string.format("我,申林,素質差,沒配%s這個型別的檢查函式",proType))
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- start 具體檢測前置條件的判斷函式體們
|
||
function SkillHelperFunc.AbaPreCheck(srcuser)
|
||
--1.判斷 暴氣狀態
|
||
if(not srcuser:HasBuffID(100510)) then
|
||
return false
|
||
end
|
||
--2. 有沒有蓄氣
|
||
local powerLayer = srcuser:GetBuffLayer(100500)
|
||
if(powerLayer==0) then
|
||
return false
|
||
end
|
||
|
||
--3 獲取蓄氣數量num
|
||
|
||
--4.1 有沒有1個蓄氣
|
||
if(powerLayer>=1) then
|
||
--4.1.1 氣絕buff
|
||
if(srcuser:HasBuffID(100700)) then
|
||
return true
|
||
end
|
||
--4.2 有沒有3個蓄氣
|
||
if(powerLayer>=3)then
|
||
--4.2.1 伏虎buff
|
||
if(srcuser:HasBuffID(100631)) then
|
||
return true
|
||
end
|
||
--4.2 有沒有4個蓄氣
|
||
if(powerLayer>=4)then
|
||
--4.2.1 猛龍buff
|
||
--4.2.2 真劍buff
|
||
if(srcuser:HasBuffID(100620) or srcuser:HasBuffID(100685)) then
|
||
return true
|
||
end
|
||
--4.3 有沒有5個蓄氣
|
||
if(powerLayer>=5)then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
--------------------------------------------------------------弓身彈影
|
||
function SkillHelperFunc.ARCH(srcuser)
|
||
if srcuser:HasBuffID(100510) or srcuser:HasBuffID(100500) then -------------爆氣狀態或有氣彈可施放
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
--------------------------------------------------------------連環全身
|
||
function SkillHelperFunc.Lianhuan(srcuser)
|
||
if srcuser:HasBuffID(100685) or srcuser:HasBuffID(100600) then -------------真劍狀態或承接六合拳可施放
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
---------------------------------------------------------------虎炮
|
||
function SkillHelperFunc.HUPAO(srcuser)
|
||
local powerLayer = srcuser:GetBuffLayer(100500)
|
||
if srcuser:HasBuffID(100510) and powerLayer>=2 then -------------爆氣狀態或有氣彈可施放
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
---------------------------------------------------------------操作魔導機械
|
||
function SkillHelperFunc.Machine(srcuser)
|
||
|
||
if srcuser:HasBuffID(117850) or srcuser:HasBuffID(117855) then -------------魔導機械
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
---------------------------------------------------------------攜帶 狼
|
||
function SkillHelperFunc.WOLF(srcuser)
|
||
|
||
if (srcuser:IsPartner(5049) or srcuser:IsPartner(5090) or srcuser:IsPartner(6657)) or srcuser:HasBuffID(117460) then -------------攜帶 狼
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
---------------------------------------------------------------劇毒武器狀態下
|
||
function SkillHelperFunc.POISON(srcuser)
|
||
|
||
if srcuser:HasBuffID(116015) then -------------劇毒武器狀態下
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
---------------------------------------------------------------合奏Buff下無法使用獨奏
|
||
function SkillHelperFunc.SOLO(srcuser)
|
||
|
||
if srcuser:HasBuffID(119301) or (srcuser:GetEquipedWeaponType()~=260 and srcuser:GetEquipedWeaponType()~=270) then -------------合奏buff
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
---------------------------------------------------------------合奏使用條件
|
||
function SkillHelperFunc.ENSEMBLE(srcuser,skillid)
|
||
|
||
if (srcuser:GetEquipedWeaponType()~=260 and srcuser:GetEquipedWeaponType()~=270) then -------------合奏buff
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
-- end 具體檢測前置條件的判斷函式體們
|
||
-------------------------------------------------弓身彈影
|
||
|
||
--Protype 對應的檢測函式
|
||
Pro_PreCondtionType[SKILL_ABACHECK].Func = SkillHelperFunc.AbaPreCheck
|
||
Pro_PreCondtionType[SKILL_ARCH].Func = SkillHelperFunc.ARCH
|
||
Pro_PreCondtionType[SKILL_Lianhuan].Func = SkillHelperFunc.Lianhuan
|
||
Pro_PreCondtionType[SKILL_HUPAO].Func = SkillHelperFunc.HUPAO
|
||
Pro_PreCondtionType[SKILL_Machine].Func = SkillHelperFunc.Machine
|
||
Pro_PreCondtionType[SKILL_WOLF].Func = SkillHelperFunc.WOLF
|
||
Pro_PreCondtionType[SKILL_POISON].Func = SkillHelperFunc.POISON
|
||
Pro_PreCondtionType[SKILL_SOLO].Func = SkillHelperFunc.SOLO
|
||
Pro_PreCondtionType[SKILL_ENSEMBLE].Func = SkillHelperFunc.ENSEMBLE
|
||
-- *******************************************************************
|
||
-- *******************************************************************
|
||
-- *******************************************************************
|
||
-- 服務度使用, 技能動態消耗
|
||
|
||
function SkillHelperFunc.DoDynamicCost(costtype, srcUser, skillid)
|
||
local func = SkillHelperFunc.DynamicCostFunc[costtype]
|
||
if func == nil then
|
||
return
|
||
end
|
||
|
||
func(srcUser)
|
||
end
|
||
|
||
function SkillHelperFunc.DoDynamicCost_Aba(srcUser, skillid)
|
||
--1.判斷 暴氣狀態
|
||
if(not srcUser:HasBuffID(100510)) then
|
||
return false
|
||
end
|
||
--2. 有沒有蓄氣
|
||
local powerLayer = srcUser:GetBuffLayer(100500)
|
||
if(powerLayer==0) then
|
||
return false
|
||
end
|
||
|
||
--3 獲取蓄氣數量num
|
||
|
||
--4.1 有沒有1個蓄氣
|
||
if(powerLayer>=1) then
|
||
--4.1.1 氣絕buff
|
||
if(srcUser:HasBuffID(100700)) then
|
||
srcUser:DelSkillBuff(100500,1)
|
||
return true
|
||
end
|
||
--4.2 有沒有3個蓄氣
|
||
if(powerLayer>=3)then
|
||
--4.2.1 伏虎buff
|
||
if(srcUser:HasBuffID(100631)) then
|
||
srcUser:DelSkillBuff(100500,3)
|
||
return true
|
||
end
|
||
--4.2 有沒有4個蓄氣
|
||
if(powerLayer>=4)then
|
||
--4.2.1 猛龍buff
|
||
--4.2.2 真劍buff
|
||
if(srcUser:HasBuffID(100620) or srcUser:HasBuffID(100685)) then
|
||
srcUser:DelSkillBuff(100500,4)
|
||
return true
|
||
end
|
||
--4.3 有沒有5個蓄氣
|
||
if(powerLayer>=5)then
|
||
srcUser:DelSkillBuff(100500,5)
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- 弓身彈影 消耗
|
||
function SkillHelperFunc.DoDynamicCost_Arch(srcUser, skillid)
|
||
if srcUser == nil then
|
||
return
|
||
end
|
||
|
||
local inBomb = srcUser:HasBuffID(100510)
|
||
if inBomb ==true then
|
||
return
|
||
end
|
||
|
||
srcUser:DelSkillBuff(100500,1)
|
||
end
|
||
|
||
-- 連環全身掌 消耗
|
||
function SkillHelperFunc.DoDynamicCost_Lianhuan(srcUser, skillid)
|
||
if srcUser == nil then
|
||
return
|
||
end
|
||
if srcUser:HasBuffID(100685) then
|
||
return
|
||
elseif srcUser:HasBuffID(100600) then
|
||
srcUser:DelSkillBuff(100600,1)
|
||
return
|
||
end
|
||
end
|
||
|
||
|
||
-- NOTICE: 必須放在子函式實現後面!!!
|
||
SkillHelperFunc.DynamicCostFunc = {
|
||
[1] = SkillHelperFunc.DoDynamicCost_Aba,
|
||
[2] = SkillHelperFunc.DoDynamicCost_Arch, -- 弓身彈影
|
||
[3] = SkillHelperFunc.DoDynamicCost_Lianhuan -- 連環全身掌
|
||
}
|
||
|