mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 00:46:46 +00:00
[Quest API] Add IsRaining() and IsSnowing() to Perl/Lua. (#2477)
* [Quest API] Add IsRaining() and IsSnowing() to Perl/Lua. - Add quest::IsRaining() to Perl. - Add quest::IsSnowing() to Perl. - Add eq.is_raining() to Lua. - Add eq.is_snowing() to Lua. This will allow server operators to tell if a zone is currently raining, snowing, or neither. * Remove unnecessary quest manager stuff. * Added constants and cleaned up #weather command * Revert "Added constants and cleaned up #weather command" This reverts commit2ec85304b7. * Revert "Revert "Added constants and cleaned up #weather command"" This reverts commit76f4e411b6. * Delete settings.json * Update zone.cpp
This commit is contained in:
@@ -2,67 +2,104 @@
|
||||
|
||||
void command_weather(Client *c, const Seperator *sep)
|
||||
{
|
||||
if (!(sep->arg[1][0] == '0' || sep->arg[1][0] == '1' || sep->arg[1][0] == '2' || sep->arg[1][0] == '3')) {
|
||||
c->Message(Chat::White, "Usage: #weather <0/1/2/3> - Off/Rain/Snow/Manual.");
|
||||
if (!sep->IsNumber(1)) {
|
||||
c->Message(Chat::White, "Usage: #weather [0|1|2] - [Off|Rain|Snow]");
|
||||
c->Message(Chat::White, "Usage: #weather 3 [Type] [Intensity] - Manually set weather type and intensity");
|
||||
return;
|
||||
}
|
||||
else if (zone->zone_weather == 0) {
|
||||
if (sep->arg[1][0] ==
|
||||
'3') { // Put in modifications here because it had a very good chance at screwing up the client's weather system if rain was sent during snow -T7
|
||||
if (sep->arg[2][0] != 0 && sep->arg[3][0] != 0) {
|
||||
c->Message(Chat::White, "Sending weather packet... TYPE=%s, INTENSITY=%s", sep->arg[2], sep->arg[3]);
|
||||
zone->zone_weather = atoi(sep->arg[2]);
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
outapp->pBuffer[0] = atoi(sep->arg[2]);
|
||||
outapp->pBuffer[4] = atoi(sep->arg[3]); // This number changes in the packets, intensity?
|
||||
entity_list.QueueClients(c, outapp);
|
||||
safe_delete(outapp);
|
||||
|
||||
int arguments = sep->argnum;
|
||||
if (arguments == 1) {
|
||||
auto new_weather = static_cast<uint8>(std::stoul(sep->arg[1]));
|
||||
uint8 new_intensity = 0;
|
||||
std::string weather_message = "The sky clears.";
|
||||
|
||||
if (new_weather == EQ::constants::WeatherTypes::Snowing) {
|
||||
weather_message = "Snowflakes begin to fall from the sky.";
|
||||
new_weather = EQ::constants::WeatherTypes::Snowing;
|
||||
new_intensity = 0x02;
|
||||
} else if (new_weather == EQ::constants::WeatherTypes::Raining) {
|
||||
weather_message = "Raindrops begin to fall from the sky.";
|
||||
new_weather = EQ::constants::WeatherTypes::Raining;
|
||||
new_intensity = 0x01; // This is how it's done in Fear, and you can see a decent distance with it at this value
|
||||
} else {
|
||||
c->Message(Chat::White, "Usage: #weather [0|1|2] - [Off|Rain|Snow]");
|
||||
c->Message(Chat::White, "Usage: #weather 3 [Type] [Intensity] - Manually set weather type and intensity");
|
||||
return;
|
||||
}
|
||||
|
||||
zone->zone_weather = new_weather;
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
|
||||
if (new_weather != EQ::constants::WeatherTypes::None) {
|
||||
if (new_weather == EQ::constants::WeatherTypes::Snowing) {
|
||||
outapp->pBuffer[0] = EQ::constants::WeatherTypes::Snowing;
|
||||
}
|
||||
else {
|
||||
c->Message(Chat::White, "Manual Usage: #weather 3 <type> <intensity>");
|
||||
|
||||
outapp->pBuffer[4] = new_intensity;
|
||||
}
|
||||
|
||||
|
||||
c->Message(Chat::White, weather_message.c_str());
|
||||
entity_list.QueueClients(c, outapp);
|
||||
|
||||
safe_delete(outapp);
|
||||
} else if (arguments == 3) {
|
||||
auto command_type = static_cast<uint8>(std::stoul(sep->arg[1]));
|
||||
uint8 new_weather = EQ::constants::WeatherTypes::None;
|
||||
uint8 new_intensity = 0;
|
||||
std::string weather_message;
|
||||
|
||||
if (zone->zone_weather == EQ::constants::WeatherTypes::None) {
|
||||
if (command_type > EQ::constants::WeatherTypes::Snowing) {
|
||||
new_weather = static_cast<uint8>(std::stoul(sep->arg[2]));
|
||||
new_intensity = static_cast<uint8>(std::stoul(sep->arg[3]));
|
||||
|
||||
weather_message = fmt::format(
|
||||
"Sending {} ({}) with an intensity of {}.",
|
||||
EQ::constants::GetWeatherTypeName(new_weather),
|
||||
new_weather,
|
||||
new_intensity
|
||||
);
|
||||
} else if (command_type == EQ::constants::WeatherTypes::Snowing) {
|
||||
weather_message = "Snowflakes begin to fall from the sky.";
|
||||
new_weather = EQ::constants::WeatherTypes::Snowing;
|
||||
new_intensity = 0x02;
|
||||
} else if (command_type == EQ::constants::WeatherTypes::Raining) {
|
||||
weather_message = "Raindrops begin to fall from the sky.";
|
||||
new_weather = EQ::constants::WeatherTypes::Raining;
|
||||
new_intensity = 0x01; // This is how it's done in Fear, and you can see a decent distance with it at this value
|
||||
}
|
||||
}
|
||||
else if (sep->arg[1][0] == '2') {
|
||||
entity_list.Message(0, 0, "Snowflakes begin to fall from the sky.");
|
||||
zone->zone_weather = 2;
|
||||
|
||||
zone->zone_weather = new_weather;
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
outapp->pBuffer[0] = 0x01;
|
||||
outapp->pBuffer[4] = 0x02; // This number changes in the packets, intensity?
|
||||
|
||||
if (new_weather != EQ::constants::WeatherTypes::Raining) {
|
||||
outapp->pBuffer[0] = new_weather;
|
||||
}
|
||||
|
||||
outapp->pBuffer[4] = new_intensity;
|
||||
|
||||
c->Message(Chat::White, weather_message.c_str());
|
||||
entity_list.QueueClients(c, outapp);
|
||||
|
||||
safe_delete(outapp);
|
||||
}
|
||||
else if (sep->arg[1][0] == '1') {
|
||||
entity_list.Message(0, 0, "Raindrops begin to fall from the sky.");
|
||||
zone->zone_weather = 1;
|
||||
} else {
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
outapp->pBuffer[4] = 0x01; // This is how it's done in Fear, and you can see a decent distance with it at this value
|
||||
entity_list.QueueClients(c, outapp);
|
||||
safe_delete(outapp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (zone->zone_weather == 1) { // Doing this because if you have rain/snow on, you can only turn one off.
|
||||
entity_list.Message(0, 0, "The sky clears as the rain ceases to fall.");
|
||||
zone->zone_weather = 0;
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
// To shutoff weather you send an empty 8 byte packet (You get this everytime you zone even if the sky is clear)
|
||||
entity_list.QueueClients(c, outapp);
|
||||
safe_delete(outapp);
|
||||
}
|
||||
else if (zone->zone_weather == 2) {
|
||||
entity_list.Message(0, 0, "The sky clears as the snow stops falling.");
|
||||
zone->zone_weather = 0;
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
// To shutoff weather you send an empty 8 byte packet (You get this everytime you zone even if the sky is clear)
|
||||
outapp->pBuffer[0] = 0x01; // Snow has it's own shutoff packet
|
||||
entity_list.QueueClients(c, outapp);
|
||||
safe_delete(outapp);
|
||||
}
|
||||
else {
|
||||
entity_list.Message(0, 0, "The sky clears.");
|
||||
zone->zone_weather = 0;
|
||||
auto outapp = new EQApplicationPacket(OP_Weather, 8);
|
||||
// To shutoff weather you send an empty 8 byte packet (You get this everytime you zone even if the sky is clear)
|
||||
weather_message = "The sky clears.";
|
||||
|
||||
if (zone->zone_weather == EQ::constants::WeatherTypes::Snowing) {
|
||||
weather_message = "The sky clears as the snow stops falling.";
|
||||
outapp->pBuffer[0] = 0x01; // Snow has it's own shutoff packet
|
||||
} else if (zone->zone_weather == EQ::constants::WeatherTypes::Raining) {
|
||||
weather_message = "The sky clears as the rain ceases to fall.";
|
||||
}
|
||||
|
||||
zone->zone_weather = EQ::constants::WeatherTypes::None;
|
||||
|
||||
c->Message(Chat::White, weather_message.c_str());
|
||||
entity_list.QueueClients(c, outapp);
|
||||
|
||||
safe_delete(outapp);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user