public static bool SavePlayerData(IDbConnection ctx, IDbTransaction txn, bool save, Player player) #endif { if (!player.IsAuthenticated()) return false; //If using a flat based system ensure the MODE is stored string authName = null; if (Mode == CharacterMode.AUTH) { var auth = player.GetAuthenticatedAs(); if (!String.IsNullOrEmpty(auth)) authName = auth; } else if (Mode == CharacterMode.UUID) { if (!String.IsNullOrEmpty(player.ClientUUId)) authName = player.ClientUUId + '@' + player.name; } if (!String.IsNullOrEmpty(authName)) { if (Storage.IsAvailable) { var auth = player.GetAuthenticatedAs(); #if ENTITY_FRAMEWORK_6 int userId = 0; if (Mode == CharacterMode.AUTH) { var user = AuthenticatedUsers.GetUser(auth); if (user == null) { OTA.Logging.ProgramLog.Error.Log("No user found "); return false; } userId = user.Id; } else if (Mode != CharacterMode.UUID) return false; //Sync the character var character = ctx.GetCharacter(Mode, userId, player.ClientUUId); if (null == character) { character = ctx.AddCharacter(userId, player); } else character.UpdateCharacter(userId, player); //Sync items var items = ctx.Items.Where(x => x.CharacterId == character.Id).ToArray(); if (!SaveCharacterItems(ctx, save, player, character.Id, player.inventory, ItemType.Inventory, items)) return false; if (!SaveCharacterItems(ctx, save, player, character.Id, player.armor, ItemType.Armor, items)) return false; if (!SaveCharacterItems(ctx, save, player, character.Id, player.dye, ItemType.Dye, items)) return false; if (!SaveCharacterItems(ctx, save, player, character.Id, player.miscEquips, ItemType.Equipment, items)) return false; if (!SaveCharacterItems(ctx, save, player, character.Id, player.miscDyes, ItemType.MiscDyes, items)) return false; if (!SaveCharacterItem(ctx, save, player, character.Id, ItemType.Trash, player.trashItem, 0, items)) return false; #elif ENTITY_FRAMEWORK_7 #else var character = Tables.CharacterTable.GetCharacter(ctx, txn, Mode, auth, player.ClientUUId); if (character == null) { // if (player.ClearPluginData(Key_NewCharacter)) // { character = Tables.CharacterTable.NewCharacter ( ctx, txn, Mode, auth, player.ClientUUId, player.statLife, player.statLifeMax, player.statMana, player.statManaMax, player.SpawnX, player.SpawnY, player.hair, player.hairDye, player.hideVisual, player.difficulty, player.hairColor, player.skinColor, player.eyeColor, player.shirtColor, player.underShirtColor, player.pantsColor, player.shoeColor, player.anglerQuestsFinished ); // } // else // { // ProgramLog.Error.Log("Failed to save SSC for player: {0}", player.name); // return false; // } } else { character = Tables.CharacterTable.UpdateCharacter ( ctx, txn, Mode, auth, player.ClientUUId, player.statLife, player.statLifeMax, player.statMana, player.statManaMax, player.SpawnX, player.SpawnY, player.hair, player.hairDye, player.hideVisual, player.difficulty, player.hairColor, player.skinColor, player.eyeColor, player.shirtColor, player.underShirtColor, player.pantsColor, player.shoeColor, player.anglerQuestsFinished ); } if (character != null) { if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.inventory, ItemType.Inventory)) return false; if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.armor, ItemType.Armor)) return false; if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.dye, ItemType.Dye)) return false; if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.miscEquips, ItemType.Equipment)) return false; if (!SaveCharacterItems(ctx, txn, save, player, character.Id, player.miscDyes, ItemType.MiscDyes)) return false; if (!SaveCharacterItem(ctx, txn, save, player, character.Id, ItemType.Trash, player.trashItem, 0)) return false; // for (var i = 0; i < player.inventory.Length; i++) // { // var item = player.inventory[i]; // var netId = 0; // var prefix = 0; // var stack = 0; // var favorite = false; // // if (item != null) // { // netId = item.netID; // prefix = item.prefix; // stack = item.stack; // favorite = item.favorited; // } // // var itemId = Tables.ItemTable.GetItem(ItemType.Inventory, i, characterId); // if (itemId > 0) // { // if (!Tables.ItemTable.UpdateItem(ItemType.Inventory, netId, prefix, stack, favorite, i, characterId)) // { // ProgramLog.Error.Log("Failed to save Inventory for player: {0}", player.name); // return false; // } // } // else // { // itemId = Tables.ItemTable.NewItem(ItemType.Inventory, netId, prefix, stack, favorite, i, characterId); // } // } // for (var i = 0; i < player.armor.Length; i++) // { // var item = player.armor[i]; // var netId = 0; // var prefix = 0; // var stack = 0; // var favorite = false; // // if (item != null) // { // netId = item.netID; // prefix = item.prefix; // stack = item.stack; // favorite = item.favorited; // } // // var itemId = Tables.ItemTable.GetItem(ItemType.Armor, i, characterId); // if (itemId > 0) // { // if (!Tables.ItemTable.UpdateItem(ItemType.Armor, netId, prefix, stack, favorite, i, characterId)) // { // ProgramLog.Error.Log("Failed to save Armor for player: {0}", player.name); // return false; // } // } // else // { // itemId = Tables.ItemTable.NewItem(ItemType.Armor, netId, prefix, stack, favorite, i, characterId); // } // } // for (var i = 0; i < player.dye.Length; i++) // { // var item = player.dye[i]; // var netId = 0; // var prefix = 0; // var stack = 0; // var favorite = false; // // if (item != null) // { // netId = item.netID; // prefix = item.prefix; // stack = item.stack; // favorite = item.favorited; // } // // var itemId = Tables.ItemTable.GetItem(ItemType.Dye, i, characterId); // if (itemId > 0) // { // if (!Tables.ItemTable.UpdateItem(ItemType.Dye, netId, prefix, stack, favorite, i, characterId)) // { // ProgramLog.Error.Log("Failed to save Dye for player: {0}", player.name); // return false; // } // } // else // { // itemId = Tables.ItemTable.NewItem(ItemType.Dye, netId, prefix, stack, favorite, i, characterId); // } // } } #endif } else { var dir = Path.Combine(Globals.CharacterDataPath, Mode.ToString()); if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); var file = Path.Combine(dir, authName + ".ssc"); var data = new ServerCharacter(player); // if (data.Buffs != null && data.BuffTime != null) // { // var max = Math.Min(data.Buffs.Length, data.BuffTime.Length); // for (var x = 0; x < max; x++) // { // if (data.Buffs[x] > 0) // { // var time = data.BuffTime[x] * 60; // // ProgramLog.Plugin.Log("Saving buff {0} for {1}/{2}", data.Buffs[x], time, data.BuffTime[x]); // } // } // } var json = Newtonsoft.Json.JsonConvert.SerializeObject(data); System.IO.File.WriteAllText(file, json); return true; } } return false; }