require("game.skill.SkillVo")
|
|
|
|
SkillManager = SkillManager or BaseClass(BaseVo, true)
|
|
local SkillManager = SkillManager
|
|
SkillManager.REQUEST_CCMD_EVENT = "SkillManager.REQUEST_CCMD_EVENT"
|
|
SkillManager.UPDATE_SKILL_LIST = "UPDATE_SKILL_LIST"
|
|
SkillManager.RESET_SKILL_LIST = "RESET_SKILL_LIST"
|
|
SkillManager.START_SKILL_CD = "START_SKILL_CD"
|
|
SkillManager.FORCE_RELEASE_BASE_SKILL = "FORCE_RELEASE_BASE_SKILL"
|
|
SkillManager.FORCE_STOP_BASE_SKILL = "FORCE_STOP_BASE_SKILL"
|
|
SkillManager.SHORT_CUT_SKILL_ACTIVE = "SHORT_CUT_SKILL_ACTIVE"
|
|
SkillManager.SHORT_CUT_SKILL_ACTIVE_IN_STORY = "SHORT_CUT_SKILL_ACTIVE_IN_STORY"
|
|
SkillManager.SHORT_CUT_SKILL_ACTIVE_BY_INDEX = "SHORT_CUT_SKILL_ACTIVE_BY_INDEX"
|
|
SkillManager.SHOW_USE_SKILL_TIP = "SHOW_USE_SKILL_TIP"
|
|
SkillManager.LOCK_CD = "LOCK_CD"
|
|
SkillManager.REFRESH_CD = "SkillManager.REFRESH_CD"
|
|
SkillManager.CHANGE_GOD_GUIDE = "SkillManager.CHANGE_GOD_GUIDE"
|
|
SkillManager.HIT_SKILL_GUIDE = "SkillManager.HIT_SKILL_GUIDE"
|
|
SkillManager.SET_SKILL_GRAY_STATE = "SkillManager.SET_SKILL_GRAY_STATE"
|
|
SkillManager.SKILL_LEVEL_UP = "SkillManager.SKILL_LEVEL_UP" --技能升级
|
|
|
|
|
|
SkillManager.ThreeAttackSkills =
|
|
{
|
|
--key:职业@性别
|
|
["1@1"] = {101001,101002,101003,101004},
|
|
["2@2"] = {102001,102002,102003,102004},
|
|
["3@1"] = {103001,103002,103003,103004},
|
|
["4@2"] = {104001,104002,104003,104004},
|
|
}
|
|
|
|
--怒气技能id
|
|
SkillManager.AngerSkill =
|
|
{
|
|
["1@1"] = 101091,
|
|
["2@2"] = 102091,
|
|
["3@1"] = 103091,
|
|
["4@2"] = 104091,
|
|
}
|
|
|
|
SkillManager.GodThreeAttackSkills =
|
|
{
|
|
|
|
}
|
|
|
|
SkillManager.ThreeAttackSkillInfo =
|
|
{
|
|
--职业普攻
|
|
[101001] = 4, [101002] = 4, [101003] = 4, [101004] = 4,
|
|
[102001] = 4, [102002] = 4, [102003] = 4, [102004] = 4,
|
|
[103001] = 4, [103002] = 4, [103003] = 4, [103004] = 4,
|
|
[104001] = 4, [104002] = 4, [104003] = 4, [104004] = 4,
|
|
}
|
|
|
|
|
|
--被动技能显示类型 (暂时只支持2个)
|
|
-- 1 表示 PVE
|
|
-- 2 表示 PVP
|
|
-- 3 表示 单体
|
|
-- 4 表示 群攻
|
|
SkillManager.PassivesSkillTypeList =
|
|
{
|
|
[20000] = {1,3,},
|
|
[20001] = {2,4,},
|
|
}
|
|
|
|
SkillManager.MonsterBaseSkill_1 = 1110000001
|
|
SkillManager.MonsterBaseSkill_2 = 1110000003
|
|
|
|
SkillManager.SkillCacheTime = 1.5 --技能缓存时间
|
|
|
|
|
|
--技能攻击类型 1只发起攻击(默认) 2只显示技能范围ui 3.两者都有
|
|
SkillManager.SKILL_ATTACK_TYPE = {
|
|
ONLY_FIRE_ATTACK = 1,
|
|
ONLY_SHOW_RANGE = 2,
|
|
ATTACK_AND_RANGE = 3,
|
|
}
|
|
|
|
SkillManager.JUMP_SKILL_ID = 10001 --跳跃技能
|
|
SkillManager.GodSkillId = 1234578 --变身降神的技能id
|
|
|
|
-- SkillManager.BabyDunMainRoleBaseSkill = 502001 -- 宝宝副本主角普攻技能
|
|
SkillManager.BabyDunMainRoleBaseSkill = 502002 -- 宝宝副本主角普攻技能
|
|
|
|
function SkillManager:__init()
|
|
SkillManager.Instance=self
|
|
self:ResetData()
|
|
end
|
|
|
|
function SkillManager:__delete()
|
|
|
|
end
|
|
|
|
function SkillManager:ResetData()
|
|
self.currentSkillId = 0 --点击技能栏选择的技能
|
|
self.currentSkillVo = nil --当前技能VO
|
|
self.currentAttackRange = 0 --根据当前技能和角色角色,取到的当前攻击距离
|
|
self.curSelectSkillId = 0 --技能面板的选中的技能id
|
|
|
|
self.mySkillList = {} --我的技能表
|
|
self.shortcutList = {} --快捷栏列表 出战的职业技能列表
|
|
self.dailyLightSkill = {} --幻光技能
|
|
self.skillUseList = {} --快捷栏类表 技能id为Key
|
|
self.replaceSkillList = {} --一些特殊效果发过来的替换当前技能的
|
|
self.replaceNewSkillList = {} --一些特殊效果发过来的替换当前技能的
|
|
self.has_replace_skill_del = false --是否有替换的删除
|
|
|
|
|
|
self.cur_shortcut_plan = 1
|
|
|
|
self.skill_Rigidity = nil --施法僵直结束的时候(注意和技能CD不一样,是说必须等到该时间点之后,才能尝试释放下个技能)
|
|
|
|
--主角技能用到的特效列表
|
|
self.particle_list = {}
|
|
|
|
self.three_attack_index = 1 --三段攻击的当前序号
|
|
-- self.cached_skills = {} --缓存的技能列表
|
|
self.cached_skill_id = nil --缓存的技能id
|
|
|
|
self.otherSkillList = {} --所有技能(除了主角的技能表)
|
|
|
|
--主技能最近一次释放的时间列表
|
|
self.release_main_skill_time_list = {}
|
|
--被动技能cd列表
|
|
self.release_passive_skill_time_list = {}
|
|
|
|
self.cd_skill_list = {}
|
|
|
|
self.shortcut_gray_flag = 0
|
|
|
|
self.start_time = 0
|
|
self.server_time = 0
|
|
self.every_dot_time = 0
|
|
self.max_dot = 0
|
|
self.switch_cd = 0 --降神主界面图标信息
|
|
|
|
self.curr_god_dot = 0 --当前的降神点数
|
|
self.curr_god_state = -1 --当前降神的出战状态 -1无 0未开启 1已开启未出战 2已出战未变身 3变身中
|
|
|
|
self.can_use_hit_skill = true --是否可以使用羁绊技能
|
|
|
|
self.scene_mgr = SceneManager:getInstance()
|
|
|
|
self.hide_black_views_list = {} --隐藏技能的黑色遮罩
|
|
|
|
self.skill_back_swing_list = {} --技能后摇列表
|
|
|
|
self.multi_skill_list = {} --多段伤害技能列表
|
|
|
|
--新手期特殊表现技能id
|
|
self.guide_skill_list = {
|
|
--key:职业@性别
|
|
["1@1"] = {
|
|
show_list = {101011,101031,101003,101061},
|
|
real_list = {101001,101002,101003,101004},
|
|
},
|
|
["2@2"] = {
|
|
show_list = {102011,102031,102003,102061},
|
|
real_list = {102001,102002,102003,102004},
|
|
},
|
|
["3@1"] = {
|
|
show_list = {103061,103011,103003,103004},
|
|
real_list = {103001,103002,103003,103004},
|
|
},
|
|
["4@2"] = {
|
|
show_list = {104061,104011,104003,104004},
|
|
real_list = {104001,104002,104003,104004},
|
|
},
|
|
}
|
|
self.cur_guide_skill_index = 1
|
|
end
|
|
|
|
function SkillManager:ClearData()
|
|
self:ResetData()
|
|
end
|
|
|
|
function SkillManager:AddReleaseMainSkill(skill_id)
|
|
if not self:IsThreeAttackSkill(skill_id) then
|
|
self.release_main_skill_time_list[skill_id] = Status.NowTime
|
|
end
|
|
end
|
|
|
|
function SkillManager:GetReleaseMainSkill(skill_id)
|
|
return self.release_main_skill_time_list[skill_id]
|
|
end
|
|
|
|
function SkillManager:AddReleasePassiveSkill(skill_id, last_trigger_time)
|
|
self.release_passive_skill_time_list[skill_id] = last_trigger_time
|
|
end
|
|
|
|
function SkillManager:GetReleasePassiveSkill(skill_id)
|
|
return self.release_passive_skill_time_list[skill_id] or 0
|
|
end
|
|
|
|
function SkillManager:AddCDItem(skill_id,item)
|
|
self.cd_skill_list[skill_id] = item
|
|
end
|
|
|
|
function SkillManager:RemoveCdItem(skill_id)
|
|
self.cd_skill_list[skill_id] = nil
|
|
end
|
|
|
|
function SkillManager:Update(now_time, elapsed_time)
|
|
if self.three_attack_index ~= 1 and self.skill_Rigidity and now_time - self.skill_Rigidity > 3 then
|
|
-- Message.show("Update重置重置")
|
|
SkillManager.ResetThreeAttackIndex(self)
|
|
SkillManager.ClearCachedSkill(self)
|
|
end
|
|
|
|
if self.cache_skill_time and now_time - self.cache_skill_time > self.cache_secs then --缓存的技能超过一定时间就会清空
|
|
self.cache_skill_time = false
|
|
SkillManager.ClearCachedSkill(self)
|
|
end
|
|
|
|
-- if TableSize(self.replaceSkillList) > 0 then
|
|
-- self.has_replace_skill_del = false
|
|
-- for index,info in pairs(self.replaceSkillList) do
|
|
-- if TimeUtil:getServerTimeMs( ) - info.end_time >= 0 then
|
|
-- self.replaceSkillList[info.skill_id] = nil
|
|
-- self.replaceNewSkillList[info.new_skill_id] = nil
|
|
-- self.has_replace_skill_del = true
|
|
-- end
|
|
-- end
|
|
-- if self.has_replace_skill_del then
|
|
-- self:Fire(SkillManager.UPDATE_SKILL_LIST)
|
|
-- end
|
|
-- end
|
|
end
|
|
|
|
function SkillManager:ResetThreeAttackIndex(bool)
|
|
-- if bool then
|
|
self.three_attack_index = 1
|
|
-- end
|
|
end
|
|
|
|
function SkillManager:getThreeAttackIndex()
|
|
return self.three_attack_index
|
|
end
|
|
--角色的基本技能
|
|
function SkillManager:IsThreeAttackSkill(id)
|
|
return SkillManager.ThreeAttackSkillInfo[id]
|
|
end
|
|
|
|
|
|
--怪物的基本技能
|
|
function SkillManager:IsMonsterBaseSkill(id)
|
|
return SkillManager.MonsterBaseSkill_1 == id or SkillManager.MonsterBaseSkill_2 == id
|
|
end
|
|
|
|
|
|
--得到基础技能id
|
|
function SkillManager:getBaseSkill(career,index)
|
|
career = career or RoleManager.Instance.mainRoleInfo.career
|
|
index = index or self.three_attack_index
|
|
local sex = RoleManager.Instance.mainRoleInfo.sex
|
|
local turn = RoleManager.Instance.mainRoleInfo.turn
|
|
local id = SkillManager.ThreeAttackSkills[career.."@"..sex][index]
|
|
return id
|
|
end
|
|
|
|
function SkillManager:resetRigidityTime()
|
|
self.Rigidity_start_time = Status.NowTime
|
|
end
|
|
-------------------------------------------
|
|
|
|
|
|
function SkillManager:getInstance()
|
|
if SkillManager.Instance==nil then
|
|
SkillManager.New()
|
|
end
|
|
return SkillManager.Instance
|
|
end
|
|
function SkillManager:getSkill(id)
|
|
|
|
if id == nil or id <= 0 then
|
|
return
|
|
end
|
|
if self.mySkillList[id] ~= nil then
|
|
return self.mySkillList[id]
|
|
end
|
|
if self:getSkillFromConfig(id) == nil then
|
|
print(string.format("getSkill:warning! can't find skill(%s) in data_skill.db!", id))
|
|
return nil
|
|
end
|
|
if self.otherSkillList[id] == nil then
|
|
local skillVo = SkillVo.New(id)
|
|
self.otherSkillList[id] = skillVo
|
|
end
|
|
return self.otherSkillList[id]
|
|
end
|
|
|
|
--根据副技能组装出对应的主技能
|
|
function SkillManager:PackageMainSkillId(combo_skill)
|
|
return math.floor(combo_skill / 10) * 10 + 1 --主技能最后一位一定为1
|
|
end
|
|
|
|
|
|
--返回主角的技能需要用到的所有特效资源
|
|
function SkillManager:getParticleList()
|
|
return self.particle_list
|
|
end
|
|
|
|
|
|
--改变释放的技能
|
|
-- skillId 可传nil
|
|
function SkillManager:setCurrentSkillId(skillId)
|
|
-- skillId = skillId or self:getBaseSkill()
|
|
|
|
if self.currentSkillId ~= skillId then
|
|
self.currentSkillId = skillId
|
|
self.currentSkillVo = self:getSkill(skillId)
|
|
-- self:Fire(SkillManager.CHANGESKILL)
|
|
|
|
--刷新攻击距离
|
|
self:UpdateAttackDistance()
|
|
end
|
|
end
|
|
|
|
--返回当前技能id,可能为nil
|
|
function SkillManager:getCurrentSkillId()
|
|
return self.currentSkillId
|
|
end
|
|
|
|
--返回当前可用技能,如果当前技能id为nil,则返回普攻技能
|
|
function SkillManager:getCurrentSkill()
|
|
return self.currentSkillVo
|
|
end
|
|
|
|
--复位技能 技能成功释放后设置CD
|
|
function SkillManager:ResetSkill(skillId)
|
|
self.cacheReset_skillId = skillId
|
|
self:SetCacheResetSkillId()
|
|
end
|
|
|
|
--[[
|
|
功能:从配置中获取技能信息
|
|
其他.
|
|
作者:zsm
|
|
]]
|
|
function SkillManager:getSkillFromConfig(id)
|
|
return ConfigItemMgr.Instance:GetSkillItem(id)
|
|
end
|
|
|
|
--[[
|
|
功能:从配置中获取技能战力
|
|
is_have: 是否是已经获得的技能
|
|
]]
|
|
function SkillManager:GetSkillPower( id,level,is_get )
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
local power = 0
|
|
if skill_cfg ~= nil then
|
|
if skill_cfg.lvs[level] ~= nil then
|
|
local cfg = skill_cfg.lvs[level]
|
|
if cfg and cfg.power then
|
|
local skill_power = Trim(cfg.power)
|
|
if string.len(skill_power) > 0 then
|
|
power = power + tonumber(skill_power)
|
|
end
|
|
end
|
|
if cfg.base_attr then
|
|
local attr_list = stringtotable(cfg.base_attr)
|
|
if #attr_list > 0 then
|
|
power = GetFighting(attr_list,is_get)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
print("技能战力 :", id,level,power)
|
|
return power
|
|
end
|
|
|
|
|
|
--[[
|
|
功能:从配置文件中获取对应等级的技能描述信息
|
|
参数:技能id和技能等级
|
|
作者:yzd
|
|
]]
|
|
function SkillManager:GetSkillFromConfigByIdAndLevel(id,level)
|
|
local description = ""
|
|
local name = ""
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
if skill_cfg ~= nil then
|
|
if skill_cfg.lvs[level] ~= nil then
|
|
description = skill_cfg.lvs[level].desc
|
|
name = skill_cfg.name
|
|
end
|
|
end
|
|
return description, name
|
|
end
|
|
|
|
--[[
|
|
功能:从配置文件中获取技能名字
|
|
参数:技能id
|
|
作者:yzd
|
|
]]
|
|
function SkillManager:GetSkillNameById(id)
|
|
local name = ""
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
if skill_cfg ~= nil then
|
|
name = skill_cfg.name
|
|
end
|
|
return name
|
|
end
|
|
|
|
--[[
|
|
功能:从配置文件中获取技能所属职业
|
|
参数:技能id
|
|
作者:yzd
|
|
]]
|
|
function SkillManager:GetSKillCareerById(id)
|
|
local career
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
if skill_cfg ~= nil then
|
|
name = skill_cfg.career
|
|
end
|
|
return name
|
|
end
|
|
|
|
--[[
|
|
功能:从配置文件中获取对应等级的技能CD
|
|
参数:技能id和技能等级
|
|
作者:yzd
|
|
]]
|
|
function SkillManager:GetSkillCdByIdAndLevel(id,level)
|
|
|
|
local cd
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
if skill_cfg ~= nil then
|
|
if skill_cfg.lvs[level] ~= nil then
|
|
cd = skill_cfg.lvs[level].cd
|
|
end
|
|
end
|
|
return cd
|
|
end
|
|
|
|
--[[
|
|
功能:从配置文件中获取对应等级的技能距离
|
|
参数:技能id和技能等级
|
|
作者:yzd
|
|
]]
|
|
function SkillManager:GetSkillDistanceByIdAndLevel(id,level)
|
|
|
|
local distance
|
|
local skill_cfg = ConfigItemMgr.Instance:GetSkillItem(id)
|
|
if skill_cfg ~= nil then
|
|
if skill_cfg.lvs[level] ~= nil then
|
|
distance = skill_cfg.lvs[level].distance
|
|
end
|
|
end
|
|
return distance
|
|
end
|
|
|
|
--获取战斗技能配置信息
|
|
function SkillManager:GetFightSkillMovie(skill_id)
|
|
return Config.CareerFightMovies[skill_id] or Config.MonsterFightMovies[skill_id] --or Config.StarFightMovies[skill_id] or {}
|
|
end
|
|
|
|
--处理三段攻击技能
|
|
function SkillManager:IncreaseThreeAttackIndex(skillId)
|
|
local i = self.three_attack_index + 1
|
|
if i > SkillManager.ThreeAttackSkillInfo[skillId] then
|
|
i = 1
|
|
end
|
|
self.three_attack_index = i
|
|
end
|
|
|
|
|
|
--设置施法僵直的时间秒数,结束时间
|
|
function SkillManager:SetSkillRigidity(time_len)
|
|
if time_len > 4 then
|
|
print("施法僵直异常,", time_len)
|
|
time_len = 4
|
|
end
|
|
time_len = time_len - 0.1 --僵直时间统一减少,方便动作衔接
|
|
self.Rigidity_start_time = self.Rigidity_start_time or Status.NowTime
|
|
local time_off = Status.NowTime - self.Rigidity_start_time
|
|
local rigidity_end_time = time_len + Status.NowTime - time_off
|
|
--可能服务端有延迟 赋值到一个较短的值
|
|
if self.skill_Rigidity and rigidity_end_time < self.skill_Rigidity then
|
|
return
|
|
end
|
|
|
|
self.skill_Rigidity = rigidity_end_time
|
|
end
|
|
|
|
--判断角色是否在施法僵直的过程中
|
|
function SkillManager:isInRigidity()
|
|
if self.skill_Rigidity and Status.NowTime - self.skill_Rigidity < -4 then
|
|
print("SkillManager:isInRigidity:在异常CD中,", Status.NowTime - self.skill_Rigidity)
|
|
end
|
|
return (self.skill_Rigidity ~= nil and Status.NowTime < self.skill_Rigidity)
|
|
end
|
|
|
|
function SkillManager:GetRigidityLeftTime()
|
|
if not self.skill_Rigidity then
|
|
return 0
|
|
end
|
|
return self.skill_Rigidity - Status.NowTime
|
|
end
|
|
|
|
function SkillManager:AddCacheSkill(id, cache_secs)
|
|
--缓存一个技能
|
|
if not id then
|
|
return
|
|
end
|
|
local skillVo = SkillManager.Instance:getSkill(id)
|
|
if skillVo and skillVo:CoolDown() then
|
|
self.cached_skill_id =id
|
|
self.cache_skill_time = Status.NowTime
|
|
self.cache_secs = cache_secs or SkillManager.SkillCacheTime
|
|
end
|
|
end
|
|
|
|
function SkillManager:ClearCachedSkill()
|
|
self.cached_skill_id = nil
|
|
end
|
|
|
|
function SkillManager:PopCachedSkill()
|
|
if self.cached_skill_id then
|
|
local cached_id = self.cached_skill_id
|
|
self.cached_skill_id = nil
|
|
return cached_id
|
|
end
|
|
end
|
|
|
|
|
|
function SkillManager:CreateSkillList()
|
|
self.mySkillList = {}
|
|
|
|
--主角技能用到的特效列表
|
|
-- self.particle_list = {}
|
|
local len = UserMsgAdapter.ReadFmt("h")
|
|
local three_attack_level = nil
|
|
for index = 1, len do
|
|
local skillId,skillLv = UserMsgAdapter.ReadFmt("ih")
|
|
print("= = = = = = = skillId,skillLv", skillId,skillLv)
|
|
local skill_cfg = self:getSkillFromConfig(skillId)
|
|
if skill_cfg ~= nil then
|
|
local skillVo = self.mySkillList[skillId] or SkillVo.New(skillId)
|
|
|
|
skillVo.level = skillLv
|
|
|
|
self.mySkillList[skillId] = skillVo
|
|
--[[
|
|
--把技能用到的特效资源记录下来
|
|
local movie_cfg = SkillManager.Instance:GetFightSkillMovie(skillId)
|
|
if movie_cfg and movie_cfg.particles then
|
|
local particles = movie_cfg.particles
|
|
for _, particle_info in pairs(particles) do
|
|
local res = particle_info.res
|
|
if res then
|
|
table.insert(self.particle_list, res)
|
|
-- print("用到的特效:", res)
|
|
end
|
|
end
|
|
end
|
|
]]
|
|
else
|
|
print(string.format("CreateSkillList:warning! can't find skill(%s) in data_skill.db!", skillId))
|
|
end
|
|
end
|
|
GlobalEventSystem:Fire(EventName.GET_SKILL_SHORTCUT) --刷新快捷栏
|
|
self.currentSkillId = self:getBaseSkill()
|
|
self.currentSkillVo = self:getSkill(self.currentSkillId)
|
|
self:UpdateAttackDistance()
|
|
end
|
|
|
|
function SkillManager:AddSkillToSkillList(skillId)
|
|
local skill_cfg = self:getSkillFromConfig(skillId)
|
|
if skill_cfg ~= nil then
|
|
local skillVo = self.mySkillList[skillId] or SkillVo.New(skillId)
|
|
skillVo.level = 1
|
|
self.mySkillList[skillId] = skillVo
|
|
end
|
|
end
|
|
|
|
--is_base 是否获取基本技能
|
|
function SkillManager:GetShortCutList()
|
|
return self.shortcutList
|
|
end
|
|
|
|
--技能是否在快捷栏上面
|
|
function SkillManager:IsSkillHasUse(id)
|
|
if not id then
|
|
return
|
|
end
|
|
return self.skillUseList[id]
|
|
end
|
|
|
|
function SkillManager:SetHitSkillVo(vo)
|
|
local skill_vo = self:getSkill(vo.id)
|
|
if skill_vo then
|
|
self.skillUseList[vo.id] = vo
|
|
self.shortcutList[vo.pos] = skill_vo
|
|
end
|
|
end
|
|
|
|
--获取羁绊技能数据
|
|
function SkillManager:GetHitSkillVo()
|
|
return self.shortcutList[9]
|
|
end
|
|
|
|
function SkillManager:getCfgInitiativeSkillList(career,sex)
|
|
local mvo = RoleManager.Instance:GetMainRoleVo()
|
|
local key = mvo.career .. "@" .. mvo.sex
|
|
if career and sex then
|
|
key = career .. "@" .. sex
|
|
end
|
|
return Config.ConfigSkillUI.InitiativeSkill[key]
|
|
end
|
|
|
|
--刷新攻击距离
|
|
function SkillManager:UpdateAttackDistance()
|
|
local skillVo = self.currentSkillVo
|
|
if skillVo == nil then
|
|
self.currentAttackRange = 0
|
|
return
|
|
end
|
|
|
|
local skill_distance = skillVo:GetDistance() or 100
|
|
skill_distance = skill_distance
|
|
|
|
if skill_distance < 50 then
|
|
skill_distance = 50
|
|
end
|
|
self.currentAttackRange = skill_distance
|
|
end
|
|
|
|
--返回当前可用技能的攻击距离
|
|
function SkillManager:GetCurrentAttackRange()
|
|
return self.currentAttackRange
|
|
end
|
|
--检测是否是缓存技能id
|
|
function SkillManager:CheckCacheSkill(id)
|
|
if self.cacheReset_skillId and self.cacheReset_skillId == id then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
--显示技能cd
|
|
function SkillManager:SetCacheResetSkillId()
|
|
local skillVo = self:getSkill(self.cacheReset_skillId)
|
|
if skillVo ~= nil and skillVo:getCd() ~= 0 then
|
|
local cdTime = 1
|
|
cdTime = skillVo:getCd()/1000
|
|
skillVo:startCD()
|
|
|
|
self:Fire(SkillManager.START_SKILL_CD,self.cacheReset_skillId,cdTime)
|
|
end
|
|
|
|
-- if self.cacheReset_skillId == self.currentSkillId then
|
|
self:setCurrentSkillId()
|
|
-- end
|
|
self.cacheReset_skillId = nil
|
|
end
|
|
|
|
function SkillManager:ClearAllSkillCD()
|
|
for id,info in pairs(self.cd_skill_list) do
|
|
self:ClearSkillCD(id)
|
|
end
|
|
end
|
|
|
|
function SkillManager:ClearSkillCD(skill_id)
|
|
local skillVo = self:getSkill(skill_id)
|
|
if skillVo then
|
|
skillVo:clearCD()
|
|
self:Fire(SkillManager.START_SKILL_CD,skill_id,0)
|
|
end
|
|
end
|
|
|
|
function SkillManager:LockCD(lock)
|
|
SkillManager:getInstance():Fire(SkillManager.LOCK_CD,lock)
|
|
end
|
|
|
|
--完成当前攻击后释放的技能
|
|
function SkillManager:SetAttackCompleteSkill(skill_id)
|
|
self.fire_skill_id_after_current_attack = skill_id
|
|
end
|
|
|
|
function SkillManager:GetAngrySkillVo( )
|
|
local career = RoleManager.Instance.mainRoleInfo.career
|
|
local sex = RoleManager.Instance.mainRoleInfo.sex
|
|
local career_str = career.."@"..sex
|
|
local skill_id = SkillManager.AngerSkill[career_str]
|
|
local skill_vo = self.mySkillList[skill_id]
|
|
return skill_vo
|
|
end
|
|
|
|
-- 判断是否为怒气技能
|
|
function SkillManager:IsAngrySkill( skill_id )
|
|
for k,v in pairs(SkillManager.AngerSkill) do
|
|
if v == skill_id then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function SkillManager:PrepareAutoFightSkill(not_auto_release_assist_skill)
|
|
local now_skill_vo = self:getCurrentSkill()
|
|
if now_skill_vo and not now_skill_vo:CoolDown() then
|
|
now_skill_vo = nil
|
|
end
|
|
|
|
--怒气技能满足条件就放
|
|
local anger_skill_vo = self:GetAngrySkillVo( )
|
|
local role_vo = RoleManager.Instance.mainRoleInfo
|
|
if anger_skill_vo and role_vo.angry_value > 0 and role_vo.angry_value == role_vo.max_angry_value and anger_skill_vo:CoolDown() then
|
|
-- local can_auto = AutoFightManager:getInstance():FindSkillIsAuto(anger_skill_vo.id)
|
|
-- if can_auto then
|
|
self:setCurrentSkillId(anger_skill_vo.id)
|
|
return anger_skill_vo.id
|
|
-- end
|
|
end
|
|
|
|
--如果当前没技能,就随机一个
|
|
if now_skill_vo == nil then
|
|
local short_cut_list = self:GetShortCutList()
|
|
|
|
local main_role = Scene:getInstance():GetMainRole()
|
|
local is_in_god_state = main_role and main_role:IsInGodState()
|
|
if is_in_god_state then
|
|
local id = RoleManager.Instance:GetMainRoleVo():GetGodID()
|
|
short_cut_list = GodModel:getInstance():GetGodSkillList(id)
|
|
end
|
|
|
|
local skills_can_use = {}
|
|
--把所有可用的非普通攻击技能塞进队列,准备随机一个
|
|
local main_role = Scene.Instance.main_role
|
|
if not main_role then
|
|
return false
|
|
end
|
|
|
|
local id,skillVo,can_auto
|
|
for i, vo in pairs(short_cut_list) do
|
|
if is_in_god_state then
|
|
id = vo
|
|
else
|
|
id = vo.id
|
|
end
|
|
skillVo = self:getSkill(id)
|
|
if skillVo then
|
|
can_auto = AutoFightManager:getInstance():FindSkillIsAuto(id)
|
|
if can_auto and skillVo:CoolDown() then
|
|
table.insert(skills_can_use, skillVo)
|
|
end
|
|
end
|
|
end
|
|
|
|
--随机取技能
|
|
if #skills_can_use >= 1 then
|
|
local max_cd_time = 0
|
|
local max_skill_vo = nil
|
|
for i, skillVo in pairs(skills_can_use) do
|
|
if skillVo:getCd() > max_cd_time then
|
|
max_cd_time = skillVo:getCd()
|
|
max_skill_vo = skillVo
|
|
end
|
|
end
|
|
now_skill_vo = max_skill_vo
|
|
if now_skill_vo then
|
|
self:setCurrentSkillId(now_skill_vo.id)
|
|
end
|
|
end
|
|
|
|
if now_skill_vo == nil then
|
|
local id = self:getBaseSkill()
|
|
self:setCurrentSkillId(id)
|
|
now_skill_vo = self:getSkill(id)
|
|
end
|
|
end
|
|
|
|
if now_skill_vo ~= nil then
|
|
return now_skill_vo.id
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- 宝宝副本定制自动挂机自动技能
|
|
function SkillManager:PrepareAutoFightSkillInBabyDun(not_auto_release_assist_skill)
|
|
local now_skill_vo = self:getCurrentSkill()
|
|
if now_skill_vo and not now_skill_vo:CoolDown() then
|
|
now_skill_vo = nil
|
|
end
|
|
local dun_model = BaseDungeonModel:getInstance()
|
|
--如果当前没技能,就随机一个
|
|
if now_skill_vo == nil then
|
|
-- 获取宝宝副本内技能 (1技能位置|2技能id|3技能解锁波数|4技能释放消耗能量)
|
|
local short_cut_list = dun_model:GetBabyDunSkillList()
|
|
-- 获取宝宝副本内玩家当前能量值
|
|
local energy = dun_model:GetBabyDunEnergyValue()
|
|
local main_role = Scene:getInstance():GetMainRole()
|
|
local skills_can_use = {}
|
|
--把所有可用的非普通攻击技能塞进队列,准备随机一个
|
|
local main_role = Scene.Instance.main_role
|
|
if not main_role then
|
|
return false
|
|
end
|
|
local skill_id, skillVo, can_auto
|
|
for i, cfg_data in pairs(short_cut_list) do
|
|
if energy >= cfg_data[4] then -- 能量满足需求,加入到候选列表中
|
|
skill_id = cfg_data[2]
|
|
skillVo = self:getSkill(skill_id)
|
|
if skillVo then
|
|
can_auto = AutoFightManager:getInstance():FindSkillIsAuto(skill_id)
|
|
if can_auto and skillVo:CoolDown() then
|
|
table.insert(skills_can_use, skillVo)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--随机取技能
|
|
if #skills_can_use >= 1 then
|
|
local max_cd_time = 0
|
|
local max_skill_vo = nil
|
|
for i, skillVo in pairs(skills_can_use) do
|
|
if skillVo:getCd() > max_cd_time then
|
|
max_cd_time = skillVo:getCd()
|
|
max_skill_vo = skillVo
|
|
end
|
|
end
|
|
now_skill_vo = max_skill_vo
|
|
if now_skill_vo then
|
|
self:setCurrentSkillId(now_skill_vo.id)
|
|
end
|
|
end
|
|
|
|
if now_skill_vo == nil then
|
|
local id = SkillManager.BabyDunMainRoleBaseSkill
|
|
self:setCurrentSkillId(id)
|
|
now_skill_vo = self:getSkill(id)
|
|
end
|
|
end
|
|
|
|
if now_skill_vo ~= nil then
|
|
return now_skill_vo.id
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--提前获取下一个可释放的技能,保证技能连招流畅
|
|
function SkillManager:GetNextSkill( )
|
|
local main_role = Scene.Instance.main_role
|
|
if not main_role then
|
|
return false
|
|
end
|
|
|
|
--怒气技能
|
|
local anger_skill_vo = self:GetAngrySkillVo( )
|
|
local role_vo = RoleManager.Instance.mainRoleInfo
|
|
if anger_skill_vo and role_vo.angry_value > 0 and role_vo.angry_value == role_vo.max_angry_value and anger_skill_vo:CoolDown() then
|
|
return anger_skill_vo.id
|
|
end
|
|
--随机取技能
|
|
local skills_can_use = {}
|
|
for id, skill_vo in pairs(self.skillUseList) do
|
|
if skill_vo then
|
|
local can_auto = AutoFightManager:getInstance():FindSkillIsAuto(id)
|
|
if can_auto and skill_vo:CoolDown() then
|
|
table.insert(skills_can_use, skill_vo)
|
|
end
|
|
end
|
|
end
|
|
local now_skill_vo
|
|
if #skills_can_use >= 1 then
|
|
local max_cd_time = 0
|
|
local max_skill_vo = nil
|
|
for i, skillVo in pairs(skills_can_use) do
|
|
if skillVo:getCd() > max_cd_time then
|
|
max_cd_time = skillVo:getCd()
|
|
max_skill_vo = skillVo
|
|
end
|
|
end
|
|
now_skill_vo = max_skill_vo
|
|
if now_skill_vo then
|
|
return now_skill_vo.id
|
|
end
|
|
end
|
|
--随机普攻
|
|
if now_skill_vo == nil then
|
|
local id = self:getBaseSkill()
|
|
return id
|
|
end
|
|
end
|
|
|
|
--主角是否可以发起攻击
|
|
function SkillManager:CanAttack(skill_id,show_tip)
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role == nil then
|
|
return false
|
|
end
|
|
if main_role:IsInState(PoseState.DEAD) or main_role:IsInState(PoseState.DOWN) or main_role:IsInState(PoseState.RISE) or main_role:IsInState(PoseState.HITED)
|
|
or main_role:IsInState(PoseState.RUSH) or main_role:IsInState(PoseState.JUMP)
|
|
or main_role:IsInState(PoseState.FLY_SHOE) or main_role:IsInState(PoseState.TASK_JUMP)
|
|
or main_role:IsSwimState() then
|
|
return false
|
|
end
|
|
local tip_str = ""
|
|
if skill_id then
|
|
local skillVo = self:getSkill(skill_id)
|
|
if skillVo == nil then
|
|
print("取不到技能信息??: skill_id:", skill_id)
|
|
return false
|
|
end
|
|
if self:isInRigidity() then
|
|
if show_tip and skill_id ~= SkillManager.JUMP_SKILL_ID and skillVo:CoolDown() then
|
|
self:AddCacheSkill(skill_id)
|
|
end
|
|
return false
|
|
end
|
|
|
|
local main_role_buff = main_role.buff_manager
|
|
if skill_id ~= self:getBaseSkill() and skillVo:CoolDown() == false then
|
|
tip_str = "技能冷却时间未到"
|
|
elseif RoleManager.Instance.mainRoleInfo.ghost_mode == 1 then
|
|
tip_str = "幽灵状态,不能发起攻击"
|
|
-- elseif skillVo:getAnger() > RoleManager.Instance.mainRoleInfo.anger then
|
|
-- tip_str = "怒气不足"
|
|
elseif main_role_buff:hasYunBuff() then
|
|
tip_str = "眩晕状态不能释放技能"
|
|
-- elseif main_role_buff:hasMabiBuff() then
|
|
-- tip_str = "麻痹状态不能释放技能"
|
|
-- elseif main_role_buff:hasDingshenBuff() then
|
|
-- tip_str = "定身状态不能释放技能"
|
|
-- elseif main_role_buff:hasHunluanBuff() then
|
|
-- tip_str = "混乱状态不能释放技能"
|
|
-- elseif main_role_buff:hasChanraoBuff() then
|
|
-- tip_str = "缠绕状态不能释放技能"
|
|
-- elseif main_role_buff:hasTuidingBuff() then
|
|
-- tip_str = "推顶状态不能释放技能"
|
|
-- elseif main_role:IsInMagic() then
|
|
-- tip_str = "补魔状态不能释放技能"
|
|
elseif main_role.is_shoe_flying then
|
|
tip_str = "传送状态不能释放技能"
|
|
-- elseif main_role_buff:hasChenMoBuff() then --沉默只能释放普攻
|
|
-- if not SkillManager.ThreeAttackSkillInfo[skill_id] then
|
|
-- tip_str = "沉默状态只能释放普攻"
|
|
-- end
|
|
end
|
|
|
|
end
|
|
if tip_str ~= "" then
|
|
if show_tip then
|
|
Message.show(tip_str)
|
|
end
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
SkillManager.SKILL_SHORTCUT_GRAY = {}
|
|
SkillManager.SKILL_SHORTCUT_GRAY.buff = 0x001
|
|
SkillManager.SKILL_SHORTCUT_GRAY.scene = 0x002
|
|
SkillManager.SKILL_SHORTCUT_GRAY.manul_forbid = 0x004
|
|
SkillManager.SKILL_SHORTCUT_GRAY.horse = 0x008
|
|
SkillManager.SKILL_SHORTCUT_GRAY.hun_luan = 0x010
|
|
SkillManager.SKILL_SHORTCUT_GRAY.all = SkillManager.SKILL_SHORTCUT_GRAY.buff + SkillManager.SKILL_SHORTCUT_GRAY.scene + SkillManager.SKILL_SHORTCUT_GRAY.manul_forbid + SkillManager.SKILL_SHORTCUT_GRAY.horse
|
|
+ SkillManager.SKILL_SHORTCUT_GRAY.hun_luan
|
|
function SkillManager:SetSkillShortcutGray(flag, gray)
|
|
local now_flag = 0
|
|
if gray then
|
|
now_flag = bit.bor(self.shortcut_gray_flag, flag)
|
|
else
|
|
now_flag = bit.band(self.shortcut_gray_flag, bit.bnot(flag))
|
|
end
|
|
-- if now_flag == self.shortcut_gray_flag then
|
|
-- print("SetSkillShortcutGraySetSkillShortcutGraySetSkillShortcutGraySetSkillShortcutGray")
|
|
-- return
|
|
-- end
|
|
self.shortcut_gray_flag = now_flag
|
|
if self.shortcut_gray_flag > 0 and gray then
|
|
SkillManager.getInstance():Fire(SkillManager.SHORT_CUT_SKILL_ACTIVE, false, flag)
|
|
elseif self.shortcut_gray_flag == 0 and not gray then
|
|
SkillManager.getInstance():Fire(SkillManager.SHORT_CUT_SKILL_ACTIVE, true, flag)
|
|
end
|
|
end
|
|
|
|
function SkillManager:IsSkillShortcutGray(index)
|
|
--沉默不置灰普攻
|
|
if index == 0 and self.shortcut_gray_flag == SkillManager.SKILL_SHORTCUT_GRAY.buff then
|
|
return false
|
|
end
|
|
|
|
return self.shortcut_gray_flag > 0
|
|
end
|
|
|
|
|
|
function SkillManager:ChangeGodsInfo(god_list)
|
|
local temp_state = -1
|
|
if RoleManager.Instance.mainRoleInfo.god_id > 0 then
|
|
temp_state = 3
|
|
else
|
|
if god_list and god_list then
|
|
local vo = nil
|
|
local len = #god_list
|
|
local has_go_out = false
|
|
if len > 0 then
|
|
for i = 1, len do
|
|
vo = god_list[i]
|
|
if vo.pos > 0 then
|
|
has_go_out = true
|
|
temp_state = 2
|
|
break
|
|
end
|
|
end
|
|
if not has_go_out then
|
|
temp_state = 1
|
|
end
|
|
else
|
|
temp_state = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
self.curr_god_state = temp_state
|
|
end
|
|
|
|
function SkillManager:IsGodFullEnergy()
|
|
return self.curr_god_dot > 0 and self.curr_god_dot >= self.max_dot
|
|
end
|
|
|
|
function SkillManager:SetReplaceSkillInfo(info)
|
|
self.replaceSkillList[info.skill_id] = info
|
|
self.replaceNewSkillList[info.new_skill_id] = info
|
|
--变身将神不需要
|
|
if self.curr_god_state ~= 3 then
|
|
self:Fire(SkillManager.UPDATE_SKILL_LIST)
|
|
end
|
|
end
|
|
|
|
function SkillManager:IsReplaceSkillId(skill_id)
|
|
return self.replaceNewSkillList[skill_id]
|
|
end
|
|
|
|
function SkillManager:RemoveReplaceSkillInfo(skill_id)
|
|
local info = self.replaceNewSkillList[skill_id]
|
|
if info then
|
|
self.replaceSkillList[info.skill_id] = nil
|
|
self.replaceNewSkillList[info.new_skill_id] = nil
|
|
self:Fire(SkillManager.UPDATE_SKILL_LIST)
|
|
end
|
|
end
|
|
|
|
function SkillManager:SetCanUseHitSkill(bool)
|
|
self.can_use_hit_skill = bool
|
|
end
|
|
|
|
function SkillManager:IsCanUseHitSkill()
|
|
return self.can_use_hit_skill
|
|
end
|
|
|
|
function SkillManager:AddHideBlackViews(layout_file)
|
|
self.hide_black_views_list[layout_file] = true
|
|
end
|
|
|
|
function SkillManager:RemoveHideBlackViews(layout_file)
|
|
self.hide_black_views_list[layout_file] = nil
|
|
end
|
|
|
|
function SkillManager:NeedHideSkillBlack()
|
|
return TableSize(self.hide_black_views_list) > 0
|
|
end
|
|
|
|
--被动技能id列表
|
|
function SkillManager:GetPassiveSkillList()
|
|
local t = {}
|
|
for k, v in pairs(SkillManager.PassivesSkillTypeList) do
|
|
table.insert(t, k)
|
|
end
|
|
if TableSize(t) >= 2 then
|
|
table.sort(t, function (a,b)
|
|
return a < b
|
|
end)
|
|
end
|
|
return t
|
|
end
|
|
|
|
--设置幻光技能
|
|
function SkillManager:SetDailyLightSkillList(vo)
|
|
self.dailyLightSkill = {}
|
|
self.otherSkillList = self.otherSkillList or {}
|
|
if vo then
|
|
self.dailyLightSkill.cur_skill = vo.use_skill_id
|
|
self.dailyLightSkill.list = {}
|
|
for i,v in ipairs(vo.skill_list) do
|
|
local skillVo = self:getSkill(v.skill_id) --SkillVo.New(v.skill_id)
|
|
skillVo.level = v.lv
|
|
self.dailyLightSkill.list[i] = skillVo
|
|
self.otherSkillList[v.skill_id] = skillVo
|
|
end
|
|
end
|
|
-- print("self.dailyLightSkill.list")
|
|
-- PrintTable(self.dailyLightSkill.list)
|
|
end
|
|
|
|
--切换幻光技能
|
|
function SkillManager:SetSwitchDailyLightSkill(skill_id)
|
|
self.dailyLightSkill.cur_skill = skill_id
|
|
end
|
|
|
|
--获取当前激活的幻光技能
|
|
function SkillManager:GetCurDailyLightSkill()
|
|
local vo
|
|
if self.dailyLightSkill.cur_skill and self.dailyLightSkill.list then
|
|
for i,v in ipairs(self.dailyLightSkill.list) do
|
|
if v.id == self.dailyLightSkill.cur_skill then
|
|
vo = v
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return vo
|
|
end
|
|
|
|
--获取当前使用的幻光技能id
|
|
function SkillManager:GetCurrentUseDailyLightSkillId()
|
|
if self.dailyLightSkill and self.dailyLightSkill.cur_skill then
|
|
return self.dailyLightSkill.cur_skill
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--获取下一个幻光技能
|
|
function SkillManager:GetNextDailyLightSkill()
|
|
local skill_id = 0
|
|
if self.dailyLightSkill.cur_skill and self.dailyLightSkill.list and #self.dailyLightSkill.list > 1 then
|
|
local len = #self.dailyLightSkill.list
|
|
local idx = 0
|
|
for i,v in ipairs(self.dailyLightSkill.list) do
|
|
if v.id == self.dailyLightSkill.cur_skill then
|
|
idx = i
|
|
break
|
|
end
|
|
end
|
|
if idx == len then
|
|
idx = 1
|
|
else
|
|
idx = idx + 1
|
|
end
|
|
skill_id = self.dailyLightSkill.list[idx].id
|
|
end
|
|
return skill_id
|
|
end
|
|
|
|
--是否学习了该幻光技能
|
|
function SkillManager:IsLearnDailyLightSkill(skill_id)
|
|
if self.dailyLightSkill.list and #self.dailyLightSkill.list > 0 then
|
|
for i,v in ipairs(self.dailyLightSkill.list) do
|
|
if v.id == skill_id then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--获取当前方案所有出战技能列表
|
|
function SkillManager:GetCurShortcutList()
|
|
local plan = self.cur_shortcut_plan
|
|
if self.all_plan_skill and self.all_plan_skill[plan] then
|
|
local t = self.all_plan_skill[plan].shortcutList
|
|
for i=1,8 do
|
|
if not t[i] then
|
|
t[i] = {}
|
|
t[i].pos = i
|
|
t[i].id = 0
|
|
end
|
|
end
|
|
return t
|
|
end
|
|
return {}
|
|
end
|
|
|
|
--获取当前技能僵直,受到动作倍速影响
|
|
function SkillManager:GetBackSwing( skill_id )
|
|
-- if self.skill_back_swing_list[skill_id] then
|
|
-- return self.skill_back_swing_list[skill_id]
|
|
-- end
|
|
|
|
local skill_cfg = self:GetFightSkillMovie(skill_id)
|
|
-- if not skill_cfg then
|
|
-- return 0
|
|
-- end
|
|
local back_swing = skill_cfg.back_swing
|
|
-- if skill_cfg.action_speed_info then
|
|
-- local start_time = skill_cfg.action_speed_info.start_time
|
|
-- local end_time = skill_cfg.action_speed_info.end_time
|
|
-- local action_speed = skill_cfg.action_speed_info.action_speed
|
|
-- local change_time = end_time == 0 and back_swing - start_time or end_time - start_time
|
|
-- local change_speed_time = action_speed * change_time
|
|
-- if change_speed_time > back_swing then
|
|
-- back_swing = back_swing / action_speed
|
|
-- else
|
|
-- back_swing = change_time + (back_swing - change_speed_time)
|
|
-- end
|
|
-- end
|
|
-- self.skill_back_swing_list[skill_id] = back_swing
|
|
return back_swing
|
|
end
|
|
|
|
--设置当前技能的多段伤害数据
|
|
function SkillManager:SetMultiHurtInfo( skill_id, pos_x, pos_y)
|
|
local m_skill_vo = self.multi_skill_list[skill_id]
|
|
--检查缓存技能
|
|
if m_skill_vo then
|
|
--非多段技能
|
|
if not m_skill_vo.is_multi_skill then
|
|
return 0
|
|
else
|
|
--多段技能,记录第一段技能的中心点
|
|
if m_skill_vo.index == 1 then
|
|
m_skill_vo.pos_x, m_skill_vo.pos_y = pos_x, pos_y
|
|
end
|
|
--到上限重置
|
|
if m_skill_vo.index >= m_skill_vo.segment then
|
|
m_skill_vo.index = 1
|
|
return 0
|
|
else
|
|
return m_skill_vo.interval
|
|
end
|
|
end
|
|
else
|
|
--检查新技能
|
|
local skill_vo = self:getSkill(skill_id)
|
|
if not skill_vo then
|
|
return 0
|
|
end
|
|
local m_segment, m_interval = skill_vo:getMultiHurtInfo()
|
|
if m_segment and m_segment > 1 and m_interval and m_interval > 0 then
|
|
local temp_vo = {
|
|
is_multi_skill = true,
|
|
skill_id = skill_id,
|
|
index = 1,
|
|
segment = m_segment,
|
|
interval = m_interval,
|
|
pos_x = pos_x,
|
|
pos_y = pos_y,
|
|
}
|
|
self.multi_skill_list[skill_id] = temp_vo
|
|
return m_interval
|
|
else
|
|
self.multi_skill_list[skill_id] = {is_multi_skill = false}
|
|
return 0
|
|
end
|
|
end
|
|
end
|
|
|
|
--获取当前技能的多段伤害数据,每次累增多段伤害序列
|
|
function SkillManager:GetMultiHurtVo( skill_id )
|
|
local m_skill_vo = self.multi_skill_list[skill_id]
|
|
if m_skill_vo and m_skill_vo.is_multi_skill then
|
|
m_skill_vo.index = m_skill_vo.index + 1
|
|
return m_skill_vo
|
|
end
|
|
return false
|
|
end
|
|
|
|
function SkillManager:ResetMultiHurtInfo( skill_id )
|
|
if skill_id and self.multi_skill_list[skill_id] and self.multi_skill_list[skill_id].index then
|
|
self.multi_skill_list[skill_id].index = 1
|
|
end
|
|
end
|
|
|
|
--新手期特殊技能表现
|
|
function SkillManager:PrepareGuideSkill( )
|
|
local career = RoleManager.Instance.mainRoleInfo.career
|
|
local sex = RoleManager.Instance.mainRoleInfo.sex
|
|
local career_str = career.."@"..sex
|
|
local show_skill_list = self.guide_skill_list[career_str] and self.guide_skill_list[career_str].show_list
|
|
local real_skill_list = self.guide_skill_list[career_str] and self.guide_skill_list[career_str].real_list
|
|
if not show_skill_list or not real_skill_list or self.cur_guide_skill_index > #show_skill_list then
|
|
return
|
|
end
|
|
local skill_id = show_skill_list[self.cur_guide_skill_index]
|
|
local real_skill_id = real_skill_list[self.cur_guide_skill_index]
|
|
if skill_id and real_skill_id then
|
|
self:setCurrentSkillId(skill_id)
|
|
self.cur_guide_skill_index = self.cur_guide_skill_index + 1
|
|
return skill_id, real_skill_id
|
|
end
|
|
end
|
|
|
|
--是否是上阵的技能
|
|
function SkillManager:IsCurShortcutSkill(skill_id)
|
|
local list = self:GetCurShortcutList()
|
|
if list then
|
|
for i,v in ipairs(list) do
|
|
if skill_id == v.id then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--是否是上阵的技能
|
|
function SkillManager:IsShowSpecialSkill(skill_id)
|
|
return Config.ConfigSkillUI.ShowSpecialSkill[skill_id]
|
|
end
|
|
|
|
|
|
|