303 lines
9.9 KiB
Lua
303 lines
9.9 KiB
Lua
--作者: xc
|
||
--日期: 2019-04-18
|
||
--文件: NatureMountData.lua
|
||
--模块: NatureMountData
|
||
--描述: 坐骑数据系统子类继承NatureBaseData
|
||
------------------------------------------------
|
||
local NatureBase = require "Logic.Nature.NatureBaseData"
|
||
local SkillSetDate = require "Logic.Nature.NatureSkillSetData"
|
||
local ModelData= require "Logic.Nature.NatureBaseModelData"
|
||
local FashionData = require "Logic.Nature.NatureFashionData"
|
||
local BaseAttrData = require "Logic.Nature.NatureBaseAttrData"
|
||
local BaseItemData = require "Logic.Nature.NatureBaseItemData"
|
||
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
|
||
local LocalPlayerRoot = CS.Thousandto.Code.Logic.LocalPlayerRoot
|
||
|
||
local NatureMountData = {
|
||
Cfg = nil , --坐骑配置表数据
|
||
IsMax = 0, --升级最大等级
|
||
super = nil, --父类对象
|
||
BaseCfg = nil, --基础属性配置表
|
||
BaseExp = 0, --基础属性经验值,进度条
|
||
BaseIsMax = 0, --基础属性最大等级
|
||
BaseAttrList = List:New(), --属性列表,存储NatureBaseAttrData
|
||
BaseStarDir = Dictionary:New(),--阶数对应的最大星数
|
||
BaseItemList = List:New(), --可以吃的道具
|
||
}
|
||
|
||
function NatureMountData:New()
|
||
local _obj = NatureBase:New(NatureEnum.Mount)
|
||
local _M = Utils.DeepCopy(self)
|
||
_M.super = _obj
|
||
return _M
|
||
end
|
||
|
||
--初始化技能
|
||
function NatureMountData:Initialize()
|
||
DataConfig.DataNatureHorse:Foreach(function(k, v)
|
||
if v.Skill ~= "" then
|
||
local _cs = {'_'}
|
||
local _skill = Utils.SplitStrByTable(v.Skill,_cs)
|
||
local skilllevel = tonumber(_skill[2])
|
||
if _skill and #_skill >= 2 and skilllevel == 1 then
|
||
local _data = SkillSetDate:New(v)
|
||
_data.NeedLevel = v.Steps
|
||
self.super.SkillList:Add(_data)
|
||
elseif _skill and #_skill >= 2 then
|
||
self.super.AllSkillList:Add(v)
|
||
end
|
||
end
|
||
if v.ModelID ~= 0 then
|
||
local _data = ModelData:New(v,self.super.NatureType)
|
||
self.super.ModelList:Add(_data)
|
||
end
|
||
if self.BaseStarDir:ContainsKey(v.Steps) then
|
||
if self.BaseStarDir[v.Steps] < v.Star then
|
||
self.BaseStarDir[v.Steps] = v.Star
|
||
end
|
||
else
|
||
self.BaseStarDir:Add(v.Steps,v.Star)
|
||
end
|
||
if self.IsMax < v.Id then
|
||
self.IsMax = v.Id
|
||
end
|
||
end)
|
||
self.super.AllSkillList:Sort(
|
||
function(a,b)
|
||
return tonumber(a.Id) < tonumber(b.Id)
|
||
end
|
||
)
|
||
self.super.SkillList:Sort(
|
||
function(a,b)
|
||
if a.SkillInfo and b.SkillInfo then
|
||
return tonumber(a.SkillInfo.Id) < tonumber(b.SkillInfo.Id)
|
||
end
|
||
return true
|
||
end
|
||
)
|
||
self.super.ModelList:Sort(
|
||
function(a,b)
|
||
return tonumber(a.Stage) < tonumber(b.Stage)
|
||
end
|
||
)
|
||
--初始化化形数据
|
||
DataConfig.DataHuaxingHorse:Foreach(function(k, v)
|
||
if v.IfFashion == 1 and v.IsIgnore == 1 then
|
||
local _data = FashionData:New(v)
|
||
self.super.FishionList:Add(_data)
|
||
end
|
||
end)
|
||
self.super.FishionList:Sort(
|
||
function(a,b)
|
||
return tonumber(a.SortNum) < tonumber(b.SortNum)
|
||
end
|
||
)
|
||
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_ONLINE_ITEMINFO, self.ItemsChange, self)
|
||
GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_MOUNTLV_ITEM_CHANGE, self.ItemsChange, self)
|
||
end
|
||
|
||
--反初始化
|
||
function NatureMountData:UnInitialize()
|
||
self.Cfg = nil
|
||
self.super = nil
|
||
self.IsMax = 0
|
||
self.BaseCfg = nil
|
||
self.BaseExp = 0
|
||
self.BaseIsMax = 0
|
||
self.BaseAttrList:Clear()
|
||
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_ONLINE_ITEMINFO, self.ItemsChange, self)
|
||
GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_MOUNTLV_ITEM_CHANGE, self.ItemsChange, self)
|
||
end
|
||
|
||
--初始化服务器数据
|
||
function NatureMountData:InitWingInfo(msg)
|
||
if msg and msg.natureInfo then
|
||
self.Cfg = DataConfig.DataNatureHorse[msg.natureInfo.curLevel]
|
||
--self.BaseCfg = DataConfig.DataHorseBasic[msg.natureInfo.mountinfo.Level]
|
||
--self.BaseExp = msg.natureInfo.mountinfo.Exp
|
||
--self.super.CurModel = msg.natureInfo.modelId
|
||
self.super:UpDateSkill(msg.natureInfo.haveActiveSkill) --设置技能
|
||
self.super:UpDateModel(msg.natureInfo.haveActiveModel) --设置模型
|
||
self.super:UpDataFashionInfos(msg.natureInfo.outlineInfo) --设置化形
|
||
if self.BaseCfg then
|
||
self:AnalysisAttr(self.BaseCfg.Attribute)
|
||
end
|
||
if self.Cfg then
|
||
self.super:AnalysisAttr(self.Cfg.Attribute)
|
||
self.super:AnalysisItem(self.Cfg.UpItem)
|
||
self.super:Parase(msg.natureType,msg.natureInfo)
|
||
local _num = self.Cfg.Progress - self.super.CurExp
|
||
self.super:UpDateLevelHit(FunctionStartIdCode.MountLevel, self.IsMax, _num, LogicEventDefine.EVENT_MOUNTLV_ITEM_CHANGE)
|
||
end
|
||
self.super:UpDateDrugHit(FunctionStartIdCode.MountDrug)
|
||
self.super:UpDateFashionHit(FunctionStartIdCode.MountFashion)
|
||
self:UpDateModelId(msg.natureInfo.modelId)
|
||
end
|
||
end
|
||
|
||
--更新基础属性升级
|
||
function NatureMountData:UpDateBaseAttr(msg)
|
||
self.super.Fight = msg.fight
|
||
self.BaseCfg = DataConfig.DataHorseBasic[msg.info.Level]
|
||
self.BaseExp = msg.info.Exp
|
||
if self.BaseCfg then
|
||
self:AnalysisAttr(self.BaseCfg.Attribute)
|
||
end
|
||
end
|
||
|
||
--更新技能升级
|
||
function NatureMountData:UpDateUpLevel(msg)
|
||
if msg.activeSkill then
|
||
self.super:UpDateSkill(msg.activeSkill)
|
||
end
|
||
self.super.Level = msg.level
|
||
self.Cfg = DataConfig.DataNatureHorse[msg.level]
|
||
if self.Cfg then
|
||
self.super:AnalysisAttr(self.Cfg.Attribute)
|
||
end
|
||
if msg.activeModel then
|
||
-- for i = 1, #msg.activeModel do
|
||
-- local _data = self.super:GetModelData(msg.activeModel[i])
|
||
-- if _data and not _data.IsActive then
|
||
-- GameCenter.ModelViewSystem:ShowModel(ShowModelType.Mount, msg.activeModel[i], 160, 0, self.super:GetModelsName(msg.activeModel[i]))
|
||
-- end
|
||
-- end
|
||
self.super:UpDateModel(msg.activeModel)
|
||
end
|
||
self.super.CurExp = msg.curexp
|
||
self.super.Fight = msg.fight
|
||
self.super:UpDateLevelHit(FunctionStartIdCode.MountLevel,self.IsMax, self.Cfg.Progress - msg.curexp, LogicEventDefine.EVENT_MOUNTLV_ITEM_CHANGE)
|
||
end
|
||
|
||
--更新吃果子信息
|
||
function NatureMountData:UpDateGrugInfo(msg)
|
||
self.super.Fight = msg.fight
|
||
self.super:UpDateDrug(msg.druginfo)
|
||
self.super:UpDateDrugHit(FunctionStartIdCode.MountDrug)
|
||
end
|
||
|
||
--更新设置模型ID
|
||
function NatureMountData:UpDateModelId(model)
|
||
self.super.CurModel = model
|
||
if model ~= nil and type(model) == "number" then
|
||
LocalPlayerRoot.CurMountId = model
|
||
else
|
||
LocalPlayerRoot.CurMountId = 0
|
||
end
|
||
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_UPDATMOUNTRIDE_STATE)
|
||
end
|
||
|
||
--更新化形升级结果
|
||
function NatureMountData:UpDateFashionInfo(msg)
|
||
local _info = DataConfig.DataHuaxingHorse[msg.id]
|
||
self.super:UpDataFashion(msg,_info)
|
||
self.super:UpDateFashionHit(FunctionStartIdCode.MountFashion)
|
||
end
|
||
|
||
function NatureMountData:ItemsChange()
|
||
if self.super then
|
||
self.super:UpdateLvRed(FunctionStartIdCode.MountLevel)
|
||
end
|
||
end
|
||
|
||
--功能函数!!!!!!!!!!!!!!!
|
||
|
||
--得到当前阶段中最大星数
|
||
function NatureMountData:GetCurMaxStar()
|
||
if self.BaseStarDir:ContainsKey(self.Cfg.Steps) then
|
||
return self.BaseStarDir[self.Cfg.Steps]
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function NatureMountData:AnalysisAttr(str)
|
||
self.BaseAttrList:Clear()
|
||
if str then
|
||
local _cs = {';','_'}
|
||
local _attr = Utils.SplitStrByTableS(str,_cs)
|
||
for i=1,#_attr do
|
||
local _data = BaseAttrData:New(_attr[i][1],_attr[i][2],_attr[i][3])
|
||
self.BaseAttrList:Add(_data)
|
||
end
|
||
end
|
||
end
|
||
|
||
--得到道具经验
|
||
function NatureMountData:GetItemExp(itemid)
|
||
local _isHave = self.BaseItemList:Find(
|
||
function(code)
|
||
return code.ItemID == itemid
|
||
end
|
||
)
|
||
if _isHave then
|
||
return _isHave.ItemExp
|
||
end
|
||
return 0
|
||
end
|
||
|
||
--可以吃的道具
|
||
function NatureMountData:AnalysisItem(str)
|
||
self.BaseItemList:Clear()
|
||
if str then
|
||
local _attr = Utils.SplitStr(str,'_')
|
||
for i=1,#_attr do
|
||
local _itemid = tonumber(_attr[i])
|
||
local _itemInfo = DataConfig.DataItem[_itemid]
|
||
if _itemInfo then
|
||
local _value = Utils.SplitStr(_itemInfo.EffectNum,'_')
|
||
if _value[2] then
|
||
local _data = BaseItemData:New(_itemid,tonumber(_value[2]))
|
||
self.BaseItemList:Add(_data)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--是否满级了
|
||
function NatureMountData:IsMaxLevel()
|
||
return self.IsMax <= self.super.Level
|
||
end
|
||
|
||
--基础是否满级了
|
||
function NatureMountData:IsBaseMaxLevel()
|
||
return self.BaseIsMax <= self.BaseCfg.Id
|
||
end
|
||
|
||
--获取模型相机大小
|
||
function NatureMountData:Get3DUICamerSize(modelid)
|
||
local _info = DataConfig.DataHuaxingHorse[modelid]
|
||
if _info then
|
||
return _info.CameraSize
|
||
end
|
||
return self.super:GetCameraSize(modelid)
|
||
end
|
||
|
||
function NatureMountData:GetModelYPosition(modelid)
|
||
local _info = DataConfig.DataHuaxingHorse[modelid]
|
||
if _info and _info.ModelYPos then
|
||
return _info.ModelYPos / self:Get3DUICamerSize(modelid)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function NatureMountData:GetModelRotation(modelid)
|
||
local _info = DataConfig.DataHuaxingHorse[modelid]
|
||
if _info and _info.CameraRotation then
|
||
local _attr = Utils.SplitNumber(_info.CameraRotation, '_')
|
||
return _attr[1], _attr[2], _attr[3]
|
||
end
|
||
return 0, 0, 0
|
||
end
|
||
|
||
function NatureMountData:GetShowModelYPosition(modelid)
|
||
local _info = DataConfig.DataHuaxingHorse[modelid]
|
||
if _info and _info.ShowModelYPos then
|
||
return _info.ShowModelYPos / self:Get3DUICamerSize(modelid)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
return NatureMountData
|
||
|