예제 #1
0
        public void LoadToolTips(WzImage mapImage, Board mapBoard)
        {
            WzSubProperty tooltipsParent = (WzSubProperty)mapImage["ToolTip"];

            if (tooltipsParent == null)
            {
                return;
            }

            WzImage tooltipsStringImage = (WzImage)Program.WzManager.String["ToolTipHelp.img"];

            if (!tooltipsStringImage.Parsed)
            {
                tooltipsStringImage.ParseImage();
            }

            WzSubProperty tooltipStrings = (WzSubProperty)tooltipsStringImage["Mapobject"][mapBoard.MapInfo.id.ToString()];

            if (tooltipStrings == null)
            {
                return;
            }

            for (int i = 0; true; i++)
            {
                string        num           = i.ToString();
                WzSubProperty tooltipString = (WzSubProperty)tooltipStrings[num];
                WzSubProperty tooltipProp   = (WzSubProperty)tooltipsParent[num];
                WzSubProperty tooltipChar   = (WzSubProperty)tooltipsParent[num + "char"];
                if (tooltipString == null && tooltipProp == null)
                {
                    break;
                }
                if (tooltipString == null ^ tooltipProp == null)
                {
                    continue;
                }
                string title = InfoTool.GetOptionalString(tooltipString["Title"]);
                string desc  = InfoTool.GetOptionalString(tooltipString["Desc"]);
                int    x1    = InfoTool.GetInt(tooltipProp["x1"]);
                int    x2    = InfoTool.GetInt(tooltipProp["x2"]);
                int    y1    = InfoTool.GetInt(tooltipProp["y1"]);
                int    y2    = InfoTool.GetInt(tooltipProp["y2"]);
                Microsoft.Xna.Framework.Rectangle tooltipPos = new Microsoft.Xna.Framework.Rectangle(x1, y1, x2 - x1, y2 - y1);
                ToolTipInstance tt = new ToolTipInstance(mapBoard, tooltipPos, title, desc, i);
                mapBoard.BoardItems.ToolTips.Add(tt);
                if (tooltipChar != null)
                {
                    x1         = InfoTool.GetInt(tooltipChar["x1"]);
                    x2         = InfoTool.GetInt(tooltipChar["x2"]);
                    y1         = InfoTool.GetInt(tooltipChar["y1"]);
                    y2         = InfoTool.GetInt(tooltipChar["y2"]);
                    tooltipPos = new Microsoft.Xna.Framework.Rectangle(x1, y1, x2 - x1, y2 - y1);
                    ToolTipChar ttc = new ToolTipChar(mapBoard, tooltipPos, tt);
                    mapBoard.BoardItems.CharacterToolTips.Add(ttc);
                }
            }
        }
예제 #2
0
        private List <string> SearchMapWzForObj(string l2)
        {
            List <string> result = new List <string>();

            foreach (WzDirectory mapDir in ((WzDirectory)Program.WzManager["map"]["Map"]).WzDirectories)
            {
                foreach (WzImage mapImg in mapDir.WzImages)
                {
                    bool fastForwardToNext = false;
                    bool parsed            = mapImg.Parsed;
                    if (!parsed)
                    {
                        mapImg.ParseImage();
                    }
                    foreach (WzImageProperty layer in mapImg.WzProperties)
                    {
                        if (layer.Name.Length != 1 || !char.IsDigit(layer.Name[0]))
                        {
                            continue;
                        }
                        WzImageProperty prop = layer["obj"];
                        if (prop == null)
                        {
                            continue;
                        }
                        foreach (WzImageProperty obj in prop.WzProperties)
                        {
                            if (InfoTool.GetOptionalString(obj["oS"]) == UserObjectsManager.oS &&
                                InfoTool.GetOptionalString(obj["l0"]) == Program.APP_NAME &&
                                InfoTool.GetOptionalString(obj["l1"]) == UserObjectsManager.l1 &&
                                InfoTool.GetOptionalString(obj["l2"]) == l2)
                            {
                                result.Add(WzInfoTools.RemoveExtension(mapImg.Name));
                                fastForwardToNext = true;
                                break;
                            }
                        }
                        if (fastForwardToNext)
                        {
                            break;
                        }
                    }
                    if (!parsed)
                    {
                        mapImg.UnparseImage();
                    }
                }
            }
            return(result);
        }
예제 #3
0
        public void LoadLife(WzImage mapImage, Board mapBoard)
        {
            WzImageProperty lifeParent = mapImage["life"];

            if (lifeParent == null)
            {
                return;
            }
            foreach (WzSubProperty life in lifeParent.WzProperties)
            {
                string    id          = InfoTool.GetString(life["id"]);
                int       x           = InfoTool.GetInt(life["x"]);
                int       y           = InfoTool.GetInt(life["y"]);
                int       cy          = InfoTool.GetInt(life["cy"]);
                int?      mobTime     = InfoTool.GetOptionalInt(life["mobTime"]);
                int?      info        = InfoTool.GetOptionalInt(life["info"]);
                int?      team        = InfoTool.GetOptionalInt(life["team"]);
                int       rx0         = InfoTool.GetInt(life["rx0"]);
                int       rx1         = InfoTool.GetInt(life["rx1"]);
                MapleBool flip        = InfoTool.GetOptionalBool(life["f"]);
                MapleBool hide        = InfoTool.GetOptionalBool(life["hide"]);
                string    type        = InfoTool.GetString(life["type"]);
                string    limitedname = InfoTool.GetOptionalString(life["limitedname"]);

                switch (type)
                {
                case "m":
                    MobInfo mobInfo = MobInfo.Get(id);
                    if (mobInfo == null)
                    {
                        continue;
                    }
                    mapBoard.BoardItems.Mobs.Add((MobInstance)mobInfo.CreateInstance(mapBoard, x, cy, x - rx0, rx1 - x, cy - y, limitedname, mobTime, flip, hide, info, team));
                    break;

                case "n":
                    NpcInfo npcInfo = NpcInfo.Get(id);
                    if (npcInfo == null)
                    {
                        continue;
                    }
                    mapBoard.BoardItems.NPCs.Add((NpcInstance)npcInfo.CreateInstance(mapBoard, x, cy, x - rx0, rx1 - x, cy - y, limitedname, mobTime, flip, hide, info, team));
                    break;

                default:
                    throw new Exception("invalid life type " + type);
                }
            }
        }
예제 #4
0
        public void LoadReactors(WzImage mapImage, Board mapBoard)
        {
            WzSubProperty reactorParent = (WzSubProperty)mapImage["reactor"];

            if (reactorParent == null)
            {
                return;
            }
            foreach (WzSubProperty reactor in reactorParent.WzProperties)
            {
                int    x           = InfoTool.GetInt(reactor["x"]);
                int    y           = InfoTool.GetInt(reactor["y"]);
                int    reactorTime = InfoTool.GetInt(reactor["reactorTime"]);
                string name        = InfoTool.GetOptionalString(reactor["name"]);
                string id          = InfoTool.GetString(reactor["id"]);
                bool   flip        = InfoTool.GetBool(reactor["f"]);
                mapBoard.BoardItems.Reactors.Add((ReactorInstance)Program.InfoManager.Reactors[id].CreateInstance(mapBoard, x, y, reactorTime, name, flip));
            }
        }
예제 #5
0
        public void LoadPortals(WzImage mapImage, Board mapBoard)
        {
            WzSubProperty portalParent = (WzSubProperty)mapImage["portal"];

            foreach (WzSubProperty portal in portalParent.WzProperties)
            {
                int       x                = InfoTool.GetInt(portal["x"]);
                int       y                = InfoTool.GetInt(portal["y"]);
                string    pt               = Program.InfoManager.PortalTypeById[InfoTool.GetInt(portal["pt"])];
                int       tm               = InfoTool.GetInt(portal["tm"]);
                string    tn               = InfoTool.GetString(portal["tn"]);
                string    pn               = InfoTool.GetString(portal["pn"]);
                string    image            = InfoTool.GetOptionalString(portal["image"]);
                string    script           = InfoTool.GetOptionalString(portal["script"]);
                int?      verticalImpact   = InfoTool.GetOptionalInt(portal["verticalImpact"]);
                int?      horizontalImpact = InfoTool.GetOptionalInt(portal["horizontalImpact"]);
                int?      hRange           = InfoTool.GetOptionalInt(portal["hRange"]);
                int?      vRange           = InfoTool.GetOptionalInt(portal["vRange"]);
                int?      delay            = InfoTool.GetOptionalInt(portal["delay"]);
                MapleBool hideTooltip      = InfoTool.GetOptionalBool(portal["hideTooltip"]);
                MapleBool onlyOnce         = InfoTool.GetOptionalBool(portal["onlyOnce"]);
                mapBoard.BoardItems.Portals.Add(PortalInfo.GetPortalInfoByType(pt).CreateInstance(mapBoard, x, y, pn, tn, tm, script, delay, hideTooltip, onlyOnce, horizontalImpact, verticalImpact, image, hRange, vRange));
            }
        }
예제 #6
0
 public void LoadLayers(WzImage mapImage, Board mapBoard)
 {
     for (int layer = 0; layer <= 7; layer++)
     {
         WzSubProperty   layerProp = (WzSubProperty)mapImage[layer.ToString()];
         WzImageProperty tSprop    = layerProp["info"]["tS"];
         string          tS        = null;
         if (tSprop != null)
         {
             tS = InfoTool.GetString(tSprop);
         }
         foreach (WzImageProperty obj in layerProp["obj"].WzProperties)
         {
             int                        x           = InfoTool.GetInt(obj["x"]);
             int                        y           = InfoTool.GetInt(obj["y"]);
             int                        z           = InfoTool.GetInt(obj["z"]);
             int                        zM          = InfoTool.GetInt(obj["zM"]);
             string                     oS          = InfoTool.GetString(obj["oS"]);
             string                     l0          = InfoTool.GetString(obj["l0"]);
             string                     l1          = InfoTool.GetString(obj["l1"]);
             string                     l2          = InfoTool.GetString(obj["l2"]);
             string                     name        = InfoTool.GetOptionalString(obj["name"]);
             MapleBool                  r           = InfoTool.GetOptionalBool(obj["r"]);
             MapleBool                  hide        = InfoTool.GetOptionalBool(obj["hide"]);
             MapleBool                  reactor     = InfoTool.GetOptionalBool(obj["reactor"]);
             MapleBool                  flow        = InfoTool.GetOptionalBool(obj["flow"]);
             int?                       rx          = InfoTool.GetOptionalTranslatedInt(obj["rx"]);
             int?                       ry          = InfoTool.GetOptionalTranslatedInt(obj["ry"]);
             int?                       cx          = InfoTool.GetOptionalTranslatedInt(obj["cx"]);
             int?                       cy          = InfoTool.GetOptionalTranslatedInt(obj["cy"]);
             string                     tags        = InfoTool.GetOptionalString(obj["tags"]);
             WzImageProperty            questParent = obj["quest"];
             List <ObjectInstanceQuest> questInfo   = null;
             if (questParent != null)
             {
                 questInfo = new List <ObjectInstanceQuest>();
                 foreach (WzIntProperty info in questParent.WzProperties)
                 {
                     questInfo.Add(new ObjectInstanceQuest(int.Parse(info.Name), (QuestState)info.Value));
                 }
             }
             bool       flip    = InfoTool.GetBool(obj["f"]);
             ObjectInfo objInfo = ObjectInfo.Get(oS, l0, l1, l2);
             if (objInfo == null)
             {
                 continue;
             }
             Layer l = mapBoard.Layers[layer];
             mapBoard.BoardItems.TileObjs.Add((LayeredItem)objInfo.CreateInstance(l, mapBoard, x, y, z, zM, r, hide, reactor, flow, rx, ry, cx, cy, name, tags, questInfo, flip, false));
             l.zMList.Add(zM);
         }
         WzImageProperty tileParent = layerProp["tile"];
         foreach (WzImageProperty tile in tileParent.WzProperties)
         {
             int      x        = InfoTool.GetInt(tile["x"]);
             int      y        = InfoTool.GetInt(tile["y"]);
             int      zM       = InfoTool.GetInt(tile["zM"]);
             string   u        = InfoTool.GetString(tile["u"]);
             int      no       = InfoTool.GetInt(tile["no"]);
             Layer    l        = mapBoard.Layers[layer];
             TileInfo tileInfo = TileInfo.Get(tS, u, no.ToString());
             mapBoard.BoardItems.TileObjs.Add((LayeredItem)tileInfo.CreateInstance(l, mapBoard, x, y, int.Parse(tile.Name), zM, false, false));
             l.zMList.Add(zM);
         }
     }
 }
예제 #7
0
파일: MapLoader.cs 프로젝트: xnum/hasuite
        private static void LoadLife(WzImage mapImage, Board mapBoard)
        {
            IWzImageProperty lifeParent = mapImage["life"];

            if (lifeParent == null)
            {
                return;
            }
            foreach (WzSubProperty life in lifeParent.WzProperties)
            {
                string id = InfoTool.GetString(life["id"]);
                int    x  = InfoTool.GetInt(life["x"]);
                //int y = InfoTool.GetInt(life["y"]);
                int       cy          = InfoTool.GetInt(life["cy"]);
                int?      mobTime     = InfoTool.GetOptionalInt(life["mobTime"]);
                int?      info        = InfoTool.GetOptionalInt(life["info"]);
                int?      team        = InfoTool.GetOptionalInt(life["team"]);
                int       rx0         = InfoTool.GetInt(life["rx0"]);
                int       rx1         = InfoTool.GetInt(life["rx1"]);
                MapleBool flip        = InfoTool.GetOptionalBool(life["f"]);
                MapleBool hide        = InfoTool.GetOptionalBool(life["hide"]);
                string    type        = InfoTool.GetString(life["type"]);
                string    limitedname = InfoTool.GetOptionalString(life["limitedname"]);

                switch (type)
                {
                case "m":
                    WzImage mobImage = (WzImage)Program.WzManager["mob"][id + ".img"];
                    if (!mobImage.Parsed)
                    {
                        mobImage.ParseImage();
                    }
                    if (mobImage.HCTag == null)
                    {
                        mobImage.HCTag = MobInfo.Load(mobImage);
                    }
                    MobInfo mobInfo = (MobInfo)mobImage.HCTag;
                    //mapBoard.BoardItems.Mobs.Add((MobInstance)mobInfo.CreateInstance(mapBoard, x, cy, rx0, rx1, mobTime, flip, hide, false));
                    mapBoard.BoardItems.Mobs.Add((LifeInstance)mobInfo.CreateInstance(mapBoard, x, cy, rx0, rx1, limitedname, mobTime, flip, hide, info, team, false));
                    break;

                case "n":
                    WzImage npcImage = (WzImage)Program.WzManager["npc"][id + ".img"];
                    if (!npcImage.Parsed)
                    {
                        npcImage.ParseImage();
                    }
                    if (npcImage.HCTag == null)
                    {
                        npcImage.HCTag = NpcInfo.Load(npcImage);
                    }
                    NpcInfo npcInfo = (NpcInfo)npcImage.HCTag;
                    //mapBoard.BoardItems.NPCs.Add((NpcInstance)npcInfo.CreateInstance(mapBoard, x, cy, rx0, rx1, mobTime, flip, hide, false));
                    mapBoard.BoardItems.NPCs.Add((LifeInstance)npcInfo.CreateInstance(mapBoard, x, cy, rx0, rx1, limitedname, mobTime, flip, hide, info, team, false));
                    break;

                default:
                    throw new Exception("invalid life type " + type);
                }
            }
        }
예제 #8
0
파일: MapLoader.cs 프로젝트: xnum/hasuite
 private static void LoadLayers(WzImage mapImage, Board mapBoard)
 {
     for (int layer = 0; layer <= 7; layer++)
     {
         WzSubProperty    layerProp = (WzSubProperty)mapImage[layer.ToString()];
         IWzImageProperty tSprop    = layerProp["info"]["tS"];
         string           tS        = null;
         if (tSprop != null)
         {
             tS = InfoTool.GetString(tSprop);
         }
         foreach (IWzImageProperty obj in layerProp["obj"].WzProperties)
         {
             int x = InfoTool.GetInt(obj["x"]);
             int y = InfoTool.GetInt(obj["y"]);
             int z = InfoTool.GetInt(obj["z"]);
             //int zM = InfoTool.GetInt(obj["zM"]);
             string                     oS          = InfoTool.GetString(obj["oS"]);
             string                     l0          = InfoTool.GetString(obj["l0"]);
             string                     l1          = InfoTool.GetString(obj["l1"]);
             string                     l2          = InfoTool.GetString(obj["l2"]);
             string                     name        = InfoTool.GetOptionalString(obj["name"]);
             MapleBool                  r           = InfoTool.GetOptionalBool(obj["r"]);
             MapleBool                  hide        = InfoTool.GetOptionalBool(obj["hide"]);
             MapleBool                  reactor     = InfoTool.GetOptionalBool(obj["reactor"]);
             MapleBool                  flow        = InfoTool.GetOptionalBool(obj["flow"]);
             int?                       rx          = InfoTool.GetOptionalTranslatedInt(obj["rx"]);
             int?                       ry          = InfoTool.GetOptionalTranslatedInt(obj["ry"]);
             int?                       cx          = InfoTool.GetOptionalTranslatedInt(obj["cx"]);
             int?                       cy          = InfoTool.GetOptionalTranslatedInt(obj["cy"]);
             string                     tags        = InfoTool.GetOptionalString(obj["tags"]);
             IWzImageProperty           questParent = obj["quest"];
             List <ObjectInstanceQuest> questInfo   = null;
             if (questParent != null)
             {
                 foreach (WzCompressedIntProperty info in questParent.WzProperties)
                 {
                     questInfo.Add(new ObjectInstanceQuest(int.Parse(info.Name), (QuestState)info.Value));
                 }
             }
             bool             flip        = InfoTool.GetBool(obj["f"]);
             IWzImageProperty objInfoProp = Program.InfoManager.ObjectSets[oS][l0][l1][l2];
             if (objInfoProp.HCTag == null)
             {
                 objInfoProp.HCTag = ObjectInfo.Load((WzSubProperty)objInfoProp, oS, l0, l1, l2);
             }
             ObjectInfo objInfo = (ObjectInfo)objInfoProp.HCTag;
             mapBoard.BoardItems.TileObjs.Add((LayeredItem)objInfo.CreateInstance(mapBoard.Layers[layer], mapBoard, x, y, z, r, hide, reactor, flow, rx, ry, cx, cy, name, tags, questInfo, flip, false, false));
         }
         IWzImageProperty tileParent = layerProp["tile"];
         for (int i = 0; i < tileParent.WzProperties.Count; i++)
         //foreach (IWzImageProperty tile in layerProp["tile"].WzProperties)
         {
             IWzImageProperty tile = tileParent.WzProperties[i];
             int x = InfoTool.GetInt(tile["x"]);
             int y = InfoTool.GetInt(tile["y"]);
             //int zM = InfoTool.GetInt(tile["zM"]);
             string           u            = InfoTool.GetString(tile["u"]);
             int              no           = InfoTool.GetInt(tile["no"]);
             IWzImageProperty tileInfoProp = Program.InfoManager.TileSets[tS][u][no.ToString()];
             if (tileInfoProp.HCTag == null)
             {
                 tileInfoProp.HCTag = TileInfo.Load((WzCanvasProperty)tileInfoProp, tS, u, no.ToString());
             }
             TileInfo tileInfo = (TileInfo)tileInfoProp.HCTag;
             mapBoard.BoardItems.TileObjs.Add((LayeredItem)tileInfo.CreateInstance(mapBoard.Layers[layer], mapBoard, x, y, i /*zM*/, false, false, false));
         }
     }
 }