Regeneration work
Regeneration work. Full compile.
This commit is contained in:
		| @@ -15,7 +15,34 @@ void main() | ||||
| { | ||||
|     object oNPC         = OBJECT_SELF; | ||||
|     object oAttacker; | ||||
| 	 | ||||
|     string sResRef      = GetResRef(oNPC); | ||||
| 	 | ||||
| 	effect eSleep = EffectSleep(); | ||||
|  | ||||
| //:: Handles troll regen	 | ||||
| 	if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
| 	{ | ||||
| 		if(GetLocalInt(oNPC, "nSubDual") > 0) | ||||
| 		{ | ||||
| 			SetLocalInt(oNPC, "nSubDual", GetLocalInt(oNPC, "nSubDual") - 5); | ||||
|  | ||||
| 			if(GetLocalInt(oNPC, "nSubDual") < GetCurrentHitPoints(oNPC)) | ||||
| 			{ | ||||
| 				RemoveEffect(oNPC, eSleep); | ||||
| 			} | ||||
|  | ||||
| 			if(GetLocalInt(oNPC, "nSubDual") > GetCurrentHitPoints(oNPC)) | ||||
| 			{ | ||||
| 				SpeakString("I am still unconscious!"); | ||||
| 				SetIsDestroyable(FALSE, TRUE, TRUE); | ||||
| 				ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.5f); | ||||
| 			} | ||||
| 			 | ||||
| 			SpeakString("My Subdual is now " + IntToString(GetLocalInt(oNPC, "nSubDual"))); | ||||
| 				 | ||||
|         } | ||||
| 	} | ||||
|  | ||||
| //:: Equips best armor | ||||
|     if ((!GetIsInCombat(oNPC) && (GetItemInSlot(INVENTORY_SLOT_CHEST) == OBJECT_INVALID))) | ||||
|   | ||||
| @@ -13,6 +13,16 @@ | ||||
|  | ||||
| void main() | ||||
| { | ||||
| 	int nTotalDamage 	= GetTotalDamageDealt();     | ||||
| 	int nFireDamage 	= 0; | ||||
|     int nAcidDamage 	= 0; | ||||
| 	int nTotalHP 		= GetMaxHitPoints(OBJECT_SELF); | ||||
| 	 | ||||
| 	string sResRef 		= GetResRef(OBJECT_SELF); | ||||
|  | ||||
|     effect eSleep = EffectSleep(); | ||||
|     effect eSlow = EffectSlow();	 | ||||
| 	 | ||||
|     //-------------------------------------------------------------------------- | ||||
|     // GZ: 2003-10-16 | ||||
|     // Make Plot Creatures Ignore Attacks | ||||
| @@ -22,6 +32,73 @@ void main() | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| //:: Handles troll regen | ||||
| 	if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
| 	{ | ||||
| 		DelayCommand(0.0f, SpeakString("Max/Total HP: " + IntToString(nTotalHP))); | ||||
| 		 | ||||
| 		if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) != -1) | ||||
| 		{ | ||||
| 			nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE); | ||||
| 			//DelayCommand(0.0f, SpeakString("Fire Damage: " + IntToString(nFireDamage))); | ||||
| 		} | ||||
|  | ||||
| 		if(GetDamageDealtByType(DAMAGE_TYPE_ACID) != -1) | ||||
| 		{ | ||||
| 			nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID); | ||||
| 			//DelayCommand(0.0f, SpeakString("Acid Damage: " + IntToString(nAcidDamage))); | ||||
| 		} | ||||
| 	 | ||||
| 		int nNoRegen = nFireDamage + nAcidDamage; | ||||
| 		int nSubDmg = nTotalDamage - nNoRegen; | ||||
| 		 | ||||
| 		//DelayCommand(0.0f, SpeakString("Real damage this attack: " + IntToString(nNoRegen))); | ||||
| 		 | ||||
| 		SetLocalInt(OBJECT_SELF, "NoRegen", nNoRegen + GetLocalInt(OBJECT_SELF, "NoRegen")); | ||||
| 		 | ||||
| 		nNoRegen = GetLocalInt(OBJECT_SELF, "NoRegen"); | ||||
| 		 | ||||
| 		//DelayCommand(0.0f, SpeakString("Actual Damage Stored: " + IntToString(nNoRegen))); | ||||
|  | ||||
| 		effect eHeal = EffectHeal(nSubDmg); | ||||
| 		//DelayCommand(0.0f, SpeakString("Subdual damage healed: " + IntToString(nSubDmg)));	 | ||||
| 		ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF, 0.0f); | ||||
| 		 | ||||
| 		int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF); | ||||
| 		DelayCommand(0.0f, SpeakString("Current HP: " + IntToString(nCurrentHP))); | ||||
| 		 | ||||
| 		if ((nTotalHP - nNoRegen) < nCurrentHP) | ||||
| 		{ | ||||
| 			nCurrentHP = nTotalHP - nNoRegen; | ||||
| 			//DelayCommand(0.0f, SpeakString("Setting HP to: " + IntToString(nCurrentHP))); | ||||
| 			SetCurrentHitPoints(OBJECT_SELF, nCurrentHP); | ||||
| 		} | ||||
| 		 | ||||
| 		if(GetLocalInt(OBJECT_SELF, "nSubDual") <= GetCurrentHitPoints(OBJECT_SELF)) | ||||
| 		{ | ||||
| 			SetLocalInt(OBJECT_SELF, "nSubDual", nSubDmg + GetLocalInt(OBJECT_SELF, "nSubDual")); | ||||
| 		} | ||||
|  | ||||
| 		int nSD = GetLocalInt(OBJECT_SELF, "nSubDual"); | ||||
| 				 | ||||
| 		//DelayCommand(0.0f, SpeakString("SD: " + IntToString(nSD))); | ||||
| 		//DelayCommand(0.0f, SpeakString("CH: " + IntToString(nCurrentHP))); | ||||
| 		//DelayCommand(0.0f, SpeakString("NoRegen: " + IntToString(nNoRegen))); | ||||
|  | ||||
| 		if(nSD > GetCurrentHitPoints(OBJECT_SELF)) | ||||
| 		{ | ||||
| 			//SpeakString("I am unconscious!"); | ||||
| 			SetIsDestroyable(FALSE, TRUE, TRUE); | ||||
| 			ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f); | ||||
| 		} | ||||
| 		else if(nSD == GetCurrentHitPoints(OBJECT_SELF)) | ||||
| 		{ | ||||
| 			//SpeakString("I am staggered!"); | ||||
| 			ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f); | ||||
| 		}	 | ||||
| 		 | ||||
| 	}	 | ||||
|  | ||||
| //:: Execute the CODI AI NPC OnDamaged script | ||||
|     ExecuteScript("no_ai_dam", OBJECT_SELF); | ||||
|  | ||||
|   | ||||
| @@ -24,6 +24,7 @@ void main() | ||||
|     int nUser = GetUserDefinedEventNumber(); | ||||
|     int nFireDamage = 0; | ||||
|     int nAcidDamage = 0; | ||||
| 	int nTotalHP = GetMaxHitPoints(OBJECT_SELF); | ||||
|  | ||||
|     string sResRef = GetResRef(OBJECT_SELF); | ||||
|  | ||||
| @@ -32,7 +33,7 @@ void main() | ||||
|  | ||||
|     if(nUser == EVENT_HEARTBEAT ) //HEARTBEAT | ||||
|     { | ||||
|         if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
| /*         if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
|         { | ||||
|             if(GetLocalInt(OBJECT_SELF, "nSubDual") > 0) | ||||
|             { | ||||
| @@ -42,9 +43,10 @@ void main() | ||||
|                 { | ||||
|                     RemoveEffect(OBJECT_SELF, eSleep); | ||||
|                 } | ||||
|                 //SpeakString("My Subdual is now " + IntToString(GetLocalInt(OBJECT_SELF, "nSubDual"))); | ||||
|                 SpeakString("My Subdual is now " + IntToString(GetLocalInt(OBJECT_SELF, "nSubDual"))); | ||||
| 				 | ||||
|             } | ||||
|         } | ||||
|         } */ | ||||
|     } | ||||
|     else if(nUser == EVENT_PERCEIVE) // PERCEIVE | ||||
|     { | ||||
| @@ -64,23 +66,28 @@ void main() | ||||
|     } | ||||
|     else if(nUser == EVENT_DAMAGED) // DAMAGED | ||||
|     { | ||||
|         if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
| /*         if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA") | ||||
|         { | ||||
|             int nTotalDamage = GetTotalDamageDealt(); | ||||
|  | ||||
|             if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) > 0) | ||||
|             if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) >= 1) | ||||
|             { | ||||
|                 nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE); | ||||
| 				SpeakString("Fire Damage: " + IntToString(nFireDamage)); | ||||
|             } | ||||
|  | ||||
|             if(GetDamageDealtByType(DAMAGE_TYPE_ACID) > 0) | ||||
|             if(GetDamageDealtByType(DAMAGE_TYPE_ACID) >= 1) | ||||
|             { | ||||
|                 nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID); | ||||
| 				SpeakString("Acid Damage: " + IntToString(nAcidDamage)); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             int nSubDmg = nTotalDamage - (nFireDamage + nAcidDamage); | ||||
|             int nActDmg = nFireDamage + nAcidDamage; | ||||
| 			SpeakString("Real damage this attack: " + IntToString(nActDmg)); | ||||
| 			 | ||||
| 			SetLocalInt(OBJECT_SELF, "nActDmg", nActDmg + GetLocalInt(OBJECT_SELF, "nActDmg")); | ||||
|  | ||||
|             effect eHeal = EffectHeal(nSubDmg); | ||||
|  | ||||
| @@ -93,23 +100,31 @@ void main() | ||||
|             } | ||||
|  | ||||
|             int nSD = GetLocalInt(OBJECT_SELF, "nSubDual"); | ||||
|             int nCH = GetCurrentHitPoints(OBJECT_SELF); | ||||
|             int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF); | ||||
| 			 | ||||
|             SpeakString("SD: " + IntToString(nSD)); | ||||
|             SpeakString("CH: " + IntToString(nCurrentHP)); | ||||
| 			SpeakString("ActDmg: " + IntToString(nActDmg)); | ||||
|  | ||||
|             /*SpeakString("SD: " + IntToString(nSD)); | ||||
|             SpeakString("CH: " + IntToString(nCH));*/ | ||||
|  | ||||
|             if(nSD > nCH) | ||||
|             if(nSD > nCurrentHP) | ||||
|             { | ||||
|                 //SpeakString("I am unconscious!"); | ||||
|                 SpeakString("I am unconscious!"); | ||||
|                 SetIsDestroyable(FALSE, TRUE, TRUE); | ||||
|                 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f); | ||||
|             } | ||||
|             else if(nSD == nCH) | ||||
|             else if(nSD == nCurrentHP) | ||||
|             { | ||||
|                 //SpeakString("I am staggered!"); | ||||
|                 SpeakString("I am staggered!"); | ||||
|                 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f); | ||||
|             } | ||||
|         } | ||||
| 			 | ||||
| 			if ((nTotalHP - nActDmg) < nCurrentHP) | ||||
| 			{ | ||||
| 				nCurrentHP = nTotalHP - nActDmg; | ||||
| 				SpeakString("Setting HP to: " + IntToString(nCurrentHP)); | ||||
| 				SetCurrentHitPoints(OBJECT_SELF, nCurrentHP); | ||||
| 			} | ||||
|         } */ | ||||
|     } | ||||
|     else if(nUser == 1007) // DEATH  - do not use for critical code, does not fire reliably all the time | ||||
|     { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user