Esempio n. 1
0
    private void OnActivate(EntityUid uid, SpawnArtifactComponent component, ArtifactActivatedEvent args)
    {
        if (component.Prototype == null)
        {
            return;
        }
        if (component.SpawnsCount >= component.MaxSpawns)
        {
            return;
        }

        // select spawn position near artifact
        var artifactCord = Transform(uid).Coordinates;
        var dx           = _random.NextFloat(-component.Range, component.Range);
        var dy           = _random.NextFloat(-component.Range, component.Range);
        var spawnCord    = artifactCord.Offset(new Vector2(dx, dy));

        // spawn entity
        var spawned = EntityManager.SpawnEntity(component.Prototype, spawnCord);

        component.SpawnsCount++;

        // if there is an user - try to put spawned item in their hands
        // doesn't work for spawners
        if (args.Activator != null &&
            EntityManager.TryGetComponent(args.Activator.Value, out SharedHandsComponent? hands) &&
            EntityManager.HasComponent <ItemComponent>(spawned))
        {
            hands.TryPutInAnyHand(spawned);
        }
    }
Esempio n. 2
0
    private void OnActivate(EntityUid uid, GasArtifactComponent component, ArtifactActivatedEvent args)
    {
        if (component.SpawnGas == null || component.SpawnTemperature == null)
        {
            return;
        }

        var transform = Transform(uid);

        var environment = _atmosphereSystem.GetContainingMixture(uid, false, true);

        if (environment == null)
        {
            return;
        }

        if (environment.Pressure >= component.MaxExternalPressure)
        {
            return;
        }

        var merger = new GasMixture(1)
        {
            Temperature = component.SpawnTemperature.Value
        };

        merger.SetMoles(component.SpawnGas.Value, component.SpawnAmount);

        _atmosphereSystem.Merge(environment, merger);
    }
        /// <summary>
        /// When activated, blasts everyone in LOS within n tiles
        /// with a high-probability disease infection attempt
        /// </summary>
        private void OnActivate(EntityUid uid, DiseaseArtifactComponent component, ArtifactActivatedEvent args)
        {
            if (component.SpawnDisease == null)
            {
                return;
            }

            var xform        = Transform(uid);
            var carrierQuery = GetEntityQuery <DiseaseCarrierComponent>();

            foreach (var entity in _lookup.GetEntitiesInRange(xform.Coordinates, component.Range))
            {
                if (!carrierQuery.TryGetComponent(entity, out var carrier))
                {
                    continue;
                }

                if (!_interactionSystem.InRangeUnobstructed(uid, entity, component.Range))
                {
                    continue;
                }

                _disease.TryInfect(carrier, component.SpawnDisease, forced: true);
            }
        }
    private void OnActivate(EntityUid uid, SpawnArtifactComponent component, ArtifactActivatedEvent args)
    {
        if (component.Prototype == null)
        {
            return;
        }
        if (component.SpawnsCount >= component.MaxSpawns)
        {
            return;
        }

        // select spawn position near artifact
        var artifactCord = Transform(uid).Coordinates;
        var dx           = _random.NextFloat(-component.Range, component.Range);
        var dy           = _random.NextFloat(-component.Range, component.Range);
        var spawnCord    = artifactCord.Offset(new Vector2(dx, dy));

        // spawn entity
        var spawned = EntityManager.SpawnEntity(component.Prototype, spawnCord);

        component.SpawnsCount++;

        // if there is an user - try to put spawned item in their hands
        // doesn't work for spawners
        _handsSystem.PickupOrDrop(args.Activator, spawned);
    }
Esempio n. 5
0
    private void OnActivated(EntityUid uid, RandomArtifactSpriteComponent component, ArtifactActivatedEvent args)
    {
        if (!TryComp(uid, out AppearanceComponent? appearance))
        {
            return;
        }

        appearance.SetData(SharedArtifactsVisuals.IsActivated, true);
        component.ActivationStart = _time.CurTime;
    }
    private void OnActivate(EntityUid uid, RadiateArtifactComponent component, ArtifactActivatedEvent args)
    {
        var transform = Transform(uid);

        var pulseUid = EntityManager.SpawnEntity(component.PulsePrototype, transform.Coordinates);

        if (!TryComp(pulseUid, out RadiationPulseComponent? pulse))
        {
            return;
        }

        pulse.DoPulse();
    }
    public void ForceActivateArtifact(EntityUid uid, EntityUid?user = null,
                                      ArtifactComponent?component   = null)
    {
        if (!Resolve(uid, ref component))
        {
            return;
        }

        component.LastActivationTime = _gameTiming.CurTime;

        var ev = new ArtifactActivatedEvent()
        {
            Activator = user
        };

        RaiseLocalEvent(uid, ev);
    }
        /// <summary>
        /// When activated, blasts everyone in LOS within 3 tiles
        /// with a high-probability disease infection attempt
        /// </summary>
        private void OnActivate(EntityUid uid, DiseaseArtifactComponent component, ArtifactActivatedEvent args)
        {
            var xform = Transform(uid);

            foreach (var entity in _lookup.GetEntitiesInRange(xform.MapID, xform.WorldPosition, 3f))
            {
                if (!_interactionSystem.InRangeUnobstructed(uid, entity, 3f))
                {
                    continue;
                }

                if (TryComp <DiseaseCarrierComponent>(entity, out var carrier))
                {
                    EntitySystem.Get <DiseaseSystem>().TryInfect(carrier, component.ResolveDisease);
                }
            }
        }
Esempio n. 9
0
    private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args)
    {
        var transform = Transform(uid);

        var center = _atmosphereSystem.GetTileMixture(transform.Coordinates, true);

        if (center == null)
        {
            return;
        }
        UpdateTileTemperature(component, center);

        if (component.EffectAdjacentTiles)
        {
            var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.Coordinates, invalidate: true);
            foreach (var mixture in adjacent)
            {
                UpdateTileTemperature(component, mixture);
            }
        }
    }
    private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args)
    {
        var transform = Transform(uid);

        var center = _atmosphereSystem.GetContainingMixture(uid, false, true);

        if (center == null)
        {
            return;
        }
        UpdateTileTemperature(component, center);

        if (component.EffectAdjacentTiles && transform.GridUid != null)
        {
            var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.GridUid.Value,
                                                                     _transformSystem.GetGridOrMapTilePosition(uid, transform), excite: true);

            foreach (var mixture in adjacent)
            {
                UpdateTileTemperature(component, mixture);
            }
        }
    }
Esempio n. 11
0
    private void OnActivate(EntityUid uid, TelepathicArtifactComponent component, ArtifactActivatedEvent args)
    {
        // try to find victims nearby
        var victims = _lookup.GetEntitiesInRange(uid, component.Range);

        foreach (var victimUid in victims)
        {
            if (!EntityManager.HasComponent <ActorComponent>(victimUid))
            {
                continue;
            }

            // roll if msg should be usual or drastic
            var isDrastic = _random.NextFloat() <= component.DrasticMessageProb;
            var msgArr    = isDrastic ? component.DrasticMessages : component.Messages;

            // pick a random message
            var msgId = _random.Pick(msgArr);
            var msg   = Loc.GetString(msgId);

            // show it as a popup, but only for the victim
            _popupSystem.PopupEntity(msg, victimUid, Filter.Entities(victimUid));
        }
    }