BitCollectors.QfgCharacterEditor.Library.GameInfo.Qfg2GameInfo.EncodedCharacterString C# (CSharp) Method

EncodedCharacterString() public method

public EncodedCharacterString ( QfgCharacter character ) : string
character QfgCharacter
return string
        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;
        }