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)); }
/// <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)); }
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); } } }