public bool Merge(string path)
{
if (!File.Exists(path)) return false;
lock (mergeLock)
{
var obj = path.Deserialize<EnemyData>();
if (obj == null) return false;
this.EnemyData.EnemyDictionary = this.EnemyData.EnemyDictionary.Merge(obj.EnemyDictionary);
this.EnemyData.EnemyFormation = this.EnemyData.EnemyFormation.Merge(obj.EnemyFormation);
this.EnemyData.EnemySlotItems = this.EnemyData.EnemySlotItems.Merge(obj.EnemySlotItems);
this.EnemyData.EnemyUpgraded = this.EnemyData.EnemyUpgraded.Merge(obj.EnemyUpgraded);
this.EnemyData.EnemyParams = this.EnemyData.EnemyParams.Merge(obj.EnemyParams);
this.EnemyData.EnemyLevels = this.EnemyData.EnemyLevels.Merge(obj.EnemyLevels);
this.EnemyData.EnemyHPs = this.EnemyData.EnemyHPs.Merge(obj.EnemyHPs);
this.EnemyData.EnemyNames = this.EnemyData.EnemyNames.Merge(obj.EnemyNames);
this.EnemyData.EnemyEncounterRank = this.EnemyData.EnemyEncounterRank.Merge(obj.EnemyEncounterRank);
this.EnemyData.EnemyRank = this.EnemyData.EnemyRank.Merge(obj.EnemyRank);
this.EnemyData.MapEnemyData = this.EnemyData.MapEnemyData.Merge(obj.MapEnemyData, (v1, v2) => v1.Merge(v2, (h1, h2) => h1.Merge(h2)));
this.EnemyData.MapCellBattleTypes = this.EnemyData.MapCellBattleTypes.Merge(obj.MapCellBattleTypes, (v1, v2) => v1.Merge(v2));
this.EnemyData.MapRoute = this.EnemyData.MapRoute.Merge(obj.MapRoute, (v1, v2) => v1.Merge(v2));
this.EnemyData.MapCellDatas = this.EnemyData.MapCellDatas.Merge(obj.MapCellDatas, (v1, v2) => v1.Merge(v2, x => x.No));
this.RemoveDuplicate();
this.Save();
}
return true;
}