private void cmdWeatherServer(IServerPlayer player, int groupId, CmdArgs args) { WeatherSystemServer wsysServer = sapi.ModLoader.GetModSystem <WeatherSystemServer>(); int regionX = (int)player.Entity.Pos.X / sapi.World.BlockAccessor.RegionSize; int regionZ = (int)player.Entity.Pos.Z / sapi.World.BlockAccessor.RegionSize; string arg = args.PopWord(); if (arg == "setprecip") { if (args.Length == 0) { if (wsysServer.OverridePrecipitation == null) { player.SendMessage(groupId, "Currently no precipitation override active.", EnumChatType.CommandSuccess); } else { player.SendMessage(groupId, string.Format("Override precipitation value is currently at {0}.", wsysServer.OverridePrecipitation), EnumChatType.CommandSuccess); } return; } string val = args.PopWord(); if (val == "auto") { wsysServer.OverridePrecipitation = null; player.SendMessage(groupId, "Ok auto precipitation on", EnumChatType.CommandSuccess); } else { float level = val.ToFloat(0); wsysServer.OverridePrecipitation = level; player.SendMessage(groupId, string.Format("Ok precipitation set to {0}", level), EnumChatType.CommandSuccess); } wsysServer.serverChannel.BroadcastPacket(new WeatherConfigPacket() { OverridePrecipitation = wsysServer.OverridePrecipitation, RainCloudDaysOffset = wsysServer.RainCloudDaysOffset }); return; } if (arg == "cloudypos" || arg == "cyp") { if (args.Length == 0) { player.SendMessage(groupId, "Cloud level rel = " + wsysServer.CloudLevelRel, EnumChatType.CommandSuccess); return; } wsysServer.CloudLevelRel = (float)args.PopDouble(0.95f); wsysServer.serverChannel.BroadcastPacket(new WeatherCloudYposPacket() { CloudYRel = wsysServer.CloudLevelRel }); player.SendMessage(groupId, string.Format("Cloud level rel {0:0.##} set. (y={1})", wsysServer.CloudLevelRel, (int)(wsysServer.CloudLevelRel * wsysServer.api.World.BlockAccessor.MapSizeY)), EnumChatType.CommandSuccess); return; } if (arg == "stoprain") { rainStopFunc(player, groupId, true); wsysServer.broadCastConfigUpdate(); return; } if (arg == "acp") { wsysServer.autoChangePatterns = !wsysServer.autoChangePatterns; player.SendMessage(groupId, "Ok autochange weather patterns now " + (wsysServer.autoChangePatterns ? "on" : "off"), EnumChatType.CommandSuccess); return; } if (arg == "lp") { string patterns = string.Join(", ", wsysServer.WeatherConfigs.Select(c => c.Code)); player.SendMessage(groupId, "Patterns: " + patterns, EnumChatType.CommandSuccess); return; } if (arg == "t") { foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.TriggerTransition(); } player.SendMessage(groupId, "Ok transitioning to another weather pattern", EnumChatType.CommandSuccess); return; } if (arg == "c") { foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.TriggerTransition(1f); } player.SendMessage(groupId, "Ok selected another weather pattern", EnumChatType.CommandSuccess); return; } if (arg == "setw") { wsysServer.ReloadConfigs(); string code = args.PopWord(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.ReloadPatterns(api.World.Seed); ok &= val.Value.SetWindPattern(code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such wind pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok wind pattern set", EnumChatType.CommandSuccess); } return; } if (arg == "setev" || arg == "setevr" || arg == "setevf") { wsysServer.ReloadConfigs(); string code = args.PopWord(); WeatherSimulationRegion weatherSim; if (arg == "setevr") { long index2d = wsysServer.MapRegionIndex2D(regionX, regionZ); wsysServer.weatherSimByMapRegion.TryGetValue(index2d, out weatherSim); if (weatherSim == null) { player.SendMessage(groupId, "Weather sim not loaded (yet) for this region", EnumChatType.CommandError); return; } if (weatherSim.SetWeatherEvent(code, true)) { weatherSim.CurWeatherEvent.AllowStop = arg != "setevf"; weatherSim.CurWeatherEvent.OnBeginUse(); weatherSim.TickEvery25ms(0.025f); player.SendMessage(groupId, "Ok weather event for this region set", EnumChatType.CommandSuccess); } else { player.SendMessage(groupId, "No such weather event found", EnumChatType.CommandError); } } else { bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { ok &= val.Value.SetWeatherEvent(code, true); val.Value.CurWeatherEvent.AllowStop = arg != "setevf"; if (ok) { val.Value.CurWeatherEvent.OnBeginUse(); val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such weather event found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok weather event set for all loaded regions", EnumChatType.CommandSuccess); } } return; } if (arg == "set" || arg == "seti") { wsysServer.ReloadConfigs(); string code = args.PopWord(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.ReloadPatterns(api.World.Seed); ok &= val.Value.SetWeatherPattern(code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok weather pattern set for all loaded regions", EnumChatType.CommandSuccess); } return; } if (arg == "setirandom") { wsysServer.ReloadConfigs(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { ok &= val.Value.SetWeatherPattern(val.Value.RandomWeatherPattern().config.Code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok random weather pattern set", EnumChatType.CommandSuccess); } return; } if (arg == "setir") { wsysServer.ReloadConfigs(); string code = args.PopWord(); WeatherSimulationRegion weatherSim; long index2d = wsysServer.MapRegionIndex2D(regionX, regionZ); wsysServer.weatherSimByMapRegion.TryGetValue(index2d, out weatherSim); if (weatherSim == null) { player.SendMessage(groupId, "Weather sim not loaded (yet) for this region", EnumChatType.CommandError); return; } if (weatherSim.SetWeatherPattern(code, true)) { weatherSim.TickEvery25ms(0.025f); player.SendMessage(groupId, "Ok weather pattern set for current region", EnumChatType.CommandSuccess); } else { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } return; } string text = getWeatherInfo <WeatherSystemServer>(player); player.SendMessage(groupId, text, EnumChatType.CommandSuccess); }
private void cmdWeatherServer(IServerPlayer player, int groupId, CmdArgs args) { WeatherSystemServer wsysServer = sapi.ModLoader.GetModSystem <WeatherSystemServer>(); int regionX = (int)player.Entity.Pos.X / sapi.World.BlockAccessor.RegionSize; int regionZ = (int)player.Entity.Pos.Z / sapi.World.BlockAccessor.RegionSize; string arg = args.PopWord(); if (arg == "acp") { wsysServer.autoChangePatterns = !wsysServer.autoChangePatterns; player.SendMessage(groupId, "Ok autochange weather patterns now " + (wsysServer.autoChangePatterns ? "on" : "off"), EnumChatType.CommandSuccess); return; } if (arg == "lp") { string patterns = string.Join(", ", wsysServer.weatherConfigs.Select(c => c.Code)); player.SendMessage(groupId, "Patterns: " + patterns, EnumChatType.CommandSuccess); return; } if (arg == "t") { foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.TriggerTransition(); } player.SendMessage(groupId, "Ok transitioning to another weather pattern", EnumChatType.CommandSuccess); return; } if (arg == "c") { foreach (var val in wsysServer.weatherSimByMapRegion) { val.Value.TriggerTransition(1f); } player.SendMessage(groupId, "Ok selected another weather pattern", EnumChatType.CommandSuccess); return; } if (arg == "setw") { wsysServer.ReloadConfigs(); string code = args.PopWord(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { ok &= val.Value.SetWindPattern(code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such wind pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok wind pattern set", EnumChatType.CommandSuccess); } return; } if (arg == "set" || arg == "seti") { wsysServer.ReloadConfigs(); string code = args.PopWord(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { ok &= val.Value.SetWeatherPattern(code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok weather pattern set", EnumChatType.CommandSuccess); } return; } if (arg == "setirandom") { wsysServer.ReloadConfigs(); bool ok = true; foreach (var val in wsysServer.weatherSimByMapRegion) { ok &= val.Value.SetWeatherPattern(val.Value.RandomWeatherPattern().config.Code, true); if (ok) { val.Value.TickEvery25ms(0.025f); } } if (!ok) { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } else { player.SendMessage(groupId, "Ok weather pattern set", EnumChatType.CommandSuccess); } return; } if (arg == "setir") { wsysServer.ReloadConfigs(); string code = args.PopWord(); WeatherSimulationRegion weatherSim; long index2d = wsysServer.MapRegionIndex2D(regionX, regionZ); wsysServer.weatherSimByMapRegion.TryGetValue(index2d, out weatherSim); if (weatherSim == null) { player.SendMessage(groupId, "Weather sim not loaded (yet) for this region", EnumChatType.CommandError); return; } if (weatherSim.SetWeatherPattern(code, true)) { weatherSim.TickEvery25ms(0.025f); player.SendMessage(groupId, "Ok weather pattern set", EnumChatType.CommandSuccess); } else { player.SendMessage(groupId, "No such weather pattern found", EnumChatType.CommandError); } return; } string text = getWeatherInfo <WeatherSystemServer>(player); player.SendMessage(groupId, text, EnumChatType.CommandSuccess); }