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.
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(){}
|