diff --git a/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Services/CombatService.cs b/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Services/CombatService.cs index 9f42158..ec7fdf7 100644 --- a/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Services/CombatService.cs +++ b/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Services/CombatService.cs @@ -175,7 +175,8 @@ namespace ShadowedRealms.API.Services MarchDurationSeconds = (int)defenderMarchTime.TotalSeconds }; - var combatLogId = await _combatLogRepository.CreateAsync(combatLog); + var createdCombatLog = await _combatLogRepository.AddAsync(combatLog, kingdomId); + var combatLogId = createdCombatLog.Id; // Set up battle parameters var battleSetup = new Dictionary @@ -613,7 +614,7 @@ namespace ShadowedRealms.API.Services // Log battle to combat log repository var combatLog = CreateCombatLogFromBattle(result, kingdomId); - await _combatLogRepository.CreateAsync(combatLog); + var createdCombatLog = await _combatLogRepository.AddAsync(combatLog, kingdomId); _logger.LogInformation("Battle resolved: {Victor} victory, Duration: {Duration} minutes", victor, result["BattleDuration"]); @@ -1161,8 +1162,8 @@ namespace ShadowedRealms.API.Services var spendingAnalysis = new Dictionary { - ["AttackerSpending"] = attackerSpending["TotalSpent"], - ["DefenderSpending"] = defenderSpending["TotalSpent"], + ["AttackerSpending"] = attackerSpending.GetValueOrDefault("TotalSpent", 0m), + ["DefenderSpending"] = defenderSpending.GetValueOrDefault("TotalSpent", 0m), ["SpendingRatio"] = (decimal)attackerSpending["TotalSpent"] / Math.Max((decimal)defenderSpending["TotalSpent"], 1m) }; @@ -1170,8 +1171,9 @@ namespace ShadowedRealms.API.Services // Analyze battle outcome vs spending var victor = (string)battleResult["Victor"]; - var powerRatio = (double)battleResult["AttackerStats"]["TotalPower"] / - (double)battleResult["DefenderStats"]["TotalPower"]; + var attackerStats = (Dictionary)battleResult["AttackerStats"]; + var defenderStats = (Dictionary)battleResult["DefenderStats"]; + var powerRatio = (double)attackerStats["TotalPower"] / (double)defenderStats["TotalPower"]; var spendingRatio = (double)spendingAnalysis["SpendingRatio"]; var expectedOutcomeBySpending = spendingRatio > 1.5 ? "Attacker" : @@ -1762,7 +1764,7 @@ namespace ShadowedRealms.API.Services return (true, new List()); } - private Dictionary CalculateAllianceMarchBonuses(Alliance.Alliance alliance) + private Dictionary CalculateAllianceMarchBonuses(ShadowedRealms.Core.Models.Alliance.Alliance alliance) { return new Dictionary { ["MarchSpeed"] = 10.0 }; } @@ -1880,7 +1882,15 @@ namespace ShadowedRealms.API.Services private List> IdentifyKeyBattleMoments(CombatLog log) => new(); private Dictionary AnalyzeBattleTactics(CombatLog log) => new(); private List GenerateLessonsLearned(CombatLog log) => new() { "Field interception provided tactical advantage" }; - private Dictionary CalculateCoordinationBonuses(Alliance.Alliance alliance, Dictionary operation) => new(); + private Dictionary CalculateCoordinationBonuses(ShadowedRealms.Core.Models.Alliance.Alliance alliance, Dictionary operation) + { + return new Dictionary + { + ["AllianceCoordination"] = 0.1, // 10% coordination bonus + ["MemberCount"] = alliance.MemberCount, + ["OperationType"] = operation.GetValueOrDefault("OperationType", "Unknown") + }; + } // Event management methods private async Task>> GetPlayerActiveMarches(int playerId, int kingdomId) => new();