[help] Saving a character

Joined
Aug 25, 2006
Messages
124
Reaction score
24
Can anyone tell me why characters dont save on the CoEmu source,
Because i used the source of ron.
I hope i give enough information to solve this probleme

Command:
Code:
                    else if (Splitter[0] == "/save")
                    {
                        BackendDB.SynchronizeCharacter(Client.Char);
                    }
this is a simple command but its effective i think

SynchronizeCharacter:
Code:
public static void SynchronizeCharacter(Character Char)
        {
            string save_inv = Char.SaveInventory();
            string save_equip = Char.SaveEquipment();
            string save_skill = Char.SaveSkills();
            string save_quest = Char.SaveQuests();
            string SQL = "UPDATE \"Characters\" SET \"Class\" = '" + (uint)(Char.Class) + "', \"Model\" = " + Char.Model +
                ", \"Name\" = '" + Char.Name + "', \"PKPoints\" = " + Char.PKPoints + ", \"Level\" = " + Char.Level + 
                ", \"LocationX\" = " + Char.CurrentLoc.X + ", \"LocationY\" = " + Char.CurrentLoc.Y + ", \"Money\" = "
                + Char.Money + ", \"Map\" = " + (uint)(Char.Map) + ", \"Experience\" = " + Char.Exp + ", \"HP\" = " + Char.HP +
                ", \"MP\" = " + Char.MP + ", \"StatPoints\" = " + Char.StatPoints + ", \"Strength\" = " + Char.Strength +
                ", \"Spirit\" = " + Char.Mana + ", \"Agility\" = " + Char.Dexterity + ", \"Vitality\" = " + Char.Vitality +
                ", \"Inventory\" = " + save_inv +
                ", \"Equipment\" = " + save_equip + ", \"Skills\" = " + save_skill + ", \"Quests\" = " + save_quest +
                " WHERE \"CharacterID\" = " + (uint)(Char.CharID - 0x00120000);
            //SQL = MakeSafeString(SQL);
            NpgsqlCommand Com = new NpgsqlCommand(SQL, m_Database);
            Com.ExecuteNonQuery();
        }
ALL in character.cs
Saveinventory:
Code:
        public string SaveInventory()
        {


            // define which character is seperating field
            int a = 0;
            string retrnsave = "";
           
            foreach (int[] items in Inv_items)
            {
                string i1 = "";
                string i2b = "";
                string i3b = "";
                string i4b = "";
                string i5b = "";
                string i6b = "";
                string i7b = "";
                string i8b = "";
                string i9b = "";
                string i10 = "";
                string i11 = "";
                string i12 = "";
                if (items[0] != 0)
                {

                    i1 = items[0].ToString("X"); i1 = i1.PadLeft(6, '0');
                    i2b = items[1].ToString("X"); i2b = i2b.PadLeft(2, '0');
                    i3b = items[2].ToString("X"); i3b = i3b.PadLeft(2, '0');
                    i4b = items[3].ToString("X"); i4b = i4b.PadLeft(2, '0');
                    i5b = items[4].ToString("X"); i5b = i5b.PadLeft(2, '0');
                    i6b = items[5].ToString("X"); i6b = i6b.PadLeft(2, '0');
                    i7b = items[6].ToString("X"); i7b = i7b.PadLeft(2, '0');
                    i8b = items[7].ToString("X"); i8b = i8b.PadLeft(5, '0');
                    i9b = items[8].ToString("X"); i9b = i9b.PadLeft(5, '0');
                    i10 = items[9].ToString("X"); i10 = i10.PadLeft(6, '0');
                    i11 = items[10].ToString("X"); i11 = i11.PadLeft(2, '0');
                    i12 = items[11].ToString("X"); i12 = i12.PadLeft(2, '0');
                    retrnsave += (i1 + i2b + i3b + i4b + i5b + i6b + i7b + i8b + i9b + i10 + i11 + i12);
                    if (a <= 38) { retrnsave += "~"; }
                }
                else
                {
                    retrnsave += "00000000000000000000000000000000000000";
                if (a <= 38) { retrnsave += "~"; }
            }
                a++;
            }
            retrnsave = "'" + retrnsave + "'";
            return retrnsave;
        }
SaveEquipments:
Code:
        public string SaveEquipment()
        {


            // define which char    acter is seperating field
            int a = 0;
            string retrnsave = "";

            foreach (int[] items in Equip_items)
            {
                string i1 = "";
                string i2b = "";
                string i3b = "";
                string i4b = "";
                string i5b = "";
                string i6b = "";
                string i7b = "";
                string i8b = "";
                string i9b = "";
                string i10 = "";
                string i11 = "";
                string i12 = "";
                if (items[0] != 0)
                {

                    i1 = items[0].ToString("X"); i1 = i1.PadLeft(6, '0');
                    i2b = items[1].ToString("X"); i2b = i2b.PadLeft(2, '0');
                    i3b = items[2].ToString("X"); i3b = i3b.PadLeft(2, '0');
                    i4b = items[3].ToString("X"); i4b = i4b.PadLeft(2, '0');
                    i5b = items[4].ToString("X"); i5b = i5b.PadLeft(2, '0');
                    i6b = items[5].ToString("X"); i6b = i6b.PadLeft(2, '0');
                    i7b = items[6].ToString("X"); i7b = i7b.PadLeft(2, '0');
                    i8b = items[7].ToString("X"); i8b = i8b.PadLeft(5, '0');
                    i9b = items[8].ToString("X"); i9b = i9b.PadLeft(5, '0');
                    i10 = items[9].ToString("X"); i10 = i10.PadLeft(6, '0');
                    i11 = items[10].ToString("X"); i11 = i11.PadLeft(2, '0');
                    i12 = items[11].ToString("X"); i12 = i12.PadLeft(2, '0');
                    retrnsave += i1 + i2b + i3b + i4b + i5b + i6b + i7b + i8b + i9b + i10 + i11 + i12;
                    if (a <= 7) { retrnsave += "~"; }
                }
                else
                {
                    retrnsave += "00000000000000000000000000000000000000";
                    if (a <=7) { retrnsave += "~"; }
                }
                a++;
            }
            retrnsave = "'" + retrnsave + "'";
            return retrnsave;
        }
Saveskills:
Code:
public string SaveSkills()
        {
            int a = 0;
            string s_skill = "";
            int[] ska = new int[3];
            string sk1 = "";
            string sk2 = "";
            string sk3 = "";
            foreach (DictionaryEntry DE in m_Skills)
            {

                //Console.WriteLine(m_Skills[DE].ToString());
                ska[0] = Convert.ToInt32(((CO_Full_Server.Instances.NewSkill)(DE.Value))._SkillID); sk1 = ska[0].ToString("X"); sk1 = sk1.PadLeft(4, '0');
                ska[1] = Convert.ToInt32(((CO_Full_Server.Instances.NewSkill)(DE.Value))._SkillLVL); sk2 = ska[1].ToString("X"); sk2 = sk2.PadLeft(1, '0');
                ska[2] = Convert.ToInt32(((CO_Full_Server.Instances.NewSkill)(DE.Value))._SkillEXP); sk3 = ska[2].ToString("X"); sk3 = sk3.PadLeft(5, '0');
                a++;
                s_skill += sk1 + sk2 + sk3;
                if (a < m_Skills.Keys.Count)
                    s_skill += "~";

            }
            if (s_skill == "")
                s_skill = "0";
            s_skill = "'" + s_skill + "'";
            return s_skill;
        }
SaveQuests:
Code:
        public string SaveQuests()
        {
            int a = 0;
            string q_qst = "";
            int[] qst1 = new int[2];
            string[] qst = new string[2];
            foreach (DictionaryEntry DE in m_Quests)
            {

                //Console.WriteLine("Hi",DE);
                qst1[0] = Convert.ToInt32(DE.Key);
                qst1[1] = Convert.ToInt32(DE.Value);
                a++;
                q_qst += qst1[0] + "," + qst1[1];
                if (a < m_Quests.Keys.Count)
                    q_qst += "~";

            }
            if (q_qst == "")
                q_qst = "0";
            q_qst = "'" + q_qst + "'";
            return q_qst;
        }
 
Everything looks ok let me get the right thing to you !
Everyone needs to write that if they want to save their character data but i would tell you to use a autosave system more effective !
 
Last edited:
Back