public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (((mob.location().domainType() & Room.INDOORS) > 0) && (!auto)) { mob.tell("You must be outdoors for this chant to work."); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; int size = mob.location().getArea().numberOfProperIDedRooms(); size = size / (mob.phyStats().level() + (2 * super.getXLEVELLevel(mob))); if (size < 0) size = 0; boolean success = proficiencyCheck(mob, -size, auto); if (success) { Climate C = mob.location().getArea().getClimateObj(); Climate oldC = (Climate) C.copyOf(); CMMsg msg = CMClass.getMsg( mob, null, this, verbalCastCode(mob, null, auto), auto ? "^JThe sky changes color!^?" : "^S<S-NAME> chant(s) into the sky for water!^?"); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); switch (C.weatherType(mob.location())) { case Climate.WEATHER_BLIZZARD: C.setNextWeatherType(Climate.WEATHER_BLIZZARD); break; case Climate.WEATHER_CLEAR: C.setNextWeatherType(Climate.WEATHER_RAIN); break; case Climate.WEATHER_CLOUDY: C.setNextWeatherType(Climate.WEATHER_RAIN); break; case Climate.WEATHER_DROUGHT: C.setNextWeatherType(Climate.WEATHER_CLEAR); break; case Climate.WEATHER_DUSTSTORM: C.setNextWeatherType(Climate.WEATHER_CLOUDY); break; case Climate.WEATHER_HAIL: C.setNextWeatherType(Climate.WEATHER_SLEET); break; case Climate.WEATHER_HEAT_WAVE: C.setNextWeatherType(Climate.WEATHER_RAIN); break; case Climate.WEATHER_RAIN: C.setNextWeatherType(Climate.WEATHER_THUNDERSTORM); break; case Climate.WEATHER_SLEET: C.setNextWeatherType(Climate.WEATHER_SLEET); break; case Climate.WEATHER_SNOW: C.setNextWeatherType(Climate.WEATHER_SLEET); break; case Climate.WEATHER_THUNDERSTORM: C.setNextWeatherType(Climate.WEATHER_THUNDERSTORM); break; case Climate.WEATHER_WINDY: C.setNextWeatherType(Climate.WEATHER_THUNDERSTORM); break; case Climate.WEATHER_WINTER_COLD: C.setNextWeatherType(Climate.WEATHER_SNOW); break; default: break; } C.forceWeatherTick(mob.location().getArea()); Chant_CalmWeather.xpWorthyChange(mob, mob.location().getArea(), oldC, C); } } else beneficialVisualFizzle( mob, null, "<S-NAME> chant(s) into the sky for water, but the magic fizzles."); return success; }