void OnDeath(ICoreServerAPI api, IServerPlayer p) { SetPermaDeath(api.WorldManager.SaveGame, @p.PlayerUID); //Small delay to prevent interfering with server updating api.Event.EnqueueMainThreadTask(() => p.Disconnect("You've died"), ""); api.BroadcastMessageToAllGroups("The life of " + p.ServerData.LastKnownPlayername.ToUpper() + " has been extinguished.", EnumChatType.Notification); }
public override void Run() { // TODO: Modify messages by placeholders like {PlayersOnlineCount} if (_api.World.AllOnlinePlayers.Length < _minPlayersCountToPost) { return; } var message = _messages.GetRandomItem(); _api.BroadcastMessageToAllGroups($"{_prefix}{message}", EnumChatType.AllGroups); }
private void onTempStormTick(float dt) { if (config == null) { return; } if (!stormsEnabled) { data.stormGlitchStrength = 0; data.nowStormActive = false; return; } if (data.nowStormActive) { trySpawnDrifters(); } double nextStormDaysLeft = data.nextStormTotalDays - api.World.Calendar.TotalDays; if (nextStormDaysLeft > 0.03 && nextStormDaysLeft < 0.35 && data.stormDayNotify > 1) { data.stormDayNotify = 1; sapi.BroadcastMessageToAllGroups(texts[data.nextStormStrength].Approaching, EnumChatType.Notification); } if (nextStormDaysLeft <= 0.02 && data.stormDayNotify > 0) { data.stormDayNotify = 0; sapi.BroadcastMessageToAllGroups(texts[data.nextStormStrength].Imminent, EnumChatType.Notification); } if (nextStormDaysLeft <= 0) { float tempstormDurationMul = api.World.Config.GetFloat("tempstormDurationMul", 1); double stormActiveDays = (0.1f + data.nextStormStrDouble * 0.1f) * tempstormDurationMul; // Happens when time is fast forwarded if (!data.nowStormActive && nextStormDaysLeft + stormActiveDays < 0) { prepareNextStorm(); serverChannel.BroadcastPacket(data); return; } if (!data.nowStormActive) { data.stormActiveTotalDays = api.World.Calendar.TotalDays + stormActiveDays; data.stormGlitchStrength = 0.53f + (float)api.World.Rand.NextDouble() / 10; if (data.nextStormStrength == EnumTempStormStrength.Medium) { data.stormGlitchStrength = 0.67f + (float)api.World.Rand.NextDouble() / 10; } if (data.nextStormStrength == EnumTempStormStrength.Heavy) { data.stormGlitchStrength = 0.9f + (float)api.World.Rand.NextDouble() / 10; } data.nowStormActive = true; serverChannel.BroadcastPacket(data); var list = (api.World as IServerWorldAccessor).LoadedEntities.Values; foreach (var e in list) { if (e.Code.Path.Contains("drifter")) { e.Attributes.SetBool("ignoreDaylightFlee", true); } } } double activeDaysLeft = data.stormActiveTotalDays - api.World.Calendar.TotalDays; if (activeDaysLeft < 0.02 && data.stormDayNotify == 0) { data.stormDayNotify = -1; sapi.BroadcastMessageToAllGroups(texts[data.nextStormStrength].Waning, EnumChatType.Notification); } if (activeDaysLeft < 0) { data.stormGlitchStrength = 0; data.nowStormActive = false; data.stormDayNotify = 99; prepareNextStorm(); serverChannel.BroadcastPacket(data); var list = (api.World as IServerWorldAccessor).LoadedEntities.Values; foreach (var e in list) { if (e.Code.Path.Contains("drifter")) { e.Attributes.RemoveAttribute("ignoreDaylightFlee"); if (api.World.Rand.NextDouble() < 0.5) { sapi.World.DespawnEntity(e, new EntityDespawnReason() { reason = EnumDespawnReason.Expire }); } } } } } }