/// <summary> /// Create a new instanced area, or return one from the free list if /// there was a free instance. /// </summary> /// <param name="TemplateArea">Supplies the template area object id. /// </param> /// <returns>The instanced area, else OBJECT_INVALID.</returns> private uint CreateAreaInstance(uint TemplateArea) { Stack <uint> FreeList; if (InstancedAreaFreeList.TryGetValue(TemplateArea, out FreeList)) { if (FreeList.Count != 0) { return(FreeList.Pop()); } } uint AreaObject = CreateInstancedAreaFromSource(TemplateArea); if (AreaObject == OBJECT_INVALID) { return(OBJECT_INVALID); } // // We've created a new area, so inform the AI subsystem that there // is a new area to add to its representation. // ClearScriptParams(); AddScriptParameterInt(200); // AREA_ON_INSTANCE_CREATE ExecuteScriptEnhanced("ACR_CreatureBehavior", AreaObject, TRUE); return(AreaObject); }
/// <summary> /// Place an instanced area on the internal free list for its /// associated template area. /// </summary> /// <param name="InstancedArea">Supplies the instanced area to place on /// the free list.</param> private void ReleaseInstancedArea(uint InstancedArea) { uint TemplateArea = GetLocalObject(InstancedArea, "ACR_AREA_INSTANCE_PARENT_AREA"); Stack <uint> FreeList; if (!InstancedAreaFreeList.TryGetValue(TemplateArea, out FreeList)) { FreeList = new Stack <uint>(); InstancedAreaFreeList.Add(TemplateArea, FreeList); } FreeList.Push(InstancedArea); }