LoT_PRC8/_module/nss/hench_i0_conv.nss
Jaysyn904 ec287507a1 Initial upload
Initial upload.
2023-09-25 21:32:17 -04:00

221 lines
6.8 KiB
Plaintext

/*
Henchman Inventory And Battle AI
This file contains scripts used settings in conversations
*/
// void main() { }
#include "x0_i0_assoc"
const string sHenchAutoRecoverTraps = "AutoRecoverTraps";
const string sHenchAutoOpenLocks = "AutoOpenLocks";
const string sHenchAutoPickup = "AutoPickup";
const string sHenchAutoOpenChest = "AutoOpenChest";
const string sHenchNoDisarmTraps = "NoDisarmTraps";
const string sHenchStealthMode = "X2_HENCH_STEALTH_MODE";
const string sHenchStopCasting = "X2_L_STOPCASTING";
const string sHenchDontDispel = "X2_HENCH_DO_NOT_DISPEL";
const string sHenchSpellChallenge = "NewHenchChallenge";
const string sHenchDisableAutoHide = "HenchDisableAutoHide";
const string sHenchDontSummon = "DontSummon";
const string sHenchDontCastMelee = "DoNotCastMelee";
const string sHenchFamiliarChallenge = "NewFamiliarChallenge";
const string sHenchFamiliarToDeath = "FamiliarToTheDeath";
const string sHenchAniCompChallenge = "NewAniCompChallenge";
const string sHenchAniCompToDeath = "AniCompToTheDeath";
const string sHenchDualWieldState = "DualWieldState";
const string sHenchLightOffHand = "LightOffHand";
const string sHenchHenchRange = "HenchRange";
const string sHenchFamiliarPreStr = "Fam";
const string sHenchAniCompPreStr = "Ani";
const string sHenchSummonPreStr = "Sum";
const string sHenchDominatePreStr = "Dom";
const string sHenchDefSettingsSet = "HENCH_DEF_SETTINGS_SET";
string HenchGetAssocString(int iAssocType)
{
if (iAssocType == ASSOCIATE_TYPE_FAMILIAR)
{
return sHenchFamiliarPreStr;
}
else if (iAssocType == ASSOCIATE_TYPE_ANIMALCOMPANION)
{
return sHenchAniCompPreStr;
}
else if (iAssocType == ASSOCIATE_TYPE_SUMMONED)
{
return sHenchSummonPreStr;
}
else if (iAssocType == ASSOCIATE_TYPE_DOMINATED)
{
return sHenchDominatePreStr;
}
return "null";
}
void HenchSetAssociateInt(string sName, int iValue)
{
SetLocalInt(OBJECT_SELF, sName, iValue);
int iAssocType = GetAssociateType(OBJECT_SELF);
if ((iAssocType == ASSOCIATE_TYPE_NONE) ||
(iAssocType == ASSOCIATE_TYPE_HENCHMAN))
{
return;
}
SetLocalInt(GetPCSpeaker(), HenchGetAssocString(iAssocType) + sName, iValue);
}
void HenchSetAssociateFloat(string sName, float fValue)
{
SetLocalFloat(OBJECT_SELF, sName, fValue);
int iAssocType = GetAssociateType(OBJECT_SELF);
if ((iAssocType == ASSOCIATE_TYPE_NONE) ||
(iAssocType == ASSOCIATE_TYPE_HENCHMAN))
{
return;
}
SetLocalFloat(GetPCSpeaker(), HenchGetAssocString(iAssocType) + sName, fValue);
}
void HenchSetDefSettings()
{
int iAssocType = GetAssociateType(OBJECT_SELF);
if ((iAssocType == ASSOCIATE_TYPE_NONE) ||
(iAssocType == ASSOCIATE_TYPE_HENCHMAN))
{
return;
}
string preDefStr = HenchGetAssocString(iAssocType);
object oPC = GetPCSpeaker();
SetLocalInt(oPC, preDefStr + sAssociateMasterConditionVarname, GetLocalInt(OBJECT_SELF, sAssociateMasterConditionVarname));
SetLocalInt(oPC, preDefStr + sHenchStealthMode, GetLocalInt(OBJECT_SELF, sHenchStealthMode));
SetLocalInt(oPC, preDefStr + sHenchStopCasting, GetLocalInt(OBJECT_SELF, sHenchStopCasting));
SetLocalInt(oPC, preDefStr + sHenchDontDispel, GetLocalInt(OBJECT_SELF, sHenchDontDispel));
}
void HenchGetDefSettings()
{
if (GetLocalInt(OBJECT_SELF, sHenchDefSettingsSet))
{
return;
}
SetLocalInt(OBJECT_SELF, sHenchDefSettingsSet, TRUE);
int iAssocType = GetAssociateType(OBJECT_SELF);
if ((iAssocType == ASSOCIATE_TYPE_NONE) ||
(iAssocType == ASSOCIATE_TYPE_HENCHMAN))
{
return;
}
string preDefStr = HenchGetAssocString(iAssocType);
object oPC = GetMaster();
if (!GetIsObjectValid(oPC) || !GetIsPC(oPC))
{
return;
}
object oTarget;
object oSource;
string preSrcStr;
// check if the PC has never had settings copied
// for associate type
if (!GetLocalInt(oPC, preDefStr + sHenchDefSettingsSet))
{
SetLocalInt(oPC, preDefStr + sHenchDefSettingsSet, TRUE);
oTarget = oPC;
oSource = OBJECT_SELF;
preSrcStr = preDefStr;
preDefStr = "";
}
else
{
oTarget = OBJECT_SELF;
oSource = oPC;
preSrcStr = "";
}
SetLocalInt(oTarget, preSrcStr + sAssociateMasterConditionVarname,
GetLocalInt(oSource, preDefStr + sAssociateMasterConditionVarname));
SetLocalInt(oTarget, preSrcStr + sHenchStealthMode,
GetLocalInt(oSource, preDefStr + sHenchStealthMode));
SetLocalInt(oTarget, preSrcStr + sHenchStopCasting,
GetLocalInt(oSource, preDefStr + sHenchStopCasting));
SetLocalInt(oTarget, preSrcStr + sHenchDontDispel,
GetLocalInt(oSource, preDefStr + sHenchDontDispel));
SetLocalInt(oTarget, preSrcStr + sHenchDisableAutoHide,
GetLocalInt(oSource, preDefStr + sHenchDisableAutoHide));
if (GetHasSkill(SKILL_DISABLE_TRAP))
{
SetLocalInt(oTarget, preSrcStr + sHenchNoDisarmTraps,
GetLocalInt(oSource, preDefStr + sHenchNoDisarmTraps));
SetLocalInt(oTarget, preSrcStr + sHenchAutoRecoverTraps,
GetLocalInt(oSource, preDefStr + sHenchAutoRecoverTraps));
}
if (GetHasSkill(SKILL_OPEN_LOCK))
{
SetLocalInt(oTarget, preSrcStr + sHenchAutoOpenLocks,
GetLocalInt(oSource, preDefStr + sHenchAutoOpenLocks));
}
SetLocalInt(oTarget, preSrcStr + sHenchAutoPickup,
GetLocalInt(oSource, preDefStr + sHenchAutoPickup));
if (GetSkillRank(SKILL_SEARCH) * 3 / 4 >= GetHitDice(OBJECT_SELF))
{
SetLocalInt(oTarget, preSrcStr + sHenchAutoOpenChest,
GetLocalInt(oSource, preDefStr + sHenchAutoOpenChest));
}
SetLocalFloat(oTarget, preSrcStr + sHenchSpellChallenge,
GetLocalFloat(oSource, preDefStr + sHenchSpellChallenge));
SetLocalInt(oTarget, preSrcStr + sHenchDualWieldState,
GetLocalInt(oSource, preDefStr + sHenchDualWieldState));
SetLocalInt(oTarget, preSrcStr + sHenchLightOffHand,
GetLocalInt(oSource, preDefStr + sHenchLightOffHand));
SetLocalFloat(oTarget, preSrcStr + sHenchHenchRange,
GetLocalFloat(oSource, preDefStr + sHenchHenchRange));
}
void HenchSetAssociateFlee(float fChallenge, int bFightToDeath)
{
object oPC = GetPCSpeaker();
int iAssocType = GetAssociateType(OBJECT_SELF);
// Set the variables
if (iAssocType == ASSOCIATE_TYPE_FAMILIAR)
{
SetLocalFloat(oPC, sHenchFamiliarChallenge, fChallenge);
SetLocalInt(oPC, sHenchFamiliarToDeath, bFightToDeath);
}
else if (iAssocType == ASSOCIATE_TYPE_ANIMALCOMPANION)
{
SetLocalFloat(oPC, sHenchAniCompChallenge, fChallenge);
SetLocalInt(oPC, sHenchAniCompToDeath, bFightToDeath);
}
}