#include "x3_inc_horse" //multiple summon wrapper //replaces EffectSummonCreature //also incorporates the duration from ApplyEffect //sSummon is the resref //nFNF_Effect is the VFX //lLoc is the location //nDurationType is the duration type of the summon //fDuration is the duration of the summon, assuming nDurationType is temporary //fSummonDelay is the delay between the command and the summon NOT IMPLEMENTED //fVisDelay is the delay between the command and the VFX //nUseAppearAnimation is passed to CreateObject void PrimoEffectSummonCreature(string sSummon, int nFNF_Effect, location lLoc,int nDurationType, float fDuration=0.0, float fSummonDelay = 0.0, float fVisDelay = 1.0, int nUseAppearAnimation = FALSE); //this determies the rate of a pseudoHB that checks //for removal from party and master death //Higher = less lag / less accuracy //Lower = more lag / more accuracy const float CHECK_RATE = 5.0; //minimum number of rounds a summon should exist for //PnP has none, but because sometime the AI takes a while deciding what to do //a minimum is a good thing for low level characters. //If you change this, recompile all the scripts const int SUMMON_DURATION_MIN = 20; //if you want to toggle between biowares 24h summmons //and PnP 1 round per level summons //change the varaible "PnPSummonDuration" on the module to 1 //for the PnP rules, or 0 for bioware rules. //private function, no prototype void PrimoSummonCheckmaster() { object oMaster = GetMaster(); if(!GetIsObjectValid(oMaster) ||GetIsDead(oMaster) ||GetIsDead(OBJECT_SELF)) { effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(OBJECT_SELF)); SetIsDestroyable(TRUE, FALSE, FALSE); DestroyObject(OBJECT_SELF); return; } DelayCommand(CHECK_RATE, PrimoSummonCheckmaster()); } void PrimoEffectSummonCreature(string sSummon, int nFNF_Effect, location lLoc, int nDurationType, float fDuration=0.0, float fSummonDelay = 0.0, float fVisDelay = 1.0, int nUseAppearAnimation = FALSE) { effect eVis = EffectVisualEffect(nFNF_Effect); DelayCommand(fVisDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lLoc)); object oSummon = CreateObject(OBJECT_TYPE_CREATURE, sSummon, lLoc, nUseAppearAnimation); int nHenchies = GetMaxHenchmen(); SetMaxHenchmen(nHenchies+5); AddHenchman(OBJECT_SELF, oSummon); SetMaxHenchmen(nHenchies); SetLocalInt(oSummon, "bIsSummon", TRUE); AssignCommand(oSummon, DelayCommand(CHECK_RATE, PrimoSummonCheckmaster())); if(nDurationType == DURATION_TYPE_TEMPORARY) DestroyObject(oSummon, fDuration+fSummonDelay); }