Skip to content

Safes War ​

Families queue up from the laptop and are matched against another family. The attacking family has to reach the enemy safe and hack it before time runs out.

How a match works ​

  1. A family member with manage_matchmaking_queue joins the queue. This costs 10 coins, which are refunded if no match is found.
  2. Matchmaking looks for an opponent for up to 5 minutes.
  3. When a match is found, a zone blip appears around the defending safe (175 m).
  4. The safe is locked for 5 minutes, then the hack window opens.
  5. An attacker with a Hacking Device hacks the safe (arrow minigame, 2 rounds of 6 arrows).
  6. After a successful hack, the raid phase lasts 5 minutes.
  7. The whole fight lasts up to 15 minutes. Both families then get a 10 minute cooldown.

Settings ​

lua
Config.safe_match = {
    joinCoinsCost = 10,
    matchmakingWaitMs = 5 * 60 * 1000,
    fightDurationMs = 15 * 60 * 1000,
    hackDistance = 2.0,
    cooldownMs = {
        winner = 10 * 60 * 1000,
        loser = 10 * 60 * 1000,
    },
    safeHack = {
        lockMs = 5 * 60 * 1000,
        postHackPhaseMs = 5 * 60 * 1000,
        requiredItem = 'hacking_device',
        consumeRequiredItem = false,
        minigame = {
            arrows = 6,
            rounds = 2,
            timeLimit = 15,
        },
    },
    blip = { radius = 175.0, color = 1, alpha = 90 },
}

Rewards & results ​

The winner receives 2–3 random items from this list:

ItemAmountChance
pistol_ammo30–6035%
weapon_heavypistol1–210%
weapon_pistol_mk21–210%
black_money400–100060%
token_global125%
armor3–550%
lua
reward = {
    items = {
        { item_name = "pistol_ammo", min = 30, max = 60, luckChance = 35 },
        -- ...
    },
    amount = { min = 2, max = 3 },  -- how many different items
},
result = {
    safeHealth = { winner = 5,  loser = -15 },
    xp         = { winner = 30, loser = -10 },
    coins      = { winner = 25, loser = 0 },
},

WARNING

Every reward item must exist in your inventory, or the reward will fail.

Robbery during a match ​

Players can rob a downed enemy inside the match zone. The target's cash is transferred and their inventory opens for the robber.

lua
Config.safe_match.robbery = {
    enabled = true,
    maxDistance = 2.5,
    allowFriendly = false,
    transferCash = true,
    cashAccount = 'cash',
}

The server checks every robbery: both players in the match and the zone, opposite families, the target downed, and the robber alive.

Elimination ​

A player who reaches final death inside the zone is out for the rest of the match. Last stand doesn't count, so teammates can still revive them.

An eliminated player can't hack the safe, rob players, open the family safe or earn MVP kills, and sees an ELIMINATED HUD until the match ends.

lua
Config.safe_match.elimination = {
    enabled = true,
    onlyInsideZone = true,
    removeFightBlip = true,
    blockFamilySafe = true,
    enforceZoneLockout = false,  -- true = push revived eliminated players out of the zone
}

Match HUD ​

lua
Config.MatchHUD = {
    enabled = true,
    offsetX = 24,
    offsetY = 24,
    labels = {
        searching = 'MATCH SEARCH',
        locked = 'SAFE LOCK',
        hacking = 'HACK WINDOW',
        raiding = 'SAFE RAID',
        cooldown = 'COOLDOWN',
    },
}

All MG Development resources are protected. Redistribution is not permitted.