From 027f40481f86e5c7870e68691f0c2f5009aa2b19 Mon Sep 17 00:00:00 2001 From: gechangfu Date: Mon, 25 Aug 2025 19:35:15 +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/Rune.xlsx | Bin 14764 -> 14804 bytes excel/attribute.xlsx | Bin 14042 -> 14046 bytes excel/cha.xlsx | Bin 15291 -> 15301 bytes excel/language.xlsx | Bin 27419 -> 27452 bytes src/ReplicatedStorage/Json/Attributes.json | 2 +- .../Json/AttributesUpgrade.json | 4 +- .../Json/Language_En_US.json | 13 +- .../Json/Language_Zh_CN.json | 13 +- .../Modules/EventFilterQuickStart.luau | 144 +++++++++--------- src/ReplicatedStorage/Tools/Utils.luau | 11 +- src/ServerStorage/Base/Rune.luau | 16 +- .../Modules/Behaviours/Attack.luau | 15 ++ .../Modules/Runes/RuneBookQualityPurple.luau | 22 ++- .../Modules/Runes/RuneFireDamage.luau | 2 + .../Modules/Runes/RuneWearKnife.luau | 4 +- src/ServerStorage/Proxy/EquipmentProxy.luau | 36 ++--- .../Proxy/PlayerFightProxy/PlayerAI.luau | 4 + .../Proxy/PlayerFightProxy/init.luau | 11 +- .../Proxy/RuneProxy/RuneCalculation.luau | 32 +++- src/ServerStorage/Proxy/RuneProxy/init.luau | 2 + .../UI/Common/RuneShow.luau | 16 +- .../AttributeLvupShow.luau | 16 +- .../UI/Windows/ChaWindow/PackageShow.luau | 1 - .../Windows/EquipmentDetailWindow/init.luau | 8 +- .../UI/Windows/GetEquipmentsWindow/init.luau | 7 +- .../UI/Windows/RuneStateWindow/init.luau | 8 +- 26 files changed, 236 insertions(+), 151 deletions(-) diff --git a/excel/Rune.xlsx b/excel/Rune.xlsx index 3b325ebca26b46789baf417ce2f7f744a2021324..cdc3dab7c852bf68f3c7baf1ffe3a7173e80c095 100644 GIT binary patch delta 9190 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 J9`BRse*rEI6FUF^ diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index a0353ea6a5fc6f59d39a8c6cad8627a65f862430..197dc31d5a7dd9ccd2aa1f5a5efceb06873b3f89 100644 GIT binary patch delta 6269 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 delta 6269 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 F|6eJT;imuq diff --git a/excel/cha.xlsx b/excel/cha.xlsx index bb9ab029a88c82e587a6a9f5c23d0d94126a704b..3b023d99f1b010414160e3b6774248f4a869a0c5 100644 GIT binary patch delta 5412 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 iPX{${Kp^9rxeMk0T0cS?$jIY(qtj&W53ss3 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 delta 12454 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 0 then local spawnExAttributesId = {} for i = 1, exAttributeNumber do - local newExAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 1, spawnExAttributesId) + local newExAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonAttributes, "specialType", 1, spawnExAttributesId) table.insert(spawnExAttributesId, newExAttributeId) local ExAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newExAttributeId) local minValue = ExAttributeData.randomValue[1] - local maxValue = ExAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ExAttributeData.bonus) + local maxValue = ExAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ExAttributeData.lvBonus) local randomExAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newExAttributeId) - ResultData.exAttributes[AttributeData.name] = randomExAttributeValue + ResultData.exAttributes[AttributeData.effectAttribute] = randomExAttributeValue end end -- 随机生成元素属性数量(暂时跟额外属性相同,之后可以改逻辑) - local maxElementNumber = PlayerInfoProxy:GetPlayerInfo(Player).elementNumber or 0 + local maxElementNumber = playerInfo["AttributesUpgrade"]["13"] or 0 local elementNumber = rng:NextInteger(0, maxElementNumber) ResultData.maxElementNumber = elementNumber ResultData.elements = {} if elementNumber > 0 then local spawnElementsId = {} for i = 1, elementNumber do - local newElementAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 2, spawnElementsId) + local newElementAttributeId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonAttributes, "specialType", 2, spawnElementsId) table.insert(spawnElementsId, newElementAttributeId) local ElementAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementAttributeId) local minValue = ElementAttributeData.randomValue[1] - local maxValue = ElementAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementAttributeData.bonus) + local maxValue = ElementAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementAttributeData.lvBonus) local randomElementAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newElementAttributeId) - ResultData.elements[AttributeData.name] = randomElementAttributeValue + ResultData.elements[AttributeData.effectAttribute] = randomElementAttributeValue end end -- 随机生成元素抗性数量 - local maxElementDefNumber = PlayerInfoProxy:GetPlayerInfo(Player).elementDefNumber or 0 + local maxElementDefNumber = playerInfo["AttributesUpgrade"]["14"] or 0 local elementDefNumber = rng:NextInteger(0, maxElementDefNumber) ResultData.maxElementDefNumber = elementDefNumber ResultData.elementDef = {} if elementDefNumber > 0 then local spawnElementDefId = {} for i = 1, elementDefNumber do - local newElementDefId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonExAttributes, "specialType", 3, spawnElementDefId) - table.insert(spawnElementDefId, newElementDefId) + local newElementDefId = Utils:GetRandomIdFromJsonWithSpecialKey(JsonAttributes, "specialType", 3, spawnElementDefId) + table.insert(spawnElementDefId, newElementDefId, spawnElementDefId) local ElementDefAttributeData = Utils:GetIdDataFromJson(JsonExAttributes, newElementDefId) local minValue = ElementDefAttributeData.randomValue[1] - local maxValue = ElementDefAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementDefAttributeData.bonus) + local maxValue = ElementDefAttributeData.randomValue[2] + GetEntryLvBonus(PlayerLevel, ElementDefAttributeData.lvBonus) local randomElementDefAttributeValue = rng:NextInteger(minValue, maxValue) local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, newElementDefId) - ResultData.elementDef[AttributeData.name] = randomElementDefAttributeValue + ResultData.elementDef[AttributeData.effectAttribute] = randomElementDefAttributeValue end end @@ -252,19 +253,20 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) -- 随机生成技能槽位数量 local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) - local maxAbilityNumber = PlayerInfoProxy:GetPlayerInfo(Player)["AttributesUpgrade"]["11"] or 0 + local maxAbilityNumber = playerInfo["AttributesUpgrade"]["11"] or 0 local abilityNumber = rng:NextInteger(0, maxAbilityNumber) ResultData.maxAbilityNumber = abilityNumber -- 随机生成宝石数量 + -- TODO:暂时没有宝石所以配置的maxGemNumber是不对的 local GemProxy = require(ServerStorage.Proxy.GemProxy) - local maxGemNumber = PlayerInfoProxy:GetPlayerInfo(Player).gemNumber or 0 + local maxGemNumber = playerInfo["AttributesUpgrade"].gemNumber or 0 local gemNumber = rng:NextInteger(0, maxGemNumber) ResultData.maxGemNumber = gemNumber -- 随机生成符文数量 local RuneProxy = require(ServerStorage.Proxy.RuneProxy) - local maxRuneNumber = PlayerInfoProxy:GetPlayerInfo(Player)["AttributesUpgrade"]["15"] or 0 + local maxRuneNumber = playerInfo["AttributesUpgrade"]["15"] or 0 local runeNumber = rng:NextInteger(0, maxRuneNumber) ResultData.maxRuneNumber = runeNumber diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau index 7d3961a..430b610 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau @@ -113,6 +113,10 @@ function PlayerAI:AddRune(RuneName: string, WearingSlot: number?) self:UpdateRuneTriggerSlots() end +function PlayerAI:GetBaseAttack() + return math.floor(self.Character:GetAttributeValue("attack") * (1 + self.Character:GetAttributeValue("attackRate") / 100)) +end + -- 触发所有符文初始化完成 function PlayerAI:TriggerAllRunesInitFinish() for _, data in self.RuneList do diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau index d4898ad..bcb9fcd 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau @@ -184,11 +184,6 @@ function PlayerFightProxy:UpdatePlayerFightData(Player: Player) end end - -- 更新玩家属性 - for AttributeName, AttributeValue in AttributesData do - -- TODO:这里可能涉及到战斗时更换装备的属性处理,还需要再函数内部再根据剩余百分比数值变化 - PlayerRole:ChangeAttributeValue(AttributeName, AttributeValue) - end -- 根据技能添加玩家AI行为 local abilityIdList, behaviorNameList = AbilityProxy:GetPlayerWearingAbilityData(Player) @@ -198,6 +193,12 @@ function PlayerFightProxy:UpdatePlayerFightData(Player: Player) local RuneProxy = require(ServerStorage.Proxy.RuneProxy) RuneProxy:GetRuneAttributes(Player, playerAI, AttributesData, behaviorNameList) + -- 更新玩家属性 + for AttributeName, AttributeValue in AttributesData do + -- TODO:这里可能涉及到战斗时更换装备的属性处理,还需要再函数内部再根据剩余百分比数值变化 + PlayerRole:ChangeAttributeValue(AttributeName, AttributeValue) + end + -- TODO:设置AI行为(临时清除所有行为,添加新的玩家行为) playerAI:ClearAllBehaviour() for _, behaviorName in behaviorNameList do diff --git a/src/ServerStorage/Proxy/RuneProxy/RuneCalculation.luau b/src/ServerStorage/Proxy/RuneProxy/RuneCalculation.luau index c1d64b2..191f97e 100644 --- a/src/ServerStorage/Proxy/RuneProxy/RuneCalculation.luau +++ b/src/ServerStorage/Proxy/RuneProxy/RuneCalculation.luau @@ -71,19 +71,39 @@ function RuneCalculation:GetRuneAttributes(Player: Player, PlayerAI: table, Attr warn("RuneCalculation: 发送符文执行记录失败:", error) end end + + end -- 执行符文循环的辅助函数 function RuneCalculation:ExecuteRuneLoop(PlayerAI: table, wearingRuneName: table, wearingRuneUniqueId: table, startIndex: number, maxSteps: number, AttributesData: table, BehaviorNameList: table) local index = startIndex + -- 将wearingRuneName转换为数组格式,按槽位顺序排列 + local wearingRuneNameArray = {} + local maxSlot = 0 + for slot, runeName in pairs(wearingRuneName) do + maxSlot = math.max(maxSlot, slot) + end + + for slot = 1, maxSlot do + if wearingRuneName[slot] then + table.insert(wearingRuneNameArray, wearingRuneName[slot]) + end + end + while index <= #wearingRuneUniqueId and maxSteps > 0 do - local result = PlayerAI:TriggerRune(wearingRuneName[index], "Check", index, AttributesData, BehaviorNameList) - if result then - local nextIndex = PlayerAI:TriggerRune(wearingRuneName[index], "Execute", index, AttributesData, BehaviorNameList) - - if type(nextIndex) == "number" then - index = nextIndex + local runeName = wearingRuneNameArray[index] + if runeName then + local result = PlayerAI:TriggerRune(runeName, "Check", index, AttributesData, BehaviorNameList) + if result then + local nextIndex = PlayerAI:TriggerRune(runeName, "Execute", index, AttributesData, BehaviorNameList) + + if type(nextIndex) == "number" then + index = nextIndex + else + index += 1 + end else index += 1 end diff --git a/src/ServerStorage/Proxy/RuneProxy/init.luau b/src/ServerStorage/Proxy/RuneProxy/init.luau index 781e0ee..fb5ce3a 100644 --- a/src/ServerStorage/Proxy/RuneProxy/init.luau +++ b/src/ServerStorage/Proxy/RuneProxy/init.luau @@ -253,6 +253,7 @@ function RuneProxy:GetPlayerWearingRuneData(Player: Player) -- 穿戴中的填入 local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy) local wearingEquipments = EquipmentProxy:GetPlayerWearingEquipmentUniqueId(Player) + for _, RuneData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do if tonumber(RuneData.wearing) > 0 and table.find(wearingEquipments, RuneData.wearing) then table.insert(wearingRuneUniqueId, RuneData.id) @@ -265,6 +266,7 @@ function RuneProxy:GetPlayerWearingRuneData(Player: Player) end end end + return wearingRuneUniqueId, wearingRuneName, wearingRuneBehaviorName end diff --git a/src/StarterPlayerScripts/UI/Common/RuneShow.luau b/src/StarterPlayerScripts/UI/Common/RuneShow.luau index 3ffb8cd..8ab7526 100644 --- a/src/StarterPlayerScripts/UI/Common/RuneShow.luau +++ b/src/StarterPlayerScripts/UI/Common/RuneShow.luau @@ -43,14 +43,14 @@ function RuneShow:Refresh() end function RuneShow:OnInitFinish() - local con = self.Variables._btnClick.MouseButton1Click:Connect(function() - if self.Data.instance then - self.TopUI:ShowDetailData(self.Data.id) - else - -- TODO: 之后做提示弹窗 - end - end) - table.insert(self.Connections, con) + -- local con = self.Variables._btnClick.MouseButton1Click:Connect(function() + -- if self.Data.instance then + -- self.TopUI:ShowDetailData(self.Data.id) + -- else + -- -- TODO: 之后做提示弹窗 + -- end + -- end) + -- table.insert(self.Connections, con) if self.Data.instance then local wearingCon = self.Data.instance:GetAttributeChangedSignal("wearing"):Connect(function() diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau index 52738a2..257abb3 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau @@ -51,9 +51,11 @@ function AttributeLvupShow:Refresh() self.instanceCon = instanceCon end - local attributeData = Utils:GetIdDataFromJson(JsonAttributes, self.Data.id) + local attributesUpgradeData = Utils:GetIdDataFromJson(JsonAttributesUpgrade, self.Data.id) + local attributeData = Utils:GetSpecialKeyDataFromJson(JsonAttributes, "effectAttribute", attributesUpgradeData.effectAttribute) self.Variables._imgIcon.Image = Localization:GetImageData(attributeData.iconId) - self.Variables._tmpAttributeName.Text = self.Data.id + self.Variables._tmpAttributeName.Text = Localization:GetLanguageData(attributeData.nameId) + local nowLv = self:GetNowLv() self.Variables._tmpLv.Text = "Lv." .. nowLv @@ -64,14 +66,18 @@ function AttributeLvupShow:Refresh() -- 属性值显示 local caculateValue = self.Data.lvAdd[1] + self.Data.lvAdd[2] * (self.Data.maxLv - 1) - self.Variables._tmpValue.Text = string.format("%.2f%%", caculateValue / 100) + if attributeData.type == 1 then + self.Variables._tmpValue.Text = "+"..caculateValue + else + self.Variables._tmpValue.Text = "+"..string.format("%.2f%%", caculateValue / 100) + end else self.Variables._btnUpgrade.Text = self.Data.cost[2] + self.Data.cost[3] * nowLv -- 属性值显示(下一级) if self.Data.id == 1 or self.Data.id == 2 then - self.Variables._tmpValue.Text = math.floor(self.Data.lvAdd[1] * ((self.Data.lvAdd[2] / 10000) ^ nowLv)) + self.Variables._tmpValue.Text = "+"..math.floor(self.Data.lvAdd[1] * ((self.Data.lvAdd[2] / 10000) ^ nowLv)) else - self.Variables._tmpValue.Text = self.Data.lvAdd[1] + self.Data.lvAdd[2] * nowLv + self.Variables._tmpValue.Text = "+"..self.Data.lvAdd[1] + self.Data.lvAdd[2] * nowLv end end end diff --git a/src/StarterPlayerScripts/UI/Windows/ChaWindow/PackageShow.luau b/src/StarterPlayerScripts/UI/Windows/ChaWindow/PackageShow.luau index bce50d9..48069af 100644 --- a/src/StarterPlayerScripts/UI/Windows/ChaWindow/PackageShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/ChaWindow/PackageShow.luau @@ -45,7 +45,6 @@ function PackageShow:Refresh() self.Variables["__listRuneWearing"]:AddComponent(RuneShow) local runeData = Utils:GetWearingRuneData(self.Data.id) - print("RuneData", runeData) self.Variables["__listRuneWearing"]:SetData(runeData) -- 模型展示 diff --git a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau index 4659b16..70bc9fe 100644 --- a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau @@ -226,7 +226,7 @@ function EquipmentDetailWindow:OnOpenWindow() self.Variables["__listBaseAttributes"]:SetData(self:TransformKeyTable(self.Data.attributes)) -- 额外属性 - if #self.Data.exAttributes > 0 then + if Utils:GetTableLength(self.Data.exAttributes) > 0 then self.Variables["_goExAttributesPanel"].Visible = true self.Variables["__listExAttributes"]:AddComponent(AttributeShow) self.Variables["__listExAttributes"]:SetData(self:TransformKeyTable(self.Data.exAttributes)) @@ -235,7 +235,7 @@ function EquipmentDetailWindow:OnOpenWindow() end -- 元素属性 - if #self.Data.elements > 0 then + if Utils:GetTableLength(self.Data.elements) > 0 then self.Variables["_goElementPanel"].Visible = true self.Variables["__listElement"]:AddComponent(AttributeShow) self.Variables["__listElement"]:SetData(self:TransformKeyTable(self.Data.elements)) @@ -244,7 +244,7 @@ function EquipmentDetailWindow:OnOpenWindow() end -- 元素定义属性 - if #self.Data.elementDef > 0 then + if Utils:GetTableLength(self.Data.elementDef) > 0 then self.Variables["_goElementDefPanel"].Visible = true self.Variables["__listElementDef"]:AddComponent(AttributeShow) self.Variables["__listElementDef"]:SetData(self:TransformKeyTable(self.Data.elementDef)) @@ -262,7 +262,7 @@ function EquipmentDetailWindow:OnOpenWindow() end -- 符文属性 - if #self.Data.runeWearing > 0 then + if Utils:GetTableLength(self.Data.runeWearing) > 0 then self.Variables["_goRuneWearing"].Visible = true self.Variables["__listRuneWearing"]:AddComponent(RuneShow) self.Variables["__listRuneWearing"]:SetData(self.Data.runeWearing) diff --git a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau index c29c2aa..d8e12fe 100644 --- a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau @@ -116,7 +116,6 @@ function GetEquipmentsWindow:Init(UIManager: table, Data: table?) } self.UIRootName = "ui_w_get_equipments" self.UIParentName = UIEnums.UIParent.UIRoot - return self end @@ -148,7 +147,7 @@ function GetEquipmentsWindow:ShowDetail(equipmentInstance: Instance) self.Variables["__listElementDef"]:SetData(self:TransformKeyTable(elementDef)) -- 额外属性 - if #exAttributes > 0 then + if Utils:GetTableLength(exAttributes) > 0 then self.Variables["_goExAttributesPanel"].Visible = true self.Variables["__listExAttributes"]:SetData(self:TransformKeyTable(exAttributes)) else @@ -156,7 +155,7 @@ function GetEquipmentsWindow:ShowDetail(equipmentInstance: Instance) end -- 元素属性 - if #elements > 0 then + if Utils:GetTableLength(elements) > 0 then self.Variables["_goElementPanel"].Visible = true self.Variables["__listElement"]:SetData(self:TransformKeyTable(elements)) else @@ -164,7 +163,7 @@ function GetEquipmentsWindow:ShowDetail(equipmentInstance: Instance) end -- 元素定义属性 - if #elementDef > 0 then + if Utils:GetTableLength(elementDef) > 0 then self.Variables["_goElementDefPanel"].Visible = true self.Variables["__listElementDef"]:SetData(self:TransformKeyTable(elementDef)) else diff --git a/src/StarterPlayerScripts/UI/Windows/RuneStateWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/RuneStateWindow/init.luau index 6d1589c..6674af9 100644 --- a/src/StarterPlayerScripts/UI/Windows/RuneStateWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/RuneStateWindow/init.luau @@ -483,10 +483,11 @@ function RuneStateWindow:CreateAttributeChangeDisplay(runeUI: Instance, record: -- 通过nameId获取本地化文本 attributeName = Localization:GetLanguageData(attributeData.nameId) or attrName end - + table.insert(attributeChanges, { name = attributeName, - change = change + change = change, + isPercent = attributeData and attributeData.type == 2 }) end end @@ -547,6 +548,9 @@ function RuneStateWindow:CreateAttributeChangeContainer(runeUI: Instance, attrib -- 格式化显示文本 local displayValue = change.isCombatValue and FormatNumber(change.change, "Suffix") or tostring(change.change) + if change.isPercent then + displayValue = displayValue .. "%" + end changeText.Text = string.format("%s %s%s", change.name, change.change > 0 and "+" or "", displayValue) changeText.TextColor3 = change.change > 0 and Color3.fromRGB(0, 255, 100) or Color3.fromRGB(255, 100, 100)