This commit is contained in:
chenxi 2023-04-10 17:09:00 +08:00
parent aacf7bc803
commit 8a19ab4781
23 changed files with 332 additions and 870 deletions

View File

@ -115,57 +115,7 @@ BIReport.RUNE_OPT_TYPE = {
}
BIReport.ITEM_GET_TYPE = {
RUNE_LV_UP = "RuneLvUp", -- 符文升级
RUNE_SUMMON = "RuneSummon", -- 符文召唤
MINING_DIGGING = "MiningDigging", -- 挖矿
MINING_RECOVER = "MiningRecover", -- 挖矿回复
MINING_REWARD = "MiningReward", -- 挖矿领奖
RESEARCH = "Research", -- 研究快速结束
MASTERY_UPGRADE = "MasteryUpgrade",
MASTERY_RESET = "MasteryReset",
TRAIN_UP = "TrainUp", -- 修炼升级
QUICK_PASS_UP = "QuickPassUp", -- 速通升级
REBORN = "Reborn", -- 领悟
QUICK_PASS = "QuickPass", -- 速通
SIGNIN = "SignIn", -- 签到
CHAPTER_DROP = "ChapterDrop",
CHAPTER_PASS = "ChapterPass", -- 章节通关
CHAPTER_REWARD_STAGE = "ChapterRewardStage", -- 章节奖励
LOOK_ADS = "LookAds",-- 看广告
DAILY_TASK = "DailyTask", -- 每日任务
IDLE_BASE = "IdleBase", -- 普通挂机
IDLE_AD = "IdleAd", -- 广告挂机
SEVEN_DAY_TASK = "SevenDayTask",
SEVEN_DAY_STEP_REWARD = "SevenDayStepReward",
SDK_PAY = "SdkPay",
TUTORIAL_TASK = "TutorialTask",
DUNGEON = "Dungeon", -- 副本
ARENA = "Arena", -- 英雄大会
MONTH_CARD = "MnonthCard", -- 月卡
BATTLE_PASS_REWARD = "BattlePassReward",
BATTLE_PASS_TASK = "BattlePassTask",
BATTLE_REVIVE = "BattleRevive",
RENAME = "Rename",
MAIL = "Mail",
FUND_CHAPTER = "FuncChapter",
MALL_POP_GIFT = "MallPopGift",
MALL_SKIP_AD_GIFT = "MallSkipAdGift",
MALL_SUBSCRIBE_BLESSING_GIFT = "MallSubscribeBlessingGift",
MALL_MONTH_CARD = "MallMonthCard",
MALL_LIMIT_GIFT = "MallLimitGift",
MALL_FIRST_RECHARGE_GIFT = "MallFirstRechargeGift",
MALL_CHAPTER_FUND = "MallChapterFund",
MALL_BATTLE_PASS = "MallBattlePass",
MALL_TREASURE = "MallTreasure",
DAILY_GIFT = "DailyGift",
WEEKLY_GIFT = "WeeklyGift",
UPDATE_TIME = "UpdateTime",
CROSS_DAY = "CrossDay",
SUMMON = "Summon", -- 抽卡获取
NEW_PLAYER_INITIAL = "NewPlayerInitial", -- 新玩家创号自带
}
BIReport.ADS_CLICK_TYPE = {
@ -326,8 +276,7 @@ function BIReport:report(name, args)
args.gold_value = goldBigBNum.value
args.gold_unit = goldBigBNum.unit
local gemBigNum = DataManager.BagData.ItemData:getItemBigNumById(GConst.ItemConst.ITEM_ID_GEM)
args.gem = BigNumOpt.bigNum2Num(gemBigNum)
args.gem = DataManager.BagData.ItemData:getItemById(GConst.ItemConst.ITEM_ID_GEM)
end
end
args.current_version = CS.BF.BFMain.Instance.GameLaunchMgr:GetCurrentVersion()

View File

@ -8,6 +8,7 @@ function DataManager:init()
self:initManager("PlayerData", "app/userdata/player/player_data")
self:initManager("ChapterData", "app/userdata/chapter/chapter_data")
self:initManager("HeroData", "app/userdata/hero/hero_data")
self:initManager("BagData", "app/userdata/bag/bag_data")
self:initManager("BattleData", "app/userdata/battle/battle_data")
end
@ -48,7 +49,6 @@ function DataManager:checkDataBind()
for name, baseData in pairs(self._cacheManager) do
if name == "BagData" then
changeBindFunc(baseData.ItemData, self[name].ItemData)
changeBindFunc(baseData.EquipData, self[name].EquipData)
else
changeBindFunc(baseData, self[name])
end
@ -67,6 +67,7 @@ function DataManager:clear()
self.BattleData:clear()
self.ChapterData:clear()
self.HeroData:clear()
self.BagData:clear()
ModuleManager.TaskManager:clear()
end
@ -76,9 +77,14 @@ function DataManager:initWithServerData(data)
Time:setServerTimeZone(0)
self.initWithServer = true
if EDITOR_MODE then
Logger.logHighlight("initWithServerData")
Logger.printTable(data)
end
self.PlayerData:init(data.PlayerData)
self.ChapterData:init(data.ChapterData)
self.HeroData:init(data.HeroData)
self.BagData:init(data)
self:scheduleGlobal()
self:checkDataBind()

View File

@ -11,11 +11,21 @@ BattleConst.ONE_STEP_TIME = 0.2
BattleConst.ELEMENT_TYPE_COUNT = 5
BattleConst.ELEMENT_WIGHT = 100
BattleConst.MAX_ELEMENT_WIGHT = 500
BattleConst.SIDE_ATK = 1
BattleConst.SIDE_DEF = 2
BattleConst.BATTLE_TYPE = {
STAGE = 1,
}
BattleConst.UNIT_STATE = {
INIT = 0,
IDLE = 1, -- 待机
ATTACK = 2, -- 攻击
HURT = 3, -- 受伤
DEAD = 4, -- 死亡
}
---- 格子类型
BattleConst.GRID_TYPE = {
EMPTY = 0,

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1d2b66c71824629498617879343ea43a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,36 @@
local BattleConst = require "app/module/battle/battle_const"
local BattleUnitComp = class("BattleUnitComp", LuaComponent)
local UNIT_STATE = BattleConst.UNIT_STATE
function BattleUnitComp:ctor()
end
function BattleUnitComp:init()
self:_initBase()
end
function BattleUnitComp:_initBase()
self.isClear = false
self.isDead = false
end
function BattleUnitComp:tick(dt)
if self.isClear then
return
end
if self.isDead then
self:updateDead(dt)
return
end
if self.currState == UNIT_STATE.IDLE then
self:updateIdle(dt)
return
end
if self.currState == UNIT_STATE.ATTACK then
self:updateAttack(dt)
end
end
return BattleUnitComp

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e202fd02d78948749809ede46846c300
guid: 612a5421ff64f07409a9786ba07c6e59
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}

View File

@ -3,4 +3,12 @@ local ItemConst = {}
ItemConst.ITEM_ID_GOLD = 1
ItemConst.ITEM_ID_GEM = 2
ItemConst.ITEM_TYPE = {
RES = 1,
ITEM = 2,
RANDOM_FRAGMENT = 3,
BOX = 4,
HERO_FRAGMENT = 5
}
return ItemConst

View File

@ -4,64 +4,23 @@ function ServerBagData:ctor()
self.ItemData = require("app/server/data/server_item_data"):create()
end
function ServerBagData:init()
self.ItemData:init()
end
function ServerBagData:loadLocalData()
self.ItemData:loadLocalData()
self.ItemData:init(self.ItemData:loadLocalData())
end
function ServerBagData:getCloneData()
local data = {
ItemData = self.ItemData:getCloneData()
}
return data
end
function ServerBagData:clear()
self.ItemData:clear()
end
function ServerBagData:getItemData()
return self.ItemData:getAllItems()
end
function ServerBagData:tryAddItem(id, num)
return self.ItemData:tryAddItem(id, num)
end
function ServerBagData:tryAddItemReward(item)
local id = GFunc.getRewardId(item)
local num = GFunc.getRewardNum(item)
return self.ItemData:tryAddItem(id, num)
end
function ServerBagData:tryAddItemCost(cost)
local id = GFunc.getRewardId(cost)
local num = GFunc.getRewardNum(cost)
return self.ItemData:tryAddItem(id, -num)
end
function ServerBagData:addItemReward(item, getType)
local id = GFunc.getRewardId(item)
local num = GFunc.getRewardNum(item)
self:addItem(id, num, getType)
end
function ServerBagData:addItemCost(cost)
local id = GFunc.getRewardId(cost)
local num = GFunc.getRewardNum(cost)
self:addItem(id, -num)
end
function ServerBagData:addItem(id, num, getType)
if id == GConst.ItemConst.ITEM_ID_VIT then
local maxCount = self.ItemData:getMaxVit()
local currentCount = self.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_VIT)
local isMax = currentCount >= maxCount
self.ItemData:addItem(id, num, getType)
local currentCount = currentCount + num
local isMax1 = currentCount >= maxCount
if not isMax1 then
if isMax then
self.ItemData:resetVitRecoverTime()
else
self.ItemData:recoveryItems()
end
end
else
self.ItemData:addItem(id, num, getType)
end
end
return ServerBagData

View File

@ -25,11 +25,7 @@ function ServerBaseData:loadLocalData()
if data and data ~= "" then
dataObj = json.decode(data)
end
self:init(dataObj)
end
function ServerBaseData:loadNewPlayerData()
self:init()
return dataObj
end
function ServerBaseData:getCloneData()

View File

@ -1,3 +1,23 @@
local ServerHeroData = class("ServerHeroData", ServerBaseData)
function ServerHeroData:init(data)
self.data.heroes = data and data.heroes or {}
end
function ServerHeroData:getHeroByCfgId(id)
return self.data.heroes[id]
end
function ServerHeroData:addHero(id, lv)
Logger.logHighlight("addHero==11")
if self.data.heroes[id] then
return
end
Logger.logHighlight("addHero==22")
self.data.heroes[id] = {
cfg_id = id,
lv = lv,
}
end
return ServerHeroData

View File

@ -1,74 +1,47 @@
local ServerItemData = class("ServerItemData", ServerBaseData)
function ServerItemData:init(data)
data = data or {}
self.data.items = {}
for idStr, item in pairs(data) do
local id = tonumber(idStr)
if id == GConst.ItemConst.ITEM_ID_VIT then
local ServerGameData = require "app/server/data/server_game_data"
ServerGameData.PlayerData:setVit(item.count)
if data then
for idStr, item in pairs(data.items) do
local id = tonumber(idStr)
if id == GConst.ItemConst.ITEM_ID_VIT then
local ServerGameData = require "app/server/server_game_data"
ServerGameData.PlayerData:setVit(item.count)
end
self.data.items[idStr] = {cfg_id = id, count = item.count}
end
self.data.items[id] = {cfg_id = id, count = item.count}
self.data.recoveries = data.recoveries
else
self.data.recoveries = {}
end
self.data.recoveries = data.recoveries or {}
self:checkRecoveries()
end
function ServerItemData:tryAddItem(id, num)
if not self.data.items[id] then
local idStr = tostring(id)
if not self.data.items[idStr] then
if num < 0 then
return false
end
else
if self.data.items[id].count + num < 0 then
if self.data.items[idStr].count + num < 0 then
return false
end
end
return true
end
function ServerItemData:addItem(id, num, getType)
local hadNum = 0
if self.data.items[id] then
hadNum = self.data.items[id].count
else
self.data.items[id] = {}
self.data.items[id].cfg_id = id
self.data.items[id].count = 0
end
local finalNum = (hadNum or 0) + num
if finalNum < 0 then
finalNum = 0
end
local ServerGameData = require "app/server/data/server_game_data"
if id == GConst.ItemConst.ITEM_ID_VIT then
ServerGameData.PlayerData:setVit(finalNum)
end
self.data.items[id].count = finalNum
if num < 0 then
if id == GConst.ItemConst.ITEM_ID_GEM then
ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GEM_COST, -num)
end
end
getType = getType or ""
if num > 0 and id == GConst.ItemConst.ITEM_ID_GOLD and
getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_RESOLVE and
getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_REBACK then
ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GOLD_GET, num)
end
end
function ServerItemData:getAllItems()
return self.data.items
end
function ServerItemData:getItemNumById(id)
if not self.data.items[id] then
local idStr = tostring(id)
if not self.data.items[idStr] then
return 0
end
local num = self.data.items[id].count or 0
local num = self.data.items[idStr].count or 0
return num
end
@ -106,7 +79,7 @@ function ServerItemData:recoveryItem(data, maxCount)
return
end
if data.cfg_id == GConst.ItemConst.ITEM_ID_VIT then
local ServerGameData = require "app/server/data/server_game_data"
local ServerGameData = require "app/server/server_game_data"
local currentCount = ServerGameData.PlayerData:getVit()
if currentCount >= maxCount then -- 已经达到上限
return
@ -142,7 +115,7 @@ function ServerItemData:recoveryItem(data, maxCount)
if currentCount + addCount > maxCount then
addCount = maxCount - currentCount
end
self:addItem(data.cfg_id, addCount)
self:_addItem(data.cfg_id, addCount)
ServerDataManager:saveData()
end
@ -180,4 +153,69 @@ function ServerItemData:getMaxVit()
return self.maxVit
end
function ServerItemData:addItemReward(item, getType)
local id = GFunc.getRewardId(item)
local num = GFunc.getRewardNum(item)
self:addItem(id, num, getType)
end
function ServerItemData:addItemCost(cost)
local id = GFunc.getRewardId(cost)
local num = GFunc.getRewardNum(cost)
self:addItem(id, -num)
end
function ServerItemData:addItem(id, num, getType)
if id == GConst.ItemConst.ITEM_ID_VIT then
local maxCount = self:getMaxVit()
local currentCount = self:getItemNumById(GConst.ItemConst.ITEM_ID_VIT)
local isMax = currentCount >= maxCount
self:_addItem(id, num, getType)
local currentCount = currentCount + num
local isMax1 = currentCount >= maxCount
if not isMax1 then
if isMax then
self:resetVitRecoverTime()
else
self:recoveryItems()
end
end
else
self:_addItem(id, num, getType)
end
end
function ServerItemData:_addItem(id, num, getType)
local idStr = tostring(id)
local hadNum = 0
if self.data.items[idStr] then
hadNum = self.data.items[idStr].count
else
self.data.items[idStr] = {}
self.data.items[idStr].cfg_id = id
self.data.items[idStr].count = 0
end
local finalNum = (hadNum or 0) + num
if finalNum < 0 then
finalNum = 0
end
local ServerGameData = require "app/server/server_game_data"
if id == GConst.ItemConst.ITEM_ID_VIT then
ServerGameData.PlayerData:setVit(finalNum)
end
self.data.items[idStr].count = finalNum
if num < 0 then
if id == GConst.ItemConst.ITEM_ID_GEM then
ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GEM_COST, -num)
end
end
getType = getType or ""
if num > 0 and id == GConst.ItemConst.ITEM_ID_GOLD and
getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_RESOLVE and
getType ~= GConst.ServerDataConst.DATA_OP_BEHAVIOR.EQUIP_REBACK then
ServerGameData.TaskData:addTaskProgress(GConst.TASK_TYPE.TASK_GOLD_GET, num)
end
end
return ServerItemData

View File

@ -23,20 +23,53 @@ function ServerGameData:initData()
local isNewPlayer = LocalData:getIsNewPlayer()
if isNewPlayer then
for k, v in pairs(self.dataMap) do
v:loadNewPlayerData()
v:init()
end
local playerInitialCfg = ConfigManager:getConfig("player_initial")
if playerInitialCfg then
for k, v in pairs(playerInitialCfg) do
if v.reward then
self:addReward(v.reward)
self.BagData.ItemData:addItemReward(v.reward, BIReport.ITEM_GET_TYPE.NEW_PLAYER_INITIAL)
local rewardId = GFunc.getRewardId(v.reward)
local rewardNum = GFunc.getRewardNum(v.reward)
if rewardId == GConst.ItemConst.ITEM_ID_EXP then
self.PlayerData:addExp(rewardNum)
end
end
end
local itemCfg = ConfigManager:getConfig("item")
local heroCfg = ConfigManager:getConfig("hero")
local heroLvCfg = ConfigManager:getConfig("hero_level")
-- 如果初始化里面有碎片就直接合成
local items = self.BagData.ItemData:getAllItems()
for idStr, item in pairs(items) do
local itemInfo = itemCfg[item.cfg_id]
if itemInfo and itemInfo.type == GConst.ItemConst.ITEM_TYPE.HERO_FRAGMENT then -- 英雄碎片就直接合成
local heroCfgId = itemInfo.parameter or 0
local hero = self.HeroData:getHeroByCfgId(heroCfgId)
if hero == nil or hero.lv <= 0 then -- 没有此英雄的时候才自动转化,不消耗金币且只激活1级
local heroInfo = heroCfg[heroCfgId]
if heroInfo then
local costKey = "cost_" .. heroInfo.qlt
for k, v in ipairs(heroLvCfg) do
if v[costKey] then -- 第一个有值的就是解锁所需的数量
local needCout = v[costKey][1]
if item.count >= needCout then
item.count = item.count - needCout
self.HeroData:addHero(heroCfgId, k)
end
break
end
end
end
end
end
end
end
LocalData:setNotNewPlayer()
-- LocalData:setNotNewPlayer()
else
for k, v in pairs(self.dataMap) do
v:loadLocalData()
v:init(v:loadLocalData())
end
end
end
@ -87,7 +120,7 @@ function ServerGameData:addRewards(cfgRewards, getType)
local rewardType = GFunc.getRewardType(reward)
newReward.type = rewardType
if rewardType == GConst.ServerDataConst.REWARD_TYPE.ITEM then
self.BagData:addItemReward(reward, getType)
self.BagData.ItemData:addItemReward(reward, getType)
local rewardId = GFunc.getRewardId(reward)
local rewardNum = GFunc.getRewardNum(reward)
if rewardId == GConst.ItemConst.ITEM_ID_EXP then
@ -104,42 +137,6 @@ function ServerGameData:addRewards(cfgRewards, getType)
return rewards
end
function ServerGameData:addRewards(cfgReward, getType)
if cfgReward == nil then
return
end
local count = #TempRewards
for i = 1, count do
table.remove(TempRewards)
end
local rewardType = GFunc.getRewardType(cfgReward)
if rewardType == GConst.ServerDataConst.REWARD_TYPE.ITEM then
local rewardId = GFunc.getRewardId(cfgReward)
local rewardNum = GFunc.getRewardNum(cfgReward)
local cfg = ConfigManager:getItemConfig()[rewardId]
if cfg.box_drop then
self:openRewardBox(TempRewards, cfg.box_drop, rewardNum, rewardId)
else
table.insert(TempRewards, cfgReward)
end
else
table.insert(TempRewards, cfgReward)
end
count = #TempRewards
for i = 1, count do
local reward = table.remove(TempRewards)
local rewardType = GFunc.getRewardType(reward)
if rewardType == GConst.ServerDataConst.REWARD_TYPE.ITEM then
self.BagData:addItemReward(reward, getType)
local rewardId = GFunc.getRewardId(reward)
local rewardNum = GFunc.getRewardNum(reward)
if rewardId == GConst.ItemConst.ITEM_ID_EXP then
self.PlayerData:addExp(rewardNum)
end
end
end
end
function ServerGameData:getNewReward()
local rewards = {
type = 0,

View File

@ -11,12 +11,14 @@ BagData.RECOVERY_TYPE = {
function BagData:ctor()
self.ItemData = require("app/userdata/bag/item_data"):create()
self.EquipData = require("app/userdata/bag/equip_data"):create()
end
function BagData:init(data)
self.ItemData:init(data.items)
self.EquipData:init(data.equips)
if data then
self.ItemData:init(data.ItemData)
else
self.ItemData:init()
end
self.recoveries = data.recoveries or {}
-- ts在此处做转换对每日回复来说ts指下次回复时间对时间回复来说ts仍指上次回复时间
@ -32,7 +34,6 @@ end
function BagData:clear()
self.ItemData:clear()
self.EquipData:clear()
self.recoveries = {}
DataManager:unregisterDataCd("BagData")
end
@ -65,7 +66,6 @@ function BagData:getTimelyItemRecoveryTime(itemId)
-- data.ts = Time:getServerTime()
-- return 1000 -- 需要持续重置,保持时间更新
-- end
-- -- 计算时间
-- local intervalTime = cfg.time
-- if itemId == GConst.ItemConst.ITEM_ID_MINING_PICK then
@ -90,7 +90,6 @@ function BagData:getDailyItemRecoveryMaxTime(itemId)
if data then
return data.ts - Time:getServerTime()
end
return -1
end
@ -123,10 +122,10 @@ function BagData:getTimelyItemRecoveryMaxTime(itemId)
-- return curTime
end
-- 按时间回复的在此回复
function BagData:recoveryItem(data, maxBigNum)
function BagData:recoveryItem(data, maxNum)
-- 计算已经达到上限
local curBigNum = self.ItemData:getItemBigNumById(data.id)
if BigNumOpt.bigNumCompare(curBigNum, maxBigNum) >= 0 then
local curBigNum = self.ItemData:getItemNumById(data.id)
if curBigNum >= maxNum then
return
end
-- 计算恢复间隔

View File

@ -1,229 +0,0 @@
local EquipEntity = require "app/userdata/bag/equip_entity"
local EquipData = class("EquipData", BaseData)
function EquipData:setDirty()
self.data.isDirty = not self.data.isDirty
end
function EquipData:setAttrDirty()
self.isAttrDirty = true
end
function EquipData:ctor()
self.equips = {}
self.data.isDirty = false
self.isAttrDirty = true
end
function EquipData:init(data)
if not data then
return
end
self.equips = {}
for _, equip in pairs(data) do
self:_add(equip)
end
self.allWearAttr = {}
self.allOwnAttr = {}
end
function EquipData:_add(equip)
self.equips[equip.id] = EquipEntity:create(equip)
end
function EquipData:clear()
self.equips = {}
end
function EquipData:addEquipCountById(id, count, equipGetType)
if EDITOR_MODE then
if not equipGetType then
local params = {
content = "EquipData addEquipCountById has no equipGetType",
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
Logger.log("EquipData addEquipCountById has no equipGetType")
end
end
local data = {id = id, count = count}
local equipEntity = self:getEquipByCfgId(id)
equipEntity:addCount(count)
BIReport:postEquipGet(id, equipGetType)
end
-- 是否有装备可以升级
function EquipData:isEquipsCanUp(part)
for k,v in pairs(self.equips) do
if v:getPart() == part and v:lvUpCostEnough() then
return true
end
end
return false
end
-- 获取所有可升级装备信息
function EquipData:getAllEquipsCanUpByPart(part)
local reqEquips = {}
local rspEquips = {}
for k,v in pairs(self.equips) do
if v:getPart() == part then
local canUpLv, targetUpLv, targetNum = v:getCanUpLv()
if canUpLv then
-- table.insert(equipInfos, {id = k, targetUpLv = targetUpLv, costNum = costNum})
table.insert(reqEquips, k)
table.insert(rspEquips, {id = k, level = targetUpLv, count = targetNum})
end
end
end
return reqEquips, rspEquips
end
-- 升级所有装备
-- function EquipData:onAllEquipsUp(equipUpInfos)
-- for i,v in ipairs(equipUpInfos) do
-- local entity = self:getEquipByCfgId(v.id)
-- entity:setLv(v.targetUpLv)
-- entity:addCount(-v.costNum)
-- end
-- self:setDirty()
-- end
-- 获取所有装备数据
function EquipData:getAllEquips()
return self.equips
end
function EquipData:updateAllAttr()
self.allWearAttr = {}
self.allOwnAttr = {}
local wearEquips = DataManager.FightInfoData:getWearEquips()
for part, equipEntity in pairs(wearEquips) do
if equipEntity then
local allAttr = equipEntity:getAllWearAttr()
for type, value in pairs(allAttr) do
if not self.allWearAttr[type] then
self.allWearAttr[type] = BigNumOpt.getEmptyBigNum()
end
self.allWearAttr[type] = BigNumOpt.bigNumAdd(self.allWearAttr[type], value)
end
end
end
for k,v in pairs(self.equips) do
if v:getLv() > 0 then
local allAttr = v:getAllOwnAttr()
for type, value in pairs(allAttr) do
if not self.allOwnAttr[type] then
self.allOwnAttr[type] = BigNumOpt.getEmptyBigNum()
end
self.allOwnAttr[type] = BigNumOpt.bigNumAdd(self.allOwnAttr[type], value)
end
end
end
end
-- 获取所有已穿戴装备属性
function EquipData:getAllWearAttr()
if self.isAttrDirty then
self.isAttrDirty = false
self:updateAllAttr()
end
return self.allWearAttr
end
-- 获取所有已拥有装备属性
function EquipData:getAllOwnAttr()
if self.isAttrDirty then
self.isAttrDirty = false
self:updateAllAttr()
end
return self.allOwnAttr
end
function EquipData:getEquipByCfgId(id)
if not self.equips[id] then
self.equips[id] = EquipEntity:create({id = id, count = 0, level = 0})
end
return self.equips[id]
end
function EquipData:getBestEquipByPart(part)
local equip
for k,v in pairs(self.equips) do
if v:getLv() > 0 and v:getPart() == part then
if not equip then
equip = v
else
local wearAttr1 = equip:getAllWearAttr()
local wearAttr2 = v:getAllWearAttr()
for k, vv in pairs(wearAttr1) do
if BigNumOpt.bigNumCompare(wearAttr2[k], vv) > 0 then
equip = v
break
end
end
end
end
end
local equips = {}
if equip then
for k,v in pairs(self.equips) do
if v:getLv() > 0 and v:getPart() == part then
local wearAttr1 = equip:getAllWearAttr()
local wearAttr2 = v:getAllWearAttr()
for k, vv in pairs(wearAttr1) do
if BigNumOpt.bigNumCompare(wearAttr2[k], vv) == 0 then
table.insert(equips, v)
break
end
end
end
end
end
return equips
end
-- function EquipData:onEquipLvUp(id)
-- if not self.equips[id] then
-- return
-- end
-- self.equips[id]:onEquipLvUp()
-- self:setDirty()
-- end
-- 读取配置
function EquipData:getEquipCfgArrByPart(part)
local equipCfg = ConfigManager:getConfig("equip")
local tab = {}
for k,v in pairs(equipCfg) do
if part and v.part == part then
v.id = k
table.insert(tab, v)
end
end
table.sort(tab, function (a, b)
if a.qlt == b.qlt then
return a.id < b.id
end
return a.qlt < b.qlt
end)
return tab
end
function EquipData:getEquipCfgArrByPartAndQlt(part, qlt)
local equipCfg = ConfigManager:getConfig("equip")
local tab = {}
for k,v in pairs(equipCfg) do
if part and v.part == part and v.qlt == qlt then
table.insert(tab, k)
end
end
return tab
end
return EquipData

View File

@ -1,347 +0,0 @@
local EquipEntity = class("EquipEntity", BaseData)
function EquipEntity:ctor(equip)
self.config = nil
self:init(equip)
end
function EquipEntity:init(equip)
self.id = equip.id
self.data.count = equip.count or 0
self.data.lv = equip.level or 0
self.allOwnAttr = {}
self.allWearAttr = {}
self:_loadConfig(equip.id)
end
function EquipEntity:getConfig(id)
local EquipCfg = ConfigManager:getConfig("equip")
local config = EquipCfg[id]
return config
end
function EquipEntity:_loadConfig(id)
local config = self:getConfig(id)
if EDITOR_MODE then
if not config then
Logger.logError("装备初始化异常 配置表ID不存在 -- id:%s", self.id)
end
end
self.config = config
self:updateAttr()
end
function EquipEntity:setLv(lv)
lv = lv or 1
self.data.lv = lv
self:updateAttr()
DataManager.BagData.EquipData:setAttrDirty()
end
function EquipEntity:getLv()
return self.data.lv
end
function EquipEntity:getCount()
return self.data.count
end
function EquipEntity:addCount(count)
if self.data.lv == 0 then
self.data.lv = 1
self.data.isNew = true
DataManager.BagData.EquipData:setAttrDirty()
end
self.data.count = self.data.count + count
end
function EquipEntity:getIsNew()
return self.data.isNew or false
end
function EquipEntity:setIsNew(isNew)
self.data.isNew = isNew
end
function EquipEntity:setCount(count)
self.data.count = count
end
-- id
function EquipEntity:getId()
return self.id
end
function EquipEntity:setId(id)
self.id = id
self:_loadConfig(self.id)
end
function EquipEntity:getNextId()
return self.config.next_id
end
function EquipEntity:isLock()
if self.data.lv > 0 or self.data.count > 0 then
return false
end
return true
end
function EquipEntity:getSkillIds()
if self.data.lv == 0 then
return self.config.skill_id or {}, {1, 1, 1}
end
local lvs = {}
local re = (self.data.lv - 1)%3
local baseLv = (self.data.lv - 1) // 3
for i = 1, 3 do
if re >= i then
lvs[i] = baseLv + 2
else
lvs[i] = baseLv + 1
end
end
return self.config.skill_id or {}, lvs
end
function EquipEntity:getAttackIds()
return self.config.attack_id or {}
end
function EquipEntity:getAttackExtraIds()
return self.config.attack_extra_id or {}
end
-- 品质
function EquipEntity:getQuality()
return self.config.qlt
end
function EquipEntity:getQltDesc()
return I18N:getGlobalText("QLT_DESC_" .. self.config.qlt)
end
-- 装备图标
function EquipEntity:getFrameRes()
return GConst.ATLAS_PATH.ICON_EQUIP, "frame_" .. self.config.qlt
end
-- 装备图标
function EquipEntity:getIconRes()
return GConst.ATLAS_PATH.ICON_EQUIP, tostring(self.config.icon)
end
-- 部位
function EquipEntity:getPart()
return self.config.part
end
function EquipEntity:getWeaponPart()
return self.config.weapon_part
end
function EquipEntity:getPartBgRes()
return GConst.ATLAS_PATH.ICON_EQUIP, "type_" .. self.config.qlt
end
function EquipEntity:getPartRes()
return GConst.ATLAS_PATH.ICON_EQUIP, "e" .. self.config.part
end
function EquipEntity:isMaxLv()
if self.data.lv >= self:getMaxLv() then
return true
end
return false
end
function EquipEntity:getName()
return I18N:getText("equip", self.id, "name")
end
function EquipEntity:getDesc()
return I18N:getText("equip", self.id, "desc")
end
-- 拥有属性
function EquipEntity:getBaseOwnAttr()
return self.config.base_own
end
-- function EquipEntity:getBaseOwnAttrType()
-- return self.config.base_own.type
-- end
-- function EquipEntity:getBaseOwnAttrTypeId()
-- return GConst.ATTR_TYPE[self.config.base_own.type]
-- end
-- function EquipEntity:getBaseOwnAttrBignum()
-- return self.config.base_own.bignum
-- end
-- function EquipEntity:getBaseOwnAttrStr()
-- return self.config.base_own.bignum.value .. BigNumOpt.getBigNumUnit(self.config.base_own.bignum.unit)
-- end
function EquipEntity:getGrowOwnAttr()
return self.config.grow_own
end
-- function EquipEntity:getGrowOwnAttrType()
-- return self.config.grow_own.type
-- end
-- function EquipEntity:getGrowOwnAttrTypeId()
-- return GConst.ATTR_TYPE[self.config.grow_own.type]
-- end
-- function EquipEntity:getGrowOwnAttrBigNum()
-- return self.config.grow_own.bignum
-- end
-- 穿戴属性
function EquipEntity:getBaseWearAttr()
return self.config.base_wear
end
-- function EquipEntity:getBaseWearAttrType()
-- return self.config.base_wear.type
-- end
-- function EquipEntity:getBaseWearAttrTypeId()
-- return GConst.ATTR_TYPE[self.config.base_wear.type]
-- end
-- function EquipEntity:getBaseWearAttrBignum()
-- return self.config.base_wear.bignum
-- end
-- function EquipEntity:getBaseWearAttrStr()
-- return self.config.base_wear.bignum.value .. BigNumOpt.getBigNumUnit(self.config.base_wear.bignum.unit)
-- end
function EquipEntity:getGrowWearAttr()
return self.config.grow_wear
end
-- function EquipEntity:getGrowWearAttrType()
-- return self.config.grow_wear.type
-- end
function EquipEntity:getUpgradeCost()
return self.config.upgrade_cost or {}
end
-- function EquipEntity:getGrowWearAttrTypeId()
-- return GConst.ATTR_TYPE[self.config.grow_wear.type]
-- end
-- function EquipEntity:getWeaponModel()
-- return self.config.equip_model
-- end
-- function EquipEntity:getWeaponAniName()
-- return self.config.act_type
-- end
function EquipEntity:updateAttr()
self.allOwnAttr = {}
self.allWearAttr = {}
local baseOwnAttr = self:getBaseOwnAttr()
local growOwnAttr = self:getGrowOwnAttr()
local baseWearAttr = self:getBaseWearAttr()
local growWearAttr = self:getGrowWearAttr()
for i,v in ipairs(baseOwnAttr) do
self.allOwnAttr[GConst.ATTR_TYPE[v.type]] = v.bignum
end
for i,v in ipairs(baseWearAttr) do
self.allWearAttr[GConst.ATTR_TYPE[v.type]] = v.bignum
end
-- self.allOwnAttr[baseOwnAttr.type] = baseOwnAttr.bignum
-- self.allWearAttr[baseWearAttr.type] = baseWearAttr.bignum
if self.data.lv > 1 then
for i,v in ipairs(growOwnAttr) do
if not self.allOwnAttr[GConst.ATTR_TYPE[v.type]] then
self.allOwnAttr[GConst.ATTR_TYPE[v.type]] = BigNumOpt.getEmptyBigNum()
end
local growAttr = BigNumOpt.bigNumMultNum(v.bignum, self.data.lv - 1)
self.allOwnAttr[GConst.ATTR_TYPE[v.type]] = BigNumOpt.bigNumAdd(self.allOwnAttr[GConst.ATTR_TYPE[v.type]], growAttr)
end
for i,v in ipairs(growWearAttr) do
if not self.allWearAttr[GConst.ATTR_TYPE[v.type]] then
self.allWearAttr[GConst.ATTR_TYPE[v.type]] = BigNumOpt.getEmptyBigNum()
end
local growAttr = BigNumOpt.bigNumMultNum(v.bignum, self.data.lv - 1)
self.allWearAttr[GConst.ATTR_TYPE[v.type]] = BigNumOpt.bigNumAdd(self.allWearAttr[GConst.ATTR_TYPE[v.type]], growAttr)
end
end
end
function EquipEntity:getAllOwnAttr()
return self.allOwnAttr
end
function EquipEntity:getAllWearAttr()
return self.allWearAttr
end
function EquipEntity:getNeedNum(lv)
lv = lv or self.data.lv
local costCount = 0
local upgradeCost = self:getUpgradeCost()
if lv >= #upgradeCost then
costCount = upgradeCost[#upgradeCost]
elseif lv == 0 then
costCount = upgradeCost[1]
else
costCount = upgradeCost[lv]
end
return costCount
end
function EquipEntity:lvUpCostEnough()
local costCount = self:getNeedNum()
if self.data.count >= costCount then
return true
end
return false
end
-- function EquipEntity:onEquipLvUp()
-- if self:lvUpCostEnough() then
-- self.data.count = self.data.count - self:getNeedNum()
-- self:setLv(self.data.lv + 1)
-- end
-- end
-- function EquipEntity:getPerEquipLvUpRsp()
-- local tab = {}
-- tab.id = self.id
-- tab.count = self.data.count - self:getNeedNum()
-- tab.level = self.data.lv + 1
-- return tab
-- end
function EquipEntity:getCanUpLv()
local hadNum = self.data.count
local costNum = 0
local lv = self.data.lv
while true do
local needNum = self:getNeedNum(lv)
if hadNum >= needNum then
lv = lv + 1
hadNum = hadNum - needNum
costNum = costNum + needNum
else
break
end
end
return costNum > 0, lv, hadNum
end
return EquipEntity

View File

@ -19,24 +19,23 @@ function ItemData:init(data)
self.items = {}
data = data or {}
for _, info in pairs(data) do
if info.id == GConst.ItemConst.ITEM_ID_GEM then
local parmas = {}
parmas.gem = BigNumOpt.bigNum2Num(info.count)
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
elseif info.id == GConst.ItemConst.ITEM_ID_GOLD then
local parmas = {}
parmas.gold_value = info.count.value
parmas.gold_unit = info.count.unit
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
end
self:_add(info.id, info.count)
-- if info.id == GConst.ItemConst.ITEM_ID_GEM then
-- local parmas = {}
-- parmas.gem = BigNumOpt.bigNum2Num(info.count)
-- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
-- elseif info.id == GConst.ItemConst.ITEM_ID_GOLD then
-- local parmas = {}
-- parmas.gold_value = info.count.value
-- parmas.gold_unit = info.count.unit
-- CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
-- end
self:_add(info.cfg_id, info.count)
end
self.data.dirty = false
end
function ItemData:_add(id, bigNum)
self.items[id] = ItemEntity:create(id, bigNum)
function ItemData:_add(id, num)
self.items[id] = ItemEntity:create(id, num)
end
function ItemData:clear()
@ -48,7 +47,7 @@ function ItemData:getItemById(id)
if self.items[id] then
return self.items[id]
end
local item = ItemEntity:create(id, BigNumOpt.num2BigNum(0))
local item = ItemEntity:create(id, 0)
self.items[id] = item
return self.items[id]
end
@ -61,32 +60,22 @@ end
function ItemData:getItemBigNumById(id)
local num
if self.items[id] then
num = self.items[id]:getBigNum()
num = self.items[id]:getNum()
else
num = BigNumOpt.num2BigNum(0)
end
return num
end
function ItemData:getItemBigNumStrById(id)
local num = 0
if self.items[id] then
num = self.items[id]:getBigNumStr()
num = 0
end
return num
end
function ItemData:addItemReward(item, itemGetType)
CACHE_ITEM.id = item.id
CACHE_ITEM.count.unit = item.count.unit
CACHE_ITEM.count.value = item.count.value
CACHE_ITEM.cfg_id = GFunc.getRewardId(item)
CACHE_ITEM.count = GFunc.getRewardNum(item)
self:addItem(CACHE_ITEM, itemGetType)
end
function ItemData:addItemCost(cost, itemGetType)
CACHE_ITEM.id = cost.id
CACHE_ITEM.count.unit = cost.count.unit
CACHE_ITEM.count.value = -cost.count.value
CACHE_ITEM.cfg_id = GFunc.getRewardId(cost)
CACHE_ITEM.count = -GFunc.getRewardNum(cost)
self:addItem(CACHE_ITEM, itemGetType)
end
@ -94,8 +83,8 @@ function ItemData:addItemCosts(costs, itemGetType)
if not costs then
return
end
for _, unitCost in ipairs(costs) do
self:addItemCost(unitCost, itemGetType)
for _, cost in ipairs(costs) do
self:addItemCost(cost, itemGetType)
end
end
@ -116,72 +105,49 @@ function ItemData:addItem(data, itemGetType)
end
end
local itemCfg = ConfigManager:getConfig("item")[data.id]
self:_addItemNumById(data.cfg_id, data.count)
self:_addItemNumById(data.id, data.count)
if data.id == GConst.ItemConst.ITEM_ID_GEM or data.id == GConst.ItemConst.ITEM_ID_GOLD then
if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM or data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
if data.count.value < 0 then
if data.id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.TRAIN_UP then
if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.TRAIN_UP then
else
BIReport:postGemUse(data.count, itemGetType, data.id)
if data.id == GConst.ItemConst.ITEM_ID_GEM then
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", BigNumOpt.bigNum2Num(data.count))
elseif data.id == GConst.ItemConst.ITEM_ID_GOLD then
local goldBigNum = DataManager.BagData.ItemData:getItemBigNumById(GConst.ItemConst.ITEM_ID_GOLD)
BIReport:postGemUse(data.count, itemGetType, data.cfg_id)
if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
local parmas = {}
parmas.gold_value = goldBigNum.value
parmas.gold_unit = goldBigNum.unit
parmas.gold = goldNum
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
end
end
else
if data.id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.CHAPTER_DROP then
if data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD and itemGetType == BIReport.ITEM_GET_TYPE.CHAPTER_DROP then
else
BIReport:postGemGet(data.count, itemGetType, data.id)
if data.id == GConst.ItemConst.ITEM_ID_GEM then
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", BigNumOpt.bigNum2Num(data.count))
elseif data.id == GConst.ItemConst.ITEM_ID_GOLD then
local goldBigNum = DataManager.BagData.ItemData:getItemBigNumById(GConst.ItemConst.ITEM_ID_GOLD)
BIReport:postGemGet(data.count, itemGetType, data.cfg_id)
if data.cfg_id == GConst.ItemConst.ITEM_ID_GEM then
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserAdd("gem", data.count)
elseif data.cfg_id == GConst.ItemConst.ITEM_ID_GOLD then
local goldNum = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD)
local parmas = {}
parmas.gold_value = goldBigNum.value
parmas.gold_unit = goldBigNum.unit
parmas.gold = goldNum
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(parmas)
end
end
end
else
if data.count.value < 0 then
BIReport:postItemUse(data.count, data.id, itemGetType)
BIReport:postItemUse(data.count, data.cfg_id, itemGetType)
else
BIReport:postItemGet(data.count, data.id, itemGetType)
end
end
if data.id == GConst.ItemConst.ITEM_ID_MINING_PICK then
local num = BigNumOpt.bigNum2Num(data.count)
if num < 0 then
num = -num
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_HOE_USE, {num = num})
end
elseif data.id == GConst.ItemConst.ITEM_ID_DRILL then
local num = BigNumOpt.bigNum2Num(data.count)
if num < 0 then
num = -num
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_BORING_CROWN_USE, {num = num})
end
elseif data.id == GConst.ItemConst.ITEM_ID_EXPLOSIVE then
local num = BigNumOpt.bigNum2Num(data.count)
if num < 0 then
num = -num
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_BOOM_USE, {num = num})
BIReport:postItemGet(data.count, data.cfg_id, itemGetType)
end
end
end
function ItemData:addItemNumById(id, num, itemGetType)
local data = {id = id, count = num}
self:addItem(data, itemGetType)
CACHE_ITEM.cfg_id = id
CACHE_ITEM.count = num
self:addItem(CACHE_ITEM, itemGetType)
end
function ItemData:_addItemNumById(id, bigNum)
@ -195,7 +161,7 @@ function ItemData:_addItemNumById(id, bigNum)
-- isFull = currentCount >= maxVit
-- end
if self.items[id] then
self.items[id]:addBigNum(bigNum)
self.items[id]:addNum(bigNum)
else
self:_add(id, bigNum)
end

View File

@ -34,12 +34,8 @@ function ItemEntity:getBigNum()
return self.data.bigNum
end
function ItemEntity:getBigNumStr()
return BigNumOpt.bigNum2Str(self.data.bigNum)
end
-- 加减道具数量
function ItemEntity:addBigNum(bigNum)
function ItemEntity:addNum(num)
self.data.bigNum = BigNumOpt.bigNumAdd(self.data.bigNum, bigNum)
self:setDirty()
end

View File

@ -1,3 +1,5 @@
local BattleTeamEntity = require "app/userdata/battle/team/battle_team_entity"
local BattleData = class("BattleData", BaseData)
local BattleConst = GConst.BattleConst
@ -6,6 +8,8 @@ local BATTLE_CARD_SKILL_ENTITY = require "app/userdata/battle/skill/battle_card_
function BattleData:init(board)
self:clear()
self.atkTeam = self:initTeam(BattleConst.SIDE_ATK)
self.defTeam = self:initTeam(BattleConst.SIDE_DEF)
for i, info in ipairs(board) do
local r = 1
@ -136,4 +140,10 @@ function BattleData:setGridInfo(posId, gridInfo)
end
end
function BattleData:initTeam(side)
local team = BattleTeamEntity:create()
team:init(side)
return team
end
return BattleData

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 589f4571d71430d4e8c91ff45291e5c4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,13 @@
local BattleUnitEntity = require "app/userdata/battle/team/battle_unit_entity"
local BattleTeamEntity = class("BattleTeamEntity", BaseData)
function BattleTeamEntity:ctor()
self.members = {}
end
function BattleTeamEntity:init(side)
self.side = side
end
return BattleTeamEntity

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4b8e39bcbd3e7764cab23eeb28728ba0
guid: 2338db9a689f0bb43a3a28739268ea4e
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}

View File

@ -0,0 +1,9 @@
local BattleUnitEntity = class("BattleUnitEntity", BaseData)
function BattleUnitEntity:ctor()
end
function BattleUnitEntity:init()
end
return BattleUnitEntity

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: d87717a1e70e9c443afefb650cd9105f
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}