From 9b6a1e3a6dbe63161f7b820b39d338811cc69ecd Mon Sep 17 00:00:00 2001 From: Ggafrik <906823881@qq.com> Date: Tue, 15 Jul 2025 01:12:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- excel/attribute.xlsx | Bin 11926 -> 12383 bytes excel/cha.xlsx | Bin 10900 -> 13773 bytes excel/equipment.xlsx | Bin 8752 -> 8943 bytes excel/global.xlsx | Bin 0 -> 21956 bytes excel/item.xlsx | Bin 20948 -> 21027 bytes excel/language.xlsx | Bin 0 -> 33393 bytes excel/player.xlsx | Bin 8637 -> 0 bytes src/ReplicatedStorage/Json/Attributes.json | 22 +-- .../Json/AttributesUpgrade.json | 2 +- src/ReplicatedStorage/Json/Character.json | 2 +- src/ReplicatedStorage/Json/Equipment.json | 2 +- src/ReplicatedStorage/Json/ExAttributes.json | 28 +-- src/ReplicatedStorage/Json/Forge.json | 17 ++ src/ReplicatedStorage/Json/ItemProp.json | 1 + src/ReplicatedStorage/Json/LvUpgrade.json | 62 +++++++ src/ReplicatedStorage/Json/Param.json | 3 + src/ReplicatedStorage/Json/Reward.json | 7 + src/ReplicatedStorage/Tools/Utils.luau | 58 ++++++- src/Server/ServerMain/init.server.luau | 3 + .../Modules/Behaviours/SwordWave.luau | 1 + src/ServerStorage/Proxy/AbilityProxy.luau | 29 +++- src/ServerStorage/Proxy/BookProxy.luau | 126 ++++++++++++++ src/ServerStorage/Proxy/EquipmentProxy.luau | 161 +++++++++++++++++- src/ServerStorage/Proxy/GemProxy.luau | 34 +++- src/ServerStorage/Proxy/LevelProxy.luau | 5 +- .../Proxy/PlayerFightProxy/LevelLoop.luau | 4 +- .../Proxy/PlayerFightProxy/PlayerAI.luau | 6 + .../Proxy/PlayerFightProxy/init.luau | 86 +++++++++- src/ServerStorage/Proxy/PlayerInfoProxy.luau | 79 ++++++++- 29 files changed, 680 insertions(+), 58 deletions(-) create mode 100644 excel/global.xlsx create mode 100644 excel/language.xlsx delete mode 100644 excel/player.xlsx create mode 100644 src/ReplicatedStorage/Json/Forge.json create mode 100644 src/ReplicatedStorage/Json/LvUpgrade.json create mode 100644 src/ReplicatedStorage/Json/Param.json create mode 100644 src/ReplicatedStorage/Json/Reward.json create mode 100644 src/ServerStorage/Proxy/BookProxy.luau diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index 1a0a58324e6f4906513dd169c590ba85c3d9e5b6..47a54e8278953849f237d0d723e22c0d198bc2f4 100644 GIT binary patch delta 5558 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 C7=cp& delta 5076 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 diff --git a/excel/cha.xlsx b/excel/cha.xlsx index 9a1d37ad643167d74f7585f904de5a09a81a261d..5f61c455e563daf06542c7561790c7797d2aa0ef 100644 GIT binary patch delta 8719 zcmZvibzD^4*2jnL9*`QkyQQQ-q(M3aX^?KILw66&&?N%W-CatG(kUg42uQy8c<+7g zeLnB`E!~49i!af&^HyvwsH?vd)LH|DW~7S>ABhl+u*wt%m7_8S3Sg9c%g4+Cbwai ze%|sc_fG2j=GYV|{6hPdkkkO?3QfzTx{1>_*WLJ-z4G~$fiQNsc_$~oSxQcbiPSQ( zt9Ixbh0stzkiLl}gm{6uvPw2jM|>Sn0l(yiTiJIzdiz=#L@+&RT`l=QqQE^v{Z?;s zhcFT)mhG)Rp};F4f^i$I2#F$Jhi{Z=Zifl#Ruw%8LhaO;g9eby>}BNrPEXQU9sH!k zlXd0KAw5qr0R!>7T93@bCpP)@7G>xOjp?&|ftcAS)HU#^4dWY`vr-vYmlO{+x-p_0 z%e=vS4^KklzwH{K4jqO%E!`13&+|bQ6;l-_Rp0KG?5_SCu+xdHexBe;FFG8*##}Rw zePZB4iL$(t*o4hIFG?;Rs_e$UTt-WMBH1I*z940?FJI<$HkUtQgjPF{H3Xx)1woxC z!FA;b^awzxP7iG=0tlpy1_I$c{w7{_oSu#@Z%iE>-*9-@+f``UI~EG!-uqAAq4ayA zZ_}f_+hakTl(p4S7g$_TNMS*Nt+ASnr-#@!JlqZ9o=sP%v>fI44_;iI^76)qFRCi% zFdOu;jz-l)Ibdp0%YMYyw;TNa)uJd?vlzcw-U%2)=h0r3FZOS}xocX4Y*w)jz9IxM zy|2kcSNCpxHNZUL?B1uK(LI`ZN{&H%7W*m%wpOHohWEB4D~x;6RSBa(`s9kA*si05 z8%@`6rwA8<%1A;a(WPLc_tW~VFP354uQx`v++&IXx>GSxO+=bnXLDKh=!2&$2u)<) zn6QBGRnYx#z~F&uP;qpj3#qGiO+z!BbqB5Ax;T$p$hg#`;ozDuoxzT|q6Ici#noDH z1u{xS4<05-S4^0MexI%vf4B_d^jy9v27*UUDEhjzy!IqDjB`hQ#WYX0nlWK%R zs23AA5xoZXr>ks`%eRO5AzED`!*9o5gIa)G^Pm%W3?7S6P}yPG!}|*T1DjEa{?VXY zqn9dcM*$(-5NqdybuIoO8ZFzL*x9m6(VYWM{OIo)RhfE8iHt#t+M-YfhWQ_n$fw0? z55efpY{7ZKn~;{HJ3rh2+Dq@^Pe?jzend;s^<8W1{S-W~gQ{)Jpy-M;nr#a2Uq?Vl zU|?8WVXWQQtld`%+YjOpYXZPrwva1AuJaTDwvNDQ*-W%2R*COjv5?RgU5v7H&N_Tz zn@Mit`}887;l@+B>q1(X4P%a$zU?~`NJul2QJ>E4sWv~I#f^v9QbV*VA09K)FiD2V z^rt(?T?VAVVHd3Q{+c|4+J06pC~uyIwK0?+qOn7x-ZZx) zy^lIXIx*F~Ay#;I5ju3D7gPi-C1a3sYJHDX)|pBcN8nP6$3!8JdHhsPtw%LBo4{

)}5?3&v( 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%0Ds{lrNV_=#f|>cEoqu-qD>Yz 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 literal 0 HcmV?d00001 diff --git a/excel/item.xlsx b/excel/item.xlsx index d84a7a08a79c19c7e71eb5beb02d49790b1c034c..dcab07d15a02bb35558d2907826aa043ba9987c0 100644 GIT binary patch delta 7181 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 delta 7038 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 diff --git a/excel/language.xlsx b/excel/language.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6be77653fdfcb239831b7a909d9ce8e11c124aa4 GIT binary patch literal 33393 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 literal 0 HcmV?d00001 diff --git a/excel/player.xlsx b/excel/player.xlsx deleted file mode 100644 index 987a085ab052bc9e14e4c1de58de467cc337556c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8637 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 q;2-Jrw)x-p#J`%qp!tjWA3LPF3I=j@0RUX&Cj^ Services @@ -168,7 +168,16 @@ function AbilityProxy:WearAbility(Player: Player, AbilityUniqueId: number, Equip end end - -- TODO: 获取这个装备最多穿几个技能,穿戴数量>=穿戴上限就返回 + if EquipmentData.abilitySlotNumber <= 0 then + RE_PlayerTip:FireClient(Player, "装备没有技能槽位") + return + end + + -- 检查槽位数量是否充足 + if wearingCount >= EquipmentData.abilitySlotNumber then + RE_PlayerTip:FireClient(Player, "装备已满技能槽位") + return + end -- 穿戴技能 UniqueData.wearing = EquipmentUniqueId @@ -211,6 +220,22 @@ function AbilityProxy:GetRandomAbilityId(ExceptIdList: table) return candidateIds[idx] end +-- 获取穿戴中的技能 +function AbilityProxy:GetPlayerWearingAbilityData(Player: Player) + local wearingAbilityUniqueId = {} + local behaviourNames = {} + -- 穿戴中的填入 + local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) + local wearingEquipments = EquipmentProxy:GetPlayerWearingEquipmentUniqueId(Player) + for _, AbilityData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Ability do + if AbilityData.wearing > 0 and table.find(wearingEquipments, AbilityData.wearing) then + table.insert(wearingAbilityUniqueId, AbilityData.id) + local AbilityData = Utils:GetIdDataFromJson(JsonAbility, AbilityData.orgId) + table.insert(behaviourNames, AbilityData.behaviourName) + end + end + return wearingAbilityUniqueId, behaviourNames +end -------------------------------------------------------------------------------- -- 获取技能属性 diff --git a/src/ServerStorage/Proxy/BookProxy.luau b/src/ServerStorage/Proxy/BookProxy.luau new file mode 100644 index 0000000..0befcbc --- /dev/null +++ b/src/ServerStorage/Proxy/BookProxy.luau @@ -0,0 +1,126 @@ +-- 图鉴系统 +local BookProxy = {} + +--> Services +local ReplicatedStorage = game:GetService("ReplicatedStorage") +local ServerStorage = game:GetService("ServerStorage") + +--> Variables +local Utils = require(ReplicatedStorage.Tools.Utils) +local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) + +--> Json +local JsonItem = require(ReplicatedStorage.Json.ItemProp) +local JsonGem = require(ReplicatedStorage.Json.Gem) + +--> Events +local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip +local RE_UpgradeAttributes = ReplicatedStorage.Events.RE_UpgradeAttributes + +--> Constants +local STORE_NAME = "Book" + +-------------------------------------------------------------------------------- + +-- 获取玩家信息文件夹 +local function GetPlayerBookFolder(Player: Player) + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + local BookFolder = pData:FindFirstChild("Book") + return BookFolder +end + +-------------------------------------------------------------------------------- + +-- 初始化玩家 +function BookProxy:InitPlayer(Player: Player) + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + local BookFolder = Utils:CreateFolder("Book", pData) + + -- 新玩家数据初始化 + if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then + ArchiveProxy.pData[Player.UserId][STORE_NAME] = {} + ArchiveProxy.pData[Player.UserId][STORE_NAME].Books = {} + end + + -- 创建玩家信息实例 + for BookId, BookData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Books do + Utils:CreateDataInstance(Player, BookId, BookData, BookFolder) + end +end + +-------------------------------------------------------------------------------- + +-- 添加图鉴记录 +function BookProxy:AddBook(Player: Player, BookId: number, UniqueEquipmentId: number) + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + + local BookFolder = GetPlayerBookFolder(Player) + if not BookFolder then return end + + local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) + local EquipmentData = EquipmentProxy:GetEquipmentData(Player, UniqueEquipmentId) + if not EquipmentData then return end + + local orgBookData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] + -- 检查是否已经存在 + if orgBookData then + -- 图鉴没原先品质高就返回 + if orgBookData.quality > EquipmentData.quality then return end + else + -- 原来没有时解锁图鉴 + BookProxy:UnlockBook(Player, BookId) + end + + -- 添加图鉴记录 + ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] = { + timestamp = tick(), + quality = EquipmentData.quality, + } + local bookInstance = BookFolder:FindFirstChild(BookId) + bookInstance:SetAttribute("quality", ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].quality) + bookInstance:SetAttribute("timestamp", ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].timestamp) +end + +-- 解锁图鉴 +function BookProxy:UnlockBook(Player: Player, BookId: number) + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + + local BookFolder = GetPlayerBookFolder(Player) + if not BookFolder then return end + + -- 添加图鉴记录 + ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] = { + timestamp = 0, + quality = 0, + } + Utils:CreateDataInstance(Player, BookId, ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId], BookFolder) +end + +-- 检查是否解锁对应图鉴 +function BookProxy:IsBookUnlocked(Player: Player, BookId: number) + return ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] ~= nil +end + +-------------------------------------------------------------------------------- + +-- TODO: 获取玩家属性(之后要是图鉴加属性就在这) +function BookProxy:GetPlayerAttributes(Player: Player) + local attributesList = {} + return attributesList +end + +-------------------------------------------------------------------------------- + +function BookProxy:OnPlayerRemoving(Player: Player) + +end + +ReplicatedStorage.Remotes.PlayerRemoving.Event:Connect(function(Player: Player) + BookProxy:OnPlayerRemoving(Player) +end) + +return BookProxy \ No newline at end of file diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index 6164bec..f489d70 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -9,11 +9,16 @@ local ServerStorage = game:GetService("ServerStorage") local Utils = require(ReplicatedStorage.Tools.Utils) local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) local PlayerInfoProxy = require(ServerStorage.Proxy.PlayerInfoProxy) +local PlayerFightProxy = require(ServerStorage.Proxy.PlayerFightProxy) --> Json local JsonEquipment = require(ReplicatedStorage.Json.Equipment) local JsonAttributes = require(ReplicatedStorage.Json.Attributes) local JsonExAttributes = require(ReplicatedStorage.Json.ExAttributes) +local JsonParam = require(ReplicatedStorage.Json.Param) + +--> Events +local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip --> Constants local STORE_NAME = "Equipment" @@ -28,6 +33,22 @@ local function GetPlayerEquipmentFolder(Player: Player) return EquipmentFolder end +-- 计算词条等级加成上限 +local function GetEntryLvBonus(PlayerLv: number, BonusData: table) + local bonus = math.floor(PlayerLv / BonusData[1]) * BonusData[2] + return math.min(bonus, BonusData[3]) +end + +-- 改变装备数据 +local function ChangeValue(Player: Player, EquipmentUniqueId: number, KeyName: string, Value: any) + if not Player or not EquipmentUniqueId or not KeyName then warn("EquipmentProxy ChangeValue", Player.UserId, EquipmentUniqueId, KeyName, Value) return end + local ValueInstance = GetPlayerEquipmentFolder(Player):FindFirstChild(EquipmentUniqueId) + if not ValueInstance then warn("ValueInstance not found", KeyName) return end + + ArchiveProxy.pData[Player.UserId][EquipmentUniqueId][KeyName] = Value + ValueInstance:SetAttribute(KeyName, Value) +end + -------------------------------------------------------------------------------- -- 初始化玩家 @@ -71,11 +92,35 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) -- 到时候记录穿戴槽位 ResultData.wearing = 0 - -- TODO: 其他随机词条内容添加在下面 - - -- 随机生成额外属性数量 + -- 随机生成总变量 local rng = Random.new() + local PlayerLevel = PlayerInfoProxy:GetPlayerLevel(Player) + -- TODO: 之后这里可能根据等级限制权重 + -- 随机生成品质 + local qualityWeightTable = { + [1] = 90, + [2] = 70, + [3] = 50, + [4] = 30, + [5] = 10, + [6] = 5, + } + local quality = Utils:GetRandomWeightIndex(qualityWeightTable) + local qualityParam = Utils:GetIdDataFromJson(JsonParam, 1) + ResultData.quality = quality + + -- 生成装备基础词条(固定的) + ResultData.attributes = {} + for i = 1, EquipmentData.attributesNumber, 3 do + local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, EquipmentData.attributes[i]) + local baseLvValue = EquipmentData.attributes[i + 1] + EquipmentData.attributes[i + 2] * (PlayerLevel - 1) + local qualityEffectValue = math.floor(baseLvValue * (qualityParam[quality] / 100)) + ResultData.attributes[AttributeData.name] = qualityEffectValue + end + + -- TODO: 其他随机词条内容添加在下面 + -- 随机生成额外属性数量 local maxExAttributeNumber = PlayerInfoProxy:GetPlayerInfo(Player).exAttributeNumber or 0 local exAttributeNumber = rng:NextInteger(0, maxExAttributeNumber) ResultData.maxExAttributeNumber = exAttributeNumber @@ -87,7 +132,9 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) table.insert(spawnExAttributesId, newExAttributeId) local ExAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newExAttributeId) - local randomExAttributeValue = rng:NextInteger(ExAttributeData.randomValue[1], ExAttributeData.randomValue[2]) + local minValue = ExAttributeData.randomValue[1] + local maxValue = ExAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ExAttributeData.bonus) + local randomExAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newExAttributeId) ResultData.exAttributes[AttributeData.name] = randomExAttributeValue @@ -106,7 +153,9 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) table.insert(spawnElementsId, newElementAttributeId) local ElementAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementAttributeId) - local randomElementAttributeValue = rng:NextInteger(ElementAttributeData.randomValue[1], ElementAttributeData.randomValue[2]) + local minValue = ElementAttributeData.randomValue[1] + local maxValue = ElementAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementAttributeData.bonus) + local randomElementAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newElementAttributeId) ResultData.elements[AttributeData.name] = randomElementAttributeValue @@ -125,7 +174,9 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) table.insert(spawnElementDefId, newElementDefId) local ElementDefAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementDefId) - local randomElementDefAttributeValue = rng:NextInteger(ElementDefAttributeData.randomValue[1], ElementDefAttributeData.randomValue[2]) + local minValue = ElementDefAttributeData.randomValue[1] + local maxValue = ElementDefAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementDefAttributeData.bonus) + local randomElementDefAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newElementDefId) ResultData.elementDef[AttributeData.name] = randomElementDefAttributeValue @@ -167,6 +218,10 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) ArchiveProxy.pData[Player.UserId][UniqueId] = ResultData Utils:CreateDataInstance(Player, UniqueId, ResultData, GetPlayerEquipmentFolder(Player)) + + -- 添加图鉴记录 + local BookProxy = require(ServerStorage.Proxy.BookProxy) + BookProxy:AddBook(Player, EquipmentId, UniqueId) end -- 回收装备 @@ -177,9 +232,14 @@ function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number) local EquipmentData = ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentId] if not EquipmentData then return end - -- TODO:根据对应功能模块生成对应技能 + -- 根据对应功能模块进行对应回收 + local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) + AbilityProxy:RecycleAbility(Player, EquipmentData.id) + local GemProxy = require(ServerStorage.Proxy.GemProxy) + GemProxy:RecycleGem(Player, EquipmentData.id) -- 回收装备返回金币 + -- TODO:处理关卡金币产出加成和词条加成 PlayerInfoProxy:ChangeItem(Player, 1, EquipmentData.recycle) ArchiveProxy.pData[Player.UserId][EquipmentId] = nil @@ -190,12 +250,95 @@ function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number) end -- 穿戴装备 -function EquipmentProxy:WearEquipment(Player: Player, EquipmentId: number) +function EquipmentProxy:WearEquipment(Player: Player, EquipmentId: number, Slot: number) local pData = Utils:GetPlayerDataFolder(Player) if not pData then return end - -- 穿戴装备时再生成模型 + -- TODO :穿戴装备时再生成模型 + -- 查看槽位数量是否超出 + local PlayerInfoData = PlayerInfoProxy:GetPlayerInfo(Player) + if Slot > PlayerInfoData.wearingNumber then + RE_PlayerTip:FireClient(Player, '穿戴装备槽位超出') + return + end + + -- 查看该槽位是否穿戴装备,穿戴就返回 + for _, EquipmentData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do + if EquipmentData.wearing == Slot then + RE_PlayerTip:FireClient(Player, '该槽位已穿戴装备') + return + end + end + + -- 穿戴装备 + local EquipmentData = ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentId] + if not EquipmentData then return end + ChangeValue(Player, EquipmentId, "wearing", Slot) + + -- 更新玩家数据 + PlayerFightProxy:UpdatePlayerFightData(Player) +end + +-- 卸下装备 +function EquipmentProxy:UnwearEquipment(Player: Player, EquipmentId: number) + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + -- TODO :卸下装备时再关闭模型 + + -- 卸下装备 + local EquipmentData = ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentId] + if not EquipmentData then return end + ChangeValue(Player, EquipmentId, "wearing", 0) + + -- 更新玩家数据 + PlayerFightProxy:UpdatePlayerFightData(Player) +end + +-- 获取穿戴中的装备UniqueId +function EquipmentProxy:GetPlayerWearingEquipmentUniqueId(Player: Player) + local wearingEquipmentUniqueId = {} + -- 穿戴中的填入 + for _, EquipmentData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do + if EquipmentData.wearing > 0 then + wearingEquipmentUniqueId[EquipmentData.wearing] = EquipmentData.id + end + end + + -- 补全空缺没填进去的槽位 + local wearingNumber = PlayerInfoProxy:GetPlayerAttributesUpgrade(Player, "wearingNumber") + if wearingNumber <= 0 then return wearingEquipmentUniqueId end + for i = 1, wearingNumber do + if not wearingEquipmentUniqueId[i] then wearingEquipmentUniqueId[i] = 0 end + end + return wearingEquipmentUniqueId +end + +-- 获取装备属性(汇总,不进行最终属性计算) +function EquipmentProxy:GetPlayerAttributes(Player: Player) + local AttributesData = {} + for _, EquipmentData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do + if EquipmentData.wearing > 0 then + -- 增加装备基础属性 + for AttributeName, AttributeValue in EquipmentData.attributes do + if AttributeName == "atkSpeed" then + if EquipmentData.wearing == 1 then + Utils:TableSafeAddValue(AttributesData, AttributeName, AttributeValue) + end + else + Utils:TableSafeAddValue(AttributesData, AttributeName, AttributeValue) + end + end + + -- 增加装备额外属性 + Utils:TableSafeAddTableValue(AttributesData, EquipmentData.exAttributes) + -- 增加装备元素属性 + Utils:TableSafeAddTableValue(AttributesData, EquipmentData.elements) + -- 增加装备元素抗性 + Utils:TableSafeAddTableValue(AttributesData, EquipmentData.elementDef) + end + end + return AttributesData end -- 获取装备数据 diff --git a/src/ServerStorage/Proxy/GemProxy.luau b/src/ServerStorage/Proxy/GemProxy.luau index f3753a5..58afa71 100644 --- a/src/ServerStorage/Proxy/GemProxy.luau +++ b/src/ServerStorage/Proxy/GemProxy.luau @@ -1,4 +1,4 @@ --- 玩家通用信息 +-- 宝石系统 local GemProxy = {} --> Services @@ -157,7 +157,25 @@ function GemProxy:WearGem(Player: Player, GemUniqueId: number, EquipmentUniqueId return end - -- TODO: 检查对应装备是否有充足的宝石槽位 + -- 检查对应装备是否有充足的宝石槽位 + local EquipmentData = EquipmentProxy:GetEquipmentData(Player, EquipmentUniqueId) + if not EquipmentData then warn('无法获取装备数据: ' , Player.Name, EquipmentUniqueId) return end + if EquipmentData.gemSlotNumber <= 0 then + RE_PlayerTip:FireClient(Player, "装备没有宝石槽位") + return + end + + -- 检查槽位数量是否充足 + local wearingGemNumber = 0 + for _, gemData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Gems do + if gemData.wearing == EquipmentUniqueId then + wearingGemNumber += 1 + end + end + if wearingGemNumber >= EquipmentData.gemSlotNumber then + RE_PlayerTip:FireClient(Player, "装备已满宝石槽位") + return + end -- 穿戴 GemData.wearing = EquipmentUniqueId @@ -202,14 +220,14 @@ end function GemProxy:GetPlayerGemWearingAttributes(Player: Player) if not Player then warn('获取玩家属性失败: ', Player.Name) return end local playerGems = ArchiveProxy.pData[Player.UserId][STORE_NAME].Gems + + local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) + local wearingEquipments = EquipmentProxy:GetPlayerWearingEquipmentUniqueId(Player) + local attributes = {} for _, gemData in playerGems do - if gemData.wearing ~= 0 then - if attributes[gemData.effectAttribute] then - attributes[gemData.effectAttribute] = attributes[gemData.effectAttribute] + gemData.attributeValue - else - attributes[gemData.effectAttribute] = gemData.attributeValue - end + if gemData.wearing ~= 0 and table.find(wearingEquipments, gemData.wearing) then + Utils:TableSafeAddValue(attributes, gemData.effectAttribute, gemData.attributeValue) end end return attributes diff --git a/src/ServerStorage/Proxy/LevelProxy.luau b/src/ServerStorage/Proxy/LevelProxy.luau index 51aca8f..a15783d 100644 --- a/src/ServerStorage/Proxy/LevelProxy.luau +++ b/src/ServerStorage/Proxy/LevelProxy.luau @@ -88,6 +88,8 @@ end local EXCEPT_KEY = { "Task", "Mobs"} local function ChangeValue(Player: Player, Folder: Instance, LevelKey: string, LevelValue: any) if not Player or not Folder or not LevelKey then warn("LevelProxy ChangeValue", Player.UserId, Folder.Name, LevelKey, LevelValue) return end + if table.find(EXCEPT_KEY, LevelKey) then return end + local ValueInstance = Folder:FindFirstChild(LevelKey) if not ValueInstance then warn("ValueInstance not found", LevelKey) return end @@ -99,7 +101,7 @@ local function ChangeValue(Player: Player, Folder: Instance, LevelKey: string, L end storeTable[LevelKey] = LevelValue - if not table.find(EXCEPT_KEY, LevelKey) then ValueInstance.Value = LevelValue end + ValueInstance.Value = LevelValue end -- 怪物死亡,由初始化时传入 @@ -249,7 +251,6 @@ function LevelProxy:ChallengeEnd(Player: Player, result: boolean) end -- 清除剩余怪物 - print("清除剩余怪物", LevelProxy.pData[Player.UserId].Mobs) for _, mob in LevelProxy.pData[Player.UserId].Mobs do mob:Died(true) end LevelProxy.pData[Player.UserId].Mobs = {} diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau b/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau index e3d170c..a9987e2 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau @@ -41,8 +41,6 @@ function LevelLoop:AutoChallenge() print("AutoChallenge") -- TODO: 回退有bug,不能一关一关回退 - -- 重置玩家状态(先临时调用角色复活,之后复杂的内容再说) - self.PlayerRole:Respawn() local LevelFolder = game.Workspace:WaitForChild("Level"):WaitForChild(self.Player.UserId) local ProgressFolder = LevelFolder:FindFirstChild("Progress") @@ -60,6 +58,8 @@ end function LevelLoop:OnChallengeEnd(Player: Player, LevelId: number, result: boolean) self.TaskAutoChallenge = task.spawn(function() task.wait(3) + -- 重置玩家状态(先临时调用角色复活,之后复杂的内容再说) + self.PlayerRole:Respawn() self:AutoChallenge() end) end diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau index 54929dc..2ea3df9 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau @@ -105,6 +105,12 @@ function PlayerAI:RemoveBehaviour(BehaviourName: string) end end +-- 清除所有行为 +function PlayerAI:ClearAllBehaviour() + for _, behaviour in self.BehaviourList do behaviour:Destroy() end + self.BehaviourList = {} +end + -- 销毁AI function PlayerAI:Destroy() for _, behaviour in self.BehaviourList do behaviour:Destroy() end diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau index 9804d7d..9676e5c 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau @@ -13,6 +13,7 @@ local LevelProxy = require(ServerStorage.Proxy.LevelProxy) --> Json local JsonCharacter = require(ReplicatedStorage.Json.Character) +local JsonAttributes = require(ReplicatedStorage.Json.Attributes) --> Dependencies local LevelLoop = require(script.LevelLoop) @@ -40,14 +41,24 @@ setmetatable(PlayerRole, {__index = Character}) function PlayerRole.new(Player: Player, CharacterId: number) local playerCharacter = WaitForCharacter(Player) - -- 获取玩家初始数据 + -- 获取玩家初始数据(临时初始化使用,不是真属性配置部分) local CharacterData = Utils:GetIdDataFromJson(JsonCharacter, CharacterId) if not CharacterData then warn("CharacterId Data not found", CharacterId) return end + -- 补充默认没设置的属性,暂时不添加特殊属性,因为特殊属性是系统调用的,添加也没啥用 + for _, AttributeData in JsonCharacter do + if AttributeData.id < 50 then + if not CharacterData[AttributeData.name] then CharacterData[AttributeData.name] = 0 end + end + end + + -- 调用父类Character的new方法,初始化通用属性 local self = Character.new(Player, playerCharacter, CharacterData) setmetatable(self, PlayerRole) + self.CharacterId = CharacterId + -- 玩家放到Character目录下 playerCharacter.Parent = game.Workspace.Characters return self @@ -63,8 +74,9 @@ function PlayerRole:Respawn() self:ChangeState("Died", false) self.Humanoid.WalkSpeed = self.Config.walkSpeed self:ChangeAttributeValue("hp", self.Config.maxhp) - -- 重置玩家位置 + -- TODO: 重置玩家位置 + PlayerFightProxy:UpdatePlayerFightData(self.Player) end -------------------------------------------------------------------------------- @@ -86,8 +98,9 @@ function PlayerFightProxy:InitPlayer(Player: Player) -- 生成玩家AI local PlayerAI = PlayerAI.new(Player, PlayerRole) PlayerFightProxy.pData[Player.UserId].PlayerAI = PlayerAI - PlayerAI:AddBehaviour("Move") - PlayerAI:AddBehaviour("SwordWave") + + -- 更新玩家战斗数据 + self:UpdatePlayerFightData(Player) end function PlayerFightProxy:GetPlayerRole(Player: Player) @@ -95,9 +108,74 @@ function PlayerFightProxy:GetPlayerRole(Player: Player) end function PlayerFightProxy:GetPlayerAI(Player: Player) + print(PlayerFightProxy.pData[Player.UserId]) return PlayerFightProxy.pData[Player.UserId].PlayerAI end +-- 更新玩家战斗数据(所有变动全部从这调用) +function PlayerFightProxy:UpdatePlayerFightData(Player: Player) + local PlayerInfoProxy = require(ServerStorage.Proxy.PlayerInfoProxy) + local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) + local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) + local GemProxy = require(ServerStorage.Proxy.GemProxy) + + + local AttributesData = {} + + -- 计算角色基础属性值 + 装备属性值 + 宝石属性值,赋值属性 + local PlayerInfoAttributes = PlayerInfoProxy:GetPlayerAttributes(Player) + AttributesData = Utils:MergeTable(AttributesData, PlayerInfoAttributes) + + local EquipmentAttributes = EquipmentProxy:GetPlayerAttributes(Player) + AttributesData = Utils:MergeTable(AttributesData, EquipmentAttributes) + + local GemAttributes = GemProxy:GetPlayerAttributes(Player) + AttributesData = Utils:MergeTable(AttributesData, GemAttributes) + + -- 角色基础数据 + local PlayerRole = self:GetPlayerRole(Player) + local CharacterData = Utils:GetIdDataFromJson(JsonCharacter, PlayerRole.CharacterId) + if not CharacterData then warn("CharacterId Data not found", PlayerRole.CharacterId) return end + -- 如果玩家装备的武器里面有了攻击速度属性,就不用默认的攻击属性进行配置 + local ExceptAttributes = {"id", "name"} + if AttributesData.atkSpeed then table.insert(ExceptAttributes, "atkSpeed") end + + for AttributeName, AttributeValue in CharacterData do + if not table.find(ExceptAttributes, AttributeName) then + Utils:TableSafeAddValue(AttributesData, AttributeName, AttributeValue) + end + end + + -- 根据汇总更新玩家属性——————实际生效计算部分 + local PlayerRole = self:GetPlayerRole(Player) + + -- 针对百分比特殊属性直接进行计算修改 + if AttributesData["hpRate"] then + AttributesData["hp"] = math.floor(AttributesData["hp"] * AttributesData["hpRate"] / 100) + end + if AttributesData["atkRate"] then + AttributesData["atk"] = math.floor(AttributesData["atk"] * AttributesData["atkRate"] / 100) + end + + -- 更新玩家属性 + for AttributeName, AttributeValue in AttributesData do + -- TODO:这里可能涉及到战斗时更换装备的属性处理,还需要再函数内部再根据剩余百分比数值变化 + PlayerRole:ChangeAttributeValue(AttributeName, AttributeValue) + end + + -- 根据技能添加玩家AI行为 + local abilityIdList, behaviourNameList = AbilityProxy:GetPlayerWearingAbilityData(Player) + local playerAI = PlayerFightProxy:GetPlayerAI(Player) + + -- TODO:设置AI行为(临时清除所有行为,添加新的玩家行为) + playerAI:ClearAllBehaviour() + for _, behaviourName in behaviourNameList do + playerAI:AddBehaviour(behaviourName) + end + playerAI:AddBehaviour("Move") + playerAI:AddBehaviour("SwordWave") +end + -- 重置玩家状态,但是不删除 function PlayerFightProxy:CleanPlayer(Player: Player) -- 玩家角色重生 diff --git a/src/ServerStorage/Proxy/PlayerInfoProxy.luau b/src/ServerStorage/Proxy/PlayerInfoProxy.luau index 0bd9790..16e31eb 100644 --- a/src/ServerStorage/Proxy/PlayerInfoProxy.luau +++ b/src/ServerStorage/Proxy/PlayerInfoProxy.luau @@ -8,14 +8,17 @@ local ServerStorage = game:GetService("ServerStorage") --> Variables local Utils = require(ReplicatedStorage.Tools.Utils) local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) +local BookProxy = require(ServerStorage.Proxy.BookProxy) --> Json -local JsonPlayerLv = require(ReplicatedStorage.Json.PlayerLv) +local JsonLvUpgrade = require(ReplicatedStorage.Json.LvUpgrade) local JsonItem = require(ReplicatedStorage.Json.ItemProp) local JsonAttributesUpgrade = require(ReplicatedStorage.Json.AttributesUpgrade) +local JsonForge = require(ReplicatedStorage.Json.Forge) --> Events local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip +local RE_Forge = ReplicatedStorage.Events.RE_Forge local RE_UpgradeAttributes = ReplicatedStorage.Events.RE_UpgradeAttributes --> Constants @@ -66,7 +69,7 @@ local STATS_DATA = { exp = {type = ENUM_STATE_TYPE.Number, value = 0}, } --- 初始化玩家状态信息 +-- 初始化玩家状态信息(采用额外添加的模式,如果没有写值,就覆盖写入) local function ExtraAddPlayerStats(Player: Player, StatsData: table) if not Player or not StatsData then return end -- 如果列表中不包含信息就添加到表中 @@ -94,6 +97,7 @@ function PlayerInfoProxy:InitPlayer(Player: Player) ArchiveProxy.pData[Player.UserId][STORE_NAME].Stats = {} ArchiveProxy.pData[Player.UserId][STORE_NAME].Items = {} ArchiveProxy.pData[Player.UserId][STORE_NAME].AttributesUpgrade = {} + ArchiveProxy.pData[Player.UserId][STORE_NAME].Forge = 1 end -- 放在外面是为了以后系统新增内容方便(同时不用在初始化数据是做写入了) @@ -109,6 +113,7 @@ function PlayerInfoProxy:InitPlayer(Player: Player) for AttributeId, AttributeLv in ArchiveProxy.pData[Player.UserId][STORE_NAME].AttributesUpgrade do CreateInfoInstance(Player, AttributesUpgradeFolder, AttributeId, "NumberValue", AttributeLv) end + CreateInfoInstance(Player, PlayerInfoFolder, "Forge", ENUM_STATE_TYPE.Number, ArchiveProxy.pData[Player.UserId][STORE_NAME].Forge) end -- 获取玩家信息 @@ -118,6 +123,19 @@ function PlayerInfoProxy:GetPlayerInfo(Player: Player) return playerInfoData end +-- 获取玩家等级 +function PlayerInfoProxy:GetPlayerLevel(Player: Player) + if not Player then warn('获取玩家等级失败: ', Player.Name) return end + local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME] + return playerInfoData.Stats.level +end + +function PlayerInfoProxy:GetPlayerAttributesUpgrade(Player: Player, AttributeName: string) + if not Player or not AttributeName then warn('获取玩家属性升级失败: ', Player.Name, AttributeName) return end + local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME] + return playerInfoData.AttributesUpgrade[AttributeName] or 0 +end + -- 玩家属性升级 function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number) if not Player or not AttributeId then warn('升级属性失败: ', Player.Name, AttributeId) return end @@ -142,7 +160,6 @@ function PlayerInfoProxy:UpgradeAttribute(Player: Player, AttributeId: number) -- TODO 判断战力是否足够(暂无战力计算) -- 判断是否到达等级上限 - print(nowLv, attributeData["maxLv"]) if attributeData["maxLv"] ~= nil then if nowLv >= attributeData["maxLv"] then local tip = '升级属性失败: ' .. AttributeId .. ' 已到达等级上限' @@ -180,9 +197,9 @@ function PlayerInfoProxy:AddExp(Player: Player, Exp: number) -- 数据变化 local currentLevel = playerInfoData.Stats.level - local maxLevel = Utils:GetMaxIdFromJson(JsonPlayerLv) + local maxLevel = Utils:GetMaxIdFromJson(JsonLvUpgrade) if currentLevel < maxLevel then - local requireExp = Utils:GetIdDataFromJson(JsonPlayerLv, currentLevel) + local requireExp = Utils:GetIdDataFromJson(JsonLvUpgrade, currentLevel) if playerInfoData.Stats.exp >= requireExp then playerInfoData.Stats.level = currentLevel + 1 playerInfoData.Stats.exp = playerInfoData.Stats.exp - requireExp @@ -229,12 +246,58 @@ end -- 获取物品数量 function PlayerInfoProxy:GetItemCount(Player: Player, ItemId: number) - if not Player or not ItemId then warn('获取物品数量失败: ' .. Player.Name .. ' ' .. ItemId) return end + if not Player or not ItemId then warn('获取物品数量失败: ' , Player.Name, ItemId) return end local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Items if not playerInfoData[ItemId] then return 0 end return playerInfoData[ItemId] end +-- 打造装备 +function PlayerInfoProxy:MakeForge(Player: Player, EquipmentId: number, Count: number) + if not Player or not EquipmentId then warn('打造装备失败: ', Player.Name,EquipmentId) return end + + local PlayerInfoFolder = GetPlayerInfoFolder(Player) + if not PlayerInfoFolder then return end + + -- 检查装备图鉴是否解锁 + local BookProxy = require(ServerStorage.Proxy.BookProxy) + if not BookProxy:IsBookUnlocked(Player, EquipmentId) then + RE_PlayerTip:FireClient(Player, "装备图鉴未解锁") + return + end + + -- 锻造数量>1,判断是否到达最高锻造等级 + local ForgeLv = PlayerInfoProxy:GetPlayerInfo(Player).Forge + if Count > 1 then + local MaxForgeLv = Utils:GetMaxIdFromJson(JsonForge, ForgeLv) + if ForgeLv < MaxForgeLv then + RE_PlayerTip:FireClient(Player, "锻造等级已到达最高等级") + return + end + end + + -- 判断金钱是否足够 + local ShouldCostMoney = Utils:GetIdDataFromJson(JsonForge, ForgeLv)["cost"][2] * Count + if not self:HasEnoughItem(Player, 1, ShouldCostMoney) then + RE_PlayerTip:FireClient(Player, "金钱不足") + return + end + -- 扣钱 + self:ChangeItemCount(Player, 1, -ShouldCostMoney) + + -- 生成对应装备 + local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) + for i = 1, Count do + EquipmentProxy:AddEquipment(Player, EquipmentId) + end + + -- 锻造升级 + ForgeLv = ForgeLv + Count + ChangeInfoInstance(Player, PlayerInfoFolder, "Forge", ForgeLv) + + -- TODO: 添加对应奖励弹窗 +end + -------------------------------------------------------------------------------- -- 获取升级加点属性 @@ -262,6 +325,10 @@ function PlayerInfoProxy:OnPlayerRemoving(Player: Player) end +RE_Forge.OnServerEvent:Connect(function(Player: Player, EquipmentId: number, Count: number) + PlayerInfoProxy:MakeForge(Player, EquipmentId, Count) +end) + ReplicatedStorage.Remotes.PlayerRemoving.Event:Connect(function(Player: Player) PlayerInfoProxy:OnPlayerRemoving(Player) end)