源战役客户端
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.
 
 
 
 
 

421 rivejä
14 KiB

require("game.proto.500.Require500")
require("game.escort.EscortModel")
require("game.escort.EscortConst")
require("game.escort.EscortMainView")
require("game.escort.EscortItem")--主界面的item
require("game.escort.EscortResultView")--结算界面
require("game.escort.EscortStageResultView")--一阶段结算界面
require("game.escort.EscortSceneView")--场景界面
EscortController = EscortController or BaseClass(BaseController)
function EscortController:__init()
EscortController.Instance = self
self.model = EscortModel:getInstance()
self:InitEvent()
self:RegisterAllProtocals()
end
function EscortController:InitEvent()
local function onRequestHandler(...)
local args_list = {...}
self.igonre_once = false
if args_list[1] == 50010 or args_list[1] == 50003 or args_list[1] == 50001 or args_list[1] == 50002 then
self:SendFmtToGame(args_list[1], "c", args_list[2])
else
self:SendFmtToGame(args_list[1])
end
end
self.model:Bind(EscortConst.REQUEST_SCMD_EVENT, onRequestHandler)
local function gameStartHandler()
if GetModuleIsOpen(500) then
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50000)
end
end
GlobalEventSystem:Bind(EventName.GAME_START, gameStartHandler)
GlobalEventSystem:Bind(EventName.CHANE_DAY, gameStartHandler)
local function show_left()
self.model:SetEscortSceneLeftHideState(false)
end
GlobalEventSystem:Bind(EventName.FINISHED_COM_DIALOGUE_SHOW_ANIM, show_left)
local function onOpenEscortView(show)
if show then
if self.EscortMainView == nil then
self.EscortMainView = EscortMainView.New()
end
self.EscortMainView:Open()
else
if self.EscortMainView and self.EscortMainView:HasOpen() then
self.EscortMainView:Close()
end
end
end
GlobalEventSystem:Bind(EscortConst.OPEN_ESCORT_VIEW, onOpenEscortView)
local function scene_change_func()
self:ChangeScene()
end
GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, scene_change_func)
local function on_activity_change( ... )
-- local rob_id = RoleManager.Instance:GetMainRoleVo():GetFlagsByKey(RoleVo.Act_Flag.CONVOY_ROB)
-- local scene_mgr = SceneManager:getInstance()
-- if rob_id > 0 and scene_mgr:IsEscortScene() then--打劫id大于0 且在护送2阶段场景 才显示
-- if self.EscortSceneView == nil then
-- self.EscortSceneView = EscortSceneView.New()
-- end
-- if not self.EscortSceneView:HasOpen() then
-- self.EscortSceneView:Open()
-- end
-- self:SetMainUIVisible(false)
-- end
end
RoleManager:getInstance():GetMainRoleVo():BindOne("activity_flags", on_activity_change)
local function on_open_escort_result_view(show, data)
if show then
if self.EscortResultView == nil then
self.EscortResultView = EscortResultView.New()
end
self.EscortResultView:Open(data)
else
if self.EscortResultView and self.EscortResultView:HasOpen() then
self.EscortResultView:Close()
end
end
end
self.model:Bind(EscortConst.OPEN_ESCORT_RESULT_VIEW, on_open_escort_result_view)
local function on_open_stage_result_view( show )
if show then
if self.EscortStageResultView == nil then
self.EscortStageResultView = EscortStageResultView.New()
end
self.EscortStageResultView:Open()
else
if self.EscortStageResultView and self.EscortStageResultView:HasOpen() then
self.EscortStageResultView:Close()
end
end
end
self.model:Bind(EscortConst.OPEN_STAGE_ESCORT_RESULT_VIEW, on_open_stage_result_view)
local function on_fly_to_npc( )
self.model:FlyToNpc()
end
self.model:Bind(EscortConst.FLY_TO_NPC, on_fly_to_npc)
local function on_change_scene()
self:ChangeScene()
end
self.model:Bind(EscortConst.CHANGE_SCENE, on_change_scene)
end
function EscortController:TipsCall( )
local main_vo = RoleManager.Instance.mainRoleInfo
local temp_head_name = main_vo.name
local head_type = "100"..main_vo.career
local str = string.format("后面的路程会有一点危险,请集中注意力!")
local data = {
head_type = head_type,
desc = str,
head_name = temp_head_name or "",
hide_time = 5,
dalay_time = 1,
is_task_type = true,
}
self.model:SetEscortSceneLeftHideState(true)
GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
end
function EscortController:ChangeScene()
local scene_mgr = SceneManager.Instance
if self.model:IsEscortState() and scene_mgr:IsEscortAllScene() then
if self.EscortSceneView == nil then
self.EscortSceneView = EscortSceneView.New()
end
if not self.EscortSceneView:HasOpen() then
self.EscortSceneView:Open()
end
self:SetMainUIVisible(false)
elseif scene_mgr:IsEscortAllScene(scene_mgr:GetLastSceneId()) then -- 上一个场景是护送
if self.EscortSceneView then
self.EscortSceneView:Close()
end
self:SetMainUIVisible(true)
else
if self.EscortSceneView then
self.EscortSceneView:Close()
end
-- 非自己场景由其他模块负责判断主界面ui可见性
-- self:SetMainUIVisible(true)
end
if scene_mgr:IsEscortScene() and self.model:IsEscortState() then
-- self:TipsCall()
Scene:getInstance():CleanEscortInfo()--切了场景 需要清空一下跟车状态
self.model.not_pause = false--暂停一下
local function delay_method( )
self.model.not_pause = true
end
setTimeout(delay_method, 2)
local function delay_method( )
self.model:GoEscortNpc()
end
setTimeout(delay_method, 1)
end
if self.model.need_find_npc then
self.model.need_find_npc = false
local function delay_method( )
self.model:GoEscortNpc(0, true)
end
setTimeout(delay_method, 1)
end
end
function EscortController:SetMainUIVisible(value)
self:Fire(EventName.HIDE_TASK_TEAM_VIEW, not value)--任务栏
GlobalEventSystem:Fire(EventName.CHANGE_RIGHT_TIP_ICON, not value, MainUIModel.OTHER_MODE) --菜单伸展
end
function EscortController:RegisterAllProtocals( )
self:RegisterProtocal(50000, "Handle50000")--打开护送信息
self:RegisterProtocal(50001, "Handle50001")--刷新护送品质
self:RegisterProtocal(50002, "Handle50002")--开始护送
self:RegisterProtocal(50003, "Handle50003")--完成阶段护送
self:RegisterProtocal(50004, "Handle50004")--结算
self:RegisterProtocal(50008, "Handle50008")--取消护送
self:RegisterProtocal(50009, "Handle50009")--切换到任务NPC
self:RegisterProtocal(50010, "Handle50010")--通知场景的人玩家开始护送
end
-- ########### 打开护送信息 ##########
-- protocol=50000
-- {
-- c2s{
-- }
-- s2c{
-- object_id:int32 // 对象ID
-- convoy_counts:int8 // 今天护送次数
-- is_convoy:int8 // 是否护送状态
-- }
-- }
function EscortController:Handle50000( )
local scmd = SCMD50000.New(true)
print("HWR:EscortController [start:207] scmd:", scmd)
PrintTable(scmd)
print("HWR:EscortController [end]")
self.model:SetEscortBaseInfo(scmd)
self.model:Fire(EscortConst.ANS_BASIC_INFO)
self:ChangeScene()
end
-- ########### 刷新护送品质 ##########
-- protocol=50001
-- {
-- c2s{
-- auto_buy:int8 // 是否自动购买
-- }
-- s2c{
-- code:int32 // 错误码
-- object_id:int32 // 新的对象id
-- pray_val:int16 // 祝福值
-- reward_list:arr_object_list // 消耗列表
-- }
-- }
function EscortController:Handle50001( )
local scmd = SCMD50001.New(true)
print("HWR:EscortController [start:225] scmd:", scmd)
PrintTable(scmd)
print("HWR:EscortController [end]")
local base_info = self.model:GetEscortBaseInfo()
local cur_pray_val = base_info.pray_val or 0
local up_pray_val = scmd.pray_val - cur_pray_val
if scmd.object_id ~= 0 then
self.model:SetEscortObjectId(scmd.object_id, scmd.pray_val)
end
local str = "消耗%s刷新"
local len = #scmd.reward_list
if len > 0 then
local use_goods = false
local use_money = 0
if len > 0 then
for i,v in ipairs(scmd.reward_list) do
if v.style == 2 or v.style == 1 then
use_money = use_money + 1
elseif v.style == 0 then
use_goods = true
end
end
end
--如果花钱了 就优先提示花钱多少
--没花钱就提示消耗道具
local count = 0
for i,v in ipairs(scmd.reward_list) do
if use_money > 0 then--如果是花了钱的就不提示物品了
if v.style ~= 0 then
count = count + 1
local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v.style, v.typeId)
local goods_name,colorStr = GoodsModel:getInstance():getGoodsName(typeId, true)
if count < use_money then--到最后一个元素了没
str = string.format(str, goods_name..HtmlColorTxt("x"..v.count, colorStr).."、%s")
else
str = string.format(str, goods_name..HtmlColorTxt("x"..v.count, colorStr))
end
end
else
local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v.style, v.typeId)
local goods_name,colorStr = GoodsModel:getInstance():getGoodsName(typeId, true)
str = string.format(str, goods_name..HtmlColorTxt("x"..v.count, colorStr))
end
end
end
if scmd.code == 1 and len > 0 then
if scmd.pray_val == 0 then
self.model:Fire(EscortConst.UPGRADE_SUCCESS, scmd.object_id)
Message.show("提升品质成功")
else
local text = string.format("提升失败,获得%s点祝福值", up_pray_val)
Message.show(text)
end
Message.show(str,"success")
elseif len > 0 then
Message.show(str)
ErrorCodeShow(scmd.code)
else
ErrorCodeShow(scmd.code)
end
end
-- ########### 开始护送 ##########
-- protocol=50002
-- {
-- c2s{
-- is_double:int8 // 是否双倍 0否|1是
-- }
-- s2c{
-- code:int32 // 错误码
-- convoy_id:int32 // 护送id
-- is_double:int8 // 是否双倍 0否|1是
-- }
-- }
function EscortController:Handle50002( )
local scmd = SCMD50002.New(true)
self.model.is_go_on = true
if scmd.code == 1 then
GlobalEventSystem:Fire(EventName.HIDE_HORSE)
GlobalEventSystem:Fire(EscortConst.OPEN_ESCORT_VIEW, false)
local str = "护送开始"
Message.show(str,"success")
self:ChangeScene()
self.model:GoEscortNpc(1)
self.model:SetEscortCarFollow(true)
local main_vo = RoleManager.Instance.mainRoleInfo
local cfg = Config.Convoyobject[scmd.convoy_id]
local name = ""
if cfg then
name = Trim(cfg.name)
end
local temp_head_name = main_vo.name
local head_type = "100"..main_vo.career
local str = string.format("运气不错!接取了%s护送 任务!让我们开始护送吧!", name)
local data = {
head_type = head_type,
desc = str,
head_name = temp_head_name or "",
hide_time = 5,
dalay_time = 1,
is_task_type = true,
}
GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
self.model:SetEscortSceneLeftHideState(true)
TaskModel:getInstance():SetNeedTaskFlag(false)
self.model.not_show_go_ask_indeed = self.model.not_show_go_ask
self.model:SetIsLastDouble(scmd.is_double, true)
else
ErrorCodeShow(scmd.code)
end
end
-- ########### 完成阶段护送 ##########
-- protocol=50003
-- {
-- c2s{
-- type:int8 // 1阶段一|2阶段二
-- }
-- s2c{
-- result:int32 // 返回码
-- type:int8 // 1阶段一|2阶段二
-- }
-- }
function EscortController:Handle50003( )
local scmd = SCMD50003.New(true)
print("HWR:EscortController [start:337] scmd:", scmd)
PrintTable(scmd)
print("HWR:EscortController [end]")
if scmd.result == 1 and scmd.type == 2 then
Message.show("运送完成")
elseif scmd.result ~= 1 then
ErrorCodeShow(scmd.result)
end
end
-- ########### 结算 ##########
-- protocol=50004
-- {
-- s2c{
-- result:int8 // 1完美|2损坏|3超时|4主动取消护送
-- stage:int8 // 1第一阶段 2第二阶段
-- object_id:int32 // 对象ID
-- convoy_counts:int8 // 今天护送次数
-- }
-- }
function EscortController:Handle50004( )
local scmd = SCMD50004.New(true)
if scmd.result ~= 3 then
self.model:Fire(EscortConst.OPEN_ESCORT_RESULT_VIEW, true, scmd)
-- self:ChangeScene()
-- self:SetMainUIVisible(true)
self.model:SetEscortBaseInfo({})
else
self:SetMainUIVisible(true)
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50000)
self.model:SetEscortBaseInfo({})
end
if scmd.stage == 1 then
elseif scmd.stage == 2 then
self:SetMainUIVisible(true)
end
end
function EscortController:Handle50008( )
-- self.model:SetEscortStageInfo({})
self.model:SetEscortBaseInfo({})
self:ChangeScene()
OperateManager.Instance:StopMove()
end
-- ########### 切换到任务NPC##########
function EscortController:Handle50009( )
local scmd = SCMD50009.New(true)
if scmd.code ~= 1 then
ErrorCodeShow(scmd.code)
end
end
-- ########### 通知场景的人玩家开始护送 ##########
function EscortController:Handle50010( )
local scmd = SCMD50010.New(true)
local scene_mgr = SceneManager:getInstance()
local roleVo = scene_mgr:GetRoleVo(scmd.role_id)
if roleVo ~= nil then
roleVo:ChangeVar("escort_state", scmd.angel_id, nil, true)
else
end
end