源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

654 lines
20 KiB

require("game.proto.210.Require210")
require("game.skill.SkillManager")
require("game.skill.SkillMainView")
require("game.skill.CareerSkillView")
require("game.skill.PassiveSkillView")
require("game.skill.SkillUIItem")
require("game.skill.SkillUIAttrOne")
require("game.skill.SkillUIDetailItem")
require("game.skill.SkillUIListItem")
require("game.skill.SpecialSkillView")
require("game.skill.SkillUpLevelPreView")
require("game.skill.SkillConfigView")
require("game.skill.SkillUIModel")
SkillUIController = SkillUIController or BaseClass(BaseController)
local SkillUIController = SkillUIController
function SkillUIController:__init()
SkillUIController.Instance = self
self.model = SkillManager:getInstance()
self.skillui_model = SkillUIModel:getInstance()
self:AddAllEvents()
self:RegisterAllProtocals()
end
function SkillUIController:AddAllEvents()
--游戏登录成功
local game_start_func = function ( )
self.model:ClearData()
setTimeout(function()
self.request_21002 = true
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21002)
self:StartCheckNetSlowTimer()
GlobalEventSystem:Fire(EventName.GET_DAILY_LIGHT_SKILL)
-- self:SendFmtToGame(13086)
end,0.5)
end
GlobalEventSystem:Bind(EventName.FAST_GAME_START, game_start_func)
local function onRequestHandler(...)
local args = {...}
if args[1] == 21001 then
self:SendFmtToGame(args[1],"i",args[2])
elseif args[1] == 21003 then
self:SendFmtToGame(args[1],"i",args[2])
elseif args[1] == 21004 then
self:SendFmtToGame(args[1],"i",args[2])
elseif args[1] == 21011 then
self:SendFmtToGame(args[1], "i", args[2])
elseif args[1] == 21014 then
self:SendFmtToGame(args[1], "ii", args[2],args[3])
else
self:SendFmtToGame(args[1])
end
end
self.model:Bind(SkillManager.REQUEST_CCMD_EVENT,onRequestHandler)
local function onOpenSkillViewHandler(index,select_up_skill)
if self.SkillMainView == nil then
self.SkillMainView = SkillMainView.New()
end
if self.SkillMainView:HasOpen() and index ~= 4 then
self.SkillMainView:Close()
else
self.SkillMainView:Open(index,select_up_skill)
end
end
GlobalEventSystem:Bind(EventName.OPEN_SKILL_VIEW,onOpenSkillViewHandler)
--点按技能快捷栏后响应
local function skill_shortCut_click (skillId, skill_attack_type, target_compress_id)
self:PressSkillHandler(skillId, skill_attack_type, target_compress_id)
end
GlobalEventSystem:Bind(FightEvent.SKILL_SHORTCUT_CLICK,skill_shortCut_click)
local function save_skill_shortcut (pos, itype, plan, id, is_auto )
self:request13008(pos, itype, plan, id, is_auto )
end
local function request13007 ()
self:request13007()
end
local function request13009 (pos)
self:request13009(pos)
end
local function request13010 (pos1,pos2,plan)
self:request13010(pos1,pos2,plan)
end
local function request14705 ()
self:request14705()
end
local function request14706 (skill_id)
self:request14706(skill_id)
end
GlobalEventSystem:Bind(EventName.GET_SKILL_SHORTCUT,request13007)
GlobalEventSystem:Bind(EventName.SAVE_SKILL_SHORTCUT,save_skill_shortcut)
GlobalEventSystem:Bind(EventName.REPLACE_SKILL_SHORTCUT,request13010)
GlobalEventSystem:Bind(EventName.DELETE_SKILL_SHORTCUT,request13009)
GlobalEventSystem:Bind(EventName.GET_DAILY_LIGHT_SKILL,request14705)
GlobalEventSystem:Bind(EventName.SWITCH_DAILY_LIGHT_SKILL,request14706)
-- 升级 重新请求天赋技能点数
local function onLevelUp(lv)
--120级,设置一下幻光技能未为自动切换
if lv == 120 then
local is_auto_daily_skill = self.skillui_model:IsAutoChangeDailySkillid()
if not is_auto_daily_skill then
self.skillui_model:SetAutoChangeDailyState(true)
end
end
if RoleManager:getInstance():GetMainRoleVo().level == 500 then
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21010)
end
self.skillui_model:CheckRedDot()
end
RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp)
local function role_turn(var,value)
self.skillui_model:CheckRedDot()
end
RoleManager:getInstance():GetMainRoleVo():BindOne("turn",role_turn)
local function onOpenSkillUpLevelPreView(skill_vo) --打开技能等级预览界面
if self.SkillUpLevelPreView == nil then
self.SkillUpLevelPreView = SkillUpLevelPreView.New()
end
self.SkillUpLevelPreView:Open()
self.SkillUpLevelPreView:SetData(skill_vo)
end
self.skillui_model:Bind(SkillUIModel.OPEN_SKILL_UPLEVEL_PREVIEW, onOpenSkillUpLevelPreView)
local function onCloseSkillUpLevelPreView(skill_vo) --打开技能等级预览界面
if self.SkillUpLevelPreView then
self.SkillUpLevelPreView:Close()
end
end
self.skillui_model:Bind(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW, onCloseSkillUpLevelPreView)
local function onOpenSkillConfigView() --打开技能配置界面
if self.SkillConfigView == nil then
self.SkillConfigView = SkillConfigView.New()
end
self.SkillConfigView:Open()
self.SkillConfigView:SetData()
end
self.skillui_model:Bind(SkillUIModel.OPEN_SKILL_CONFIG_VIEW, onOpenSkillConfigView)
local function onSceneChangeHandler()
self:ChangeScene()
end
self:Bind(SceneEventType.SCENE_CHANGED, onSceneChangeHandler)
self:Bind(SceneEventType.SCENE_REENTER, onSceneChangeHandler)
end
function SkillUIController:RegisterAllProtocals()
self:RegisterProtocal(13007, "handler13007") --获取快捷栏
self:RegisterProtocal(13008, "handler13008") --保存快捷栏
self:RegisterProtocal(13010, "handler13010") --替换快捷键
self:RegisterProtocal(13086, "handler13086") --怒气技能
self:RegisterProtocal(21001, "handler21001") --职业技能升级
self:RegisterProtocal(21002, "handler21002") --职业技能列表
self:RegisterProtocal(21003, "handler21003") --主技能分支强化
self:RegisterProtocal(14705, "handler14705") --查询幻光技能
self:RegisterProtocal(14706, "handler14706") --切换幻光技能
self:RegisterProtocal(14707, "handler14707") --幻光技能获得通知
--self:RegisterProtocal(21004, "handler21004") --被动升级
--self:RegisterProtocal(21010, "handler21010")
--self:RegisterProtocal(21011, "handler21011")
--self:RegisterProtocal(21012, "handler21012")
--self:RegisterProtocal(21013, "handler21013")
--self:RegisterProtocal(21014, "handler21014")
--self:RegisterProtocal(21015, "handler21015")
-- self:RegisterProtocal(44008, "handler44008")
-- self:RegisterProtocal(44009, "handler44009")
-- self:RegisterProtocal(44010, "handler44010")
-- self:RegisterProtocal(44011, "handler44011")
end
function SkillUIController:request13007()
self:SendFmtToGame(13007)
end
function SkillUIController:request13008(pos, itype, plan, id, is_auto )
self:SendFmtToGame(13008, "cccic",pos, itype, plan, id, is_auto)
end
function SkillUIController:request13010( pos1,pos2, plan )
self:SendFmtToGame(13010, "ccc",pos1,pos2,plan)
end
function SkillUIController:request14705( )
self:SendFmtToGame(14705)
end
function SkillUIController:request14706( skill_id )
self:SendFmtToGame(14706, "i", skill_id)
end
function SkillUIController:handler13007( ... )
local len = self:ReadFmt("h") --Int16
self.model.shortcutList = {}
self.model.skillUseList = {}
self.model.all_plan_skill = {}
local skill_vo
for index = 1, len do
local plan = self:ReadFmt("c")
self.model.all_plan_skill[plan] = {}
self.model.all_plan_skill[plan].skillUseList = {}
self.model.all_plan_skill[plan].shortcutList = {}
local len_2 = self:ReadFmt("h") --Int16
for inde_2 = 1, len_2 do
local vo = {}
vo.pos,
vo.type,
vo.id,
vo.is_auto = self:ReadFmt("ccic")
if vo.id ~= 0 then
skill_vo = self.model:getSkill(vo.id)
if skill_vo then
self.model.all_plan_skill[plan].skillUseList[vo.id] = skill_vo
self.model.all_plan_skill[plan].shortcutList[vo.pos] = vo
end
end
end
end
local cur_plan = self.cur_shortcut_plan or 1
if self.model.all_plan_skill[cur_plan] then
self.model.shortcutList = self.model.all_plan_skill[cur_plan].shortcutList
self.model.skillUseList = self.model.all_plan_skill[cur_plan].skillUseList
end
SkillManager.Instance:Fire(SkillManager.UPDATE_SKILL_LIST)
end
function SkillUIController:handler13008( ... )
local result = self:ReadFmt("c")
if result == 1 then
Message.show("替换成功")
self:request13007()
else
Message.show("替换失败")
end
end
function SkillUIController:handler13009( ... )
local result = self:ReadFmt("c")
if result == 1 then
self:request13007()
end
end
function SkillUIController:handler13010( ... )
local result = self:ReadFmt("c")
if result == 1 then
Message.show("替换成功")
self:request13007()
else
Message.show("替换失败")
end
end
--怒气值变更
function SkillUIController:handler13086( )
local angry_value, max_angry_value = self:ReadFmt("hh")
RoleManager.Instance.mainRoleInfo.max_angry_value = max_angry_value
RoleManager.Instance.mainRoleInfo:ChangeVar("angry_value", angry_value, false, true)
end
function SkillUIController:handler14705( ... )
local scmd = SCMD14705.New(true)
self.model:SetDailyLightSkillList(scmd)
GlobalEventSystem:Fire(EventName.UPDATE_DAILY_LIGHT_SKILL)
self.model:Fire(SkillManager.UPDATE_SKILL_LIST)
end
function SkillUIController:handler14706( ... )
local scmd = SCMD14706.New(true)
if scmd.result == 1 then
local skill_id = scmd.skill_id
self.model:SetSwitchDailyLightSkill(skill_id)
GlobalEventSystem:Fire(EventName.UPDATE_DAILY_LIGHT_SKILL)
local skill_vo = self.model:getSkill(skill_id)
Message.show(string.format("已切换至%s", skill_vo:getName()))
else
ErrorCodeShow(scmd.result)
end
end
function SkillUIController:handler14707( )
local scmd = SCMD14707.New(true)
-- if scmd.skill_id > 0 then
-- --120001 是第一个幻光技能,需要飘动画
-- local id = 0
-- local ignore_fly = nil
-- local ignore_auto_task = true
-- if scmd.skill_id == 120001 then
-- id = 9
-- ignore_fly = false
-- ignore_auto_task = false
-- GlobalEventSystem:Fire(EventName.HIDE_FUNC_OPEN_ICON,{[1] = {type =2, id=9}}) --隐藏幻光技能
-- end
-- local skill_data = {skill_id = scmd.skill_id, show_time = 15, ignore_auto_task = ignore_auto_task, id = id, ignore_fly = ignore_fly}
-- FuncOpenController.Instance:ShowSkill(skill_data)
-- end
end
function SkillUIController:handler21001()
local scmd = SCMD21001.New(true)
if scmd.errcode ~= 1 then
ErrorCodeShow(scmd.errcode)
--物品不足,提示购买
if scmd.errcode == 1003 then
local skill_vo = self.model:getSkill(scmd.skill_id)
if not skill_vo then
skill_vo = SkillVo.New(scmd.skill_id)
skill_vo = 0
end
local show_type_id = 0
local goods = skill_vo:GetNextConditionByKey("goods")
if goods and goods[1][1] and goods[1][2] then
local type_id = tonumber(goods[1][1])
local cfg = ShopModel:getInstance():GetShopTypeIdBuyCFG(type_id)
if cfg and TableSize(cfg) > 0 then
show_type_id = type_id
end
end
if show_type_id ~= 0 then
ShopModel:getInstance():Fire(ShopModel.OPEN_SHOP_BUY_TIP_VIEW,show_type_id)
end
end
else
--延时一点点做客升级技能的切换操作
local function delay_func()
self.skillui_model:Fire(SkillUIModel.SKILL_UP_SUCCESS, scmd.skill_id)
end
setTimeout(delay_func, 0.2)
self.skillui_model.is_level_up = true
GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS)
end
end
function SkillUIController:handler21002()
if self.request_21002 then
self.model:Fire(SkillManager.RESET_SKILL_LIST)
self.request_21002 = false
end
self.model:CreateSkillList()
self.skillui_model:CheckRedDot()
GlobalEventSystem:Fire(EventName.UPDATE_BUFF_VIEW)
end
function SkillUIController:handler21003()
local scmd = SCMD21003.New(true)
if scmd.errcode ~= 1 then
ErrorCodeShow(scmd.errcode)
else
self.model:Fire(SkillManager.SKILL_LEVEL_UP)
end
end
function SkillUIController:handler21004()
local scmd = SCMD21004.New(true)
if scmd.errcode ~= 1 then
ErrorCodeShow(scmd.errcode)
end
end
function SkillUIController:handler21010( )
local scmd = SCMD21010.New(true)
end
function SkillUIController:handler21011( )
local scmd = SCMD21011.New(true)
if scmd.errcode == 1 then
--更新数据
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21010)
else
ErrorCodeShow(scmd.errcode)
end
end
function SkillUIController:handler21012( )
local scmd = SCMD21012.New(true)
if scmd.errcode == 1 then
else
ErrorCodeShow(scmd.errcode)
end
end
function SkillUIController:handler21013( )
local scmd = SCMD21013.New(true)
end
function SkillUIController:handler21014( )
local scmd = SCMD21014.New(true)
if scmd.errcode == 1 then
else
ErrorCodeShow(scmd.errcode)
end
end
function SkillUIController:handler21015( )
local scmd = SCMD21015.New(true)
SkillManager:getInstance():SetReplaceSkillInfo(scmd)
end
--按下技能
function SkillUIController:PressSkillHandler(skill_id, skill_attack_type, target_compress_id)
if Scene.Instance:GetRole(RoleManager.Instance.mainRoleInfo.role_id):IsRide() then
FosterModel:GetInstance():Fire(FosterConst.Change_Ride_Status,0)
end
local can_pk = true
if skill_attack_type ~= SkillManager.SKILL_ATTACK_TYPE.ONLY_SHOW_RANGE then
if not self.model:CanAttack(skill_id,true) then
can_pk = false
else
can_pk = true
end
-- OperateManager.Instance:StopMove()
end
if can_pk == false then
if skill_attack_type ~= SkillManager.SKILL_ATTACK_TYPE.ONLY_FIRE_ATTACK and not SkillManager:getInstance():isInRigidity() then
skill_attack_type = SkillManager.SKILL_ATTACK_TYPE.ONLY_SHOW_RANGE
self.model:setCurrentSkillId(nil)
GlobalEventSystem:Fire(FightEvent.RELEASE_MAIN_SKILL,nil,skill_id,target_compress_id,skill_attack_type)
end
return
end
self.model:setCurrentSkillId(skill_id)
local skillvo = self.model:getCurrentSkill()
if skillvo and skillvo:GetSelectType() == 1 then --对自己释放技能
GlobalEventSystem:Fire(FightEvent.RELEASE_MAIN_SKILL,nil,nil,target_compress_id,skill_attack_type)
else
Scene.Instance:MainRoleAttackTarget()
end
end
function SkillUIController:handler44008()
local vo = SCMD44008.New(true)
-- PrintTable(vo)
self.model.start_time = vo.start_time
self.model.server_time = vo.server_time
self.model.every_time_dot = vo.every_time_dot
self.model.max_dot = vo.max_dot
--只有变身状态才需要进行定时器 变化
if self.model.curr_god_state == 2 or self.model.curr_god_state == 3 then
if self.add_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.add_god_dot_timer_id)
self.add_god_dot_timer_id = false
end
if self.reduce_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.reduce_god_dot_timer_id)
self.reduce_god_dot_timer_id = false
end
if vo.start_time > 0 then --代表累加
local dot = math.floor(vo.server_time - vo.start_time) * vo.every_time_dot + vo.anger_dot
dot = math.min(dot,self.model.max_dot)
if dot >= vo.max_dot then
self.model:ChangeVar("curr_god_dot", vo.max_dot, nil, true)
if self.add_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.add_god_dot_timer_id)
self.add_god_dot_timer_id = false
end
return
end
self.model:ChangeVar("curr_god_dot", dot)
if not self.add_god_dot_timer_id then
local function onTimer()
local dot = self.model.curr_god_dot + self.model.every_time_dot
dot = math.min(dot,self.model.max_dot)
self.model:ChangeVar("curr_god_dot", dot)
if dot >= self.model.max_dot then
if self.add_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.add_god_dot_timer_id)
self.add_god_dot_timer_id = false
end
return
end
end
self.add_god_dot_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
end
elseif vo.start_time == 0 then --代表减少
--神格副本持续变身
if SceneManager.Instance:IsContinueChangeGodScene() then
local dot = self.model.max_dot - 1
self.model:ChangeVar("curr_god_dot", dot)
else
local real_switch_cd = vo.server_time + vo.switch_cd - TimeUtil:getServerTime( )
local every_time_dot = vo.max_dot / real_switch_cd
local dot = self.model.max_dot - 1
--这里 不能加 因为切场景会需要当前的curr_god_dot的值
-- self.model:ChangeVar("curr_god_dot", dot)
local dot = self.model.curr_god_dot - 1
self.model.switch_cd = real_switch_cd
if real_switch_cd <= 0 then
if self.reduce_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.reduce_god_dot_timer_id)
self.reduce_god_dot_timer_id = false
end
self.model:ChangeVar("curr_god_dot", 0, nil, true, true)
return
end
self.model:ChangeVar("curr_god_dot", dot)
if not self.reduce_god_dot_timer_id then
local function onTimer()
self.model.switch_cd = self.model.switch_cd - 1
local dot = self.model.curr_god_dot - every_time_dot
dot = math.max(0,dot)
self.model:ChangeVar("curr_god_dot", dot)
if self.model.switch_cd <= 0 then
if self.reduce_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.reduce_god_dot_timer_id)
self.reduce_god_dot_timer_id = false
end
self.model:ResetThreeAttackIndex(true)
end
end
self.reduce_god_dot_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer,1,real_switch_cd)
end
end
end
setTimeout(function ()
self.model:Fire(SkillManager.UPDATE_SKILL_LIST)
end,0.1)
else
if self.add_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.add_god_dot_timer_id)
self.add_god_dot_timer_id = false
end
if self.reduce_god_dot_timer_id then
GlobalTimerQuest:CancelQuest(self.reduce_god_dot_timer_id)
self.reduce_god_dot_timer_id = false
end
self.model:ChangeVar("curr_god_dot", 0, nil, true, true)
end
end
function SkillUIController:handler44009()
local vo = SCMD44009.New(true)
if vo then
self.model.is_receive44009 = true
if vo.errcode == 1 then
self.model:ResetThreeAttackIndex(true)
else
ErrorCodeShow(vo.errcode)
end
end
end
function SkillUIController:handler44010()
local anger_dot = UserMsgAdapter.ReadFmt("h") or 0
--local vo = SCMD44010.New(true)
if self.model.curr_god_state == 2 then
local dot = self.model.curr_god_dot + anger_dot
dot = math.min(dot,self.model.max_dot)
self.model:ChangeVar("curr_god_dot", dot)
end
end
function SkillUIController:handler44011()
local vo = SCMD44011.New(true)
if vo.type == 2 then --变身结束
self.model.curr_god_state = -1
self.model.curr_god_dot = 0
self.model.max_dot = 0
--强制设置为 0
RoleManager.Instance.mainRoleInfo:ChangeVar("god_id",0)
setTimeout(function ()
self.model:Fire(SkillManager.UPDATE_SKILL_LIST)
end,0.1)
else
RoleManager.Instance.mainRoleInfo:ChangeVar("god_id",GuideModel.CHANGE_GOD_ID)
setTimeout(function ()
self.model:Fire(SkillManager.UPDATE_SKILL_LIST)
end,0.1)
end
end
function SkillUIController:StartCheckNetSlowTimer()
if self.countdown_time_id then
GlobalTimerQuest:CancelQuest(self.countdown_time_id)
self.countdown_time_id = nil
end
local function onTimer()
if self.request_21002 then
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21002)
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21010)
self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21013)
else
if self.countdown_time_id then
GlobalTimerQuest:CancelQuest(self.countdown_time_id)
self.countdown_time_id = nil
end
end
end
self.countdown_time_id = GlobalTimerQuest:AddPeriodQuest(onTimer,8)
end
--技能材料变化
function SkillUIController:UpSkillGoodsChange( )
self.skillui_model:CheckRedDot()
end
function SkillUIController:ChangeScene()
local sceneInfo = SceneManager.Instance:GetSceneInfo()
if not sceneInfo then return end
local config = Config.Skillscenesetting
local plan = 1
for k,v in pairs(config) do
if v.scene_type == sceneInfo.type then
plan = v.scheme
break
end
end
if self.model.cur_shortcut_plan ~= plan then
self.model.cur_shortcut_plan = plan
if self.all_plan_skill and self.all_plan_skill[plan] then
self.model.shortcutList = self.model.all_plan_skill[plan].shortcutList
self.model.skillUseList = self.model.all_plan_skill[plan].skillUseList
end
self.model:Fire(SkillManager.RESET_SKILL_LIST)
end
end