JumpOneModel = JumpOneModel or BaseClass(BaseVo, true) local JumpOneModel = JumpOneModel JumpOneModel.REQUEST_INFO = "JumpOneModel.REQUEST_INFO"--请求协议 JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW = "JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW"--打开活动主界面 JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW = "JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW"--打开跳一跳场景界面 JumpOneModel.JUMP_UPDATE_BASEINFO = "JumpOneModel.JUMP_UPDATE_BASEINFO"--跳一跳刷新匹配信息 JumpOneModel.JUMP_UPDATE_MATCHINFO = "JumpOneModel.JUMP_UPDATE_MATCHINFO"--跳一跳刷新匹配信息 JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS = "JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS"--跳一跳刷新匹配队员 JumpOneModel.JUMP_UPDATE_GAME_INFO = "JumpOneModel.JUMP_UPDATE_GAME_INFO"--跳一跳游戏信息 JumpOneModel.JUMP_UPDATE_READY_TIME = "JumpOneModel.JUMP_UPDATE_READY_TIME"--跳一跳准备倒计时 JumpOneModel.JUMP_ADD_STEP = "JumpOneModel.JUMP_ADD_STEP"--跳一跳增加跳台 JumpOneModel.JUMP_START_JUMP = "JumpOneModel.JUMP_START_JUMP"--跳一跳开始跳跃 JumpOneModel.JUMP_UPDATE_MEMBER_INFO = "JumpOneModel.JUMP_UPDATE_MEMBER_INFO"--跳一跳更新玩家信息 JumpOneModel.JUMP_OFF_LINE_UPDATE = "JumpOneModel.JUMP_OFF_LINE_UPDATE"--跳一跳离线更新 JumpOneModel.JUMP_ON_LINE_UPDATE = "JumpOneModel.JUMP_ON_LINE_UPDATE"--跳一跳上线更新 JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW = "JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW"--跳一跳上结算界面 JumpOneModel.JUMP_END_NOTIFY = "JumpOneModel.JUMP_END_NOTIFY"--跳一跳跳跃结果通知 JumpOneModel.JUMP_GAME_END_NOTIFY = "JumpOneModel.JUMP_GAME_END_NOTIFY"--跳一跳游戏结束 JumpOneModel.JUMP_GAME_RESULT_NOTIFY = "JumpOneModel.JUMP_GAME_RESULT_NOTIFY"--跳一跳游戏结算 local GameMath_GetDistance = GameMath.GetDistance function JumpOneModel:__init() JumpOneModel.Instance = self self:Reset() end JumpOneModel.STEP_START_ID = 1000 JumpOneModel.SCENE_HEIGHT = 1.1 JumpOneModel.GAME_STATE = { WAIT = 1, READY = 2, GAME = 3, END = 4, } JumpOneModel.JUMP_TOUCH_STATE = { NONE = 1, DOWN = 2, UP = 3, END = 4, } JumpOneModel.PLAYER_STATE = { OFF_LINE = 0, --离线 ON_LINE = 1, --正常在线 WAITING = 2, --等待进场 GAME_OUT = 3, --已经淘汰 } function JumpOneModel:Reset() self.view_info = {}--界面信息 self.reward_info = {}--奖励列表 self.game_info = {} --游戏信息 self.act_cfg = {} --活动配置 self.result_info = false--结算数据 self.is_quit_game = false--是否手动退出 end function JumpOneModel:getInstance() if JumpOneModel.Instance == nil then JumpOneModel.Instance = JumpOneModel.New() end return JumpOneModel.Instance end --检测竞榜和图标是否需要开启 function JumpOneModel:SetActCfg(vo) self.act_cfg = {} self.act_cfg[vo.sub_type] = vo end --获取活动配置 function JumpOneModel:GetActCfg() for k,v in pairs(self.act_cfg) do return v end end --检测竞榜和图标是否需要开启 function JumpOneModel:CheckJumpOneIconBoolOpen() if #self.act_cfg == 0 then return end if not GetModuleIsOpen(331, 121, true) then return end local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE for k,v in pairs(self.act_cfg) do local icon_sub_type = base_type*1000 + v.sub_type if v.sub_type >= 10001 then icon_sub_type = base_type*100000 + v.sub_type end local cfg = v if cfg and self.view_info and self.view_info.base_info and self.view_info.base_info.end_time then local server_time = TimeUtil:getServerTime() local is_open = self.view_info.base_info.end_time - server_time if is_open > 0 then ActivityIconManager:getInstance():addIcon(icon_sub_type, is_open) else ActivityIconManager:getInstance():deleteIcon(icon_sub_type) end else ActivityIconManager:getInstance():deleteIcon(icon_sub_type) end end end --检测竞榜和图标是否需要显示匹配 function JumpOneModel:CheckJumpOneIconMatch() if #self.act_cfg == 0 then return end if not GetModuleIsOpen(331, 121, true) then return end local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE for k,v in pairs(self.act_cfg) do local sub_base_type = base_type*1000 local cfg = v if cfg then GlobalEventSystem:Fire(ActivityIconManager.UPDATE_FUNCICON_SPECIAL_TIPS, sub_base_type+v.sub_type) end end end --设置活动开放信息 function JumpOneModel:SetOpenInfo(vo) self.view_info.base_info = self.view_info.base_info or {} self.view_info.base_info.end_time = vo.end_time self:CheckJumpOneIconBoolOpen() end --设置基本信息 function JumpOneModel:SetJumoOneInfo(vo) self.view_info = self.view_info or {} self.view_info.base_info = vo self:CheckJumpOneIconBoolOpen() self:Fire(JumpOneModel.JUMP_UPDATE_BASEINFO) end --设置匹配信息 function JumpOneModel:SetJumoOneMatchInfo(vo) self.view_info = self.view_info or {} self.view_info.match_info = vo self:CheckJumpOneIconMatch() self:Fire(JumpOneModel.JUMP_UPDATE_MATCHINFO) end --当前是否在匹配状态 function JumpOneModel:IsInJumoOneMatchState() if self.view_info and self.view_info.match_info then return self.view_info.match_info.status == 1 end return false end --设置匹配队员列表 function JumpOneModel:SetJumoOneMatchMembers(vo) self.view_info = self.view_info or {} self.view_info.match_members = vo self:Fire(JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS) end --当前是否在匹配状态 function JumpOneModel:GetJumoOneMatchMembers() if self.view_info and self.view_info.match_members then return self.view_info.match_members.role_list end return nil end --清除匹配状态 function JumpOneModel:ResetJumoOneMatchInfo() self.view_info = {} self.game_info = {} self:CheckJumpOneIconMatch() end --设置跳一跳开始倒计时时间 function JumpOneModel:SetJumpOneReadyTIme(vo) self.game_info = self.game_info or {} self.game_info.ready_info = vo self.game_info.ready_info.left_time = vo.time - TimeUtil:getServerTime() + 1 self.game_info.game_state = JumpOneModel.GAME_STATE.READY self:Fire(JumpOneModel.JUMP_UPDATE_READY_TIME) end --设置跳一跳游戏信息 function JumpOneModel:SetJumpOneGameInfo(vo) self.game_info = {} self.game_info.game_info = vo self.game_info.game_state = JumpOneModel.GAME_STATE.WAIT local step_vo = { x = vo.x, y = vo.y, picture = vo.picture, radius = vo.radius, is_new = false, } vo.step_list = { [1] = step_vo, } if vo and #vo.step_list > 0 then for i,v in ipairs(vo.step_list) do v.step_id = JumpOneModel.STEP_START_ID + i Scene.Instance:CreateJumpOneStep(v, v.step_id) end end local role_list = vo.role_list for i,v in ipairs(role_list) do if v.life ~= 0 then if v.online == 1 then v.player_state = JumpOneModel.PLAYER_STATE.ONELINE else v.player_state = JumpOneModel.PLAYER_STATE.WAITING end else v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT end end self.game_info.game_info.role_list = role_list self:SyncAllRolePos(vo.x, vo.y) self:UpdateMemberVisible() self.is_quit_game = false self:Fire(JumpOneModel.JUMP_UPDATE_GAME_INFO) end --设置跳一跳新跳台 function JumpOneModel:JumpOneAddNewStep(vo) if not vo then return end local step_vo = { x = vo.x, y = vo.y, picture = vo.picture, radius = vo.radius, is_end = vo.is_end, is_new = true, } self.game_info.game_info = self.game_info.game_info or {} self.game_info.game_info.step_list = self.game_info.game_info.step_list or {} local list = self.game_info.game_info.step_list local step_id = JumpOneModel.STEP_START_ID + 1 if #list >= 5 then local step_info = list[1] Scene.Instance:DeleteJumpOneStep(step_info.step_id) table.remove(list, 1) end if #list > 0 then step_id = list[#list].step_id + 1 end step_vo.step_id = step_id table.insert(list , step_vo) self.game_info.game_info.step_list = list Scene.Instance:CreateJumpOneStep(step_vo, step_vo.step_id) self:UpdateMemberDir(vo.x, vo.y) end --设置跳一跳新跳台 function JumpOneModel:StartJump(vo) if not vo then return end self.game_info.is_sync_pos = false self.game_info.game_info = self.game_info.game_info or {} self.game_info.game_info.cur_jump_info = vo local left_jump_time = vo.jump_time - TimeUtil:getServerTime() local max_jump_time = self:GetMaxJumpTime() self.game_info.game_info.cur_jump_info.left_jump_time = left_jump_time > max_jump_time and max_jump_time or left_jump_time self.game_info.game_info.cur_jump_info.max_jump_time = max_jump_time self.game_info.game_info.round = vo.round self.game_info.game_state = JumpOneModel.GAME_STATE.GAME self:SetJumpTouchState(JumpOneModel.JUMP_TOUCH_STATE.NONE) local main_role = Scene.Instance.main_role if main_role then local pos_x, pos_y = main_role:GetRealPos() self:SyncAllRolePos(pos_x, pos_y) end self:UpdateMemberVisible() self:Fire(JumpOneModel.JUMP_START_JUMP) end --是否是我的回合 function JumpOneModel:IsMyTurn() local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info if cur_jump_info and RoleManager.Instance.mainRoleInfo.role_id == cur_jump_info.role_id then return true end end --获取当前回合 function JumpOneModel:GetCurTurn() if self.game_info.game_info and self.game_info.game_info.round then return self.game_info.game_info.round end return 1 end --跳一跳获取房间id function JumpOneModel:GetRoomId() return self.game_info.game_info and self.game_info.game_info.room_id or 1 end --跳一跳跳跃处理 function JumpOneModel:JumpOneDoJumpHandle(role_id, jump_time) local role = Scene.Instance:GetRole(role_id) local last_step_info = self:GetLastStepInfo() if role and last_step_info then if jump_time > self:GetJumpMaxTouchTime() then jump_time = self:GetJumpMaxTouchTime() end local is_success = self:CheckJumpResult(role, jump_time, last_step_info.x, last_step_info.y) local distance = nil local dir = role.direction local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time) local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist)) local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y) local function onJumpEnd() self:Fire(JumpOneModel.JUMP_END_NOTIFY, is_success and 1 or 0) end role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success) if self:IsMyTurn() then self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success) end end end --跳一跳跳跃处理 function JumpOneModel:JumpOneDoJumpHandleFromServer(role_id, jump_time,status, pos_x, pos_y) local last_step_info = self:GetLastStepInfo() local role_list = self:GetGameMemberInfo() if last_step_info and role_list and #role_list > 0 then for k,v in pairs(role_list) do if self:IsMyTurn() then if status == 1 and v.role_id ~= RoleManager.Instance.mainRoleInfo.role_id then local role = Scene.Instance:GetRole(v.role_id) if role then role:SetRealPos(pos_x, pos_y) end end else if v.role_id == role_id then local role = Scene.Instance:GetRole(v.role_id) if role then local is_success = status == 1 local distance = nil local dir = role.direction local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time) local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist)) local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y) local function onJumpEnd() if status == 1 then --如果触发到了下一个传送点,则同步到下一个传送点的位置 print('Cat:JumpOneModel.lua[353] data', self.game_info.is_sync_pos, pos_x, pos_y) if self.game_info.is_sync_pos then PrintTable(self.game_info.is_sync_pos) self:SyncAllRolePos(self.game_info.is_sync_pos.x, self.game_info.is_sync_pos.y) else self:SyncAllRolePos(pos_x, pos_y) end end self:Fire(JumpOneModel.JUMP_END_NOTIFY, status) end role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success, true) end end end end end end --等待玩家跳跃完成,在同步位置 function JumpOneModel:SyncAllRolePos(x, y ) local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for k,v in pairs(role_list) do local role = Scene.Instance:GetRole(v.role_id) if role then role:SetRealPos(x, y) end end end end --等待玩家跳跃完成,在同步位置 function JumpOneModel:SyncTargetRolePos(x, y,role_id) local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for k,v in pairs(role_list) do if v.role_id == role_id then local role = Scene.Instance:GetRole(v.role_id) if role then role:SetRealPos(x, y) end break end end end end --跳一跳完美跳跃 *********** 内挂 function JumpOneModel:JumpOneDoMvpJumpHandle(role_id) local role = Scene.Instance:GetRole(role_id) local last_step_info = self:GetLastStepInfo() if role and last_step_info then local is_success = true local end_pos = co.TableXY(last_step_info.x , last_step_info.y) local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y) local dis = GameMath_GetDistance(end_pos.x, end_pos.y, start_pos.x, start_pos.y, true) local move_hspeed ,move_vspeed, jump_time = role:GetGameMvpJumpSpeedAndTime(dis) local function onJumpEnd() self:Fire(JumpOneModel.JUMP_END_NOTIFY, 1) end role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success) jump_time = math.floor(jump_time * 1000) if self:IsMyTurn() then self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success) end --GlobalEventSystem:Fire(SceneEventType.GAME_FLY_JUMP, jump_time,nil,nil,nil,nil,is_fail) end end --跳一跳同步跳跃 function JumpOneModel:SyscJumpHandle(pos_x, pos_y, jump_time, is_success) local room_id = self:GetRoomId() local status = is_success and 1 or 0 local ticket = string.lower(Util.md5(room_id .. pos_x .. pos_y .. status .. jump_time .. "666JKLSDFRTYABJK666")) local sub_type = self:GetActSubType() self:Fire(JumpOneModel.REQUEST_INFO, 45910,room_id, pos_x, pos_y, status, jump_time, ticket, sub_type) end --跳一跳,服务器返回起跳准备处理 function JumpOneModel:JumpOneReadyJumpHandleFromServer(role_id) --每次起跳前,同步下所有人的坐标和朝向 local main_role = Scene.Instance.main_role if main_role then local pos_x, pos_y = main_role:GetRealPos() self:SyncAllRolePos(pos_x, pos_y) end local last_step_info = self:GetLastStepInfo() if last_step_info then self:UpdateMemberDir(last_step_info.x, last_step_info.y) end self:JumpOneReadyJumpHandle(role_id, true) end --跳一跳起跳跳跃处理 function JumpOneModel:JumpOneReadyJumpHandle(role_id, from_server) if from_server and role_id == RoleManager.Instance.mainRoleInfo.role_id then return end local role = Scene.Instance:GetRole(role_id) if role then role:DoGameReadyJump() end end --跳一跳起跳跳跃处理 function JumpOneModel:JumpOneJumpHandle(role_id) local role = Scene.Instance:GetRole(role_id) if role then role:DoGameReadyJump() end end --跳一跳摔倒处理 function JumpOneModel:JumpOneJumpDownHandle(role_id) local role = Scene.Instance:GetRole(role_id) if role then role:DoGameDownJump() end end --跳一跳更新玩家信息 function JumpOneModel:UpdateMemberInfo(vo) local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for k,v in pairs(role_list) do if v.role_id == vo.role_id then v.life = vo.life if v.life == 0 then v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT end self:Fire(JumpOneModel.JUMP_UPDATE_MEMBER_INFO) break end end end end --跳一跳更新玩家信息 function JumpOneModel:GetGameMemberInfo() local list = {} if self.game_info and self.game_info.game_info then list = self.game_info.game_info.role_list end return list end --跳一跳更新玩家信息 function JumpOneModel:GetGameMyInfo() local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for k,v in pairs(role_list) do if v.role_id == RoleManager.Instance.mainRoleInfo.role_id then return v end end end end --跳一跳更新玩家信息 function JumpOneModel:UpdateMemberDir(target_x, target_y) local role_list = self:GetGameMemberInfo() local dir2 = Vector2.New(0, 1) if not role_list or #role_list == 0 then return end for i,v in ipairs(role_list) do local role = Scene.Instance:GetRole(v.role_id) if role then local pos_x, pos_y = role:GetRealPos() local dir1 = Vector2.New(target_x - pos_x , target_y - pos_y ) dir1 = dir1:Normalize() local rotate_y = Vector2.Angle(dir1, dir2) role:SetDirection(Vector2.New(pos_x, pos_y), Vector2.New(target_x, target_y), true) end end end --跳一跳检测跳跃成功还是失败 function JumpOneModel:CheckJumpResult(role, jump_time, target_x, target_y) if role then local cur_jump_info = self:GetCurJumpInfo() local last_step_info = self:GetLastStepInfo() local step_radius = last_step_info.radius / 100 / 2 + 1 local dist = role:GetGameJumpDistanceAndSpeed(jump_time) local dir = role.direction local end_pos = co.TableXY(role.real_pos.x + dir.x * dist, role.real_pos.y + dir.y * dist) local pos_1_x = end_pos.x / MainCamera.PixelsToUnits local pos_1_y = end_pos.y / MainCamera.PixelsToUnits local pos_2_x = target_x / MainCamera.PixelsToUnits local pos_2_y = target_y / MainCamera.PixelsToUnits local length = GameMath_GetDistance(pos_1_x, pos_1_y, pos_2_x, pos_2_y, false) print('Cat:JumpOneModel.lua[539] cur pos ', pos_1_x, pos_1_y, pos_2_x, pos_2_y) print('Cat:JumpOneModel.lua[332] length', length, step_radius, length <= step_radius) return length <= step_radius end return false end --跳一跳获取当前跳跃的信息 function JumpOneModel:GetCurJumpInfo() local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info or false return cur_jump_info end --跳一跳获取最新一个跳台的信息 function JumpOneModel:GetLastStepInfo() local step_info if self.game_info.game_info and self.game_info.game_info.step_list then local list = self.game_info.game_info.step_list step_info = list[#list] end return step_info end --跳一跳清除所有跳台 function JumpOneModel:ClearAllStep() local step_list = self.game_info.game_info and self.game_info.game_info.step_list or false if step_list and #step_list > 0 then for k,v in pairs(step_list) do Scene.Instance:DeleteJumpOneStep(v.step_id) end end end --跳一跳内部切场景 function JumpOneModel:SyncGameScene(vo) self.game_info.is_sync_pos = vo local main_role = Scene.Instance.main_role if main_role and vo then main_role:SetRealPos(vo.x, vo.y) GlobalEventSystem:Fire(SceneEventType.MOVEREQUEST, vo.x, vo.y, MOVE_TYPE.BLINK) end end --跳一跳更新玩家的显示状态 function JumpOneModel:UpdateMemberVisible() local show_role_id = false local game_state = self:GetGameState() if game_state == JumpOneModel.GAME_STATE.GAME and not self.is_quit_game then local cur_jump_info = self:GetCurJumpInfo() show_role_id = cur_jump_info.role_id ~= 0 and cur_jump_info.role_id or RoleManager.Instance.mainRoleInfo.role_id else show_role_id = RoleManager.Instance.mainRoleInfo.role_id end local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for k,v in pairs(role_list) do local role = Scene.Instance:GetRole(v.role_id) if role then role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, v.role_id ~= show_role_id) end end end end --跳一跳获取游戏状态 function JumpOneModel:GetGameState() local game_state = self.game_info and self.game_info.game_state or JumpOneModel.GAME_STATE.WAIT return game_state end --跳一跳当前跳跃按下的状态 function JumpOneModel:GetJumpTouchState() return self.game_info.game_info and self.game_info.game_info.jump_touch_state and self.game_info.game_info.jump_touch_state or JumpOneModel.JUMP_TOUCH_STATE.NONE end --跳一跳当前跳跃按下的状态 function JumpOneModel:SetJumpTouchState(state) self.game_info.game_info = self.game_info.game_info or {} self.game_info.game_info.jump_touch_state = state end --跳一跳离线更新 function JumpOneModel:SetOffLinePlayer(vo) self.game_info.off_line_info = self.game_info.off_line_info or {} self.game_info.off_line_info[vo.role_id] = vo local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for i,v in ipairs(role_list) do if v.role_id == vo.role_id then if v.life ~= 0 then v.player_state = JumpOneModel.PLAYER_STATE.OFF_LINE end break end end end PrintTable(self.game_info.off_line_info) self:Fire(JumpOneModel.JUMP_OFF_LINE_UPDATE) end --跳一跳上线更新 function JumpOneModel:SetOnLinePlayer(vo) local role_list = self:GetGameMemberInfo() if role_list and #role_list > 0 then for i,v in ipairs(role_list) do if v.role_id == vo.role_id then if v.life ~= 0 then v.player_state = JumpOneModel.PLAYER_STATE.ON_LINE end break end end end --玩家上线时,同步一次这个玩家的状态 local main_role = Scene.Instance.main_role if main_role then local pos_x, pos_y = main_role:GetRealPos() self:SyncTargetRolePos(pos_x, pos_y, vo.role_id) end self:UpdateMemberVisible() local last_step_info = self:GetLastStepInfo() if last_step_info then self:UpdateMemberDir(last_step_info.x, last_step_info.y) end self:Fire(JumpOneModel.JUMP_ON_LINE_UPDATE) end --跳一跳获取当前跳跃者的role_id function JumpOneModel:GetCurjumperRoleId() local cur_jump_info = self:GetCurJumpInfo() local role_id = cur_jump_info and cur_jump_info.role_id or -1 return role_id end --跳一跳获取当前跳跃者的role_id function JumpOneModel:GetPlayerStateByRoleId(role_id) local player_state = JumpOneModel.PLAYER_STATE.ON_LINE local member_list = self:GetGameMemberInfo() if member_list and #member_list > 0 then for i,v in ipairs(member_list) do if v.role_id == role_id then player_state = v.player_state end end end return player_state end --跳一跳获取跳跃者的信息 function JumpOneModel:GetPlayerInfoRoleId(role_id) local member_list = self:GetGameMemberInfo() if member_list and #member_list > 0 then for i,v in ipairs(member_list) do if v.role_id == role_id then return v end end end end --跳一跳获取玩家的命数 function JumpOneModel:GetPlayerLife(role_id) local life_cnt = 0 local member_list = self:GetGameMemberInfo() if member_list and #member_list > 0 then for i,v in ipairs(member_list) do if v.role_id == role_id then life_cnt = v.life end end end return life_cnt end --跳一跳设置结算界面 function JumpOneModel:SetResultInfo(vo) self.result_info = vo self:Fire(JumpOneModel.JUMP_GAME_RESULT_NOTIFY) end --跳一跳游戏结束 function JumpOneModel:SetGameEnd(vo) self.game_info.game_state = JumpOneModel.GAME_STATE.END local time = vo.end_time - TimeUtil:getServerTime( ) self:Fire(JumpOneModel.JUMP_GAME_END_NOTIFY, time) end --跳一跳获取最少匹配时间 function JumpOneModel:GetMinMatchTime() local time = 0 local cfg = Config.Jumpactkv if cfg and cfg["jump_wait"] then time = cfg["jump_wait"].value_content end return time end --跳一跳获取最少匹配人数 function JumpOneModel:GetMinMatchNum() local num = 0 local cfg = Config.Jumpactkv if cfg and cfg["jump_min_num"] then num = cfg["jump_min_num"].value_content end return num end --跳跃最大蓄力时间 function JumpOneModel:GetJumpMaxTouchTime() if not self.jump_max_touch_time then local cfg = Config.Jumpactkv if cfg and cfg["jump_max_second"] then self.jump_max_touch_time = cfg["jump_max_second"].value_content self.jump_max_touch_time = self.jump_max_touch_time * 1000 else self.jump_max_touch_time = 4000 end end return self.jump_max_touch_time end --跳一跳最大跳跃操作时间 function JumpOneModel:GetMaxJumpTime() if not self.max_jump_time then local cfg = Config.Jumpactkv if cfg and cfg["jump_time"] then self.max_jump_time = cfg["jump_time"].value_content else time = 15 end end return self.max_jump_time end --获取角色的vo信息,用于不在线的玩家 function JumpOneModel:GetRoleVoByRoleId(role_id) local role_list = self:GetGameMemberInfo() local role_vo if role_list and #role_list > 0 then for i,v in ipairs(role_list) do if v.role_id == role_id then role_vo = v end end end return role_vo end --获取匹配开始时间 function JumpOneModel:GetMatchReadTime() local time = 0 if self.view_info.match_members and self.view_info.match_members.begin_time ~= 0 then time = self.view_info.match_members.begin_time - TimeUtil:getServerTime() end return time end --获取活动奖励 function JumpOneModel:GetlRewardList(base_type, sub_type) if not self.reward_info or not self.reward_info[base_type] or not self.reward_info[base_type][sub_type] then self.reward_info = self.reward_info or {} local act_info = CustomActivityModel:getInstance():getOneActRewardList(base_type, sub_type) if act_info then local list = {} for i=#act_info.reward_list,1,-1 do local t = stringtotable(act_info.reward_list[i].reward) table.insert(list, t[1]) end self.reward_info = self.reward_info or {} self.reward_info[base_type] = self.reward_info[base_type] or {} self.reward_info[base_type][sub_type] = list end end return self.reward_info and self.reward_info[base_type] and self.reward_info[base_type][sub_type] or {} end --获取活动开放 function JumpOneModel:GetOpenTime(open_time_table, last_time_table) local str = "" if not open_time_table or not last_time_table or open_time_table == 0 or #last_time_table == 0 then return end for i=1,#open_time_table do if str ~= "" then str = str .. "\n" end local start_str = self:TimeTable2String(open_time_table[i]) local end_time_table = { [1] = tonumber(open_time_table[i][1]) + math.floor(tonumber(last_time_table[2]) / 3600), [2] = tonumber(open_time_table[i][2]) + math.floor(tonumber(last_time_table[2]) % 3600), } local end_str = self:TimeTable2String(end_time_table) local s = string.format("第%s场 %s ~%s", WordManager:getHanZiNumber(i), start_str, end_str) str = str .. s end return str end --解析时间table function JumpOneModel:TimeTable2String(time_table) local str = "" if time_table and time_table[1] and time_table[2] then local h_s = tonumber(time_table[1]) > 10 and tostring(time_table[1]) or ("0" .. tostring(time_table[1])) local m_s = tonumber(time_table[2]) > 10 and tostring(time_table[2]) or ("0" .. tostring(time_table[2])) str = h_s .. ":" .. m_s end return str end --跳跃结束延时协议操作 function JumpOneModel:SyncJumpEndScmd() local delay_func = function () local sub_type = self:GetActSubType() self:Fire(JumpOneModel.REQUEST_INFO, 45909, self:GetRoomId(), 2, sub_type) end setTimeout(delay_func,0.5) end --获取当前活动的场次(客户端这里只会存在一场)) function JumpOneModel:GetActSubType() local sub_type = 0 if self.act_cfg then for k,v in pairs(self.act_cfg) do sub_type = k break end end return sub_type end