Advertisement
Guest User

NWN: Custom AI for drow cleric

a guest
Feb 8th, 2016
579
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.09 KB | None | 0 0
  1. #include "x2_inc_switches"
  2. #include "nw_i0_generic"
  3.  
  4. void main()
  5. {
  6.     object oSelf = OBJECT_SELF;
  7.     SetCreatureOverrideAIScriptFinished(OBJECT_SELF);
  8.  
  9.     if(__InCombatRound())
  10.         return;
  11.  
  12.     ClearAllActions();
  13.     object oEnemy = bkAcquireTarget();
  14.  
  15.     if (GetIsObjectValid(oEnemy))
  16.     {
  17.         __TurnCombatRoundOn(TRUE);
  18.  
  19.         if(TalentPersistentAbilities()) // * Will put up things like Auras quickly
  20.         {
  21.             __TurnCombatRoundOn(FALSE);
  22.             return;
  23.         }
  24.         else if(TalentHealingSelf())
  25.         {
  26.             __TurnCombatRoundOn(FALSE);
  27.             return;
  28.         }
  29.         else if(TalentHeal())
  30.         {
  31.             __TurnCombatRoundOn(FALSE);
  32.             return;
  33.         }
  34.  
  35.         if(GetHasSpell(SPELL_IMPLOSION) && d4() == 1)
  36.         {
  37.             ActionCastSpellAtObject(SPELL_IMPLOSION,oEnemy);
  38.         }
  39.         else if(GetHasSpell(SPELL_DESTRUCTION) && !GetIsImmune(oEnemy,IMMUNITY_TYPE_DEATH,OBJECT_SELF))
  40.         {
  41.             ActionCastSpellAtObject(SPELL_DESTRUCTION,oEnemy);
  42.         }
  43.         else if(GetHasSpell(SPELL_HARM) && !GetHasSpellEffect(SPELL_SHADOW_SHIELD,oEnemy) && !GetHasSpellEffect(SPELL_NEGATIVE_ENERGY_PROTECTION,oEnemy) && GetCurrentHitPoints(oEnemy) > GetMaxHitPoints(oEnemy)/2 && GetRacialType(oEnemy) != RACIAL_TYPE_UNDEAD)
  44.         {
  45.             ActionCastSpellAtObject(SPELL_HARM,oEnemy);
  46.         }
  47.         else if(GetHasSpell(SPELL_ENERGY_DRAIN) && !GetIsImmune(oEnemy,IMMUNITY_TYPE_NEGATIVE_LEVEL,OBJECT_SELF))
  48.         {
  49.             ActionCastSpellAtObject(SPELL_ENERGY_DRAIN,oEnemy);
  50.         }
  51.         else if(GetHasSpell(SPELL_WORD_OF_FAITH) && d4()==1)
  52.         {
  53.             ActionCastSpellAtObject(SPELL_WORD_OF_FAITH,oEnemy);
  54.         }
  55.         else if(GetHasSpell(SPELL_GREATER_DISPELLING) && (GetHasSpellEffect(SPELL_SPELL_MANTLE,oEnemy) || GetHasSpellEffect(SPELL_LESSER_SPELL_MANTLE,oEnemy) || GetHasSpellEffect(SPELL_GREATER_SPELL_MANTLE,oEnemy) || GetHasSpellEffect(SPELL_SPELL_RESISTANCE,oEnemy)))
  56.         {
  57.             ActionCastSpellAtObject(SPELL_GREATER_DISPELLING,oEnemy);
  58.         }
  59.         else if(GetHasSpell(SPELL_BLADE_BARRIER) && d4()==1)
  60.         {
  61.             ActionCastSpellAtObject(SPELL_BLADE_BARRIER,oEnemy);
  62.         }
  63.         else if(GetHasSpell(SPELL_FIRE_STORM) || GetHasSpell(SPELL_FLAME_STRIKE))
  64.         {
  65.             switch(d2())
  66.             {
  67.             case 1:
  68.              if(GetHasSpell(SPELL_FIRE_STORM))
  69.              {
  70.              ActionCastSpellAtLocation(SPELL_FIRE_STORM,GetLocation(OBJECT_SELF));
  71.              break;
  72.              }
  73.             case 2:
  74.              if(GetHasSpell(SPELL_FLAME_STRIKE))
  75.              {
  76.              ActionCastSpellAtObject(SPELL_FLAME_STRIKE,oEnemy);
  77.              break;
  78.              }
  79.             }
  80.  
  81.         }
  82.         else//no offensive spells
  83.         {
  84.             if(GetHasSpell(SPELL_DIVINE_POWER))
  85.             {
  86.                 ActionCastSpellAtObject(SPELL_DIVINE_POWER,OBJECT_SELF);
  87.             }
  88.             else if(GetHasSpell(SPELL_DIVINE_FAVOR))
  89.             {
  90.                 ActionCastSpellAtObject(SPELL_DIVINE_FAVOR,OBJECT_SELF);
  91.             }
  92.             else
  93.             {
  94.                 ActionAttack(oEnemy);
  95.             }
  96.         }
  97.     __TurnCombatRoundOn(FALSE);
  98.     }
  99.     else
  100.     {
  101.         object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,OBJECT_SELF,1,CREATURE_TYPE_IS_ALIVE,TRUE,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
  102.         if(GetIsObjectValid(oPC))
  103.         {
  104.         __TurnCombatRoundOn(TRUE);
  105.         if(TalentHealingSelf())
  106.         {
  107.             __TurnCombatRoundOn(FALSE);
  108.             return;
  109.         }
  110.         else if(TalentHeal())
  111.         {
  112.             __TurnCombatRoundOn(FALSE);
  113.             return;
  114.         }
  115.          if(GetHasSpell(SPELL_IMPLOSION))
  116.          {
  117.              ActionCastSpellAtLocation(SPELL_IMPLOSION,GetLocation(oPC));
  118.              __TurnCombatRoundOn(FALSE);
  119.              return;
  120.          }
  121.          else if(GetHasSpell(SPELL_BLADE_BARRIER))
  122.          {
  123.              ActionCastSpellAtLocation(SPELL_BLADE_BARRIER,GetLocation(oPC));
  124.              __TurnCombatRoundOn(FALSE);
  125.              return;
  126.          }
  127.          else if(GetHasSpell(SPELL_FIRE_STORM))
  128.          {
  129.              ActionCastSpellAtLocation(SPELL_FIRE_STORM,GetLocation(OBJECT_SELF));
  130.              __TurnCombatRoundOn(FALSE);
  131.              return;
  132.          }
  133.          else if(GetHasSpell(SPELL_FLAME_STRIKE))
  134.          {
  135.              ActionCastSpellAtLocation(SPELL_FLAME_STRIKE,GetLocation(oPC));
  136.              __TurnCombatRoundOn(FALSE);
  137.              return;
  138.          }
  139.          else if(GetHasSpell(SPELL_GREATER_DISPELLING))
  140.          {
  141.              ActionCastSpellAtLocation(SPELL_GREATER_DISPELLING,GetLocation(oPC));
  142.              __TurnCombatRoundOn(FALSE);
  143.              return;
  144.          }
  145.          else if(GetHasSpell(SPELL_WORD_OF_FAITH))
  146.          {
  147.              ActionCastSpellAtLocation(SPELL_WORD_OF_FAITH,GetLocation(oPC));
  148.              __TurnCombatRoundOn(FALSE);
  149.              return;
  150.          }
  151.         __TurnCombatRoundOn(FALSE);
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement