Exemplo n.º 1
0
        bool TransactionLoad(IInfoProvider2 dbq, bool continueOnError)
        {
            MySqlConnection  connection  = null;
            MySqlTransaction transaction = null;

            try
            {
                connection  = ConnectionPool.Request();
                transaction = connection.BeginTransaction();
                bool success = LoadCharacterEx(connection, dbq)                         //Load character information
                               & LoadAdditionsEx(connection, dbq, continueOnError)      //Load addition information
                               & LoadEquipmentEx(connection, dbq, continueOnError)      //Load equipment information
                               & LoadInventoryEx(connection, dbq, continueOnError)      //Load inventory information
                               & LoadStorageEx(connection, dbq, continueOnError)        //Load storage information
                               & LoadJobinformationEx(connection, dbq, continueOnError) //Load job information
                               & LoadWeaponsEx(connection, dbq, continueOnError)        //Load weapon information
                               & LoadZoneEx(connection, dbq, continueOnError)           //Load zone information
                               & LoadQuestEx(connection, dbq, continueOnError)          //Load quest information
                               & LoadSkillsEx(connection, dbq, continueOnError)         //Load normal skills
                               & LoadSpecialSkillsEx(connection, dbq, continueOnError)  //Load special skill information
                               & LoadFriendlistEx(connection, dbq)                      //Load friendlist information
                               & LoadBlacklistEx(connection, dbq);                      //Load blacklist information

                transaction.Commit();
                return(success);
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return(false);
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);
                return(false);
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
Exemplo n.º 2
0
        bool TransactionInsert(IInfoProvider2 dbq)
        {
            MySqlConnection  connection  = null;
            MySqlTransaction transaction = null;

            try
            {
                connection  = ConnectionPool.Request();
                transaction = connection.BeginTransaction();

                bool success = InsertCharacterEx(connection, dbq)
                               & InsertAdditionsEx(connection, dbq)
                               & InsertEquipmentEx(connection, dbq)
                               & InsertInventoryEx(connection, dbq)
                               & InsertStorageEx(connection, dbq)
                               & InsertJobinformationEx(connection, dbq)
                               & InsertWeaponsEx(connection, dbq)
                               & InsertZoneEx(connection, dbq)
                               & InsertQuestEx(connection, dbq)
                               & InsertSpecialSkillsEx(connection, dbq);

                transaction.Commit();
                return(success);
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return(false);
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);
                return(false);
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
Exemplo n.º 3
0
        bool TransactionSave(IInfoProvider2 dbq)
        {
            MySqlConnection  connection  = null;
            MySqlTransaction transaction = null;

            try
            {
                connection  = ConnectionPool.Request();
                transaction = connection.BeginTransaction();
                SaveCharacterEx(connection, dbq);       //save character information
                SaveAdditionsEx(connection, dbq);       //save addition information
                SaveEquipmentEx(connection, dbq);       //save equipment information
                SaveInventoryEx(connection, dbq);       //save inventory information
                SaveStorageEx(connection, dbq);         //save storage informatiom
                SaveJobinformationEx(connection, dbq);  //Save job information
                SaveWeaponsEx(connection, dbq);         //Save weapon information
                SaveZoneEx(connection, dbq);            //Save zone information
                SaveQuestEx(connection, dbq);           //Save quest information
                SaveSpecialSkillsEx(connection, dbq);   //Save special skill information

                transaction.Commit();
                return(true);
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction save failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return(false);
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction save failed {0}", ex);
                return(false);
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
Exemplo n.º 4
0
 bool IDatabase.TransactionInsert(IInfoProvider2 dbq)
 {
     return(TransactionInsert(dbq));
 }
Exemplo n.º 5
0
        bool TransactionSave(IInfoProvider2 dbq)
        {
            MySqlConnection connection = null;
            MySqlTransaction transaction = null;

            try
            {
                connection = ConnectionPool.Request();
                transaction = connection.BeginTransaction();
                SaveCharacterEx(connection, dbq);       //save character information
                SaveAdditionsEx(connection, dbq);       //save addition information
                SaveEquipmentEx(connection, dbq);       //save equipment information
                SaveInventoryEx(connection, dbq);       //save inventory information
                SaveStorageEx(connection, dbq);         //save storage informatiom
                SaveJobinformationEx(connection, dbq);  //Save job information
                SaveWeaponsEx(connection, dbq);         //Save weapon information
                SaveZoneEx(connection, dbq);            //Save zone information
                SaveQuestEx(connection, dbq);           //Save quest information
                SaveSpecialSkillsEx(connection, dbq);   //Save special skill information

                transaction.Commit();
                return true;
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction save failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return false;
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction save failed {0}", ex);
                return false;
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
Exemplo n.º 6
0
 bool IDatabase.TransactionLoad(IInfoProvider2 dbq, bool continueOnError)
 {
     return(TransactionLoad(dbq, continueOnError));
 }
Exemplo n.º 7
0
 bool IDatabase.TransactionRepair(IInfoProvider2 dbq)
 {
     return TransactionRepair(dbq);
 }
Exemplo n.º 8
0
        bool TransactionLoad(IInfoProvider2 dbq, bool continueOnError)
        {
            MySqlConnection connection = null;
            MySqlTransaction transaction = null;

            try
            {
                connection = ConnectionPool.Request();
                transaction = connection.BeginTransaction();
                bool success = LoadCharacterEx(connection, dbq)                       //Load character information
                             & LoadAdditionsEx(connection, dbq, continueOnError)      //Load addition information
                             & LoadEquipmentEx(connection, dbq, continueOnError)      //Load equipment information
                             & LoadInventoryEx(connection, dbq, continueOnError)      //Load inventory information
                             & LoadStorageEx(connection, dbq, continueOnError)        //Load storage information
                             & LoadJobinformationEx(connection, dbq, continueOnError) //Load job information
                             & LoadWeaponsEx(connection, dbq, continueOnError)        //Load weapon information
                             & LoadZoneEx(connection, dbq, continueOnError)           //Load zone information
                             & LoadQuestEx(connection, dbq, continueOnError)          //Load quest information
                             & LoadSkillsEx(connection, dbq, continueOnError)         //Load normal skills [DanielArt
                             & LoadSpecialSkillsEx(connection, dbq, continueOnError)  //Load special skill information
                             & LoadSkillsEx(connection, dbq, continueOnError)  //Load learned skill information
                             & LoadFriendlistEx(connection, dbq)                      //Load friendlist information
                             & LoadBlacklistEx(connection, dbq);                      //Load blacklist information

                transaction.Commit();
                return success;
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return false;
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);
                return false;
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
        //Third generation method black & friendlist information
        bool LoadFriendlistEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDatabaseFriendList collection = dbq.createDatabaseFriendList();
            MySqlDataReader reader = null;
            MySqlCommand command = new MySqlCommand(_query_23, connection);

            try
            {
                command.Parameters.AddWithValue("CharId", collection.CharacterId);
                collection.friends.Clear();

                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    collection.friends.Add(reader.GetString(0));
                }

                return true;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if( reader != null ) reader.Close();
            }
        }
Exemplo n.º 10
0
 bool IDatabase.TransactionInsert(IInfoProvider2 dbq)
 {
     return TransactionInsert(dbq);
 }
        bool InsertCharacterEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataCharacter character = dbq.createDataCharacter();
            MySqlCommand command;

            try
            {
                //LOAD ALL SKILL INFORMATION

                if (character.CharacterId > 0)
                {
                    command = new MySqlCommand(_query_84, connection);
                    command.Parameters.AddWithValue("CharId", character.CharacterId);
                }
                else
                {
                    command = new MySqlCommand(_query_85, connection);
                }

                command.Parameters.AddWithValue("Cexp", character.CharacterExperience);
                command.Parameters.AddWithValue("Jexp", character.JobExperience);
                command.Parameters.AddWithValue("Job", character.Job);
                command.Parameters.AddWithValue("Map", character.Position.map);
                command.Parameters.AddWithValue("HP", character.HP);
                command.Parameters.AddWithValue("SP", character.SP);
                command.Parameters.AddWithValue("LP", character.LP);
                command.Parameters.AddWithValue("LC", character.Oxygen);
                command.Parameters.AddWithValue("Posx", character.Position.x);
                command.Parameters.AddWithValue("Posy", character.Position.y);
                command.Parameters.AddWithValue("Posz", character.Position.z);
                command.Parameters.AddWithValue("Savex", character.SavePosition.x);
                command.Parameters.AddWithValue("Savey", character.SavePosition.y);
                command.Parameters.AddWithValue("Savez", character.SavePosition.z);
                command.Parameters.AddWithValue("Savemap", character.SavePosition.map);
                command.Parameters.AddWithValue("Str", character.Strength);
                command.Parameters.AddWithValue("Dex", character.Dexterity);
                command.Parameters.AddWithValue("Int", character.Intellect);
                command.Parameters.AddWithValue("Con", character.Concentration);
                command.Parameters.AddWithValue("Luc", character.Luck);
                command.Parameters.AddWithValue("Pending", character.Remaining);
                command.Parameters.AddWithValue("Rufi", character.Zeny);
                command.Parameters.AddWithValue("CharName", character.CharacterName);
                command.Parameters.AddWithValue("UppercasedCharName", character.CharacterName);
                command.Parameters.AddWithValue("CharFace", character.CharacterFace);
                command.Parameters.AddWithValue("UserId", dbq.OwnerId);

                if (character.CharacterId > 0)
                {
                    return command.ExecuteNonQuery() > 0;
                }
                else
                {
                    bool result = command.ExecuteNonQuery() > 0;
                    character.CharacterId = (uint)command.LastInsertedId;
                    return result && character.CharacterId > 0;
                }
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        bool InsertEquipmentEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataEquipmentCollection equipmentCollection = dbq.createEquipmentCollection();

            int offset = 0;
            byte[] buffer = new byte[1088];
            for (int i = 0; i < 16; i++)
            {
                Rag2Item item = equipmentCollection.Equipment[i];
                if (item != null)
                {
                    Rag2Item.Serialize(item, buffer, offset);
                    buffer[offset + 67] = item.active;
                }

                offset += 68;
            }

            try
            {
                MySqlCommand command = new MySqlCommand(_query_16, connection);
                command.Parameters.AddWithValue("CharId", equipmentCollection.CharacterId);
                command.Parameters.AddWithValue("Equipment", buffer);
                return command.ExecuteNonQuery() > 0;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        bool ExistsZoneEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataCharacter character = dbq.createDataCharacter();

            try
            {
                MySqlCommand command = new MySqlCommand(_query_83, connection);
                command.Parameters.AddWithValue("CharId", character.CharacterId);
                return Convert.ToInt32(command.ExecuteScalar()) > 0;
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        bool InsertAdditionsEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataAdditionCollection additionCollection = dbq.createAdditionCollection();
            MySqlCommand command = new MySqlCommand(_query_05, connection);
            byte[] buffer = new byte[2044];
            int items = 0;

            try
            {

                int offset = 4;
                foreach (AdditionState current in additionCollection.Additions)
                {
                    uint duration = (current.CanExpire) ? current.Lifetime : 0;
                    uint addition = current.Addition;

                    Array.Copy(BitConverter.GetBytes(addition), 0, buffer, offset + 0, 4);
                    Array.Copy(BitConverter.GetBytes(duration), 0, buffer, offset + 4, 4);
                    items++;
                    offset += 8;
                }
                Array.Copy(BitConverter.GetBytes(items), 0, buffer, 0, 4);

                command.Parameters.AddWithValue("CharId", additionCollection.CharacterId);
                command.Parameters.AddWithValue("Additions", buffer);
                return command.ExecuteNonQuery() > 0;

            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        public bool SaveWeaponsEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            //HELPER VARIABLES
            IDataWeaponCollection weapons = dbq.createWeaponCollection();
            MySqlCommand command = new MySqlCommand(_query_70, connection);

            try
            {
                //SERIALIZE ALL ITEMS
                byte[] buffer = new byte[375];
                for (int i = 0; i < weapons.UnlockedWeaponSlots; i++)
                {
                    Weapon current = weapons[i];
                    if (current == null) continue;
                    Weapon.Serialize(current, buffer, i * 75);
                }

                //WRITE THE NUMBER OF ITEMS
                command.Parameters.AddWithValue("CharId", weapons.CharacterId);
                command.Parameters.AddWithValue("Weaponary", buffer);
                command.Parameters.AddWithValue("UnlockedWeaponCount", weapons.UnlockedWeaponSlots);
                command.Parameters.AddWithValue("PIndex", weapons.PrimaryWeaponIndex);
                command.Parameters.AddWithValue("SIndex", weapons.SeconairyWeaponIndex);
                command.Parameters.AddWithValue("AIndex", weapons.ActiveWeaponIndex);

                return command.ExecuteNonQuery() > 0;
            }
            catch (MySqlException e)
            {
                Trace.WriteLine(e.Message, "Database");
                return false;
            }
        }
        //Third generation methods weapon
        public bool LoadWeaponsEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDataWeaponCollection weapons = dbq.createWeaponCollection();
            MySqlCommand command = new MySqlCommand(_query_69, connection);
            MySqlDataReader reader = null;
            command.Parameters.AddWithValue("CharId", weapons.CharacterId);

            try
            {
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    if (reader.IsDBNull(0)) continue;
                    byte[] buffer2 = new byte[375];
                    reader.GetBytes(1, 0, buffer2, 0, 375);
                    weapons.UnlockedWeaponSlots = reader.GetByte(2);
                    weapons.PrimaryWeaponIndex = reader.GetByte(3);
                    weapons.SeconairyWeaponIndex = reader.GetByte(4);
                    weapons.ActiveWeaponIndex = reader.GetByte(5);

                    for (int i = 0; i < 5; i++)
                    {
                        Weapon weapon = Weapon.Deserialize(buffer2, i * 75);
                        weapons[i] = weapon;
                    }

                    return true;
                }

                __dbtracelog.WriteError("Database", "player weapon-data of player with id {0} is missing", weapons.CharacterId);
                return continueOnError;
            }
            catch (MySqlException e)
            {
                Trace.WriteLine(e.Message, "Database");
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        bool SaveCharacterEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataCharacter character = dbq.createDataCharacter();

            try
            {
                //LOAD ALL SKILL INFORMATION
                MySqlCommand command = new MySqlCommand(_query_13, connection);
                command.Parameters.AddWithValue("CharId", character.CharacterId);
                command.Parameters.AddWithValue("Cexp", character.CharacterExperience);
                command.Parameters.AddWithValue("Jexp", character.JobExperience);
                command.Parameters.AddWithValue("Job", character.Job);
                command.Parameters.AddWithValue("Map", character.Position.map);
                command.Parameters.AddWithValue("HP", character.HP);
                command.Parameters.AddWithValue("SP", character.SP);
                command.Parameters.AddWithValue("LP", character.LP);
                command.Parameters.AddWithValue("LC", character.Oxygen);
                command.Parameters.AddWithValue("Posx", character.Position.x);
                command.Parameters.AddWithValue("Posy", character.Position.y);
                command.Parameters.AddWithValue("Posz", character.Position.z);
                command.Parameters.AddWithValue("Savex", character.SavePosition.x);
                command.Parameters.AddWithValue("Savey", character.SavePosition.y);
                command.Parameters.AddWithValue("Savez", character.SavePosition.z);
                command.Parameters.AddWithValue("Savemap", character.SavePosition.map);
                command.Parameters.AddWithValue("Str", character.Strength);
                command.Parameters.AddWithValue("Dex", character.Dexterity);
                command.Parameters.AddWithValue("Int", character.Intellect);
                command.Parameters.AddWithValue("Con", character.Concentration);
                command.Parameters.AddWithValue("Luc", character.Luck);
                command.Parameters.AddWithValue("Pending", character.Remaining);
                command.Parameters.AddWithValue("Rufi", character.Zeny);
                return command.ExecuteNonQuery() > 0;
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        //Third generation methods zone information
        bool LoadZoneEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDataZoneInformationCollection zoneInformation = dbq.createDataZoneCollection();
            MySqlCommand command = new MySqlCommand(_query_71, connection);
            MySqlDataReader reader = null;
            command.Parameters.AddWithValue("CharId", zoneInformation.CharacterId);

            try
            {
                reader = command.ExecuteReader(CommandBehavior.SingleResult);
                while (reader.Read())
                {
                    if (reader.IsDBNull(0) == false)
                        reader.GetBytes(0, 0, zoneInformation.ZoneInformation, 0, 255);

                    return true;
                }

                __dbtracelog.WriteError("Database", "player zone-data of player with id {0} is missing", zoneInformation.CharacterId);
                return continueOnError;
            }
            catch (Exception e)
            {
                Trace.Write(e.ToString(), "database");
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        bool InsertJobinformationEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            //HELPER VARIABLES
            IDataJobinformationCollection jobInfo = dbq.createJobCollection();
            MySqlCommand command = new MySqlCommand(_query_34, connection);

            try
            {
                command.Parameters.AddWithValue("CharId", jobInfo.CharacterId);
                command.Parameters.AddWithValue("JobInformation", jobInfo.Joblevels);
                return command.ExecuteNonQuery() > 0;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        //Third generation method equipment
        bool LoadEquipmentEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDataEquipmentCollection equipmentCollection = dbq.createEquipmentCollection();
            MySqlCommand command = new MySqlCommand(_query_14, connection);
            MySqlDataReader reader = null;
            command.Parameters.AddWithValue("CharId", equipmentCollection.CharacterId);

            try
            {
                reader = command.ExecuteReader(CommandBehavior.SequentialAccess);
                while (reader.Read())
                {
                    byte[] buffer = new byte[68];
                    int offset = 0;
                    for (int i = 0; i < 16; i++)
                    {
                        Rag2Item item;
                        reader.GetBytes(0, offset, buffer, 0, 68);
                        if (Rag2Item.Deserialize(out item, buffer, 0))
                        {
                            item.active = buffer[67];
                            equipmentCollection.Equipment[i] = item;
                        }

                        offset += 68;
                    }

                    return true;
                }

                return continueOnError;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        bool InsertQuestEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            //Save to the stream
            IDatabaseQuestStream collection = dbq.createDatabaseQuestStream();
            MySqlCommand command;
            try
            {
                byte[] value = collection.questCollection;
                if (value != null)
                {
                    command = new MySqlCommand(_query_87, connection);
                    command.Parameters.AddWithValue("CharId", collection.CharacterId);
                    command.Parameters.AddWithValue("State", value);
                    return command.ExecuteNonQuery() > 0;
                }
                else
                {
                    command = new MySqlCommand(_query_56, connection);
                    command.Parameters.AddWithValue("CharId", collection.CharacterId);
                    return command.ExecuteNonQuery() > 0;

                }
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
        //Third generation methods inventory
        bool LoadInventoryEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDataSortableItemCollection sortableItemCollection = dbq.createInventoryCollection();
            MySqlCommand command = new MySqlCommand(_query_29, connection);
            MySqlDataReader reader = null;
            command.Parameters.AddWithValue("CharId", sortableItemCollection.CharacterId);

            try
            {
                reader = command.ExecuteReader();
                while (reader.Read())
                {

                    sortableItemCollection.Collection.Capacity = reader.GetByte(0);
                    if (reader.IsDBNull(1)) continue;

                    byte[] buffer2 = new byte[4];
                    reader.GetBytes(1, 0, buffer2, 0, 4);
                    uint count = BitConverter.ToUInt32(buffer2, 0);

                    int offset = 4;
                    for (int i = 0; i < count; i++)
                    {
                        //BUFFER
                        byte[] buffer = new byte[67];
                        reader.GetBytes(1, offset, buffer, 0, 67);

                        Rag2Item item;
                        if (Rag2Item.Deserialize(out item, buffer, 0))
                            sortableItemCollection.Collection.Add(item);
                        offset += 67;
                    }

                    return true;
                }

                __dbtracelog.WriteError("Database", "player inventory-data of player with id {0} is missing", sortableItemCollection.CharacterId);
                return continueOnError;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        bool InsertSpecialSkillsEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDataSpecialSkillCollection collection = dbq.createDatabaseSpecialSkillCollection();
            try
            {
                //LOAD ALL SKILL INFORMATION
                byte[] buffer = new byte[64];
                for (int i = 0; i < 16; i++)
                {
                    Skill skill = collection.specialSkillCollection[i];
                    if (skill != null)
                        Array.Copy(BitConverter.GetBytes(skill.info.skillid), 0, buffer, i * 4, 4);
                }

                MySqlCommand command = new MySqlCommand(_query_88, connection);
                command.Parameters.AddWithValue("CharId", collection.CharacterId);
                command.Parameters.AddWithValue("Skills", buffer);
                return command.ExecuteNonQuery() > 0;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
Exemplo n.º 24
0
 bool IDatabase.TransactionLoad(IInfoProvider2 dbq, bool continueOnError)
 {
     return TransactionLoad(dbq, continueOnError);
 }
        bool InsertStorageEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            //HELPER VARIABLES
            IDataSortableItemCollection sortableItemCollection = dbq.createStorageCollection();
            MySqlCommand command = new MySqlCommand(_query_86, connection);
            byte[] buffer = new byte[4];
            int items = 0;

            try
            {
                //SERIALIZE ALL ITEMS
                foreach (Rag2Item item in sortableItemCollection.Collection)
                {
                    if (item == null) continue;
                    int offset = buffer.Length;
                    Array.Resize<byte>(ref buffer, offset + 67);
                    Rag2Item.Serialize(item, buffer, offset);
                    items++;
                }

                //WRITE THE NUMBER OF ITEMS
                Array.Copy(BitConverter.GetBytes(items), 0, buffer, 0, 4);
                command.Parameters.AddWithValue("CharId", sortableItemCollection.CharacterId);
                command.Parameters.AddWithValue("ContainerMaxStorage", sortableItemCollection.Collection.Capacity);
                command.Parameters.AddWithValue("Container", buffer);
                return command.ExecuteNonQuery() > 0;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
        }
Exemplo n.º 26
0
 bool IDatabase.TransactionSave(IInfoProvider2 dbq)
 {
     return TransactionSave(dbq);
 }
        bool InsertZoneEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            //HELPER VARIABLES
            IDataZoneInformationCollection zoneInformation = dbq.createDataZoneCollection();
            MySqlCommand command = new MySqlCommand(_query_73, connection);

            try
            {
                command.Parameters.AddWithValue("CharId", zoneInformation.CharacterId);
                command.Parameters.AddWithValue("ZoneState", zoneInformation.ZoneInformation);
                return command.ExecuteNonQuery() > 0;
            }
            catch (Exception e)
            {
                Trace.Write(e.ToString(), "database");
                return false;
            }
        }
Exemplo n.º 28
0
        bool TransactionRepair(IInfoProvider2 dbq)
        {
            MySqlConnection connection = null;
            MySqlTransaction transaction = null;

            try
            {
                connection = ConnectionPool.Request();
                transaction = connection.BeginTransaction();

                if (!ExistsCharacterEx(connection, dbq)) InsertCharacterEx(connection, dbq);
                if (!ExistsAdditionsEx(connection, dbq)) InsertAdditionsEx(connection, dbq);
                if (!ExistsEquipmentEx(connection, dbq)) InsertEquipmentEx(connection, dbq);
                if (!ExistsInventoryEx(connection, dbq)) InsertInventoryEx(connection, dbq);
                if (!ExistsStorageEx(connection, dbq)) InsertStorageEx(connection, dbq);
                if (!ExistsJobinformationEx(connection, dbq)) InsertJobinformationEx(connection, dbq);
                if (!ExistsWeaponsEx(connection, dbq)) InsertWeaponsEx(connection, dbq);
                if (!ExistsZoneEx(connection, dbq)) InsertZoneEx(connection, dbq);
                if (!ExistsQuestEx(connection, dbq)) InsertQuestEx(connection, dbq);
                if (!ExistsSpecialSkillsEx(connection, dbq)) InsertSpecialSkillsEx(connection, dbq);

                transaction.Commit();
                return true;
            }
            catch (MySqlException ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);

                try
                {
                    transaction.Rollback();
                }
                catch (MySqlException)
                {
                    __dbtracelog.WriteError("database", "Transaction failed to roll back");
                }

                return false;
            }
            catch (Exception ex)
            {
                __dbtracelog.WriteError("database", "Transaction load failed {0}", ex);
                return false;
            }
            finally
            {
                ConnectionPool.Release(connection);     //Always release connection
            }
        }
        //Third generation method special skill information
        bool LoadSkillsEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            MySqlDataReader reader = null;
            IDataSkillCollection collection = dbq.createSkillCollection();

            try
            {
                //LOAD ALL SKILL INFORMATION
                MySqlCommand command = new MySqlCommand(_query_60, connection);
                command.Parameters.AddWithValue("CharId", collection.CharacterId);
                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Skill skill = new Skill();
                    skill.Id = reader.GetUInt32(0);
                    skill.Experience = reader.GetUInt32(1);
                    if (Singleton.SpellManager.TryGetSpell(skill.Id, out skill.info) && skill.info.requiredJobs[collection.Job - 1] == 1 )
                        collection.Skills.Add(skill);

                        return true;
                }

                __dbtracelog.WriteError("Database", "player skill-data of player with id {0} is missing", collection.CharacterId);
                return continueOnError;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                //ALWAYS CLOSE THE READ RESULT
                if (reader != null) reader.Close();
            }
        }
Exemplo n.º 30
0
 bool IDatabase.TransactionSave(IInfoProvider2 dbq)
 {
     return(TransactionSave(dbq));
 }
        bool LoadQuestEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDatabaseQuestStream collection = dbq.createDatabaseQuestStream();
            MySqlCommand command = new MySqlCommand();
            command.Connection = connection;
            command.CommandText = _query_59;
            command.Parameters.AddWithValue("CharId", collection.CharacterId);
            MySqlDataReader mreader = null;

            try
            {
                mreader = command.ExecuteReader(); // argument CommandBehavior.SingleRow removed (Darkin)
                while (mreader.Read())
                {
                    if (!mreader.IsDBNull(0))
                    {
                        collection.questCollection = (byte[])mreader.GetValue(0);
                        return true;
                    }

                    return true;
                }

                __dbtracelog.WriteError("Database", "player quest-data of player with id {0} is missing", collection.CharacterId);
                return continueOnError;
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (mreader != null) mreader.Close();
            }
        }
Exemplo n.º 32
0
 bool IDatabase.TransactionRepair(IInfoProvider2 dbq)
 {
     return(TransactionRepair(dbq));
 }
        //Third generation methods character
        bool LoadCharacterEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            MySqlDataReader reader = null;
            IDataCharacter character = dbq.createDataCharacter();

            try
            {
                MySqlCommand command = new MySqlCommand(_query_12, connection);
                command.Parameters.AddWithValue("CharId", character.CharacterId);
                reader = command.ExecuteReader();

                while (reader.Read())
                {

                    WorldCoordinate position = new WorldCoordinate();
                    position.coords = new Point(reader.GetFloat(13), reader.GetFloat(14), reader.GetFloat(15));
                    position.map = reader.GetByte(7);

                    WorldCoordinate savePosition = new WorldCoordinate();
                    savePosition.coords = new Point(reader.GetFloat(16), reader.GetFloat(17), reader.GetFloat(18));
                    savePosition.map = reader.GetByte(19);

                    character.CharacterName = reader.GetString(1);
                    reader.GetBytes(2, 0, character.CharacterFace, 0, 11);
                    character.CharacterExperience = reader.GetUInt32(4);
                    character.JobExperience = reader.GetUInt32(5);
                    character.Job = reader.GetByte(6);
                    character.HP = reader.GetUInt16(9);
                    character.SP = reader.GetUInt16(10);
                    character.LP = reader.GetByte(11);
                    character.Oxygen = reader.GetByte(12);
                    character.Position = position;
                    character.SavePosition = savePosition;
                    character.Strength = reader.GetByte(20);
                    character.Dexterity = reader.GetByte(21);
                    character.Intellect = reader.GetByte(22);
                    character.Concentration = reader.GetByte(23);
                    character.Luck = reader.GetByte(24);
                    character.Remaining = reader.GetByte(25);
                    character.Zeny = reader.GetUInt32(26);

                    return true;
                }

                return false;
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("database", e.Message);
                return false;
            }
            finally
            {
                //ALWAYS CLOSE THE READ RESULT
                if (reader != null) reader.Close();
            }
        }
        //Third generation methods addition
        bool LoadAdditionsEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            MySqlCommand command = new MySqlCommand(_query_03, connection);
            IDataAdditionCollection additionCollection = dbq.createAdditionCollection();
            command.Parameters.AddWithValue("CharId", additionCollection.CharacterId);
            MySqlDataReader reader = null;

            try
            {

                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    if (reader.IsDBNull(1) == true) return true;
                    byte[] buffer = new byte[8];
                    reader.GetBytes(1, 0, buffer, 0, 4);
                    uint count = BitConverter.ToUInt32(buffer, 0);

                    for (int i = 0; i < count; i++)
                    {
                        reader.GetBytes(1, 4 + (8 * i), buffer, 0, 8);
                        uint addition = BitConverter.ToUInt32(buffer, 0);
                        uint duration = BitConverter.ToUInt32(buffer, 4);
                        additionCollection.Create(addition, duration);
                    }

                    return true;
                }

                __dbtracelog.WriteError("Database", "player addition-data of player with id {0} is missing", additionCollection.CharacterId);
                return continueOnError;
            }
            catch (MySqlException e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        bool LoadSpecialSkillsEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            MySqlDataReader reader = null;
            IDataSpecialSkillCollection collection = dbq.createDatabaseSpecialSkillCollection();

            try
            {
                //LOAD ALL SKILL INFORMATION
                MySqlCommand command = new MySqlCommand(_query_67, connection);
                command.Parameters.AddWithValue("CharId", collection.CharacterId);
                reader = command.ExecuteReader(CommandBehavior.SequentialAccess);

                while (reader.Read())
                {
                    byte[] buffer = new byte[64];
                    if (reader.IsDBNull(0) == false) reader.GetBytes(0, 0, buffer, 0, 64);
                    for (int i = 0; i < 16; i++)
                    {
                        uint skillid = BitConverter.ToUInt32(buffer, i * 4);
                        Skill skill = new Skill();
                        skill.Id = skillid;
                        if (Singleton.SpellManager.spells.TryGetValue(skillid, out skill.info))
                            collection.specialSkillCollection[i] = skill;
                    }

                    return true;
                }

                __dbtracelog.WriteError("Database", "player specialskill-data of player with id {0} is missing", collection.CharacterId);
                return continueOnError;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                //ALWAYS CLOSE THE READ RESULT
                if (reader != null) reader.Close();
            }
        }
        bool LoadBlacklistEx(MySqlConnection connection, IInfoProvider2 dbq)
        {
            IDatabaseBlacklist collection = dbq.createDatabaseBlacklist();
            MySqlCommand command = new MySqlCommand(_query_24, connection);
            MySqlDataReader reader = null;

            try
            {
                command.Parameters.AddWithValue("CharId", collection.CharacterId);
                collection.blacklist.Clear();

                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    collection.blacklist.Add(
                        new KeyValuePair<string, byte>
                        (
                            reader.GetString(0),    //ADD CHARACTER NAME
                            reader.GetByte(1)       //ADD REASON
                        )
                    );
                }

                return true;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }
        //Third generation methods jobs
        bool LoadJobinformationEx(MySqlConnection connection, IInfoProvider2 dbq, bool continueOnError)
        {
            IDataJobinformationCollection jobInfo = dbq.createJobCollection();
            MySqlCommand command = new MySqlCommand(_query_32, connection);
            MySqlDataReader reader = null;
            command.Parameters.AddWithValue("CharId", jobInfo.CharacterId);

            try
            {
                reader = command.ExecuteReader(CommandBehavior.SingleResult);
                while (reader.Read())
                {
                    if (reader.IsDBNull(0) == false)
                        reader.GetBytes(0, 0, jobInfo.Joblevels, 0, 15);
                    else
                        for (int i = 0; i < 15; i++)
                            jobInfo.Joblevels[i] = 1;

                    return true;
                }

                __dbtracelog.WriteError("Database", "player job-data of player with id {0} is missing", jobInfo.CharacterId);
                return continueOnError;
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }