Exemple #1
0
        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);
        }