From 28bfa9a567d3581428aacbe80e40a6750a02e99d Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues Date: Mon, 25 May 2026 01:52:48 -0300 Subject: [PATCH] feat(attributes): MATK range min~max no snapshot + display Espelha breaking change do server (S_ATTRIBUTE_SNAPSHOT_FULL agora envia matkBaseMin/matkBaseMax em vez de matkBase unico) para suportar MATK pre-renewal puro (rathena status_base_matk_min/max). - FZeusAttributesPayload: MatkBaseMin/Max em vez de MatkBase - FZMMOAttributesSnapshot: idem (BlueprintReadOnly) - ZMMOStatusWindowWidget: exibe "MATK min ~ max + equip" Co-Authored-By: Claude Opus 4.7 (1M context) --- Source/ZMMO/Game/UI/InGame/ZMMOStatusWindowWidget.cpp | 3 ++- .../ZMMOAttributes/Private/ZMMOAttributeNetworkHandler.cpp | 3 ++- Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h | 5 ++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/ZMMO/Game/UI/InGame/ZMMOStatusWindowWidget.cpp b/Source/ZMMO/Game/UI/InGame/ZMMOStatusWindowWidget.cpp index 0278c7e..c100af9 100644 --- a/Source/ZMMO/Game/UI/InGame/ZMMOStatusWindowWidget.cpp +++ b/Source/ZMMO/Game/UI/InGame/ZMMOStatusWindowWidget.cpp @@ -113,7 +113,8 @@ void UZMMOStatusWindowWidget::RefreshFromSnapshot(const FZMMOAttributesSnapshot& // Derivados — formato RO "STAT base + equip" (ex.: "ATK 51 + 0"). // Servidor manda os dois separados; cliente NUNCA recalcula. if (AtkText) AtkText->SetText(FText::FromString(FString::Printf(TEXT("ATK %d + %d"), S.AtkBase, S.AtkEquipBonus))); - if (MatkText) MatkText->SetText(FText::FromString(FString::Printf(TEXT("MATK %d + %d"), S.MatkBase, S.MatkEquipBonus))); + // MATK pre-renewal: range "min ~ max + equip" (rathena status_base_matk_min/max). + if (MatkText) MatkText->SetText(FText::FromString(FString::Printf(TEXT("MATK %d ~ %d + %d"), S.MatkBaseMin, S.MatkBaseMax, S.MatkEquipBonus))); if (DefText) DefText->SetText(FText::FromString(FString::Printf(TEXT("DEF %d + %d"), S.DefBase, S.DefEquipBonus))); if (MdefText) MdefText->SetText(FText::FromString(FString::Printf(TEXT("MDEF %d + %d"), S.MdefBase, S.MdefEquipBonus))); if (HitText) HitText->SetText(FText::FromString(FString::Printf(TEXT("HIT %d + %d"), S.HitBase, S.HitEquipBonus))); diff --git a/Source/ZMMOAttributes/Private/ZMMOAttributeNetworkHandler.cpp b/Source/ZMMOAttributes/Private/ZMMOAttributeNetworkHandler.cpp index 8512a5f..b9c702b 100644 --- a/Source/ZMMOAttributes/Private/ZMMOAttributeNetworkHandler.cpp +++ b/Source/ZMMOAttributes/Private/ZMMOAttributeNetworkHandler.cpp @@ -37,7 +37,8 @@ namespace S.Money = P.Money; S.AtkBase = P.AtkBase; S.AtkEquipBonus = P.AtkEquipBonus; - S.MatkBase = P.MatkBase; + S.MatkBaseMin = P.MatkBaseMin; + S.MatkBaseMax = P.MatkBaseMax; S.MatkEquipBonus = P.MatkEquipBonus; S.DefBase = P.DefBase; S.DefEquipBonus = P.DefEquipBonus; diff --git a/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h b/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h index 21229f9..aca138a 100644 --- a/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h +++ b/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h @@ -56,7 +56,10 @@ struct ZMMOATTRIBUTES_API FZMMOAttributesSnapshot UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 AtkBase = 0; UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 AtkEquipBonus = 0; - UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 MatkBase = 0; + /** MATK pre-renewal e' um range [min, max] (rathena status_base_matk_min/max). + * Display: "MATK min ~ max + equip". */ + UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 MatkBaseMin = 0; + UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 MatkBaseMax = 0; UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 MatkEquipBonus = 0; UPROPERTY(BlueprintReadOnly, Category = "Zeus|Attributes|Derived") int32 DefBase = 0;