@ -226,7 +225,7 @@ int main(int argc, char* argv[]) {
printf("Initialization completed in %f milliseconds."ENDL,static_cast<double>(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now()-Jupiter::g_start_time).count())/1000.0);
printf("Initialization completed in %f milliseconds."ENDL,static_cast<double>(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now()-Jupiter::g_start_time).count())/1000.0);
if(!consoleCommands.empty()){
if(!consoleCommands.empty()){
printf("%zu Console Commands have been initialized%s"ENDL,consoleCommands.size(),getConsoleCommand("help"_jrs)==nullptr?".":"; type \"help\" for more information.");
printf("%zu Console Commands have been initialized%s"ENDL,consoleCommands.size(),getConsoleCommand("help"sv)==nullptr?".":"; type \"help\" for more information.");
}
}
if(!IRCMasterCommandList.empty()){
if(!IRCMasterCommandList.empty()){
printf("%zu IRC Commands have been loaded into the master list."ENDL,IRCMasterCommandList.size());
printf("%zu IRC Commands have been loaded into the master list."ENDL,IRCMasterCommandList.size());
returnnewJupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("No IRC server is currently selected."sv,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" is currently selected."s,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" is currently selected."s,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("Error: IRC server \""s+parameters+"\" not found. No IRC server is currently selected."_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine(jessilib::join<std::string>("Error: IRC server \""sv,parameters,"\" not found. No IRC server is currently selected."sv),GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" is now selected."s,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" is now selected."s,GenericCommand::DisplayType::PublicSuccess);
return"Selects an IRC server if specified, responds with the currently selected server otherwise. Syntax: select [server]"sv;
staticJupiter::ReferenceStringdefaultHelp="Selects an IRC server if specified, responds with the currently selected server otherwise. Syntax: select [server]"_jrs;
returnnewJupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("No IRC server is currently selected."sv,GenericCommand::DisplayType::PublicSuccess);
Jupiter::GenericCommand::ResponseLine*ret=newJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" has been deselected."s,GenericCommand::DisplayType::PublicSuccess);
Jupiter::GenericCommand::ResponseLine*ret=newJupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()}+" has been deselected."s,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg <destination> <message>"_jrs,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg <destination> <message>"sv,GenericCommand::DisplayType::PrivateError);
staticSTRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp,"Sends a message to an IRC user or channel on the selected IRC server. Syntax: ircmsg <destination> <message>");
staticconstexprstd::string_viewdefaultHelp="Sends a message to an IRC user or channel on the selected IRC server. Syntax: ircmsg <destination> <message>"sv;
returnnewJupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv,GenericCommand::DisplayType::PublicError);
if(parameters.empty())
if(parameters.empty())
returnnewJupiter::GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join <channel> [password]"_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join <channel> [password]"sv,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv,GenericCommand::DisplayType::PublicError);
if(parameters.empty())
if(parameters.empty())
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part <channel> [message]"_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part <channel> [message]"sv,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Disconnected from IRC server."_jrs,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("Disconnected from IRC server."sv,GenericCommand::DisplayType::PublicSuccess);
}
}
if(serverManager->addServer(parameters))
if(serverManager->addServer(parameters))
returnnewJupiter::GenericCommand::ResponseLine("Connection successfully established; server added to server list."_jrs,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("Connection successfully established; server added to server list."sv,GenericCommand::DisplayType::PublicSuccess);
returnnewJupiter::GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."_jrs,GenericCommand::DisplayType::PublicError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."sv,GenericCommand::DisplayType::PublicError);
msg=jessilib::join<std::string>("Let's ban "sv,nick,"!"sv);
break;
break;
case12:
case12:
msg.set("Fuck your lineage."_jrs);
msg="Fuck your lineage."sv;
break;
break;
case13:
case13:
if(channel=="#Jail"sv)
if(channel=="#Jail"sv){
msg.set("Ask me those kind of questions in #Politics"_jrs);
msg="Ask me those kind of questions in #Politics"sv;
else
}
msg.set("Ask me those kind of questions in #Jail"_jrs);
else{
msg="Ask me those kind of questions in #Jail"sv;
}
break;
break;
case14:
case14:
msg.set("I don't talk to slut-mongers."_jrs);
msg="I don't talk to slut-mongers."sv;
break;
break;
case15:
case15:
msg.set("I only talk to slut-mongers."_jrs);
msg="I only talk to slut-mongers."sv;
break;
break;
case16:
case16:
msg.set("Nuclear launch detected."_jrs);
msg="Nuclear launch detected."sv;
break;
break;
case17:
case17:
msg.set("404 - Not found."_jrs);
msg="404 - Not found."sv;
break;
break;
case18:
case18:
msg.set("I hurr u liek mudkipz?"_jrs);
msg="I hurr u liek mudkipz?"sv;
break;
break;
case19:
case19:
msg.set("Fortune might be in your favor."_jrs);
msg="Fortune might be in your favor."sv;
break;
break;
case20:
case20:
msg.set("Fortune might not be in your favor."_jrs);
msg="Fortune might not be in your favor."sv;
break;
break;
case21:
case21:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, you're going to hell."_jrs);
msg="Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, you're going to hell."sv;
break;
break;
case22:
case22:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, yes!"_jrs);
msg="Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, yes!"sv;
break;
break;
case23:
case23:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, it's approximately as likely as getting a \"yes\" from me."_jrs);
msg="Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, it's approximately as likely as getting a \"yes\" from me."sv;
break;
break;
case24:
case24:
msg.set("Fucking campers."_jrs);
msg="Fucking campers."sv;
break;
break;
case25:
case25:
msg.set("The 8ball seems to be stuck. Try again later. (Dang, you can't even get an 8ball to work for you? That's pretty sad yo)"_jrs);
msg="The 8ball seems to be stuck. Try again later. (Dang, you can't even get an 8ball to work for you? That's pretty sad yo)"sv;
break;
break;
case26:
case26:
msg.set("The 8ball says... Go away? Wow, it really must not like you. Go away."_jrs);
msg="The 8ball says... Go away? Wow, it really must not like you. Go away."sv;
break;
break;
case27:
case27:
msg.set("Swag"_jrs);
msg="Swag"sv;
break;
break;
case28:
case28:
msg.set("Based on the orbit and trajectory of the 33rd moon of the planet assinine 6, no."_jrs);
msg="Based on the orbit and trajectory of the 33rd moon of the planet assinine 6, no."sv;
break;
break;
case29:
case29:
msg.set("Based on the orbin and trajectory of the moon assinsix 9, yes!"_jrs);
msg="Based on the orbin and trajectory of the moon assinsix 9, yes!"sv;
break;
break;
case30:
case30:
msg.set("Come visit me on the 5th planet away from Sol, and I'll give you whatever you want."_jrs);
msg="Come visit me on the 5th planet away from Sol, and I'll give you whatever you want."sv;
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve <hostname|ip> <address>"_jrs,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve <hostname|ip> <address>"sv,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."_jrs,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."sv,GenericCommand::DisplayType::PrivateError);
server.sendPubChan(IRCCOLOR"13[Aimbot]"IRCCOLOR" %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u",player.name.size(),player.name.data(),player.kills,player.deaths,player.headshots);
server.sendPubChan(IRCCOLOR"13[Aimbot]"IRCCOLOR" %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u",player.name.size(),player.name.data(),player.kills,player.deaths,player.headshots);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder <name | rank>"_jrs,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder <name | rank>"sv,GenericCommand::DisplayType::PrivateError);
}
}
if(RenX::default_ladder_database==nullptr){
if(RenX::default_ladder_database==nullptr){
returnnewJupiter::GenericCommand::ResponseLine("Error: No default ladder database specified."_jrs,GenericCommand::DisplayType::PrivateError);
returnnewJupiter::GenericCommand::ResponseLine("Error: No default ladder database specified."sv,GenericCommand::DisplayType::PrivateError);
string_printf(IRCCOLOR"12[Join] "IRCBOLD"%.*s"IRCBOLD" ("IRCBOLD"%.*s"IRCBOLD") joined the game fighting for the %.*s from "IRCBOLD"%.*s"IRCBOLD" ("IRCBOLD"%.*s"IRCBOLD") with HWID "IRCBOLD"%.*s"IRCBOLD".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"12[Join] "IRCBOLD"%.*s"IRCBOLD" ("IRCBOLD"%.*s"IRCBOLD") joined the game fighting for the %.*s from "IRCBOLD"%.*s"IRCBOLD" ("IRCBOLD"%.*s"IRCBOLD") with HWID "IRCBOLD"%.*s"IRCBOLD".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"04[Kick] "IRCBOLD"%.*s"IRCCOLORIRCBOLD" was "IRCBOLDIRCCOLOR"04kicked"IRCCOLORIRCBOLD" ("IRCCOLOR"04%.*s"IRCCOLOR")",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"04[Kick] "IRCBOLD"%.*s"IRCCOLORIRCBOLD" was "IRCBOLDIRCCOLOR"04kicked"IRCCOLORIRCBOLD" ("IRCCOLOR"04%.*s"IRCCOLOR")",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" picked up "IRCCOLOR"09%.*s credits"IRCCOLOR" from a "IRCCOLOR"12money"IRCCOLOR" crate.",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" picked up "IRCCOLOR"09%.*s credits"IRCCOLOR" from a "IRCCOLOR"12money"IRCCOLOR" crate.",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" picked up a "IRCCOLOR"%.*s%.*s"IRCCOLOR""IRCCOLOR"12character"IRCCOLOR" crate.",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" picked up a "IRCCOLOR"%.*s%.*s"IRCCOLOR""IRCCOLOR"12character"IRCCOLOR" crate.",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" has been "IRCBOLDIRCCOLOR"06abducted"IRCCOLORIRCBOLD" by the "IRCBOLDIRCCOLOR"06Scrin"IRCCOLORIRCBOLD"!",RenX::tags->nameTag.size(),
string_printf(IRCBOLD"%.*s"IRCCOLORIRCBOLD" has been "IRCBOLDIRCCOLOR"06abducted"IRCCOLORIRCBOLD" by the "IRCBOLDIRCCOLOR"06Scrin"IRCCOLORIRCBOLD"!",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"03[Game]"IRCCOLOR"10 The battle ended in a "IRCBOLD"%.*s"IRCBOLD" - Victory handed to "IRCBOLDIRCCOLOR"%.*s%.*s"IRCBOLD,RenX::tags->messageTag.size(),
string_printf(IRCCOLOR"03[Game]"IRCCOLOR"10 The battle ended in a "IRCBOLD"%.*s"IRCBOLD" - Victory handed to "IRCBOLDIRCCOLOR"%.*s%.*s"IRCBOLD,RenX::tags->messageTag.size(),
string_printf(IRCCOLOR"07[Admin] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" logged in with "IRCCOLOR"07"IRCBOLD"%.*s"IRCBOLDIRCNORMAL" privledges.",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"07[Admin] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" logged in with "IRCCOLOR"07"IRCBOLD"%.*s"IRCBOLDIRCNORMAL" privledges.",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"07[Admin] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" logged out of their "IRCCOLOR"07"IRCBOLD"%.*s"IRCBOLDIRCNORMAL" privledges.",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"07[Admin] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" logged out of their "IRCCOLOR"07"IRCBOLD"%.*s"IRCBOLDIRCNORMAL" privledges.",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"[Vote] "IRCBOLD"%.*s"IRCNORMAL" has called for adding "IRCCOLOR"12%.*s"IRCCOLOR" bots to %.*s, with skill level "IRCCOLOR"07%.*s"IRCCOLOR".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"[Vote] "IRCBOLD"%.*s"IRCNORMAL" has called for adding "IRCCOLOR"12%.*s"IRCCOLOR" bots to %.*s, with skill level "IRCCOLOR"07%.*s"IRCCOLOR".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"[Vote] "IRCBOLD"%.*s"IRCNORMAL" has called a vote to remove "IRCCOLOR"12%.*s"IRCCOLOR" bots from "IRCCOLOR"%.*s%.*s"IRCNORMAL".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"[Vote] "IRCBOLD"%.*s"IRCNORMAL" has called a vote to remove "IRCCOLOR"12%.*s"IRCCOLOR" bots from "IRCCOLOR"%.*s%.*s"IRCNORMAL".",RenX::tags->nameTag.size(),
string_printf(IRCCOLOR"03Renegade X RCON connection established; using RCON verison "IRCBOLD"%.*s"IRCBOLD" for game version "IRCBOLD"%.*s"IRCBOLD,RenX::tags->rconVersionTag.size(),
string_printf(IRCCOLOR"03Renegade X RCON connection established; using RCON verison "IRCBOLD"%.*s"IRCBOLD" for game version "IRCBOLD"%.*s"IRCBOLD,RenX::tags->rconVersionTag.size(),
congratPlayerData->server->sendMessage(congratPlayerData->playerName+" has been recommended for having the highest score last game!"_jrs);
congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName," has been recommended for having the highest score last game!"sv));
break;
break;
case1:
case1:
congratPlayerData->server->sendMessage(congratPlayerData->playerName+" has been recommended for having the most kills last game!"_jrs);
congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName," has been recommended for having the most kills last game!"sv));
break;
break;
case2:
case2:
congratPlayerData->server->sendMessage(congratPlayerData->playerName+" has been recommended for having the most vehicle kills last game!"_jrs);
congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName," has been recommended for having the most vehicle kills last game!"sv));
break;
break;
case3:
case3:
congratPlayerData->server->sendMessage(congratPlayerData->playerName+" has been recommended for having the highest Kill-Death ratio last game!"_jrs);
congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName," has been recommended for having the highest Kill-Death ratio last game!"sv));
source->sendMessage(*player,string_printf("[Archive] %.*s has %u and %u n00bs. Their worth: %d",section->getName().size(),section->getName().c_str(),recs,noobs,recs-noobs));
source->sendMessage(*player,string_printf("[Archive] %.*s has %u and %u n00bs. Their worth: %d",section->getName().size(),section->getName().c_str(),recs,noobs,recs-noobs));
}
}
}
}
elseif(target->uuid.empty())
elseif(target->uuid.empty())
source->sendMessage(*player,"Error: Player is not using steam."_jrs);
source->sendMessage(*player,"Error: Player is not using steam."sv);
elseif(target->isBot)
elseif(target->isBot)
source->sendMessage(*player,"Error: Bots do not have any recommendations."_jrs);
source->sendMessage(*player,"Error: Bots do not have any recommendations."sv);
elseif(target==player)
elseif(target==player)
RecsGameCommand::trigger(source,player,""_jrs);
RecsGameCommand::trigger(source,player,""sv);
else
else
source->sendMessage(*player,string_printf("%.*s has %lu and %lu n00bs. Their worth: %d",target->name.size(),target->name.data(),getRecs(*target),getNoobs(*target),getWorth(*target)));
source->sendMessage(*player,string_printf("%.*s has %lu and %lu n00bs. Their worth: %d",target->name.size(),target->name.data(),getRecs(*target),getNoobs(*target),getWorth(*target)));
}
}
elseif(player->uuid.empty())
elseif(player->uuid.empty())
source->sendMessage(*player,"Error: You are not using steam."_jrs);
source->sendMessage(*player,"Error: You are not using steam."sv);
else
else
source->sendMessage(*player,string_printf("%.*s, you have %lu recs and %lu n00bs. Your worth: %d",player->name.size(),player->name.data(),getRecs(*player),getNoobs(*player),getWorth(*player)));
source->sendMessage(*player,string_printf("%.*s, you have %lu recs and %lu n00bs. Your worth: %d",player->name.size(),player->name.data(),getRecs(*player),getNoobs(*player),getWorth(*player)));
server.sendMessage(player,string_printf("You are now authenticated with access level %d; group: %.*s.",player.access,group->name.size(),group->name.data()));
server.sendMessage(player,string_printf("You are now authenticated with access level %d; group: %.*s.",player.access,group->name.size(),group->name.data()));
@ -197,7 +196,7 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
server.sendLogChan(IRCCOLOR"03[Authentication] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" is now authenticated with access level %d; group: %.*s.",playerName.size(),
server.sendLogChan(IRCCOLOR"03[Authentication] "IRCBOLD"%.*s"IRCBOLDIRCCOLOR" is now authenticated with access level %d; group: %.*s.",playerName.size(),
source->sendNotice(nick,string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).",player->name.size(),player->name.data(),warns));
source->sendNotice(nick,string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).",player->name.size(),player->name.data(),warns));
source->sendNotice(nick,string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).",player->name.size(),player->name.data(),reason.size(),reason.data(),warns));
source->sendNotice(nick,string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).",player->name.size(),player->name.data(),reason.size(),reason.data(),warns));
@ -177,7 +177,7 @@ void WarnGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
source->sendMessage(*player,string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).",target->name.size(),target->name.data(),warns));
source->sendMessage(*player,string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).",target->name.size(),target->name.data(),warns));
source->sendMessage(*player,string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).",target->name.size(),target->name.data(),warns));
source->sendMessage(*player,string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).",target->name.size(),target->name.data(),warns));
break;
break;
}
}
@ -190,11 +190,11 @@ void WarnGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
}
}
}
}
else
else
source->sendMessage(*player,"Error: Too few parameters. Syntax: Warn <Player> <Reason>"_jrs);
source->sendMessage(*player,"Error: Too few parameters. Syntax: Warn <Player> <Reason>"sv);