Пример #1
0
        // note: is float/int mix in d2
        //public int currentLife;
        //public int currentMana;
        //public int currentStamina;

        //public int maxLife;
        //public int maxMana;
        //public int maxStamina;

        /// <summary>
        /// fill the player data by dictionary
        /// </summary>
        /// <param name="dict"></param>
        /// <param name="resistancPenalty"></param>
        public void fill(Dictionary <int, int> dict, D2Data.Penalty resistancPenalty)
        {
            lvl = (short)(dict.ContainsKey(D2Data.CHAR_LVL_IDX) ? dict[D2Data.CHAR_LVL_IDX] : 0);

            xp = (dict.ContainsKey(D2Data.CHAR_XP_IDX) ? dict[D2Data.CHAR_XP_IDX] : 0);

            defense = (short)(dict.ContainsKey(D2Data.CHAR_DEF_IDX) ? dict[D2Data.CHAR_DEF_IDX] : 0);

            fireRes      = (short)(dict.ContainsKey(D2Data.CHAR_FIRE_RES_IDX) ? dict[D2Data.CHAR_FIRE_RES_IDX] : 0);
            coldRes      = (short)(dict.ContainsKey(D2Data.CHAR_COLD_RES_IDX) ? dict[D2Data.CHAR_COLD_RES_IDX] : 0);
            lightningRes = (short)(dict.ContainsKey(D2Data.CHAR_LIGHTNING_RES_IDX) ? dict[D2Data.CHAR_LIGHTNING_RES_IDX] : 0);
            poisonRes    = (short)(dict.ContainsKey(D2Data.CHAR_POISON_RES_IDX) ? dict[D2Data.CHAR_POISON_RES_IDX] : 0);

            strength  = (short)(dict.ContainsKey(D2Data.CHAR_STR_IDX) ? dict[D2Data.CHAR_STR_IDX] : 0);
            dexterity = (short)(dict.ContainsKey(D2Data.CHAR_DEX_IDX) ? dict[D2Data.CHAR_DEX_IDX] : 0);
            vitality  = (short)(dict.ContainsKey(D2Data.CHAR_VIT_IDX) ? dict[D2Data.CHAR_VIT_IDX] : 0);
            energy    = (short)(dict.ContainsKey(D2Data.CHAR_ENE_IDX) ? dict[D2Data.CHAR_ENE_IDX] : 0);

            fireResAdditional      = (short)(dict.ContainsKey(D2Data.CHAR_FIRE_RES_ADD_IDX) ? dict[D2Data.CHAR_FIRE_RES_ADD_IDX] : 0);
            coldResAdditional      = (short)(dict.ContainsKey(D2Data.CHAR_COLD_RES_ADD_IDX) ? dict[D2Data.CHAR_COLD_RES_ADD_IDX] : 0);
            lightningResAdditional = (short)(dict.ContainsKey(D2Data.CHAR_LIGHTNING_RES_ADD_IDX) ? dict[D2Data.CHAR_LIGHTNING_RES_ADD_IDX] : 0);
            poisonResAdditional    = (short)(dict.ContainsKey(D2Data.CHAR_POISON_RES_ADD_IDX) ? dict[D2Data.CHAR_POISON_RES_ADD_IDX] : 0);

            calculatedFireRes      = (short)Math.Min(fireRes + (short)resistancPenalty, 75 + fireResAdditional);
            calculatedColdRes      = (short)Math.Min(coldRes + (short)resistancPenalty, 75 + coldResAdditional);
            calculatedLightningRes = (short)Math.Min(lightningRes + (short)resistancPenalty, 75 + lightningResAdditional);
            calculatedPoisonRes    = (short)Math.Min(poisonRes + (short)resistancPenalty, 75 + poisonResAdditional);

            goldBody  = (dict.ContainsKey(D2Data.CHAR_GOLD_BODY_IDX) ? dict[D2Data.CHAR_GOLD_BODY_IDX] : 0);
            goldStash = (dict.ContainsKey(D2Data.CHAR_GOLD_STASH_IDX) ? dict[D2Data.CHAR_GOLD_STASH_IDX] : 0);
        }
Пример #2
0
        public void readData()
        {
            // get name
            tmpName = readString(15, ADDRESS_CHARACTER, OFFSETS_NAME, true);
            if (tmpName != "" && tmpName != player.name)
            {
                player.name   = tmpName;
                player.deaths = 0; // reset the deaths if name changed
                foreach (AutoSplit autosplit in main.settings.autosplits)
                {
                    autosplit.reached = false;
                }
                haveReset           = true;
                player.newlyStarted = false;
                return;
            }

            // todo: only read difficulty when it could possibly have changed
            difficulty = readByte(ADDRESS_DIFFICULTY, null, true);
            if (difficulty < 0 || difficulty > 2)
            {
                difficulty = 0;
            }
            switch (difficulty)
            {
            case 2: currentPenalty = D2Data.Penalty.HELL; break;

            case 1: currentPenalty = D2Data.Penalty.NIGHTMARE; break;

            case 0:
            default: currentPenalty = D2Data.Penalty.NORMAL; break;
            }

            // debug window - quests
            if (main.getDebugWindow() != null)
            {
                OFFSETS_QUESTS[OFFSETS_QUESTS.Length - 1] = QUEST_BUFFER_DIFFICULTY_OFFSET * 0;
                main.getDebugWindow().setQuestDataNormal(readBuffer(QUEST_BUFFER_LENGTH, ADDRESS_QUESTS, OFFSETS_QUESTS, true));
                OFFSETS_QUESTS[OFFSETS_QUESTS.Length - 1] = QUEST_BUFFER_DIFFICULTY_OFFSET * 1;
                main.getDebugWindow().setQuestDataNightmare(readBuffer(QUEST_BUFFER_LENGTH, ADDRESS_QUESTS, OFFSETS_QUESTS, true));
                OFFSETS_QUESTS[OFFSETS_QUESTS.Length - 1] = QUEST_BUFFER_DIFFICULTY_OFFSET * 2;
                main.getDebugWindow().setQuestDataHell(readBuffer(QUEST_BUFFER_LENGTH, ADDRESS_QUESTS, OFFSETS_QUESTS, true));
            }

            player.fill(readDataDict(), currentPenalty);
            player.mode = (D2Data.Mode)readShort(ADDRESS_CHARACTER, OFFSETS_MODE, true);
            player.handleDeath();
            if (haveReset)
            {
                player.newlyStarted = (player.xp == 0 && player.lvl == 1);
                haveReset           = false;
            }

            main.updateLabels(player);
            main.writeFiles(player);

            // autosplits only if newly started player
            if (player.newlyStarted)
            {
                doAutoSplits();
            }
        }