コード例 #1
0
 private void stripProperties(CLRScriptBase script, uint item)
 {
     for (ItemProperty ip = script.GetFirstItemProperty(item); script.GetIsItemPropertyValid(ip) == CLRScriptBase.TRUE; ip = script.GetNextItemProperty(item))
     {
         script.RemoveItemProperty(item, ip);
     }
 }
コード例 #2
0
        public static int GetTotalValueOfKit(CLRScriptBase script, uint Character)
        {
            int lootValue = 0;

            foreach (uint item in script.GetItemsInInventory(Character))
            {
                lootValue += script.GetGoldPieceValue(item);
            }
            lootValue += script.GetGold(Character);

            for (int slot = 0; slot < 14; slot++)
            {
                uint equip = script.GetItemInSlot(slot, Character);
                if (script.GetIsObjectValid(equip) == CLRScriptBase.TRUE)
                {
                    lootValue += script.GetGoldPieceValue(equip);
                }
            }

            if (pChestAccess.ContainsKey(Character))
            {
                foreach (string chest in pChestAccess[Character])
                {
                    lootValue += pChestValues[chest];
                }
            }
            return(lootValue);
        }
コード例 #3
0
        public static void Enter(CLRScriptBase s, ALFA.Shared.ActiveTrap trap)
        {
            uint enterer = s.GetEnteringObject();

            if (trap.IsFiring)
            {
                // Trap's already firing. It'll reset when it runs out of targets.
                return;
            }

            // If one is enough, we don't need to check the trigger's contents.
            if (trap.MinimumToTrigger == 1)
            {
                if (FitsTrapTargetRestriction(s, trap, enterer))
                {
                    Fire(s, trap);
                }
            }
            else
            {
                int validTargets = 0;
                foreach (uint contents in s.GetObjectsInPersistentObject(s.GetObjectByTag(trap.Tag, 0), OBJECT_TYPE_CREATURE, 0))
                {
                    if (FitsTrapTargetRestriction(s, trap, contents))
                    {
                        validTargets++;
                    }
                }
                if (validTargets >= trap.MinimumToTrigger)
                {
                    Fire(s, trap);
                }
            }
        }
コード例 #4
0
 private static void _doGroupVFX(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, NWLocation target)
 {
     if (trap.EffectSize < 2.0f)
     {
         return;
     }                                       // these are probably single-target, and a group VFX would be overkill.
     else
     {
         if ((trap.DamageType & DAMAGE_TYPE_DIVINE) == DAMAGE_TYPE_DIVINE)
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_LOS_HOLY_10, FALSE), target, 0.0f);
         }
         else if ((trap.DamageType & DAMAGE_TYPE_FIRE) == DAMAGE_TYPE_FIRE)
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_FIREBALL, FALSE), target, 0.0f);
         }
         else if ((trap.DamageType & DAMAGE_TYPE_MAGICAL) == DAMAGE_TYPE_MAGICAL)
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_LOS_NORMAL_10, FALSE), target, 0.0f);
         }
         else if ((trap.DamageType & DAMAGE_TYPE_NEGATIVE) == DAMAGE_TYPE_NEGATIVE)
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD, FALSE), target, 0.0f);
         }
         else if ((trap.DamageType & DAMAGE_TYPE_POSITIVE) == DAMAGE_TYPE_POSITIVE)
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_LOS_HOLY_10, FALSE), target, 0.0f);
         }
         else
         {
             s.ApplyEffectAtLocation(DURATION_TYPE_INSTANT, s.EffectVisualEffect(VFX_FNF_FIREBALL, FALSE), target, 0.0f);
         }
     }
 }
コード例 #5
0
 public static bool FitsTrapTargetRestriction(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, uint target)
 {
     if (s.GetIsDead(target, FALSE) == TRUE)
     {
         return(false);
     }
     if (trap.TargetAlignment != ALIGNMENT_ALL)
     {
         if ((trap.TargetAlignment == ALIGNMENT_CHAOTIC ||
              trap.TargetAlignment == ALIGNMENT_LAWFUL ||
              trap.TargetAlignment == ALIGNMENT_NEUTRAL) &&
             s.GetAlignmentLawChaos(target) != trap.TargetAlignment)
         {
             return(false);
         }
         if ((trap.TargetAlignment == ALIGNMENT_GOOD ||
              trap.TargetAlignment == ALIGNMENT_EVIL ||
              trap.TargetAlignment == ALIGNMENT_NEUTRAL) &&
             s.GetAlignmentGoodEvil(target) != trap.TargetAlignment)
         {
             return(false);
         }
     }
     if (trap.TargetRace != RACIAL_TYPE_ALL)
     {
         if (trap.TargetRace != s.GetRacialType(target))
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #6
0
        public static DisableResult IsDisableSuccessful(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, int DC, uint disabler)
        {
            if (s.GetSkillRank(SKILL_DISABLE_TRAP, disabler, TRUE) == 0)
            {
                s.SendMessageToPC(disabler, "<c=#98FFFF>Disable Device: * Success will never be possible *</c>");
                return(DisableResult.Failure);
            }

            int           roll         = s.d20(1);
            int           skill        = s.GetSkillRank(SKILL_DISABLE_TRAP, disabler, FALSE) + trap.TotalHelp;
            int           final        = roll + skill;
            string        resultString = "Failure!";
            DisableResult value        = DisableResult.Failure;

            if (final >= DC)
            {
                value        = DisableResult.Success;
                resultString = "Success!";
            }
            if (DC > final + 4)
            {
                value        = DisableResult.CriticalFailure;
                resultString = "CRITICAL FAILURE!";
            }
            string message = String.Format("<c=#98FFFF>Disable Device : {0} + {1} = {2} vs. DC {3}. * {4} *</c>", roll, skill, final, DC, resultString);

            s.SendMessageToPC(disabler, message);

            return(value);
        }
コード例 #7
0
        private static void HandleTrapDetected(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, uint detector)
        {
            trap.Detected = true;

            NWEffect vfx = s.SupernaturalEffect(s.EffectNWN2SpecialEffectFile(trap.TrapTriggerVFX, OBJECT_INVALID, s.Vector(0.0f, 0.0f, 0.0f)));

            s.ApplyEffectToObject(DURATION_TYPE_PERMANENT, vfx, s.GetObjectByTag(trap.Tag, 0), 0.0f);

            uint detectWidget = s.CreateObject(OBJECT_TYPE_PLACEABLE, "acr_trap_disarm", s.GetLocation(detector), TRUE, trap.Tag + "_");

            if (!String.IsNullOrEmpty(trap.Description))
            {
                s.SetDescription(detectWidget, trap.Description);
            }
            s.SetFirstName(detectWidget, String.Format("Disarm the {0} trap", trap.SpellTrap ? "Spell" : "Mechanical"));

            // If they clicked to walk, let's stop them from walking into the hazard they just found.
            if (s.GetCurrentAction(detector) == ACTION_MOVETOPOINT)
            {
                s.AssignCommand(detector, delegate { s.ClearAllActions(0); });
            }
            s.PlaySound("alert", FALSE);
            s.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, s.SupernaturalEffect(s.EffectNWN2SpecialEffectFile("fx_bang", detector, s.Vector(0.0f, 0.0f, 0.0f))), detector, 6.0f);
            s.SendMessageToPC(detector, "You spot a trap!");
        }
コード例 #8
0
 public static void DrawNavigatorCategory(CLRScriptBase script, NavigatorCategory nav)
 {
     if (nav != null)
     {
         script.ClearListBox(script.OBJECT_SELF, "SCREEN_DMC_CREATOR", "LISTBOX_ACR_CREATOR");
         if (nav.ParentCategory != null)
         {
             string textFields = "LISTBOX_ITEM_TEXT=  ..";
             string variables  = "5=Category:..";
             script.AddListBoxRow(script.OBJECT_SELF, "SCREEN_DMC_CREATOR", "LISTBOX_ACR_CREATOR", "Category:..", textFields, "LISTBOX_ITEM_ICON=folder.tga", variables, "unhide");
         }
         foreach (NavigatorCategory navCat in nav.ContainedCategories)
         {
             string textFields = String.Format("LISTBOX_ITEM_TEXT=  {0}", navCat.DisplayName);
             string variables  = String.Format("5={0}", "Category:" + navCat.Name);
             script.AddListBoxRow(script.OBJECT_SELF, "SCREEN_DMC_CREATOR", "LISTBOX_ACR_CREATOR", "Category:" + navCat.Name, textFields, "LISTBOX_ITEM_ICON=folder.tga", variables, "unhide");
         }
         foreach (IListBoxItem navItem in nav.ContainedItems)
         {
             script.AddListBoxRow(script.OBJECT_SELF, "SCREEN_DMC_CREATOR", "LISTBOX_ACR_CREATOR", navItem.RowName, navItem.TextFields, navItem.Icon, navItem.Variables, "unhide");
         }
     }
     else
     {
         script.SendMessageToPC(script.OBJECT_SELF, "Error: Navigator category is null. Cannot draw a list.");
     }
 }
コード例 #9
0
 private static void DetectHeartBeat(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, uint detector)
 {
     if (IsTrapDetectedBy(s, trap, detector))
     {
         HandleTrapDetected(s, trap, detector);
     }
 }
コード例 #10
0
 public static void DrawAreas(CLRScriptBase script, User currentUser)
 {
     script.ClearListBox(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS");
     if (ALFA.Shared.Modules.InfoStore.ActiveAreas.Keys.Contains(script.GetArea(currentUser.Id)))
     {
         ALFA.Shared.ActiveArea currentArea = ALFA.Shared.Modules.InfoStore.ActiveAreas[script.GetArea(currentUser.Id)];
         string currentName = "<Color=DarkOrange>" + currentArea.DisplayName + "________";
         DisplayString.ShortenStringToWidth(currentName, 250);
         currentName = currentName.Trim('_') + "</color>";
         script.AddListBoxRow(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS", currentArea.Id.ToString(), "LISTBOX_ITEM_TEXT=  " + currentName, "", "5=" + currentArea.Id.ToString(), "");
         List <ALFA.Shared.ActiveArea> adjAreas = new List <ALFA.Shared.ActiveArea>();
         foreach (ALFA.Shared.ActiveArea adjacentArea in currentArea.ExitTransitions.Values)
         {
             if (!adjAreas.Contains(adjacentArea))
             {
                 string adjName = "<Color=DarkGoldenRod>" + adjacentArea.DisplayName + "________";
                 DisplayString.ShortenStringToWidth(adjName, 250);
                 adjName = adjName.Trim('_') + "</color>";
                 script.AddListBoxRow(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS", adjacentArea.Id.ToString(), "LISTBOX_ITEM_TEXT=  " + adjName, "", "5=" + adjacentArea.Id.ToString(), "");
                 adjAreas.Add(adjacentArea);
             }
         }
     }
     foreach (ALFA.Shared.ActiveArea area in AreaList)
     {
         script.AddListBoxRow(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS", area.Id.ToString(), "LISTBOX_ITEM_TEXT=  " + area.DisplayName, "", "5=" + area.Id.ToString(), "");
     }
     currentUser.LastSeenArea = script.GetArea(currentUser.Id);
 }
コード例 #11
0
        private static uint GetNearestTrapEmitter(CLRScriptBase script, NWLocation loc)
        {
            float   nearestDist   = -1.0f;
            uint    nearestObject = CLRScriptBase.OBJECT_INVALID;
            Vector3 trapPos       = script.GetPositionFromLocation(loc);

            foreach (uint obj in script.GetObjectsInArea(script.GetAreaFromLocation(loc)))
            {
                if (script.GetObjectType(obj) == OBJECT_TYPE_PLACEABLE &&
                    (script.GetTag(obj) == "TRAP_EMITTER" ||
                     script.GetTag(obj) == "TRAP_ORIGIN"))
                {
                    Vector3 emitterPos = script.GetPosition(obj);
                    float   newDist    = (trapPos.x - emitterPos.x) * (trapPos.x - emitterPos.x) + (trapPos.y - emitterPos.y) * (trapPos.y - emitterPos.y);
                    if (nearestDist < 0 || nearestDist > newDist)
                    {
                        nearestDist   = newDist;
                        nearestObject = obj;
                    }
                }
            }
            if (script.GetIsObjectValid(nearestObject) == CLRScriptBase.FALSE || nearestDist > 400.0f) // 20 meters; nearestDist is squared to be cheaper
            {
                nearestObject = CLRScriptBase.OBJECT_INVALID;
            }
            return(nearestObject);
        }
コード例 #12
0
        public static void WaitForSearch(CLRScriptBase script, User currentUser, ACR_ChooserCreator.ACR_CreatorCommand currentTab, CreatorSearch awaitedSearch)
        {
            if (awaitedSearch == null)
            {
                // Search has been removed. Abort.
                return;
            }
            if (awaitedSearch.CancellationPending)
            {
                // Search has been canceled. Abort.
                return;
            }
            if (currentUser.openCommand != currentTab)
            {
                // User has switched tabs. Kill the search.
                return;
            }
            if (currentUser.CreatorSearchResponse != null)
            {
                // Looks like we've finished. Draw a list!
                CreatorSearch oldSearch = currentUser.CurrentSearch;
                currentUser.CurrentSearch = null;
                oldSearch.Dispose();

                Waiter.DrawNavigatorCategory(script, currentUser.CreatorSearchResponse);
                switch (currentUser.openCommand)
                {
                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_CREATURE_TAB:
                    currentUser.CurrentCreatureCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_ITEM_TAB:
                    currentUser.CurrentItemCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_LIGHTS_TAB:
                    currentUser.CurrentLightCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_PLACEABLE_TAB:
                    currentUser.CurrentPlaceableCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_TRAP_TAB:
                    currentUser.CurrentTrapCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_VFX_TAB:
                    currentUser.CurrentVisualEffectCategory = currentUser.CreatorSearchResponse;
                    break;

                case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_WAYPOINT_TAB:
                    currentUser.CurrentWaypointCategory = currentUser.CreatorSearchResponse;
                    break;
                }
                return;
            }
            script.DelayCommand(1.0f, delegate { WaitForSearch(script, currentUser, currentTab, awaitedSearch); });
        }
コード例 #13
0
        public void ClearArea(string areaTag, ActiveArea area, CLRScriptBase s)
        {
            if (area == null)
            {
                area = GetAreaByTag(areaTag);
            }
            if (InfestedAreas.Contains(area))
            {
                InfestedAreas.Remove(area);
            }
            if (InfestedAreaLevels.ContainsKey(areaTag))
            {
                InfestedAreaLevels.Remove(areaTag);
            }
            if (InfestedAreas.Count < 1)
            {
                QuestStore.LoadedInfestations.Remove(this);
                this.Delete();
            }
            int  count = 0;
            uint wp    = s.GetLocalObject(area.Id, WayPointArrayName + count.ToString());

            s.DeleteLocalString(area.Id, InfestNameVar);
            while (s.GetIsObjectValid(wp) != CLRScriptBase.FALSE)
            {
                int    groupNum = 1;
                string oldGroup = s.GetLocalString(wp, InfestPrefix + GroupVarName + groupNum.ToString());
                while (oldGroup != "")
                {
                    s.SetLocalString(wp, GroupVarName + groupNum.ToString(), oldGroup);
                    groupNum++;
                    oldGroup = s.GetLocalString(wp, InfestPrefix + GroupVarName + groupNum.ToString());
                }
                if (s.GetLocalInt(wp, "ACR_SPAWN_TYPE") != 0)
                {
                    count++;
                    wp = s.GetLocalObject(area.Id, WayPointArrayName + count.ToString());
                    continue;
                }
                int    var    = 1;
                string oldVar = s.GetLocalString(wp, InfestPrefix + SingleVarName + var.ToString());
                while (oldVar != "")
                {
                    s.SetLocalString(wp, SingleVarName + var.ToString(), oldVar);
                    var++;
                    oldVar = s.GetLocalString(wp, InfestPrefix + SingleVarName + var.ToString());
                }
                var    = 1;
                oldVar = s.GetLocalString(wp, InfestPrefix + RandomVarName + var.ToString());
                while (oldVar != "")
                {
                    s.SetLocalString(wp, RandomVarName + var.ToString(), oldVar);
                    var++;
                    oldVar = s.GetLocalString(wp, InfestPrefix + RandomVarName + var.ToString());
                }
                count++;
                wp = s.GetLocalObject(area.Id, WayPointArrayName + count.ToString());
            }
        }
コード例 #14
0
 public static void _QuickBuff(uint oCaster, int nSpell, CLRScriptBase s, uint oTarget = CLRScriptBase.OBJECT_INVALID)
 {
     if (oTarget == CLRScriptBase.OBJECT_INVALID)
     {
         oTarget = oCaster;
     }
     s.AssignCommand(oCaster, delegate { s.ActionCastSpellAtObject(nSpell, oCaster, CLRScriptBase.METAMAGIC_ANY, CLRScriptBase.FALSE, 0, CLRScriptBase.PROJECTILE_PATH_TYPE_DEFAULT, CLRScriptBase.TRUE); });
 }
コード例 #15
0
        public static void Enter(CLRScriptBase s, ALFA.Shared.ActiveTrap trap)
        {
            uint enteringObject = s.GetEnteringObject();

            if (IsTrapDetectedBy(s, trap, enteringObject))
            {
                HandleTrapDetected(s, trap, enteringObject);
            }
        }
コード例 #16
0
        /// <summary>
        /// Get the first object id corresponding to dynamic objects.  All
        /// object ids below this object id are static objects (excluding PC
        /// objects).
        /// </summary>
        /// <param name="Script">Supplies the caller's script object.</param>
        /// <returns>The first dynamic object id is returned.</returns>
        public static uint GetFirstDynamicObjectId(CLRScriptBase Script)
        {
            if (FirstDynamicObjectId == ManagedNWScript.OBJECT_INVALID)
            {
                FirstDynamicObjectId = (uint)Script.GetGlobalInt("ACR_FIRST_DYNAMIC_OBJECT_ID");
            }

            return(FirstDynamicObjectId);
        }
コード例 #17
0
        public void GrowInfestation(CLRScriptBase script)
        {
            CachedGrowth += Fecundity;
#if DEBUG
            script.SendMessageToAllDMs("No actions yet. CachedGrowth is " + CachedGrowth);
#endif
            CleanUpZeroes();
            SmoothEdges(script);
        }
コード例 #18
0
        public static void RemoveTrap(CLRScriptBase s, ALFA.Shared.ActiveTrap trap)
        {
            uint triggerAOE      = s.GetObjectByTag(trap.Tag, 0);
            uint detectAOE       = s.GetObjectByTag(trap.DetectTag, 0);
            uint disarmPlaceable = s.GetObjectByTag(trap.Tag + "_", 0);

            s.DestroyObject(triggerAOE, 0.0f, FALSE);
            s.DestroyObject(detectAOE, 0.0f, FALSE);
            s.DestroyObject(disarmPlaceable, 0.0f, FALSE);
        }
コード例 #19
0
        private static void RidingHeartbeat(CLRScriptBase script, uint Character)
        {
            // Character has dismounted
            if (!isWarhorse.ContainsKey(Character))
            {
                return;
            }

            script.DelayCommand(6.0f, delegate { RidingHeartbeat(script, Character); });
        }
コード例 #20
0
 public static void DrawListBox(CLRScriptBase script, List <IListBoxItem> resource)
 {
     // TODO: Remove the last frame of the 'thinking' animation.
     if (resource != null)
     {
         foreach (IListBoxItem item in resource)
         {
             script.AddListBoxRow(script.OBJECT_SELF, "SCREEN_DMC_CREATOR", "LISTBOX_ACR_CREATOR", item.RowName, item.TextFields, item.Icon, item.Variables, "unhide");
         }
     }
 }
コード例 #21
0
 private static bool GetIsMasterworkAmmunition(CLRScriptBase script, List <PricedItemProperty> itProp)
 {
     foreach (PricedItemProperty prop in itProp)
     {
         if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_DAMAGE_BONUS)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #22
0
 public static void SearchAreas(CLRScriptBase script, User currentUser, string searchString)
 {
     script.ClearListBox(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS");
     foreach (ALFA.Shared.ActiveArea area in AreaList)
     {
         if (area.LocalizedName.ToLower().Contains(searchString.ToLower()))
         {
             script.AddListBoxRow(currentUser.Id, "SCREEN_DMC_CHOOSER", "LISTBOX_ACR_CHOOSER_AREAS", area.Id.ToString(), "LISTBOX_ITEM_TEXT=  " + area.DisplayName, "", "5=" + area.Id.ToString(), "");
         }
     }
 }
コード例 #23
0
 public void ClearArea(CLRScriptBase script)
 {
     foreach (uint obj in script.GetObjectsInArea(AreaId))
     {
         if (script.GetObjectType(obj) == CLRScriptBase.OBJECT_TYPE_CREATURE ||
             script.GetObjectType(obj) == CLRScriptBase.OBJECT_TYPE_AREA_OF_EFFECT)
         {
             script.DestroyObject(obj, 0.0f, CLRScriptBase.FALSE);
         }
     }
 }
コード例 #24
0
        public static void TrackDroppedItem(CLRScriptBase script, uint Character, uint Item)
        {
            if (!recentlyDroppedItems.ContainsKey(Character))
            {
                recentlyDroppedItems.Add(Character, new List <uint>());
            }

            if (!recentlyDroppedItems[Character].Contains(Item))
            {
                recentlyDroppedItems[Character].Add(Item);
            }
        }
コード例 #25
0
        public static void GrowAllInfestations(CLRScriptBase s)
        {
            InfestationGrowthCounterStarted = true;
            float delay = 0.0f;

            foreach (Infestation inf in LoadedInfestations)
            {
                s.DelayCommand(delay, delegate { inf.GrowInfestation(s); });
                delay += 6.0f;
            }
            s.DelayCommand(s.HoursToSeconds(24), delegate { GrowAllInfestations(s); });
        }
コード例 #26
0
        public static void GenericDamage(CLRScriptBase script, NWLocation location, TriggerArea triggerArea, int effectArea, float effectSize, int damageType, int diceNumber, int diceType, int saveDC, int attackBonus, int numberOfShots, uint trapOrigin, int targetAlignment, int targetRace, int minimumToTrigger, int detectDC, int disarmDC, string description)
        {
            string tag       = uniqueTrapTag();
            string detectTag = tag + detectSuffix();

            script.ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,
                                         script.SupernaturalEffect(script.EffectAreaOfEffect(triggerAreaToAreaOfEffect(triggerArea), "acr_traponenter", "****", "acr_traponexit", tag)),
                                         location,
                                         0.0f);

            script.ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,
                                         script.SupernaturalEffect(script.EffectAreaOfEffect(triggerAreaToDetectArea(triggerArea), "acr_trapdtctenter", "****", "acr_trapdtctexit", detectTag)),
                                         location,
                                         0.0f);

            ALFA.Shared.ActiveTrap createdTrap = new ALFA.Shared.ActiveTrap();
            createdTrap.AreaName         = script.GetName(script.GetAreaFromLocation(location));
            createdTrap.AttackBonus      = attackBonus;
            createdTrap.ChallengeRating  = 0.0f;
            createdTrap.DamageType       = damageType;
            createdTrap.DetectTag        = detectTag;
            createdTrap.DiceNumber       = diceNumber;
            createdTrap.DiceType         = diceType;
            createdTrap.EffectArea       = effectArea;
            createdTrap.EffectSize       = effectSize;
            createdTrap.Location         = location;
            createdTrap.MinimumToTrigger = minimumToTrigger;
            createdTrap.NumberOfShots    = numberOfShots;
            createdTrap.SaveDC           = saveDC;
            createdTrap.SpellTrap        = false;
            createdTrap.Tag             = tag;
            createdTrap.TargetAlignment = targetAlignment;
            createdTrap.TargetRace      = targetRace;
            createdTrap.TrapTriggerVFX  = triggerAreaToTrapVFX(triggerArea);
            createdTrap.DetectDC        = detectDC;
            createdTrap.DisarmDC        = disarmDC;
            createdTrap.Detected        = false;
            createdTrap.Disabler        = 0;
            createdTrap.Helpers         = new List <uint>();
            createdTrap.TotalHelp       = 0;
            createdTrap.IsFiring        = false;
            createdTrap.Description     = description;
            createdTrap.ConfigureDisplayName();
            createdTrap.CalculateCR();

            createdTrap.TrapOrigin = GetNearestTrapEmitter(script, location);

            ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect.Add(detectTag, createdTrap);
            ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers.Add(tag, createdTrap);

            script.SetLocalString(script.GetModule(), "ACR_TRAPS_LAST_TAG", tag);
        }
コード例 #27
0
        private static bool IsInArea(CLRScriptBase s, ALFA.Shared.ActiveTrap trap, uint creature)
        {
            uint nwTrap = s.GetObjectByTag(trap.DetectTag, 0);

            foreach (uint item in s.GetObjectsInPersistentObject(nwTrap, OBJECT_TYPE_CREATURE, PERSISTENT_ZONE_ACTIVE))
            {
                if (item == creature)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #28
0
        public static int GetIsItemShield(uint oItem, CLRScriptBase s)
        {
            int nItemType = s.GetBaseItemType(oItem);

            if (nItemType == CLRScriptBase.BASE_ITEM_LARGESHIELD ||
                nItemType == CLRScriptBase.BASE_ITEM_SMALLSHIELD ||
                nItemType == CLRScriptBase.BASE_ITEM_TOWERSHIELD)
            {
                return(1);
            }

            return(0);
        }
コード例 #29
0
 public static void InitializeButtons(CLRScriptBase script, User currentUser)
 {
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_AOE", currentUser.ChooserShowAOE ? "trap.tga" : "notrap.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_CREATURE", currentUser.ChooserShowCreature ? "creature.tga" : "nocreature.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_DOOR", currentUser.ChooserShowDoor ? "door.tga" : "nodoor.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_ITEM", currentUser.ChooserShowItem ? "item.tga" : "noitem.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_LIGHT", currentUser.ChooserShowLight ? "light.tga" : "nolight.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_PLACEABLE", currentUser.ChooserShowPlaceable ? "placeable.tga" : "noplaceable.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_STORE", currentUser.ChooserShowStore ? "store.tga" : "nostore.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_TRIGGER", currentUser.ChooserShowTrigger ? "trigger.tga" : "notrigger.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_VFX", currentUser.ChooserShowPlacedEffect ? "vfx.tga" : "novfx.tga");
     script.SetGUITexture(currentUser.Id, "SCREEN_DMC_CHOOSER", "SHOW_WAYPOINT", currentUser.ChooserShowWaypoint ? "waypoint.tga" : "nowaypoint.tga");
 }
コード例 #30
0
        public Infestation(string Name, string Template, int State, CLRScriptBase script)
        {
            InfestationName = Name;
            Spawns.Add(1, new List <string>());
            Spawns[1].Add(Template);
            MaxTier = 1;
            uint   startAreaObject = script.GetArea(script.OBJECT_SELF);
            string startArea       = script.GetTag(startAreaObject);

            InfestArea(startArea, ALFA.Shared.Modules.InfoStore.ActiveAreas[startAreaObject], 1, script);
            QuestStore.LoadedInfestations.Add(this);
            Save();
        }