Added NPC to re-level or delete character
Modified npc pickup script to ignore quest item spawns.
This commit is contained in:
@@ -1590,6 +1590,10 @@ void sp_PerformActions(object oNearest, object oCurrent) {
|
||||
{
|
||||
object oPickup = GetNearestObject(OBJECT_TYPE_ITEM, oNearest);
|
||||
object oCurrent = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, FALSE, GetLocation(oPickup), 1, CREATURE_TYPE_IS_ALIVE, TRUE);
|
||||
if (GetTag(oPickup) == "statueofgold") {
|
||||
return; }
|
||||
if (GetTag(oPickup) == "statueofjade") {
|
||||
return; }
|
||||
if (GetDistanceBetweenLocations(GetLocation(oPickup),
|
||||
GetLocation(oCurrent)) < 40.0)
|
||||
{
|
||||
|
20
_module/nss/dante_letodel_at.nss
Normal file
20
_module/nss/dante_letodel_at.nss
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "nwnx_admin"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPlayer = GetPCSpeaker();
|
||||
|
||||
string sName = GetName(oPlayer);
|
||||
|
||||
string sPlayer = GetPCPlayerName(oPlayer);
|
||||
|
||||
SendMessageToPC(oPlayer,"sPlayer = "+sPlayer);
|
||||
SendMessageToPC(oPlayer,"sName = "+sName);
|
||||
|
||||
NWNX_Administration_DeletePlayerCharacter(oPlayer, 1, "Character Deleted");
|
||||
SendMessageToPC(oPlayer,sPlayer+" has deleted "+sName);
|
||||
SendMessageToAllDMs(sPlayer+" has deleted "+sName);
|
||||
}
|
||||
|
||||
|
||||
|
18
_module/nss/leveltake1.nss
Normal file
18
_module/nss/leveltake1.nss
Normal file
@@ -0,0 +1,18 @@
|
||||
/// Determines how long to wait before restoring the target's XP value
|
||||
const float XP_RESTORE_DELAY = 1.0f;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetPCSpeaker();
|
||||
int nLevels = 1;
|
||||
int nOrigXP = GetXP(oTarget);
|
||||
int nOrigHD = GetHitDice(oTarget);
|
||||
int nTargetHD = nOrigHD - nLevels;
|
||||
SetXP(oTarget, ((nTargetHD * (nTargetHD - 1)) / 2) * 1000);
|
||||
// Schedule the OnLevelDown virtual event to be run right away
|
||||
SetLocalInt(oTarget, "PRC_OnLevelDown_OldLevel", nOrigHD);
|
||||
DelayCommand(0.0f, ExecuteScript("prc_onleveldown", oTarget));
|
||||
SetXP(oTarget, nOrigXP);
|
||||
TakeGoldFromCreature (5000, oTarget);
|
||||
}
|
14
_module/nss/leveltake10.nss
Normal file
14
_module/nss/leveltake10.nss
Normal file
@@ -0,0 +1,14 @@
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetPCSpeaker();
|
||||
int nLevels = 10;
|
||||
int nOrigXP = GetXP(oTarget);
|
||||
int nOrigHD = GetHitDice(oTarget);
|
||||
int nTargetHD = nOrigHD - nLevels;
|
||||
SetXP(oTarget, ((nTargetHD * (nTargetHD - 1)) / 2) * 1000);
|
||||
// Schedule the OnLevelDown virtual event to be run right away
|
||||
SetLocalInt(oTarget, "PRC_OnLevelDown_OldLevel", nOrigHD);
|
||||
DelayCommand(0.0f, ExecuteScript("prc_onleveldown", oTarget));
|
||||
SetXP(oTarget, nOrigXP);
|
||||
TakeGoldFromCreature (50000, oTarget);
|
||||
}
|
14
_module/nss/leveltake5.nss
Normal file
14
_module/nss/leveltake5.nss
Normal file
@@ -0,0 +1,14 @@
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetPCSpeaker();
|
||||
int nLevels = 5;
|
||||
int nOrigXP = GetXP(oTarget);
|
||||
int nOrigHD = GetHitDice(oTarget);
|
||||
int nTargetHD = nOrigHD - nLevels;
|
||||
SetXP(oTarget, ((nTargetHD * (nTargetHD - 1)) / 2) * 1000);
|
||||
// Schedule the OnLevelDown virtual event to be run right away
|
||||
SetLocalInt(oTarget, "PRC_OnLevelDown_OldLevel", nOrigHD);
|
||||
DelayCommand(0.0f, ExecuteScript("prc_onleveldown", oTarget));
|
||||
SetXP(oTarget, nOrigXP);
|
||||
TakeGoldFromCreature (25000, oTarget);
|
||||
}
|
113
_module/nss/nwnx.nss
Normal file
113
_module/nss/nwnx.nss
Normal file
@@ -0,0 +1,113 @@
|
||||
/// @addtogroup nwnx NWNX
|
||||
/// @brief Functions for plugin developers.
|
||||
/// @{
|
||||
/// @file nwnx.nss
|
||||
|
||||
/// @brief Scripting interface to NWNX.
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
void NWNX_CallFunction(string pluginName, string functionName);
|
||||
/// @brief Pushes the specified type to the c++ side
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
/// @param value The value of specified type to push.
|
||||
void NWNX_PushArgumentInt(string pluginName, string functionName, int value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentFloat(string pluginName, string functionName, float value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentObject(string pluginName, string functionName, object value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentString(string pluginName, string functionName, string value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentEffect(string pluginName, string functionName, effect value);
|
||||
/// @copydoc NWNX_PushArgumentInt()
|
||||
void NWNX_PushArgumentItemProperty(string pluginName, string functionName, itemproperty value);
|
||||
/// @brief Returns the specified type from the c++ side
|
||||
/// @param pluginName The plugin name.
|
||||
/// @param functionName The function name (do not include NWNX_Plugin_).
|
||||
/// @return The value of specified type.
|
||||
int NWNX_GetReturnValueInt(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
float NWNX_GetReturnValueFloat(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
object NWNX_GetReturnValueObject(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
string NWNX_GetReturnValueString(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
effect NWNX_GetReturnValueEffect(string pluginName, string functionName);
|
||||
/// @copydoc NWNX_GetReturnValueInt()
|
||||
itemproperty NWNX_GetReturnValueItemProperty(string pluginName, string functionName);
|
||||
|
||||
/// @private
|
||||
string NWNX_INTERNAL_BuildString(string pluginName, string functionName, string operation)
|
||||
{
|
||||
return "NWNXEE!ABIv2!" + pluginName + "!" + functionName + "!" + operation;
|
||||
}
|
||||
/// @}
|
||||
|
||||
void NWNX_CallFunction(string pluginName, string functionName)
|
||||
{
|
||||
PlaySound(NWNX_INTERNAL_BuildString(pluginName, functionName, "CALL"));
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentInt(string pluginName, string functionName, int value)
|
||||
{
|
||||
SetLocalInt(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentFloat(string pluginName, string functionName, float value)
|
||||
{
|
||||
SetLocalFloat(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentObject(string pluginName, string functionName, object value)
|
||||
{
|
||||
SetLocalObject(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentString(string pluginName, string functionName, string value)
|
||||
{
|
||||
SetLocalString(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"), value);
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentEffect(string pluginName, string functionName, effect value)
|
||||
{
|
||||
TagEffect(value, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"));
|
||||
}
|
||||
|
||||
void NWNX_PushArgumentItemProperty(string pluginName, string functionName, itemproperty value)
|
||||
{
|
||||
TagItemProperty(value, NWNX_INTERNAL_BuildString(pluginName, functionName, "PUSH"));
|
||||
}
|
||||
|
||||
int NWNX_GetReturnValueInt(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalInt(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
float NWNX_GetReturnValueFloat(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalFloat(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
object NWNX_GetReturnValueObject(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalObject(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
string NWNX_GetReturnValueString(string pluginName, string functionName)
|
||||
{
|
||||
return GetLocalString(OBJECT_INVALID, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
effect NWNX_GetReturnValueEffect(string pluginName, string functionName)
|
||||
{
|
||||
effect e;
|
||||
return TagEffect(e, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
||||
|
||||
itemproperty NWNX_GetReturnValueItemProperty(string pluginName, string functionName)
|
||||
{
|
||||
itemproperty ip;
|
||||
return TagItemProperty(ip, NWNX_INTERNAL_BuildString(pluginName, functionName, "POP"));
|
||||
}
|
344
_module/nss/nwnx_admin.nss
Normal file
344
_module/nss/nwnx_admin.nss
Normal file
@@ -0,0 +1,344 @@
|
||||
/// @addtogroup admin Administration
|
||||
/// @brief Various admin related functions
|
||||
/// @{
|
||||
/// @file nwnx_admin.nss
|
||||
#include "nwnx"
|
||||
|
||||
const string NWNX_Administration = "NWNX_Administration"; ///< @private
|
||||
|
||||
/// @name Administration Options
|
||||
/// @anchor admin_opts
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_ADMINISTRATION_OPTION_ALL_KILLABLE = 0; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_NON_PARTY_KILLABLE = 1; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_REQUIRE_RESURRECTION = 2; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_STOLEN_ITEMS = 3; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_ITEMS = 4; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_EXP = 5; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_GOLD = 6; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_GOLD_NUM = 7;
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_EXP_NUM = 8;
|
||||
const int NWNX_ADMINISTRATION_OPTION_LOSE_ITEMS_NUM = 9;
|
||||
const int NWNX_ADMINISTRATION_OPTION_PVP_SETTING = 10; // 0 = No PVP, 1 = Party PVP, 2 = Full PVP
|
||||
const int NWNX_ADMINISTRATION_OPTION_PAUSE_AND_PLAY = 11; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ONE_PARTY_ONLY = 12; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ENFORCE_LEGAL_CHARACTERS = 13; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_ITEM_LEVEL_RESTRICTIONS = 14; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_CDKEY_BANLIST_ALLOWLIST = 15; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_DISALLOW_SHOUTING = 16; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_SHOW_DM_JOIN_MESSAGE = 17; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_BACKUP_SAVED_CHARACTERS = 18; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_AUTO_FAIL_SAVE_ON_1 = 19; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_VALIDATE_SPELLS = 20; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_EXAMINE_EFFECTS = 21; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_EXAMINE_CHALLENGE_RATING = 22; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_USE_MAX_HITPOINTS = 23; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_RESTORE_SPELLS_USES = 24; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_RESET_ENCOUNTER_SPAWN_POOL = 25; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_OPTION_HIDE_HITPOINTS_GAINED = 26; // TRUE/FALSE
|
||||
/// @}
|
||||
|
||||
/// @name Administration Debug Types
|
||||
/// @anchor admin_debug
|
||||
///
|
||||
/// @{
|
||||
const int NWNX_ADMINISTRATION_DEBUG_COMBAT = 0; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_SAVING_THROW = 1; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_MOVEMENT_SPEED = 2; // TRUE/FALSE
|
||||
const int NWNX_ADMINISTRATION_DEBUG_HIT_DIE = 3; // TRUE/FALSE
|
||||
/// @}
|
||||
|
||||
/// @brief Gets the current player password.
|
||||
/// @return The current player password.
|
||||
string NWNX_Administration_GetPlayerPassword();
|
||||
|
||||
/// @brief Sets the password for players to login.
|
||||
/// @param password The password to use.
|
||||
void NWNX_Administration_SetPlayerPassword(string password);
|
||||
|
||||
/// @brief Clears the player password required to login.
|
||||
void NWNX_Administration_ClearPlayerPassword();
|
||||
|
||||
/// @brief Gets the current DM password.
|
||||
/// @return The current DM password.
|
||||
string NWNX_Administration_GetDMPassword();
|
||||
|
||||
/// @brief Sets the password for DMs to login.
|
||||
/// @param password The password to use.
|
||||
void NWNX_Administration_SetDMPassword(string password);
|
||||
|
||||
/// @brief Signals the server to immediately shut down.
|
||||
void NWNX_Administration_ShutdownServer();
|
||||
|
||||
/// @brief Deletes the player character from the servervault
|
||||
///
|
||||
/// The PC will be immediately booted from the game with a "Delete Character" message
|
||||
///
|
||||
/// @param oPC The player to delete.
|
||||
/// @param bPreserveBackup If true, it will leave the file on server, only appending ".deleted0" to the bic filename.
|
||||
/// @param sKickMessage An optional kick message, if left blank it will default to "Delete Character" as reason.
|
||||
void NWNX_Administration_DeletePlayerCharacter(object oPC, int bPreserveBackup = TRUE, string sKickMessage = "");
|
||||
|
||||
/// @brief Bans the provided IP.
|
||||
/// @param ip The IP Address to ban.
|
||||
void NWNX_Administration_AddBannedIP(string ip);
|
||||
|
||||
/// @brief Removes the ban on the provided IP.
|
||||
/// @param ip The IP Address to unban.
|
||||
void NWNX_Administration_RemoveBannedIP(string ip);
|
||||
|
||||
/// @brief Bans the provided Public CD Key.
|
||||
/// @param key The Public CD Key to ban.
|
||||
void NWNX_Administration_AddBannedCDKey(string key);
|
||||
|
||||
/// @brief Removes the ban on the provided Public CD Key.
|
||||
/// @param key The Public CD Key to unban.
|
||||
void NWNX_Administration_RemoveBannedCDKey(string key);
|
||||
|
||||
/// @brief Bans the provided playername.
|
||||
/// @param playerName The player name (community name) to ban.
|
||||
/// @warning A user can change their playername at will.
|
||||
void NWNX_Administration_AddBannedPlayerName(string playerName);
|
||||
|
||||
/// @brief Removes the ban on the provided playername.
|
||||
/// @param playerName The player name (community name) to unban.
|
||||
void NWNX_Administration_RemoveBannedPlayerName(string playerName);
|
||||
|
||||
/// @brief Get a list of all banned IPs/Keys/names as a string.
|
||||
/// @return A string with a listing of the banned IPs/Keys/names.
|
||||
string NWNX_Administration_GetBannedList();
|
||||
|
||||
/// @brief Set the module's name as shown to the serverlist.
|
||||
/// @param name The name to give the module.
|
||||
void NWNX_Administration_SetModuleName(string name);
|
||||
|
||||
/// @brief Set the server's name as shown to the serverlist.
|
||||
/// @param name The name to give the server.
|
||||
void NWNX_Administration_SetServerName(string name);
|
||||
|
||||
/// @brief Returns the server's name as shown to the serverlist.
|
||||
string NWNX_Administration_GetServerName();
|
||||
|
||||
/// @brief Get an @ref admin_opts "Administration Option" value.
|
||||
/// @param option An @ref admin_opts "Administration Option".
|
||||
/// @return The current setting for the supplied option from @ref admin_opts "Administration Options".
|
||||
int NWNX_Administration_GetPlayOption(int option);
|
||||
|
||||
/// @brief Set an @ref admin_opts "Administration Options" to a value.
|
||||
/// @param option The option to adjust from @ref admin_opts "Administration Options".
|
||||
/// @param value The new value for the option.
|
||||
void NWNX_Administration_SetPlayOption(int option, int value);
|
||||
|
||||
/// @brief Delete the TURD of playerName + characterName.
|
||||
///
|
||||
/// At times a PC may get stuck in a permanent crash loop when attempting to log
|
||||
/// in. This function allows administrators to delete their Temporary User
|
||||
/// Resource Data where the PC's current location is stored allowing them to log
|
||||
/// into the starting area.
|
||||
///
|
||||
/// @param playerName The community (login name).
|
||||
/// @param characterName The character name.
|
||||
/// @return Returns TRUE if successful
|
||||
int NWNX_Administration_DeleteTURD(string playerName, string characterName);
|
||||
|
||||
/// @brief Get an @ref admin_debug "Administration Debug Type" value.
|
||||
/// @param type An @ref admin_debug "Administration Debug Type".
|
||||
/// @return The current value for the supplied debug type from @ref admin_debug "Administration Debug Types".
|
||||
int NWNX_Administration_GetDebugValue(int type);
|
||||
|
||||
/// @brief Set an @ref admin_debug "Administration Debug Type" to a value.
|
||||
/// @param type The debug type to adjust from @ref admin_debug "Administration Debug Types".
|
||||
/// @param state The new state for the debug type, TRUE or FALSE
|
||||
void NWNX_Administration_SetDebugValue(int type, int state);
|
||||
|
||||
/// @brief Reload all rules (2da stuff etc).
|
||||
/// @warning DANGER, DRAGONS. Bad things may or may not happen.
|
||||
void NWNX_Administration_ReloadRules();
|
||||
|
||||
/// @}
|
||||
|
||||
string NWNX_Administration_GetPlayerPassword()
|
||||
{
|
||||
string sFunc = "GetPlayerPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetPlayerPassword(string password)
|
||||
{
|
||||
string sFunc = "SetPlayerPassword";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, password);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ClearPlayerPassword()
|
||||
{
|
||||
string sFunc = "ClearPlayerPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Administration_GetDMPassword()
|
||||
{
|
||||
string sFunc = "GetDMPassword";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetDMPassword(string password)
|
||||
{
|
||||
string sFunc = "SetDMPassword";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, password);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ShutdownServer()
|
||||
{
|
||||
string sFunc = "ShutdownServer";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_DeletePlayerCharacter(object oPC, int bPreserveBackup = TRUE, string sKickMessage = "")
|
||||
{
|
||||
string sFunc = "DeletePlayerCharacter";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, sKickMessage);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, bPreserveBackup);
|
||||
NWNX_PushArgumentObject(NWNX_Administration, sFunc, oPC);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_AddBannedIP(string ip)
|
||||
{
|
||||
string sFunc = "AddBannedIP";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedIP(string ip)
|
||||
{
|
||||
string sFunc = "RemoveBannedIP";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, ip);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_AddBannedCDKey(string key)
|
||||
{
|
||||
string sFunc = "AddBannedCDKey";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, key);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedCDKey(string key)
|
||||
{
|
||||
string sFunc = "RemoveBannedCDKey";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, key);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_AddBannedPlayerName(string playerName)
|
||||
{
|
||||
string sFunc = "AddBannedPlayerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
void NWNX_Administration_RemoveBannedPlayerName(string playerName)
|
||||
{
|
||||
string sFunc = "RemoveBannedPlayerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
string NWNX_Administration_GetBannedList()
|
||||
{
|
||||
string sFunc = "GetBannedList";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetModuleName(string name)
|
||||
{
|
||||
string sFunc = "SetModuleName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, name);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetServerName(string name)
|
||||
{
|
||||
string sFunc = "SetServerName";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, name);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
string NWNX_Administration_GetServerName()
|
||||
{
|
||||
string sFunc = "GetServerName";
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
return NWNX_GetReturnValueString(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_GetPlayOption(int option)
|
||||
{
|
||||
string sFunc = "GetPlayOption";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, option);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetPlayOption(int option, int value)
|
||||
{
|
||||
string sFunc = "SetPlayOption";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, value);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, option);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_DeleteTURD(string playerName, string characterName)
|
||||
{
|
||||
string sFunc = "DeleteTURD";
|
||||
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, characterName);
|
||||
NWNX_PushArgumentString(NWNX_Administration, sFunc, playerName);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
int NWNX_Administration_GetDebugValue(int type)
|
||||
{
|
||||
string sFunc = "GetDebugValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, type);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
|
||||
return NWNX_GetReturnValueInt(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_SetDebugValue(int type, int state)
|
||||
{
|
||||
string sFunc = "SetDebugValue";
|
||||
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, state);
|
||||
NWNX_PushArgumentInt(NWNX_Administration, sFunc, type);
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
||||
|
||||
void NWNX_Administration_ReloadRules()
|
||||
{
|
||||
string sFunc = "ReloadRules";
|
||||
|
||||
NWNX_CallFunction(NWNX_Administration, sFunc);
|
||||
}
|
123
_module/nss/sql_db_partywide.nss
Normal file
123
_module/nss/sql_db_partywide.nss
Normal file
@@ -0,0 +1,123 @@
|
||||
//:://////////////////////////////////////////////////
|
||||
//:: SQL_DB_PARTYWIDE
|
||||
/*
|
||||
Modified x0_i0_partywide include library for
|
||||
persistent party-wide database functions.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////////
|
||||
//:: Copyright (c) 2002 Floodgate Entertainment
|
||||
//:: Created By: Naomi Novik
|
||||
//:: Created On: 12/08/2002
|
||||
//:: Modified By: Jaysyn
|
||||
//:: Modified On: 11/16/2022
|
||||
//:://////////////////////////////////////////////////
|
||||
|
||||
#include "utl_i_sqluuid"
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* CONSTANTS
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION PROTOTYPES
|
||||
**********************************************************************/
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For strings.
|
||||
void SQL_SetLocalStringOnAll(object oPC, string sVarname, string value);
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For ints.
|
||||
void SQL_SetLocalIntOnAll(object oPC, string sVarname, int value);
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For floats.
|
||||
void SQL_SetLocalFloatOnAll(object oPC, string sVarname, float value);
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For locations.
|
||||
void SQL_SetLocalLocationOnAll(object oPC, string sVarname, location value);
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For objects.
|
||||
void SQL_SetLocalObjectOnAll(object oPC, string sVarname, object value);
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* FUNCTION DEFINITIONS
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party, including associates.
|
||||
// For strings.
|
||||
void SQL_SetLocalStringOnAll(object oPC, string sVarname, string value)
|
||||
{
|
||||
object oPartyMem = GetFirstFactionMember(oPC, FALSE);
|
||||
while (GetIsObjectValid(oPartyMem)) {
|
||||
SQLocalsUUID_SetString(oPartyMem, sVarname, value);
|
||||
oPartyMem = GetNextFactionMember(oPC, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party, including associates.
|
||||
// For ints.
|
||||
void SQL_SetLocalIntOnAll(object oPC, string sVarname, int value)
|
||||
{
|
||||
object oPartyMem = GetFirstFactionMember(oPC, FALSE);
|
||||
while (GetIsObjectValid(oPartyMem)) {
|
||||
SQLocalsUUID_SetInt(oPartyMem, sVarname, value);
|
||||
oPartyMem = GetNextFactionMember(oPC, FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For floats.
|
||||
void SQL_SetLocalFloatOnAll(object oPC, string sVarname, float value)
|
||||
{
|
||||
object oPartyMem = GetFirstFactionMember(oPC, FALSE);
|
||||
while (GetIsObjectValid(oPartyMem)) {
|
||||
SQLocalsUUID_SetFloat(oPartyMem, sVarname, value);
|
||||
oPartyMem = GetNextFactionMember(oPC, FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For locations.
|
||||
void SQL_SetLocalLocationOnAll(object oPC, string sVarname, location value)
|
||||
{
|
||||
object oPartyMem = GetFirstFactionMember(oPC, FALSE);
|
||||
while (GetIsObjectValid(oPartyMem)) {
|
||||
SQLocalsUUID_SetLocation(oPartyMem, sVarname, value);
|
||||
oPartyMem = GetNextFactionMember(oPC, FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Given a varname, value, and PC, sets the variable on
|
||||
// all members of the PC's party.
|
||||
// For objects.
|
||||
void SQL_SetLocalObjectOnAll(object oPC, string sVarname, object value)
|
||||
{
|
||||
object oPartyMem = GetFirstFactionMember(oPC, FALSE);
|
||||
while (GetIsObjectValid(oPartyMem)) {
|
||||
SQLocalsUUID_SetObject(oPartyMem, sVarname, value);
|
||||
oPartyMem = GetNextFactionMember(oPC, FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// void main (){}
|
668
_module/nss/utl_i_sqluuid.nss
Normal file
668
_module/nss/utl_i_sqluuid.nss
Normal file
@@ -0,0 +1,668 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Utility Include: SQLocals Campaign
|
||||
//:: utl_i_sqluuid.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Daz wrote these library functions to act as replacements for the usual local
|
||||
functions:
|
||||
* GetLocalInt / SetLocalInt / DeleteLocalInt
|
||||
* GetLocalFloat / SetLocalFloat / DeleteLocalFloat
|
||||
* GetLocalString / SetLocalString / DeleteLocalString
|
||||
* GetLocalObject / SetLocalObject / DeleteLocalObject (NB: remember these are references NOT serialised objects)
|
||||
* GetLocalLocation / SetLocalLocation / DeleteLocalLocation
|
||||
* Plus a new function for saving just a vector by itself.
|
||||
This version stores variables in the campaign DB using the UUID of the object as
|
||||
the identifier, therefore it suggests only using this for oPlayer since their UUIDs
|
||||
are persistent after server restarts.
|
||||
Note for players existing OnClientLeave this is still valid, while the
|
||||
versions in utl_i_sqlplayer is not.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Based off of the nwscript_utility_scripts project; see for dates/creator info
|
||||
//:: https://github.com/Finaldeath/nwscript_utility_scripts
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
const string SQLLOCALUUID_DATABASE_NAME = "sqllocalsuuid_db";
|
||||
|
||||
const string SQLOCALSUUID_TABLE_NAME = "sqlocalsuuid_table";
|
||||
|
||||
const int SQLOCALSUUID_TYPE_ALL = 0;
|
||||
const int SQLOCALSUUID_TYPE_INT = 1;
|
||||
const int SQLOCALSUUID_TYPE_FLOAT = 2;
|
||||
const int SQLOCALSUUID_TYPE_STRING = 4;
|
||||
const int SQLOCALSUUID_TYPE_OBJECT = 8;
|
||||
const int SQLOCALSUUID_TYPE_VECTOR = 16;
|
||||
const int SQLOCALSUUID_TYPE_LOCATION = 32;
|
||||
|
||||
// Returns an integer stored in the campaign DB for oPlayer, or 0 on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
int SQLocalsUUID_GetInt(object oPlayer, string sVarName);
|
||||
// Sets an integer stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * nValue - Value to store
|
||||
void SQLocalsUUID_SetInt(object oPlayer, string sVarName, int nValue);
|
||||
// Deletes an integer stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteInt(object oPlayer, string sVarName);
|
||||
|
||||
// Returns a float stored in the campaign DB for oPlayer, or 0.0 on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
float SQLocalsUUID_GetFloat(object oPlayer, string sVarName);
|
||||
// Sets a float stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * fValue - Value to store
|
||||
void SQLocalsUUID_SetFloat(object oPlayer, string sVarName, float fValue);
|
||||
// Deletes a float stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteFloat(object oPlayer, string sVarName);
|
||||
|
||||
// Returns an string stored in the campaign DB for oPlayer, or "" on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
string SQLocalsUUID_GetString(object oPlayer, string sVarName);
|
||||
// Sets a string stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * sValue - Value to store
|
||||
void SQLocalsUUID_SetString(object oPlayer, string sVarName, string sValue);
|
||||
// Deletes a string stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteString(object oPlayer, string sVarName);
|
||||
|
||||
// Returns an object identifier stored in the campaign DB for oPlayer
|
||||
// If this is used on a player it might return a "once valid" OID, so check
|
||||
// with GetIsObjectValid, do not compare to OBJECT_INVALID.
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
object SQLocalsUUID_GetObject(object oPlayer, string sVarName);
|
||||
// Sets an object identifier stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * oValue - Value to store
|
||||
void SQLocalsUUID_SetObject(object oPlayer, string sVarName, object oValue);
|
||||
// Deletes an object identifier stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteObject(object oPlayer, string sVarName);
|
||||
|
||||
// Returns a vector stored in the campaign DB for oPlayer, or [0.0, 0.0, 0.0] on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
vector SQLocalsUUID_GetVector(object oPlayer, string sVarName);
|
||||
// Sets a vector stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * vValue - Value to store
|
||||
void SQLocalsUUID_SetVector(object oPlayer, string sVarName, vector vValue);
|
||||
// Deletes a vector stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteVector(object oPlayer, string sVarName);
|
||||
|
||||
// Returns a location stored in the campaign DB for oPlayer, or the starting location of the module on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
location SQLocalsUUID_GetLocation(object oPlayer, string sVarName);
|
||||
// Sets a location stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to set
|
||||
// * lValue - Value to store
|
||||
void SQLocalsUUID_SetLocation(object oPlayer, string sVarName, location lValue);
|
||||
// Deletes a location stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteLocation(object oPlayer, string sVarName);
|
||||
|
||||
// Deletes a set of locals stored in the campaign DB for oPlayer matching the given criteria
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to remove (default: SQLOCALSUUID_TYPE_ALL)
|
||||
// * sLike - The string to compare with the SQL "like" comparison
|
||||
// * sEscape - The escape character to use with the SQL "escape" keyword
|
||||
void SQLocalsUUID_Delete(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "");
|
||||
// Counts a set of locals stored in the campaign DB for oPlayer matching the given criteria
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to count (default: SQLOCALSUUID_TYPE_ALL)
|
||||
// * sLike - The string to compare with the SQL "like" comparison
|
||||
// * sEscape - The escape character to use with the SQL "escape" keyword
|
||||
int SQLocalsUUID_Count(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "");
|
||||
// Checks a locals stored in the campaign DB for oPlayer is set
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check
|
||||
int SQLocalsUUID_IsSet(object oPlayer, string sVarName, int nType);
|
||||
// Returns the last Unix time the given variable was updated
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check
|
||||
int SQLocalsUUID_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType);
|
||||
// Returns the last UTC time the given variable was updated
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check
|
||||
string SQLocalsUUID_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType);
|
||||
|
||||
|
||||
/* INTERNAL */
|
||||
void SQLocalsUUID_CreateTable()
|
||||
{
|
||||
sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME,
|
||||
"CREATE TABLE IF NOT EXISTS " + SQLOCALSUUID_TABLE_NAME + " (" +
|
||||
"type INTEGER, " +
|
||||
"uuid TEXT, " +
|
||||
"varname TEXT, " +
|
||||
"value TEXT, " +
|
||||
"timestamp INTEGER, " +
|
||||
"PRIMARY KEY(type, uuid, varname));");
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
sqlquery SQLocalsUUID_PrepareSelect(object oPlayer, int nType, string sVarName)
|
||||
{
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME,
|
||||
"SELECT value FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE type = @type AND uuid = @uuid AND varname = @varname;");
|
||||
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
sqlquery SQLocalsUUID_PrepareInsert(object oPlayer, int nType, string sVarName)
|
||||
{
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME,
|
||||
"INSERT INTO " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"(type, uuid, varname, value, timestamp) VALUES (@type, @uuid, @varname, @value, strftime('%s','now')) " +
|
||||
"ON CONFLICT (type, uuid, varname) DO UPDATE SET value = @value, timestamp = strftime('%s','now');");
|
||||
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
sqlquery SQLocalsUUID_PrepareDelete(object oPlayer, int nType, string sVarName)
|
||||
{
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME,
|
||||
"DELETE FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE type = @type AND uuid = @uuid AND varname = @varname;");
|
||||
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
string SQLocalsUUID_LocationToString(location locLocation)
|
||||
{
|
||||
string sAreaId = ObjectToString(GetAreaFromLocation(locLocation));
|
||||
vector vPosition = GetPositionFromLocation(locLocation);
|
||||
float fFacing = GetFacingFromLocation(locLocation);
|
||||
|
||||
return "#A#" + sAreaId +
|
||||
"#X#" + FloatToString(vPosition.x, 0, 5) +
|
||||
"#Y#" + FloatToString(vPosition.y, 0, 5) +
|
||||
"#Z#" + FloatToString(vPosition.z, 0, 5) +
|
||||
"#F#" + FloatToString(fFacing, 0, 5) + "#";
|
||||
}
|
||||
|
||||
location SQLocalsUUID_StringToLocation(string sLocation)
|
||||
{
|
||||
location locLocation;
|
||||
|
||||
int nLength = GetStringLength(sLocation);
|
||||
|
||||
if(nLength > 0)
|
||||
{
|
||||
int nPos, nCount;
|
||||
|
||||
nPos = FindSubString(sLocation, "#A#") + 3;
|
||||
nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#");
|
||||
object oArea = StringToObject(GetSubString(sLocation, nPos, nCount));
|
||||
|
||||
nPos = FindSubString(sLocation, "#X#") + 3;
|
||||
nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#");
|
||||
float fX = StringToFloat(GetSubString(sLocation, nPos, nCount));
|
||||
|
||||
nPos = FindSubString(sLocation, "#Y#") + 3;
|
||||
nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#");
|
||||
float fY = StringToFloat(GetSubString(sLocation, nPos, nCount));
|
||||
|
||||
nPos = FindSubString(sLocation, "#Z#") + 3;
|
||||
nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#");
|
||||
float fZ = StringToFloat(GetSubString(sLocation, nPos, nCount));
|
||||
|
||||
vector vPosition = Vector(fX, fY, fZ);
|
||||
|
||||
nPos = FindSubString(sLocation, "#F#") + 3;
|
||||
nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#");
|
||||
float fOrientation = StringToFloat(GetSubString(sLocation, nPos, nCount));
|
||||
|
||||
if (GetIsObjectValid(oArea))
|
||||
locLocation = Location(oArea, vPosition, fOrientation);
|
||||
else
|
||||
locLocation = GetStartingLocation();
|
||||
}
|
||||
|
||||
return locLocation;
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* INT */
|
||||
|
||||
// Returns an integer stored in the campaign DB for oPlayer, or 0 on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
int SQLocalsUUID_GetInt(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return 0;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetInt(sql, 0);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Sets an integer stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nValue - Value to store
|
||||
void SQLocalsUUID_SetInt(object oPlayer, string sVarName, int nValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName);
|
||||
SqlBindInt(sql, "@value", nValue);
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes an integer stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteInt(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* FLOAT */
|
||||
|
||||
// Returns a float stored in the campaign DB for oPlayer, or 0.0 on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
float SQLocalsUUID_GetFloat(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return 0.0f;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetFloat(sql, 0);
|
||||
else
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
// Sets a float stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * fValue - Value to store
|
||||
void SQLocalsUUID_SetFloat(object oPlayer, string sVarName, float fValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName);
|
||||
SqlBindFloat(sql, "@value", fValue);
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes a float stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteFloat(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* STRING */
|
||||
|
||||
// Returns an string stored in the campaign DB for oPlayer, or "" on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
string SQLocalsUUID_GetString(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return "";
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetString(sql, 0);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
// Sets a string stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * sValue - Value to store
|
||||
void SQLocalsUUID_SetString(object oPlayer, string sVarName, string sValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName);
|
||||
SqlBindString(sql, "@value", sValue);
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes a string stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteString(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* OBJECT */
|
||||
|
||||
|
||||
// Returns an object identifier stored in the campaign DB for oPlayer
|
||||
// If this is used on a player it might return a "once valid" OID, so check
|
||||
// with GetIsObjectValid, do not compare to OBJECT_INVALID.
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
object SQLocalsUUID_GetObject(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return OBJECT_INVALID;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return StringToObject(SqlGetString(sql, 0));
|
||||
else
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
|
||||
// Sets an object identifier stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * oValue - Value to store
|
||||
void SQLocalsUUID_SetObject(object oPlayer, string sVarName, object oValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName);
|
||||
SqlBindString(sql, "@value", ObjectToString(oValue));
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes an object identifier stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteObject(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* VECTOR */
|
||||
|
||||
// Returns a vector stored in the campaign DB for oPlayer, or [0.0, 0.0, 0.0] on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
vector SQLocalsUUID_GetVector(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return [0.0f, 0.0f, 0.0f];
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetVector(sql, 0);
|
||||
else
|
||||
return [0.0f, 0.0f, 0.0f];
|
||||
}
|
||||
|
||||
// Sets a vector stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * vValue - Value to store
|
||||
void SQLocalsUUID_SetVector(object oPlayer, string sVarName, vector vValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName);
|
||||
SqlBindVector(sql, "@value", vValue);
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes a vector stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteVector(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* LOCATION */
|
||||
|
||||
// Returns a location stored in the campaign DB for oPlayer, or the starting location of the module on error
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
location SQLocalsUUID_GetLocation(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return GetStartingLocation();
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SQLocalsUUID_StringToLocation(SqlGetString(sql, 0));
|
||||
else
|
||||
return GetStartingLocation();
|
||||
}
|
||||
|
||||
// Sets a location stored in the campaign DB for oPlayer to the given value
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * lValue - Value to store
|
||||
void SQLocalsUUID_SetLocation(object oPlayer, string sVarName, location lValue)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName);
|
||||
SqlBindString(sql, "@value", SQLocalsUUID_LocationToString(lValue));
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Deletes a location stored in the campaign DB for oPlayer
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to delete
|
||||
void SQLocalsUUID_DeleteLocation(object oPlayer, string sVarName)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || sVarName == "") return;
|
||||
|
||||
sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName);
|
||||
SqlStep(sql);
|
||||
}
|
||||
/* **** */
|
||||
|
||||
/* UTILITY */
|
||||
|
||||
// Deletes a set of locals stored in the campaign DB for oPlayer matching the given criteria
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to remove (default: SQLOCALSUUID_TYPE_ALL)
|
||||
// * sLike - The string to compare with the SQL "like" comparison
|
||||
// * sEscape - The escape character to use with the SQL "escape" keyword
|
||||
void SQLocalsUUID_Delete(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "")
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || nType < 0) return;
|
||||
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME,
|
||||
"DELETE FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE uuid = @uuid" +
|
||||
(nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") +
|
||||
(sLike != "" ? "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") : "") +
|
||||
";");
|
||||
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
|
||||
if (nType != SQLOCALSUUID_TYPE_ALL)
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
if (sLike != "")
|
||||
{
|
||||
SqlBindString(sql, "@like", sLike);
|
||||
|
||||
if (sEscape != "")
|
||||
SqlBindString(sql, "@escape", sEscape);
|
||||
}
|
||||
|
||||
SqlStep(sql);
|
||||
}
|
||||
|
||||
// Counts a set of locals stored in the campaign DB for oPlayer matching the given criteria
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to count (default: SQLOCALSUUID_TYPE_ALL)
|
||||
// * sLike - The string to compare with the SQL "like" comparison
|
||||
// * sEscape - The escape character to use with the SQL "escape" keyword
|
||||
int SQLocalsUUID_Count(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "")
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || nType < 0) return 0;
|
||||
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryObject(oPlayer,
|
||||
"SELECT COUNT(*) FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE uuid = @uuid " +
|
||||
(nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") +
|
||||
(sLike != "" ? "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") : "") +
|
||||
";");
|
||||
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
|
||||
if (nType != SQLOCALSUUID_TYPE_ALL)
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
if (sLike != "")
|
||||
{
|
||||
SqlBindString(sql, "@like", sLike);
|
||||
|
||||
if (sEscape != "")
|
||||
SqlBindString(sql, "@escape", sEscape);
|
||||
}
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetInt(sql, 0);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Checks a locals stored in the campaign DB for oPlayer is set
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL)
|
||||
int SQLocalsUUID_IsSet(object oPlayer, string sVarName, int nType)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || nType < 0) return 0;
|
||||
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryObject(oPlayer,
|
||||
"SELECT * FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE uuid = @uuid " +
|
||||
(nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") +
|
||||
"AND varname = @varname;");
|
||||
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
|
||||
if (nType != SQLOCALSUUID_TYPE_ALL)
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
return SqlStep(sql);
|
||||
}
|
||||
|
||||
// Returns the last Unix time the given variable was updated
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL)
|
||||
int SQLocalsUUID_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || nType <= 0) return 0;
|
||||
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryObject(oPlayer,
|
||||
"SELECT timestamp FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE type = @type " +
|
||||
"AND uuid = @uuid" +
|
||||
"AND varname = @varname;");
|
||||
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetInt(sql, 0);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Returns the last UTC time the given variable was updated
|
||||
// * oPlayer - a player object (uses GetObjectUUID to identify)
|
||||
// * sVarName - name of the variable to retrieve
|
||||
// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL)
|
||||
string SQLocalsUUID_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType)
|
||||
{
|
||||
if (!GetIsPC(oPlayer) || nType <= 0) return "";
|
||||
|
||||
SQLocalsUUID_CreateTable();
|
||||
|
||||
sqlquery sql = SqlPrepareQueryObject(oPlayer,
|
||||
"SELECT datetime(timestamp, 'unixepoch') FROM " + SQLOCALSUUID_TABLE_NAME + " " +
|
||||
"WHERE type = @type " +
|
||||
"AND uuid = @uuid" +
|
||||
"AND varname = @varname;");
|
||||
|
||||
SqlBindInt(sql, "@type", nType);
|
||||
SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer));
|
||||
SqlBindString(sql, "@varname", sVarName);
|
||||
|
||||
if (SqlStep(sql))
|
||||
return SqlGetString(sql, 0);
|
||||
else
|
||||
return "";
|
||||
}
|
Reference in New Issue
Block a user