Skip to content

Commit

Permalink
Keep compatible with Bannerlord e1.9.0
Browse files Browse the repository at this point in the history
  • Loading branch information
LiZhenhuan1019 committed Oct 7, 2022
1 parent 3e997e7 commit d2672f1
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 105 deletions.
4 changes: 2 additions & 2 deletions .github/resources/config.env
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
GAME_VERSION=e1.8.0
GAME_VERSION=e1.9.0
GAME_BRANCH=beta
MOD_VERSION=v3.0.3
MOD_VERSION=v3.0.4
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<Module>
<Name value="EnhancedBattleTest"/>
<Id value="EnhancedBattleTest"/>
<Version value="v3.0.3"/>
<Version value="v3.0.4"/>
<SingleplayerModule value="true"/>
<MultiplayerModule value="false"/>
<DependedModules>
<DependedModule Id="Native" DependentVersion="e1.8.0" />
<DependedModule Id="SandBoxCore" DependentVersion="e1.8.0" />
<DependedModule Id="Sandbox" DependentVersion="e1.8.0" />
<DependedModule Id="CustomBattle" DependentVersion="e1.8.0"/>
<DependedModule Id="StoryMode" DependentVersion="e1.8.0" />
<DependedModule Id="Native" DependentVersion="e1.9.0" />
<DependedModule Id="SandBoxCore" DependentVersion="e1.9.0" />
<DependedModule Id="Sandbox" DependentVersion="e1.9.0" />
<DependedModule Id="CustomBattle" DependentVersion="e1.9.0"/>
<DependedModule Id="StoryMode" DependentVersion="e1.9.0" />
</DependedModules>
<SubModules>
<SubModule>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public override Agent SpawnTroop(BattleSideEnum side, bool hasFormation, bool sp
MPCharacter.IsHero, Seed);
agentBuildData.Equipment(equipment);
agentBuildData.IsFemale(MPCharacter.IsFemale);
if (!MPCharacter.IsPlayer)
//if (!MPCharacter.IsPlayer)
//agentBuildData.IsReinforcement(isReinforcement).SpawnOnInitialPoint(enforceSpawningOnInitialPoint);
if (initialPosition.HasValue && initialDirection.HasValue)
{
Expand Down Expand Up @@ -82,16 +82,16 @@ public override Agent SpawnTroop(BattleSideEnum side, bool hasFormation, bool sp
agent.SetWatchState(Agent.WatchState.Alarmed);
if (wieldInitialWeapons)
agent.WieldInitialWeapons();
if (!string.IsNullOrEmpty(specialActionSet))
{
AnimationSystemData animationSystemData =
agentBuildData.AgentMonster.FillAnimationSystemData(MBGlobals.GetActionSet(specialActionSet),
agent.Character.GetStepSize(), false);
AgentVisualsNativeData agentVisualsNativeData =
agentBuildData.AgentMonster.FillAgentVisualsNativeData();
agentBuildData.AgentMonster.FillAgentVisualsNativeData();
agent.SetActionSet(ref agentVisualsNativeData, ref animationSystemData);
}
//if (!string.IsNullOrEmpty(specialActionSet))
//{
// AnimationSystemData animationSystemData =
// agentBuildData.AgentMonster.FillAnimationSystemData(MBGlobals.GetActionSet(specialActionSet),
// agent.Character.GetStepSize(), false);
// AgentVisualsNativeData agentVisualsNativeData =
// agentBuildData.AgentMonster.FillAgentVisualsNativeData();
// agentBuildData.AgentMonster.FillAgentVisualsNativeData();
// agent.SetActionSet(ref agentVisualsNativeData, ref animationSystemData);
//}
return agent;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ public class MPTroopSupplier : IEnhancedBattleTestTroopSupplier
private int _numWounded;
private int _numKilled;
private int _numRouted;
public BasicCharacterObject GetGeneralCharacter()
{
throw new System.NotImplementedException();
}

public int GetNumberOfPlayerControllableTroops()
{
// TODO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Reflection;
using TaleWorlds.Core;
using TaleWorlds.Library;
Expand All @@ -17,10 +18,10 @@ public static bool Patch()
{
_harmony.Patch(
typeof(DeploymentMissionController).GetMethod(
nameof(DeploymentMissionController.OnPlayerDeploymentFinish),
nameof(DeploymentMissionController.FinishPlayerDeployment),
BindingFlags.Instance | BindingFlags.Public),
prefix: new HarmonyMethod(typeof(Patch_DeploymentMissionController).GetMethod(
nameof(Prefix_OnPlayerDeploymentFinish),
nameof(Prefix_FinishPlayerDeployment),
BindingFlags.Static | BindingFlags.Public)));
}
catch (Exception)
Expand All @@ -39,26 +40,24 @@ public static bool Patch()
// __instance._mission.GetMissionBehavior<AssignPlayerRoleInTeamMissionController>().OnPlayerChoiceMade(battleFormationItemVm.Formation.Index, true);
// The issue is that the Agent.Main is null and the commander of the first formation is also null.
// Then the null agent will be assigned as sergeant of the first formation.
public static bool Prefix_OnPlayerDeploymentFinish(DeploymentMissionController __instance, BattleDeploymentHandler ____battleDeploymentHandler)
public static bool Prefix_FinishPlayerDeployment(DeploymentMissionController __instance, BattleDeploymentHandler ____battleDeploymentHandler, bool ____isPlayerAttacker, MissionAgentSpawnLogic ___MissionAgentSpawnLogic)
{
if (__instance.Mission.MainAgent == null)
{
typeof(DeploymentMissionController)
.GetMethod("OnSideDeploymentFinished", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(__instance, new object[] { __instance.Mission.PlayerTeam.Side });
if (__instance.Mission.PlayerTeam.Side == BattleSideEnum.Attacker)
__instance.OnBeforePlayerDeploymentFinished();
if (____isPlayerAttacker)
{
Mission.Current.IsTeleportingAgents = false;
typeof(DeploymentMissionController).GetMethod("SetupTeamsOfSide",
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(__instance, new object[] { BattleSideEnum.Defender });
// __instance.SetupTeamsOfSide(BattleSideEnum.Defender);
typeof(DeploymentMissionController)
.GetMethod("OnSideDeploymentFinished", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(__instance, new object[] { BattleSideEnum.Defender });
// __instance.OnSideDeploymentFinished(BattleSideEnum.Defender);
foreach (Agent agent in __instance.Mission.Agents)
{
if (agent.IsHuman && agent.Team is { Side: BattleSideEnum.Defender })
{
agent.SetRenderCheckEnabled(true);
agent.AgentVisuals.SetVisible(true);
agent.MountAgent?.SetRenderCheckEnabled(true);
agent.MountAgent?.AgentVisuals.SetVisible(true);
}
}
}
__instance.Mission.RemoveMissionBehavior(____battleDeploymentHandler);
typeof(DeploymentMissionController)
.GetMethod("InvokePlayerDeploymentFinish", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(__instance, new object[] { });
Expand All @@ -72,13 +71,18 @@ public static bool Prefix_OnPlayerDeploymentFinish(DeploymentMissionController _
agent.SetIsAIPaused(false);
if (agent.GetAgentFlags().HasAnyFlag(AgentFlag.CanWieldWeapon))
agent.ResetEnemyCaches();
agent.HumanAIComponent?.SyncBehaviorParamsIfNecessary();
}
}

// main agent is null
// Mission.Current.MainAgent.Controller = Agent.ControllerType.Player;
//Agent mainAgent = __instance.Mission.MainAgent;
//mainAgent.PromoteToGeneral();
//mainAgent.SetDetachableFromFormation(true);
//mainAgent.Controller = Agent.ControllerType.Player;
Mission.Current.AllowAiTicking = true;
__instance.Mission.DisableDying = false;
___MissionAgentSpawnLogic.SetReinforcementsSpawnTimerEnabled(true);
__instance.Mission.RemoveMissionBehavior(__instance);
return false;
}
Expand Down
34 changes: 17 additions & 17 deletions source/EnhancedBattleTest/src/SinglePlayer/BattleStarter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,10 +196,11 @@ public static void Start(BattleConfig config, string mapId)
partyBase.MobileParty.CurrentSettlement = settlement;
}

Dictionary<SiegeEngineType, int> siegeWeaponsCountOfAttackers = new Dictionary<SiegeEngineType, int>();
Dictionary<SiegeEngineType, int> siegeWeaponsCountOfDefenders = new Dictionary<SiegeEngineType, int>();
FillSiegeMachineCounts(siegeWeaponsCountOfAttackers, config.SiegeMachineConfig.AttackerMeleeMachines.Concat(config.SiegeMachineConfig.AttackerRangedMachines));
FillSiegeMachineCounts(siegeWeaponsCountOfDefenders, config.SiegeMachineConfig.DefenderMachines);
var siegeWeaponsCountOfAttackers = GetSiegeWeapons(
config.SiegeMachineConfig.AttackerMeleeMachines.Concat(config.SiegeMachineConfig
.AttackerRangedMachines), BattleSideEnum.Attacker);
var siegeWeaponsCountOfDefenders = GetSiegeWeapons(config.SiegeMachineConfig.DefenderMachines,
BattleSideEnum.Defender);


// Fix for weather/time settings being ignored in SiegeMission
Expand Down Expand Up @@ -518,26 +519,25 @@ private static float[] GetWallHitpointPercentages(int breachedWallCount)
}
return hitpointPercentages;
}
private static void FillSiegeMachineCounts(
Dictionary<SiegeEngineType, int> machineCounts,
IEnumerable<string> machines)

private static List<MissionSiegeWeapon> GetSiegeWeapons(IEnumerable<string> machines, BattleSideEnum side)
{
foreach (var machine in machines)
var result = new List<MissionSiegeWeapon>();
foreach (var (machine, i) in machines.Select((machine, i) => (machine, i)))
{
SiegeEngineType siegeWeaponType = Utility.GetSiegeEngineType(machine);
if (siegeWeaponType == null)
continue;
if (!machineCounts.ContainsKey(siegeWeaponType))
machineCounts.Add(siegeWeaponType, 0);
machineCounts[siegeWeaponType]++;
var hitPoints =
Campaign.Current.Models.SiegeEventModel.GetSiegeEngineHitPoints(PlayerSiege.PlayerSiegeEvent,
siegeWeaponType, side);
result.Add(MissionSiegeWeapon.CreateCampaignWeapon(siegeWeaponType, i, hitPoints, hitPoints));
}

return result;
}

private static bool HasAnySiegeTower(Dictionary<SiegeEngineType, int> attackerMachines)
private static bool HasAnySiegeTower(List<MissionSiegeWeapon> attackerMachines)
{

return attackerMachines.ContainsKey(DefaultSiegeEngineTypes.SiegeTower) ||
attackerMachines.ContainsKey(DefaultSiegeEngineTypes.HeavySiegeTower);
return attackerMachines.Exists((Predicate<MissionSiegeWeapon>)(data => data.Type == DefaultSiegeEngineTypes.SiegeTower || data.Type == DefaultSiegeEngineTypes.HeavySiegeTower));
}
}
}

This file was deleted.

42 changes: 21 additions & 21 deletions source/EnhancedBattleTest/src/Utility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ public sealed class ItemModifier : MBObjectBase
return null;
//var result = new ItemModifier { ID = string.Empty };
var result = MBObjectManager.Instance.CreateObject<ItemModifier>(string.Empty);
float sum = 0;
foreach (var probability in group.ItemModifiersWithProbability.Values)
float sum = group.NoModifierLootScore;
foreach (var itemModifier in group.ItemModifiers)
{
sum += probability.Probability;
sum += itemModifier.LootDropScore;
}

float damage = 0;
Expand All @@ -234,26 +234,26 @@ public sealed class ItemModifier : MBObjectBase
float mountHitPoints = 0;

var bindingFlag = BindingFlags.NonPublic | BindingFlags.Instance;
foreach (var modifier in group.ItemModifiersWithProbability.Values)
foreach (var itemModifier in group.ItemModifiers)
{
if (modifier.ItemModifier == null)
if (itemModifier == null)
continue;
damage += modifier.ItemModifier.ModifyDamage(0) * modifier.Probability / sum;
speed += modifier.ItemModifier.ModifySpeed(0) * modifier.Probability / sum;
missileSpeed += modifier.ItemModifier.ModifyMissileSpeed(0) * modifier.Probability / sum;
armor += modifier.ItemModifier.ModifyArmor(0) * modifier.Probability / sum;
//rankIndex += modifier.ItemModifier.RankIndex * modifier.Probability / sum;
priceMultiplier += modifier.ItemModifier.PriceMultiplier * modifier.Probability / sum;
//weightMultiplier += modifier.ItemModifier.WeightMultiplier * modifier.Probability / sum;
//oldness += modifier.ItemModifier.Oldness * modifier.Probability / sum;
//factorOne += modifier.ItemModifier.FactorOne * modifier.Probability / sum;
//factorTwo += modifier.ItemModifier.FactorTwo * modifier.Probability / sum;
hitPoints += modifier.ItemModifier.ModifyHitPoints(0) * modifier.Probability / sum;
stackCount += modifier.ItemModifier.ModifyStackCount(0) * modifier.Probability / sum;
mountSpeed += modifier.ItemModifier.ModifyMountSpeed(0) * modifier.Probability / sum;
maneuver += modifier.ItemModifier.ModifyMountManeuver(0) * modifier.Probability / sum;
chargeDamage += modifier.ItemModifier.ModifyMountCharge(0) * modifier.Probability / sum;
mountHitPoints += modifier.ItemModifier.ModifyMountHitPoints(0) * modifier.Probability / sum;
damage += itemModifier.ModifyDamage(0) * itemModifier.LootDropScore / sum;
speed += itemModifier.ModifySpeed(0) * itemModifier.LootDropScore / sum;
missileSpeed += itemModifier.ModifyMissileSpeed(0) * itemModifier.LootDropScore / sum;
armor += itemModifier.ModifyArmor(0) * itemModifier.LootDropScore / sum;
//rankIndex += itemModifier.RankIndex * itemModifier.LootDropScore / sum;
priceMultiplier += itemModifier.PriceMultiplier * itemModifier.LootDropScore / sum;
//weightMultiplier += itemModifier.WeightMultiplier * itemModifier.LootDropScore / sum;
//oldness += itemModifier.Oldness * itemModifier.LootDropScore / sum;
//factorOne += itemModifier.FactorOne * itemModifier.LootDropScore / sum;
//factorTwo += itemModifier.FactorTwo * itemModifier.LootDropScore / sum;
hitPoints += itemModifier.ModifyHitPoints(0) * itemModifier.LootDropScore / sum;
stackCount += itemModifier.ModifyStackCount(0) * itemModifier.LootDropScore / sum;
mountSpeed += itemModifier.ModifyMountSpeed(0) * itemModifier.LootDropScore / sum;
maneuver += itemModifier.ModifyMountManeuver(0) * itemModifier.LootDropScore / sum;
chargeDamage += itemModifier.ModifyMountCharge(0) * itemModifier.LootDropScore / sum;
mountHitPoints += itemModifier.ModifyMountHitPoints(0) * itemModifier.LootDropScore / sum;
}

typeof(ItemModifier).GetField("_damage", bindingFlag)?.SetValue(result, (int)damage);
Expand Down

0 comments on commit d2672f1

Please sign in to comment.