Initial upload
Initial upload. PRC8 has been added. Module compiles, PRC's default AI & treasure scripts have been integrated. Started work on top hak for SLA / Ability / Scripting modifications.
This commit is contained in:
805
_module/nss/jw_privates_inc.nss
Normal file
805
_module/nss/jw_privates_inc.nss
Normal file
@@ -0,0 +1,805 @@
|
||||
//:: jw_privates_inc.nss
|
||||
|
||||
#include "x0_inc_generic"
|
||||
|
||||
//::///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//:: Associate Include Functions
|
||||
//:: NW_I0_ASSOCIATE
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://///////////////////////////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
Determines and stores the behavior of the
|
||||
associates used by the PC
|
||||
*/
|
||||
//:://///////////////////////////////////////////////////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: November 16, 2001
|
||||
//:://////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Distance
|
||||
//Heal when
|
||||
//Auto AI
|
||||
//Open Locks on master fail
|
||||
//Casting power
|
||||
//ASSOCIATE MASTER VARIABLE FUNCTIONS
|
||||
|
||||
|
||||
|
||||
//ASSOCIATE FUNCTIONS
|
||||
int GetAssociateCRMax();
|
||||
void CheckIsUnlocked(object oLastObject);
|
||||
//PRIVATE FUNCTION DECLARATIONS
|
||||
|
||||
|
||||
// Gets the number of wingblast attacks this mob has
|
||||
int GetWingblast(object oMob=OBJECT_SELF);
|
||||
// Sets the number of wingblast attacks this mob has (default is zero)
|
||||
void SetWingblast(int nBlasts=0);
|
||||
// Returns TRUE if oMob has hp lower than 1, else returns false
|
||||
int GetIsDeadOrBleeding(object oMob=OBJECT_SELF);
|
||||
// sets oTarget as a target for oMob for oMob to heal
|
||||
void SetNeedsHealing(object oTarget, object oMob=OBJECT_SELF);
|
||||
// gets the last caller for healing that oMob heard
|
||||
object GetNeedsHealing(object oMob=OBJECT_SELF);
|
||||
// plays healing call if appropriate, 50 per cent chance
|
||||
// should ONLY be used with object self
|
||||
int CheckHeal(object oMob=OBJECT_SELF);
|
||||
// makes the monster rest if it is damaged
|
||||
int MonsterRest(object oMob=OBJECT_SELF);
|
||||
// cycles spell effects when checking victim
|
||||
int CycleProtections(int nLastChecked);
|
||||
// checks if oTarget has en effect caused by spell nSpell_ID
|
||||
int CheckProtection(int nSpell_ID, object oTarget);
|
||||
// check whether the enemy has a spell on it causing a positive effect
|
||||
int CheckHasPositiveEffect(object oTarget);
|
||||
// sets oTarget as a target for oMob for oMob to follow when out of combat
|
||||
void SetTarget(object oTarget, object oMob=OBJECT_SELF);
|
||||
// gets the last target that was a target of oMob. THis may not be the best target,
|
||||
// just the most recent.
|
||||
object GetTarget(object oMob=OBJECT_SELF);
|
||||
// returns TRUE if the mob is a custom encounter creature, meaning it was either
|
||||
// spawned by an encounter and has not had the encounter feature turned of or
|
||||
// ir was NOT spawned by an encounter but has had the custom encounter features turned on.
|
||||
int GetisCustomEncounterCreature(object oMob=OBJECT_SELF);
|
||||
// sets the creature to be an encounter creature or not. Will override whether or not
|
||||
// the creature was actullay spawned from an encounter. Set nIsEncounter TRUE to
|
||||
// make it an encouner creature or FALSE to make it not an encounter creature
|
||||
void SetisCustomEncounterCreature(int nIsEncounter, object oMob=OBJECT_SELF);
|
||||
// sets the creature's start location
|
||||
void SetStartLocation(object oMob=OBJECT_SELF);
|
||||
// Gets the creature's start location
|
||||
location GetStartLocation(object oMob=OBJECT_SELF);
|
||||
// return's the Mob's current victim, but if this victim is dead, invalid or
|
||||
// out of sight, picks the next vistim and sets it too.
|
||||
object ChooseTarget(object oMob=OBJECT_SELF);
|
||||
// sets oTarget as a target for oMob for oMob to fight
|
||||
void SetVictim(object oTarget, object oMob=OBJECT_SELF);
|
||||
// gets the mob's current victim.
|
||||
object GetVictim(object oMob=OBJECT_SELF);
|
||||
//gets the target the caller is currently fighting
|
||||
object GetTargetFighting();
|
||||
//Adds all three of the class levels together. Used before GetHitDice became available
|
||||
//int GetCharacterLevel(object oTarget);
|
||||
//Compares the current spell with the last one cast
|
||||
int CompareLastSpellCast(int nSpell);
|
||||
//If using ambient sleep this will remove the effect
|
||||
void RemoveAmbientSleep();
|
||||
//Searches for the nearest locked object to the master
|
||||
object GetLockedObject(object oMaster);
|
||||
|
||||
|
||||
|
||||
int GetWingblast(object oMob=OBJECT_SELF)
|
||||
{
|
||||
int nBlasts=GetLocalInt(OBJECT_SELF,"nWingblasts");
|
||||
return nBlasts;
|
||||
}
|
||||
|
||||
|
||||
void SetWingblast(int nBlasts=0)
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF,"nWingblasts",nBlasts);
|
||||
}
|
||||
|
||||
int GetIsDeadOrBleeding(object oMob=OBJECT_SELF)
|
||||
{
|
||||
if (GetIsDead(oMob))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (GetCurrentHitPoints(oMob)<1)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
void SetNeedsHealing(object oTarget, object oMob=OBJECT_SELF)
|
||||
{
|
||||
if (GetObjectType(oTarget)==OBJECT_TYPE_AREA_OF_EFFECT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLocalObject(oMob,"needshealing",oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
object GetNeedsHealing(object oMob=OBJECT_SELF)
|
||||
{
|
||||
object oTarget=GetLocalObject(oMob,"needshealing");
|
||||
return (oTarget);
|
||||
}
|
||||
|
||||
|
||||
int CycleProtections(int nLastChecked)
|
||||
{
|
||||
|
||||
|
||||
if (nLastChecked == 1){return SPELL_PREMONITION;}
|
||||
|
||||
else if(nLastChecked == 2) {return SPELL_SHADOW_SHIELD;}
|
||||
else if(nLastChecked == 3) {return SPELL_GREATER_STONESKIN;}
|
||||
|
||||
else if(nLastChecked == 4) {return SPELL_DEATH_WARD;}
|
||||
|
||||
else if(nLastChecked == 5) {return SPELL_STONESKIN;}
|
||||
|
||||
|
||||
else if(nLastChecked == 6) {return SPELL_MAGE_ARMOR;}
|
||||
|
||||
else if(nLastChecked == 7) {return SPELL_BARKSKIN;}
|
||||
else if(nLastChecked == 8) {return SPELL_MIND_BLANK;}
|
||||
|
||||
else if(nLastChecked == 9) {return SPELL_PROTECTION_FROM_EVIL;}
|
||||
return nLastChecked;
|
||||
}
|
||||
//-------------------------------------------------------------------------
|
||||
int CheckProtection(int nSpell_ID, object oTarget)
|
||||
{
|
||||
//Declare major variables
|
||||
effect eProtection;
|
||||
|
||||
|
||||
if(GetHasSpellEffect(nSpell_ID, oTarget))
|
||||
{
|
||||
//Search through the valid effects on the target.
|
||||
eProtection = GetFirstEffect(oTarget);
|
||||
while (GetIsEffectValid(eProtection))
|
||||
{
|
||||
//If the effect was created by the spell then remove it
|
||||
if(GetEffectSpellId(eProtection) == nSpell_ID)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
//Get next effect on the target
|
||||
eProtection = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int MonsterRest(object oMob=OBJECT_SELF)
|
||||
{
|
||||
|
||||
int nHeal = GetMaxHitPoints(oMob);
|
||||
int nHP=GetCurrentHitPoints(oMob);
|
||||
if (nHP>(nHeal/2))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
int nCurrentHour = (GetCalendarYear()-1)*12*28*24 +
|
||||
(GetCalendarMonth()-1)*28*24 +
|
||||
(GetCalendarDay()-1)*24 +
|
||||
GetTimeHour();
|
||||
int nLastSpawnHour = GetLocalInt( oMob, "LastRestHour");
|
||||
int nSpawnDelay = 0;
|
||||
|
||||
if (nCurrentHour > (nLastSpawnHour + nSpawnDelay))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
PlayVoiceChat(VOICE_CHAT_REST);
|
||||
|
||||
int nRace=GetRacialType(oMob);
|
||||
if ((nRace==RACIAL_TYPE_DWARF)||(nRace==RACIAL_TYPE_ELF)||(nRace==RACIAL_TYPE_GIANT)||
|
||||
(nRace==RACIAL_TYPE_GNOME)||(nRace==RACIAL_TYPE_HALFELF)||(nRace==RACIAL_TYPE_HALFLING)||
|
||||
(nRace==RACIAL_TYPE_HALFORC)||(nRace==RACIAL_TYPE_HUMAN)||(nRace==RACIAL_TYPE_HUMANOID_GOBLINOID)||
|
||||
(nRace==RACIAL_TYPE_HUMANOID_MONSTROUS)|| (nRace==RACIAL_TYPE_HUMANOID_ORC)||(nRace==RACIAL_TYPE_HUMANOID_REPTILIAN)||
|
||||
(nRace==RACIAL_TYPE_SHAPECHANGER))
|
||||
{
|
||||
AssignCommand(oMob,ClearAllActions());
|
||||
AssignCommand(oMob,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS));
|
||||
effect eSnore = EffectVisualEffect(VFX_IMP_SLEEP);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSnore, oMob, 7.0);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSnore, oMob, 7.0);
|
||||
}
|
||||
|
||||
|
||||
//Set the heal effect
|
||||
effect eHeal = EffectHeal(nHeal);
|
||||
//Apply the heal effect and the VFX impact
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oMob);
|
||||
|
||||
// remove negative effects
|
||||
effect eBad = GetFirstEffect(oMob);
|
||||
//Search for negative effects
|
||||
while(GetIsEffectValid(eBad))
|
||||
{
|
||||
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_CURSE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DISEASE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_POISON ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_CHARMED ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DOMINATED ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_DAZED ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_CONFUSED ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_FRIGHTENED ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_SLOW ||
|
||||
GetEffectType(eBad) == EFFECT_TYPE_STUNNED)
|
||||
{
|
||||
//Remove effect if it is negative.
|
||||
RemoveEffect(oMob, eBad);
|
||||
}
|
||||
eBad = GetNextEffect(oMob);
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int CheckHeal(object oMob=OBJECT_SELF)
|
||||
{
|
||||
|
||||
if (GetRacialType(oMob)==RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (d2()==1)
|
||||
{
|
||||
// 50 per cent chance of not making the call;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (GetLocalInt(OBJECT_SELF,"healcall"))
|
||||
{
|
||||
// if I have called for help once, just return;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(GetCurrentHitPoints(oMob)> (GetMaxHitPoints(oMob)/2))
|
||||
{
|
||||
// not half dead
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// check to see if I need healing and I am not myself a healer
|
||||
if ((GetLevelByClass(CLASS_TYPE_CLERIC,OBJECT_SELF)>=1)||(GetLevelByClass(CLASS_TYPE_DRUID,OBJECT_SELF)>=1)||(GetLevelByClass(CLASS_TYPE_BARD,OBJECT_SELF)>=1))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_FRIEND,OBJECT_SELF,1,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN)))
|
||||
{
|
||||
// ok everything done, now call for help
|
||||
PlayVoiceChat(VOICE_CHAT_HEALME);
|
||||
SpeakString("I_AM_HEALING",TALKVOLUME_SILENT_TALK);
|
||||
SetLocalInt(OBJECT_SELF,"healcall",1);
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
int CheckHasPositiveEffect(object oTarget)
|
||||
{
|
||||
|
||||
|
||||
|
||||
int nCnt;
|
||||
int nHasEffect=FALSE;
|
||||
|
||||
|
||||
while(nCnt <= 9)
|
||||
{
|
||||
nHasEffect=CheckProtection(CycleProtections(nCnt), oTarget);
|
||||
if (nHasEffect==TRUE)
|
||||
{
|
||||
return (nHasEffect);
|
||||
}
|
||||
nCnt++;
|
||||
}
|
||||
|
||||
return (FALSE);
|
||||
}
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
|
||||
void SetTarget(object oTarget, object oMob=OBJECT_SELF)
|
||||
{
|
||||
if (GetObjectType(oTarget)==OBJECT_TYPE_AREA_OF_EFFECT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLocalObject(oMob,"mytarget",oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
object GetTarget(object oMob=OBJECT_SELF)
|
||||
{
|
||||
object oTarget=GetLocalObject(oMob,"mytarget");
|
||||
return (oTarget);
|
||||
}
|
||||
|
||||
|
||||
int GetisCustomEncounterCreature(object oMob=OBJECT_SELF)
|
||||
{
|
||||
int nSpecial=GetLocalInt(oMob,"norw");
|
||||
|
||||
if (nSpecial==2)
|
||||
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (nSpecial==1)
|
||||
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (GetIsEncounterCreature(oMob))
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
void SetisCustomEncounterCreature(int nIsEncounter, object oMob=OBJECT_SELF)
|
||||
{
|
||||
if (nIsEncounter)
|
||||
{
|
||||
SetLocalInt(oMob,"norw",2);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLocalInt(oMob,"norw",1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void SetStartLocation(object oMob=OBJECT_SELF)
|
||||
|
||||
{
|
||||
location lLoc=GetLocation(oMob);
|
||||
SetLocalLocation(oMob,"startloc",lLoc);
|
||||
|
||||
}
|
||||
|
||||
location GetStartLocation(object oMob=OBJECT_SELF)
|
||||
|
||||
{
|
||||
location lLoc=GetLocalLocation(oMob,"startloc");
|
||||
return (lLoc);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SetVictim(object oTarget, object oMob=OBJECT_SELF)
|
||||
{
|
||||
SetLocalObject(oMob,"myvictim",oTarget);
|
||||
}
|
||||
|
||||
object GetVictim(object oMob=OBJECT_SELF)
|
||||
{
|
||||
object oTarget=GetLocalObject(oMob,"myvictim");
|
||||
return (oTarget);
|
||||
}
|
||||
|
||||
|
||||
object ChooseTarget(object oMob=OBJECT_SELF)
|
||||
{
|
||||
object oTarget=GetVictim();
|
||||
if (GetIsDeadOrBleeding(oTarget)&&(GetIsObjectValid(oTarget))&&(GetObjectSeen(oTarget))&&(d2()==1))
|
||||
{
|
||||
PlayVoiceChat(VOICE_CHAT_CHEER);
|
||||
}
|
||||
|
||||
// if the Target is okay, it simply returns it
|
||||
if ((GetIsObjectValid(oTarget))&&(!GetIsDeadOrBleeding(oTarget))&&(GetObjectSeen(oTarget)))
|
||||
{
|
||||
if (d20()!=1)
|
||||
{
|
||||
return (oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
// we don't seem to have a target, so let's try to find someone we dislike and then go for it.
|
||||
// we will get a patsy and then choose which one of his friends we most dislike
|
||||
|
||||
// start off by getting whoever we have been following
|
||||
object oPatsy=GetTarget();
|
||||
if ((GetIsObjectValid(oPatsy))&&(!GetIsDeadOrBleeding(oPatsy))&&(GetObjectSeen(oPatsy)))
|
||||
{
|
||||
// this is ok
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the last hostile actor
|
||||
oPatsy=GetLastHostileActor();
|
||||
}
|
||||
|
||||
if ((GetIsObjectValid(oPatsy))&&(!GetIsDeadOrBleeding(oPatsy))&&(GetObjectSeen(oPatsy))&&(GetObjectType(oPatsy)!=OBJECT_TYPE_AREA_OF_EFFECT))
|
||||
{
|
||||
// this is ok
|
||||
}
|
||||
else
|
||||
{
|
||||
// just get the nearest hostile person
|
||||
oPatsy=GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
|
||||
}
|
||||
|
||||
// if we are very stupid or the players are lucky, just send this
|
||||
if ((d100()<40)||(GetAbilityScore(OBJECT_SELF,ABILITY_INTELLIGENCE)<7))
|
||||
{
|
||||
SetVictim (oPatsy);
|
||||
return (oPatsy);
|
||||
}
|
||||
|
||||
|
||||
int nDone=0;
|
||||
object oPartyMember;
|
||||
|
||||
// ok we have our patsy, now to choose who to kill
|
||||
|
||||
//there are three ways of choosing
|
||||
int nRandom=Random(3)+1;
|
||||
|
||||
if (nRandom==1)
|
||||
{
|
||||
oPartyMember=GetFirstFactionMember(oPatsy);
|
||||
while ((GetIsObjectValid(oPartyMember))&&(nDone==0))
|
||||
{
|
||||
if ((GetLevelByClass(CLASS_TYPE_WIZARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_SORCERER,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_CLERIC,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_BARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_DRUID,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
|
||||
oPartyMember=GetNextFactionMember(oPatsy);
|
||||
}
|
||||
}
|
||||
// end of random 1
|
||||
|
||||
else if (nRandom==2)
|
||||
{
|
||||
oPartyMember=GetFirstFactionMember(oPatsy);
|
||||
while ((GetIsObjectValid(oPartyMember))&&(nDone==0))
|
||||
{
|
||||
if ((GetLevelByClass(CLASS_TYPE_CLERIC,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_DRUID,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_SORCERER,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_WIZARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_BARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
|
||||
oPartyMember=GetNextFactionMember(oPatsy);
|
||||
}
|
||||
}
|
||||
// end of random 2
|
||||
|
||||
else if (nRandom==3)
|
||||
{
|
||||
oPartyMember=GetFirstFactionMember(oPatsy);
|
||||
while ((GetIsObjectValid(oPartyMember))&&(nDone==0))
|
||||
{
|
||||
if ((GetLevelByClass(CLASS_TYPE_BARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_SORCERER,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
else if ((GetLevelByClass(CLASS_TYPE_WIZARD,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_CLERIC,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
if ((GetLevelByClass(CLASS_TYPE_DRUID,oPartyMember)>=1)&&(GetObjectSeen(oPartyMember)))
|
||||
{
|
||||
oTarget=oPartyMember;
|
||||
nDone=1;
|
||||
}
|
||||
|
||||
oPartyMember=GetNextFactionMember(oPatsy);
|
||||
}
|
||||
}
|
||||
// end of random 3
|
||||
|
||||
if ((GetIsObjectValid(oTarget))&&(GetObjectSeen(oTarget)))
|
||||
{
|
||||
SetVictim (oTarget);
|
||||
return (oTarget);
|
||||
}
|
||||
else
|
||||
{
|
||||
oTarget=GetFactionMostDamagedMember(oPatsy);
|
||||
}
|
||||
|
||||
if ((GetIsObjectValid(oTarget))&&(GetObjectSeen(oTarget)))
|
||||
{
|
||||
SetVictim (oTarget);
|
||||
return (oTarget);
|
||||
}
|
||||
else if ((GetIsObjectValid(oPatsy))&&(GetObjectSeen(oPatsy)))
|
||||
{
|
||||
SetVictim (oPatsy);
|
||||
return (oPatsy);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (OBJECT_INVALID);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
object GetTargetFighting()
|
||||
{
|
||||
object oPC;
|
||||
|
||||
oPC=GetAttackTarget();
|
||||
if (!GetIsObjectValid(oPC))
|
||||
{
|
||||
oPC=GetAttemptedSpellTarget();
|
||||
}
|
||||
if (!GetIsObjectValid(oPC))
|
||||
{
|
||||
oPC=GetAttemptedAttackTarget();
|
||||
}
|
||||
|
||||
|
||||
return (oPC);
|
||||
|
||||
}
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Get Character Levels
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
Returns the combined class levels of the
|
||||
target.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Oct 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
/* int GetCharacterLevel(object oTarget)
|
||||
{
|
||||
return GetLevelByPosition(1, oTarget) + GetLevelByPosition(2, oTarget) + GetLevelByPosition(3, oTarget);
|
||||
} */
|
||||
|
||||
|
||||
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Remove Ambient Sleep
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Checks if the NPC has sleep on them because
|
||||
of ambient animations. Sleeping creatures
|
||||
must make a DC 15 listen check.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Feb 27, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
/* void RemoveAmbientSleep()
|
||||
{
|
||||
if(GetHasEffect(EFFECT_TYPE_SLEEP))
|
||||
{
|
||||
effect eSleep = GetFirstEffect(OBJECT_SELF);
|
||||
while(GetIsEffectValid(eSleep))
|
||||
{
|
||||
if(GetEffectCreator(eSleep) == OBJECT_SELF)
|
||||
{
|
||||
int nRoll = d20();
|
||||
nRoll += GetSkillRank(SKILL_LISTEN);
|
||||
nRoll += GetAbilityModifier(ABILITY_WISDOM);
|
||||
if(nRoll > 15)
|
||||
{
|
||||
RemoveEffect(OBJECT_SELF, eSleep);
|
||||
}
|
||||
}
|
||||
eSleep = GetNextEffect(OBJECT_SELF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Get Locked Object
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Finds the closest locked object to the object
|
||||
passed in up to a maximum of 10 objects.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: March 15, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
/* object GetLockedObject(object oMaster)
|
||||
{
|
||||
int nCnt = 1;
|
||||
int bValid = TRUE;
|
||||
object oLastObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetLocation(oMaster), nCnt);
|
||||
while (GetIsObjectValid(oLastObject) && bValid == TRUE)
|
||||
{
|
||||
//COMMENT THIS BACK IN WHEN DOOR ACTION WORKS ON PLACABLE.
|
||||
|
||||
//object oItem = GetFirstItemInInventory(oLastObject);
|
||||
if(GetLocked(oLastObject))
|
||||
{
|
||||
return oLastObject;
|
||||
}
|
||||
nCnt++;
|
||||
if(nCnt == 10)
|
||||
{
|
||||
bValid = FALSE;
|
||||
}
|
||||
oLastObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetLocation(oMaster), nCnt);
|
||||
}
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
*/
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Get CR Max for Talents
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Determines the Spell CR to be used in the
|
||||
given situation
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Nov 18, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
int GetAssociateCRMax()
|
||||
{
|
||||
int nCR;
|
||||
/*
|
||||
if(GetAssociateState(NW_ASC_HAVE_MASTER))
|
||||
{
|
||||
object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
|
||||
oEnemy = GetFactionStrongestMember(oEnemy);
|
||||
int nHD = GetHitDice(oEnemy);
|
||||
if(GetAssociateState(NW_ASC_OVERKIll_CASTING))
|
||||
{
|
||||
nCR = 20;
|
||||
}
|
||||
else if(GetAssociateState(NW_ASC_POWER_CASTING))
|
||||
{
|
||||
nCR = nHD * 2;
|
||||
if (nCR > 20) {nCR = 20;}
|
||||
if (nCR < 5) {nCR = 5;}
|
||||
}
|
||||
else
|
||||
{
|
||||
nCR = nHD + 4;
|
||||
if (nCR > 20){nCR = 20;}
|
||||
}
|
||||
return nCR;
|
||||
}
|
||||
*/
|
||||
return 20;
|
||||
}
|
||||
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Check if an item is locked
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Checks that an item was unlocked.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Nov 19, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
/* void CheckIsUnlocked(object oLastObject)
|
||||
{
|
||||
if(GetLocked(oLastObject))
|
||||
{
|
||||
ActionDoCommand(PlayVoiceChat(VOICE_CHAT_CUSS));
|
||||
}
|
||||
else
|
||||
{
|
||||
ActionDoCommand(PlayVoiceChat(VOICE_CHAT_CANDO));
|
||||
}
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user