2025/10/30 Update

Improved Trip / Disarm should be Champion of Corellon bonus feats.
Crinti Shadow Marauders don't get weapon proficiencies.
Epic Dragon Shaman is 21st level.
JPM was missing epic arcane bonus feats.
Karsites & Silverbrows can enter Crinti Shadow Maarauder.
Drunken Rage can allow entry into Frostrager.
Knight of the Sacred Seal was missing FEATOR prereq for Weapon Focus: Shortsword.
Two-Weapon Defense is a general feat.
Tweaked Echoblade enchantment cost.
Added base class equpiment packages more inline with PnP & the actual package descriptions (@Cypher).
Added a modified packages.2da to support the above.
Updated Dynamic Conversation tokens as to greatly lessen the chance of conflicting with module dialogues.
Added weapon proficiencies to FeatToIprop().
Added pnp essentia scaling support for meldshaper levels over 40.
Added GetProficiencyFeatOfWeaponType().
Added GetHasSwashbucklerWeapon().
Added GetHasCorellonWeapon().
Fixed spelling for IP_CONST_FEAT_WEAPON_PROFICIENCY_NUNCHAKU.
Fixed PsyRogue's Enhanced Sneak Attack scaling.
Eldrtich Doom shouldn't target non-hostiles.
Fixed Hellfire Warlock fire resistance to work with other sources of fire resistance.
Fixed text feedback for Island in Time.
Added some DEBUG for Shadow Blade.
prc_2da_cache creature should no longer be accidently targetable, causing faction issues.
Added a PnP cat creature, for the hell of it.  Tibitz is Dragon Magizine, unfortunately.
Updated text tokens for Astral Construct convos.
Updated text tokens for soulknife's mindblade convos.
If you save vs certain fear effects, they fail to work on you for 24 hours, from that source.  (Form of Doom, Dragon Fear)
Fixed Prismatic Sphere VFX bug (@Syrophir)
Fixed Banishment bug on all Prismatic spells.
Bralani Eldarin were missing Low-Light Vision.
Fixed Lips of Rapture bug.
Prelimiary work to making Favoured Soul's Deity's Weapon closer to PnP.
Fixed Firey Burst bug.  I think.

Updated notes.
Updated PRC8 Manual.
This commit is contained in:
Jaysyn904
2025-10-30 19:04:58 -04:00
parent 8e2cfc9779
commit 5e9986829f
304 changed files with 2586 additions and 13859 deletions

View File

@@ -19,5 +19,5 @@ void main()
object oPC = GetPCSpeaker();
// Run the exit handler
_DynConvInternal_ExitedConvo(oPC, FALSE);
}
_DynConvInternal_ExitedConvo(oPC, FALSE);
}

View File

@@ -7,16 +7,17 @@ void main()
effect eAtk=EffectAttackIncrease(2);
effect eDamB=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_BLUDGEONING);
effect eDamP=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_PIERCING);
effect eDamS=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_SLASHING);
effect eDam = EffectDamageIncrease(2, DAMAGE_TYPE_BLUDGEONING | DAMAGE_TYPE_SLASHING | DAMAGE_TYPE_PIERCING);
// effect eDamB=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_BLUDGEONING); //:: Was giving +6 damage - Jaysyn
// effect eDamP=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_PIERCING);
// effect eDamS=EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_SLASHING);
effect eSkill=EffectSkillIncrease(SKILL_ALL_SKILLS,2);
effect eSave=EffectSavingThrowIncrease(SAVING_THROW_ALL,2);
effect eSaveEnch=EffectSavingThrowIncrease(SAVING_THROW_ALL,4,SAVING_THROW_TYPE_MIND_SPELLS);
effect eLink=EffectLinkEffects(eAtk,eDamB);
eLink=EffectLinkEffects(eLink,eDamP);
eLink=EffectLinkEffects(eLink,eDamS);
effect eLink=EffectLinkEffects(eAtk,eDam);
//eLink=EffectLinkEffects(eLink,eDamP);
//eLink=EffectLinkEffects(eLink,eDamS);
eLink=EffectLinkEffects(eLink,eSkill);
eLink=EffectLinkEffects(eLink,eSave);
eLink=EffectLinkEffects(eLink,eSaveEnch);

View File

@@ -1,7 +1,6 @@
//::///////////////////////////////////////////////
//:: Aura of Fear On Enter
//:: NW_S1_AuraFearA.nss
//:: Copyright (c) 2001 Bioware Corp.
//:: initdr_aurafeata.nss
//:://////////////////////////////////////////////
/*
Upon entering the aura of the creature the player
@@ -13,12 +12,88 @@
//:: Created On: May 25, 2001
//:://////////////////////////////////////////////
// shaken -2 attack,weapon dmg,save.
// panicked -2 save + flee away ,50 % drop object holding
#include "prc_inc_spells"
#include "prc_inc_spells"
const string VAR_FEAR_IMMUNE = "DRACONIC_AURA_FEAR_IMMUNE_";
void main()
{
object oTarget = GetEnteringObject();
object oCreator = GetAreaOfEffectCreator();
// Exclude dead creatures
if (GetIsDead(oTarget))
return;
// Exclude dragons
if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_DRAGON)
return;
string sCreatorID = GetObjectUUID(oCreator);
string sVar = VAR_FEAR_IMMUNE + sCreatorID;
// Skip if target already immune to this creator<6F>s aura
if (GetLocalInt(oTarget, sVar))
return;
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eDur3 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
effect eFear = EffectFrightened();
effect eAtkD = EffectAttackDecrease(2);
effect eDmgD = EffectDamageDecrease(2, DAMAGE_TYPE_BLUDGEONING | DAMAGE_TYPE_PIERCING | DAMAGE_TYPE_SLASHING);
effect eSaveD = EffectSavingThrowDecrease(SAVING_THROW_ALL, 2);
effect eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, 2);
effect eLink = EffectLinkEffects(eDmgD, eDur2);
eLink = EffectLinkEffects(eLink, eAtkD);
eLink = EffectLinkEffects(eLink, eSaveD);
eLink = EffectLinkEffects(eLink, eFear);
eLink = EffectLinkEffects(eLink, eSkill);
effect eLink2 = EffectLinkEffects(eDur3, eSaveD);
eLink2 = EffectLinkEffects(eLink2, eSkill);
int nHD = GetHitDice(oCreator);
int nDC = 10 + GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oCreator)
+ GetAbilityModifier(ABILITY_CHARISMA, oCreator);
int nDuration = d6(2);
if (GetIsEnemy(oTarget, oCreator) && GetHitDice(oTarget) <= nHD)
{
SignalEvent(oTarget, EventSpellCastAt(oCreator, SPELLABILITY_AURA_FEAR));
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)
&& !GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR)
&& !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS))
{
int HD = GetHitDice(oTarget);
if (HD < 5)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
else
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink2, oTarget, RoundsToSeconds(nDuration));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
else
{
// Successful save: immune to this creator<6F>s aura for 24 hours
SetLocalInt(oTarget, sVar, TRUE);
DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, sVar));
}
}
}
/* void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
@@ -84,4 +159,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}
} */

View File

@@ -12,6 +12,7 @@
//compiler would completely crap itself unless this include was here
//#include "prc_alterations"
#include "prc_craft_inc"
#include "prc_inc_wpnrest"
//adds onhit: unique power, copied from swashbuckler code
void CritSTR(object oPC, int iEquip)
@@ -137,6 +138,7 @@ void SuperiorDefense(object oPC, int nLevel)
(SetCompositeBonus(oSkin, "SuperiorDefense", 0, ITEM_PROPERTY_AC_BONUS));
} */
void main()
{
object oPC = OBJECT_SELF;
@@ -144,6 +146,32 @@ void main()
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
int nBase = GetBaseItemType(oWeapon);
int iEquip= GetLocalInt(oPC,"ONEQUIP");
int bCorellonWeapon = GetHasCorellonWeapon(oPC);
if(nLevel >= 2)
{
if(bCorellonWeapon) ActionCastSpellOnSelf(SPELL_COC_DAMAGE);
else PRCRemoveEffectsFromSpell(oPC, SPELL_COC_DAMAGE);
CritSTR(oPC, iEquip);
}
if(nLevel >= 3)
{
SuperiorDefense(oPC, nLevel);
}
}
/* void main()
{
object oPC = OBJECT_SELF;
int nLevel = (GetLevelByClass(CLASS_TYPE_COC, oPC));
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
int nBase = GetBaseItemType(oWeapon);
int iEquip= GetLocalInt(oPC,"ONEQUIP");
int bCorellonWeapon = GetHasCorellonWeapon(oPC);
if(nLevel >= 2)
{
@@ -164,4 +192,4 @@ void main()
{
SuperiorDefense(oPC, nLevel);
}
}
} */

View File

@@ -3,7 +3,7 @@
//:: prc_favsoulweap
//:://////////////////////////////////////////////
/** @file
This allows you to choose the weapon for the diety
This allows you to choose the weapon for the deity
@author Stratovarius
@@ -66,7 +66,7 @@ void main()
if(nStage == STAGE_WEAPON_CHOICE)
{
string sHeader1 = "Select your Deity's favoured weapon.\n";
sHeader1 += "This will grant you weapon focus and, eventually, weapon specialization in that weapon.";
sHeader1 += "This will grant you weapon proficiency at 1st level, weapon focus at 3rd level, and weapon specialization at 12th level in that weapon.";
// Set the header
SetHeader(sHeader1);
// Add responses for the PC
@@ -139,19 +139,28 @@ void main()
{
if(nChoice == TRUE)
{
object oSkin = GetPCSkin(oPC);
int nWeapon = GetLocalInt(oPC, "FavouredSoulWeapon");
int nWeaponFocus = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_FOCUS);
int nWFIprop = FeatToIprop(nWeaponFocus);
int nWeaponSpec = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_SPECIALIZATION);
int nWSIprop = FeatToIprop(nWeaponSpec);
object oSkin = GetPCSkin(oPC);
int nWeapon = GetLocalInt(oPC, "FavouredSoulWeapon");
int nWeaponProf = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_WEAPON_PROFICIENCY);
int nWProfIprop = FeatToIprop(nWeaponProf);
int nWeaponFocus = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_FOCUS);
int nWFIprop = FeatToIprop(nWeaponFocus);
int nWeaponSpec = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_SPECIALIZATION);
int nWSIprop = FeatToIprop(nWeaponSpec);
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWFIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
if (GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) >= 12) IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWSIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
int nLevel = GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC);
// Store the weapon for later reuse
// The reason we use the weapon is so we can use the GetFeatByWeaponType function to get both Focus and Spec
SetPersistantLocalInt(oPC, "FavouredSoulDietyWeapon", nWeapon);
// Grant feats based on current Favoured Soul level
if (nLevel >= 1)
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWProfIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
if (nLevel >= 3)
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWFIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
if (nLevel >= 12)
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWSIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
// Store the weapon for later reuse
// The reason we use the weapon is so we can use the GetFeatByWeaponType function to get both Focus and Spec
SetPersistantLocalInt(oPC, "FavouredSoulDietyWeapon", nWeapon);
// And we're all done
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
@@ -169,4 +178,4 @@ void main()
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
}
}

View File

@@ -23,7 +23,7 @@
//:://////////////////////////////////////////////
//:: Created By: Various people
//:://////////////////////////////////////////////
#include "prc_inc_wpnrest"
#include "psi_inc_onhit"
#include "inc_rend"
#include "psi_inc_ac_const"
@@ -31,6 +31,7 @@
#include "tob_inc_tobfunc"
#include "prc_inc_sp_tch"
void SetRancorVar(object oPC);
void SetImprovedRicochetVar(object oPC);
void DoImprovedRicochet(object oPC, object oTarget);
@@ -118,7 +119,7 @@ void main()
object oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin); // On a weapon: The one being hit. On an armor: The one hitting the armor
// Make sure you don't hit yourself. Some idiot didn't check that.
// Make sure you don't hit yourself.
if (oSpellOrigin == oSpellTarget)
oSpellTarget = GetProperTarget(oSpellOrigin, oSpellTarget);
@@ -143,17 +144,19 @@ void main()
//int bItemIsWeapon;
//nBArcher = GetLevelByClass(CLASS_TYPE_BLARCHER, oSpellOrigin);
int bSwashWeapon = GetHasSwashbucklerWeapon(oSpellOrigin);
int bCorellonWeapon = GetHasCorellonWeapon(oSpellOrigin);
//// Swashbuckler Weakening and Wounding Criticals
if(GetHasFeat(INSIGHTFUL_STRIKE, oSpellOrigin))
if(GetHasFeat(INSIGHTFUL_STRIKE, oSpellOrigin) && bSwashWeapon)
ExecuteScript("prc_swashweak", oSpellOrigin);
//// Champion of Corellon damage healing for sneak/critical immune creatures
if(GetHasFeat(FEAT_COC_ELEGANT_STRIKE, oSpellOrigin))
if(GetHasFeat(FEAT_COC_ELEGANT_STRIKE, oSpellOrigin) && bCorellonWeapon)
ExecuteScript("prc_coc_heal", oSpellOrigin);
//// Stormlord Shocking & Thundering Spear
if(GetHasFeat(FEAT_THUNDER_WEAPON, oSpellOrigin))
ExecuteScript("ft_shockweap", oSpellOrigin);

View File

@@ -86,7 +86,7 @@ void main()
eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
if (!GetLocalInt(oPC, "FieryBurstBonus"))
if (nBonus < 1)
{
FloatingTextStringOnCreature("You do not have a spell available of adequate level or type", oPC, FALSE);
return;

View File

@@ -142,6 +142,12 @@ int GetHighestSpellAvailableByDescriptor(object oPC, string sDescriptor)
sSpellLabel = Get2DACache(sFile, "Label", i);
if(sSpellLabel != "") // Non-blank row
{
SendMessageToPC(oPC, "GetHighestSpellAvailableByDescriptor >> Entered function.");
SendMessageToPC(oPC, "Row " + IntToString(i) +
" Label = " + sSpellLabel +
" SpellID = " + IntToString(nSpellID) +
" HasSpell " + IntToString(PRCGetHasSpell(nSpellID, oPC)));
if(PRCGetHasSpell(nSpellID, oPC))
{
nNewSpellLevel = StringToInt(Get2DACache(sFile, "Innate", i));

View File

@@ -1,4 +1,5 @@
#include "prc_inc_spells"
#include "prc_inc_wpnrest"
//DAMAGE_TYPE_BASE_WEAPON
//GetAbilityModifier(ABILITY_INTELLIGENCE, oPC)
@@ -57,6 +58,31 @@ void Dodge(object oPC, object oSkin,int sDodge)
//Make this only apply to weapons useable with weapon finesse
//make this not apply if you are wearing medium or heavy armor, or are encumbered.
void SmartWound(object oPC, object oSkin, int iStrike, int iEquip)
{
object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
int iBase = GetBaseAC(oArmor);
int iMax = 3;
int iLight = GetHasSwashbucklerWeapon(oPC);
if (iBase > iMax ) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
else if (iLight < 1) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
else
{
if (GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)))
{
ActionCastSpellOnSelf(SPELL_SWASH_DAMAGE);
}
else
{
PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
}
}
}
/* void SmartWound(object oPC, object oSkin, int iStrike, int iEquip)
{
object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
int iBase = GetBaseAC(oArmor);
@@ -88,9 +114,9 @@ void SmartWound(object oPC, object oSkin, int iStrike, int iEquip)
}
if (GetBaseAC(oArmor)>iMax ) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
if (iBase > iMax ) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
else if (iLight<1) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
else if (iLight < 1) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE);
else
{
if (GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)))
@@ -103,6 +129,7 @@ void SmartWound(object oPC, object oSkin, int iStrike, int iEquip)
}
}
}
*/
//This makes a unique on hit which calls on the "prc_swashweak" scripts
//to simulate a critical hit roll percentage. On success, it deals

View File

@@ -56,6 +56,46 @@ void main()
{
object oTarget = GetEnteringObject();
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
{
// Prevent stacking <20> only apply once per source
effect eTest = GetFirstEffect(oTarget);
while(GetIsEffectValid(eTest))
{
if(GetEffectCreator(eTest) == GetAreaOfEffectCreator() &&
GetStringLeft(GetEffectTag(eTest), 11) == "EFFECT_DESE")
{
return; // Already has desecrate from this AOE
}
eTest = GetNextEffect(oTarget);
}
effect eLink = EffectDamageIncrease(DAMAGE_BONUS_1, DAMAGE_TYPE_NEGATIVE);
eLink = EffectLinkEffects(eLink, EffectAttackIncrease(1));
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 1));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
effect eHP = EffectTemporaryHitpoints(GetHitDice(oTarget));
effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
// Give a unique tag so it can be recognized later
eLink = TagEffect(eLink, "EFFECT_DESECRATE_AURA");
eHP = TagEffect(eHP, "EFFECT_DESECRATE_HP");
if(!GetPRCSwitch(PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL))
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
else
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHP, oTarget);
}
}
/* void main()
{
object oTarget = GetEnteringObject();
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
{
effect eLink = EffectDamageIncrease(DAMAGE_BONUS_1, DAMAGE_TYPE_NEGATIVE);
@@ -74,3 +114,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHP, oTarget);
}
}
*/

View File

@@ -10,7 +10,17 @@
void main()
{
object oTarget = GetExitingObject();
object oTarget = GetExitingObject();
effect eAOE = GetFirstEffect(oTarget);
if(GetEffectCreator(eAOE) == GetAreaOfEffectCreator())
{
string sTag = GetEffectTag(eAOE);
if(sTag == "EFFECT_DESECRATE_AURA" || sTag == "EFFECT_DESECRATE_HP")
RemoveEffect(oTarget, eAOE);
}
/* object oTarget = GetExitingObject();
if(GetHasSpellEffect(SPELL_DES_20, oTarget) || GetHasSpellEffect(SPELL_DES_100, oTarget) || GetHasSpellEffect(SPELL_DESECRATE, oTarget))
{
@@ -26,5 +36,5 @@ void main()
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}
} */
}

View File

@@ -12,8 +12,17 @@
void main()
{
object oTarget = GetExitingObject();
effect eAOE = GetFirstEffect(oTarget);
if(GetEffectCreator(eAOE) == GetAreaOfEffectCreator())
{
string sTag = GetEffectTag(eAOE);
if(sTag == "EFFECT_DESECRATE_AURA" || sTag == "EFFECT_DESECRATE_HP")
RemoveEffect(oTarget, eAOE);
}
if(GetHasSpellEffect(SPELL_DES_20, oTarget) || GetHasSpellEffect(SPELL_DES_100, oTarget) || GetHasSpellEffect(SPELL_DESECRATE, oTarget))
/* if(GetHasSpellEffect(SPELL_DES_20, oTarget) || GetHasSpellEffect(SPELL_DES_100, oTarget) || GetHasSpellEffect(SPELL_DESECRATE, oTarget))
{
//Search through the valid effects on the target.
effect eAOE = GetFirstEffect(oTarget);
@@ -27,5 +36,5 @@ void main()
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}
} */
}