// 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); }
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(); } }