public override TransferMessage ProcessMessage() { ArrayList tmparray = new ArrayList(); ArrayList itemarray = null; itemarray = new ArrayList(World.Items.Values); if (itemarray != null) { foreach (Item m in itemarray) { if (m.Map == null || m.Map == Map.Internal) { continue; } if (m is XmlSpawner && (m.Map.MapID == SelectedMap || SelectedMap == -1)) { XmlSpawner s = (XmlSpawner)m; bool passed = true; // area restricted? if (Width >= 0 && Height >= 0) { if (s.Location.X < X || s.Location.X > X + Width || s.Location.Y < Y || s.Location.Y > Y + Height) { passed = false; } } // name restricted? if (passed && NameFilter != null && NameFilter.Length > 0) { if (NameCase) { // case sensitive if (s.Name.IndexOf(NameFilter) < 0) { passed = false; } } else { if (s.Name.ToLower().IndexOf(NameFilter.ToLower()) < 0) { passed = false; } } } // entry restricted? if (passed && EntryFilter != null && EntryFilter.Length > 0) { // search the entries of the spawner bool found = false; if (s.SpawnObjects != null) { foreach (XmlSpawner.SpawnObject so in s.SpawnObjects) { if (EntryCase) { // case sensitive if (so.TypeName != null && so.TypeName.IndexOf(EntryFilter) >= 0) { found = true; break; } } else { if (so.TypeName != null && so.TypeName.ToLower().IndexOf(EntryFilter.ToLower()) >= 0) { found = true; break; } } } } if (!found) { passed = false; } } // container restricted? 1=containeronly 2=nocontainers if (passed && ContainerFilter > 0) { if (ContainerFilter == 1 && !(s.RootParent is Container)) { passed = false; } else if (ContainerFilter == 2 && (s.Parent is Container)) { passed = false; } } // sequential restricted? 1=sequentialonly 2=nosequential if (passed && SequentialFilter > 0) { if (SequentialFilter == 1 && (s.SequentialSpawn < 0)) { passed = false; } else if (SequentialFilter == 2 && (s.SequentialSpawn >= 0)) { passed = false; } } // smartspawn restricted? 1=smartspawnonly 2=nosmartspawn if (passed && SmartSpawnFilter > 0) { if (SmartSpawnFilter == 1 && !s.SmartSpawning) { passed = false; } else if (SmartSpawnFilter == 2 && s.SmartSpawning) { passed = false; } } // modified restricted? 1=modifiedbefore 2=modifiedafter if (passed && Modified > 0) { if (Modified == 1 && s.LastModified > ModifiedDate) { passed = false; } else if (Modified == 2 && s.LastModified < ModifiedDate) { passed = false; } } // proximitytrigger restricted? 1=proximitytriggered 2=not proximitytrigger if (passed && Proximity > 0) { if (Proximity == 1 && s.ProximityRange < 0) { passed = false; } else if (Proximity == 2 && s.ProximityRange >= 0) { passed = false; } } // running restricted? 1=running 2=not not running if (passed && Running > 0) { if (Running == 1 && !s.Running) { passed = false; } else if (Running == 2 && s.Running) { passed = false; } } // spawn time restricted? 1=less than 2=greater than if (passed && SpawnTime > 0) { double avgtime = (s.MinDelay.TotalMinutes + s.MaxDelay.TotalMinutes) / 2.0; if (SpawnTime == 1 && avgtime >= AvgSpawnTime) { passed = false; } else if (SpawnTime == 2 && avgtime <= AvgSpawnTime) { passed = false; } } // modifiedby restricted? 1=firstmodified 2=lastmodified 3=not firstmodified 4=not lastmodified if (passed && ModifiedBy > 0) { if (ModifiedBy == 1 && s.FirstModifiedBy != ModifiedName) { passed = false; } else if (ModifiedBy == 2 && s.LastModifiedBy != ModifiedName) { passed = false; } else if (ModifiedBy == 3 && s.FirstModifiedBy == ModifiedName) { passed = false; } else if (ModifiedBy == 4 && s.LastModifiedBy == ModifiedName) { passed = false; } } if (passed) { tmparray.Add(s); } } } } // serialize the xml spawner info into a memory buffer MemoryStream mstream = new MemoryStream(); XmlSpawner.SaveSpawnList(tmparray, mstream); return(new ReturnSpawnerData(mstream.GetBuffer())); }