package admincommands; import org.apache.commons.lang3.math.NumberUtils; import com.aionemu.gameserver.dataholders.DataManager; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.templates.world.WeatherEntry; import com.aionemu.gameserver.model.templates.zone.ZoneClassName; import com.aionemu.gameserver.services.WeatherService; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; import com.aionemu.gameserver.world.zone.ZoneInstance; /** * @author Kwazar */ public class Weather extends AdminCommand { public Weather() { super("weather", "Shows/changes the weather."); // @formatter:off setSyntaxInfo( " - Shows info for the weather in the current zone.", " - Triggers a natural weather change on this map.", " - Changes the weather on this map, according to the weather code between 0 (default) and 12." ); // @formatter:on } @Override public void execute(Player admin, String... params) { if (params.length == 0) { sendInfo(admin); return; } switch (params[0].toLowerCase()) { case "info": for (ZoneInstance regionZone : admin.findZones()) { if (regionZone.getZoneTemplate().getZoneType() == ZoneClassName.WEATHER) { int weatherZoneId = DataManager.ZONE_DATA.getWeatherZoneId(regionZone.getZoneTemplate()); WeatherEntry weatherEntry = WeatherService.getInstance().getWeatherEntry(admin.getWorldId(), weatherZoneId); if (weatherEntry != null) { String info = "Weather for region " + regionZone.getZoneTemplate().getXmlName() + ":"; if (weatherEntry == WeatherEntry.NONE) { info += "\n\tcode: " + weatherEntry.getCode() + " (no weather)"; } else { if (weatherEntry.getZoneId() > 0) info += "\n\tzone: " + weatherEntry.getZoneId(); if (weatherEntry.getWeatherName() != null) info += "\n\tname: " + weatherEntry.getWeatherName(); info += "\n\tcode: " + weatherEntry.getCode(); } sendInfo(admin, info); return; } } } sendInfo(admin, "No weather found for this region."); return; case "set": case "next": int weatherCode; if (params[0].equalsIgnoreCase("next")) { if (params.length != 1) { sendInfo(admin); return; } weatherCode = -1; } else { weatherCode = NumberUtils.toInt(params[1], -1); if (weatherCode < 0 || weatherCode > 12) { sendInfo(admin, "Weather code must be between 0 and 12."); return; } } if (WeatherService.getInstance().changeWeather(admin.getWorldId(), weatherCode)) { String weatherName = WeatherService.getInstance().findWeatherEntry(admin).getWeatherName(); sendInfo(admin, "Changed the weather" + (weatherName == null ? "." : " to " + weatherName + ".")); } else { sendInfo(admin, "This region has no weather defined."); } return; } } }