diff --git a/Content/ZMMO/Data/Jobs/Beginner/DA_Job_Novice.uasset b/Content/ZMMO/Data/Jobs/Beginner/DA_Job_Novice.uasset new file mode 100644 index 0000000..ef103f2 Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Beginner/DA_Job_Novice.uasset differ diff --git a/Content/ZMMO/Data/Jobs/DA_Job_Novice.uasset b/Content/ZMMO/Data/Jobs/DA_Job_Novice.uasset deleted file mode 100644 index 964ab0f..0000000 Binary files a/Content/ZMMO/Data/Jobs/DA_Job_Novice.uasset and /dev/null differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Arcanist.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Arcanist.uasset new file mode 100644 index 0000000..da5f825 Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Arcanist.uasset differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Artisan.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Artisan.uasset new file mode 100644 index 0000000..392392b Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Artisan.uasset differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Devout.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Devout.uasset new file mode 100644 index 0000000..390fa21 Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Devout.uasset differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Ranger.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Ranger.uasset new file mode 100644 index 0000000..5542cc2 Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Ranger.uasset differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Rogue.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Rogue.uasset new file mode 100644 index 0000000..aef3d1a Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Rogue.uasset differ diff --git a/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Warrior.uasset b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Warrior.uasset new file mode 100644 index 0000000..e0b3f17 Binary files /dev/null and b/Content/ZMMO/Data/Jobs/Vocation/DA_Job_Warrior.uasset differ diff --git a/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h b/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h index 3d893e8..21229f9 100644 --- a/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h +++ b/Source/ZMMOAttributes/Public/ZMMOAttributeTypes.h @@ -5,7 +5,7 @@ /** * Snapshot completo dos atributos do char vindo do server via - * S_ATTRIBUTE_SNAPSHOT_FULL (opcode 1200). + * S_ATTRIBUTE_SNAPSHOT_FULL (opcode 1500). * * Cliente NUNCA recalcula derivados — apenas exibe o que recebe. Os campos * HP/MaxHp/SP/MaxSp ja sao os "efetivos" (base + equip + buff somados no diff --git a/Source/ZMMOJobs/Public/ZMMOJobDataAsset.h b/Source/ZMMOJobs/Public/ZMMOJobDataAsset.h index dcb6c3a..1c83c3f 100644 --- a/Source/ZMMOJobs/Public/ZMMOJobDataAsset.h +++ b/Source/ZMMOJobs/Public/ZMMOJobDataAsset.h @@ -2,6 +2,7 @@ #include "CoreMinimal.h" #include "Engine/DataAsset.h" +#include "ZMMOJobTypes.h" #include "ZMMOJobDataAsset.generated.h" class UTexture2D; @@ -39,11 +40,28 @@ public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job") FString TechnicalName; - /// Nome localizado exibido na UI (pt-BR no projeto base). Ex: "Aprendiz". + /// Nome localizado exibido na UI (pt-BR no projeto base). Ex: "Novato". /// Pode usar FText Localization tables pra multi-idioma futuro. UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job") FText DisplayName; + /// Tier hierarquico — espelha `JobDef::tier` do server. UI usa pra agrupar + /// jobs (ex: lista de Vocacoes possiveis quando promovendo Novato). + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job") + EZMMOJobTier Tier = EZMMOJobTier::Beginner; + + /// ClassId do parent na arvore de promocao. 0 = sem parent (Novato eh root). + /// Espelha `JobDef::parentJobId` do server. UI usa pra filtrar destinos + /// possiveis ao mostrar painel de promocao. + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job") + int32 ParentClassId = 0; + + /// Lista de armas que o job pode equipar. Espelha `JobDef::allowedWeaponsMask` + /// do server (mas como TArray pra editor visual em vez de bitmask cru). + /// Inventory UI usa pra hint "nao pode equipar" + filtro de catalogo. + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job") + TArray AllowedWeapons; + /// Icone do job — usado em StatusWindow, CharacterCard, JobChangeUI. /// Soft ptr: nao carrega ate alguem chamar LoadSynchronous() ou async load. UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job|Assets") diff --git a/Source/ZMMOJobs/Public/ZMMOJobTypes.h b/Source/ZMMOJobs/Public/ZMMOJobTypes.h new file mode 100644 index 0000000..771852c --- /dev/null +++ b/Source/ZMMOJobs/Public/ZMMOJobTypes.h @@ -0,0 +1,57 @@ +#pragma once + +#include "CoreMinimal.h" +#include "ZMMOJobTypes.generated.h" + +/** + * Tier hierarquico de um job. Espelha `EJobTier` do server em + * `Server/.../JobsSystem/Public/JobTypes.hpp`. Valores TEM que bater + * byte-a-byte com a enum do server porque o snapshot pode carregar + * tier como uint8 no futuro. + * + * Renascer (RO pre-renewal): char no Tier 2 (Specialization) que cumpre + * condicao volta pra Tier 3 (RebornBeginner) com bonus permanente, + * abrindo path paralelo RebornVocation → Mastery (coroa final). + */ +UENUM(BlueprintType) +enum class EZMMOJobTier : uint8 +{ + Beginner = 0 UMETA(DisplayName = "Iniciante"), + Vocation = 1 UMETA(DisplayName = "Vocacao"), + Specialization = 2 UMETA(DisplayName = "Especializacao"), + RebornBeginner = 3 UMETA(DisplayName = "Iniciante Renascido"), + RebornVocation = 4 UMETA(DisplayName = "Vocacao Renascida"), + Mastery = 5 UMETA(DisplayName = "Mestria"), +}; + +/** + * Tipos de arma. Espelha `EWeaponType` do server. Usado em `AllowedWeapons` + * do DA pra UI (filtrar items equipaveis) + validacao server-side futura + * quando InventorySystem entrar. + * + * Ordem TEM que bater com server porque o bitmask `allowedWeaponsMask` no + * JobDef usa bit N = EWeaponType(N). + */ +UENUM(BlueprintType) +enum class EZMMOWeaponType : uint8 +{ + Fist = 0 UMETA(DisplayName = "Punho"), + Dagger = 1 UMETA(DisplayName = "Adaga"), + Sword1H = 2 UMETA(DisplayName = "Espada 1M"), + Sword2H = 3 UMETA(DisplayName = "Espada 2M"), + Spear1H = 4 UMETA(DisplayName = "Lanca 1M"), + Spear2H = 5 UMETA(DisplayName = "Lanca 2M"), + Axe1H = 6 UMETA(DisplayName = "Machado 1M"), + Axe2H = 7 UMETA(DisplayName = "Machado 2M"), + Mace1H = 8 UMETA(DisplayName = "Maca 1M"), + Mace2H = 9 UMETA(DisplayName = "Maca 2M"), + Staff1H = 10 UMETA(DisplayName = "Cajado 1M"), + Staff2H = 11 UMETA(DisplayName = "Cajado 2M"), + Bow = 12 UMETA(DisplayName = "Arco"), + Knuckle = 13 UMETA(DisplayName = "Soqueira"), + Musical = 14 UMETA(DisplayName = "Instrumento Musical"), + Whip = 15 UMETA(DisplayName = "Chicote"), + Book = 16 UMETA(DisplayName = "Livro"), + Katar = 17 UMETA(DisplayName = "Katar"), + Gun = 18 UMETA(DisplayName = "Arma de Fogo"), +};