装备特征后端功能
This commit is contained in:
gechangfu 2025-08-12 15:09:58 +08:00
parent 5d0f85c31a
commit 170d8d28b2
17 changed files with 149 additions and 104 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
[
{"id":20000,"type":1,"icon":1,"behaviourName":"Attack","upgradeCost":[30000,5,0],"upgradeValue":[10,0],"recycle":[30000,0]},
{"id":20001,"type":1,"icon":1,"behaviourName":"SwordWave","upgradeCost":[30000,5,10],"upgradeValue":[10,200],"recycle":[30000,100]}
{"id":20000,"type":1,"icon":1,"behaviourName":"Attack","upgradeCost":[30000,5,0],"upgradeValue":[10,0],"recycle":[30000,0],"isInPool":null},
{"id":20001,"type":1,"icon":1,"behaviourName":"SwordWave","upgradeCost":[30000,5,10],"upgradeValue":[10,200],"recycle":[30000,100],"isInPool":1}
]

View File

@ -1,3 +1,3 @@
[
{"id":1,"name":1,"attack":40,"hp":600,"walkSpeed":10,"atkSpeed":100}
{"id":1,"name":1,"attack":40,"hp":600,"walkSpeed":15,"atkSpeed":100}
]

View File

@ -1,18 +1,18 @@
[
{"id":40000,"type":1,"name":40000,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"MCSword","recycle":100},
{"id":40001,"type":1,"name":40001,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40002,"type":1,"name":40002,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40003,"type":1,"name":40003,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40004,"type":1,"name":40004,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40005,"type":1,"name":40005,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40006,"type":1,"name":40006,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40007,"type":1,"name":40007,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40008,"type":1,"name":40008,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40009,"type":1,"name":40009,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40010,"type":1,"name":40010,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40011,"type":1,"name":40011,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40012,"type":1,"name":40012,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40013,"type":1,"name":40013,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40014,"type":1,"name":40014,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100},
{"id":40015,"type":1,"name":40015,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","recycle":100}
{"id":40000,"type":1,"name":40000,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"MCSword","specialType":2,"specialRequire":20001,"specialActive":[14,25],"recycle":100},
{"id":40001,"type":1,"name":40001,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":7,"specialActive":[14,25],"recycle":100},
{"id":40002,"type":1,"name":40002,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":8,"specialActive":[14,25],"recycle":100},
{"id":40003,"type":1,"name":40003,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":9,"specialActive":[14,25],"recycle":100},
{"id":40004,"type":1,"name":40004,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":10,"specialActive":[14,25],"recycle":100},
{"id":40005,"type":1,"name":40005,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":11,"specialActive":[14,25],"recycle":100},
{"id":40006,"type":1,"name":40006,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":12,"specialActive":[14,25],"recycle":100},
{"id":40007,"type":1,"name":40007,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":13,"specialActive":[14,25],"recycle":100},
{"id":40008,"type":1,"name":40008,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":6,"specialActive":[14,25],"recycle":100},
{"id":40009,"type":1,"name":40009,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":7,"specialActive":[14,25],"recycle":100},
{"id":40010,"type":1,"name":40010,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":8,"specialActive":[14,25],"recycle":100},
{"id":40011,"type":1,"name":40011,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":9,"specialActive":[14,25],"recycle":100},
{"id":40012,"type":1,"name":40012,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":10,"specialActive":[14,25],"recycle":100},
{"id":40013,"type":1,"name":40013,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":11,"specialActive":[14,25],"recycle":100},
{"id":40014,"type":1,"name":40014,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":12,"specialActive":[14,25],"recycle":100},
{"id":40015,"type":1,"name":40015,"attributes":[14,100,0,15,100,0,16,100,0],"modelName":"Zeus","specialType":1,"specialRequire":13,"specialActive":[14,25],"recycle":100}
]

View File

@ -2,51 +2,51 @@
{"id":1,"type":1,"timeLimit":null,"atkBonus":100,"hpBonus":100,"wave":[[30,1,1],[10,1,1],[10,1,1],[10,1,1]],"finishRewards":[50001,1]},
{"id":2,"type":1,"timeLimit":null,"atkBonus":100,"hpBonus":100,"wave":[[30,1,1],[10,1,1],[10,1,1],[10,1,1]],"finishRewards":[50002,1]},
{"id":3,"type":1,"timeLimit":null,"atkBonus":100,"hpBonus":100,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50003,1]},
{"id":4,"type":1,"timeLimit":null,"atkBonus":100,"hpBonus":100,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50004,1]},
{"id":5,"type":2,"timeLimit":60,"atkBonus":121,"hpBonus":121,"wave":[[30,1000,1]],"finishRewards":[50005,1]},
{"id":6,"type":1,"timeLimit":null,"atkBonus":127,"hpBonus":127,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50006,1]},
{"id":7,"type":1,"timeLimit":null,"atkBonus":134,"hpBonus":134,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50007,1]},
{"id":8,"type":1,"timeLimit":null,"atkBonus":140,"hpBonus":140,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50008,1]},
{"id":9,"type":1,"timeLimit":null,"atkBonus":147,"hpBonus":147,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50009,1]},
{"id":10,"type":2,"timeLimit":60,"atkBonus":155,"hpBonus":155,"wave":[[30,1000,1]],"finishRewards":[50010,1]},
{"id":11,"type":1,"timeLimit":null,"atkBonus":162,"hpBonus":162,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50011,1]},
{"id":12,"type":1,"timeLimit":null,"atkBonus":171,"hpBonus":171,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50012,1]},
{"id":13,"type":1,"timeLimit":null,"atkBonus":179,"hpBonus":179,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50013,1]},
{"id":14,"type":1,"timeLimit":null,"atkBonus":188,"hpBonus":188,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50014,1]},
{"id":15,"type":2,"timeLimit":60,"atkBonus":197,"hpBonus":197,"wave":[[30,1000,1]],"finishRewards":[50015,1]},
{"id":4,"type":1,"timeLimit":null,"atkBonus":100,"hpBonus":100,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":5,"type":2,"timeLimit":60,"atkBonus":121,"hpBonus":121,"wave":[[30,1000,1]],"finishRewards":[50004,1]},
{"id":6,"type":1,"timeLimit":null,"atkBonus":127,"hpBonus":127,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":7,"type":1,"timeLimit":null,"atkBonus":134,"hpBonus":134,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":8,"type":1,"timeLimit":null,"atkBonus":140,"hpBonus":140,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":9,"type":1,"timeLimit":null,"atkBonus":147,"hpBonus":147,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":10,"type":2,"timeLimit":60,"atkBonus":155,"hpBonus":155,"wave":[[30,1000,1]],"finishRewards":[50005,1]},
{"id":11,"type":1,"timeLimit":null,"atkBonus":162,"hpBonus":162,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":12,"type":1,"timeLimit":null,"atkBonus":171,"hpBonus":171,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":13,"type":1,"timeLimit":null,"atkBonus":179,"hpBonus":179,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":14,"type":1,"timeLimit":null,"atkBonus":188,"hpBonus":188,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":15,"type":2,"timeLimit":60,"atkBonus":197,"hpBonus":197,"wave":[[30,1000,1]],"finishRewards":[50006,1]},
{"id":16,"type":1,"timeLimit":null,"atkBonus":207,"hpBonus":207,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":17,"type":1,"timeLimit":null,"atkBonus":218,"hpBonus":218,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":18,"type":1,"timeLimit":null,"atkBonus":229,"hpBonus":229,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":19,"type":1,"timeLimit":null,"atkBonus":240,"hpBonus":240,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":20,"type":2,"timeLimit":60,"atkBonus":252,"hpBonus":252,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":20,"type":2,"timeLimit":60,"atkBonus":252,"hpBonus":252,"wave":[[30,1000,1]],"finishRewards":[50007,1]},
{"id":21,"type":1,"timeLimit":null,"atkBonus":265,"hpBonus":265,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":22,"type":1,"timeLimit":null,"atkBonus":278,"hpBonus":278,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":23,"type":1,"timeLimit":null,"atkBonus":292,"hpBonus":292,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":24,"type":1,"timeLimit":null,"atkBonus":307,"hpBonus":307,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":25,"type":2,"timeLimit":60,"atkBonus":322,"hpBonus":322,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":25,"type":2,"timeLimit":60,"atkBonus":322,"hpBonus":322,"wave":[[30,1000,1]],"finishRewards":[50008,1]},
{"id":26,"type":1,"timeLimit":null,"atkBonus":338,"hpBonus":338,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":27,"type":1,"timeLimit":null,"atkBonus":355,"hpBonus":355,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":28,"type":1,"timeLimit":null,"atkBonus":373,"hpBonus":373,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":29,"type":1,"timeLimit":null,"atkBonus":392,"hpBonus":392,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":30,"type":2,"timeLimit":60,"atkBonus":411,"hpBonus":411,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":30,"type":2,"timeLimit":60,"atkBonus":411,"hpBonus":411,"wave":[[30,1000,1]],"finishRewards":[50009,1]},
{"id":31,"type":1,"timeLimit":null,"atkBonus":432,"hpBonus":432,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":32,"type":1,"timeLimit":null,"atkBonus":453,"hpBonus":453,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":33,"type":1,"timeLimit":null,"atkBonus":476,"hpBonus":476,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":34,"type":1,"timeLimit":null,"atkBonus":500,"hpBonus":500,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":35,"type":2,"timeLimit":60,"atkBonus":525,"hpBonus":525,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":35,"type":2,"timeLimit":60,"atkBonus":525,"hpBonus":525,"wave":[[30,1000,1]],"finishRewards":[50010,1]},
{"id":36,"type":1,"timeLimit":null,"atkBonus":551,"hpBonus":551,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":37,"type":1,"timeLimit":null,"atkBonus":579,"hpBonus":579,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":38,"type":1,"timeLimit":null,"atkBonus":608,"hpBonus":608,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":39,"type":1,"timeLimit":null,"atkBonus":638,"hpBonus":638,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":40,"type":2,"timeLimit":60,"atkBonus":670,"hpBonus":670,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":40,"type":2,"timeLimit":60,"atkBonus":670,"hpBonus":670,"wave":[[30,1000,1]],"finishRewards":[50011,1]},
{"id":41,"type":1,"timeLimit":null,"atkBonus":703,"hpBonus":703,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":42,"type":1,"timeLimit":null,"atkBonus":739,"hpBonus":739,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":43,"type":1,"timeLimit":null,"atkBonus":776,"hpBonus":776,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":44,"type":1,"timeLimit":null,"atkBonus":814,"hpBonus":814,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":45,"type":2,"timeLimit":60,"atkBonus":855,"hpBonus":855,"wave":[[30,1000,1]],"finishRewards":[]},
{"id":45,"type":2,"timeLimit":60,"atkBonus":855,"hpBonus":855,"wave":[[30,1000,1]],"finishRewards":[50012,1]},
{"id":46,"type":1,"timeLimit":null,"atkBonus":898,"hpBonus":898,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":47,"type":1,"timeLimit":null,"atkBonus":943,"hpBonus":943,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":48,"type":1,"timeLimit":null,"atkBonus":990,"hpBonus":990,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":49,"type":1,"timeLimit":null,"atkBonus":1040,"hpBonus":1040,"wave":[[30,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]},
{"id":50,"type":2,"timeLimit":60,"atkBonus":1092,"hpBonus":1092,"wave":[[30,1000,1]],"finishRewards":[]}
{"id":50,"type":2,"timeLimit":60,"atkBonus":1092,"hpBonus":1092,"wave":[[30,1000,1]],"finishRewards":[50013,1]}
]

View File

@ -21,6 +21,8 @@ end
function Utils:GetPlayerDataFolder(Player: Player)
local pData = PlayerDataFolder:FindFirstChild(Player.UserId)
if pData then return pData end
--打印堆栈
print(debug.traceback())
warn("玩家数据不存在: " .. Player.Name)
return nil
end
@ -71,7 +73,7 @@ end
function Utils:GetIdDataFromJson(JsonData: table, id: number)
-- 遍历JsonData查找id字段等于目标id的项
for _, item in ipairs(JsonData) do
if item.id == id then
if item.id == tonumber(id) then
return Utils:DeepCopyTable(item)
end
end

View File

@ -33,7 +33,7 @@ end
-- 初始化玩家
function AbilityProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then return end
local AbilityFolder = Utils:CreateFolder("Ability", pData)
@ -60,7 +60,7 @@ function AbilityProxy:AddAbility(Player: Player, AbilityId: number)
local AbilityData = Utils:GetIdDataFromJson(JsonAbility, AbilityId)
if not AbilityData then return end
local UniqueId = Utils:GenUniqueId(ArchiveProxy.pData[Player.UserId])
local UniqueId = Utils:GenUniqueId(ArchiveProxy.pData[Player.UserId][STORE_NAME]["Ability"])
-- 配置表内容
local ResultData = {}
for key, value in pairs(AbilityData) do
@ -75,7 +75,7 @@ function AbilityProxy:AddAbility(Player: Player, AbilityId: number)
-- 记录穿戴的装备UniqueId
ResultData.wearing = 0
ArchiveProxy.pData[Player.UserId][UniqueId] = ResultData
ArchiveProxy.pData[Player.UserId][STORE_NAME]["Ability"][UniqueId] = ResultData
local AbilityInstance = Utils:CreateDataInstance(Player, UniqueId, ResultData, GetPlayerAbilityFolder(Player))
return Utils:DeepCopyTable(ResultData), AbilityInstance
end
@ -142,15 +142,11 @@ end
-- 穿戴技能
function AbilityProxy:WearAbility(Player: Player, AbilityUniqueId: number, EquipmentUniqueId: number)
local pData = Utils:GetPlayerDataFolder(Player)
if not pData then return end
if not pData then print("pData不存在", Player.Name) return end
-- 获取技能实例存储数据
local UniqueData = ArchiveProxy.pData[Player.UserId][AbilityUniqueId]
if not UniqueData then return end
-- 获取装备实例存储数据
local EquipmentData = ArchiveProxy.pData[Player.UserId][EquipmentUniqueId]
if not EquipmentData then return end
local UniqueData = ArchiveProxy.pData[Player.UserId][STORE_NAME]["Ability"][AbilityUniqueId]
if not UniqueData then print("UniqueData不存在", Player.Name, AbilityUniqueId) return end
-- 检查是否有技能实例
local AbilityInstance = GetPlayerAbilityFolder(Player):FindFirstChild(AbilityUniqueId)
@ -162,26 +158,26 @@ function AbilityProxy:WearAbility(Player: Player, AbilityUniqueId: number, Equip
-- 遍历技能查看现在穿了几个
local wearingCount = 0
for _, AbilityData in ArchiveProxy.pData[Player.UserId] do
for _, AbilityData in ArchiveProxy.pData[Player.UserId][STORE_NAME]["Ability"] do
if AbilityData.wearing == EquipmentUniqueId then
wearingCount = wearingCount + 1
end
end
if EquipmentData.abilitySlotNumber <= 0 then
if EquipmentData.maxAbilityNumber <= 0 then
RE_PlayerTip:FireClient(Player, "装备没有技能槽位")
return
end
-- 检查槽位数量是否充足
if wearingCount >= EquipmentData.abilitySlotNumber then
if wearingCount >= EquipmentData.maxAbilityNumber then
RE_PlayerTip:FireClient(Player, "装备已满技能槽位")
return
end
-- 穿戴技能
UniqueData.wearing = EquipmentUniqueId
AbilityInstance:SetAttribute("Wearing", EquipmentUniqueId)
AbilityInstance:SetAttribute("wearing", EquipmentUniqueId)
end
-- 获取技能等级数值(对应技能调用这个函数获取数值)
@ -208,7 +204,7 @@ function AbilityProxy:GetRandomAbilityId(ExceptIdList: table)
local candidateIds = {}
for _, ability in ipairs(JsonAbility) do
local id = ability.id
if not table.find(ExceptIdList, id) then
if not table.find(ExceptIdList, id) and ability.isInPool then
table.insert(candidateIds, id)
end
end
@ -236,6 +232,20 @@ function AbilityProxy:GetPlayerWearingAbilityData(Player: Player)
end
return wearingAbilityUniqueId, behaviourNames
end
-- 获取对应装备槽位上的技能
function AbilityProxy:GetPlayerAbilityByEquipmentUniqueId(Player: Player, EquipmentUniqueId: number)
local wearingUniqueId, wearingOrgId = {}, {}
local abilityFolder = GetPlayerAbilityFolder(Player)
for _, AbilityInstance in abilityFolder:GetChildren() do
if AbilityInstance:GetAttribute("wearing") == EquipmentUniqueId then
table.insert(wearingUniqueId, AbilityInstance:GetAttribute("uniqueId"))
table.insert(wearingOrgId, AbilityInstance:GetAttribute("orgId"))
end
end
return wearingUniqueId, wearingOrgId
end
--------------------------------------------------------------------------------
-- 获取技能属性

View File

@ -70,7 +70,7 @@ local function SaveData(Player: Player): boolean
end
if Success then
print(("DataManager: User %s's data saved successfully."):format(Player.Name))
print(("DataManager: User %s's data saved successfully."):format(Player.Name), DataToSave)
else
warn(("DataManager: User %s's data failed to save."):format(Player.Name))
end

View File

@ -35,7 +35,7 @@ end
-- 初始化玩家
function BookProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then return end
local BookFolder = Utils:CreateFolder("Book", pData)

View File

@ -11,6 +11,7 @@ local Rng = require(ReplicatedStorage.Tools.Rng)
local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy)
local PlayerInfoProxy = require(ServerStorage.Proxy.PlayerInfoProxy)
local PlayerFightProxy = require(ServerStorage.Proxy.PlayerFightProxy)
local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy)
--> Json
local JsonEquipment = require(ReplicatedStorage.Json.Equipment)
@ -58,7 +59,7 @@ end
-- 初始化玩家
function EquipmentProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then return end
Utils:CreateFolder("Equipment", pData)
@ -197,10 +198,18 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number)
end
end
------------------------------------------------------------
ArchiveProxy.pData[Player.UserId][STORE_NAME][UniqueId] = ResultData
local equipmentInstance = Utils:CreateDataInstance(Player, UniqueId, ResultData, GetPlayerEquipmentFolder(Player))
------------------------------------------------------------
-- 下面逻辑会找Instance实例所以放在之后执行逻辑
-- 随机生成技能槽位数量
local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy)
local maxAbilityNumber = PlayerInfoProxy:GetPlayerInfo(Player).abilityNumber or 0
local maxAbilityNumber = PlayerInfoProxy:GetPlayerInfo(Player)["AttributesUpgrade"]["11"] or 0
local abilityNumber = rng:NextInteger(0, maxAbilityNumber)
ResultData.maxAbilityNumber = abilityNumber
if abilityNumber > 0 then
@ -230,9 +239,6 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number)
------------------------------------------------------------
ArchiveProxy.pData[Player.UserId][STORE_NAME][UniqueId] = ResultData
local equipmentInstance = Utils:CreateDataInstance(Player, UniqueId, ResultData, GetPlayerEquipmentFolder(Player))
-- 添加图鉴记录
local BookProxy = require(ServerStorage.Proxy.BookProxy)
BookProxy:AddBook(Player, EquipmentId, UniqueId)
@ -377,8 +383,34 @@ function EquipmentProxy:GetPlayerAttributes(Player: Player)
Utils:TableSafeAddTableValue(AttributesData, EquipmentData.elements)
-- 增加装备元素抗性
Utils:TableSafeAddTableValue(AttributesData, EquipmentData.elementDef)
-- print("属性表", AttributesData)
-- 计算特殊词条加成是否激活
if EquipmentData.specialType then
local isActive = false
-- 属性类型加成
if EquipmentData.specialType == 1 then
local attributeData = Utils:GetIdDataFromJson(JsonAttributes, EquipmentData.specialRequire)
-- 根据配置的id转换一下
if AttributesData[attributeData.effectAttribute] then isActive = true end
-- 技能类型加成
elseif EquipmentData.specialType == 2 then
local wearingAbilityUniqueId, wearingOrgId = AbilityProxy:GetPlayerAbilityByEquipmentUniqueId(Player, EquipmentData.id)
print("穿戴技能", wearingOrgId, EquipmentData.specialRequire)
if table.find(wearingOrgId, EquipmentData.specialRequire) then isActive = true end
-- 晶石类型加成
elseif EquipmentData.specialType == 3 then
end
if isActive then
local newAddAttribute = Utils:GetIdDataFromJson(JsonAttributes, EquipmentData.specialActive[1])
Utils:TableSafeAddValue(AttributesData, newAddAttribute.effectAttribute, EquipmentData.specialActive[2])
end
end
end
end
-- print("结果属性表", AttributesData)
return AttributesData
end

View File

@ -34,7 +34,7 @@ end
-- 初始化玩家
function GemProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then return end
local GemFolder = Utils:CreateFolder("Gem", pData)

View File

@ -127,7 +127,7 @@ function MobsProxy:CleanPlayerMobs(Player: Player)
end
function MobsProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then warn("Player Data not found", Player.Name) return end
Utils:CreateFolder(Player.UserId, MobsFolder)
@ -139,9 +139,7 @@ function MobsProxy:GetPlayerMobs(Player: Player)
end
function MobsProxy:OnPlayerRemoving(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
if not pData then return end
local MobsFolder = pData:FindFirstChild("Mobs"):FindFirstChild(Player.UserId)
local MobsFolder = GetPlayerMobsFolder(Player)
if MobsFolder then MobsFolder:Destroy() end
end

View File

@ -87,7 +87,7 @@ end
-- 初始化玩家
function PlayerInfoProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
local pData = Utils:WaitPlayerDataFolder(Player)
if not pData then return end
local PlayerInfoFolder = Utils:CreateFolder("PlayerInfo", pData)
local StatsFolder = Utils:CreateFolder("Stats", PlayerInfoFolder)
@ -97,6 +97,7 @@ function PlayerInfoProxy:InitPlayer(Player: Player)
-- 新玩家数据初始化
local isNew = false
if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then
print("新玩家数据初始化", Player.UserId)
ArchiveProxy.pData[Player.UserId][STORE_NAME] = {}
ArchiveProxy.pData[Player.UserId][STORE_NAME].Stats = {}
ArchiveProxy.pData[Player.UserId][STORE_NAME].Items = {}
@ -151,6 +152,7 @@ end
-- 玩家属性升级
function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number)
if not Player or not AttributeId then warn('升级属性失败: ', Player.Name, AttributeId) return end
local AttributeId = tostring(AttributeId)
local AttributesUpgradeFolder = GetPlayerInfoFolder(Player):FindFirstChild("AttributesUpgrade")
@ -341,6 +343,7 @@ function PlayerInfoProxy:GetPlayerUpgradeAttributes(Player: Player)
local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME]
local attributes = {}
for AttributeId, AttributeLv in playerInfoData.AttributesUpgrade do
local AttributeId = tonumber(AttributeId)
local attributeData = Utils:GetIdDataFromJson(JsonAttributesUpgrade, AttributeId)
-- attributes[attributeData["effectAttribute"]] = attributeData["lvAdd"][1] + (AttributeLv - 1) * attributeData["lvAdd"][2]
local effectAttribute = attributeData["effectAttribute"]

View File

@ -21,46 +21,46 @@ local function getCharacterRoot()
return nil
end
player.CharacterAdded:Connect(function(character)
local root = getCharacterRoot()
if root then
cameraCenter = Vector3.new(root.Position.X, 0, root.Position.Z)
end
end)
-- player.CharacterAdded:Connect(function(character)
-- local root = getCharacterRoot()
-- if root then
-- cameraCenter = Vector3.new(root.Position.X, 0, root.Position.Z)
-- end
-- end)
RunService.RenderStepped:Connect(function()
local root = getCharacterRoot()
if root then
if not cameraCenter then
cameraCenter = Vector3.new(root.Position.X, 0, root.Position.Z)
end
-- RunService.RenderStepped:Connect(function()
-- local root = getCharacterRoot()
-- if root then
-- if not cameraCenter then
-- cameraCenter = Vector3.new(root.Position.X, 0, root.Position.Z)
-- end
-- 只考虑X/Z平面
local delta = Vector2.new(root.Position.X - cameraCenter.X, root.Position.Z - cameraCenter.Z)
local halfSize = DEADZONE_SIZE / 2
-- -- 只考虑X/Z平面
-- local delta = Vector2.new(root.Position.X - cameraCenter.X, root.Position.Z - cameraCenter.Z)
-- local halfSize = DEADZONE_SIZE / 2
-- 检查是否超出死区
local moveX, moveZ = 0, 0
if math.abs(delta.X) > halfSize.X then
moveX = delta.X - math.sign(delta.X) * halfSize.X
end
if math.abs(delta.Y) > halfSize.Y then
moveZ = delta.Y - math.sign(delta.Y) * halfSize.Y
end
-- -- 检查是否超出死区
-- local moveX, moveZ = 0, 0
-- if math.abs(delta.X) > halfSize.X then
-- moveX = delta.X - math.sign(delta.X) * halfSize.X
-- end
-- if math.abs(delta.Y) > halfSize.Y then
-- moveZ = delta.Y - math.sign(delta.Y) * halfSize.Y
-- end
-- 更新相机中心点
cameraCenter = cameraCenter + Vector3.new(moveX, 0, moveZ)
-- -- 更新相机中心点
-- cameraCenter = cameraCenter + Vector3.new(moveX, 0, moveZ)
-- 让lookAt点在相机中心点后方
local lookAt = cameraCenter - Vector3.new(-1, 0, 0) * SCREEN_OFFSET
local offset = Vector3.new(
-CAMERA_DISTANCE * math.cos(CAMERA_ANGLE),
CAMERA_HEIGHT,
0
)
local cameraPos = lookAt + offset
-- -- 让lookAt点在相机中心点后方
-- local lookAt = cameraCenter - Vector3.new(-1, 0, 0) * SCREEN_OFFSET
-- local offset = Vector3.new(
-- -CAMERA_DISTANCE * math.cos(CAMERA_ANGLE),
-- CAMERA_HEIGHT,
-- 0
-- )
-- local cameraPos = lookAt + offset
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(cameraPos, lookAt)
end
end)
-- camera.CameraType = Enum.CameraType.Scriptable
-- camera.CFrame = CFrame.new(cameraPos, lookAt)
-- end
-- end)