Aschbourne_PRC8/_module/nss/dmfi_onplychat.nss
Jaysyn904 5d27edafba Major update
Fixed CCOH, Fixed starting GP, Fixed DMFI languages, Fix cep weapon appearances, Fixed new player start up system.  Added PC deleter.  Added ACP 4.1.  Full compile.  Updated release archive.
2024-09-16 23:40:48 -04:00

80 lines
3.1 KiB
Plaintext

//::///////////////////////////////////////////////
//:: DMFI - OnPlayerChat event handler
//:: dmfi_onplychat
//:://////////////////////////////////////////////
/*
Event handler for the module-level OnPlayerChat event. Manages scripter-added
event scripts.
*/
//:://////////////////////////////////////////////
//:: Created By: Merle, with help from mykael22000 and tsunami282
//:: Created On: 2007.12.12
//:://////////////////////////////////////////////
//:: 2007.12.27 tsunami282 - implemented hooking tree
#include "dmfi_plychat_inc"
const string DMFI_PLAYERCHAT_SCRIPTNAME = "dmfi_plychat_exe";
////////////////////////////////////////////////////////////////////////
void main()
{
int nVolume = GetPCChatVolume();
object oShouter = GetPCChatSpeaker();
int bInvoke;
string sChatHandlerScript;
int maskChannels;
// int bListenAll;
object oRunner;
int bAutoRemove;
int bDirtyList = FALSE;
int iHook;
object oMod = GetModule();
// SendMessageToPC(GetFirstPC(), "OnPlayerChat - process hooks");
int nHooks = GetLocalArrayUpperBound(oMod, DMFI_CHATHOOK_HANDLE_ARRAYNAME);
for (iHook = nHooks; iHook > 0; iHook--) // reverse-order execution, last hook gets first dibs
{
// SendMessageToPC(GetFirstPC(), "OnPlayerChat -- process hook #" + IntToString(iHook));
maskChannels = GetLocalArrayInt(oMod, DMFI_CHATHOOK_CHANNELS_ARRAYNAME, iHook);
// SendMessageToPC(GetFirstPC(), "OnPlayerChat -- channel heard=" + IntToString(nVolume) + ", soughtmask=" + IntToString(maskChannels));
if (((1 << nVolume) & maskChannels) != 0) // right channel
{
// SendMessageToPC(GetFirstPC(), "OnPlayerChat --- channel matched");
bInvoke = FALSE;
if (GetLocalArrayInt(oMod, DMFI_CHATHOOK_LISTENALL_ARRAYNAME, iHook) != FALSE)
{
bInvoke = TRUE;
}
else
{
object oDesiredSpeaker = GetLocalArrayObject(oMod, DMFI_CHATHOOK_SPEAKER_ARRAYNAME, iHook);
if (oShouter == oDesiredSpeaker) bInvoke = TRUE;
}
if (bInvoke) // right speaker
{
// SendMessageToPC(GetFirstPC(), "OnPlayerChat --- speaker matched");
sChatHandlerScript = GetLocalArrayString(oMod, DMFI_CHATHOOK_SCRIPT_ARRAYNAME, iHook);
oRunner = GetLocalArrayObject(oMod, DMFI_CHATHOOK_RUNNER_ARRAYNAME, iHook);
// SendMessageToPC(GetFirstPC(), "OnPlayerChat --- executing script '" + sChatHandlerScript + "' on object '" + GetName(oRunner) +"'");
ExecuteScript(sChatHandlerScript, oRunner);
bAutoRemove = GetLocalArrayInt(oMod, DMFI_CHATHOOK_AUTOREMOVE_ARRAYNAME, iHook);
if (bAutoRemove)
{
// SendMessageToPC(GetFirstPC(), "OnPlayerChat --- scheduling autoremove");
bDirtyList = TRUE;
SetLocalArrayInt(oMod, DMFI_CHATHOOK_HANDLE_ARRAYNAME, iHook, 0);
}
}
}
}
if (bDirtyList) DMFI_ChatHookRemove(0);
// always execute the DMFI parser
ExecuteScript(DMFI_PLAYERCHAT_SCRIPTNAME, OBJECT_SELF);
}