EscortModel = EscortModel or BaseClass(BaseModel)
|
|
local EscortModel = EscortModel
|
|
|
|
function EscortModel:__init()
|
|
EscortModel.Instance = self
|
|
self.max_escort_num = Config.Convoykv["daily_convy_times"].value_content
|
|
self.double_escort_cost = stringtotable(Config.Convoykv["convoy_double_cost"].value_content)
|
|
-- self.max_rob_num = Config.Convoykv["daily_rob_times"].value_content
|
|
self.max_rob_num = 3
|
|
self.escort_pve_dun = 9999
|
|
-- self.escort_pve_dun = Config.Convoykv["convoy_dun_id"].value_content
|
|
self:Reset()
|
|
end
|
|
|
|
function EscortModel:Reset()
|
|
self.escort_base_info = {} --活动基础信息
|
|
self.escort_blood_info = {} --车的血量信息
|
|
self.escort_stage_info = {} --护送阶段信息
|
|
self.temp_pos = {} --车的上一个目的地
|
|
self.escort_rob_info = {} --打劫奖励信息
|
|
self.is_follow_car = false --是否跟随车
|
|
self.is_go_on = true --一阶段结算之后是否继续护送
|
|
self.not_show_escort_ask = false --是否不显示购买了
|
|
self.is_auto_buy = false --是否自动购买护送令牌
|
|
self.is_improve_to = false --是否提升至某个车
|
|
self.not_show_go_ask = false --是否不提示双倍时间了
|
|
self.escort_skill_num = false --是否提升至某个车
|
|
self.not_pause = true --是否暂停判断
|
|
|
|
self.last_use_defend_skill_time = 0 --上次使用庇护技能的时间戳
|
|
end
|
|
|
|
function EscortModel:GetInstance()
|
|
if EscortModel.Instance == nil then
|
|
EscortModel.Instance = EscortModel.New()
|
|
end
|
|
return EscortModel.Instance
|
|
end
|
|
|
|
function EscortModel:getInstance()
|
|
if EscortModel.Instance == nil then
|
|
EscortModel.New()
|
|
end
|
|
return EscortModel.Instance
|
|
end
|
|
--等级 护送对象id 是否协助
|
|
function EscortModel:GetEscortExpByLv( lv, escort_id, is_support )
|
|
local vip_ratio = 0
|
|
local vip = RoleManager.Instance.mainRoleInfo.vip_flag
|
|
if Config.Vipprivilege[vip.."@8"] then
|
|
vip_ratio = Config.Vipprivilege[vip.."@8"].value
|
|
end
|
|
local cfg = Config.Convoyexp
|
|
local convoy_exp = 0
|
|
for i,v in pairsByKeys(cfg) do
|
|
if v.lv_low <= lv and lv <= v.lv_high then
|
|
if is_support then
|
|
convoy_exp = v.supporting_exp
|
|
else
|
|
convoy_exp = v.convoy_exp
|
|
end
|
|
break
|
|
end
|
|
end
|
|
if escort_id and not is_support then
|
|
local double_ratio = self:CurTimeIsDouble() and 2 or 1
|
|
if Config.Convoyobject[escort_id] then
|
|
convoy_exp = (Config.Convoyobject[escort_id].stage_one_ratio)/100 * convoy_exp
|
|
end
|
|
end
|
|
-- 主界面只在双倍时间显示双倍奖励
|
|
if self:CurTimeIsDouble() then
|
|
convoy_exp = convoy_exp * 2
|
|
end
|
|
return convoy_exp
|
|
end
|
|
|
|
function EscortModel:GetEscortNameByIndex( index )
|
|
local count = 1
|
|
local cfg = Config.Convoyobject
|
|
for k,v in pairsByKeys(cfg) do
|
|
if count == index then
|
|
return Trim(v.name)
|
|
end
|
|
count = count + 1
|
|
end
|
|
return ""
|
|
end
|
|
|
|
function EscortModel:SetEscortBaseInfo( vo )
|
|
self.escort_base_info = vo
|
|
self:SetIsLastDouble(vo.is_double)
|
|
if self.escort_base_info.is_convoy == 0 then
|
|
Scene:getInstance():CleanEscortInfo()
|
|
end
|
|
self:ChangeVar("escort_base_info", self.escort_base_info, false, true)
|
|
end
|
|
|
|
function EscortModel:GetEscortBaseInfo( )
|
|
return self.escort_base_info
|
|
end
|
|
|
|
function EscortModel:SetIsLastDouble(is_double, force)
|
|
if force then
|
|
self.last_double_escort = is_double
|
|
else
|
|
self.last_double_escort = self.last_double_escort or is_double
|
|
end
|
|
self:Fire(EscortConst.CHANGE_LAST_DOUBLE)
|
|
end
|
|
|
|
function EscortModel:SetEscortObjectId( id,pray_val )
|
|
self.escort_base_info.object_id = id
|
|
self.escort_base_info.pray_val = pray_val
|
|
self:ChangeVar("escort_base_info", self.escort_base_info, false, true)
|
|
end
|
|
|
|
function EscortModel:SetEscortBloodInfo( vo )
|
|
self.escort_blood_info = vo
|
|
self:ChangeVar("escort_blood_info", self.escort_blood_info, false, true)
|
|
end
|
|
|
|
function EscortModel:GetEscortBloodInfo( )
|
|
return self.escort_blood_info
|
|
end
|
|
|
|
function EscortModel:SetEscortStageInfo( vo )
|
|
self.escort_stage_info = vo
|
|
-- self.escort_blood_info = {
|
|
-- object_id = vo.convoying,
|
|
-- hp = vo.hp,
|
|
-- hp_max = vo.hp_lim,
|
|
-- }
|
|
if TableSize(vo) == 0 then--退出护送了清空
|
|
Scene:getInstance():CleanEscortInfo()
|
|
end
|
|
self:ChangeVar("escort_stage_info", self.escort_stage_info, false, true)
|
|
end
|
|
|
|
function EscortModel:GetEscortStageInfo( )
|
|
return self.escort_stage_info
|
|
end
|
|
|
|
function EscortModel:GetEscortObjectIndexById( id )
|
|
local count = 1
|
|
local is_break = false
|
|
local cfg = Config.Convoyobject
|
|
for k,v in pairsByKeys(cfg) do
|
|
if k == id then
|
|
is_break = true
|
|
break
|
|
end
|
|
count = count + 1
|
|
end
|
|
if is_break then
|
|
return count
|
|
else
|
|
return 1
|
|
end
|
|
end
|
|
|
|
--飞到护送npc
|
|
function EscortModel:FlyToNpc( )
|
|
if SceneManager:getInstance():IsMainCityorYieldScene() then
|
|
if self:IsEscortState() then
|
|
Message.show("您当前正在护送中~")
|
|
return
|
|
end
|
|
|
|
-- if self:IsOverMaxCount() then
|
|
-- Message.show("今日护送次数已用完~")
|
|
-- return
|
|
-- end
|
|
|
|
if SceneManager:getInstance():GetSceneId() == EscortConst.ESCORT_START_SCENE
|
|
or SceneManager:getInstance():GetSceneId() == EscortConst.KF_ESCORT_START_SCENE then
|
|
self:GoEscortNpc()
|
|
else
|
|
GlobalEventSystem:Fire(EventName.FORCE_STOP_DO_TASK)
|
|
GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT)
|
|
if self.max_escort_num - self:GetEscortTimes() > 0 then
|
|
self.need_find_npc = true
|
|
end
|
|
self:Fire(EscortConst.REQUEST_SCMD_EVENT, 50009)
|
|
end
|
|
else
|
|
Message.show("请先退出当前场景")
|
|
end
|
|
end
|
|
--[[
|
|
前往护送npc
|
|
stage: 0 领取阶段
|
|
1 护送阶段一
|
|
2 护送阶段二
|
|
3 缓冲状态(一阶段未结算 二阶段还没开始)
|
|
]]
|
|
function EscortModel:GoEscortNpc( stage, need_open_view )
|
|
local cur_stage = 0
|
|
stage = stage or cur_stage --不传就根据当前阶段去处理
|
|
local start_npc_id, start_scene_id = EscortConst.START_NPC, EscortConst.ESCORT_START_SCENE
|
|
local end_npc_id, end_scene_id = EscortConst.END_NPC, EscortConst.ESCORT_END_SCENE
|
|
-- local collect_id, collect_pos = EscortConst.ESCORT_COLLECT_ID, EscortConst.ESCORT_COLLECT_POS
|
|
if KfWorldModel:GetInstance():IsKFCityOpen() then
|
|
start_npc_id, start_scene_id = EscortConst.KF_START_NPC, EscortConst.KF_ESCORT_START_SCENE
|
|
end_npc_id, end_scene_id = EscortConst.KF_END_NPC, EscortConst.KF_ESCORT_END_SCENE
|
|
-- collect_id, collect_pos = EscortConst.KF_ESCORT_COLLECT_ID, EscortConst.KF_ESCORT_COLLECT_POS
|
|
end
|
|
--应对当前正在运送中 且在第一个场景就被拉进去跨服了 此时采集本服场景里面的采集物
|
|
if SceneManager.Instance:GetSceneId() == EscortConst.ESCORT_START_SCENE and start_scene_id == EscortConst.KF_ESCORT_START_SCENE then
|
|
start_scene_id = EscortConst.ESCORT_START_SCENE
|
|
end
|
|
local cur_id = SceneManager:getInstance():GetSceneId()
|
|
if cur_id == EscortConst.ESCORT_END_SCENE then--如果已经在第二个场景了 就修正一下数据
|
|
end_npc_id, end_scene_id = EscortConst.END_NPC, EscortConst.ESCORT_END_SCENE
|
|
elseif cur_id == EscortConst.KF_ESCORT_END_SCENE then--如果已经在第二个场景了 就修正一下数据
|
|
end_npc_id, end_scene_id = EscortConst.KF_END_NPC, EscortConst.KF_ESCORT_END_SCENE
|
|
end
|
|
if cur_id == start_scene_id and self:IsEscortState( ) then--如果是在开始场景 那就去找NPC
|
|
stage = 1
|
|
elseif cur_id == end_scene_id and self:IsEscortState( ) then
|
|
stage = 2
|
|
end
|
|
if stage == 0 then--去找接任务的NPC的
|
|
local function callback( ... )
|
|
if need_open_view then
|
|
GlobalEventSystem:Fire(EscortConst.OPEN_ESCORT_VIEW, true)
|
|
end
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.type = FindVo.NPC
|
|
findVo.id = start_npc_id
|
|
findVo.sceneId = start_scene_id
|
|
findVo.call_back = callback
|
|
GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
elseif stage == 1 then
|
|
local pos_data = EscortConst.ESCORT_DOOR_POS
|
|
local function callback( ... )
|
|
self:Fire(EscortConst.REQUEST_SCMD_EVENT, 50003,1)
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.type = FindVo.POINT
|
|
findVo.sceneId = start_scene_id
|
|
findVo.x = pos_data[1]/ SceneObj.LogicRealRatio.x
|
|
findVo.y = pos_data[2]/ SceneObj.LogicRealRatio.y
|
|
findVo.call_back = callback
|
|
GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
elseif stage == 2 then
|
|
local function callback( ... )
|
|
self:Fire(EscortConst.REQUEST_SCMD_EVENT, 50003,2)
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.type = FindVo.NPC
|
|
findVo.id = end_npc_id
|
|
findVo.sceneId = end_scene_id
|
|
findVo.call_back = callback
|
|
GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
-- elseif stage == 3 then
|
|
-- local function call_back( )
|
|
-- self.try_collect_left_num = 6--采集物未创建的话,每隔一段时间尝试一下,6次就够了
|
|
-- local try_to_collect = nil--必须这么写
|
|
-- try_to_collect = function ( )
|
|
-- local monster = Scene.Instance:FindNearestMonster(collect_id, false, true)
|
|
-- if monster then
|
|
-- local main_role = Scene.Instance.main_role
|
|
-- if main_role then
|
|
-- if self.task_collect_start_real_pos == nil then
|
|
-- self.task_collect_start_real_pos = co.TableXY(main_role:GetRealPos())
|
|
-- else
|
|
-- self.task_collect_start_real_pos.x = main_role.real_pos.x
|
|
-- self.task_collect_start_real_pos.y = main_role.real_pos.y
|
|
-- end
|
|
-- if self.task_collect_end_real_pos == nil then
|
|
-- self.task_collect_end_real_pos = co.TableXY(monster:GetRealPos())
|
|
-- else
|
|
-- self.task_collect_end_real_pos.x = monster.real_pos.x
|
|
-- self.task_collect_end_real_pos.y = monster.real_pos.y
|
|
-- end
|
|
-- main_role:SetDirection(self.task_collect_start_real_pos, self.task_collect_end_real_pos, false, true)
|
|
-- end
|
|
-- EventSystem.Fire(GlobalEventSystem,EventName.OPEN_COLLECT_VIEW, monster.id, monster:GetVo().type_id, monster:GetVo().pick_time)
|
|
-- else
|
|
-- self.try_collect_left_num = self.try_collect_left_num - 1
|
|
-- --此时采集物可能还未创建,所以延迟一段时间再尝试
|
|
-- if not self.delay_collect_id and self.try_collect_left_num >= 0 then
|
|
-- self.delay_collect_id = GlobalTimerQuest:AddPeriodQuest(try_to_collect, 0.5, 1)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- try_to_collect()
|
|
-- end
|
|
-- local findVo = FindVo.New()
|
|
-- findVo.sceneId = start_scene_id --pos_data[1][1]
|
|
-- findVo.type = FindVo.POINT --不能用findVo.MONSTER,不然会去找最近的怪物的
|
|
-- findVo.x = pos_data[1]/ SceneObj.LogicRealRatio.x
|
|
-- findVo.y = pos_data[2]/ SceneObj.LogicRealRatio.y
|
|
-- findVo.call_back = call_back
|
|
-- GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
end
|
|
end
|
|
|
|
--获取今日已护送次数
|
|
function EscortModel:GetEscortTimes( )
|
|
if self.escort_base_info and self.escort_base_info.convoy_counts then
|
|
return self.escort_base_info.convoy_counts
|
|
end
|
|
return 0
|
|
end
|
|
--获取今日护送最大次数
|
|
function EscortModel:GetMaxEscortTimes( )
|
|
return self.max_escort_num or 3
|
|
end
|
|
--获取今日已抢夺次数
|
|
function EscortModel:GetRobTimes( )
|
|
-- if self.escort_base_info and self.escort_base_info.rob_counts then
|
|
-- return self.escort_base_info.rob_counts
|
|
-- end
|
|
return 0
|
|
end
|
|
|
|
--获取今日抢夺最大次数
|
|
function EscortModel:GetMaxRobTimes( )
|
|
return self.max_rob_num
|
|
end
|
|
|
|
--护送是否已达最大次数
|
|
function EscortModel:IsOverMaxCount( )
|
|
if self.escort_base_info and self.escort_base_info.convoy_counts then
|
|
return self.escort_base_info.convoy_counts == self.max_escort_num
|
|
end
|
|
end
|
|
--现在是否双倍时间, 外部不能用此方法,因为数据不会实时刷新(现在已经用了,跪下来求了很久)
|
|
function EscortModel:CurTimeIsDouble( )
|
|
local bool = false
|
|
local daily_info = DailyModel.Instance:GetAcOpenStatus(500,1)
|
|
if daily_info then
|
|
bool = daily_info.status == 1
|
|
end
|
|
return bool
|
|
end
|
|
|
|
--是否在护送状态
|
|
function EscortModel:IsEscortState( )
|
|
if TableSize(self.escort_base_info) > 0 then
|
|
return self.escort_base_info.is_convoy == 1
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
--根据类型来获取阶段奖励
|
|
function EscortModel:GetStageRewardByType( type )
|
|
local escort_data = self:GetEscortBaseInfo()
|
|
if TableSize(escort_data) == 0 then
|
|
return {}
|
|
end
|
|
local cfg_data = Config.Convoyobject[escort_data.object_id]
|
|
local double_ratio = self:CurTimeIsDouble() and 2 or 1
|
|
if type == "escort" then
|
|
local lv = RoleManager.Instance.mainRoleInfo.level
|
|
local cfg_exp = Config.Convoyexp
|
|
local convoy_exp = 0
|
|
for i,v in pairsByKeys(cfg_exp) do
|
|
if v.lv_low <= lv and lv <= v.lv_high then
|
|
convoy_exp = v.convoy_exp
|
|
break
|
|
end
|
|
end
|
|
local total_data = {}
|
|
local data2 = stringtotable(cfg_data.award)
|
|
local exp_num2 = convoy_exp * cfg_data.stage_one_ratio/100
|
|
if self:CurTimeIsDouble() or self.last_double_escort == 1 then
|
|
exp_num2 = exp_num2 * 2
|
|
end
|
|
local exp_data2 = {
|
|
[1] = 0,
|
|
[2] = EscortConst.EXP_TPYE_ID,
|
|
[3] = exp_num2
|
|
}
|
|
table.insert(data2, exp_data2)
|
|
table.insert(total_data, data2)
|
|
return total_data
|
|
elseif type == "escort_stage" then
|
|
local vip_ratio = 0
|
|
local vip = RoleManager.Instance.mainRoleInfo.vip_flag
|
|
if Config.Vipprivilege[vip.."@8"] then
|
|
vip_ratio = Config.Vipprivilege[vip.."@8"].value
|
|
end
|
|
local lv = RoleManager.Instance.mainRoleInfo.level
|
|
local cfg_exp = Config.Convoyexp
|
|
local convoy_exp = 0
|
|
for i,v in pairsByKeys(cfg_exp) do
|
|
if v.lv_low <= lv and lv <= v.lv_high then
|
|
convoy_exp = v.convoy_exp
|
|
break
|
|
end
|
|
end
|
|
--第一阶段
|
|
local total_data = {}
|
|
local data1 = {}
|
|
local exp_num1 = convoy_exp * cfg_data.stage_one_ratio/100
|
|
if self:CurTimeIsDouble() or self.last_double_escort == 1 then
|
|
exp_num1 = exp_num1 * 2
|
|
end
|
|
local exp_data1 = {
|
|
[1] = 0,
|
|
[2] = EscortConst.EXP_TPYE_ID,
|
|
[3] = exp_num1
|
|
}
|
|
table.insert(data1, exp_data1)
|
|
table.insert(total_data, data1)
|
|
return total_data
|
|
end
|
|
return {}
|
|
end
|
|
|
|
function EscortModel:SetTempPos( x,y )
|
|
local data = {
|
|
x = x,
|
|
y = y,
|
|
}
|
|
self.temp_pos[#self.temp_pos+1] = data
|
|
end
|
|
|
|
function EscortModel:CleanTempPos( )
|
|
self.temp_pos = {}
|
|
end
|
|
|
|
function EscortModel:GetTempPos( )
|
|
if #self.temp_pos >= 1 then
|
|
local temp_pos = table.remove(self.temp_pos,1)
|
|
local temp_x = temp_pos.x
|
|
local temp_y = temp_pos.y
|
|
return temp_x, temp_y
|
|
else
|
|
return nil,nil
|
|
end
|
|
end
|
|
--设置是否跟随护送车
|
|
function EscortModel:SetEscortCarFollow( bool )
|
|
self.temp_pos = {}
|
|
self.is_follow_car = bool
|
|
self:Fire(EscortConst.UPDATE_BUTTON_STATE)
|
|
end
|
|
--是否在跟车
|
|
function EscortModel:IsFollowEscortCar( bool )
|
|
return self.is_follow_car
|
|
end
|
|
--判断是否是自己的车
|
|
function EscortModel:IsMyEscortCar( monster_id )
|
|
local stage_info = self:GetEscortStageInfo()
|
|
return stage_info.monster_id == monster_id
|
|
end
|
|
--获取护送id
|
|
function EscortModel:GetMyEscortObjectId( )
|
|
local stage_info = self:GetEscortStageInfo()
|
|
return stage_info.convoying or 0
|
|
end
|
|
|
|
function EscortModel:SetEscortRobInfo( vo )
|
|
self.escort_rob_info = vo
|
|
self:ChangeVar("escort_rob_info", self.escort_rob_info, false, true)
|
|
end
|
|
|
|
function EscortModel:GetEscortRobInfo( )
|
|
return self.escort_rob_info
|
|
end
|
|
|
|
function EscortModel:GetEscortRobTime( )
|
|
return TableSize(self.escort_rob_info)
|
|
end
|
|
|
|
function EscortModel:GetMyEscortName( )
|
|
local id = self:GetMyEscortObjectId()
|
|
id = id == 0 and 1001 or id
|
|
local name = Trim(Config.Convoyobject[id].name)
|
|
local escort_quality = self:GetEscortObjectIndexById(id) --1绿2蓝3紫4橙
|
|
local color = WordManager.goods_color_list_dark[escort_quality]
|
|
return HtmlColorTxt(name, color)
|
|
end
|
|
|
|
--获取自己车的实例id
|
|
function EscortModel:GetMyEscortCarInstanceId()
|
|
local stage_info = self:GetEscortStageInfo()
|
|
return stage_info.monster_id
|
|
end
|
|
|
|
function EscortModel:SetEscortSceneLeftHideState( bool )
|
|
self.escort_left_hide = bool
|
|
self:Fire(EscortConst.UPDATE_ESCORT_LEFT_SHOW)
|
|
end
|
|
|
|
function EscortModel:GetEscortSceneLeftHideState( )
|
|
return self.escort_left_hide
|
|
end
|
|
|
|
function EscortModel:IsEscortSceneViewShow( )
|
|
return self.is_open_escort_scene
|
|
end
|
|
|
|
function EscortModel:SetEscortSceneViewOpen( bool )
|
|
self.is_open_escort_scene = bool
|
|
end
|