forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
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());
|
|
}
|