Ejemplo n.º 1
0
        protected override void OnSummonSuccess(IZone zone, Player[] summoners)
        {
            const int beamDistance = 600; //messzirol latszik

            foreach (var summoner in summoners)
            {
                summoner.ApplyPvPEffect();
            }

            //warning gfx beam
            //ojan beam ami egy ideig csak pulzal, ezalatt lehet elrohanni
            zone.CreateBeam(BeamType.timebomb_activation, builder => builder.WithPosition(CurrentPosition).WithVisibility(beamDistance).WithDuration(100));

            Task.Delay(ED.Config.ActionDelay).ContinueWith(t =>
            {
                //explosion gfx beam
                zone.CreateBeam(BeamType.timebomb_explosion, builder => builder.WithPosition(CurrentPosition)
                                .WithState(BeamState.Hit)
                                .WithVisibility(beamDistance)
                                .WithDuration(15000));

                var damageBuilder = DamageInfo.Builder.WithAttacker(this)
                                    .WithDamage(DamageType.Chemical, ED.Config.damage_chemical ?? 0.0)
                                    .WithDamage(DamageType.Explosive, ED.Config.damage_explosive ?? 0.0)
                                    .WithDamage(DamageType.Kinetic, ED.Config.damage_kinetic ?? 0.0)
                                    .WithDamage(DamageType.Thermal, ED.Config.damage_thermal ?? 0.0)
                                    .WithOptimalRange(2)
                                    .WithFalloff(ED.Config.item_work_range ?? 0.0)
                                    .WithExplosionRadius(ED.Config.explosion_radius ?? 0.0);

                zone.DoAoeDamageAsync(damageBuilder);
            });
        }
        public static void UpdateNatureCube(this IZone zone, Area area, Action <NatureCube> updater)
        {
            var cube = new NatureCube(zone, area);

            cube.Check();

            var snapshot = cube.Clone();

            snapshot.Check();

            updater(snapshot);
            snapshot.Check();

            if (cube.Equals(snapshot))
            {
                return;
            }

            snapshot.Commit();

            var builder = Beam.NewBuilder().WithType(BeamType.nature_effect).WithDuration(8000);

            Task.Delay(40).ContinueWith(t => zone.CreateBeam(builder.WithPosition(area.GetRandomPosition())));
            Task.Delay(1500).ContinueWith(t => zone.CreateBeam(builder.WithPosition(area.GetRandomPosition())));
            Task.Delay(2500).ContinueWith(t => zone.CreateBeams(2, () => builder.WithPosition(area.GetRandomPosition())));
        }
 public static void CreateBeams(this IZone zone, int count, Func <IBeamBuilder> builderFactory)
 {
     for (var i = 0; i < count; i++)
     {
         var builder = builderFactory();
         zone.CreateBeam(builder);
     }
 }
        public static void CreateDebugBeam(this IZone zone, BeamType beamType, Position position)
        {
            if (zone == null)
            {
                return;
            }

            var builder = Beam.NewBuilder().WithType(beamType).WithPosition(position).WithState(BeamState.Hit).WithDuration(15000);

            zone.CreateBeam(builder);
        }
        public static void CreateBeam(this IZone zone, BeamType type, Action <BeamBuilder> builderAction)
        {
            if (type == BeamType.undefined || type == default(BeamType))
            {
                return;
            }

            var builder = Beam.NewBuilder().WithType(type);

            builderAction(builder);
            zone.CreateBeam(builder);
        }
        private void PutPlantOrThrow(IZone zone, int x, int y)
        {
            IsPositionValidForPlantingOrThrow(zone, x, y, _targetPlantType);

            if (_targetPlantType == PlantType.NotDefined)
            {
                return;
            }

            using (new TerrainUpdateMonitor(zone))
            {
                zone.Terrain.PutPlant(x, y, 0, _targetPlantType, _plantRule);
            }

            zone.CreateBeam(BeamType.seeddeploy, builder => builder.WithPosition(new Position(x + 0.5, y + 0.5)).WithDuration(5000));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Spawn npc on regular artifact's position. This part is completely independent from missions.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="artifact"></param>
        private void SpawnNpcs(Player player, Artifact artifact)
        {
            //do the standard stuff if the presence is set
            if (artifact.Info.npcPresenceId == null)
            {
                return;
            }

            var presence = _zone.AddDynamicPresenceToPosition((int)artifact.Info.npcPresenceId, artifact.Position);

            foreach (var npc in presence.Flocks.GetMembers())
            {
                var duration = artifact.Info.isPersistent ? TimeSpan.FromMinutes(5) : //sima artifactban rovid idore
                               TimeSpan.FromHours(1);                                 //mission presence-ben hosszu idore vannak taggelve

                npc.Tag(player, duration);
                npc.AddDirectThreat(player, 40 + FastRandom.NextDouble(0.0, 3.0));
            }

            _zone.CreateBeam(BeamType.teleport_storm, b => b.WithPosition(artifact.Position).WithDuration(TimeSpan.FromSeconds(100)));
        }
        private void SendAffectedPositions()
        {
            var affectedTiles = new Dictionary <Point, TerraformType>();

            AffectedTile tile;

            while (_affectedTiles.TryTake(out tile))
            {
                affectedTiles[new Point(tile.x, tile.y)] = tile.Type;
            }

            foreach (var pair in affectedTiles)
            {
                var opType   = pair.Value;
                var position = pair.Key;

                var builder = Beam.NewBuilder().WithDuration(5000).WithState(BeamState.AlignToTerrain).WithPosition(position.ToPosition().Center);

                switch (opType)
                {
                case TerraformType.Blur:
                    builder.WithType(BeamType.red_10sec);
                    break;

                case TerraformType.Level:
                    builder.WithType(BeamType.green_10sec);
                    break;

                case TerraformType.Simple:
                    builder.WithType(BeamType.blue_10sec);
                    break;
                }

                _zone.CreateBeam(builder);
            }
        }
 public static void CreateAlignedDebugBeam(this IZone zone, BeamType beamType, Position position)
 {
     zone?.CreateBeam(beamType, builder => builder.WithPosition(zone.FixZ(position)).WithState(BeamState.AlignToTerrain).WithDuration(15000));
 }
Ejemplo n.º 10
0
        private void DoSummon(IZone zone)
        {
            Logger.Info("DoSummon starts on zone:" + zone.Id + " " + this);
            if (DeployerPlayer == null)
            {
                Logger.Error("no deployer player " + this);
                return;
            }

            var corporation = DeployerPlayer.Character.GetPrivateCorporation();

            if (corporation == null)
            {
                Logger.Error("no private corporation was found. Deployer character: " + DeployerPlayer.Character);
                DeployerPlayer.Character.SendErrorMessage(new Command("pbsDeployItem"), ErrorCodes.PrivateCorporationAllowedOnly);
                return;
            }

            var            centerTile = CurrentPosition.Center;
            PBSDockingBase dockingBase;

            using (var scope = Db.CreateTransaction())
            {
                try
                {
                    var deployableItem = (Unit)_entityServices.Factory.CreateWithRandomEID(TargetPBSNodeDefault);
                    var zoneStorage    = zone.Configuration.GetStorage();

                    zoneStorage.AddChild(deployableItem);
                    SetStartCore(deployableItem);

                    dockingBase = deployableItem as PBSDockingBase;
                    if (dockingBase != null)
                    {
                        PBSHelper.CreatePBSDockingBase(dockingBase);
                    }

                    deployableItem.Owner           = corporation.Eid;
                    deployableItem.Orientation     = FastRandom.NextInt(0, 3) * 0.25;
                    deployableItem.CurrentPosition = CurrentPosition.Center;

                    if (deployableItem is PBSTurret turret)
                    {
                        // csak a turret kell, gyerekek nem
                        Repository.Insert(turret);
                    }
                    else
                    {
                        // itt mindent insertalunk
                        deployableItem.Save();
                    }

                    Logger.Info("node saved to sql " + deployableItem);

                    Logger.Info("pbs insert start in zoneuser entities: " + deployableItem);
                    zone.UnitService.AddUserUnit(deployableItem, centerTile);

                    Logger.Info("pbs log starting " + deployableItem);
                    PBSHelper.WritePBSLog(PBSLogType.deployed, deployableItem.Eid, deployableItem.Definition, deployableItem.Owner, DeployerPlayer.Character.Id, background: false, zoneId: zone.Id);

                    Transaction.Current.OnCompleted((completed) =>
                    {
                        if (!completed)
                        {
                            Logger.Error("DoSummon rollback " + this);
                            return;
                        }

                        Logger.Info("starting zone enter: " + deployableItem);
                        deployableItem.AddToZone(zone, centerTile);
                        Logger.Info("added to zone " + deployableItem);

                        dockingBase?.OnDockingBaseDeployed();

                        //draw terrain stuff
                        PBSHelper.OnPBSObjectDeployed(zone, deployableItem, true, true, true);
                        Logger.Info("terrain stuff done, sending update. " + deployableItem);

                        //send update
                        ((IPBSObject)deployableItem).SendNodeUpdate();

                        zone.CreateBeam(BeamType.red_20sec,
                                        builder =>
                                        builder.WithPosition(CurrentPosition.Center)
                                        .WithState(BeamState.Hit)
                                        .WithDuration(15000));

                        Logger.Info("pbs node successfully deployed.");
                        _successfulSummon = true;
                    });

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    Logger.Exception(ex);
                }
            }
        }