20255/17/19 Update

Added PEPS AI.
Full compile.
This commit is contained in:
Jaysyn904
2025-07-19 18:27:32 -04:00
parent dd3496e400
commit d2a9c50615
2533 changed files with 136137 additions and 13984 deletions

View File

@@ -1,57 +1,70 @@
//::///////////////////////////////////////////////
//:: Default: End of Combat Round
//:: NW_C2_DEFAULT3
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
#include "hench_i0_ai"
/*//////////////////////////////////////////////////////////////////////////////
Script: nw_c2_default3
Programmer: Philos
////////////////////////////////////////////////////////////////////////////////
Monster OnCombatRoundEnd event script;
Fires at the end of each combat round (6 seconds).
This will fire as long as oCreature is in combat (GetIsInCombat()).
This event starts counting once a combat action is started.
Every time a spell is cast it will queue another end combat round so haste with
two spells cast will fire this twice in one round.
It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc.
Action modes are also cleared prior to this event executing!
GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event.
This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies.
*///////////////////////////////////////////////////////////////////////////////
#include "0i_actions"
void main()
{
// Jug_Debug("*****" + GetName(OBJECT_SELF) + " end combat round action " + IntToString(GetCurrentAction()));
//ExecuteScript("prc_npc_combat", OBJECT_SELF);
if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
{ // set variables on target for mounted combat
DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT");
if (GetHasFeat(FEAT_MOUNTED_COMBAT,OBJECT_SELF))
{ // check for AC increase
int nRoll=d20()+GetSkillRank(SKILL_RIDE);
nRoll=nRoll-10;
if (nRoll>4)
{ // ac increase
nRoll=nRoll/5;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACIncrease(nRoll),OBJECT_SELF,8.5);
} // ac increase
} // check for AC increase
} // set variables on target for mounted combat
DeleteLocalInt(OBJECT_SELF, HENCH_AI_SCRIPT_RUN_STATE);
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
object oCreature = OBJECT_SELF;
ExecuteScript("prc_npc_combat", OBJECT_SELF);
if(AI_DEBUG) ai_Debug("nw_c2_default3", "20", GetName(oCreature) + " ends combat round." +
" Current action: " + IntToString(GetCurrentAction(oCreature)));
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
HenchDetermineSpecialBehavior();
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
}
else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
if(ai_Disabled(oCreature)) return;
// Action modes get cleared prior to each OnCombatRoundEnd!
// We do this to keep the action mode going.
int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE);
if(nActionMode > 0)
{
HenchDetermineCombatRound();
SetActionMode(oCreature, nActionMode, TRUE);
// We don't want to use up all of the Dwarven Defenders uses!
if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE);
}
// special code for host tower level 4
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT) && GetTag(OBJECT_SELF) != "2Q6_HelmHorror")
int nAction = GetCurrentAction(oCreature);
if(AI_DEBUG) ai_Debug("nw_c2_default3", "37", "nAction: " + IntToString(nAction));
switch(nAction)
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_END_COMBAT_ROUND));
// These actions are uninteruptable.
case ACTION_MOVETOPOINT :
case ACTION_CASTSPELL :
case ACTION_ITEMCASTSPELL :
case ACTION_COUNTERSPELL : return;
// Might be doing a special action that is not a defined action.
case ACTION_INVALID :
{
int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS);
if(AI_DEBUG) ai_Debug("nw_c2_default3", "49", "nCombatWait: " + IntToString(nCombatWait));
if(nCombatWait)
{
if(ai_IsInCombatRound(oCreature, nCombatWait)) return;
DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS);
}
}
// We always want to interupt an attack action at the end of a round.
//case ACTION_ATTACKOBJECT :
}
if(ai_GetIsInCombat(oCreature))
{
ai_DoAssociateCombatRound (oCreature);
return;
}
if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature);
}