Replace AdvertiseComponent with DatasetVocalizerComponent (#38887)
* Replace AdvertiseComponent with DatasetVocalizerComponent * No vocalizing while broken or without power * Kill AdvertiseComponent/System * This really shouldn't be here * xmldoc for VocalizerRequiresPowerComponent * TryIndex -> Index
This commit is contained in:
@@ -1,47 +0,0 @@
|
|||||||
using Content.Server.Advertise.EntitySystems;
|
|
||||||
using Content.Shared.Dataset;
|
|
||||||
using Robust.Shared.Prototypes;
|
|
||||||
|
|
||||||
namespace Content.Server.Advertise.Components;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Makes this entity periodically advertise by speaking a randomly selected
|
|
||||||
/// message from a specified dataset into local chat.
|
|
||||||
/// </summary>
|
|
||||||
[RegisterComponent, Access(typeof(AdvertiseSystem))]
|
|
||||||
public sealed partial class AdvertiseComponent : Component
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Minimum time in seconds to wait before saying a new ad, in seconds. Has to be larger than or equal to 1.
|
|
||||||
/// </summary>
|
|
||||||
[DataField]
|
|
||||||
public int MinimumWait { get; private set; } = 8 * 60;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Maximum time in seconds to wait before saying a new ad, in seconds. Has to be larger than or equal
|
|
||||||
/// to <see cref="MinimumWait"/>
|
|
||||||
/// </summary>
|
|
||||||
[DataField]
|
|
||||||
public int MaximumWait { get; private set; } = 10 * 60;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// If true, the delay before the first advertisement (at MapInit) will ignore <see cref="MinimumWait"/>
|
|
||||||
/// and instead be rolled between 0 and <see cref="MaximumWait"/>. This only applies to the initial delay;
|
|
||||||
/// <see cref="MinimumWait"/> will be respected after that.
|
|
||||||
/// </summary>
|
|
||||||
[DataField]
|
|
||||||
public bool Prewarm = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The identifier for the advertisements dataset prototype.
|
|
||||||
/// </summary>
|
|
||||||
[DataField(required: true)]
|
|
||||||
public ProtoId<LocalizedDatasetPrototype> Pack { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The next time an advertisement will be said.
|
|
||||||
/// </summary>
|
|
||||||
[DataField]
|
|
||||||
public TimeSpan NextAdvertisementTime { get; set; } = TimeSpan.Zero;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
using Content.Server.Advertise.Components;
|
|
||||||
using Content.Server.Chat.Systems;
|
|
||||||
using Content.Server.Power.Components;
|
|
||||||
using Content.Shared.VendingMachines;
|
|
||||||
using Robust.Shared.Prototypes;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
using Robust.Shared.Timing;
|
|
||||||
|
|
||||||
namespace Content.Server.Advertise.EntitySystems;
|
|
||||||
|
|
||||||
public sealed class AdvertiseSystem : EntitySystem
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
|
||||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
|
||||||
[Dependency] private readonly ChatSystem _chat = default!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The maximum amount of time between checking if advertisements should be displayed
|
|
||||||
/// </summary>
|
|
||||||
private readonly TimeSpan _maximumNextCheckDuration = TimeSpan.FromSeconds(15);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The next time the game will check if advertisements should be displayed
|
|
||||||
/// </summary>
|
|
||||||
private TimeSpan _nextCheckTime = TimeSpan.MinValue;
|
|
||||||
|
|
||||||
public override void Initialize()
|
|
||||||
{
|
|
||||||
SubscribeLocalEvent<AdvertiseComponent, MapInitEvent>(OnMapInit);
|
|
||||||
|
|
||||||
SubscribeLocalEvent<ApcPowerReceiverComponent, AttemptAdvertiseEvent>(OnPowerReceiverAttemptAdvertiseEvent);
|
|
||||||
SubscribeLocalEvent<VendingMachineComponent, AttemptAdvertiseEvent>(OnVendingAttemptAdvertiseEvent);
|
|
||||||
|
|
||||||
_nextCheckTime = TimeSpan.MinValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnMapInit(EntityUid uid, AdvertiseComponent advert, MapInitEvent args)
|
|
||||||
{
|
|
||||||
var prewarm = advert.Prewarm;
|
|
||||||
RandomizeNextAdvertTime(advert, prewarm);
|
|
||||||
_nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RandomizeNextAdvertTime(AdvertiseComponent advert, bool prewarm = false)
|
|
||||||
{
|
|
||||||
var minDuration = prewarm ? 0 : Math.Max(1, advert.MinimumWait);
|
|
||||||
var maxDuration = Math.Max(minDuration, advert.MaximumWait);
|
|
||||||
var waitDuration = TimeSpan.FromSeconds(_random.Next(minDuration, maxDuration));
|
|
||||||
|
|
||||||
advert.NextAdvertisementTime = _gameTiming.CurTime + waitDuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SayAdvertisement(EntityUid uid, AdvertiseComponent? advert = null)
|
|
||||||
{
|
|
||||||
if (!Resolve(uid, ref advert))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var attemptEvent = new AttemptAdvertiseEvent(uid);
|
|
||||||
RaiseLocalEvent(uid, ref attemptEvent);
|
|
||||||
if (attemptEvent.Cancelled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_prototypeManager.TryIndex(advert.Pack, out var advertisements))
|
|
||||||
_chat.TrySendInGameICMessage(uid, Loc.GetString(_random.Pick(advertisements.Values)), InGameICChatType.Speak, hideChat: true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Update(float frameTime)
|
|
||||||
{
|
|
||||||
var currentGameTime = _gameTiming.CurTime;
|
|
||||||
if (_nextCheckTime > currentGameTime)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// _nextCheckTime starts at TimeSpan.MinValue, so this has to SET the value, not just increment it.
|
|
||||||
_nextCheckTime = currentGameTime + _maximumNextCheckDuration;
|
|
||||||
|
|
||||||
var query = EntityQueryEnumerator<AdvertiseComponent>();
|
|
||||||
while (query.MoveNext(out var uid, out var advert))
|
|
||||||
{
|
|
||||||
if (currentGameTime > advert.NextAdvertisementTime)
|
|
||||||
{
|
|
||||||
SayAdvertisement(uid, advert);
|
|
||||||
// The timer is always refreshed when it expires, to prevent mass advertising (ex: all the vending machines have no power, and get it back at the same time).
|
|
||||||
RandomizeNextAdvertTime(advert);
|
|
||||||
}
|
|
||||||
_nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static void OnPowerReceiverAttemptAdvertiseEvent(EntityUid uid, ApcPowerReceiverComponent powerReceiver, ref AttemptAdvertiseEvent args)
|
|
||||||
{
|
|
||||||
args.Cancelled |= !powerReceiver.Powered;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void OnVendingAttemptAdvertiseEvent(EntityUid uid, VendingMachineComponent machine, ref AttemptAdvertiseEvent args)
|
|
||||||
{
|
|
||||||
args.Cancelled |= machine.Broken;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[ByRefEvent]
|
|
||||||
public record struct AttemptAdvertiseEvent(EntityUid? Advertiser)
|
|
||||||
{
|
|
||||||
public bool Cancelled = false;
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ using Content.Server.Cargo.Systems;
|
|||||||
using Content.Server.Emp;
|
using Content.Server.Emp;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
using Content.Server.Power.EntitySystems;
|
using Content.Server.Power.EntitySystems;
|
||||||
|
using Content.Server.Vocalization.Systems;
|
||||||
using Content.Shared.Cargo;
|
using Content.Shared.Cargo;
|
||||||
using Content.Shared.Damage;
|
using Content.Shared.Damage;
|
||||||
using Content.Shared.Destructible;
|
using Content.Shared.Destructible;
|
||||||
@@ -42,6 +43,7 @@ namespace Content.Server.VendingMachines
|
|||||||
SubscribeLocalEvent<VendingMachineComponent, DamageChangedEvent>(OnDamageChanged);
|
SubscribeLocalEvent<VendingMachineComponent, DamageChangedEvent>(OnDamageChanged);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, PriceCalculationEvent>(OnVendingPrice);
|
SubscribeLocalEvent<VendingMachineComponent, PriceCalculationEvent>(OnVendingPrice);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, EmpPulseEvent>(OnEmpPulse);
|
SubscribeLocalEvent<VendingMachineComponent, EmpPulseEvent>(OnEmpPulse);
|
||||||
|
SubscribeLocalEvent<VendingMachineComponent, TryVocalizeEvent>(OnTryVocalize);
|
||||||
|
|
||||||
SubscribeLocalEvent<VendingMachineComponent, ActivatableUIOpenAttemptEvent>(OnActivatableUIOpenAttempt);
|
SubscribeLocalEvent<VendingMachineComponent, ActivatableUIOpenAttemptEvent>(OnActivatableUIOpenAttempt);
|
||||||
|
|
||||||
@@ -309,5 +311,10 @@ namespace Content.Server.VendingMachines
|
|||||||
component.NextEmpEject = _timing.CurTime;
|
component.NextEmpEject = _timing.CurTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnTryVocalize(Entity<VendingMachineComponent> ent, ref TryVocalizeEvent args)
|
||||||
|
{
|
||||||
|
args.Cancelled |= ent.Comp.Broken;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using Content.Shared.Dataset;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server.Vocalization.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A simple message provider for <see cref="VocalizationSystem"/> that randomly selects
|
||||||
|
/// messages from a <see cref="LocalizedDatasetPrototype"/>.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class DatasetVocalizerComponent : Component
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the <see cref="LocalizedDatasetPrototype"/> that will provide messages.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public ProtoId<LocalizedDatasetPrototype> Dataset;
|
||||||
|
}
|
||||||
@@ -27,4 +27,11 @@ public sealed partial class VocalizerComponent : Component
|
|||||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||||
[AutoPausedField]
|
[AutoPausedField]
|
||||||
public TimeSpan NextVocalizeInterval = TimeSpan.Zero;
|
public TimeSpan NextVocalizeInterval = TimeSpan.Zero;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If true, messages spoken by this vocalizer will not be logged in the chat window
|
||||||
|
/// and will only be shown as speech bubbles.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public bool HideChat;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Content.Server.Vocalization.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used in combination with <see cref="VocalizerComponent"/>.
|
||||||
|
/// Blocks any attempts to vocalize if the entity has an <see cref="ApcPowerReceiverComponent"/>
|
||||||
|
/// and is currently unpowered.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class VocalizerRequiresPowerComponent : Component;
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using Content.Server.Vocalization.Components;
|
||||||
|
using Content.Shared.Random.Helpers;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Random;
|
||||||
|
|
||||||
|
namespace Content.Server.Vocalization.Systems;
|
||||||
|
|
||||||
|
/// <inheritdoc cref="DatasetVocalizerComponent"/>
|
||||||
|
public sealed class DatasetVocalizationSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IPrototypeManager _protoMan = default!;
|
||||||
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<DatasetVocalizerComponent, TryVocalizeEvent>(OnTryVocalize);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTryVocalize(Entity<DatasetVocalizerComponent> ent, ref TryVocalizeEvent args)
|
||||||
|
{
|
||||||
|
if (args.Handled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var dataset = _protoMan.Index(ent.Comp.Dataset);
|
||||||
|
|
||||||
|
args.Message = _random.Pick(dataset);
|
||||||
|
args.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Content.Server.Chat.Systems;
|
using Content.Server.Chat.Systems;
|
||||||
|
using Content.Server.Power.Components;
|
||||||
using Content.Server.Vocalization.Components;
|
using Content.Server.Vocalization.Components;
|
||||||
using Content.Shared.ActionBlocker;
|
using Content.Shared.ActionBlocker;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
@@ -18,6 +19,27 @@ public sealed partial class VocalizationSystem : EntitySystem
|
|||||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<VocalizerComponent, MapInitEvent>(OnMapInit);
|
||||||
|
SubscribeLocalEvent<VocalizerRequiresPowerComponent, TryVocalizeEvent>(OnRequiresPowerTryVocalize);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMapInit(Entity<VocalizerComponent> ent, ref MapInitEvent args)
|
||||||
|
{
|
||||||
|
ent.Comp.NextVocalizeInterval = _random.Next(ent.Comp.MinVocalizeInterval, ent.Comp.MaxVocalizeInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRequiresPowerTryVocalize(Entity<VocalizerRequiresPowerComponent> ent, ref TryVocalizeEvent args)
|
||||||
|
{
|
||||||
|
if (!TryComp<ApcPowerReceiverComponent>(ent, out var receiver))
|
||||||
|
return;
|
||||||
|
|
||||||
|
args.Cancelled |= !receiver.Powered;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Try speaking by raising a TryVocalizeEvent
|
/// Try speaking by raising a TryVocalizeEvent
|
||||||
/// This event is passed to systems adding a message to it and setting it to handled
|
/// This event is passed to systems adding a message to it and setting it to handled
|
||||||
@@ -27,6 +49,10 @@ public sealed partial class VocalizationSystem : EntitySystem
|
|||||||
var tryVocalizeEvent = new TryVocalizeEvent();
|
var tryVocalizeEvent = new TryVocalizeEvent();
|
||||||
RaiseLocalEvent(entity.Owner, ref tryVocalizeEvent);
|
RaiseLocalEvent(entity.Owner, ref tryVocalizeEvent);
|
||||||
|
|
||||||
|
// If the event was cancelled, don't speak
|
||||||
|
if (tryVocalizeEvent.Cancelled)
|
||||||
|
return;
|
||||||
|
|
||||||
// if the event was never handled, return
|
// if the event was never handled, return
|
||||||
// this happens if there are no components that trigger systems to add a message to this event
|
// this happens if there are no components that trigger systems to add a message to this event
|
||||||
if (!tryVocalizeEvent.Handled)
|
if (!tryVocalizeEvent.Handled)
|
||||||
@@ -60,7 +86,7 @@ public sealed partial class VocalizationSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// send the message
|
// send the message
|
||||||
_chat.TrySendInGameICMessage(entity, message, InGameICChatType.Speak, ChatTransmitRange.Normal);
|
_chat.TrySendInGameICMessage(entity, message, InGameICChatType.Speak, entity.Comp.HideChat ? ChatTransmitRange.HideChat : ChatTransmitRange.Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(float frameTime)
|
public override void Update(float frameTime)
|
||||||
@@ -99,7 +125,7 @@ public sealed partial class VocalizationSystem : EntitySystem
|
|||||||
/// <param name="Message">Message to send, this is null when the event is just fired and should be set by a system</param>
|
/// <param name="Message">Message to send, this is null when the event is just fired and should be set by a system</param>
|
||||||
/// <param name="Handled">Whether the message was handled by a system</param>
|
/// <param name="Handled">Whether the message was handled by a system</param>
|
||||||
[ByRefEvent]
|
[ByRefEvent]
|
||||||
public record struct TryVocalizeEvent(string? Message = null, bool Handled = false);
|
public record struct TryVocalizeEvent(string? Message = null, bool Handled = false, bool Cancelled = false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fired when the entity wants to vocalize and has a message. Allows for interception by other systems if the
|
/// Fired when the entity wants to vocalize and has a message. Allows for interception by other systems if the
|
||||||
|
|||||||
@@ -3958,8 +3958,6 @@ entities:
|
|||||||
- type: Transform
|
- type: Transform
|
||||||
pos: 8.5,27.5
|
pos: 8.5,27.5
|
||||||
parent: 2
|
parent: 2
|
||||||
- type: Advertise
|
|
||||||
nextAdvertisementTime: 6277.3942716
|
|
||||||
- proto: WallPlastitaniumDiagonalIndestructible
|
- proto: WallPlastitaniumDiagonalIndestructible
|
||||||
entities:
|
entities:
|
||||||
- uid: 171
|
- uid: 171
|
||||||
|
|||||||
@@ -159,8 +159,9 @@
|
|||||||
interactFailureString: petting-failure-firebot
|
interactFailureString: petting-failure-firebot
|
||||||
interactSuccessSound:
|
interactSuccessSound:
|
||||||
path: /Audio/Ambience/Objects/periodic_beep.ogg
|
path: /Audio/Ambience/Objects/periodic_beep.ogg
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: FirebotAd
|
- type: DatasetVocalizer
|
||||||
|
dataset: FirebotAd
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: MobSiliconBase
|
parent: MobSiliconBase
|
||||||
@@ -355,8 +356,9 @@
|
|||||||
interactFailureString: petting-failure-medibot
|
interactFailureString: petting-failure-medibot
|
||||||
interactSuccessSound:
|
interactSuccessSound:
|
||||||
path: /Audio/Ambience/Objects/periodic_beep.ogg
|
path: /Audio/Ambience/Objects/periodic_beep.ogg
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: MedibotAds
|
- type: DatasetVocalizer
|
||||||
|
dataset: MedibotAds
|
||||||
- type: Inventory
|
- type: Inventory
|
||||||
templateId: medibot
|
templateId: medibot
|
||||||
- type: DoAfter
|
- type: DoAfter
|
||||||
|
|||||||
@@ -170,10 +170,12 @@
|
|||||||
type: WiresBoundUserInterface
|
type: WiresBoundUserInterface
|
||||||
- type: Computer
|
- type: Computer
|
||||||
board: SpaceVillainArcadeComputerCircuitboard
|
board: SpaceVillainArcadeComputerCircuitboard
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: SpaceVillainAds
|
minVocalizeInterval: 1m # Arcades are noisy
|
||||||
minimumWait: 60 # Arcades are noisy
|
maxVocalizeInterval: 4m
|
||||||
maximumWait: 240
|
hideChat: true
|
||||||
|
- type: DatasetVocalizer
|
||||||
|
dataset: SpaceVillainAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: SpaceVillainGoodbyes
|
pack: SpaceVillainGoodbyes
|
||||||
|
|
||||||
@@ -215,9 +217,11 @@
|
|||||||
type: WiresBoundUserInterface
|
type: WiresBoundUserInterface
|
||||||
- type: Computer
|
- type: Computer
|
||||||
board: BlockGameArcadeComputerCircuitboard
|
board: BlockGameArcadeComputerCircuitboard
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: BlockGameAds
|
minVocalizeInterval: 1m # Arcades are noisy
|
||||||
minimumWait: 60 # Arcades are noisy
|
maxVocalizeInterval: 4m
|
||||||
maximumWait: 240
|
hideChat: true
|
||||||
|
- type: DatasetVocalizer
|
||||||
|
dataset: BlockGameAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: BlockGameGoodbyes
|
pack: BlockGameGoodbyes
|
||||||
|
|||||||
@@ -101,8 +101,11 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: Speech
|
- type: Speech
|
||||||
speechVerb: Robotic
|
speechVerb: Robotic
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: FatExtractorFacts
|
hideChat: true
|
||||||
|
- type: VocalizerRequiresPower
|
||||||
|
- type: DatasetVocalizer
|
||||||
|
dataset: FatExtractorFacts
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 1000
|
price: 1000
|
||||||
- type: ResistLocker
|
- type: ResistLocker
|
||||||
|
|||||||
@@ -5,8 +5,11 @@
|
|||||||
description: A refrigerated storage unit for keeping items cold and fresh.
|
description: A refrigerated storage unit for keeping items cold and fresh.
|
||||||
components:
|
components:
|
||||||
- type: StationAiWhitelist
|
- type: StationAiWhitelist
|
||||||
- type: Advertise
|
- type: Vocalizer
|
||||||
pack: SmartFridgeAds
|
hideChat: true
|
||||||
|
- type: VocalizerRequiresPower
|
||||||
|
- type: DatasetVocalizer
|
||||||
|
dataset: SmartFridgeAds
|
||||||
- type: Speech
|
- type: Speech
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
|
|||||||
@@ -73,6 +73,11 @@
|
|||||||
- type: Speech
|
- type: Speech
|
||||||
speechVerb: Robotic
|
speechVerb: Robotic
|
||||||
speechSounds: Vending
|
speechSounds: Vending
|
||||||
|
- type: Vocalizer
|
||||||
|
minVocalizeInterval: 8m
|
||||||
|
maxVocalizeInterval: 10m
|
||||||
|
hideChat: true
|
||||||
|
- type: VocalizerRequiresPower
|
||||||
- type: SpookySpeaker
|
- type: SpookySpeaker
|
||||||
messageSet: SpookySpeakerMessagesGeneric
|
messageSet: SpookySpeakerMessagesGeneric
|
||||||
speakChance: 0.2
|
speakChance: 0.2
|
||||||
@@ -126,8 +131,8 @@
|
|||||||
layer:
|
layer:
|
||||||
- MachineLayer
|
- MachineLayer
|
||||||
density: 190
|
density: 190
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: CondimentVendAds
|
dataset: CondimentVendAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Transform
|
- type: Transform
|
||||||
@@ -144,8 +149,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: AmmoVendAds
|
dataset: CondimentVendAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -172,8 +177,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
loopDeny: false
|
loopDeny: false
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: BoozeOMatAds
|
dataset: BoozeOMatAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: BoozeOMatGoodbyes
|
pack: BoozeOMatGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -206,8 +211,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
loopDeny: false
|
loopDeny: false
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: BruiseOMatAds
|
dataset: BruiseOMatAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: BruiseOMatGoodbyes
|
pack: BruiseOMatGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -269,8 +274,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ChefvendAds
|
dataset: ChefvendAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: ChefvendGoodbyes
|
pack: ChefvendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -305,8 +310,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: CigaretteMachineAds
|
dataset: CigaretteMachineAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: CigaretteMachineGoodbyes
|
pack: CigaretteMachineGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -332,8 +337,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ClothesMateAds
|
dataset: ClothesMateAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -363,8 +368,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ClothesMateAds
|
dataset: ClothesMateAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -401,8 +406,8 @@
|
|||||||
ejectDelay: 5
|
ejectDelay: 5
|
||||||
soundVend: /Audio/Machines/machine_vend_hot_drink.ogg
|
soundVend: /Audio/Machines/machine_vend_hot_drink.ogg
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: HotDrinksMachineAds
|
dataset: HotDrinksMachineAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: HotDrinksMachineGoodbyes
|
pack: HotDrinksMachineGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -440,8 +445,8 @@
|
|||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 1.9
|
ejectDelay: 1.9
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: RobustSoftdrinksAds
|
dataset: RobustSoftdrinksAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: RobustSoftdrinksGoodbyes
|
pack: RobustSoftdrinksGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -585,8 +590,8 @@
|
|||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 1.9
|
ejectDelay: 1.9
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: RobustSoftdrinksAds
|
dataset: RobustSoftdrinksAds
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Structures/Machines/VendingMachines/shamblersjuice.rsi
|
sprite: Structures/Machines/VendingMachines/shamblersjuice.rsi
|
||||||
layers:
|
layers:
|
||||||
@@ -619,8 +624,8 @@
|
|||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 1.9
|
ejectDelay: 1.9
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: RobustSoftdrinksAds
|
dataset: RobustSoftdrinksAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -655,8 +660,8 @@
|
|||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 1.9
|
ejectDelay: 1.9
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: DrGibbAds
|
dataset: DrGibbAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: DrGibbGoodbyes
|
pack: DrGibbGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -701,8 +706,8 @@
|
|||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 1.9
|
ejectDelay: 1.9
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: SmiteAds
|
dataset: SmiteAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: SmiteGoodbyes
|
pack: SmiteGoodbyes
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
@@ -722,8 +727,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: DinnerwareAds
|
dataset: DinnerwareAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -754,8 +759,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: MagiVendAds
|
dataset: MagiVendAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -787,8 +792,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: DiscountDansAds
|
dataset: DiscountDansAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: DiscountDansGoodbyes
|
pack: DiscountDansGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -850,8 +855,8 @@
|
|||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
ejectDelay: 0.6
|
ejectDelay: 0.6
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: NanoMedAds
|
dataset: NanoMedAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -887,8 +892,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: NutriMaxAds
|
dataset: NutriMaxAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: NutriMaxGoodbyes
|
pack: NutriMaxGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -921,8 +926,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: SecTechAds
|
dataset: SecTechAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: SecTechGoodbyes
|
pack: SecTechGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -960,8 +965,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: MegaSeedAds
|
dataset: MegaSeedAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1003,8 +1008,8 @@
|
|||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: GetmoreChocolateCorpAds
|
dataset: GetmoreChocolateCorpAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GetmoreChocolateCorpGoodbyes
|
pack: GetmoreChocolateCorpGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1148,8 +1153,8 @@
|
|||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: BodaAds
|
dataset: BodaAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: BodaGoodbyes
|
pack: BodaGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1182,8 +1187,8 @@
|
|||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
screenState: screen
|
screenState: screen
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: AutoDrobeAds
|
dataset: AutoDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1217,8 +1222,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: VendomatAds
|
dataset: VendomatAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1249,8 +1254,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
denyState: deny-unshaded
|
denyState: deny-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: VendomatAds
|
dataset: VendomatAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1314,8 +1319,8 @@
|
|||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
ejectState: eject-unshaded
|
ejectState: eject-unshaded
|
||||||
ejectDelay: 1.8
|
ejectDelay: 1.8
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: GoodCleanFunAds
|
dataset: GoodCleanFunAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GoodCleanFunGoodbyes
|
pack: GoodCleanFunGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1347,8 +1352,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ChangAds
|
dataset: ChangAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: ChangGoodbyes
|
pack: ChangGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1412,8 +1417,8 @@
|
|||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
initialStockQuality: 0.33
|
initialStockQuality: 0.33
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: DonutAds
|
dataset: DonutAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: DonutGoodbyes
|
pack: DonutGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1497,8 +1502,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: HyDrobeAds
|
dataset: HyDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1529,8 +1534,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: LawDrobeAds
|
dataset: LawDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: LawDrobeGoodbyes
|
pack: LawDrobeGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1557,8 +1562,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: SecDrobeAds
|
dataset: SecDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1589,8 +1594,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: BarDrobeAds
|
dataset: BarDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1645,8 +1650,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: CargoDrobeAds
|
dataset: CargoDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1677,8 +1682,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: MediDrobeAds
|
dataset: MediDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1705,8 +1710,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ChemDrobeAds
|
dataset: ChemDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1733,8 +1738,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: CuraDrobeAds
|
dataset: CuraDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1761,8 +1766,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: AtmosDrobeAds
|
dataset: AtmosDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1793,8 +1798,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: EngiDrobeAds
|
dataset: EngiDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1825,8 +1830,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ChefDrobeAds
|
dataset: ChefDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1853,8 +1858,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: DetDrobeAds
|
dataset: DetDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1881,8 +1886,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: JaniDrobeAds
|
dataset: JaniDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1913,8 +1918,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: SciDrobeAds
|
dataset: SciDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1941,8 +1946,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: SyndieDrobeAds
|
dataset: SyndieDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: SyndieDrobeGoodbyes
|
pack: SyndieDrobeGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -1973,8 +1978,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: RoboDrobeAds
|
dataset: RoboDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -2001,8 +2006,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: GeneDrobeAds
|
dataset: GeneDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -2029,8 +2034,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: ViroDrobeAds
|
dataset: ViroDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: GenericVendGoodbyes
|
pack: GenericVendGoodbyes
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -2105,8 +2110,8 @@
|
|||||||
radius: 1.5
|
radius: 1.5
|
||||||
energy: 1.6
|
energy: 1.6
|
||||||
color: "#3c5eb5"
|
color: "#3c5eb5"
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: HappyHonkAds
|
dataset: HappyHonkAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: HappyHonkGoodbyes
|
pack: HappyHonkGoodbyes
|
||||||
- type: AccessReader
|
- type: AccessReader
|
||||||
@@ -2125,8 +2130,8 @@
|
|||||||
offState: off
|
offState: off
|
||||||
brokenState: broken
|
brokenState: broken
|
||||||
normalState: normal-unshaded
|
normalState: normal-unshaded
|
||||||
- type: Advertise
|
- type: DatasetVocalizer
|
||||||
pack: PrideDrobeAds
|
dataset: PrideDrobeAds
|
||||||
- type: SpeakOnUIClosed
|
- type: SpeakOnUIClosed
|
||||||
pack: PrideDrobeGoodbyes
|
pack: PrideDrobeGoodbyes
|
||||||
- type: Speech
|
- type: Speech
|
||||||
|
|||||||
Reference in New Issue
Block a user