From af4fc50c38bceb51345fcbcbcb827e2536f34b94 Mon Sep 17 00:00:00 2001 From: gechangfu Date: Tue, 12 Aug 2025 19:27:44 +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 13200 -> 13324 bytes excel/equipment.xlsx | Bin 11459 -> 15852 bytes excel/item.xlsx | Bin 22663 -> 22781 bytes src/ReplicatedStorage/Json/Attributes.json | 62 ++++++++--------- src/ReplicatedStorage/Json/Blessing.json | 5 ++ src/ReplicatedStorage/Json/ItemProp.json | 3 + src/ReplicatedStorage/Tools/Utils.luau | 16 +++++ src/ServerStorage/Proxy/BookProxy.luau | 60 +++++++++++++++++ src/ServerStorage/Proxy/EquipmentProxy.luau | 67 +++++++++++++++++-- src/ServerStorage/Proxy/PlayerInfoProxy.luau | 1 - 10 files changed, 176 insertions(+), 38 deletions(-) create mode 100644 src/ReplicatedStorage/Json/Blessing.json diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index 0f0f8963512a5ddecd91a3ae91f917baf2c3be01..47de1e783ad638a84fb40e47d1312afdf4d8ec0f 100644 GIT binary patch delta 5189 zcmY*d1ys~c*I!ynKz50xyO!9cQ&Q<(8bKOqq@@0ofReHbNJ=T~(y)j~EYgA?f`H_L zG>DWSyga_&InVdboHJ+QH@~@a@0^*rH{CVa4Lwf`j8*X48WVs(p*KJvDi8=1;wc*J z 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 delta 5083 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 a@n7NF6+5~RB9EOfgkFVk;GsnS-u(|~b$KHI diff --git a/excel/equipment.xlsx b/excel/equipment.xlsx index 3bf41aa4aec930501988d53368dd3ae9d688f424..229668c9d2b68751fa8036894359300f7ecb043a 100644 GIT binary patch delta 8822 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 b82+#Vd1)BfKi>)Ub=$(~>*H@Y{{Z-Z?kyMQ delta 4788 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 diff --git a/excel/item.xlsx b/excel/item.xlsx index a3cd8f75ee128ff8ad9b787f808b768d095dd1de..9765d39f36890f7cbf67a96421bf23719c9871c4 100644 GIT binary patch delta 15614 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 W$bl2od7(anf2xzec%||z{J#JN6xzuE diff --git a/src/ReplicatedStorage/Json/Attributes.json b/src/ReplicatedStorage/Json/Attributes.json index e9913da..2ad9f6e 100644 --- a/src/ReplicatedStorage/Json/Attributes.json +++ b/src/ReplicatedStorage/Json/Attributes.json @@ -1,33 +1,33 @@ [ -{"id":1,"type":1,"effectAttribute":"attack","battleValue":[1,15],"iconId":1,"nameId":201}, -{"id":2,"type":1,"effectAttribute":"hp","battleValue":[1,1],"iconId":2,"nameId":202}, -{"id":3,"type":1,"effectAttribute":"swordAtk","battleValue":[1,10],"iconId":3,"nameId":203}, -{"id":4,"type":2,"effectAttribute":"swordWearBase","battleValue":[1,10],"iconId":4,"nameId":204}, -{"id":5,"type":2,"effectAttribute":"swordWearSpe","battleValue":[1,10],"iconId":5,"nameId":205}, -{"id":6,"type":2,"effectAttribute":"fireAtk","battleValue":[1,10],"iconId":6,"nameId":206}, -{"id":7,"type":2,"effectAttribute":"iceAtk","battleValue":[1,10],"iconId":7,"nameId":207}, -{"id":8,"type":2,"effectAttribute":"lightAtk","battleValue":[1,10],"iconId":8,"nameId":208}, -{"id":9,"type":2,"effectAttribute":"shadowAtk","battleValue":[1,10],"iconId":9,"nameId":209}, -{"id":10,"type":1,"effectAttribute":"fireDef","battleValue":[1,10],"iconId":10,"nameId":210}, -{"id":11,"type":1,"effectAttribute":"iceDef","battleValue":[1,10],"iconId":11,"nameId":211}, -{"id":12,"type":1,"effectAttribute":"lightDef","battleValue":[1,10],"iconId":12,"nameId":212}, -{"id":13,"type":1,"effectAttribute":"shadowDef","battleValue":[1,10],"iconId":13,"nameId":213}, -{"id":14,"type":2,"effectAttribute":"attackRate","battleValue":[1,10],"iconId":14,"nameId":214}, -{"id":15,"type":2,"effectAttribute":"hpRate","battleValue":[1,10],"iconId":15,"nameId":215}, -{"id":16,"type":2,"effectAttribute":"atkSpeed","battleValue":[1,10],"iconId":16,"nameId":216}, -{"id":20,"type":2,"effectAttribute":"critRate","battleValue":[1,10],"iconId":17,"nameId":220}, -{"id":21,"type":2,"effectAttribute":"critDamageRate","battleValue":[1,10],"iconId":18,"nameId":221}, -{"id":22,"type":2,"effectAttribute":"atkSpeedRate","battleValue":[1,10],"iconId":19,"nameId":222}, -{"id":23,"type":2,"effectAttribute":"cdRate","battleValue":[1,10],"iconId":20,"nameId":223}, -{"id":24,"type":1,"effectAttribute":"mpBonus","battleValue":[1,10],"iconId":21,"nameId":224}, -{"id":25,"type":2,"effectAttribute":"mpReduceRate","battleValue":[1,10],"iconId":22,"nameId":225}, -{"id":26,"type":1,"effectAttribute":"mpRecoverBonus","battleValue":[1,10],"iconId":23,"nameId":226}, -{"id":27,"type":2,"effectAttribute":"vampireRate","battleValue":[1,10],"iconId":24,"nameId":227}, -{"id":28,"type":2,"effectAttribute":"coinBonus","battleValue":[1,10],"iconId":25,"nameId":228}, -{"id":50,"type":1,"effectAttribute":"wearNumber","battleValue":[1,10],"iconId":26,"nameId":250}, -{"id":51,"type":1,"effectAttribute":"skillNumber","battleValue":[1,10],"iconId":27,"nameId":251}, -{"id":52,"type":1,"effectAttribute":"extraAttributeNumber","battleValue":[1,10],"iconId":28,"nameId":252}, -{"id":53,"type":1,"effectAttribute":"elementNumber","battleValue":[1,10],"iconId":29,"nameId":253}, -{"id":54,"type":1,"effectAttribute":"elementDefNumber","battleValue":[1,10],"iconId":30,"nameId":254}, -{"id":55,"type":1,"effectAttribute":"gemNumber","battleValue":[1,10],"iconId":31,"nameId":255} +{"id":1,"type":1,"specialType":null,"effectAttribute":"attack","battleValue":[1,15],"iconId":1,"nameId":201}, +{"id":2,"type":1,"specialType":null,"effectAttribute":"hp","battleValue":[1,1],"iconId":2,"nameId":202}, +{"id":3,"type":1,"specialType":null,"effectAttribute":"swordAtk","battleValue":[1,10],"iconId":3,"nameId":203}, +{"id":4,"type":2,"specialType":null,"effectAttribute":"swordWearBase","battleValue":[1,10],"iconId":4,"nameId":204}, +{"id":5,"type":2,"specialType":null,"effectAttribute":"swordWearSpe","battleValue":[1,10],"iconId":5,"nameId":205}, +{"id":6,"type":2,"specialType":2,"effectAttribute":"fireAtk","battleValue":[1,10],"iconId":6,"nameId":206}, +{"id":7,"type":2,"specialType":2,"effectAttribute":"iceAtk","battleValue":[1,10],"iconId":7,"nameId":207}, +{"id":8,"type":2,"specialType":2,"effectAttribute":"lightAtk","battleValue":[1,10],"iconId":8,"nameId":208}, +{"id":9,"type":2,"specialType":2,"effectAttribute":"shadowAtk","battleValue":[1,10],"iconId":9,"nameId":209}, +{"id":10,"type":1,"specialType":3,"effectAttribute":"fireDef","battleValue":[1,10],"iconId":10,"nameId":210}, +{"id":11,"type":1,"specialType":3,"effectAttribute":"iceDef","battleValue":[1,10],"iconId":11,"nameId":211}, +{"id":12,"type":1,"specialType":3,"effectAttribute":"lightDef","battleValue":[1,10],"iconId":12,"nameId":212}, +{"id":13,"type":1,"specialType":3,"effectAttribute":"shadowDef","battleValue":[1,10],"iconId":13,"nameId":213}, +{"id":14,"type":2,"specialType":null,"effectAttribute":"attackRate","battleValue":[1,10],"iconId":14,"nameId":214}, +{"id":15,"type":2,"specialType":null,"effectAttribute":"hpRate","battleValue":[1,10],"iconId":15,"nameId":215}, +{"id":16,"type":2,"specialType":null,"effectAttribute":"atkSpeed","battleValue":[1,10],"iconId":16,"nameId":216}, +{"id":20,"type":2,"specialType":1,"effectAttribute":"critRate","battleValue":[1,10],"iconId":17,"nameId":220}, +{"id":21,"type":2,"specialType":1,"effectAttribute":"critDamageRate","battleValue":[1,10],"iconId":18,"nameId":221}, +{"id":22,"type":2,"specialType":1,"effectAttribute":"atkSpeedRate","battleValue":[1,10],"iconId":19,"nameId":222}, +{"id":23,"type":2,"specialType":null,"effectAttribute":"cdRate","battleValue":[1,10],"iconId":20,"nameId":223}, +{"id":24,"type":1,"specialType":null,"effectAttribute":"mpBonus","battleValue":[1,10],"iconId":21,"nameId":224}, +{"id":25,"type":2,"specialType":null,"effectAttribute":"mpReduceRate","battleValue":[1,10],"iconId":22,"nameId":225}, +{"id":26,"type":1,"specialType":null,"effectAttribute":"mpRecoverBonus","battleValue":[1,10],"iconId":23,"nameId":226}, +{"id":27,"type":2,"specialType":null,"effectAttribute":"vampireRate","battleValue":[1,10],"iconId":24,"nameId":227}, +{"id":28,"type":2,"specialType":null,"effectAttribute":"coinBonus","battleValue":[1,10],"iconId":25,"nameId":228}, +{"id":50,"type":1,"specialType":null,"effectAttribute":"wearNumber","battleValue":[1,10],"iconId":26,"nameId":250}, +{"id":51,"type":1,"specialType":null,"effectAttribute":"skillNumber","battleValue":[1,10],"iconId":27,"nameId":251}, +{"id":52,"type":1,"specialType":null,"effectAttribute":"extraAttributeNumber","battleValue":[1,10],"iconId":28,"nameId":252}, +{"id":53,"type":1,"specialType":null,"effectAttribute":"elementNumber","battleValue":[1,10],"iconId":29,"nameId":253}, +{"id":54,"type":1,"specialType":null,"effectAttribute":"elementDefNumber","battleValue":[1,10],"iconId":30,"nameId":254}, +{"id":55,"type":1,"specialType":null,"effectAttribute":"gemNumber","battleValue":[1,10],"iconId":31,"nameId":255} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Blessing.json b/src/ReplicatedStorage/Json/Blessing.json new file mode 100644 index 0000000..945652b --- /dev/null +++ b/src/ReplicatedStorage/Json/Blessing.json @@ -0,0 +1,5 @@ +[ +{"id":1000,"type":1,"effect":14,"minRate":5,"maxRate":100}, +{"id":1001,"type":1,"effect":15,"minRate":5,"maxRate":100}, +{"id":2000,"type":2,"effect":20001,"minRate":5,"maxRate":100} +] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/ItemProp.json b/src/ReplicatedStorage/Json/ItemProp.json index e01f5af..c36a664 100644 --- a/src/ReplicatedStorage/Json/ItemProp.json +++ b/src/ReplicatedStorage/Json/ItemProp.json @@ -3,6 +3,9 @@ {"id":2,"type":1,"typeArgs":[],"quality":2,"iconId":2,"nameId":10002,"textId":20002,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":3,"type":1,"typeArgs":[],"quality":2,"iconId":3,"nameId":10003,"textId":20003,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":11,"type":1,"typeArgs":[],"quality":1,"iconId":11,"nameId":10011,"textId":20011,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":20,"type":1,"typeArgs":[],"quality":4,"iconId":20,"nameId":10020,"textId":20020,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":21,"type":1,"typeArgs":[],"quality":4,"iconId":21,"nameId":10021,"textId":20021,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":22,"type":1,"typeArgs":[],"quality":4,"iconId":22,"nameId":10022,"textId":20022,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":10000,"type":4,"typeArgs":[],"quality":1,"iconId":12,"nameId":20000,"textId":30000,"buyPrice":[11,10],"sellPrice":[11,10],"use":[],"showPackage":null}, {"id":10001,"type":4,"typeArgs":[],"quality":2,"iconId":13,"nameId":20001,"textId":30001,"buyPrice":[11,20],"sellPrice":[11,20],"use":[],"showPackage":null}, {"id":10002,"type":4,"typeArgs":[],"quality":3,"iconId":14,"nameId":20002,"textId":30002,"buyPrice":[11,30],"sellPrice":[11,30],"use":[],"showPackage":null}, diff --git a/src/ReplicatedStorage/Tools/Utils.luau b/src/ReplicatedStorage/Tools/Utils.luau index 053a295..86a3d47 100644 --- a/src/ReplicatedStorage/Tools/Utils.luau +++ b/src/ReplicatedStorage/Tools/Utils.luau @@ -117,6 +117,22 @@ function Utils:GetRandomIdFromJsonWithType(JsonData: table, Type: number, Except return randomId end +-- 获取随机id,ExceptIdList为可选参数,如果传入则排除ExceptIdList中的id +function Utils:GetRandomIdFromJsonWithSpecialKey(JsonData: table, Key: string, Value: string, ExceptIdList: table?) + local result = {} + for _, item in ipairs(JsonData) do + if item[Key] == Value then + table.insert(result, item.id) + end + end + local rng = Random.new() + local randomId = rng:NextInteger(1, #result) + while ExceptIdList and table.find(ExceptIdList, randomId) do + randomId = rng:NextInteger(1, #result) + end + return randomId +end + -- 随机获取权重Index function Utils:GetRandomWeightIndex(WeightTable: table) local totalWeight = 0 diff --git a/src/ServerStorage/Proxy/BookProxy.luau b/src/ServerStorage/Proxy/BookProxy.luau index cd76937..c9278e7 100644 --- a/src/ServerStorage/Proxy/BookProxy.luau +++ b/src/ServerStorage/Proxy/BookProxy.luau @@ -6,6 +6,7 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") local ServerStorage = game:GetService("ServerStorage") --> Variables +local Rng = require(ReplicatedStorage.Tools.Rng) local Utils = require(ReplicatedStorage.Tools.Utils) local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) @@ -13,6 +14,8 @@ local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) local JsonItem = require(ReplicatedStorage.Json.ItemProp) local JsonGem = require(ReplicatedStorage.Json.Gem) local JsonParam = require(ReplicatedStorage.Json.Param) +local JsonBlessing = require(ReplicatedStorage.Json.Blessing) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) --> Events local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip @@ -123,6 +126,63 @@ function BookProxy:IsBookUnlocked(Player: Player, BookId: number) return ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[tostring(BookId)] end +-------------------------------------------------------------------------------- +-- 祝福相关功能 + +function BookProxy:BlessingBook(Player: Player, BookId: number, BlessingType: number, BlessingCount: number) + local BookId = tostring(BookId) + -- 临时设置为1,之后优化再说 + local BlessingCount = 1 + + local pData = Utils:GetPlayerDataFolder(Player) + if not pData then return end + -- 类型排除 + if BlessingType < 1 or BlessingType > 3 then return end + local BlessingCostItemId = 20 + BlessingType - 1 + local PlayerInfoProxy = require(ServerStorage.Proxy.PlayerInfoProxy) + local hasEnoughItem = PlayerInfoProxy:HasEnoughItem(Player, BlessingCostItemId, BlessingCount) + if not hasEnoughItem then warn("没有足够货币, 无法祝福") return end + + -- 消耗祝福道具 + PlayerInfoProxy:ChangeItemCount(Player, BlessingCostItemId, -BlessingCount) + + -- 获取祝福 + local EquipmentData = Utils:GetIdDataFromJson(JsonEquipment, BookId) + if not EquipmentData then warn("获取装备数据失败") return end + + -- 如果类型相同,则直接定向 + local isNotDefine = true + local BlessingData = nil + if EquipmentData.specialType == BlessingType then + -- 定向 + BlessingData = Utils:GetSpecialKeyDataFromJson(JsonBlessing, "effect", EquipmentData.specialRequire) + if BlessingData then + isNotDefine = false + end + end + + -- 没有定向的话, 就随机 + if isNotDefine then + -- 随机 + BlessingData = Utils:GetRandomIdFromJsonWithType(JsonBlessing, BlessingType) + if not BlessingData then warn("获取祝福数据失败, 请检查配置表内容", BlessingType) return end + end + + -- 设置祝福属性 + ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].blessingId = BlessingData.id + ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].blessingRate = Rng:GetRandomInt(BlessingData.minRate, BlessingData.maxRate) + + -- 设置祝福成功,向前端发送信息 +end + + +-- 获取祝福信息 +function BookProxy:GetBlessingInfo(Player: Player, BookId: number) + local BookData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[tostring(BookId)] + if not BookData then return end + return BookData.blessingId, BookData.blessingRate +end + -------------------------------------------------------------------------------- -- TODO: 获取玩家属性(之后要是图鉴加属性就在这) diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index 3c906f8..6083ab1 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -18,6 +18,7 @@ local JsonEquipment = require(ReplicatedStorage.Json.Equipment) local JsonAttributes = require(ReplicatedStorage.Json.Attributes) local JsonExAttributes = require(ReplicatedStorage.Json.ExAttributes) local JsonParam = require(ReplicatedStorage.Json.Param) +local JsonBlessing = require(ReplicatedStorage.Json.Blessing) local JsonForge = require(ReplicatedStorage.Json.Forge) local JsonQualityEffect = require(ReplicatedStorage.Json.QualityEffect) @@ -143,7 +144,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) if exAttributeNumber > 0 then local spawnExAttributesId = {} for i = 1, exAttributeNumber do - local newExAttributeId = Utils:GetRandomIdFromJsonWithType(JsonExAttributes, 1, spawnExAttributesId) + local newExAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 1, spawnExAttributesId) table.insert(spawnExAttributesId, newExAttributeId) local ExAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newExAttributeId) @@ -164,7 +165,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) if elementNumber > 0 then local spawnElementsId = {} for i = 1, elementNumber do - local newElementAttributeId = Utils:GetRandomIdFromJsonWithType(JsonExAttributes, 1, spawnElementsId) + local newElementAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 2, spawnElementsId) table.insert(spawnElementsId, newElementAttributeId) local ElementAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementAttributeId) @@ -185,7 +186,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) if elementDefNumber > 0 then local spawnElementDefId = {} for i = 1, elementDefNumber do - local newElementDefId = Utils:GetRandomIdFromJsonWithType(JsonExAttributes, 1, spawnElementDefId) + local newElementDefId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 3, spawnElementDefId) table.insert(spawnElementDefId, newElementDefId) local ElementDefAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementDefId) @@ -198,6 +199,52 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) end end + -- 属性祝福处理 + local BookProxy = require(ServerStorage.Proxy.BookProxy) + local blessingId, blessingRate = BookProxy:GetBlessingInfo(Player, EquipmentId) + local blessingType, blessingEffect + local blessingTableName + local isNotTrigger = true + if blessingId then + local blessingData = Utils:GetIdDataFromJson(JsonBlessing, blessingId) + blessingType = blessingData.type + blessingEffect = blessingData.effect + end + + if blessingType == 1 then + -- 找到对应祝福所属的表名 + local attributeData = Utils:GetIdDataFromJson(JsonAttributes, blessingEffect) + if attributeData.specialType then + if attributeData.specialType == 1 then + blessingTableName = "exAttributes" + elseif attributeData.specialType == 2 then + blessingTableName = "elements" + elseif attributeData.specialType == 3 then + blessingTableName = "elementDef" + end + end + + -- 如果表名存在,进行下一步处理 + if blessingTableName then + -- 不存在该属性时,且有其他属性时 + if not ResultData[blessingTableName][attributeData.effectAttribute] and #ResultData[blessingTableName] > 0 then + -- 随机替换功能是否触发 + local isTrigger = Rng:GetRandomInt(1, 100) <= blessingRate + if isTrigger and isNotTrigger then + -- 将第一个属性替换为祝福属性,保留对应的随机值,只替换属性名 + local oldAttributeValue + for key, value in ResultData[blessingTableName] do + oldAttributeValue = value + ResultData[blessingTableName][key] = nil + break + end + ResultData[blessingTableName][attributeData.effectAttribute] = oldAttributeValue + isNotTrigger = false + end + end + end + end + ------------------------------------------------------------ ArchiveProxy.pData[Player.UserId][STORE_NAME][UniqueId] = ResultData @@ -215,7 +262,17 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) if abilityNumber > 0 then local spawnAbilitiesId = {} for i = 1, abilityNumber do - local newAbilityId = AbilityProxy:GetRandomAbilityId(spawnAbilitiesId) + -- 技能祝福处理 + local specialAbilityId + if blessingType == 2 and isNotTrigger then + -- 没触发过,中了概率就指定技能id + local isTrigger = Rng:GetRandomInt(1, 100) <= blessingRate + if isTrigger then + specialAbilityId = blessingEffect + isNotTrigger = false + end + end + local newAbilityId = specialAbilityId or AbilityProxy:GetRandomAbilityId(spawnAbilitiesId) table.insert(spawnAbilitiesId, newAbilityId) local newAbilityData, newAbilityInstance = AbilityProxy:AddAbility(Player, newAbilityId) AbilityProxy:WearAbility(Player, newAbilityData.id, UniqueId) @@ -339,7 +396,6 @@ function EquipmentProxy:UnwearEquipment(Player: Player, EquipmentId: number) -- 更新玩家数据 PlayerFightProxy:UpdatePlayerFightData(Player) - end -- 获取穿戴中的装备UniqueId @@ -387,7 +443,6 @@ function EquipmentProxy:GetPlayerAttributes(Player: Player) -- print("属性表", AttributesData) -- 计算特殊词条加成是否激活 if EquipmentData.specialType then - local isActive = false -- 属性类型加成 if EquipmentData.specialType == 1 then diff --git a/src/ServerStorage/Proxy/PlayerInfoProxy.luau b/src/ServerStorage/Proxy/PlayerInfoProxy.luau index 02bef0e..b43d2fb 100644 --- a/src/ServerStorage/Proxy/PlayerInfoProxy.luau +++ b/src/ServerStorage/Proxy/PlayerInfoProxy.luau @@ -97,7 +97,6 @@ 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 = {}