Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
		
			
				
	
	
		
			116 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #include "prc_inc_sp_tch"
 | |
| 
 | |
| int ooze_ranged_damage(effect eDamage, int splash_type)
 | |
| {
 | |
|     object target = PRCGetSpellTargetObject();
 | |
| 
 | |
|     if(!GetIsReactionTypeFriendly(target))
 | |
|     {
 | |
|         //Fire cast spell at event for the specified target
 | |
|         SignalEvent(target, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
 | |
|         //Make a touch attack to afflict target
 | |
| 
 | |
|        // GZ: * GetSpellCastItem() == OBJECT_INVALID is used to prevent feedback from showing up when used as OnHitCastSpell property
 | |
|         if (PRCDoRangedTouchAttack(target))
 | |
|         {
 | |
|             effect eVis = EffectVisualEffect(VFX_IMP_ACID_L);
 | |
| 
 | |
|             ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, target);
 | |
|             ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, target);
 | |
| 
 | |
|             //Declare the spell shape, size and the location.  Capture the first target object in the shape.
 | |
|             object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE);
 | |
|             //Cycle through the targets within the spell shape until an invalid object is captured.
 | |
|             while (GetIsObjectValid(oTarget))
 | |
|             {
 | |
|                 /* Already damaged the target */
 | |
| //                if (oTarget == target) continue;
 | |
| 
 | |
|                 if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
 | |
|                 {
 | |
|                         //Fire cast spell at event for the specified target
 | |
|                         SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
 | |
|                         //Get the distance between the explosion and the target to calculate delay
 | |
|                         float fDelay = GetDistanceBetweenLocations(GetLocation(target), GetLocation(oTarget))/20;
 | |
| 
 | |
|                         //Set the damage effect
 | |
|                         effect eDam = EffectDamage(1, splash_type);
 | |
| 
 | |
|                         // Apply effects to the currently selected target.
 | |
|                         DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
 | |
|                         //This visual effect is applied to the target object not the location as above.  This visual effect
 | |
|                         //represents the flame that erupts on the target not on the ground.
 | |
|                         DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
 | |
|                 }
 | |
|                //Select the next target within the spell shape.
 | |
|                oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE);
 | |
|             }
 | |
|             return TRUE;
 | |
|         }
 | |
|     }
 | |
|     return FALSE;
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     object target = PRCGetSpellTargetObject();
 | |
|     int level = GetLevelByClass(CLASS_TYPE_OOZEMASTER);
 | |
| 
 | |
|     switch (GetSpellId())
 | |
|     {
 | |
|         case 2019: /* Brown Mold */
 | |
|         {
 | |
|             if (!GetHasFeat(FEAT_MIN_OOZY_TOUCH_BROWN))
 | |
|             {
 | |
|                 FloatingTextStringOnCreature("You do not posses Brown Mold Oozy Touch.", OBJECT_SELF);
 | |
|                 return;
 | |
|             }
 | |
|             ooze_ranged_damage(EffectDamage(d6() + level, DAMAGE_TYPE_COLD), DAMAGE_TYPE_COLD);
 | |
|             break;
 | |
|         }
 | |
|         case 2020: /* Gray Ooze */
 | |
|         {
 | |
|             if (!GetHasFeat(FEAT_MIN_OOZY_TOUCH_GRAY))
 | |
|             {
 | |
|                 FloatingTextStringOnCreature("You do not posses Gray Ooze Oozy Touch.", OBJECT_SELF);
 | |
|                 return;
 | |
|             }
 | |
|             ooze_ranged_damage(EffectDamage(d6() + level, DAMAGE_TYPE_ACID), DAMAGE_TYPE_ACID);
 | |
|             break;
 | |
|         }
 | |
|         case 2021: /* Ochre Jelly */
 | |
|         {
 | |
|             if (!GetHasFeat(FEAT_MIN_OOZY_TOUCH_OCHRE))
 | |
|             {
 | |
|                 FloatingTextStringOnCreature("You do not posses Ochre Jelly Oozy Touch.", OBJECT_SELF);
 | |
|                 return;
 | |
|             }
 | |
|             effect damage = EffectDamage(d4() + level, DAMAGE_TYPE_ACID);
 | |
|             object target = PRCGetSpellTargetObject();
 | |
|             int DC = 15 + level;
 | |
| 
 | |
|             if (ooze_ranged_damage(damage, DAMAGE_TYPE_ACID))
 | |
|             {
 | |
|                 if (!PRCMySavingThrow(SAVING_THROW_REFLEX, target, DC, SAVING_THROW_TYPE_ACID, OBJECT_SELF))
 | |
|                 {
 | |
|                     effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
 | |
|                     effect stun = EffectLinkEffects(EffectStunned(), eMind);
 | |
| 
 | |
|                     ApplyEffectToObject(DURATION_TYPE_TEMPORARY, stun, target, RoundsToSeconds(1));
 | |
|                 }
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case 2022: /* Fungus */
 | |
|         {
 | |
|             if (!GetHasFeat(FEAT_MIN_OOZY_TOUCH_FUNGUS))
 | |
|             {
 | |
|                 FloatingTextStringOnCreature("You do not posses Phosphorescent Fungus Oozy Touch.", OBJECT_SELF);
 | |
|                 return;
 | |
|             }
 | |
|             ooze_ranged_damage(EffectDamage(1, DAMAGE_TYPE_FIRE), DAMAGE_TYPE_FIRE);
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
| }
 |