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.
152 lines
4.4 KiB
Plaintext
152 lines
4.4 KiB
Plaintext
#include "prc_inc_clsfunc"
|
|
|
|
void CleanCopy(object oImage)
|
|
{
|
|
SetLootable(oImage, FALSE);
|
|
object oItem = GetFirstItemInInventory(oImage);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
SetDroppableFlag(oItem, FALSE);
|
|
SetItemCursedFlag(oItem, TRUE);
|
|
oItem = GetNextItemInInventory(oImage);
|
|
}
|
|
int i;
|
|
for(i=0;i<NUM_INVENTORY_SLOTS;i++)//equipment
|
|
{
|
|
oItem = GetItemInSlot(i, oImage);
|
|
SetDroppableFlag(oItem, FALSE);
|
|
SetItemCursedFlag(oItem, TRUE);
|
|
}
|
|
TakeGoldFromCreature(GetGold(oImage), oImage, TRUE);
|
|
}
|
|
|
|
void CleanAllCopies()
|
|
{
|
|
string sImage1 = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"mirror";
|
|
string sImage2 = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"flurry";
|
|
|
|
object oCreature = GetFirstObjectInArea(GetArea(OBJECT_SELF));
|
|
while (GetIsObjectValid(oCreature))
|
|
{
|
|
if(GetTag(oCreature) == sImage1 || GetTag(oCreature) == sImage2)
|
|
{
|
|
CleanCopy(oCreature);
|
|
}
|
|
oCreature = GetNextObjectInArea(GetArea(OBJECT_SELF));;
|
|
}
|
|
}
|
|
|
|
void RemoveExtraImages()
|
|
{
|
|
string sImage1 = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"mirror";
|
|
string sImage2 = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"flurry";
|
|
|
|
object oCreature = GetFirstObjectInArea(GetArea(OBJECT_SELF));
|
|
while (GetIsObjectValid(oCreature))
|
|
{
|
|
if(GetTag(oCreature) == sImage1 || GetTag(oCreature) == sImage2)
|
|
{
|
|
DestroyObject(oCreature, 0.0);
|
|
}
|
|
oCreature = GetNextObjectInArea(GetArea(OBJECT_SELF));;
|
|
}
|
|
}
|
|
|
|
void main2()
|
|
{
|
|
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
int iLevel = GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, OBJECT_SELF);
|
|
int iAdd = iLevel/3;
|
|
int iImages = d4(1) + 3;
|
|
|
|
PRCRemoveEffectsFromSpell(OBJECT_SELF, GetSpellId());
|
|
|
|
SetLocalObject(OBJECT_SELF, "FLURRY_TARGET", oTarget);
|
|
|
|
FlurryEffects(OBJECT_SELF);
|
|
|
|
string sImage = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"flurry";
|
|
|
|
effect eImage = EffectCutsceneGhost();
|
|
eImage = SupernaturalEffect(eImage);
|
|
effect eNoSpell = EffectSpellFailure(100);
|
|
eNoSpell = SupernaturalEffect(eNoSpell);
|
|
|
|
int iPlus;
|
|
for (iPlus = 0; iPlus < iImages; iPlus++)
|
|
{
|
|
|
|
object oImage = CopyObject(OBJECT_SELF, GetLocation(OBJECT_SELF), OBJECT_INVALID, sImage);
|
|
|
|
AssignCommand(oImage, ActionAttack(oTarget, FALSE));
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImage, oImage);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNoSpell, oImage);
|
|
|
|
ChangeToStandardFaction(oImage, STANDARD_FACTION_DEFENDER);
|
|
SetIsTemporaryFriend(OBJECT_SELF, oImage, FALSE);
|
|
|
|
DestroyObject(oImage, iLevel * 60.0); // they dissapear after one minute per level.
|
|
}
|
|
|
|
CleanAllCopies();
|
|
|
|
object oCreature = GetFirstObjectInArea(GetArea(OBJECT_SELF));
|
|
while (GetIsObjectValid(oCreature))
|
|
{
|
|
if(GetTag(oCreature) == sImage)
|
|
{
|
|
DelayCommand(3.0, SPMakeAttack(oTarget, oCreature));
|
|
}
|
|
oCreature = GetNextObjectInArea(GetArea(OBJECT_SELF));;
|
|
}
|
|
|
|
}
|
|
|
|
void main()
|
|
{
|
|
// First we'll see if this target is in the flurry list.
|
|
int i;
|
|
string sName1 = "FLURRY_TARGET_";
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
for (i = 0 ; i < 10 ; i++)
|
|
{
|
|
string sName2 = sName1 + IntToString(i);
|
|
if (GetLocalObject(OBJECT_SELF, sName2) == oTarget)
|
|
{
|
|
IncrementRemainingFeatUses(OBJECT_SELF, 3534); // Flurry of Swords
|
|
FloatingTextStringOnCreature("This target has already been selected today.", OBJECT_SELF, FALSE);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (oTarget == OBJECT_SELF)
|
|
{
|
|
IncrementRemainingFeatUses(OBJECT_SELF, 3534); // Flurry of Swords
|
|
FloatingTextStringOnCreature("You may not target yourself.", OBJECT_SELF, FALSE);
|
|
return;
|
|
}
|
|
|
|
if (!GetIsReactionTypeHostile(oTarget))
|
|
{
|
|
IncrementRemainingFeatUses(OBJECT_SELF, 3534); // Flurry of Swords
|
|
FloatingTextStringOnCreature("You must target an enemy.", OBJECT_SELF, FALSE);
|
|
return;
|
|
}
|
|
|
|
// If it's not on the flurry list, add it to the list
|
|
int iTargets = GetLocalInt(OBJECT_SELF, "FLURRY_TARGET_NUMBER");
|
|
sName1 = "FLURRY_TARGET_" + IntToString(iTargets);
|
|
|
|
SetLocalInt(OBJECT_SELF, "FLURRY_TARGET_NUMBER", iTargets + 1);
|
|
SetLocalObject(OBJECT_SELF, sName1, oTarget);
|
|
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), TRUE));
|
|
|
|
// Continue on...
|
|
DelayCommand(0.0, RemoveExtraImages());
|
|
DelayCommand(0.5, main2());
|
|
}
|