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;
}