diff --git a/Content/ZMMO/Data/UI/DT_UI_VitalsReadout.uasset b/Content/ZMMO/Data/UI/DT_UI_VitalsReadout.uasset new file mode 100644 index 0000000..9217745 Binary files /dev/null and b/Content/ZMMO/Data/UI/DT_UI_VitalsReadout.uasset differ diff --git a/Content/ZMMO/UI/HUD/WBP_PlayerVitalsPanel.uasset b/Content/ZMMO/UI/HUD/WBP_PlayerVitalsPanel.uasset index 9a35810..98cde25 100644 Binary files a/Content/ZMMO/UI/HUD/WBP_PlayerVitalsPanel.uasset and b/Content/ZMMO/UI/HUD/WBP_PlayerVitalsPanel.uasset differ diff --git a/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.cpp b/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.cpp index 8cdfa0c..872f4ca 100644 --- a/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.cpp +++ b/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.cpp @@ -1,5 +1,6 @@ #include "ZMMOHudPlayerVitalsWidget.h" +#include "Components/RichTextBlock.h" #include "Components/TextBlock.h" #include "UI/Widgets/UIProgressBar_Base.h" #include "Internationalization/Text.h" @@ -25,14 +26,16 @@ void UZMMOHudPlayerVitalsWidget::ApplySnapshot(const FZMMOAttributesSnapshot& Sn // HP / SP (pool efetivo — % real) ApplyHpSp(Snapshot.Hp, Snapshot.MaxHp, Snapshot.Sp, Snapshot.MaxSp); - // Level + // Level — markup: "LVL " (pct/cinza) + número (num/gold-bright maior) if (LvlText) { - LvlText->SetText(FText::FromString(FString::Printf(TEXT("LVL %d"), Snapshot.BaseLevel))); + LvlText->SetText(FText::FromString( + FString::Printf(TEXT("LVL %d"), Snapshot.BaseLevel))); } // BASE / JOB EXP — sem "exp-to-next" no snapshot. Readout mostra valor - // absoluto acumulado; as barras ficam pra quando a curva de exp existir. + // absoluto acumulado (estilo Default, sem markup de %); as barras + o "%" + // ficam pra quando a curva de exp existir no snapshot do servidor. if (ExpReadout) { ExpReadout->SetText(FormatNumber(Snapshot.BaseExp)); @@ -60,17 +63,20 @@ void UZMMOHudPlayerVitalsWidget::ApplyHpSp(int32 Hp, int32 MaxHp, int32 Sp, int3 { SpBar->SetTargetPrimaryLevel(SafeRatio(Sp, MaxSp)); } + // Markup RichText: atual (Default/branco) + "/" (sep/escuro) + max (max/cinza). + // Tags resolvem no DT_UI_VitalsReadout (TextStyleSet do RichTextBlock). + auto MakeReadout = [](int32 Cur, int32 Max) -> FText + { + return FText::FromString(FString::Printf(TEXT("%s/%s"), + *FText::AsNumber(Cur).ToString(), *FText::AsNumber(Max).ToString())); + }; if (HpReadout) { - HpReadout->SetText(FText::Format( - NSLOCTEXT("ZMMOHud", "HpSpReadout", "{0}/{1}"), - FormatNumber(Hp), FormatNumber(MaxHp))); + HpReadout->SetText(MakeReadout(Hp, MaxHp)); } if (SpReadout) { - SpReadout->SetText(FText::Format( - NSLOCTEXT("ZMMOHud", "HpSpReadout", "{0}/{1}"), - FormatNumber(Sp), FormatNumber(MaxSp))); + SpReadout->SetText(MakeReadout(Sp, MaxSp)); } } diff --git a/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.h b/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.h index 78f1887..471197b 100644 --- a/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.h +++ b/Source/ZMMO/Game/UI/InGame/ZMMOHudPlayerVitalsWidget.h @@ -7,6 +7,7 @@ class UUIProgressBar_Base; class UTextBlock; +class URichTextBlock; /** * Sub-widget do HUD: painel de vitais do player (portrait + nome/job/level + @@ -71,19 +72,19 @@ protected: TObjectPtr ClassText; UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD") - TObjectPtr LvlText; + TObjectPtr LvlText; UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD") - TObjectPtr HpReadout; + TObjectPtr HpReadout; UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD") - TObjectPtr SpReadout; + TObjectPtr SpReadout; UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD") - TObjectPtr ExpReadout; + TObjectPtr ExpReadout; UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD") - TObjectPtr JobReadout; + TObjectPtr JobReadout; private: /** Último snapshot recebido (cache pra ApplyHpSp manter MaxHp/MaxSp). */