Example #1
0
        public static int?GetOptionalTranslatedInt(WzImageProperty source)
        {
            string str = InfoTool.GetOptionalString(source);

            if (str == null)
            {
                return(null);
            }
            return(int.Parse(str));
        }
Example #2
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 #3
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 #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);
            }
        }