Added PnP Dire Rat.
Added PnP Dire Rat.
This commit is contained in:
		
							
								
								
									
										166
									
								
								nwn_dark_sun/hench_i0_monsho.nss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								nwn_dark_sun/hench_i0_monsho.nss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | ||||
| /* | ||||
|  | ||||
|     Henchman Inventory And Battle AI | ||||
|  | ||||
|     This file is used for responding to monster shouts. Mostly | ||||
|     involves getting the listening creature to start attacking | ||||
|     unseen and unheard foe. | ||||
|  | ||||
| */ | ||||
|  | ||||
|  | ||||
| #include "hench_i0_act" | ||||
| #include "hench_i0_ai" | ||||
|  | ||||
|  | ||||
| // void main() {    } | ||||
|  | ||||
|  | ||||
| //:://///////////////////////////////////////////// | ||||
| //:: Respond To Shouts | ||||
| //:: Copyright (c) 2001 Bioware Corp. | ||||
| //::////////////////////////////////////////////// | ||||
| /* | ||||
|     Allows the listener to react in a manner | ||||
|     consistant with the given shout but only to one | ||||
|     combat shout per round | ||||
| */ | ||||
| //::////////////////////////////////////////////// | ||||
| //:: Created By: Preston Watamaniuk | ||||
| //:: Created On: Oct 25, 2001 | ||||
| //::////////////////////////////////////////////// | ||||
|  | ||||
| //NOTE ABOUT COMMONERS | ||||
| /* | ||||
|     Commoners are universal cowards.  If you attack anyone they will flee for 4 seconds away from the attacker. | ||||
|     However to make the commoners into a mob, make a single commoner at least 10th level of the same faction. | ||||
|     If that higher level commoner is attacked or killed then the commoners will attack the attacker.  They will disperse again | ||||
|     after some of them are killed.  Should NOT make multi-class creatures using commoners. | ||||
| */ | ||||
| //NOTE ABOUT BLOCKERS | ||||
| /* | ||||
|     It should be noted that the Generic Script for On Dialogue attempts to get a local set on the shouter by itself. | ||||
|     This object represents the LastOpenedBy object.  It is this object that becomes the oIntruder within this function. | ||||
| */ | ||||
|  | ||||
| //NOTE ABOUT INTRUDERS | ||||
| /* | ||||
|     The intruder object is for cases where a placable needs to pass a LastOpenedBy Object or a AttackMyAttacker | ||||
|     needs to make his attacker the enemy of everyone. | ||||
| */ | ||||
|  | ||||
| // modified form of shout handler, calls different routines | ||||
| void HenchMonRespondToShout(object oShouter, int nShoutIndex, object oIntruder = OBJECT_INVALID) | ||||
| { | ||||
|     // Pausanias: Do not respond to shouts if you've surrendered. | ||||
|     int iSurrendered = GetLocalInt(OBJECT_SELF,"Generic_Surrender"); | ||||
|     if (iSurrendered) return; | ||||
|  | ||||
|     switch (nShoutIndex) | ||||
|     { | ||||
|         case 1://NW_GENERIC_SHOUT_I_WAS_ATTACKED: | ||||
|         case 3://NW_GENERIC_SHOUT_I_AM_DEAD: | ||||
|             { | ||||
|                 object oTarget = oIntruder; | ||||
|                 if(!GetIsObjectValid(oTarget)) | ||||
|                 { | ||||
|                     oTarget = GetLastHostileActor(oShouter); | ||||
|                     if (!GetIsObjectValid(oTarget)) | ||||
|                     { | ||||
|                         oTarget = GetLocalObject(oShouter, sHenchLastTarget); | ||||
|                     } | ||||
|                 } | ||||
|                 if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) | ||||
|                 { | ||||
|                     if(!GetLevelByClass(CLASS_TYPE_COMMONER)) | ||||
|                     { | ||||
|                         if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) | ||||
|                         { | ||||
|                             if(GetIsObjectValid(oTarget)) | ||||
|                             { | ||||
|                                 if(!GetIsFriend(oTarget) && GetIsFriend(oShouter)) | ||||
|                                 { | ||||
|                                     RemoveAmbientSleep(); | ||||
|                                     HenchDetermineCombatRound(oTarget); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                     else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10) | ||||
|                     { | ||||
|                          HenchStartAttack(GetLastHostileActor(oShouter)); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         HenchDetermineCombatRound(oTarget); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     HenchDetermineSpecialBehavior(); | ||||
|                 } | ||||
|             } | ||||
|         break; | ||||
|  | ||||
|         case 2://NW_GENERIC_SHOUT_MOB_ATTACK: | ||||
|             { | ||||
|                 if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) | ||||
|                 { | ||||
|                     //Is friendly check to make sure that only like minded commoners attack. | ||||
|                     if(GetIsFriend(oShouter)) | ||||
|                     { | ||||
|                          HenchStartAttack(GetLastHostileActor(oShouter)); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     HenchDetermineSpecialBehavior(); | ||||
|                 } | ||||
|             } | ||||
|         break; | ||||
|  | ||||
|         //For this shout to work the object must shout the following | ||||
|         //string sHelp = "NW_BLOCKER_BLK_" + GetTag(OBJECT_SELF); | ||||
|         case 4: //BLOCKER OBJECT HAS BEEN DISTURBED | ||||
|             { | ||||
|                 if(!GetLevelByClass(CLASS_TYPE_COMMONER)) | ||||
|                 { | ||||
|                     if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) | ||||
|                     { | ||||
|                         if(GetIsObjectValid(oIntruder)) | ||||
|                         { | ||||
|                             SetIsTemporaryEnemy(oIntruder); | ||||
|                             HenchDetermineCombatRound(oIntruder); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10) | ||||
|                 { | ||||
|                     HenchStartAttack(GetLastHostileActor(oShouter)); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     HenchDetermineCombatRound(); | ||||
|                 } | ||||
|             } | ||||
|         break; | ||||
|  | ||||
|         case 5: //ATTACK MY TARGET | ||||
|             { | ||||
|                 if(GetIsFriend(oShouter)) | ||||
|                 { | ||||
|                     AdjustReputation(oIntruder, OBJECT_SELF, -100); | ||||
|                     SetIsTemporaryEnemy(oIntruder); | ||||
|                     HenchDetermineCombatRound(oIntruder); | ||||
|                 } | ||||
|             } | ||||
|         break; | ||||
|  | ||||
|         case 6: //CALL_TO_ARMS | ||||
|             { | ||||
|                 //This was once commented out. | ||||
|                 HenchDetermineCombatRound(); | ||||
|             } | ||||
|         break; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user