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.
168 lines
4.8 KiB
Plaintext
168 lines
4.8 KiB
Plaintext
//include file for new polymorph like functions using the pnp shifters shifting code
|
|
//created by paradox_42 - 2005/07/01
|
|
|
|
|
|
// used to shift by resref
|
|
// oPC = PC to shift/polymorph
|
|
// sResRef = ResRef of Target to shift/polymorph into
|
|
// iExtraAbilitys = gives epic shifter orb with target spell-like abilitys on it (TRUE = extra; FALSE = non)
|
|
int PRC_Polymorph_ResRef(object oPC, string sResRef, int iExtraAbilitys);
|
|
|
|
// used to shift by Object
|
|
// oPC = PC to shift/polymorph
|
|
// oTarget = Target object to shift/polymorph into
|
|
// iExtraAbilitys = gives epic shifter orb with target spell-like abilitys on it (TRUE = extra; FALSE = non)
|
|
// iDeleteTarget = delete the target object after shift done (TRUE = delete; FALSE = leave)
|
|
// iUseClone = use the ResRef of the target object to create a clone to shift into (TRUE = use clone; FALSE = use target object)
|
|
int PRC_Polymorph_Object(object oPC, object oTarget, int iExtraAbilitys, int iDeleteTarget, int iUseClone);
|
|
|
|
// used to check for shifted
|
|
// oPC = PC to check if shifted or not
|
|
// returns TRUE if shifted
|
|
int PRC_Polymorph_Check(object oPC);
|
|
|
|
// used to unshift the PC
|
|
// oPC = PC to unshift/unpolymorph
|
|
void PRC_UnPolymorph(object oPC);
|
|
|
|
#include "pnp_shft_main"
|
|
|
|
|
|
|
|
int PRC_Polymorph_ResRef(object oPC, string sResRef, int iExtraAbilitys)
|
|
{
|
|
StoreAppearance(oPC);
|
|
if (!CanShift(oPC))
|
|
{
|
|
return FALSE;
|
|
}
|
|
int i = 0;
|
|
object oLimbo = GetObjectByTag("Limbo", i);
|
|
location lLimbo;
|
|
while (i < 100)
|
|
{
|
|
if (GetIsObjectValid(oLimbo))
|
|
{
|
|
if (GetName(oLimbo) == "Limbo")
|
|
{
|
|
i = 2000;
|
|
vector vLimbo = Vector(0.0f, 0.0f, 0.0f);
|
|
lLimbo = Location(oLimbo, vLimbo, 0.0f);
|
|
}
|
|
}
|
|
i++;
|
|
object oLimbo = GetObjectByTag("Limbo", i);
|
|
}
|
|
object oTarget;
|
|
if (i>=2000)
|
|
{
|
|
oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLimbo);
|
|
}
|
|
else
|
|
{
|
|
oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC));
|
|
}
|
|
if (!GetIsObjectValid(oTarget))
|
|
{
|
|
SendMessageToPC(oPC, "Not a valid creature.");
|
|
// Remove the temporary creature
|
|
AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE));
|
|
SetPlotFlag(oTarget,FALSE);
|
|
SetImmortal(oTarget,FALSE);
|
|
DestroyObject(oTarget);
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
//get the appearance before changing it
|
|
SetLocalInt(oTarget,"Appearance",GetAppearanceType(oTarget));
|
|
//set appearance to invis so it dont show up when scripts run thro
|
|
SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE);
|
|
//set oTarget for deletion
|
|
SetLocalInt(oTarget,"pnp_shifter_deleteme",1);
|
|
//Shift the PC to it
|
|
if (iExtraAbilitys == TRUE)
|
|
SetShiftEpic(oPC, oTarget);
|
|
else
|
|
SetShift(oPC, oTarget);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
int PRC_Polymorph_Object(object oPC, object oTarget, int iExtraAbilitys, int iDeleteTarget, int iUseClone)
|
|
{
|
|
StoreAppearance(oPC);
|
|
if (!CanShift(oPC))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (iUseClone == TRUE)
|
|
{
|
|
string sResRef = GetResRef(oTarget);
|
|
int i = 0;
|
|
object oLimbo = GetObjectByTag("Limbo", i);
|
|
location lLimbo;
|
|
while (i < 100)
|
|
{
|
|
if (GetIsObjectValid(oLimbo))
|
|
{
|
|
if (GetName(oLimbo) == "Limbo")
|
|
{
|
|
i = 2000;
|
|
vector vLimbo = Vector(0.0f, 0.0f, 0.0f);
|
|
lLimbo = Location(oLimbo, vLimbo, 0.0f);
|
|
}
|
|
}
|
|
i++;
|
|
object oLimbo = GetObjectByTag("Limbo", i);
|
|
}
|
|
if (i>=2000)
|
|
{
|
|
oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLimbo);
|
|
}
|
|
else
|
|
{
|
|
oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC));
|
|
}
|
|
}
|
|
if (!GetIsObjectValid(oTarget))
|
|
{
|
|
SendMessageToPC(oPC, "Not a valid creature.");
|
|
// Remove the temporary creature
|
|
AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE));
|
|
SetPlotFlag(oTarget,FALSE);
|
|
SetImmortal(oTarget,FALSE);
|
|
DestroyObject(oTarget);
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
SetLocalInt(oTarget,"Appearance",GetAppearanceType(oTarget));
|
|
if (iDeleteTarget == TRUE)
|
|
{
|
|
//set oTarget for deletion
|
|
SetLocalInt(oTarget,"pnp_shifter_deleteme",1);
|
|
}
|
|
//Shift the PC to it
|
|
if (iExtraAbilitys == TRUE)
|
|
SetShiftEpic(oPC, oTarget);
|
|
else
|
|
SetShift(oPC, oTarget);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
int PRC_Polymorph_Check(object oPC)
|
|
{
|
|
return GetPersistantLocalInt(oPC, "nPCShifted");
|
|
}
|
|
|
|
void PRC_UnPolymorph(object oPC)
|
|
{
|
|
ExecuteScript("pnp_shft_true", oPC);
|
|
}
|
|
|
|
|
|
// Test main
|
|
//void main(){}
|