Itens

Última edição em 07/07/2026, 20:34 por Admin

Itens

Página de game design (não diegética). Hub do sistema de itens de The Sync Survival: define o modelo de dados comum a todo item do jogo e organiza o catálogo por tipo.

1. Visão geral

Todo objeto que pode ser carregado, equipado, consumido ou negociado é um item — e todo item existe em duas camadas:

  • Definição (estática): o "molde" do item — nome, taxonomia, dimensões, peso base, valores. Vive num catálogo canônico do servidor, com id estável; o cliente UE espelha cada definição num PrimaryDataAsset que carrega só a parte visual (mesh, ícone, sons, widgets).
  • Instância (dinâmica): um item concreto no mundo, com GUID gerado pelo servidor, durabilidade atual, contagem de stack, posição num grid e histórico próprio. Duas instâncias do mesmo molde são objetos distintos — e a hierarquia (item dentro de container dentro de mochila) é expressa por GUIDs, nunca por ponteiros.

O inventário é espacial: cada item ocupa um retângulo W×H em células de grid, pode girar 90° para caber, e containers (mochila, colete, bolsos) oferecem grids próprios e aninháveis — ver Peso e Mobilidade.

Arquitetura (breve): os itens são simulados exclusivamente no servidor Origin — a instância viva é uma Entity, a persistida é um Record. O cliente espelha snapshots/deltas recebidos por opcodes e envia apenas intents (mover, dividir, equipar, usar); nenhuma mutação de item é decidida no cliente.

2. Modelo base — comum a todo item

CampoTipoDescrição
Guidid de instânciaGerado pelo servidor; identifica o item em rede, persistência e UI, e sobrevive a save/load. A definição correspondente é apontada por um id estável de catálogo.
NometextoNome de exibição + descrição curta de UI (na definição, não na instância).
Tipotaxonomia hierárquicaTipo primário (Arma, Munição, Comida…) + subtipo. Extensível sem tocar no núcleo do sistema.
Dimensões no gridW×H (células)Footprint espacial; rotação de 90° troca W↔H. Itens dobráveis (coronha dobrada) têm um segundo footprint.
PesokgPeso unitário; o peso agregado (item + conteúdo) sobe a hierarquia com cache e alimenta a curva peso→Stamina de Peso e Mobilidade.
Durabilidadeatual/máx + 5 estadosNovo 1,0 · Gasto 0,7 · Danificado 0,5 · Muito Danificado 0,3 · Arruinado 0,0 — o mesmo modelo de Proteção e Armaduras. Arruinado perde a função e não volta a Novo.
ValorSYNPreço base de referência do catálogo; o preço real é do mercado (região, reputação, estado do item).
Raridade5 níveisComum · Incomum · Raro · Épico · Lendário — cor do slot na UI e peso nas tabelas de loot.
Stack máximointeiro1 = não empilha. Dividir/combinar pilhas é transação validada no servidor.
Flagsbitmask/tagsContainer (oferece grids), Equipável (um dos 14 slots), Consumível, Empunhável, Único (artefatos), QuestItem
// Servidor Origin — definicao canonica (catalogo) e instancia (Entity/Record).
// O cliente UE espelha a definicao em PrimaryDataAsset (visual) e a instancia
// em structs atualizadas por opcodes; a UI so emite intents.
USTRUCT()
struct FTSSItemDefinition
{
    GENERATED_BODY()

    UPROPERTY() FName        ItemId;              // id estavel do catalogo
    UPROPERTY() FText        DisplayName;
    UPROPERTY() FGameplayTag Type;                // TSS.Item.Weapon, TSS.Item.Food, ...
    UPROPERTY() FIntPoint    GridSize;            // W x H em celulas (rotacao troca W/H)
    UPROPERTY() float        WeightKg      = 0.1f;
    UPROPERTY() float        MaxDurability = 100.f; // 5 estados derivados por faixa
    UPROPERTY() int32        ValueSYN      = 0;
    UPROPERTY() FGameplayTag Rarity;
    UPROPERTY() int32        MaxStack      = 1;
    UPROPERTY() int32        Flags         = 0;   // Container | Equipavel | Consumivel...
};

USTRUCT()
struct FTSSItemInstance
{
    GENERATED_BODY()

    UPROPERTY() FGuid     InstanceId;        // gerado pelo servidor — a identidade
    UPROPERTY() FName     ItemId;            // aponta para a definicao
    UPROPERTY() int32     Count = 1;         // stack atual
    UPROPERTY() float     Durability;        // atual (0..MaxDurability)
    UPROPERTY() FGuid     ParentContainer;   // hierarquia por GUID, nunca ponteiro
    UPROPERTY() FIntPoint Cell;              // celula-ancora no grid do pai
    UPROPERTY() bool      bRotated = false;  // girado 90 graus
};

3. Tipos de item

Cada tipo estende o modelo base com os próprios campos — detalhados nas subpáginas:

  • Armas — cadência, modos de tiro, dispersão, recuo, slots de attachment, desgaste por tiro e ruído. A arma nunca define dano: dano vem da munição.
  • Munição — calibre, massa, velocidade inicial e classe de penetração P-I a P-IV; a fonte de energia da Fórmula de Dano.
  • Proteção e Vestuário — os 14 slots de equipamento, classes balísticas C-I a C-IV, zonas cobertas, isolamento e bolsos.
  • Comida e Bebida — kcal e ml contra as barras de Fome e Sede de Atributos do Jogador; estados fresco/cozido/estragado e perecibilidade.
  • Médicos — a resposta a cada estado ruim do corpo: sangramento, fratura, Dor, infecção, contaminação e Sinal.
  • Ferramentas — reparo, craft, acesso e navegação; inclui a bússola analógica que mantém a Dead Zone navegável.
  • Acessórios de Arma — miras, supressores, grips e carregadores; modificadores de manuseio por slot.
  • Containers — mochilas, coletes e bolsas: grids oferecidos, peso próprio e a regra de acesso rápido vs parar para abrir.
  • Recursos e Materiais — o combustível do craft/reparo/construção, com origem regional (salvage).
  • Artefatos e Especiais — itens únicos de lore e progressão: Neural Key, Genesis Core, Origin Fragment e afins.

Ver também