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