Denver Studio - Docs

Sistema de Roubo

Configuração do sistema de roubo de casas com loot spots

Sistema de Roubo

O sistema de roubo permite que jogadores invadam casas, entrem no interior e revistem pontos de busca (loot spots) para encontrar itens.

Como Funciona

O jogador se aproxima de uma residência roubável e aperta X

Completa o skill check para arrombar a porta

É teleportado para dentro do interior

Dentro da casa, pontos de busca ficam marcados (ex: Gaveta, Cofre)

Ao se aproximar de um ponto, aparece [E] Revistar — cada um tem sua barra de progresso

Após revistar os pontos (ou sair pela porta), recebe os itens e é teleportado de volta

Configuração Geral

No config/preferences.lua:

robbery = {
  enabled = true,                    -- ativa/desativa o roubo
  robberyTime = 30000,               -- tempo total do roubo (ms)
  cooldownTime = 3600000,            -- cooldown por local (1 hora)
  requiredItem = "lockpick",         -- item necessário para iniciar
  policeAlertChance = 70,            -- chance de alertar a polícia (%)
  policeAlertDuration = 300000,      -- duração do alerta no mapa (5 min)
  minPoliceOnline = 2,               -- mínimo de policiais online
  policePermission = "policia.permissao",
  maxItemsPerRobbery = 3,            -- máximo de itens por roubo

  robbableItems = {
    { item = "dinheirosujo", min = 1000, max = 5000, chance = 80 },
    { item = "dolares",      min = 500,  max = 2000, chance = 60 },
    { item = "relogio",      min = 1,    max = 3,    chance = 50 },
  },

  blipConfig = {
    sprite = 161, color = 1, scale = 1.2, duration = 300000
  }
},

Locais de Roubo

Os locais de roubo são configurados em config/interiors.lua dentro de robberyLocations.

Para interiores MOD (shells), o sistema cria o objeto no ar e teleporta o jogador:

robberyLocations = {
  {
    coords = vector3(-232.6, 588.2, 190.54),    -- posição da porta no mundo
    offset = { 3.24, -1.81, -0.40 },            -- offset de spawn
    interior = "shell_michael",                   -- nome do interior MOD
    policeAlertChance = 60,                       -- chance de alerta (override)
  },
}

Loot Spots para MOD

Os loot spots ficam na configuração do interior (não na robbery location):

["shell_michael"] = {
  title = "Casa Michael",
  spawnHeading = 59.53,
  exitOffsets = { 3.24, -1.81, -0.40 },
  chestOffsets = { -0.67, 5.18, -0.40 },
  lootSpots = {
    { offset = { -5.00, -2.00, -4.06 }, label = "Gaveta" },
    { offset = { -2.00, 3.00, -4.06 }, label = "Estante" },
    { offset = { -8.00, -8.00, 0.52 }, label = "Cofre" },
  }
},

Use /testinterior shell_michael e depois /getoffset em cada local desejado para pegar os offsets.

Para interiores nativos do GTA, o jogador é teleportado diretamente sem criar objetos:

robberyLocations = {
  {
    coords = vector3(-232.6, 588.2, 190.54),      -- posição da porta no mundo
    isModInterior = false,                          -- indica interior nativo
    interiorCoords = vector3(x, y, z),              -- spawn dentro do interior
    exitCoords = vector3(x, y, z),                  -- saída dentro do interior
    policeAlertChance = 60,
    lootSpots = {
      { coords = vector3(x, y, z), label = "Gaveta" },
      { coords = vector3(x, y, z), label = "Cofre" },
    }
  },
}

Use /getcoords dentro do interior nativo em cada posição para pegar as coordenadas.

Como Configurar Loot Spots

Para MOD: Use /testinterior [nome] para entrar no interior

Ande até o local desejado (gaveta, cofre, etc.)

Para MOD: Use /getoffset — copie o offset do console F8

Para Nativo: Use /getcoords — copie as coordenadas do console F8

Adicione no config com um label descritivo

O tempo da barra de progresso é dividido igualmente entre os pontos. Se robberyTime = 30000 e tem 3 spots, cada um leva 10 segundos.

Itens Roubáveis

Cada item tem:

  • item — nome do item no inventário
  • min / max — quantidade aleatória
  • chance — porcentagem de dropar (0-100)
robbableItems = {
  { item = "dinheirosujo", min = 1000, max = 5000, chance = 80 },
  { item = "dolares",      min = 500,  max = 2000, chance = 60 },
  { item = "relogio",      min = 1,    max = 3,    chance = 50 },
  { item = "colar",        min = 1,    max = 2,    chance = 40 },
},

O sistema sorteia até maxItemsPerRobbery itens diferentes por roubo.