diff --git a/RenX.ModSystem/RenX_ModSystem.cpp b/RenX.ModSystem/RenX_ModSystem.cpp index 3aec71c..a2f5170 100644 --- a/RenX.ModSystem/RenX_ModSystem.cpp +++ b/RenX.ModSystem/RenX_ModSystem.cpp @@ -151,55 +151,58 @@ int RenX_ModSystemPlugin::auth(RenX::Server *server, const RenX::PlayerInfo *pla { if (player->isBot) return 0; - ModGroup *group; - Jupiter::INIFile::Section *section = RenX_ModSystemPlugin::modsFile.getSection(player->uuid); - if (section != nullptr) + if (player->uuid.isEmpty() == false) { - const Jupiter::ReadableString &groupName = section->get(STRING_LITERAL_AS_REFERENCE("Group")); - if (groupName.isEmpty()) - group = RenX_ModSystemPlugin::groups.get(0); - else if ((group = RenX_ModSystemPlugin::getGroupByName(groupName)) == nullptr) - group = RenX_ModSystemPlugin::groups.get(0); - - auto sectionAuth = [&] - { - player->varData.set(this->name, STRING_LITERAL_AS_REFERENCE("Group"), group->name); - player->formatNamePrefix = section->get(STRING_LITERAL_AS_REFERENCE("Prefix"), group->prefix); - player->gamePrefix = section->get(STRING_LITERAL_AS_REFERENCE("GamePrefix"), group->gamePrefix); - player->access = section->getInt(STRING_LITERAL_AS_REFERENCE("Access"), group->access); - server->sendMessage(player, Jupiter::StringS::Format("You are now authenticated with access level %d; group: %.*s.", player->access, group->name.size(), group->name.ptr())); - Jupiter::String playerName = RenX::getFormattedPlayerName(player); - server->sendLogChan(IRCCOLOR "03[Authentication] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is now authenticated with access level %d; group: %.*s.", playerName.size(), playerName.ptr(), player->access, group->name.size(), group->name.ptr()); - return player->access; - }; - - if (forceAuth) - return sectionAuth(); - - bool lockSteam_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockSteam"), group->lockSteam); - bool lockIP_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockIP"), group->lockIP); - bool lockName_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockName"), group->lockName); - bool kickLockMismatch_l = section->getBool(STRING_LITERAL_AS_REFERENCE("KickLockMismatch"), group->kickLockMismatch); - bool autoAuthSteam_l = section->getBool(STRING_LITERAL_AS_REFERENCE("AutoAuthSteam"), group->autoAuthSteam); - bool autoAuthIP_l = section->getBool(STRING_LITERAL_AS_REFERENCE("AutoAuthIP"), group->autoAuthIP); - - uint64_t steamid = section->get(STRING_LITERAL_AS_REFERENCE("SteamID")).asUnsignedLongLong(); - const Jupiter::ReadableString &ip = section->get(STRING_LITERAL_AS_REFERENCE("LastIP")); - const Jupiter::ReadableString &name = section->get(STRING_LITERAL_AS_REFERENCE("Name")); - - if ((lockSteam_l == false || player->steamid == steamid) && (lockIP_l == false || player->ip.equalsi(ip)) && (lockName_l == false || player->name.equalsi(name))) + Jupiter::INIFile::Section *section = RenX_ModSystemPlugin::modsFile.getSection(player->uuid); + if (section != nullptr) { - if (checkAuto == false || (autoAuthSteam_l && player->steamid == steamid) || (autoAuthIP_l && player->ip.equalsi(ip))) + const Jupiter::ReadableString &groupName = section->get(STRING_LITERAL_AS_REFERENCE("Group")); + if (groupName.isEmpty()) + group = RenX_ModSystemPlugin::groups.get(0); + else if ((group = RenX_ModSystemPlugin::getGroupByName(groupName)) == nullptr) + group = RenX_ModSystemPlugin::groups.get(0); + + auto sectionAuth = [&] + { + player->varData.set(this->name, STRING_LITERAL_AS_REFERENCE("Group"), group->name); + player->formatNamePrefix = section->get(STRING_LITERAL_AS_REFERENCE("Prefix"), group->prefix); + player->gamePrefix = section->get(STRING_LITERAL_AS_REFERENCE("GamePrefix"), group->gamePrefix); + player->access = section->getInt(STRING_LITERAL_AS_REFERENCE("Access"), group->access); + if (player->access != 0) + server->sendMessage(player, Jupiter::StringS::Format("You are now authenticated with access level %d; group: %.*s.", player->access, group->name.size(), group->name.ptr())); + Jupiter::String playerName = RenX::getFormattedPlayerName(player); + server->sendLogChan(IRCCOLOR "03[Authentication] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is now authenticated with access level %d; group: %.*s.", playerName.size(), playerName.ptr(), player->access, group->name.size(), group->name.ptr()); + return player->access; + }; + + if (forceAuth) return sectionAuth(); - } - else if (kickLockMismatch_l) - { - server->kickPlayer(player); - return -1; + + bool lockSteam_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockSteam"), group->lockSteam); + bool lockIP_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockIP"), group->lockIP); + bool lockName_l = section->getBool(STRING_LITERAL_AS_REFERENCE("LockName"), group->lockName); + bool kickLockMismatch_l = section->getBool(STRING_LITERAL_AS_REFERENCE("KickLockMismatch"), group->kickLockMismatch); + bool autoAuthSteam_l = section->getBool(STRING_LITERAL_AS_REFERENCE("AutoAuthSteam"), group->autoAuthSteam); + bool autoAuthIP_l = section->getBool(STRING_LITERAL_AS_REFERENCE("AutoAuthIP"), group->autoAuthIP); + + uint64_t steamid = section->get(STRING_LITERAL_AS_REFERENCE("SteamID")).asUnsignedLongLong(); + const Jupiter::ReadableString &ip = section->get(STRING_LITERAL_AS_REFERENCE("LastIP")); + const Jupiter::ReadableString &name = section->get(STRING_LITERAL_AS_REFERENCE("Name")); + + if ((lockSteam_l == false || player->steamid == steamid) && (lockIP_l == false || player->ip.equalsi(ip)) && (lockName_l == false || player->name.equalsi(name))) + { + if (checkAuto == false || (autoAuthSteam_l && player->steamid == steamid) || (autoAuthIP_l && player->ip.equalsi(ip))) + return sectionAuth(); + } + else if (kickLockMismatch_l) + { + server->kickPlayer(player); + return -1; + } } } - group = RenX_ModSystemPlugin::groups.get(0); + group = this->getDefaultGroup(); player->varData.set(this->name, STRING_LITERAL_AS_REFERENCE("Group"), group->name); player->formatNamePrefix = group->prefix;