ff_u_chat_pc_dbg
Enables standard actions in debug mode.
Todo
Final review of ff_u_chat_pc_dbg.nss
Enables standard actions via chat commands when in debug mode.
Enables /debug <dmpassword>` set PC in debug mode
Enables ``/give <resref> give object to PC
Enables /givegold <number> give number gold to PC
Enables /givexp <number> give number xp to PC
Enables /goto <area> goto WP_GOTO in area
Enables /haste set haste on PC
Enables /identify identify all items
Enables /level set level
Enables /spawn <resref> spawn a creature
Enables /time <number> add number hours to game
Variables
ENABLE__FF_U_CHAT_DBG: (int) (opt-out) Set to -1 on module to disable unit.
Source code
// @code
#include "ff_i_core"
const string ENABLE__FF_U_CHAT_DBG = "ENABLE__FF_U_CHAT_DBG";
// -----------------------------------------------------------------------------
void OnHelp();
void OnHelp()
{
object oSpeaker = GetPCChatSpeaker();
string C1 = CHAT_COLOR_DEBUG;
string C2 = CHAT_COLOR_SERVER;
if (!GetIsDebug())
return;
SendMessageToPC(oSpeaker, _RGB("/dump STRING: ", C1) + _RGB("Dump [i]nventory, [v]ariables", C2));
SendMessageToPC(oSpeaker, _RGB("/give STRING: ", C1) + _RGB("Create item on PC.", C2));
SendMessageToPC(oSpeaker, _RGB("/gold INT: ", C1) + _RGB("Give *integer* gold.", C2));
SendMessageToPC(oSpeaker, _RGB("/goto STRING: ", C1) + _RGB("Goto area.", C2));
SendMessageToPC(oSpeaker, _RGB("/identify: ", C1) + _RGB("Execute identify all", C2));
SendMessageToPC(oSpeaker, _RGB("/level INT: ", C1) + _RGB("Set PC level to INT", C2));
SendMessageToPC(oSpeaker, _RGB("/time INT: ", C1) + _RGB("Add or remove hours.", C2));
}
// -----------------------------------------------------------------------------
void OnChat();
void OnChat()
{
object oModule = GetModule();
object oSpeaker = GetPCChatSpeaker();
string sMessage = GetPCChatMessage();
sMessage = GetStringTrim(GetStringLowerCase(sMessage));
if (sMessage == "")
return;
struct CLI_ARGUMENTS sArgs = GetArguments(sMessage);
// =========================
if (!(GetIsDebug()))
return;
// =========================
if (sArgs.sArg0 == "/dump")
{
if (sArgs.sArg1 == "i")
{
object oItem = GetFirstItemInInventory(oSpeaker);
while (GetIsObjectValid(oItem))
{
NWNX_Util_RawPrint(GetObjectInfo(oItem));
oItem = GetNextItemInInventory(oSpeaker);
}
}
else if (sArgs.sArg1 == "v")
LogLocalVars(oSpeaker);
SetPCChatMessage("");
}
/* TODO
if (sArgs.sArg0 == "/give")
{
string sResRef = sArgs.sArg1;
object oItem = CreateItemOnObjectEx(sResRef, oSpeaker);
LogWarning("Player " + GetObjectInfo(oSpeaker) + " /gave object '" + sResRef + "'");
SetPCChatMessage("");
return;
}
*/
if (sArgs.sArg0 == "/gold")
{
string sGold = sArgs.sArg1;
GiveGoldToCreature(oSpeaker, StringToInt(sGold));
LogWarning("Player " + GetObjectInfo(oSpeaker) + " /gave " + sGold + " gold");
SetPCChatMessage("");
return;
}
if (sArgs.sArg0 == "/identify")
{
object oItem = GetFirstItemInInventory(oSpeaker);
while (GetIsObjectValid(oItem))
{
SetIdentified(oItem, TRUE);
oItem = GetNextItemInInventory(oSpeaker);
}
SetPCChatMessage("");
return;
}
if (sArgs.sArg0 == "/level")
{
int nLevel = StringToInt(sArgs.sArg1);
if (nLevel < 0 || nLevel > 40)
SendFailureMessage(oSpeaker, "error: '" + IntToString(nLevel) + "' is not a valid number.");
else
{
NWNX_Events_PushEventData("XP_SKIP_EVENT", "Y");
SetXP(oSpeaker, GetXPForLevel(nLevel));
}
LogWarning("Player " + GetObjectInfo(oSpeaker) + " /level " + IntToString(nLevel));
SetPCChatMessage("");
return;
}
if (sArgs.sArg0 == "/time")
{
if (GetStringIsInt(sArgs.sArg1) && StringToInt(sArgs.sArg1))
{
int nHour = GetTimeHour() + StringToInt(sArgs.sArg1);
int nMinute = GetTimeMinute();
int nSeconds = GetTimeSecond();
// Avoid time events with a pause, and a extra second
// SetGameActivePause(2); FIXME
SetTime(nHour, nMinute, nSeconds + 1, 0);
// SetGameActivePause(0); // FIXME
NWNX_Events_SignalEvent(ON_CALENDAR_TIME_CHANGED, GetModule());
LogWarning("Player " + GetObjectInfo(oSpeaker) + " /time " + IntToString(nHour));
}
string sMessage = "Current datetime: " + GetGameDate() + " " + GetGameTime();
SendMessage(oSpeaker, sMessage, MESSAGE_COLOR_SUCCESS);
SetPCChatMessage("");
return;
}
}
// -----------------------------------------------------------------------------
void main()
{
if (!GetModuleFlag(ENABLE__FF_U_CHAT_DBG, TRUE))
return;
if (!GetIsDebug())
return;
string sEvent = NWNX_Events_GetCurrentEvent();
if (sEvent == ON_REGISTER)
{
SubscribeToEvent(ON_DEFAULT_PLAYER_CHAT, __FILE__);
SubscribeToEvent(ON_DEFAULT_PLAYER_CHAT_HELP, __FILE__);
}
else if (sEvent == ON_DEFAULT_PLAYER_CHAT)
OnChat();
else if (sEvent == ON_DEFAULT_PLAYER_CHAT_HELP)
OnHelp();
}