221 lines
6.8 KiB
Plaintext
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);
|
|
}
|
|
}
|
|
|