UW2_PRC8/_module/nss/scanswitch.nss
Jaysyn904 5197ad9a4d Initial upload
Initial upload
2023-09-25 20:24:01 -04:00

103 lines
3.0 KiB
Plaintext

////////////////////////////////////
//Created By: Genisys / Guile
//Created On: 7/01/08
///////////////////////////////////////////
/* ***IMPORTANT****
This script goes in the OnUsed Event
of a Placeable Control or Switch, it
should be used on something ALL PCs
must use to enter the module preferrably.
YOU MUST SET THE TAGNAME BELOW!
*/
////////////////////////////////////////////
//Change "home" below to the tagname of
//the waypoint you want the PCs to teleport
//to after they use the scan switch.
const string sWay = "home"; //Always use the " "
/////////////////////////////////////////////
//Main Script (DON'T TOUCH ANYTHING BELOW!)
/////////////////////////////////////////////
void main()
{
//Define Major Variables
object oPC = GetLastUsedBy();
//If it's not a PC Stop here!
if(!GetIsPC(oPC))return;
//Do this only one time per PC per restart..
if(GetLocalInt(oPC, "iSwitchScan")==2)
{
//Stop the script dead here!
return;
}
//Othewise they must have never done this.. continue on!
else
{
//NOTE: You can make it always scan every PC ever time
//Simply type // at the start of the line below to make this always active..
SetLocalInt(oPC, "iSwitchScan", 2);
}
//First make the PC Unequip all items they are wearing
//If the items were not unequipped some might be missed (bug)
object oSlot;
int nSlot;
for (nSlot=0; nSlot<NUM_INVENTORY_SLOTS; nSlot++)
{
oSlot = GetItemInSlot(nSlot, oPC);
AssignCommand(oPC, ActionUnequipItem(oSlot));
}
//Now scan all of the items in the PCs inventory for...
//Disallowed Item Properties,
//Uber Items
//Items with TOO many properties
//Do it twice just incase we missed something!
DelayCommand(0.1, ExecuteScript("scanitems", oPC));
DelayCommand(2.0, ExecuteScript("scanitems", oPC));
//Let's make sure where the PC is going is valid or stop here!
object oWay = GetObjectByTag(sWay);
location lWay = GetLocation(oWay);
if (GetAreaFromLocation(lWay)==OBJECT_INVALID) return;
//Do a fancy visual to keep the PC occupied :)
object oTarget;
oTarget = oPC;
int nInt;
//Do a fancy healing tornado first..
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT)ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_TORNADO), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_TORNADO), GetLocation(oTarget));
//Also, Do Time Stop next..
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TIME_STOP), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TIME_STOP), GetLocation(oTarget));
//After timestop is about done, do an unsummon visual effect..
effect eEffect;
eEffect = EffectVisualEffect(VFX_IMP_UNSUMMON);
DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC));
//Now teleport the PC after the visual effects and scanning are done..
DelayCommand(7.0, AssignCommand(oPC, ClearAllActions()));
DelayCommand(7.1, AssignCommand(oPC, ActionJumpToLocation(lWay)));
//Main Script End
}