forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
158 lines
6.4 KiB
Plaintext
158 lines
6.4 KiB
Plaintext
#include "x2_inc_switches"
|
|
#include "prc_inc_switch"
|
|
#include "inc_sql"
|
|
#include "inc_debug"
|
|
|
|
int VerifyPlayernameAgainstCDKey(object oPlayer)
|
|
{
|
|
int nBoot = FALSE;
|
|
string sPName = GetStringLowerCase(GetPCPlayerName(oPlayer));
|
|
string sKey = GetPCPublicCDKey(oPlayer);
|
|
|
|
DoDebug("Running CD-check... Player name = "+sPName+" key = "+sKey);
|
|
|
|
if(GetPRCSwitch(PRC_USE_DATABASE))
|
|
{
|
|
DoDebug("Using MySQL or SQLite");
|
|
|
|
string sPlayer = ReplaceSingleChars(sPName, "'","~");
|
|
string sStoredKey, sAddingKey;
|
|
string sSQL = "SELECT val, tag FROM pwdata WHERE name='PlayernameKey_" + sPlayer + "'";
|
|
PRC_SQLExecDirect(sSQL);
|
|
|
|
/* there's at least one key stored already */
|
|
if (PRC_SQLFetch() == PRC_SQL_SUCCESS) {
|
|
sStoredKey = PRC_SQLGetData(1);
|
|
sAddingKey = PRC_SQLGetData(2);
|
|
|
|
/* they indicated that they wanted to add a key this login */
|
|
if (sAddingKey == "Adding") {
|
|
DoDebug("Adding new key to database");
|
|
|
|
/* their current key is not in the key string, add it unless at 7 keys already */
|
|
if (FindSubString(sStoredKey, sKey) == -1) {
|
|
int nKeyLength = GetStringLength(sStoredKey);
|
|
|
|
/* allow 7 keys max key-key-key-key-key-key-key 6 spacers + 7x8 keys = 62 */
|
|
if (nKeyLength > 61) {
|
|
nBoot = TRUE;
|
|
|
|
/* must mark as no longer adding */
|
|
sSQL = "UPDATE pwdata SET tag='Set' WHERE name='PlayernameKey_" + sPlayer + "'";
|
|
PRC_SQLExecDirect(sSQL);
|
|
|
|
/* add the key to the string */
|
|
} else {
|
|
sSQL =
|
|
"UPDATE pwdata SET tag='Set',val='" + sStoredKey + "-" + sKey + "' WHERE name='PlayernameKey_" + sPlayer +
|
|
"'";
|
|
PRC_SQLExecDirect(sSQL);
|
|
DelayCommand(25.0, FloatingTextStringOnCreature("New CD Key Successfully Added!", oPlayer, FALSE));
|
|
}
|
|
|
|
/* let them know they already had this key in their string */
|
|
} else {
|
|
DelayCommand(25.0,
|
|
FloatingTextStringOnCreature("CD Key Addition Failed! This key already listed for this account!", oPlayer,
|
|
FALSE));
|
|
|
|
/* must mark as no longer adding */
|
|
sSQL = "UPDATE pwdata SET tag='Set' WHERE name='PlayernameKey_" + sPlayer + "'";
|
|
PRC_SQLExecDirect(sSQL);
|
|
}
|
|
|
|
/* they are not adding, and the cd key doesnt match those listed - boot and log */
|
|
} else if (FindSubString(sStoredKey, sKey) == -1) {
|
|
string sReport = "INCORRECT CD KEY DETECTED! ID: " + sPName + "; Name: " +
|
|
GetName(oPlayer) + "; CD Key: " + sKey + "; IP: " + GetPCIPAddress(oPlayer) ;
|
|
|
|
WriteTimestampedLogEntry(sReport);
|
|
SendMessageToAllDMs(sReport);
|
|
|
|
nBoot = TRUE;
|
|
DoDebug("Error - key doesn't match - BOOT PLAYER");
|
|
|
|
}
|
|
/* new account, add the key */
|
|
} else {
|
|
sSQL = "INSERT INTO pwdata (val,name) VALUES" + "('" + sKey + "','PlayernameKey_" + sPlayer + "')";
|
|
PRC_SQLExecDirect(sSQL);
|
|
DoDebug("Player cd key added to database");
|
|
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DoDebug("Using Bioware database");
|
|
|
|
string sNewKey, sAddingKey, sStoredKey = GetCampaignString("PlayernameKey", sPName);
|
|
|
|
/* there's at least one key stored already */
|
|
|
|
if (sStoredKey != "") {
|
|
sAddingKey = GetStringLeft(sStoredKey, 3);
|
|
sStoredKey = GetStringRight(sStoredKey, GetStringLength(sStoredKey) - 3);
|
|
|
|
/* they indicated that they wanted to add a key this login */
|
|
|
|
if (sAddingKey == "ADD") {
|
|
DoDebug("Adding new key to database");
|
|
/* their current key is not in the key string, add it unless at 7 keys already */
|
|
if (FindSubString(sStoredKey, sKey) == -1) {
|
|
int nKeyLength = GetStringLength(sStoredKey);
|
|
|
|
/* allow 7 keys max SET-key-key-key-key-key-key-key SET/ADD + 7 spacers + 7x8 keys = 66 */
|
|
if (nKeyLength > 65) {
|
|
nBoot = TRUE;
|
|
|
|
/* must mark as no longer adding */
|
|
SetCampaignString("PlayernameKey", sPName, "SET" + sStoredKey);
|
|
|
|
/* add the key to the string */
|
|
} else {
|
|
sNewKey = "SET" + sStoredKey + "-" + sKey;
|
|
SetCampaignString("PlayernameKey", sPName, sNewKey);
|
|
DelayCommand(25.0, FloatingTextStringOnCreature("New CD Key Successfully Added!", oPlayer, FALSE));
|
|
}
|
|
|
|
/* let them know they already had this key in their string */
|
|
} else {
|
|
DelayCommand(25.0,
|
|
FloatingTextStringOnCreature("CD Key Addition Failed! This key already listed for this account!", oPlayer,
|
|
FALSE));
|
|
|
|
/* must mark as no longer adding */
|
|
SetCampaignString("PlayernameKey", sPName, "SET" + sStoredKey);
|
|
}
|
|
|
|
/* they are not adding, and the cd key doesnt match those listed - boot and log */
|
|
} else if (FindSubString(sStoredKey, sKey) == -1) {
|
|
string sReport = "INCORRECT CD KEY DETECTED! ID: " + sPName + "; Name: " +
|
|
GetName(oPlayer) + "; CD Key: " + sKey + "; IP: " + GetPCIPAddress(oPlayer);
|
|
|
|
WriteTimestampedLogEntry(sReport);
|
|
SendMessageToAllDMs(sReport);
|
|
nBoot = TRUE;
|
|
DoDebug("Error - key doesn't match - BOOT PLAYER");
|
|
|
|
}
|
|
/* new account, add the key */
|
|
} else {
|
|
DoDebug("Player cd key added to database");
|
|
SetCampaignString("PlayernameKey", sPName, "SET-" + sKey);
|
|
}
|
|
}
|
|
return nBoot;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC=OBJECT_SELF;
|
|
if(VerifyPlayernameAgainstCDKey(oPC))
|
|
{
|
|
SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
|
|
if (GetIsObjectValid(oPC))
|
|
BootPC(oPC);
|
|
}
|
|
} |