源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

1658 行
48 KiB

GodModel = GodModel or BaseClass(BaseVo, true)
local GodModel = GodModel
function GodModel:__init()
GodModel.Instance = self
self:Reset()
self:InitCFG()
end
function GodModel:Reset()
self.god_base_data = false
self.activity_common_info = false
self.activity_limit_Info = false
-------------------------
self.last_use_time = false--上次召唤时间戳
-------------------------
self.select_equip_show_info = {suit_id = 0,pos = 0,color = 0}--座印背包选中信息{pos = 0,color = 0,suit_id = 0,god_id}
self.slot_unlock_info = {}
self.left_free_draw_times = 0--剩余的免费抽奖次数
if not self.acitvity_cost_id then
--抽奖消耗券
local temp = Config.Godkv["lottery_single"].value_content
temp = stringtotable(temp)[1]
self.acitvity_cost_id = tonumber(temp[2])
end
end
function GodModel:GetBagSuitDesList( index )
if not self.bag_suit_des_list then
self.bag_suit_des_list = {[1] = {id = 0,type_name = "所有类型"}}
for k,v in pairs(Config.Godequipsuit) do
if v.equip_num == 4 then
table.insert( self.bag_suit_des_list, {id = v.suit_id,type_name = v.type_name} )
end
end
local function sort_call( a,b )
--从大到小
return a.id < b.id
end
table.sort( self.bag_suit_des_list, sort_call )
end
if index then
return self.bag_suit_des_list[index]
else
return self.bag_suit_des_list
end
end
function GodModel:getInstance()
if GodModel.Instance == nil then
GodModel.Instance = GodModel.New()
end
return GodModel.Instance
end
function GodModel:InitCFG( )
self.activity_limit_conf = nil
self.activity_common_conf = nil
self.god_cfg_map = {}--保存每神灵最低星数的配置,每神灵只有一条信息,key值是神灵ID
for k,v in pairs(Config.God) do
local cur_info = self.god_cfg_map[v.id]
if not cur_info or cur_info.star > v.star then
local info = DeepCopy(v)
local skill_info = stringtotable(info.skills)
info.skill = {}
for k,v in ipairs(skill_info or {}) do
table.insert(info.skill, v[1])
end
self.god_cfg_map[v.id] = info
end
end
self.god_cfg_list_for_book = {}--按顺序保存每神灵最低星数的配置
for k, v in pairs(self.god_cfg_map) do
self.god_cfg_list_for_book[#self.god_cfg_list_for_book+1] = v
end
local sort_fun = function ( a, b )
return a.order < b.order
end
table.sort(self.god_cfg_list_for_book, sort_fun)
self.god_max_lv = {}
for k,v in pairs(Config.Godlv) do
if not self.god_max_lv[v.god_id] or self.god_max_lv[v.god_id] < v.lv then
self.god_max_lv[v.god_id] = v.lv
end
end
--座印套装信息
self.god_suit_cfg = {}
self.god_suit_list_for_show = {}
for k,v in pairs(Config.Godequipsuit) do
self.god_suit_cfg[v.suit_id] = self.god_suit_cfg[v.suit_id] or {}
table.insert(self.god_suit_cfg[v.suit_id], v)
end
for k,v in pairs(self.god_suit_cfg) do
table.insert(self.god_suit_list_for_show, v)
end
local sort_func = function ( a, b )
return a[1].suit_id > b[1].suit_id
end
table.sort(self.god_suit_list_for_show, sort_func)
for k,v in pairs(self.god_suit_cfg) do
local sort_func = function ( a, b )
return a.equip_num < b.equip_num
end
table.sort(v, sort_func)
end
--座印最高等级,以其星数为主键
self.god_soul_epx_max_lv = {}
for k,v in pairs(Config.Godequip) do
if not self.god_soul_epx_max_lv[v.quality] or self.god_soul_epx_max_lv[v.quality] < v.lv then
self.god_soul_epx_max_lv[v.quality] = v.lv
end
end
--座印在某星某级时总共包含多少经验
self.god_soul_sum_exp_map = {}
for k,v in pairs(self.god_soul_epx_max_lv or {}) do
self.god_soul_sum_exp_map[k] = self.god_soul_sum_exp_map[k] or {}
self.god_soul_sum_exp_map[k][0] = 0
for i=1,v do
local last_lv_exp = i>1 and self.god_soul_sum_exp_map[k][i-1] or 0
self.god_soul_sum_exp_map[k][i] = Config.Godequip[k.."@"..i].exp+last_lv_exp
end
end
-- local discount_cfg = stringtotable(Config.Godkv["discount_day"].value_content)
-- self.lottery_discount_cfg = {
-- open_day = discount_cfg[1],
-- discounts = discount_cfg[2],
-- max_discount_num = discount_cfg[2][#discount_cfg[2]][2]
-- }
-- self.lottery_blessing_cfg = stringtotable(Config.Godkv["god_bless_num"].value_content)
end
function GodModel:GetGodConf( god_id,star )
return Config.God[god_id.."@"..star]
end
function GodModel:GetGodBaseData( )
return self.god_base_data
end
function GodModel:SetGodBaseData( value )
self.god_base_data = value
self:UpdateGuardInfo(self.god_base_data.list)
end
function GodModel:SetOneGodData( data )
if not self.god_base_data then return end
local have_set = false
for k,v in pairs(self.god_base_data.list) do
if v.id == data.id then
self.god_base_data.list[k] = data
have_set = true
break
end
end
if not have_set then
table.insert(self.god_base_data.list,data)
end
self:UpdateGuardInfo(self.god_base_data.list)
end
--神座主界面左侧列表
function GodModel:GetSortedGodList( is_show_skill_power )
is_show_skill_power = false
-------------------------
local result_list = {}
local fight_god = {}
local guard_god = {}
local other_god = {}
local god_base_list = self.god_base_data and self.god_base_data.list or {}
for k,v in pairs(god_base_list or {}) do
v.__power_by_sort__ = k
v.__power_by_sort__ = self:GetMyGodPower(v.id, is_show_skill_power)
if self:IsFightPos(v.pos) then
table.insert(fight_god, v)
elseif self:IsGuardPos(v.pos) then
table.insert(guard_god, v)
else
table.insert(other_god, v)
end
end
local sort_by_power_func = function ( a, b )
local a_power = a.__power_by_sort__ or 0
local b_power = b.__power_by_sort__ or 0
return a_power > b_power
end
table.sort(fight_god, sort_by_power_func)
table.sort(guard_god, sort_by_power_func)
table.sort(other_god, sort_by_power_func)
result_list = TableConcat(result_list, fight_god)
result_list = TableConcat(result_list, guard_god)
result_list = TableConcat(result_list, other_god)
return result_list
end
--获得单个神座的信息
function GodModel:GetGodInfoById( god_id )
if not self.god_base_data then return end
for k,v in pairs(self.god_base_data.list) do
if v.id == god_id then
return v
end
end
end
--获得神座的阶数
function GodModel:GetGodGrade( god_id )
local data = self:GetGodInfoById(god_id)
if data then
return data.star
end
return 0
end
--获得神座的等级
function GodModel:GetGodLv( god_id )
local info = self:GetGodInfoById(god_id)
return info and info.lv or 0
end
--是否已满级
function GodModel:IsGodFullLv( god_id )
return self:GetGodLv(god_id) >= (self.god_max_lv[god_id] or 1)
end
--获取某神身上的神装
function GodModel:GetGodEquipList( god_id )
if not god_id then return {} end
return self.god_equips and self.god_equips[god_id] or {}
end
--获取某神身上的神装
function GodModel:GetGodEquipListByOneGoodsId( goods_id )
if not goods_id then return {} end
for k,v in pairs(self.god_equips) do
for a,b in pairs(v) do
if b.goods_id == goods_id then
return v,k
end
end
end
end
--获取某神身上的神装
function GodModel:GetGodEquipByPos( god_id, pos )
if not god_id then return {} end
return self.god_equips and self.god_equips[god_id] and self.god_equips[god_id][pos]
end
--cell=god_id*100+pos_id
function GodModel:GetGodIDFromEquipCell( cell )
return math.floor(cell/100)
end
--cell=god_id*100+pos_id
function GodModel:GetPosIDFromEquipCell( cell )
return cell%100
end
function GodModel:UpdateGodEquipGoods( vo )
if vo.goods_num <= 0 then --删除物品
--删除物品的话是通过15018发过来的,拿不到cell数据所以只好遍历,数量不多所以不怕
for k,v in pairs(self.god_equips or {}) do
for kk,vv in pairs(v or {}) do
if vv.goods_id == vo.goods_id then
v[kk] = nil
break
end
end
end
else
local cell = vo and vo.cell or 0--如果是神座已穿戴的装备的话cell=god_id*100+pos_id
local god_id = self:GetGodIDFromEquipCell(cell)
local pos_id = self:GetPosIDFromEquipCell(cell)
self.god_equips[god_id] = self.god_equips[god_id] or {}
GoodsModel:getInstance():SetBaseInfo(vo)
self.god_equips[god_id][pos_id] = vo
end
end
function GodModel:GetEquipByUID( uid )
for k,v in pairs(self.god_equips or {}) do
for kk,vv in pairs(v) do
if vv.goods_id == uid then
return vv
end
end
end
return nil
end
function GodModel:SetGodEquipList( list )
self.god_equips = {}
for i = 1, #list do
if list and list[i] then
self:UpdateGodEquipGoods(list[i])
end
end
self:UpdateIsAllGodEquipBest()
self:Fire(GodConst.UpdateGodDressedEquipChange)
self:Fire(GodConst.UpdateRedDot, GodConst.TabID.Info)
end
--判断是否所有神座都已穿戴了最好的座印了,只有这样才可以显示座印可升级的红点
function GodModel:UpdateIsAllGodEquipBest( )
self.is_need_show_equip_can_upgrade_red = false
for k,v in pairs(self:GetGodList()) do
if self:IsNeedRedInfoByEquip(v.id) then
--有座印可以穿或替换的话那就不需要显示座印可升级
self.is_need_show_equip_can_upgrade_red = false
return true--顺便担当红点函数
end
end
self.is_need_show_equip_can_upgrade_red = true
return false--顺便担当红点函数
end
--某神的座印是否需要红点
function GodModel:IsNeedRedInfoByEquip( god_id )
for i=1,6 do
if self:IsGodEquipCanBetter(god_id, i) then
return true
end
end
end
--某神的某部位座印是否能加强,即未穿时是否有可穿的,已穿时是否有更好的
function GodModel:IsGodEquipCanBetter( god_id, equip_pos )
local equip_goods_vo = self:GetGodEquipByPos(god_id, equip_pos)
local equip_list_in_bag = GoodsModel.getInstance():GetGodEquipListByPos(equip_pos)
if not equip_list_in_bag or #equip_list_in_bag <= 0 then
--背包里没有座印
return false, "背包里没有座印"
end
if equip_goods_vo then
--已穿座印,找更好的
local cur_suit_id = self:GetEquipSuit(equip_goods_vo.type_id)
local max_color_in_bag, max_color_equip = self:GetMaxColorInSoulList(equip_list_in_bag, cur_suit_id)
local is_can_replace = false
local max_color_stage = GoodsModel:getInstance():GetOtherDataById(max_color_equip,GodConst.EquipStrenId) or 0
local stage = GoodsModel:getInstance():GetOtherDataById(equip_goods_vo,GodConst.EquipStrenId) or 0
stage = tonumber(stage)
if (max_color_in_bag > equip_goods_vo.color) then
is_can_replace = true
elseif (max_color_in_bag == equip_goods_vo.color and max_color_equip and max_color_stage>stage) then
is_can_replace = true
end
if is_can_replace then
--背包里有更高星数的座印
return true, GodConst.EquipStatus.WearBetter
elseif self.is_need_show_equip_can_upgrade_red then
local isFullLv = self:IsEquipFullLv(equip_goods_vo)
if not isFullLv and self:HasExistInSoulListByMaxColor(1, equip_list_in_bag, cur_suit_id) then
return true, GodConst.EquipStatus.UP
end
end
else
--未穿座印
return true, GodConst.EquipStatus.Wear
end
return false
end
--判断背包里是否有这些座印,要求是品质小于等于传入的color
function GodModel:HasExistInSoulListByMaxColor( color, list, suit_id )
for k,v in pairs(list or {}) do
local v_suit_id = self:GetEquipSuit(v.type_id)
--只找相同套装的
if v_suit_id == suit_id then
if v.color and v.color <= color then
return true
end
end
end
return false
end
function GodModel:IsEquipFullLv( equip_info )
if not equip_info then return false end
local curLv = GoodsModel:getInstance():GetOtherDataById(equip_info,GodConst.EquipStrenId) or 0
local maxLv = self:GetEquipMaxLv(equip_info.type_id)
return curLv >= maxLv
end
--从列表中找到最大的座印星数
function GodModel:GetMaxColorInSoulList( list, suit_id )
local result = 0
local out_equip = nil
local max_stage = 0
for k,v in pairs(list or {}) do
local v_suit_id = self:GetEquipSuit(v.type_id)
--只找相同套装的
if v_suit_id == suit_id then
local stage = GoodsModel:getInstance():GetOtherDataById(v,GodConst.EquipStrenId) or 0
stage = tonumber(stage)
if v.color > result or (v.color==result and stage>max_stage) then
result = v.color
max_stage = stage
out_equip = v
end
end
end
return result, out_equip
end
--获取在某星某级的情况下,增加某经验值可以让它提升到哪级哪经验
function GodModel:GetNextEquipLvAndExp( soul_star, soul_lv, soul_exp, add_exp, max_lv )
local sum_add_exp = add_exp+soul_exp
local next_lv = soul_lv
local next_exp = 0
while sum_add_exp > 0 do
local up_lv_need_exp = self:GetEquipUpLvNeedExp(soul_star, next_lv)
if up_lv_need_exp <= 0 then
break
end
local left_exp = sum_add_exp - up_lv_need_exp
if left_exp >= 0 then
--剩余经验够升级
sum_add_exp = left_exp
next_lv = next_lv + 1
else
--所剩经验不够升级
break
end
if next_lv >= max_lv then
break
end
end
return next_lv, sum_add_exp
end
--获取座印升级所需经验
function GodModel:GetEquipUpLvNeedExp( soul_star, cur_soul_lv )
if not soul_star or not cur_soul_lv then return 0 end
local max_lv = soul_star and self.god_soul_epx_max_lv[soul_star] or 0
local next_lv = cur_soul_lv + 1
if next_lv > max_lv then
next_lv = max_lv
end
local lv_cfg = Config.Godequip[soul_star.."@"..next_lv]
return lv_cfg and lv_cfg.exp or 0
end
function GodModel:GetEquipMaxLv( equip_type_id )
local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(equip_type_id)
local color = goods_vo and goods_vo.color
local max_lv = color and self.god_soul_epx_max_lv[color] or 0
return max_lv
end
--获取神灵激活了哪些套装
function GodModel:GetGodActivedSuit( god_id )
local equip_list = self:GetGodEquipList(god_id)
local suit_map = {}
for k,v in pairs(equip_list or {}) do
local suit_id = self:GetEquipSuit(v.type_id)
suit_map[suit_id] = suit_map[suit_id] or 0
suit_map[suit_id] = suit_map[suit_id] + 1
end
local result = {}
for k,v in pairs(suit_map) do
local suit_cfg = self.god_suit_cfg[k]
for ii,vv in ipairs(suit_cfg or {}) do
if v >= vv.equip_num then
local ac_item = DeepCopy(vv)
ac_item.god_id = god_id
table.insert(result, ac_item)
end
end
end
return result
end
--获取座印属于哪个套装
function GodModel:GetEquipSuit( equip_type_id )
if not equip_type_id then return 0 end
local cfg = Config.Godequipmanual[equip_type_id]
return cfg and cfg.suit_id or 0
end
function GodModel:GetEquipTagId( equip_type_id )
if not equip_type_id then return 1 end
local cfg = Config.Godequipmanual[equip_type_id]
local suit_id = cfg and cfg.suit_id or 1
for k,v in pairs(Config.Godequipsuit) do
if v.suit_id == suit_id then
return v.type
end
end
return 1
end
--获取自己某神灵的座印属性
function GodModel:GetMyGodEquipAttr( god_id )
local equip_list = self.god_equips and self.god_equips[god_id]
local result = {}
for k,v in pairs(equip_list or {}) do
local stage = GoodsModel:getInstance():GetOtherDataById(v,GodConst.EquipStrenId) or 0
local addition_attrlist = self:GetEquipSpAttrByVo( v )
local attr_list = self:GetEquipAttr(v.type_id, stage, addition_attrlist)
CombineAttrList(result, attr_list)
end
return result
end
--计算获得装备特殊属性实际加成
function GodModel:GetEquipSpAttrByVo( goods_vo )
if not goods_vo then return {} end
local base_addition_attrlist = GoodsModel:getInstance():GetOtherDataById(goods_vo, GodConst.EquipSPAttrId) or {}
base_addition_attrlist = stringtotable(base_addition_attrlist)
local stage = GoodsModel:getInstance():GetOtherDataById(goods_vo,GodConst.EquipStrenId) or 0
for k,v in pairs(base_addition_attrlist) do
base_addition_attrlist[k][2] = math.max( math.floor(stage/5) - 1 , 0 ) * v[3] + v[2]
end
return base_addition_attrlist
end
--获取座印属性列表
function GodModel:GetEquipAttr( equip_type_id, lv, addition_attr )
if not equip_type_id then return {} end
local result = {}
local equip_cfg = Config.Godequipmanual[equip_type_id]
local attr = equip_cfg and equip_cfg.attr or {}
local attr_list = stringtotable(attr)
--加上额外属性
if addition_attr then
if type(addition_attr) == "string" then
addition_attr = stringtotable(addition_attr)
end
local addition_attr_new = {}
for k,v in pairs(addition_attr) do
table.insert(addition_attr_new, {v.attr_type or v[1], v.attr_value or v[2]})
end
CombineAttrList(attr_list, addition_attr_new)
end
for k,v in pairs(attr_list) do
v[2] = v[2]+(lv or 0)*(v[3] or 0)
end
return attr_list
end
function GodModel:CombineAttrTwo( data )
local temp = {}
local index = 1
for i,v in ipairs(data) do
index = math.ceil( i/2 )
temp[index] = temp[index] or {}
temp[index][i%2 == 1 and 1 or 2] = v
end
return temp
end
--获取神灵技能信息列表,包含技能等级的
function GodModel:GetGodSkillInfoList( god_id )
local info = self:GetGodInfoById(god_id)
return info.skill or {}
end
--获取某神某技能的等级
function GodModel:GetGodSkillLv( god_id, skill_id )
if not god_id or not skill_id then return 0 end
local info = self:GetGodInfoById(god_id)
for k,v in pairs(info.skill or {}) do
if v.skill_id == skill_id then
return v.skill_lv
end
end
return 0
end
--获取神座升级所需要经验
function GodModel:GetMaxExp( god_id, lv )
lv = lv or 0
local lv_cfg = Config.Godlv[god_id.."@"..lv+1]
local result = lv_cfg and lv_cfg.exp or 0
return result
end
function GodModel:GetGodUpLvCostCfg( )
if not self.up_lv_cost_cfg then
local data = stringtotable(Config.Godkv["lv_up_goods"].value_content)
local function sort_call( a,b )
return a[2] < b[2]
end
table.sort( data, sort_call )
self.up_lv_cost_cfg = {}
for i=1,3 do
self.up_lv_cost_cfg[i] = data[i][1]
end
end
return self.up_lv_cost_cfg
end
--获取某神的基础属性
function GodModel:GetGodBaseAttr( god_id, lv, star )
if not god_id or not lv or not star then return {} end
local cfg = Config.God[god_id.."@"..star]
local result = {}
if cfg then
result = stringtotable(cfg.attr)
for k,v in pairs(result) do
v[2] = v[2]+(lv-1)*v[3]
end
end
return result
end
--神灵有额外的属性,ignore_suit_effect:是否忽略套装效果
function GodModel:GetGodAdditionAttr( god_id, lv, star, ignore_suit_effect, role_info )
role_info = role_info or RoleManager.Instance.mainRoleInfo
if not god_id or not lv or not star then return {} end
local cfg = Config.God[god_id.."@"..star]
local result = {}
if cfg then
result = stringtotable(cfg.god_attr)
for k,v in pairs(result) do
v[2] = v[2]+(lv-1)*v[3]
end
for k,v in pairs(result) do
if v[1] == 2 then
v.attr_str = "神血"
if not ignore_suit_effect then
local isActivedSuitEffect = self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGodBlood, 2)
if isActivedSuitEffect then
v[2] = v[2] * stringtotable(Config.Godequipsuit["3@4"].effect)[1][2]
end
end
v[2] = v[2]+(role_info.maxHp or 0)*0.20
elseif v[1] == 1 then
v.attr_str = "神攻"
if not ignore_suit_effect then
local isActivedSuitEffect = self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGodAttack, 2)
if isActivedSuitEffect then
v[2] = v[2] * stringtotable(Config.Godequipsuit["1@4"].effect)[1][2]
end
end
v[2] = v[2]+role_info.att
elseif v[1] == 4 then
v.attr_str = "神防"
if not ignore_suit_effect then
local isActivedSuitEffect = self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGodDefend, 2)
if isActivedSuitEffect then
v[2] = v[2] * stringtotable(Config.Godequipsuit["2@4"].effect)[1][2]
end
end
v[2] = v[2]+role_info.def
end
end
end
return result
end
--是否激活了某套装的特殊技能
function GodModel:IsActivedSuitEffect( god_id, suit_id, suit_lv, ignore_guard )
local isFightGod = self:IsGodGoFighted(god_id)
local isGuard = self:IsGuardGod(god_id)
if not isFightGod and not isGuard then
--没上阵或不是神仆的话就不算
return false
end
local isActived = false
local equip_list = self:GetGodEquipList(god_id)
local progress = self:GetSuitProgress(suit_id, equip_list)
--suit_lv代表套装等级,1代表2件套,2代表4件套装
suit_lv = suit_lv or #progress
if progress and progress[suit_lv] then
isActived = progress[suit_lv].had_actived
end
if not ignore_guard and isFightGod and not isActived then
--是主神而且自己没激活的话就看看神仆有没有激活
for i=1,GodConst.MaxGuardNum do
local guard = self:GetGuardInfoByID(god_id, i)
if guard then
local isGuardActive = self:IsActivedSuitEffect(guard.guard_id, suit_id, suit_lv)
if isGuardActive then
--神仆激活了二件套
isActived = true
break
end
end
end
end
return isActived
end
function GodModel:IsGodGoFighted( god_id )
local god_info = self:GetGodInfoById(god_id)
return god_info and self:IsFightPos(god_info.pos) or false
end
function GodModel:IsFightPos( pos )
return pos~=0 and pos < GodConst.GuardStartPos
end
function GodModel:IsGuardGod( god_id )
local god_info = self:GetGodInfoById(god_id)
return god_info and self:IsGuardPos(god_info.pos) or false
end
function GodModel:IsGuardPos( pos )
return pos >= GodConst.GuardStartPos
end
--获取座印包含的总经验值
function GodModel:GetEquipSumExp( soul_id, soul_lv, exp, color )
if not soul_id or not soul_lv or not exp then return 0 end
local base_exp = Config.Godequipmanual[soul_id].exp
if self.god_soul_sum_exp_map[color] and self.god_soul_sum_exp_map[color][soul_lv] then
local sum_exp = self.god_soul_sum_exp_map[color][soul_lv]
return (sum_exp+base_exp)+exp
end
return 0
end
--获取神灵某套装的激活进度,即返回该套装的三个激活条件,并标明已激活和未激活
function GodModel:GetSuitProgress( suit_id, equip_list )
if not suit_id then return {} end
local has_soul_num = 0
for k,v in pairs(equip_list or {}) do
local v_suit_id = self:GetEquipSuit(v.type_id)
if v_suit_id == suit_id then
has_soul_num = has_soul_num + 1
end
end
local suit_cfg = self.god_suit_cfg[suit_id]
local result = suit_cfg and DeepCopy(suit_cfg) or {}
for k,v in pairs(result) do
v.had_actived = has_soul_num >= v.equip_num
end
return result
end
function GodModel:GetGuardInfo( )
return self.guard_info
end
function GodModel:UpdateGuardInfo( god_list )
local guard_info = {}
for k,v in pairs(god_list) do
if self:IsGuardPos(v.pos) then
local fight_slot = self:GetFightSlotByPos(v.pos)
local guard_slot = self:GetGuardPos(v.pos)
local guard_id = v.id
local guard_item_info = {}
guard_item_info.guard_state = GodConst.GuardState.Guarding
guard_item_info.guard_slot = guard_slot
guard_item_info.guard_id = guard_id
guard_info[fight_slot] = guard_info[fight_slot] or {}
guard_info[fight_slot][guard_slot] = guard_item_info
end
end
self.guard_info = guard_info
end
function GodModel:GetGuardPos( pos )
if self:IsFightPos(pos) then
return 0
else
return pos and pos%100 or 1
end
end
function GodModel:GetGuardInfoByID( god_id, guard_slot)
local fight_slot = self:GetGodFightSlot(god_id)
if fight_slot > 0 then
local data = self:GetGuardInfoBySlot(fight_slot, guard_slot)
return data
end
return nil
end
--获取某战位的护法信息
function GodModel:GetGuardInfoBySlot( fight_slot, guard_slot )
if not fight_slot or not guard_slot or not self.guard_info then return end
return self.guard_info[fight_slot] and self.guard_info[fight_slot][guard_slot] or {}
end
function GodModel:GetGodFightSlot( god_id )
local god_info = self:GetGodInfoById(god_id)
return god_info and self:GetFightSlotByPos(god_info.pos) or 0
end
--神座的出战位如果大于100的话说明是护佑战位,其百份位是护佑的主战位id,个位就是1,2号护佑位
function GodModel:GetFightSlotByPos( pos )
if self:IsFightPos(pos) then
return pos
else
return pos and math.floor(pos/100) or 0
end
end
--获取神灵激活的收集进度
function GodModel:GetGodUpStarProgress( god_id, star, limit_to_condition )
if not god_id or not star then return 0, 0, 0 end
local next_star = star and (star + 1)
if not next_star then return 0, 0, 0 end
local cost_info = Config.God[god_id.."@"..next_star]
cost_info = cost_info and stringtotable(cost_info.cost)
if cost_info then
--只要魂魄的进度
local condition = 0
local cur_pro = 0
local cost_id = 0
for k,v in pairs(cost_info) do
local t_condition = v[3]
condition = condition + t_condition
local t_cost_id = v[2]
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(t_cost_id)
if limit_to_condition and goods_num > t_condition then
goods_num = t_condition
end
cur_pro = cur_pro + goods_num
if k == 1 then
cost_id = t_cost_id
end
end
return cur_pro, condition, cost_id
end
return 0, 0, 0
end
function GodModel:IsMaxStar( god_id, star )
if not god_id or not star then return false end
return Config.God[god_id.."@"..star+1]==nil and Config.God[god_id.."@"..star]~=nil
end
--获取神座的战力,如果已经激活的话就返回后端发过来的值,没有激活则计算初始战力
function GodModel:GetMyGodPowerFromServerOrCFG( god_id )
if not god_id then return 0 end
local god_info = self:GetGodInfoById(god_id)
if god_info then
if god_info.power and god_info.power~=0 then
return god_info.power
else
--有些战力后端算不了就会发0过来,这时就前端自己算
return self:GetMyGodPower(god_id)
end
end
return self:GetGodPower(god_id, 1, self:GetGodFirstStar(god_id), self:GetGodFirstSkillList(god_id))
end
--获取神灵激活的初始星数
function GodModel:GetGodFirstStar( god_id )
return self.god_cfg_map[god_id] and self.god_cfg_map[god_id].star or 0
end
function GodModel:GetGodFirstSkillList( god_id )
local skill_cfg_list = self:GetGodSkillList(god_id)
local skill_list = {}
for i,v in ipairs(skill_cfg_list or {}) do
table.insert(skill_list, {skill_id=v, skill_lv=1})
end
return skill_list
end
--获取神灵技能列表,静态的
function GodModel:GetGodSkillList( god_id )
local cfg = self.god_cfg_map[god_id]
if not cfg then return {} end
return cfg.skill
end
function GodModel:GetMyGodPower( god_id, is_show_skill_power )
if is_show_skill_power==nil then
is_show_skill_power = true
end
if not god_id then return 0 end
local god_info = self:GetGodInfoById(god_id)
if not god_info then return 0 end
local skill_list = nil
if is_show_skill_power then
skill_list = self:GetGodSkillInfoList(god_id)
end
local equip_attr_list = self:GetMyGodEquipAttr(god_id)
return self:GetGodPower(god_id, god_info.lv, god_info.star, skill_list, equip_attr_list)
end
--获取神座战力
function GodModel:GetGodPower( god_id, lv, star, skill_list, equip_attr_list, role_info )
local attr_list = self:GetGodBaseAttr(god_id, lv, star)
local attr_power = GetFighting(attr_list)
local addition_attr_list = self:GetGodAdditionAttr(god_id, lv, star, false, role_info)
local addition_attr_power = self:GetGoFightPower(addition_attr_list)
local skill_power = self:GetGodSkillPower(skill_list)
local equip_power = 0
if equip_attr_list then
equip_power = GetFighting(equip_attr_list)
end
return attr_power+addition_attr_power+skill_power+equip_power
end
function GodModel:GetGoFightPower( god_go_fight_attr_list )
local attr_factor = {
[1]=0.1, [2]=0.01, [4]=0.1
}
local power = 0
for k,v in pairs(god_go_fight_attr_list) do
power = power + attr_factor[v[1]]*v[2]
end
return round(power)
end
function GodModel:GetGodSkillPower( skill_list )
if not skill_list then return 0 end
local power = 0
for k,v in pairs(skill_list) do
local _,temp_num = GetSkillAttrBySkill( v.skill_id, v.skill_lv, true ,true)
power = power + temp_num
end
return power
end
function GodModel:GetEquipPower( equip_id, equip_lv, addition_attr )
local attr_list = self:GetEquipAttr(equip_id, equip_lv, addition_attr)
for k,v in pairs(attr_list) do
v[3] = nil
end
return GetFighting(attr_list)
end
--获取某槽孔出战的神灵
function GodModel:GetGoFightGod( fight_slot )
local data = self.god_base_data and self.god_base_data.list or {}
for k,v in pairs(data) do
if v.pos == fight_slot then
return v
end
end
return nil
end
function GodModel:GetGodList( )
return self.god_base_data and self.god_base_data.list or {}
end
--获取出战列表
function GodModel:GetGoFightGodList( ignore_sort )
local result = {}
local data = self.god_base_data and self.god_base_data.list or {}
for k,v in pairs(data) do
if self:IsFightPos(v.pos) then
table.insert(result, v)
end
end
if not ignore_sort then
local sort_func = function ( a, b )
return a.pos < b.pos
end
table.sort(result, sort_func)
end
return result
end
--获取更小的空阵位
function GodModel:GetSmallerEmptyPos( pos )
local pos_empty_state = {true,true,true,true,true}--true为
local data = self.god_base_data and self.god_base_data.list or {}
for k,v in pairs(data) do
if v.pos ~= 0 and v.pos < GodConst.GuardStartPos then
--该主阵位不为空
pos_empty_state[v.pos] = false
end
end
for i=1,pos do
if pos_empty_state[i] then
return i
end
end
return pos
end
--返回最多可出战多少神灵
function GodModel:GetMaxGoFightGodNum( )
local result = 3--前三个阵位是默认开启的
if self:HasFightSlot4Unlock() then
result = result + 1
end
if self:HasFightSlot5Unlock() then
result = result + 1
end
return result
end
function GodModel:HasFightSlot4Unlock( )
local data = self.god_base_data and self.god_base_data.list or {}
for k,v in pairs(data) do
local isActivedSuitEffect = self:IsActivedSuitEffect(v.id, GodConst.SuitEffect.AddGodGoFightPos)
if isActivedSuitEffect then
return true
end
end
return false
end
function GodModel:HasFightSlot5Unlock( )
if not self:IsSlotUnlock(5) then
return false
end
return self:HasActiveFightSlot5Suit()
end
--是否满足开启阵位5的套装条件
function GodModel:HasActiveFightSlot5Suit( )
local hasActiveNum = 0
for k,v in pairs(self:GetGodList()) do
local isActivedSuitEffect = self:IsActivedSuitEffect(v.id, GodConst.SuitEffect.AddGodGoFightPos, 2, true)
if isActivedSuitEffect then
hasActiveNum = hasActiveNum + 1
if hasActiveNum >= 2 then
--需要任意两只神激活了四件套
return true
end
end
end
return false
end
--注意此解锁信息仅仅代表花钱买了,真正的解锁还需要多一个条件的
function GodModel:IsSlotUnlock( fight_slot )
for k,v in pairs(self.slot_unlock_info or {}) do
if v.pos == fight_slot then
return true
end
end
return false
end
function GodModel:SetSlotUnlockInfo( value )
self.slot_unlock_info = value
end
--获取所有神灵的配置列表,图鉴有用到
function GodModel:GetGodCfgListForBook( )
return self.god_cfg_list_for_book
end
--神灵是否能激活
function GodModel:IsGodCanActive( god_id )
local god_info = self:GetGodInfoById( god_id )
if god_info ~= nil then return false, "AlreadyActive" end
local cur_pro, max_pro, cost_id = self:GetGodUpStarProgress(god_id, -1)
return cur_pro >= max_pro, "NotEnoughCost", cost_id
end
function GodModel:GetSuitCfgList( )
return self.god_suit_list_for_show or {}
end
function GodModel:GetGodName( god_id )
return self.god_cfg_map[god_id] and Trim(self.god_cfg_map[god_id].name) or "未知神座"
end
function GodModel:GetRealPos( fight_slot, guard_slot )
return fight_slot*100+guard_slot
end
--获取神座护佑时只算的属性百分比,默认是50%,激活套装有加成
function GodModel:GetGuardAttrPercent( god_id )
local percent = 0.5
if self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGuardAttrPercent, 2, true) then
percent = 0.8
elseif self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGuardAttrPercent, 1, true) then
percent = 0.6
end
return percent
end
function GodModel:GetTagResByGodId( god_id )
local conf = self.god_cfg_map[god_id]
local id = conf and conf.type or 1
return GodConst.TagRes[id] and GodConst.TagRes[id] or GodConst.TagRes[1]
end
function GodModel:GetGodShowModelResID( god_id )
-- do return 1001 end
-------------------------
local cfg = self.god_cfg_map[god_id]
if cfg then
if cfg.picture_id > 1005 or cfg.picture_id < 1000 then
print('=======Msh:GodModel.lua[1088] =====缺失神座模型ID==', god_id)
return 1000
end
return cfg.picture_id
end
return 0
end
function GodModel:GetGodPos( god_id )
local data = self:GetGodInfoById(god_id)
return data and data.pos or 0
end
function GodModel:GetSuitDesByInfo( des_1,des_2,is_active,str_tem )
str_tem = str_tem or ""
des_1 = des_1 or ""
des_2 = des_2 or ""
if is_active then
des_1 = HtmlColorTxt( Trim(des_1) , '#2cf86f') .. str_tem
return des_1 .. Trim(des_2) --HtmlColorTxt( des_1 .. Trim(des_2) , '#40465a')
else
-- string.gsub( des_2, findString, replaceString, replaceTime )
return HtmlColorTxt( Trim(des_1) .. str_tem .. Trim(des_2) , '#8b8b8b')
end
end
-------------------------
--神灵系统各标签是否需要红点
function GodModel:IsNeedRed( tab_id )
if not tab_id then return false end
if tab_id == GodConst.TabID.Info then
return self:IsNeedRedInfo()
elseif tab_id == GodConst.TabID.GoFight then
return self:IsNeedRedGoFight()
elseif tab_id == GodConst.TabID.Book then
return self:IsNeedRedBook() or self:IsNeedResSuitBook()
elseif tab_id == GodConst.TabID.Activity then
--宠物生活技能 每日免费抽奖一次
local left_free_draw_times = self:GetGodLeftFreeDrawTimes()
local free_red = left_free_draw_times > 0
local num = GoodsModel:getInstance():GetTypeGoodsNum(self.acitvity_cost_id)
return num>0 or self:IsActivityCommonRed() or self:IsActivityLimitRed() or free_red
elseif tab_id == GodConst.TabID.Equip then
--有座印可以穿或替换
return self:UpdateIsAllGodEquipBest()
end
return false
end
function GodModel:IsActivityCommonRed( )
local base_data = self:GetActivityCommonInfo()
if not base_data then return false end
for k,v in pairs(base_data.bless_award) do
if v.state == 1 then
return true
end
end
return false
end
function GodModel:IsActivityLimitRed( )
local base_data = self:GetActivityLimitInfo()
if not base_data then return false end
for k,v in pairs(base_data.bless_award) do
if v.state == 1 then
return true
end
end
return false
end
--神灵信息标签是否需要红点
function GodModel:IsNeedRedInfo( )
for k,v in pairs(self:GetGodList() or {}) do
if self:IsNeedRedInfoByGod(v.id) then
return true
end
end
return false
end
--神灵是否需要红点
function GodModel:IsNeedRedInfoByGod( god_id )
if self:IsGodCanUpLv(god_id) then
--可以升级
return true
end
if self:IsGodCanUpStar(god_id) then
--可以升星
return true
end
if self:IsGodAnySkillCanUpdate(god_id) then
--可以升技能
return true
end
return false
end
--神灵是否能升级,够升下经验也会返回真,不一定要够升一级的
function GodModel:IsGodCanUpLv( god_id )
if self:IsGodFullLv(god_id) then
return false
end
local lv = self:GetGodLv(god_id)
local up_lv_cost = self:GetGodUpLvCostCfg(god_id, lv)
for k,v in pairs(up_lv_cost or {}) do
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(v)
if goods_num >= 1 then
return true
end
end
return false
end
--神灵是否能升星
function GodModel:IsGodCanUpStar( god_id )
local star = self:GetGodStar(god_id)
if self:IsMaxStar(god_id, star) then
return false,"MaxStar"
end
local next_star = self:GetGodNextStar(god_id, star, true)
if not next_star then return false end
local need_lv = self:GetGodStarNeedLv(god_id, next_star)
if self:GetGodLv(god_id) < need_lv then
--升星需要达到某个等级条件才行的
return false, "LvNoEnough", need_lv
end
local cur_pro, max_pro = self:GetGodUpStarProgress(god_id, star)
return cur_pro>=max_pro, "CostGoodsNum"
end
function GodModel:GetGodStar( god_id )
local info = self:GetGodInfoById(god_id) or {}
return info and info.star or 0
end
function GodModel:GetGodNextStar( god_id, star, return_nil_when_max )
local next_star = star and (star + 1) or 0
-- if star and star == 0 then
-- --传入星数是0的话要帮它转为对应神灵的起始星数
-- next_star = self:GetGodFirstStar(god_id)
-- end
local is_max = self:IsMaxStar(god_id, star)
if not is_max or not return_nil_when_max then
return next_star
end
return nil
end
--获取某神灵到达某星需要多少等级
function GodModel:GetGodStarNeedLv( god_id, star )
if not god_id or not star or not Config.God or not Config.God[god_id.."@"..star] then return 0 end
return Config.God[god_id.."@"..star].need_lv
end
--某神是否有技能可升级
function GodModel:IsGodAnySkillCanUpdate( god_id )
if not god_id then return false end
local info = self:GetGodInfoById(god_id) or {}
for k,v in pairs(info.skill or {}) do
if self:IsGodSkillCanUpdate(god_id, v.skill_id) then
return true
end
end
return false
end
--神灵的技能是否能升级
function GodModel:IsGodSkillCanUpdate( god_id, skill_id )
if self:IsGodSkillMaxLv(god_id, skill_id) then
return false
end
if not self.skill_cost_goods_type_id then
self.skill_cost_goods_type_id = stringtotable(Config.Godkv["skill_up_cost"].value_content)[1][2]
end
local goods_num = GoodsModel.getInstance():GetTypeGoodsNum(self.skill_cost_goods_type_id)
return goods_num > 0
end
--技能是否已满级
function GodModel:IsGodSkillMaxLv( god_id, skill_id )
local star = self:GetGodStar(god_id)
star = star or 1
local skill_lv_cfg = Config.God[god_id.."@"..star]
local cur_lv = self:GetGodSkillLv(god_id, skill_id)
if skill_lv_cfg then
return cur_lv >= (skill_lv_cfg.skill_max or 0)
else
if Config.God[god_id.."@5"] then
--找不到配置的话先固定找5星的,但出了6星配置的话这里就提示下前端要修改
Message.show("增加了神灵技能的等级限制配置啦!")
end
skill_lv_cfg = Config.God[god_id.."@5"] or {}
return cur_lv >= (skill_lv_cfg.skill_max or 0)
end
return false
end
--神灵系统是否需要红点
function GodModel:IsNeedRedAll( )
for k,v in pairs(GodConst.TabID) do
if self:IsNeedRed(v) then
return true
end
end
return false
end
--出战标签是否需要红点
function GodModel:IsNeedRedGoFight( )
if not self:HasAnyUnFightGod() then
--没有任何可上阵的神灵
return false
end
for i=1,GodConst.MaxFightNum do
if self:IsFightSlotCanGo(i, true) then
return true
end
end
return false
end
--是否有神未出战
function GodModel:HasAnyUnFightGod( )
for k,v in pairs(self:GetGodList()) do
if v.pos == 0 or v.pos >= GodConst.GuardStartPos then
return true
end
end
return false
end
--ignore_judge_unfight_god已经判断过有未出战神灵了,就不用再判断了
function GodModel:IsFightSlotCanGo( fight_slot, ignore_judge_unfight_god )
if self:GetGoFightGod(fight_slot) ~= nil then
return false
end
if not ignore_judge_unfight_god then
if not self:HasAnyUnFightGod() then
--没有任何可上阵的神灵
return false
end
end
--前3个阵位是默认解锁的,后几个就要判断是否已经解锁过了
if fight_slot <= 3 then
return true
elseif fight_slot == 4 then
return self:HasFightSlot4Unlock()
elseif fight_slot == 5 then
return self:HasFightSlot5Unlock()
end
end
--图鉴是否需要红点
function GodModel:IsNeedRedBook( )
for k,v in pairs(self.god_cfg_map) do
if self:IsGodCanActive(v.id) then
return true
end
end
return false
end
function GodModel:IsNeedResSuitBook( )
local setting = CookieWrapper.Instance:GetCookie(CookieLevelType.Account, CookieKey.GOD_BOOK_SUIT_SHOW_REDID)
return not setting or setting~=1
end
function GodModel:SetShowedSuitBookRed( )
CookieWrapper.Instance:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.GOD_BOOK_SUIT_SHOW_REDID, 1)
CookieWrapper.Instance:WriteAll()
GodController.Instance:GodCheckRedDot()
end
--从背包里获取soul_pos部位最好的座印信息,包括每套装的最高星和最高级数
function GodModel:GetBestEquipInfoInBag( equip_pos, min_star )
local equip_list_in_bag = GoodsModel.getInstance():GetGodEquipListByPos(equip_pos)
local result = {}
for k,v in pairs(equip_list_in_bag or {}) do
local suit_id = self:GetEquipSuit(v.type_id)
result[suit_id] = result[suit_id] or {}
local star = v.color
if star >= min_star and (not result[suit_id].max_star or star >= result[suit_id].max_star) then
result[suit_id].max_star = star
result[suit_id].max_lv = result[suit_id].max_lv or {}
local stage_num = GoodsModel:getInstance():GetOtherDataById(v,GodConst.EquipStrenId) or 0
if not result[suit_id].max_lv[star] or stage_num > result[suit_id].max_lv[star] then
result[suit_id].max_lv[star] = stage_num
end
end
end
return result
end
function GodModel:ReqGoFightPos( pos, god_id )
--请求上阵,如果
pos = self:GetSmallerEmptyPos(pos)
local target_pos_god = self:GetGoFightGod(pos)
local is_new_pos_empty = target_pos_god==nil
if is_new_pos_empty then
--如果要上阵的是空阵位且该神原来的位置比新阵位靠前,那就不让上
local old_pos = self:GetGodPos(god_id)
if old_pos~=0 and old_pos<pos then
Message.show("只能按顺序上阵")
return
end
end
self:Fire(GodConst.REQ_INFO_FIGHT, pos, god_id)
end
--普通抽奖信息
function GodModel:GetActivityCommonInfo( )
return self.activity_common_info
-- local curTime = TimeUtil:getServerTime()
-- return self.activity_common_info or {
-- phase = 1,
-- begin_time = curTime,
-- end_time = curTime+86400*2,
-- blessing = 3,
-- bless_award = {
-- },
-- }
end
function GodModel:SetActivityCommonInfo( value )
self.activity_common_info = value
end
--限时抽奖信息
function GodModel:GetActivityLimitInfo( )
return self.activity_limit_Info
-- local curTime = TimeUtil:getServerTime()
-- return self.activity_limit_Info or {
-- phase = 1,
-- begin_time = curTime,
-- end_time = curTime+86400*2,
-- blessing = 3,
-- bless_award = {
-- },
-- counts = 0,
-- counts_award = {
-- },
-- }
end
function GodModel:SetActivityLimitInfo( value )
self.activity_limit_Info = value
end
function GodModel:GetLimitConfByPhase( phase )
if not self.activity_limit_conf then
self.activity_limit_conf = {}
for k,v in pairs(Config.Godlotteryphase) do
self.activity_limit_conf[v.phase] = v
end
end
return self.activity_limit_conf[phase]
end
function GodModel:GetCommonConfByPhase( phase )
self.activity_common_conf = false
if not self.activity_common_conf then
self.activity_common_conf = {}
for k,v in pairs(Config.Godnormalphase) do
self.activity_common_conf[v.phase] = v
end
end
return self.activity_common_conf[phase]
end
--上次变身的时间
function GodModel:GetBecomeGodTime( )
local curTime = TimeUtil:getServerTime()
return self.become_god_time or curTime
end
-- function GodModel:SetBecomeGodTime( value )
-- self.become_god_time = value
-- end
-- function GodModel:SetCanBecomeGodTime( time )
-- self.can_become_god_time = time
-- end
function GodModel:SetBecomeGodTime( time_list )
self.become_god_time_list = self.become_god_time_list or {}
if not time_list then return end
for k,v in pairs(time_list) do
self.become_god_time_list[v.pos] = v
self.become_god_time_list[v.pos].can_become_time = v.time + self:GetBecomeGodCD()
end
end
function GodModel:GetCanBecomeGodTimeByPos( pos )
if self.become_god_time_list and
self.become_god_time_list[pos] and
self.become_god_time_list[pos].can_become_time then
return self.become_god_time_list[pos].can_become_time
end
return 0
end
function GodModel:GetLastBecomeGodTimeByPos( pos )
if self.become_god_time_list and
self.become_god_time_list[pos] and
self.become_god_time_list[pos].time then
return self.become_god_time_list[pos].time
end
return 0
end
function GodModel:GetBecomeGodCD( )
local god_cd = Config.Godkv["god_summon_cd"] and Config.Godkv["god_summon_cd"].value_content or 300 --需要等5分钟才可以变身
if SceneManager.Instance:IsGodDungeon() then--唤神副本cd打折
local discounts = Trim(Config.Goddunkv["cd_decrease"].val)
god_cd = god_cd*discounts
end
return god_cd
end
function GodModel:GetBecomeGodProgress( )
if not self.can_become_god_time or not GetModuleIsOpen(173,1) or #self:GetGoFightGodList(true) == 0 then return 0, 0 end
local curTime = TimeUtil:getServerTime()
local left_time = self.can_become_god_time-curTime
local max_time = self:GetBecomeGodCD()
local pass_time = max_time - left_time--已经等了多久
if pass_time > max_time then
pass_time = max_time
end
if pass_time < 0 then
pass_time = 0
end
return pass_time, max_time
end
--神灵的持续时间
function GodModel:GetGodDuration( god_id )
local duration = Config.Godkv["god_summon_time"] and Config.Godkv["god_summon_time"].value_content or 20--初始就有20秒
local isActivedSuitEffect = self:IsActivedSuitEffect(god_id, GodConst.SuitEffect.AddGodLifeTime, 1, true)
if isActivedSuitEffect then
--本神激活了二件套
duration = duration+5
end
if self:IsActivedSuitEffectAddAllGodLifeTime() then
--上阵的某神激活了四件套
duration = duration+5
end
return duration
end
--是不是激活了4件套装
function GodModel:IsActivedSuitEffectAddAllGodLifeTime( )
local suit_lv = 2
for k,v in pairs(self:GetGodList()) do
--任意一位神灵激活4件套装的话,所有神灵都可以加成时间
local isActivedSuitEffect = self:IsActivedSuitEffect(v.id, GodConst.SuitEffect.AddGodLifeTime, suit_lv)
if isActivedSuitEffect then
return true
end
end
return false
end
function GodModel:GetOpenTask( sub_id,is_fade_show )
self.open_task = self.open_task or {}
local index = is_fade_show and 1 or 2
if not self.open_task[index] then
self.open_task[index] = 0
sub_id = sub_id
local _, base_conf = GetModuleOpenLevel( 173,sub_id,is_fade_show)
if is_fade_show and base_conf and base_conf.icon_task and base_conf.icon_task ~= 0 then
self.open_task[index] = base_conf.icon_task
else
self.open_task[index] = base_conf and base_conf.task_id or 0
end
end
return self.open_task[index]
end
--获得座印套装名字列表
function GodModel:GetSuitTypeNameList( )
if not self.suit_name_list then
self.suit_name_list = {}
local have_list = {}
local index = 1
for k,v in pairs(Config.Godequipsuit) do
if not have_list[v.suit_id] then
self.suit_name_list[index] = {name = Trim(v.type_name),suit_id = v.suit_id}
index = index + 1
have_list[v.suit_id] = true
end
end
local function sort_call( a,b )
--从大到小
return a.suit_id < b.suit_id
end
table.sort( self.suit_name_list, sort_call )
end
return self.suit_name_list
end
--抽奖每日免费剩余次数
function GodModel:SetGodLeftFreeDrawTimes(vo)
self.left_free_draw_times = vo.free_times
end
function GodModel:GetGodLeftFreeDrawTimes( )
return self.left_free_draw_times
end
function GodModel:GetPreviewShowAwardData( )
local base_data = self:GetActivityLimitInfo()
if not base_data then return {} end
if self.god_ac_pool and self.god_ac_pool[base_data.phase] then
return self.god_ac_pool[base_data.phase]
end
self.god_ac_pool = self.god_ac_pool or {}
local temp_tb = {}
temp_tb.data = {}
temp_tb.color_weight = {}
temp_tb.total_weight = 0
local goods_model = GoodsModel:getInstance()
local lv = RoleManager.Instance.mainRoleInfo.level
for k,v in pairs(Config.Godlimitpool) do
if (v.phase == base_data.phase or v.phase == 0) and v.need_lv <= lv then
local temp = stringtotable(v.awards)[1]
local color = goods_model:GetGoodsColorNum( tonumber(temp[2]) )
temp[4] = v.weight
-- 奖励
temp_tb.data[color] = temp_tb.data[color] or {}
table.insert( temp_tb.data[color], temp )
-- 总权重
temp_tb.total_weight = temp_tb.total_weight + temp[4]
-- 品质权重
temp_tb.color_weight[color] = temp_tb.color_weight[color] or 0
temp_tb.color_weight[color] = temp_tb.color_weight[color] + temp[4]
end
end
local sort_func = function ( a, b )
return a[4] < b[4]
end
for k,v in pairs(temp_tb.data) do
table.sort(v, sort_func)
end
self.god_ac_pool[base_data.phase] = temp_tb
return self.god_ac_pool[base_data.phase]
end
-- 获取星星资源
function GodModel:GetStarResName( show_star )
local style_a, style_b = 0, 0 -- 资源
local temp_a = math.floor(show_star / 5) -- 整数
local temp_b = show_star % 5 -- 余数
if temp_b == 0 then
style_a = temp_a
style_b = temp_a
else
style_a = temp_a
style_b = temp_a + 1
end
local res_a, res_b = false, false
res_a = style_a == 0 and "god_star_0" or "god_star_" .. style_a .. "_1"
res_b = style_b == 0 and "god_star_0" or "god_star_" .. style_b .. "_1"
return res_a, res_b
end