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 } }
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 } }
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 } }
bool IDatabase.TransactionInsert(IInfoProvider2 dbq) { return(TransactionInsert(dbq)); }
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 } }
bool IDatabase.TransactionLoad(IInfoProvider2 dbq, bool continueOnError) { return(TransactionLoad(dbq, continueOnError)); }
bool IDatabase.TransactionRepair(IInfoProvider2 dbq) { return TransactionRepair(dbq); }
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(); } }
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; } }
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; } }
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; } }
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(); } }
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(); } }
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(); } }