Example #1
0
        /// <summary>
        /// Save MapInfo variables to WzImage
        /// </summary>
        /// <param name="dest"></param>
        /// <param name="VR"></param>
        public void Save(WzImage dest, Rectangle?VR)
        {
            WzSubProperty info = new WzSubProperty();

            info["bgm"]          = InfoTool.SetString(bgm);
            info["cloud"]        = InfoTool.SetBool(cloud);
            info["swim"]         = InfoTool.SetBool(swim);
            info["forcedReturn"] = InfoTool.SetInt(forcedReturn);
            info["hideMinimap"]  = InfoTool.SetBool(hideMinimap);
            info["mapDesc"]      = InfoTool.SetOptionalString(mapDesc);
            info["mapName"]      = InfoTool.SetOptionalString(mapDesc);
            info["mapMark"]      = InfoTool.SetString(mapMark);
            info["mobRate"]      = InfoTool.SetFloat(mobRate);
            info["moveLimit"]    = InfoTool.SetOptionalInt(moveLimit);
            info["returnMap"]    = InfoTool.SetInt(returnMap);
            info["town"]         = InfoTool.SetBool(town);
            info["version"]      = InfoTool.SetInt(version);
            info["fieldLimit"]   = InfoTool.SetInt((int)fieldLimit);
            info["timeLimit"]    = InfoTool.SetOptionalInt(timeLimit);
            info["lvLimit"]      = InfoTool.SetOptionalInt(lvLimit);

            info["VRTop"]    = InfoTool.SetOptionalInt(VRTop);
            info["VRBottom"] = InfoTool.SetOptionalInt(VRBottom);
            info["VRLeft"]   = InfoTool.SetOptionalInt(VRLeft);
            info["VRRight"]  = InfoTool.SetOptionalInt(VRRight);

            info["onFirstUserEnter"] = InfoTool.SetOptionalString(onFirstUserEnter);
            info["onUserEnter"]      = InfoTool.SetOptionalString(onUserEnter);
            info["fly"]                = InfoTool.SetOptionalBool(fly);
            info["noMapCmd"]           = InfoTool.SetOptionalBool(noMapCmd);
            info["partyOnly"]          = InfoTool.SetOptionalBool(partyOnly);
            info["fieldType"]          = InfoTool.SetOptionalInt((int?)fieldType);
            info["miniMapOnOff"]       = InfoTool.SetOptionalBool(miniMapOnOff);
            info["reactorShuffle"]     = InfoTool.SetOptionalBool(reactorShuffle);
            info["reactorShuffleName"] = InfoTool.SetOptionalString(reactorShuffleName);
            info["personalShop"]       = InfoTool.SetOptionalBool(personalShop);
            info["entrustedShop"]      = InfoTool.SetOptionalBool(entrustedShop);
            info["effect"]             = InfoTool.SetOptionalString(effect);
            info["lvForceMove"]        = InfoTool.SetOptionalInt(lvForceMove);
            info["mirror_Bottom"]      = InfoTool.SetOptionalBool(mirror_Bottom);

            // Time mob
            if (timeMob != null)
            {
                WzSubProperty prop = new WzSubProperty();
                prop["startHour"] = InfoTool.SetOptionalInt(timeMob.Value.startHour);
                prop["endHour"]   = InfoTool.SetOptionalInt(timeMob.Value.endHour);
                prop["id"]        = InfoTool.SetOptionalInt(timeMob.Value.id);
                prop["message"]   = InfoTool.SetOptionalString(timeMob.Value.message);
                info["timeMob"]   = prop;
            }
            info["help"]        = InfoTool.SetOptionalString(help);
            info["snow"]        = InfoTool.SetOptionalBool(snow);
            info["rain"]        = InfoTool.SetOptionalBool(rain);
            info["dropExpire"]  = InfoTool.SetOptionalInt(dropExpire);
            info["decHP"]       = InfoTool.SetOptionalInt(decHP);
            info["decInterval"] = InfoTool.SetOptionalInt(decInterval);

            // Lie detector
            if (autoLieDetector != null)
            {
                WzSubProperty prop = new WzSubProperty();
                prop["startHour"]       = InfoTool.SetOptionalInt(autoLieDetector.startHour);
                prop["endHour"]         = InfoTool.SetOptionalInt(autoLieDetector.endHour);
                prop["interval"]        = InfoTool.SetOptionalInt(autoLieDetector.interval);
                prop["prop"]            = InfoTool.SetOptionalInt(autoLieDetector.prop);
                info["autoLieDetector"] = prop;
            }
            info["expeditionOnly"]    = InfoTool.SetOptionalBool(expeditionOnly);
            info["fs"]                = InfoTool.SetOptionalFloat(fs);
            info["protectItem"]       = InfoTool.SetOptionalInt(protectItem);
            info["createMobInterval"] = InfoTool.SetOptionalInt(createMobInterval);
            info["fixedMobCapacity"]  = InfoTool.SetOptionalInt(fixedMobCapacity);
            info["streetName"]        = InfoTool.SetOptionalString(streetName);
            info["noRegenMap"]        = InfoTool.SetOptionalBool(noRegenMap);
            if (allowedItem != null)
            {
                WzSubProperty prop = new WzSubProperty();
                for (int i = 0; i < allowedItem.Count; i++)
                {
                    prop[i.ToString()] = InfoTool.SetInt(allowedItem[i]);
                }
                info["allowedItem"] = prop;
            }
            info["recovery"]            = InfoTool.SetOptionalFloat(recovery);
            info["blockPBossChange"]    = InfoTool.SetOptionalBool(blockPBossChange);
            info["everlast"]            = InfoTool.SetOptionalBool(everlast);
            info["damageCheckFree"]     = InfoTool.SetOptionalBool(damageCheckFree);
            info["dropRate"]            = InfoTool.SetOptionalFloat(dropRate);
            info["scrollDisable"]       = InfoTool.SetOptionalBool(scrollDisable);
            info["needSkillForFly"]     = InfoTool.SetOptionalBool(needSkillForFly);
            info["zakum2Hack"]          = InfoTool.SetOptionalBool(zakum2Hack);
            info["allMoveCheck"]        = InfoTool.SetOptionalBool(allMoveCheck);
            info["VRLimit"]             = InfoTool.SetOptionalBool(VRLimit);
            info["consumeItemCoolTime"] = InfoTool.SetOptionalBool(consumeItemCoolTime);
            info["zeroSideOnly"]        = InfoTool.SetOptionalBool(zeroSideOnly);
            foreach (WzImageProperty prop in additionalProps)
            {
                info.AddProperty(prop);
            }
            if (VR.HasValue)
            {
                info["VRLeft"]   = InfoTool.SetInt(VR.Value.Left);
                info["VRRight"]  = InfoTool.SetInt(VR.Value.Right);
                info["VRTop"]    = InfoTool.SetInt(VR.Value.Top);
                info["VRBottom"] = InfoTool.SetInt(VR.Value.Bottom);
            }

            // Add back all unsupported properties
            info.AddProperties(unsupportedInfoProperties);

            //
            dest["info"] = info;
        }
Example #2
0
        public MapInfo(WzImage image, string strMapName, string strStreetName, string strCategoryName)
        {
            this.image = image;
            int?startHour;
            int?endHour;

            this.strMapName      = strMapName;
            this.strStreetName   = strStreetName;
            this.strCategoryName = strCategoryName;
            WzFile file         = (WzFile)image.WzFileParent;
            string loggerSuffix = ", map " + image.Name + ((file != null) ? (" of version " + Enum.GetName(typeof(WzMapleVersion), file.MapleVersion) + ", v" + file.Version.ToString()) : "");

            foreach (WzImageProperty prop in image["info"].WzProperties)
            {
                switch (prop.Name)
                {
                case "bgm":
                    bgm = InfoTool.GetString(prop);
                    break;

                case "cloud":
                    cloud = InfoTool.GetBool(prop);
                    break;

                case "swim":
                    swim = InfoTool.GetBool(prop);
                    break;

                case "forcedReturn":
                    forcedReturn = InfoTool.GetInt(prop);
                    break;

                case "hideMinimap":
                    hideMinimap = InfoTool.GetBool(prop);
                    break;

                case "mapDesc":
                    mapDesc = InfoTool.GetString(prop);
                    break;

                case "mapName":
                    mapName = InfoTool.GetString(prop);
                    break;

                case "mapMark":
                    mapMark = InfoTool.GetString(prop);
                    break;

                case "mobRate":
                    mobRate = InfoTool.GetFloat(prop);
                    break;

                case "moveLimit":
                    moveLimit = InfoTool.GetInt(prop);
                    break;

                case "returnMap":
                    returnMap = InfoTool.GetInt(prop);
                    break;

                case "town":
                    town = InfoTool.GetBool(prop);
                    break;

                case "version":
                    version = InfoTool.GetInt(prop);
                    break;

                case "fieldLimit":
                    int fl = InfoTool.GetInt(prop);
                    if (fl >= (int)Math.Pow(2, 23))
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "Invalid fieldlimit " + fl.ToString() + loggerSuffix);
                        fl = fl & ((int)Math.Pow(2, 23) - 1);
                    }
                    fieldLimit = (FieldLimit)fl;
                    break;

                case "VRTop":
                case "VRBottom":
                case "VRLeft":
                case "VRRight":
                    break;

                case "link":
                    //link = InfoTool.GetInt(prop);
                    break;

                case "timeLimit":
                    timeLimit = InfoTool.GetInt(prop);
                    break;

                case "lvLimit":
                    lvLimit = InfoTool.GetInt(prop);
                    break;

                case "onFirstUserEnter":
                    onFirstUserEnter = InfoTool.GetString(prop);
                    break;

                case "onUserEnter":
                    onUserEnter = InfoTool.GetString(prop);
                    break;

                case "fly":
                    fly = InfoTool.GetBool(prop);
                    break;

                case "noMapCmd":
                    noMapCmd = InfoTool.GetBool(prop);
                    break;

                case "partyOnly":
                    partyOnly = InfoTool.GetBool(prop);
                    break;

                case "fieldType":
                    int ft = InfoTool.GetInt(prop);
                    if (!Enum.IsDefined(typeof(FieldType), ft))
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "Invalid fieldType " + ft.ToString() + loggerSuffix);
                        ft = 0;
                    }
                    fieldType = (FieldType)ft;
                    break;

                case "miniMapOnOff":
                    miniMapOnOff = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffle":
                    reactorShuffle = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffleName":
                    reactorShuffleName = InfoTool.GetString(prop);
                    break;

                case "personalShop":
                    personalShop = InfoTool.GetBool(prop);
                    break;

                case "entrustedShop":
                    entrustedShop = InfoTool.GetBool(prop);
                    break;

                case "effect":
                    effect = InfoTool.GetString(prop);
                    break;

                case "lvForceMove":
                    lvForceMove = InfoTool.GetInt(prop);
                    break;

                case "timeMob":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?   id      = InfoTool.GetOptionalInt(prop["id"]);
                    string message = InfoTool.GetOptionalString(prop["message"]);
                    if (id == null || message == null || (startHour == null ^ endHour == null))
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "timeMob" + loggerSuffix);
                    }
                    else
                    {
                        timeMob = new TimeMob((int?)startHour, (int?)endHour, (int)id, message);
                    }
                    break;

                case "help":
                    help = InfoTool.GetString(prop);
                    break;

                case "snow":
                    snow = InfoTool.GetBool(prop);
                    break;

                case "rain":
                    rain = InfoTool.GetBool(prop);
                    break;

                case "dropExpire":
                    dropExpire = InfoTool.GetInt(prop);
                    break;

                case "decHP":
                    decHP = InfoTool.GetInt(prop);
                    break;

                case "decInterval":
                    decInterval = InfoTool.GetInt(prop);
                    break;

                case "autoLieDetector":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?interval = InfoTool.GetOptionalInt(prop["interval"]);
                    int?propInt  = InfoTool.GetOptionalInt(prop["prop"]);
                    if (startHour == null || endHour == null || interval == null || propInt == null)
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "autoLieDetector" + loggerSuffix);
                    }
                    else
                    {
                        autoLieDetector = new AutoLieDetector((int)startHour, (int)endHour, (int)interval, (int)propInt);
                    }
                    break;

                case "expeditionOnly":
                    expeditionOnly = InfoTool.GetBool(prop);
                    break;

                case "fs":
                    fs = InfoTool.GetFloat(prop);
                    break;

                case "protectItem":
                    protectItem = InfoTool.GetInt(prop);
                    break;

                case "createMobInterval":
                    createMobInterval = InfoTool.GetInt(prop);
                    break;

                case "fixedMobCapacity":
                    fixedMobCapacity = InfoTool.GetInt(prop);
                    break;

                case "streetName":
                    streetName = InfoTool.GetString(prop);
                    break;

                case "noRegenMap":
                    noRegenMap = InfoTool.GetBool(prop);
                    break;

                case "allowedItem":
                    allowedItem = new List <int>();
                    if (prop.WzProperties != null && prop.WzProperties.Count > 0)
                    {
                        foreach (WzImageProperty item in prop.WzProperties)
                        {
                            allowedItem.Add(item.GetInt());
                        }
                    }
                    break;

                case "recovery":
                    recovery = InfoTool.GetFloat(prop);
                    break;

                case "blockPBossChange":
                    blockPBossChange = InfoTool.GetBool(prop);
                    break;

                case "everlast":
                    everlast = InfoTool.GetBool(prop);
                    break;

                case "damageCheckFree":
                    damageCheckFree = InfoTool.GetBool(prop);
                    break;

                case "dropRate":
                    dropRate = InfoTool.GetFloat(prop);
                    break;

                case "scrollDisable":
                    scrollDisable = InfoTool.GetBool(prop);
                    break;

                case "needSkillForFly":
                    needSkillForFly = InfoTool.GetBool(prop);
                    break;

                case "zakum2Hack":
                    zakum2Hack = InfoTool.GetBool(prop);
                    break;

                case "allMoveCheck":
                    allMoveCheck = InfoTool.GetBool(prop);
                    break;

                case "VRLimit":
                    VRLimit = InfoTool.GetBool(prop);
                    break;

                case "consumeItemCoolTime":
                    consumeItemCoolTime = InfoTool.GetBool(prop);
                    break;

                default:
                    ErrorLogger.Log(ErrorLevel.MissingFeature, "Unknown Prop: " + prop.Name + loggerSuffix);
                    additionalProps.Add(prop.DeepClone());
                    break;
                }
            }
        }
Example #3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="image"></param>
        /// <param name="strMapName"></param>
        /// <param name="strStreetName"></param>
        /// <param name="strCategoryName"></param>
        public MapInfo(WzImage image, string strMapName, string strStreetName, string strCategoryName)
        {
            this.image = image;
            int?startHour;
            int?endHour;

            this.strMapName      = strMapName;
            this.strStreetName   = strStreetName;
            this.strCategoryName = strCategoryName;
            WzFile file         = (WzFile)image.WzFileParent;
            string loggerSuffix = ", map " + image.Name + ((file != null) ? (" of version " + Enum.GetName(typeof(WzMapleVersion), file.MapleVersion) + ", v" + file.Version.ToString()) : "");

            foreach (WzImageProperty prop in image["info"].WzProperties)
            {
                switch (prop.Name)
                {
                case "bgm":
                    bgm = InfoTool.GetString(prop);
                    break;

                case "cloud":
                    cloud = InfoTool.GetBool(prop);
                    break;

                case "swim":
                    swim = InfoTool.GetBool(prop);
                    break;

                case "forcedReturn":
                    forcedReturn = InfoTool.GetInt(prop);
                    break;

                case "hideMinimap":
                    hideMinimap = InfoTool.GetBool(prop);
                    break;

                case "mapDesc":
                    mapDesc = InfoTool.GetString(prop);
                    break;

                case "mapName":
                    mapName = InfoTool.GetString(prop);
                    break;

                case "mapMark":
                    mapMark = InfoTool.GetString(prop);
                    break;

                case "mobRate":
                    mobRate = InfoTool.GetFloat(prop);
                    break;

                case "moveLimit":
                    moveLimit = InfoTool.GetInt(prop);
                    break;

                case "returnMap":
                    returnMap = InfoTool.GetInt(prop);
                    break;

                case "town":
                    town = InfoTool.GetBool(prop);
                    break;

                case "version":
                    version = InfoTool.GetInt(prop);
                    break;

                case "fieldLimit":
                    long fl = InfoTool.GetLong(prop);
                    fieldLimit = fl;
                    break;

                case "VRTop":
                    VRTop = InfoTool.GetOptionalInt(prop, 0);
                    break;

                case "VRBottom":
                    VRBottom = InfoTool.GetOptionalInt(prop, 0);
                    break;

                case "VRLeft":
                    VRLeft = InfoTool.GetOptionalInt(prop, 0);
                    break;

                case "VRRight":
                    VRRight = InfoTool.GetOptionalInt(prop, 0);
                    break;

                case "link":
                    //link = InfoTool.GetInt(prop);
                    break;

                case "timeLimit":
                    timeLimit = InfoTool.GetInt(prop);
                    break;

                case "lvLimit":
                    lvLimit = InfoTool.GetInt(prop);
                    break;

                case "onFirstUserEnter":
                    onFirstUserEnter = InfoTool.GetString(prop);
                    break;

                case "onUserEnter":
                    onUserEnter = InfoTool.GetString(prop);
                    break;

                case "fly":
                    fly = InfoTool.GetBool(prop);
                    break;

                case "noMapCmd":
                    noMapCmd = InfoTool.GetBool(prop);
                    break;

                case "partyOnly":
                    partyOnly = InfoTool.GetBool(prop);
                    break;

                case "fieldType":
                    int ft = InfoTool.GetInt(prop);
                    if (!Enum.IsDefined(typeof(FieldType), ft))
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "Invalid fieldType " + ft.ToString() + loggerSuffix);
                        ft = 0;
                    }
                    fieldType = (FieldType)ft;
                    break;

                case "miniMapOnOff":
                    miniMapOnOff = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffle":
                    reactorShuffle = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffleName":
                    reactorShuffleName = InfoTool.GetString(prop);
                    break;

                case "personalShop":
                    personalShop = InfoTool.GetBool(prop);
                    break;

                case "entrustedShop":
                    entrustedShop = InfoTool.GetBool(prop);
                    break;

                case "effect":
                    effect = InfoTool.GetString(prop);
                    break;

                case "lvForceMove":
                    lvForceMove = InfoTool.GetInt(prop);
                    break;

                case "timeMob":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?   id      = InfoTool.GetOptionalInt(prop["id"]);
                    string message = InfoTool.GetOptionalString(prop["message"]);
                    if (id == null || message == null || (startHour == null ^ endHour == null))
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "timeMob" + loggerSuffix);
                    }
                    else
                    {
                        timeMob = new TimeMob((int?)startHour, (int?)endHour, (int)id, message);
                    }
                    break;

                case "help":
                    help = InfoTool.GetString(prop);
                    break;

                case "snow":
                    snow = InfoTool.GetBool(prop);
                    break;

                case "rain":
                    rain = InfoTool.GetBool(prop);
                    break;

                case "dropExpire":
                    dropExpire = InfoTool.GetInt(prop);
                    break;

                case "decHP":
                    decHP = InfoTool.GetInt(prop);
                    break;

                case "decInterval":
                    decInterval = InfoTool.GetInt(prop);
                    break;

                case "autoLieDetector":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?interval = InfoTool.GetOptionalInt(prop["interval"]);
                    int?propInt  = InfoTool.GetOptionalInt(prop["prop"]);
                    if (startHour == null || endHour == null || interval == null || propInt == null)
                    {
                        ErrorLogger.Log(ErrorLevel.IncorrectStructure, "autoLieDetector" + loggerSuffix);
                    }
                    else
                    {
                        autoLieDetector = new AutoLieDetector((int)startHour, (int)endHour, (int)interval, (int)propInt);
                    }
                    break;

                case "expeditionOnly":
                    expeditionOnly = InfoTool.GetBool(prop);
                    break;

                case "fs":
                    fs = InfoTool.GetFloat(prop);
                    break;

                case "protectItem":
                    protectItem = InfoTool.GetInt(prop);
                    break;

                case "createMobInterval":
                    createMobInterval = InfoTool.GetInt(prop);
                    break;

                case "fixedMobCapacity":
                    fixedMobCapacity = InfoTool.GetInt(prop);
                    break;

                case "streetName":
                    streetName = InfoTool.GetString(prop);
                    break;

                case "noRegenMap":
                    noRegenMap = InfoTool.GetBool(prop);
                    break;

                case "allowedItem":
                    allowedItem = new List <int>();
                    if (prop.WzProperties != null && prop.WzProperties.Count > 0)
                    {
                        foreach (WzImageProperty item in prop.WzProperties)
                        {
                            allowedItem.Add(item.GetInt());
                        }
                    }
                    break;

                case "recovery":
                    recovery = InfoTool.GetFloat(prop);
                    break;

                case "blockPBossChange":
                    blockPBossChange = InfoTool.GetBool(prop);
                    break;

                case "everlast":
                    everlast = InfoTool.GetBool(prop);
                    break;

                case "damageCheckFree":
                    damageCheckFree = InfoTool.GetBool(prop);
                    break;

                case "dropRate":
                    dropRate = InfoTool.GetFloat(prop);
                    break;

                case "scrollDisable":
                    scrollDisable = InfoTool.GetBool(prop);
                    break;

                case "needSkillForFly":
                    needSkillForFly = InfoTool.GetBool(prop);
                    break;

                case "zakum2Hack":
                    zakum2Hack = InfoTool.GetBool(prop);
                    break;

                case "allMoveCheck":
                    allMoveCheck = InfoTool.GetBool(prop);
                    break;

                case "VRLimit":
                    VRLimit = InfoTool.GetBool(prop);
                    break;

                case "consumeItemCoolTime":
                    consumeItemCoolTime = InfoTool.GetBool(prop);
                    break;

                case "zeroSideOnly":
                    zeroSideOnly = InfoTool.GetBool(prop);
                    break;

                case "mirror_Bottom":
                    mirror_Bottom = InfoTool.GetBool(prop);
                    break;

                case "AmbientBGM":
                case "AmbientBGMv":
                case "areaCtrl":
                case "onlyUseSkill":
                case "limitUseShop":
                case "limitUseTrunk":
                case "freeFallingVX":
                case "midAirAccelVX":
                case "midAirDecelVX":
                case "jumpSpeedR":
                case "jumpAccUpKey":
                case "jumpAccDownKey":
                case "jumpApplyVX":
                case "dashSkill":
                case "speedMaxOver":
                case "speedMaxOver ":     // with a space, stupid nexon
                case "isSpecialMoveCheck":
                case "forceSpeed":
                case "forceJump":
                case "forceUseIndie":
                case "vanishPet":
                case "vanishAndroid":
                case "vanishDragon":
                case "limitUI":
                case "largeSplit":
                case "qrLimit":
                case "noChair":
                case "fieldScript":
                case "standAlone":
                case "partyStandAlone":
                case "HobbangKing":
                case "quarterView":
                case "MRLeft":
                case "MRTop":
                case "MRRight":
                case "MRBottom":
                case "limitSpeedAndJump":
                case "directionInfo":
                case "LBSide":
                case "LBTop":
                case "LBBottom":
                case "bgmSub":
                case "fieldLimit2":
                case "fieldLimit_tw":
                case "particle":
                case "qrLimitJob":
                case "individualMobPool":
                case "barrier":
                case "remoteEffect":
                case "isFixDec":
                case "decHPr":
                case "isDecView":
                case "forceFadeInTime":
                case "forceFadeOutTime":
                case "qrLimitState":
                case "qrLimitState2":
                case "difficulty":
                case "alarm":
                case "bossMobID":
                case "reviveCurField":
                case "ReviveCurFieldOfNoTransfer":
                case "ReviveCurFieldOfNoTransferPoint":
                case "limitUserEffectField":
                case "nofollowCharacter":
                case "functionObjInfo":
                case "quest":
                case "ridingMove":
                case "ridingField":
                case "noLanding":
                case "noCancelSkill":
                case "defaultAvatarDir":
                case "footStepSound":
                case "taggedObjRegenInfo":
                case "offSoulAbsorption":
                case "canPartyStatChangeIgnoreParty":
                case "canPartyStatChangeIgnoreParty ":     // with a space
                case "forceReturnOnDead":
                case "zoomOutField":
                case "EscortMinTime":
                case "deathCount":
                case "onEnterResetFifthSkill":
                case "potionLimit":
                case "lifeCount":
                case "respawnCooltimeField":
                case "scale":
                case "skills":
                case "noResurection":
                case "incInterval":
                case "incMPr":
                case "bonusExpPerUserHPRate":
                case "barrierArc":
                case "noBackOverlapped":
                case "partyBonusR":
                case "specialSound":
                case "inFieldsetForcedReturn":
                case "chaser":
                case "chaserEndTime":
                case "chaserEffect":
                case "cagePotal":
                case "cageLT":
                case "cageRB":
                case "chaserHoldTime":
                case "phase":
                case "boss":
                case "actionBarIdx":
                case "shadowzone":
                case "towerChairEnable":
                case "DiceMasterUpIndex":
                case "DiceMasterDownIndex":
                case "ChangeName":
                case "entrustedFishing":
                case "forcedScreenMode":
                case "isHideUI":
                case "resetRidingField":
                case "PL_Gunman":
                case "noHekatonEffect":
                case "mode":
                case "skill":
                case "MR":
                case "ratemob":
                case "bonusStageNoChangeBack":
                case "questAmbience":
                case "blockScriptItem":
                case "remoteTranslucenceView":
                case "rewardContentName":
                case "specialDeadAction":
                case "FriendsStoryBossDelay":
                case "soulFieldType":
                case "cameraMoveY":
                case "subType":
                case "playTime":
                case "noEvent":
                case "forParty":
                case "whiteOut":
                case "UserInvisible":
                case "OnFirstUserEnter":     // the same as onFirstUserEnter
                case "teamPortal":
                case "typingGame":
                case "lt":
                case "rb":
                case "fieldAttackObj":
                case "timeLeft":
                case "timeLeft_d":
                case "eventSummon":
                case "rankCheckMob":
                case "questCheckMob":
                case "bindSkillLimit":
                case "NoMobCapacityLimit":
                case "userTimer":
                case "eventChairIndex":
                case "onlyEventChair":
                case "waitReviveTime":
                case "RidingTop":
                case "temporarySkill":
                case "largeSplt":
                case "blockTakeOffItem":
                case "PartyOnly":
                case "climb":
                case "bulletConsume":
                case "gaugeDelay":
                case "individualPet":
                case "level":
                case "hungryMuto":
                case "property":                //  map 921172300.img
                case "spiritSavior":
                case "standAlonePermitUpgrade": //  993059600.img
                case "limitHeadAlarmField":     // 993180000.img
                {
                    WzImageProperty cloneProperty = prop.DeepClone();
                    //cloneProperty.Parent = prop.Parent;

                    unsupportedInfoProperties.Add(cloneProperty);
                    break;
                }

                default:
                    ErrorLogger.Log(ErrorLevel.MissingFeature, string.Format("[MapInfo] Unknown field info/ property: '{0}'. {1}. Please fix it at MapInfo.cs", prop.Name, loggerSuffix));
                    additionalProps.Add(prop.DeepClone());
                    break;
                }
            }
        }
Example #4
0
        public MapInfo(WzImage image, string strMapName, string strStreetName)
        {
            int?startHour;
            int?endHour;

            this.strMapName    = strMapName;
            this.strStreetName = strStreetName;
            foreach (IWzImageProperty prop in image["info"].WzProperties)
            {
                switch (prop.Name)
                {
                case "bgm":
                    bgm = InfoTool.GetString(prop);
                    break;

                case "cloud":
                    cloud = InfoTool.GetBool(prop);
                    break;

                case "swim":
                    swim = InfoTool.GetBool(prop);
                    break;

                case "forcedReturn":
                    forcedReturn = InfoTool.GetInt(prop);
                    break;

                case "hideMinimap":
                    hideMinimap = InfoTool.GetBool(prop);
                    break;

                case "mapDesc":
                    mapDesc = InfoTool.GetString(prop);
                    break;

                case "mapMark":
                    MapMark = InfoTool.GetString(prop);
                    break;

                case "mobRate":
                    mobRate = InfoTool.GetFloat(prop);
                    break;

                case "moveLimit":
                    moveLimit = InfoTool.GetInt(prop);
                    break;

                case "returnMap":
                    returnMap = InfoTool.GetInt(prop);
                    break;

                case "town":
                    town = InfoTool.GetBool(prop);
                    break;

                case "version":
                    version = InfoTool.GetInt(prop);
                    break;

                case "fieldLimit":
                    int fl = InfoTool.GetInt(prop);
                    if (fl >= (int)Math.Pow(2, 23))
                    {
                        fl = fl & ((int)Math.Pow(2, 23) - 1);
                    }
                    fieldLimit = (FieldLimit)fl;
                    break;

                case "VRTop":
                case "VRBottom":
                case "VRLeft":
                case "VRRight":
                    break;

                case "link":
                    //link = InfoTool.GetInt(prop);
                    break;

                case "timeLimit":
                    timeLimit = InfoTool.GetInt(prop);
                    break;

                case "lvLimit":
                    lvLimit = InfoTool.GetInt(prop);
                    break;

                case "onFirstUserEnter":
                    onFirstUserEnter = InfoTool.GetString(prop);
                    break;

                case "onUserEnter":
                    onUserEnter = InfoTool.GetString(prop);
                    break;

                case "fly":
                    fly = InfoTool.GetBool(prop);
                    break;

                case "noMapCmd":
                    noMapCmd = InfoTool.GetBool(prop);
                    break;

                case "partyOnly":
                    partyOnly = InfoTool.GetBool(prop);
                    break;

                case "fieldType":
                    int ft = InfoTool.GetInt(prop);
                    if (!Enum.IsDefined(typeof(FieldType), ft))
                    {
                        ft = 0;
                    }
                    fieldType = (FieldType)ft;
                    break;

                case "miniMapOnOff":
                    miniMapOnOff = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffle":
                    reactorShuffle = InfoTool.GetBool(prop);
                    break;

                case "reactorShuffleName":
                    reactorShuffleName = InfoTool.GetString(prop);
                    break;

                case "personalShop":
                    personalShop = InfoTool.GetBool(prop);
                    break;

                case "entrustedShop":
                    entrustedShop = InfoTool.GetBool(prop);
                    break;

                case "effect":
                    effect = InfoTool.GetString(prop);
                    break;

                case "lvForceMove":
                    lvForceMove = InfoTool.GetInt(prop);
                    break;

                case "timeMob":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?   id      = InfoTool.GetOptionalInt(prop["id"]);
                    string message = InfoTool.GetOptionalString(prop["message"]);
                    if (id == null || message == null || (startHour == null ^ endHour == null))
                    {
                        //System.Windows.Forms.MessageBox.Show("Warning", "Warning - incorrect timeMob structure in map data. Skipped and error log was saved.");
                        WzFile file = (WzFile)image.WzFileParent;
                        if (file != null)
                        {
                            ErrorLogger.Log(ErrorLevel.IncorrectStructure, "timeMob, map " + image.Name + " of version " + Enum.GetName(typeof(WzMapleVersion), file.MapleVersion) + ", v" + file.Version.ToString());
                        }
                    }
                    else
                    {
                        timeMob = new TimeMob((int?)startHour, (int?)endHour, (int)id, message);
                    }
                    break;

                case "help":
                    help = InfoTool.GetString(prop);
                    break;

                case "snow":
                    snow = InfoTool.GetBool(prop);
                    break;

                case "rain":
                    rain = InfoTool.GetBool(prop);
                    break;

                case "dropExpire":
                    dropExpire = InfoTool.GetInt(prop);
                    break;

                case "decHP":
                    decHP = InfoTool.GetInt(prop);
                    break;

                case "decInterval":
                    decInterval = InfoTool.GetInt(prop);
                    break;

                case "autoLieDetector":
                    startHour = InfoTool.GetOptionalInt(prop["startHour"]);
                    endHour   = InfoTool.GetOptionalInt(prop["endHour"]);
                    int?interval = InfoTool.GetOptionalInt(prop["interval"]);
                    int?propInt  = InfoTool.GetOptionalInt(prop["prop"]);
                    if (startHour == null || endHour == null || interval == null || propInt == null)
                    {
                        //System.Windows.Forms.MessageBox.Show("Warning", "Warning - incorrect autoLieDetector structure in map data. Skipped and error log was saved.");
                        WzFile file = (WzFile)image.WzFileParent;
                        if (file != null)
                        {
                            ErrorLogger.Log(ErrorLevel.IncorrectStructure, "autoLieDetector, map " + image.Name + " of version " + Enum.GetName(typeof(WzMapleVersion), file.MapleVersion) + ", v" + file.Version.ToString());
                        }
                    }
                    else
                    {
                        autoLieDetector = new AutoLieDetector((int)startHour, (int)endHour, (int)interval, (int)propInt);
                    }
                    break;

                case "expeditionOnly":
                    expeditionOnly = InfoTool.GetBool(prop);
                    break;

                case "fs":
                    fs = InfoTool.GetFloat(prop);
                    break;

                case "protectItem":
                    protectItem = InfoTool.GetInt(prop);
                    break;

                case "createMobInterval":
                    createMobInterval = InfoTool.GetInt(prop);
                    break;

                case "fixedMobCapacity":
                    fixedMobCapacity = InfoTool.GetInt(prop);
                    break;

                case "streetName":
                    streetName = InfoTool.GetString(prop);
                    break;

                case "noRegenMap":
                    noRegenMap = InfoTool.GetBool(prop);
                    break;

                case "allowedItems":
                    allowedItems = new List <int>();
                    if (prop.WzProperties != null && prop.WzProperties.Count > 0)
                    {
                        foreach (IWzImageProperty item in prop.WzProperties)
                        {
                            allowedItems.Add((int)item);
                        }
                    }
                    break;

                case "recovery":
                    recovery = InfoTool.GetFloat(prop);
                    break;

                case "blockPBossChange":
                    blockPBossChange = InfoTool.GetBool(prop);
                    break;

                case "everlast":
                    everlast = InfoTool.GetBool(prop);
                    break;

                case "damageCheckFree":
                    damageCheckFree = InfoTool.GetBool(prop);
                    break;

                case "dropRate":
                    dropRate = InfoTool.GetFloat(prop);
                    break;

                case "scrollDisable":
                    scrollDisable = InfoTool.GetBool(prop);
                    break;

                case "needSkillForFly":
                    needSkillForFly = InfoTool.GetBool(prop);
                    break;

                case "zakum2Hack":
                    zakum2Hack = InfoTool.GetBool(prop);
                    break;

                case "allMoveCheck":
                    allMoveCheck = InfoTool.GetBool(prop);
                    break;

                case "VRLimit":
                    VRLimit = InfoTool.GetBool(prop);
                    break;

                case "consumeItemCoolTime":
                    consumeItemCoolTime = InfoTool.GetBool(prop);
                    break;

                default:
                    additionalProps.Add(prop);
                    break;
                }
            }
            if (image["info"]["VRLeft"] != null)
            {
                IWzImageProperty info = image["info"];
                int left   = InfoTool.GetInt(info["VRLeft"]);
                int right  = InfoTool.GetInt(info["VRRight"]);
                int top    = InfoTool.GetInt(info["VRTop"]);
                int bottom = InfoTool.GetInt(info["VRBottom"]);
                VR = new Rectangle(left, top, right - left, bottom - top);
            }
        }