Suspicion rework (#7723)
* Deprecate suspicion spawn markers. * Add suspicion loot table. * Add suspicion item tag component. * Suspicion rule now spawns items randomly around the station on start. Also cleans them up when it ends. * Fix build huh, that API changed quickly--
This commit is contained in:
committed by
GitHub
parent
d3a20c8a23
commit
3ee1f1f810
@@ -1,18 +1,20 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Content.Server.Chat.Managers;
|
using Content.Server.Chat.Managers;
|
||||||
using Content.Server.Players;
|
using Content.Server.Players;
|
||||||
using Content.Server.Roles;
|
using Content.Server.Roles;
|
||||||
|
using Content.Server.Station;
|
||||||
using Content.Server.Suspicion;
|
using Content.Server.Suspicion;
|
||||||
using Content.Server.Suspicion.Roles;
|
using Content.Server.Suspicion.Roles;
|
||||||
using Content.Server.Traitor.Uplink;
|
using Content.Server.Traitor.Uplink;
|
||||||
using Content.Server.Traitor.Uplink.Account;
|
using Content.Server.Traitor.Uplink.Account;
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.CCVar;
|
||||||
using Content.Shared.Doors.Systems;
|
using Content.Shared.Doors.Systems;
|
||||||
|
using Content.Shared.EntityList;
|
||||||
using Content.Shared.GameTicking;
|
using Content.Shared.GameTicking;
|
||||||
|
using Content.Shared.Maps;
|
||||||
using Content.Shared.MobState.Components;
|
using Content.Shared.MobState.Components;
|
||||||
|
using Content.Shared.Random.Helpers;
|
||||||
using Content.Shared.Roles;
|
using Content.Shared.Roles;
|
||||||
using Content.Shared.Sound;
|
using Content.Shared.Sound;
|
||||||
using Content.Shared.Suspicion;
|
using Content.Shared.Suspicion;
|
||||||
@@ -22,15 +24,10 @@ using Robust.Server.Player;
|
|||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Configuration;
|
using Robust.Shared.Configuration;
|
||||||
using Robust.Shared.Enums;
|
using Robust.Shared.Enums;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Localization;
|
|
||||||
using Robust.Shared.Log;
|
|
||||||
using Robust.Shared.Maths;
|
|
||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
using Robust.Shared.Serialization.Manager.Attributes;
|
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
using Timer = Robust.Shared.Timing.Timer;
|
using Timer = Robust.Shared.Timing.Timer;
|
||||||
@@ -42,14 +39,16 @@ namespace Content.Server.GameTicking.Rules;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class SuspicionRuleSystem : GameRuleSystem
|
public sealed class SuspicionRuleSystem : GameRuleSystem
|
||||||
{
|
{
|
||||||
|
[Dependency] private readonly IMapManager _mapManager = default!;
|
||||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
[Dependency] private readonly IChatManager _chatManager = default!;
|
||||||
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
[Dependency] private readonly IEntityManager _entities = default!;
|
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
[Dependency] private readonly ITileDefinitionManager _tileDefMan = default!;
|
||||||
[Dependency] private readonly SharedDoorSystem _doorSystem = default!;
|
[Dependency] private readonly SharedDoorSystem _doorSystem = default!;
|
||||||
|
[Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
|
||||||
|
|
||||||
public override string Prototype => "Suspicion";
|
public override string Prototype => "Suspicion";
|
||||||
|
|
||||||
@@ -79,6 +78,7 @@ public sealed class SuspicionRuleSystem : GameRuleSystem
|
|||||||
|
|
||||||
private const string TraitorID = "SuspicionTraitor";
|
private const string TraitorID = "SuspicionTraitor";
|
||||||
private const string InnocentID = "SuspicionInnocent";
|
private const string InnocentID = "SuspicionInnocent";
|
||||||
|
private const string SuspicionLootTable = "SuspicionRule";
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -140,8 +140,9 @@ public sealed class SuspicionRuleSystem : GameRuleSystem
|
|||||||
attached.EnsureComponent<SuspicionRoleComponent>();
|
attached.EnsureComponent<SuspicionRoleComponent>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Max is players-1 so there's always at least one innocent.
|
||||||
var numTraitors = MathHelper.Clamp(ev.Players.Length / playersPerTraitor,
|
var numTraitors = MathHelper.Clamp(ev.Players.Length / playersPerTraitor,
|
||||||
minTraitors, ev.Players.Length);
|
minTraitors, ev.Players.Length-1);
|
||||||
|
|
||||||
var traitors = new List<SuspicionTraitorRole>();
|
var traitors = new List<SuspicionTraitorRole>();
|
||||||
|
|
||||||
@@ -219,6 +220,51 @@ public sealed class SuspicionRuleSystem : GameRuleSystem
|
|||||||
|
|
||||||
_doorSystem.AccessType = SharedDoorSystem.AccessTypes.AllowAllNoExternal;
|
_doorSystem.AccessType = SharedDoorSystem.AccessTypes.AllowAllNoExternal;
|
||||||
|
|
||||||
|
var susLoot = _prototypeManager.Index<EntityLootTablePrototype>(SuspicionLootTable);
|
||||||
|
|
||||||
|
foreach (var (_, mapGrid) in EntityManager.EntityQuery<StationComponent, IMapGridComponent>(true))
|
||||||
|
{
|
||||||
|
// I'm so sorry.
|
||||||
|
var tiles = mapGrid.Grid.GetAllTiles().ToArray();
|
||||||
|
Logger.Info($"TILES: {tiles.Length}");
|
||||||
|
|
||||||
|
var spawn = susLoot.GetSpawns();
|
||||||
|
var count = spawn.Count;
|
||||||
|
|
||||||
|
// Try to scale spawned amount by station size...
|
||||||
|
if (tiles.Length < 1000)
|
||||||
|
{
|
||||||
|
count = Math.Min(count, tiles.Length / 10);
|
||||||
|
|
||||||
|
// Shuffle so we pick items at random.
|
||||||
|
_random.Shuffle(spawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
var item = spawn[i];
|
||||||
|
|
||||||
|
// Maximum number of attempts for trying to find a suitable empty tile.
|
||||||
|
// We do this because we don't want to hang the server when a devious map has literally no free tiles.
|
||||||
|
const int maxTries = 100;
|
||||||
|
|
||||||
|
for (var j = 0; j < maxTries; j++)
|
||||||
|
{
|
||||||
|
var tile = _random.Pick(tiles);
|
||||||
|
|
||||||
|
// Let's not spawn things on top of walls.
|
||||||
|
if (tile.IsBlockedTurf(false, _lookupSystem) || tile.IsSpace(_tileDefMan))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var uid = Spawn(item, tile.GridPosition(_mapManager));
|
||||||
|
|
||||||
|
// Keep track of all suspicion-spawned weapons so we can clean them up once the rule ends.
|
||||||
|
EnsureComp<SuspicionItemComponent>(uid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_checkTimerCancel = new CancellationTokenSource();
|
_checkTimerCancel = new CancellationTokenSource();
|
||||||
Timer.SpawnRepeating(DeadCheckDelay, CheckWinConditions, _checkTimerCancel.Token);
|
Timer.SpawnRepeating(DeadCheckDelay, CheckWinConditions, _checkTimerCancel.Token);
|
||||||
}
|
}
|
||||||
@@ -231,6 +277,12 @@ public sealed class SuspicionRuleSystem : GameRuleSystem
|
|||||||
|
|
||||||
_playerManager.PlayerStatusChanged -= PlayerManagerOnPlayerStatusChanged;
|
_playerManager.PlayerStatusChanged -= PlayerManagerOnPlayerStatusChanged;
|
||||||
|
|
||||||
|
// Clean up all items we spawned before...
|
||||||
|
foreach (var item in EntityManager.EntityQuery<SuspicionItemComponent>(true))
|
||||||
|
{
|
||||||
|
Del(item.Owner);
|
||||||
|
}
|
||||||
|
|
||||||
_checkTimerCancel.Cancel();
|
_checkTimerCancel.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,8 +297,8 @@ public sealed class SuspicionRuleSystem : GameRuleSystem
|
|||||||
foreach (var playerSession in _playerManager.ServerSessions)
|
foreach (var playerSession in _playerManager.ServerSessions)
|
||||||
{
|
{
|
||||||
if (playerSession.AttachedEntity is not {Valid: true} playerEntity
|
if (playerSession.AttachedEntity is not {Valid: true} playerEntity
|
||||||
|| !_entities.TryGetComponent(playerEntity, out MobStateComponent? mobState)
|
|| !TryComp(playerEntity, out MobStateComponent? mobState)
|
||||||
|| !_entities.HasComponent<SuspicionRoleComponent>(playerEntity))
|
|| !HasComp<SuspicionRoleComponent>(playerEntity))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
9
Content.Server/Suspicion/SuspicionItemComponent.cs
Normal file
9
Content.Server/Suspicion/SuspicionItemComponent.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Content.Server.Suspicion;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tag component meant for bookkeeping items spawned by the suspicion rule.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed class SuspicionItemComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
|
# -- WARNING --
|
||||||
|
# These spawners are all deprecated.
|
||||||
|
# Please edit the suspicion loot table instead. Thanks.
|
||||||
|
# -- WARNING --
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Suspicion Rifle Spawner
|
name: Suspicion Rifle Spawner
|
||||||
id: SuspicionRifleSpawner
|
id: SuspicionRifleSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -25,6 +31,7 @@
|
|||||||
name: Suspicion Pistol Spawner
|
name: Suspicion Pistol Spawner
|
||||||
id: SuspicionPistolSpawner
|
id: SuspicionPistolSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -51,6 +58,7 @@
|
|||||||
name: Suspicion Melee Spawner
|
name: Suspicion Melee Spawner
|
||||||
id: SuspicionMeleeSpawner
|
id: SuspicionMeleeSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -72,6 +80,7 @@
|
|||||||
name: Suspicion Revolver Spawner
|
name: Suspicion Revolver Spawner
|
||||||
id: SuspicionRevolverSpawner
|
id: SuspicionRevolverSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -90,6 +99,7 @@
|
|||||||
name: Suspicion Shotgun Spawner
|
name: Suspicion Shotgun Spawner
|
||||||
id: SuspicionShotgunSpawner
|
id: SuspicionShotgunSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -112,6 +122,7 @@
|
|||||||
name: Suspicion SMG Spawner
|
name: Suspicion SMG Spawner
|
||||||
id: SuspicionSMGSpawner
|
id: SuspicionSMGSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -132,6 +143,7 @@
|
|||||||
name: Suspicion Sniper Spawner
|
name: Suspicion Sniper Spawner
|
||||||
id: SuspicionSniperSpawner
|
id: SuspicionSniperSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -150,6 +162,7 @@
|
|||||||
name: Suspicion Hitscan Spawner
|
name: Suspicion Hitscan Spawner
|
||||||
id: SuspicionHitscanSpawner
|
id: SuspicionHitscanSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -172,6 +185,7 @@
|
|||||||
name: Suspicion Launchers Spawner
|
name: Suspicion Launchers Spawner
|
||||||
id: SuspicionLaunchersSpawner
|
id: SuspicionLaunchersSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -189,6 +203,7 @@
|
|||||||
name: Suspicion Grenades Spawner
|
name: Suspicion Grenades Spawner
|
||||||
id: SuspicionGrenadesSpawner
|
id: SuspicionGrenadesSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -212,6 +227,7 @@
|
|||||||
name: Suspicion Rifle Ammo Spawner
|
name: Suspicion Rifle Ammo Spawner
|
||||||
id: SuspicionRifleMagazineSpawner
|
id: SuspicionRifleMagazineSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -233,6 +249,7 @@
|
|||||||
name: Suspicion Shotgun Ammo Spawner
|
name: Suspicion Shotgun Ammo Spawner
|
||||||
id: SuspicionShotgunMagazineSpawner
|
id: SuspicionShotgunMagazineSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -249,6 +266,7 @@
|
|||||||
name: Suspicion Pistol Ammo Spawner
|
name: Suspicion Pistol Ammo Spawner
|
||||||
id: SuspicionPistolMagazineSpawner
|
id: SuspicionPistolMagazineSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -266,6 +284,7 @@
|
|||||||
name: Suspicion Magnum Ammo Spawner
|
name: Suspicion Magnum Ammo Spawner
|
||||||
id: SuspicionMagnumMagazineSpawner
|
id: SuspicionMagnumMagazineSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
@@ -283,6 +302,7 @@
|
|||||||
name: Suspicion Launcher Ammo Spawner
|
name: Suspicion Launcher Ammo Spawner
|
||||||
id: SuspicionLauncherAmmoSpawner
|
id: SuspicionLauncherAmmoSpawner
|
||||||
parent: MarkerBase
|
parent: MarkerBase
|
||||||
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
|
|||||||
211
Resources/Prototypes/LootTables/suspicion_loot_table.yml
Normal file
211
Resources/Prototypes/LootTables/suspicion_loot_table.yml
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
# These will be spawned randomly around the station
|
||||||
|
- type: entityLootTable
|
||||||
|
id: SuspicionRule
|
||||||
|
entries:
|
||||||
|
- id: RifleAk
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleBlackAk
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleCarbine
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleDallas
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleSTS
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleVintorez
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleWintermute
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RifleCalico
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: PistolClarissa
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolColt
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolGiskard
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolHMPistol
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolLamia
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolMandella
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolMk58
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolMk58Wood
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolMolly
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolOlivaw
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: PistolPaco
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: ButchCleaver
|
||||||
|
maxAmount: 5
|
||||||
|
- id: Pickaxe
|
||||||
|
maxAmount: 5
|
||||||
|
- id: Spear
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ToolboxEmergency
|
||||||
|
maxAmount: 5
|
||||||
|
- id: CrowbarRed
|
||||||
|
maxAmount: 5
|
||||||
|
- id: Stunbaton
|
||||||
|
maxAmount: 10
|
||||||
|
|
||||||
|
- id: RevolverDeckard
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RevolverInspector
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RevolverMateba
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: ShotgunBojevic
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunDB
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunBull
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunGladstone
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunRegulator
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunPump
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: ShotgunSawn
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: SmgAtreides
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SmgC20r
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SmgDrozd
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SmgWt550
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SmgZoric
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: SniperBoltGun
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SniperBoltGunWood
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: SniperHeavy
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: RedLaser
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
- id: RedHeavyLaser
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 1
|
||||||
|
- id: XrayLaser
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 1
|
||||||
|
- id: LaserGun
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 1
|
||||||
|
- id: LaserCannon
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 1
|
||||||
|
- id: XrayCannon
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 2
|
||||||
|
- id: TaserGun
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 4
|
||||||
|
|
||||||
|
- id: LauncherChinaLake
|
||||||
|
prob: 0.30
|
||||||
|
maxAmount: 3
|
||||||
|
|
||||||
|
- id: LauncherRocket
|
||||||
|
prob: 0.20
|
||||||
|
maxAmount: 3
|
||||||
|
|
||||||
|
- id: ExGrenade
|
||||||
|
prob: 0.10
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 2
|
||||||
|
|
||||||
|
- id: GrenadeFlashBang
|
||||||
|
- id: SyndieMiniBomb
|
||||||
|
prob: 0.05
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 5
|
||||||
|
|
||||||
|
- id: GrenadeFlash
|
||||||
|
- id: GrenadeBlast
|
||||||
|
- id: GrenadeFrag
|
||||||
|
- id: GrenadeBaton
|
||||||
|
- id: SoapSyndie
|
||||||
|
amount: 0
|
||||||
|
maxAmount: 3
|
||||||
|
|
||||||
|
|
||||||
|
# Spawn a bunch of ammo around!
|
||||||
|
- id: MagazineSRifle
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineClRifle
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineClRifle10x24
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineClRiflePistol
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineLRifle
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazinePistolCalicoTopMounted
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineShotgun
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazinePistol
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineHCPistol
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineMagnum
|
||||||
|
maxAmount: 15
|
||||||
|
- id: MagazineMagnumSmg
|
||||||
|
maxAmount: 15
|
||||||
|
- id: RocketAmmo
|
||||||
|
maxAmount: 15
|
||||||
|
- id: GrenadeFrag
|
||||||
|
maxAmount: 15
|
||||||
Reference in New Issue
Block a user