public void LoadMappings(int index, int value, QfgCharacter character) { switch (index) { case 44: character.CheckSum2 = value; break; case 43: character.CheckSum1 = value; break; case 36: character.InventoryDaggers = value; break; case 37: character.InventoryHealingPotions = value; break; case 38: character.InventoryVigorPotions = value; break; case 39: character.InventoryMagicPotions = value; break; case 40: character.InventoryPoisonCurePotions = value; break; case 25: character.MagicSkillOpen = value; break; case 26: character.MagicSkillDetect = value; break; case 27: character.MagicSkillTrigger = value; break; case 28: character.MagicSkillDazzle = value; break; case 29: character.MagicSkillZap = value; break; case 30: character.MagicSkillCalm = value; break; case 31: character.MagicSkillFlame = value; break; case 32: character.MagicSkillFetch = value; break; case 33: character.MagicSkillForceBolt = value; break; case 34: character.MagicSkillLevitate = value; break; case 35: character.MagicSkillReversal = value; break; case 20: character.Honor = value; break; case 19: character.Communication = value; break; case 18: character.Magic = value; break; case 17: character.Climbing = value; break; case 16: character.Throwing = value; break; case 15: character.PickLocks = value; break; case 14: character.Stealth = value; break; case 13: character.Dodge = value; break; case 12: character.Parry = value; break; case 11: character.WeaponUse = value; break; case 10: character.Luck = value; break; case 9: character.Vitality = value; break; case 8: character.Agility = value; break; case 7: character.Intelligence = value; break; case 6: character.Strength = value; break; case 1: character.QfgClass = (QfgClasses)value; break; } }
public string EncodedCharacterString(QfgCharacter character) { string str = string.Format("83-{31}-25-25-200-1-{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}-{9}-{10}-{11}-{12}-{13}-{14}-25-25-25-25-{15}-{16}-{17}-{18}-{19}-{20}-{21}-{22}-{23}-{24}-{25}-{26}-{27}-{28}-{29}-{30}-160-62-9991-9992-47-144-25-163-", character.Strength.ToString(), character.Intelligence.ToString(), character.Agility.ToString(), character.Vitality.ToString(), character.Luck.ToString(), character.WeaponUse.ToString(), character.Parry.ToString(), character.Dodge.ToString(), character.Stealth.ToString(), character.PickLocks.ToString(), character.Throwing.ToString(), character.Climbing.ToString(), character.Magic.ToString(), character.Communication.ToString(), character.Honor.ToString(), character.MagicSkillOpen.ToString(), character.MagicSkillDetect.ToString(), character.MagicSkillTrigger.ToString(), character.MagicSkillDazzle.ToString(), character.MagicSkillZap.ToString(), character.MagicSkillCalm.ToString(), character.MagicSkillFlame.ToString(), character.MagicSkillFetch.ToString(), character.MagicSkillForceBolt.ToString(), character.MagicSkillLevitate.ToString(), character.MagicSkillReversal.ToString(), character.InventoryDaggers.ToString(), character.InventoryHealingPotions.ToString(), character.InventoryMagicPotions.ToString(), character.InventoryVigorPotions.ToString(), character.InventoryPoisonCurePotions.ToString(), ((int)character.QfgClass).ToString() ); string[] ar = str.Split('-'); List<int> decodedStrArray = new List<int>(); foreach (string st in ar) { if (st != "") decodedStrArray.Add(Int32.Parse(st)); } int total1 = 0xda; int total2 = 0; for (int i = 0; i < 40; i += 2) { decodedStrArray[i + 1] = decodedStrArray[i + 1] & 255; total1 += decodedStrArray[i + 1]; } for (int i = 1; i < 40; i += 2) { decodedStrArray[i + 1] = decodedStrArray[i + 1] & 255; total2 += decodedStrArray[i + 1]; } total1 &= 255; total2 &= 255; character.CheckSum1 = total1; character.CheckSum2 = total2; str = str.Replace("-9992-", "-" + total2.ToString() + "-"); str = str.Replace("-9991-", "-" + total1.ToString() + "-"); for (int i = 0; i < 48; i++) { decodedStrArray[i + 1] = decodedStrArray[i + 1] & 255; decodedStrArray[i + 1] ^= decodedStrArray[i]; } ar = null; ar = str.Split('-'); decodedStrArray.Clear(); foreach (string st in ar) { if (st != "") decodedStrArray.Add(Int32.Parse(st)); } int prev = 0; int index = 0; List<int> encodedVal = new List<int>(); foreach (int val in decodedStrArray) { int encoded = val; encoded ^= prev & 255; if (index > 0) encodedVal.Add(encoded); prev = encoded; index++; } List<string> encodedStrArray = new List<string>(); foreach (int val in encodedVal) { encodedStrArray.Add(val.ToString("X")); } string encodedValue = ""; for (int i = 0; i < encodedStrArray.Count; i++) { encodedValue += encodedStrArray[i].PadLeft(2, ' ').ToLower(); } return encodedValue; }
public void LoadCharacterString(string characterString, QfgCharacter character) { character.QfgClass = QfgClasses.Fighter; character.QfgGame = QfgGames.QFG2; string hexString = characterString; List<int> hexArray = new List<int>(); while (hexString.Length > 0) { string hexValue = hexString.Substring(hexString.Length - 2, 2); hexString = hexString.Substring(0, hexString.Length - 2); hexArray.Add(Convert.ToInt32(hexValue.Trim(), 16)); } hexArray.Add(0x53); hexArray.Reverse(); int prev = 0;// x53; int index = 0; int total1 = 0xda; int total2 = 0; List<int> decodedValues = new List<int>(); string decodedStr = ""; foreach (int val in hexArray) { int decoded = val; decoded ^= prev & 255; decodedStr += decoded.ToString() + "-"; decodedValues.Add(decoded); this.LoadMappings(index, decoded, character); prev = val; index++; } string total1Str = ""; for (int i = 0; i < 40; i += 2) { total1 += decodedValues[i + 1]; total1Str += decodedValues[i + 1].ToString() + "-"; } for (int i = 1; i < 40; i += 2) { total2 += decodedValues[i + 1]; } total1 &= 255; total2 &= 255; if (character.CheckSum1 != total1 || character.CheckSum2 != total2) { //throw new Exception("Invalid Character Checksums"); } }
public string EncodedCharacterString(QfgCharacter character) { string str = string.Format("83-{25}-2-72-71-115-{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}-{9}-{10}-{11}-{12}-28-4-57-75-{13}-{14}-{15}-{16}-{17}-{18}-{19}-{20}-{21}-{22}-{23}-{24}-0-121-6-9991-9992-67-8-45-112-", character.Strength.ToString(), character.Intelligence.ToString(), character.Agility.ToString(), character.Vitality.ToString(), character.Luck.ToString(), character.WeaponUse.ToString(), character.Parry.ToString(), character.Dodge.ToString(), character.Stealth.ToString(), character.PickLocks.ToString(), character.Throwing.ToString(), character.Climbing.ToString(), character.Magic.ToString(), character.MagicSkillOpen.ToString(), character.MagicSkillDetect.ToString(), character.MagicSkillTrigger.ToString(), character.MagicSkillDazzle.ToString(), character.MagicSkillZap.ToString(), character.MagicSkillCalm.ToString(), character.MagicSkillFlame.ToString(), character.MagicSkillFetch.ToString(), character.InventoryDaggers.ToString(), character.InventoryHealingPotions.ToString(), character.InventoryMagicPotions.ToString(), character.InventoryVigorPotions.ToString(), ((int)character.QfgClass).ToString() ); string[] ar = str.Split('-'); List<int> decodedStrArray = new List<int>(); foreach (string st in ar) { if (st != "") decodedStrArray.Add(Int32.Parse(st)); } int total1 = 0xce; int total2 = 0; for (int i = 0; i < 35; i += 2) { total1 += decodedStrArray[i + 1]; } for (int i = 1; i < 35; i += 2) { total2 += decodedStrArray[i + 1]; } total1 &= 127; total2 &= 127; character.CheckSum1 = total1; character.CheckSum2 = total2; str = str.Replace("-9992-", "-" + total2.ToString() + "-"); str = str.Replace("-9991-", "-" + total1.ToString() + "-"); ar = null; ar = str.Split('-'); decodedStrArray.Clear(); foreach (string st in ar) { if (st != "") decodedStrArray.Add(Int32.Parse(st)); } int prev = 0;// x53; int index = 0; List<int> encodedVal = new List<int>(); foreach (int val in decodedStrArray) { int encoded = val; encoded ^= prev & 127; if (index > 0) encodedVal.Add(encoded); prev = encoded; index++; } List<string> encodedStrArray = new List<string>(); foreach (int val in encodedVal) { encodedStrArray.Add(val.ToString("X")); } string encodedValue = ""; for (int i = 0; i < encodedStrArray.Count; i++) { encodedValue += encodedStrArray[i].PadLeft(2, ' ').ToLower(); } return encodedValue; }