Aschbourne_PRC8/_module/nss/dmfi_plchlishk_i.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

118 lines
4.9 KiB
Plaintext

//::///////////////////////////////////////////////
//:: DMFI - internal player chat listener hooking include
//:: dmfi_plchlishk_i
//:://////////////////////////////////////////////
/*
Include file containing routines for managing the internal DMFI chain of
"listeners", which are now implemented as OnPlayerChat event handlers rather
than creatures.
*/
//:://////////////////////////////////////////////
//:: Created By: tsunami282
//:: Created On: 2008.03.24
//:://////////////////////////////////////////////
const int DMFI_LISTEN_ON_CHANNEL_TALK = 1;
const int DMFI_LISTEN_ON_CHANNEL_WHISPER = 1;
const int DMFI_LISTEN_ON_CHANNEL_SHOUT = 1;
const int DMFI_LISTEN_ON_CHANNEL_DM = 1;
const int DMFI_LISTEN_ON_CHANNEL_PARTY = 1;
const string DMFI_EAVESDROP_HOOK_VARNAME = "dmfi_Eavesdrop";
const float WHISPER_DISTANCE = 1.0;
const float TALK_DISTANCE = 30.0;
string sHookTypeVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_Type"; // 1=PC (says), 2=NPC/location (hears)
string sHookCreatureVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_Creature"; // must be valid for type 1, for type 2 object_invalid means location only
string sHookRangeModeVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_RangeMode"; // listening range: for type 1, 0=pc only, 1=pc's party; for type 2, 0=earshot, 1=area, 2=module
string sHookLocationVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_Location"; // for type 2, location of "listening post"
string sHookChannelsVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_Channels"; // bitmask of TALKVOLUME channels to listen to
string sHookOwnerVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_Owner"; // unique ID of owner of this hook (he who will get the captured text)
string sHookBcastDMsVarname = DMFI_EAVESDROP_HOOK_VARNAME + "_BcastDMs"; // 0=relay message to owner only, 1=broadcast to all DMs
////////////////////////////////////////////////////////////////////////
void RemoveListenerHook(int hooknum)
{
int hooktype;
object hookcreature;
location hooklocation;
int hookchannels;
object hookowner;
int hookparty, hookbcast;
int iHook = hooknum;
string siHook = "", siHookN = "";
object oMod = GetModule();
while (1)
{
siHook = IntToString(iHook);
siHookN = IntToString(iHook+1);
hooktype = GetLocalInt(oMod, sHookTypeVarname+siHookN);
if (hooktype != 0)
{
hookcreature = GetLocalObject(oMod, sHookCreatureVarname+siHookN);
hooklocation = GetLocalLocation(oMod, sHookLocationVarname+siHookN);
hookchannels = GetLocalInt(oMod, sHookChannelsVarname+siHookN);
hookowner = GetLocalObject(oMod, sHookOwnerVarname+siHookN);
hookparty = GetLocalInt(oMod, sHookRangeModeVarname+siHookN);
hookbcast = GetLocalInt(oMod, sHookBcastDMsVarname+siHookN);
SetLocalInt(oMod, sHookTypeVarname+siHook, hooktype);
SetLocalObject(oMod, sHookCreatureVarname+siHook, hookcreature);
SetLocalLocation(oMod, sHookLocationVarname+siHook, hooklocation);
SetLocalInt(oMod, sHookChannelsVarname+siHook, hookchannels);
SetLocalObject(oMod, sHookOwnerVarname+siHook, hookowner);
SetLocalInt(oMod, sHookRangeModeVarname+siHook, hookparty);
SetLocalInt(oMod, sHookBcastDMsVarname+siHook, hookbcast);
}
else
{
DeleteLocalInt(oMod, sHookTypeVarname+siHook);
DeleteLocalObject(oMod, sHookCreatureVarname+siHook);
DeleteLocalLocation(oMod, sHookLocationVarname+siHook);
DeleteLocalInt(oMod, sHookChannelsVarname+siHook);
DeleteLocalObject(oMod, sHookOwnerVarname+siHook);
DeleteLocalInt(oMod, sHookRangeModeVarname+siHook);
DeleteLocalInt(oMod, sHookBcastDMsVarname+siHook);
break;
}
iHook++;
}
}
////////////////////////////////////////////////////////////////////////
int AppendListenerHook(int hooktype, object hookcreature, location hooklocation,
int hookchannels, int hookparty, int hookbcast, object hookowner)
{
int iHook = 0;
if (hooktype != 0)
{
int iHookType;
string siHook = "";
object oMod = GetModule();
iHook = 1;
while (1)
{
siHook = IntToString(iHook);
iHookType = GetLocalInt(oMod, sHookTypeVarname+siHook);
if (iHookType == 0) break; // end of list
iHook++;
}
SetLocalInt(oMod, sHookTypeVarname+siHook, hooktype);
SetLocalObject(oMod, sHookCreatureVarname+siHook, hookcreature);
SetLocalLocation(oMod, sHookLocationVarname+siHook, hooklocation);
SetLocalInt(oMod, sHookChannelsVarname+siHook, hookchannels);
SetLocalObject(oMod, sHookOwnerVarname+siHook, hookowner);
SetLocalInt(oMod, sHookRangeModeVarname+siHook, hookparty);
SetLocalInt(oMod, sHookBcastDMsVarname+siHook, hookbcast);
}
return iHook;
}