public static string Construct(Item item) { string s; int itemID = item.ItemID; if (item is BaseAddon) { for (int i = 0; i < ((BaseAddon)item).Components.Count; i++) { if (((BaseAddon)item).Components[i].Offset == Point3D.Zero) { itemID = ((BaseAddon)item).Components[i].ItemID; break; } } } if (item is LocalizedStatic) { Add("LabelNumber", ((LocalizedStatic)item).Number.ToString()); } else if (item is LocalizedSign) { Add("LabelNumber", ((LocalizedSign)item).Number.ToString()); } else if (item is AnkhWest) { Add("Bloodied", (item.ItemID == 0x1D98).ToString()); } else if (item is AnkhNorth) { Add("Bloodied", (item.ItemID == 0x1E5D).ToString()); } else if (item is MarkContainer) { Add("Bone", ((MarkContainer)item).Bone.ToString()); Add("Locked", ((MarkContainer)item).AutoLock.ToString()); if (((MarkContainer)item).TargetMap != null) { Add("TargetMap", ((MarkContainer)item).TargetMap.ToString()); } } else if (item is WarningItem) { Add("Range", ((WarningItem)item).Range.ToString()); if (VS(((WarningItem)item).WarningString)) { Add("WarningString", ((WarningItem)item).WarningString); } Add("WarningNumber", ((WarningItem)item).WarningNumber.ToString()); if (item is HintItem) { if (VS(((HintItem)item).HintString)) { Add("HintString", ((HintItem)item).HintString); } Add("HintNumber", ((HintItem)item).HintNumber.ToString()); } Add("Range", ((WarningItem)item).ResetDelay.ToString()); } else if (item is Cannon) { Add("CannonDirection", ((Cannon)item).CannonDirection.ToString()); } else if (item is SerpentPillar) { if (VS(((SerpentPillar)item).Word)) { Add("Word", ((SerpentPillar)item).Word); } Add("DestStart", ((SerpentPillar)item).Destination.Start.ToString()); Add("DestEnd", ((SerpentPillar)item).Destination.End.ToString()); } else if (item.GetType().IsSubclassOf(typeof(BaseBeverage))) { Add("Content", ((BaseBeverage)item).Content.ToString()); } else if (item.GetType().IsSubclassOf(typeof(BaseDoor))) { Add("Facing", GetFacing(((BaseDoor)item).Offset).ToString()); } if (item is MaabusCoffin) { Add("SpawnLocation", ((MaabusCoffin)item).SpawnLocation.ToString()); } else if (item is BaseLight) { if (!((BaseLight)item).Burning) { Add("Unlit", String.Empty); } if (!((BaseLight)item).Protected) { Add("Unprotected", String.Empty); } } else if (item is Spawner) { Spawner sp = (Spawner)item; foreach (Item i in sp.AcquireItems()) { Add("Spawn", i.GetType().Name); } // if( sp.MinDelay > TimeSpan.Zero ) Add("MinDelay", sp.MinDelay.ToString()); // if( sp.MaxDelay > TimeSpan.Zero ) Add("MaxDelay", sp.MaxDelay.ToString()); // if( sp.NextSpawn > TimeSpan.Zero ) Add("NextSpawn", sp.NextSpawn.ToString()); // if( sp.Count > 0 ) Add("Count", sp.Count.ToString()); // if( sp.Team > 0 ) Add("Team", sp.Team.ToString()); // if( sp.HomeRange > 0 ) Add("HomeRange", sp.HomeRange.ToString()); // if( sp.Running ) Add("Running", sp.Running.ToString()); // if( sp.Group ) Add("Group", sp.Group.ToString()); } else if (item is RecallRune) { RecallRune rune = (RecallRune)item; if (VS(rune.Description)) { Add("Description", rune.Description); } Add("Marked", rune.Marked.ToString()); if (rune.TargetMap != null) { Add("TargetMap", rune.TargetMap.ToString()); } Add("Target", rune.Target.ToString()); } else if (item is Teleporter) { Teleporter tp = (Teleporter)item; if (item is SkillTeleporter) { SkillTeleporter st = (SkillTeleporter)item; Add("Skill", st.Skill.ToString()); // "RequiredFixedPoint" == Required * 0.1 ? Add("Required", st.Required.ToString()); if (VS(st.MessageString)) { Add("MessageString", st.MessageString); } Add("MessageNumber", st.MessageNumber.ToString()); } else if (item is KeywordTeleporter) { KeywordTeleporter kt = (KeywordTeleporter)item; if (VS(kt.Substring)) { Add("Substring", kt.Substring); } Add("Keyword", kt.Keyword.ToString()); Add("Range", kt.Range.ToString()); } Add("PointDest", tp.PointDest.ToString()); if (tp.MapDest != null) { Add("MapDest", tp.MapDest.ToString()); } Add("Creatures", tp.Creatures.ToString()); Add("SourceEffect", tp.SourceEffect.ToString()); Add("DestEffect", tp.DestEffect.ToString()); Add("SoundID", tp.SoundID.ToString()); Add("Delay", tp.Delay.ToString()); } else if (item is FillableContainer) { Add("ContentType", ((FillableContainer)item).ContentType.ToString()); } if (item.Light != LightType.ArchedWindowEast) { Add("Light", item.Light.ToString()); } if (item.Hue > 0) { Add("Hue", item.Hue.ToString()); } if (VS(item.Name)) { Add("Name", item.Name); } if (item.Amount > 1) { Add("Amount", item.Amount.ToString()); } s = String.Format("{0} {1}", ConstructType(item), itemID); if (List.Count > 0) { s += " ("; for (int i = 0; i < List.Count; i++) { if (List[i][1] == String.Empty) { s += String.Format("{0}{1}", List[i][0], (i < List.Count - 1 ? "; " : String.Empty)); } else { s += String.Format("{0}={1}{2}", List[i][0], List[i][1], (i < List.Count - 1 ? "; " : String.Empty)); } } s += ")"; } List.Clear(); return(s); }