145 lines
3.9 KiB
Plaintext
145 lines
3.9 KiB
Plaintext
/*
|
|
this is for debugging purposes
|
|
If this file is #include by a Conversation Appears When script
|
|
comment the following line out
|
|
*/
|
|
int StartingConditional() { return TRUE; }
|
|
|
|
|
|
/* Return the number of members in the party oMember belongs to */
|
|
int mw_NumberInParty(object oMember)
|
|
{
|
|
object oPC;
|
|
int ret;
|
|
|
|
oPC = GetFirstFactionMember(oMember);
|
|
for (ret = 1; GetIsObjectValid(oPC); ret++)
|
|
oPC = GetNextFactionMember(oMember, TRUE);
|
|
return ret;
|
|
}
|
|
|
|
/* checks to see if oQuery belongs to oMember's party */
|
|
int mw_BelongsToParty(object oMember, object oQuery)
|
|
{
|
|
object oPC;
|
|
|
|
if (oMember == oQuery)
|
|
return TRUE;
|
|
oPC = GetFirstFactionMember(oMember, TRUE);
|
|
while (GetIsObjectValid(oPC))
|
|
{
|
|
if (oPC == oQuery)
|
|
return TRUE;
|
|
oPC = GetNextFactionMember(oMember, TRUE);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
object mw_GetAvailablePortal(string sTag, object oTarget)
|
|
{
|
|
int i;
|
|
object oPortal;
|
|
|
|
for (i=1; ; i++)
|
|
{
|
|
oPortal = GetNearestObjectByTag(sTag, oTarget, i);
|
|
if (oPortal == OBJECT_INVALID)
|
|
break;
|
|
if (GetLocalInt(oPortal, "mw_Taken") == 0)
|
|
{
|
|
SetLocalInt(oPortal, "mw_Taken", 1);
|
|
return oPortal;
|
|
}
|
|
}
|
|
return OBJECT_INVALID;
|
|
}
|
|
|
|
object mw_CreateSinglePortal(object oOwner, string sTemplate, object oLocation)
|
|
{
|
|
object oPortal;
|
|
|
|
oPortal = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, GetLocation(oLocation), TRUE);
|
|
SetLocalObject(oPortal, "mw_PortalOwner", oOwner);
|
|
SetLocalObject(oPortal, "mw_PortalLocation", oLocation);
|
|
SetLocalInt(oPortal, "mw_PortalCharges", 1);
|
|
return oPortal;
|
|
}
|
|
|
|
//Create a portal usable by all members of the party, once
|
|
// -oOwner: person who requested the portal to be created
|
|
// -sTemplate blueprint resref of portal placeable to create
|
|
// -lLocation
|
|
object mw_CreatePartyPortal(object oOwner, string sTemplate, object oLocation)
|
|
{
|
|
object oPortal;
|
|
|
|
oPortal = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, GetLocation(oLocation), TRUE);
|
|
SetLocalObject(oPortal, "mw_PortalOwner", oOwner);
|
|
SetLocalObject(oPortal, "mw_PortalLocation", oLocation);
|
|
SetLocalInt(oPortal, "mw_PortalCharges", mw_NumberInParty(oOwner));
|
|
return oPortal;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
Removes all spell or feat effects,
|
|
*/
|
|
void mw_StripAllEffects(object oCreature)
|
|
{
|
|
effect e;
|
|
|
|
e = GetFirstEffect(oCreature);
|
|
while (GetIsEffectValid(e))
|
|
{
|
|
RemoveEffect(oCreature, e);
|
|
e = GetNextEffect(oCreature);
|
|
}
|
|
|
|
}
|
|
void mw_StripAllCreatures(object oCreature)
|
|
{
|
|
object oPet;
|
|
oPet = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCreature);
|
|
if (GetIsObjectValid(oPet))
|
|
DestroyObject(oPet);
|
|
oPet = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oCreature);
|
|
if (GetIsObjectValid(oPet))
|
|
DestroyObject(oPet);
|
|
oPet = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCreature);
|
|
if (GetIsObjectValid(oPet))
|
|
DestroyObject(oPet);
|
|
|
|
/* removed this until can sort out setting IsDestroyable and respawning correctly for SoU henchmen
|
|
|
|
oPet = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oCreature);
|
|
if (GetIsObjectValid(oPet))
|
|
DestroyObject(oPet);
|
|
|
|
*/
|
|
|
|
oPet = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCreature);
|
|
if (GetIsObjectValid(oPet))
|
|
DestroyObject(oPet);
|
|
}
|
|
|
|
|
|
/*
|
|
remove all feat/spell effects from the creature, teleport them to the
|
|
oDestination object (either a waypoint or a creature), apply blindness and
|
|
stun effects to them upon their arrival
|
|
*/
|
|
void mw_TeleportWithEffects(object oCreature, object oDestination, float nSeconds)
|
|
{
|
|
mw_StripAllEffects(oCreature);
|
|
mw_StripAllCreatures(oCreature);
|
|
AssignCommand(oCreature, ActionJumpToObject(oDestination));
|
|
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oCreature, nSeconds));
|
|
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBlindness(), oCreature, nSeconds));
|
|
|
|
// DelayCommand(nSeconds, mw_StripAllEffects(oCreature));
|
|
|
|
}
|
|
|