public override void OnMissionBehaviourInitialize(Mission mission) { if (!disabled && !mission.HasMissionBehaviour <TournamentXPandedMatchBehavior>() && (mission.HasMissionBehaviour <TournamentArcheryMissionController>() || mission.HasMissionBehaviour <TournamentJoustingMissionController>() || mission.HasMissionBehaviour <TownHorseRaceMissionController>() || mission.HasMissionBehaviour <TournamentFightMissionController>() )) { if (TournamentXPSettings.Instance.BonusRenownFirstKill > 0 || TournamentXPSettings.Instance.BonusRenownLeastDamage > 0 || TournamentXPSettings.Instance.BonusRenownMostDamage > 0 || TournamentXPSettings.Instance.BonusRenownMostKills > 0) { foreach (var t in TournamentsXPandedBehavior.Tournaments) { t.Active = false; } var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(Settlement.CurrentSettlement.Town); tournamentInfo.Rewards = new TournamentReward(); tournamentInfo.Active = true; var mb = mission.GetMissionBehaviour <TournamentBehavior>(); mission.AddMissionBehaviour(new TournamentXPandedMatchBehavior(mb)); mission.AddListener(new TournamentXPandedMatchListener(mb)); } } }
private static void Postfix(TournamentGame game) { if (game.Town != null) { var info = TournamentsXPandedBehavior.GetTournamentInfo(game.Town); info.ReRollsUsed = 0; } }
private static void Postfix(TournamentVM __instance) { try { var info = TournamentsXPandedBehavior.GetTournamentInfo(__instance.Tournament.TournamentGame.Town); if (!string.IsNullOrWhiteSpace(info.SelectedPrizeStringId)) { var ire = info.SelectedPrizeItem.ToItemRosterElement(); __instance.PrizeVisual = new ImageIdentifierVM(ire); __instance.PrizeItemName = ire.EquipmentElement.GetModifiedItemName().ToString(); } } catch (Exception) { } }
private static bool Prefix(TournamentBehavior __instance) { var winners = (List <TournamentParticipant>)Traverse.Create(__instance.CurrentMatch).Method("GetWinners").GetValue(); if (winners.Where(x => x.Character.HeroObject == Hero.MainHero).Count() > 0) { var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(__instance.TournamentGame.Town); if (__instance.CurrentRoundIndex > tournamentInfo.Rewards.LastPayoutIndex) { tournamentInfo.Rewards.LastPayoutIndex = __instance.CurrentRoundIndex; if (TournamentXPSettings.Instance.EnableRenownPerTroopTier) { var renownbonus = 0f; foreach (var team in __instance.CurrentMatch.Teams) { var teambonus = 0f; foreach (var p in team.Participants) { teambonus += TournamentXPSettings.Instance.GetRenownValue(p.Character); if (p.Character.IsHero && p.Character.HeroObject == Hero.MainHero) { teambonus = 0; break; } } renownbonus += teambonus; } tournamentInfo.Rewards.BonusRenown += renownbonus; } if (TournamentXPSettings.Instance.BonusTournamentMatchGold > 0) { if (TournamentXPSettings.Instance.BonusTournamentMatchGoldImmediate) { GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, TournamentXPSettings.Instance.BonusTournamentMatchGold, false); } else { typeof(TournamentBehavior).GetProperty("OverallExpectedDenars").SetValue(__instance, __instance.OverallExpectedDenars + TournamentXPSettings.Instance.BonusTournamentMatchGold); } } } } return(true); }
//private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) //{ // var codes = new List<CodeInstruction>(instructions); // codes.RemoveRange(0, codes.Count - 1); // return codes.AsEnumerable(); //} private static void Postfix(TournamentGame __instance, ref ItemObject __result) { ItemObject prize; //__result currently has stock item. try { var info = TournamentsXPandedBehavior.GetTournamentInfo(__instance.Town); prize = TournamentsXPandedBehavior.GenerateTournamentPrize(__instance, info, false); if (prize != null) { __result = prize; } } catch (Exception ex) { ErrorLog.Log("ERROR: Tournament Prize System: GetTournamentPrize"); ErrorLog.Log(ex.ToStringFull()); } }
//private static bool Prefix(PlayerTownVisitCampaignBehavior __instance, MenuCallbackArgs args) //{ // //Move name generation to top of code block // TextObject name = new TextObject(""); // if (Settlement.CurrentSettlement != null && Settlement.CurrentSettlement.HasTournament) // { // var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(Settlement.CurrentSettlement.Town); // name = Campaign.Current.TournamentManager.GetTournamentGame(Settlement.CurrentSettlement.Town).Prize.Name; // if (!string.IsNullOrWhiteSpace(tournamentInfo.SelectedPrizeStringId)) // { // name = tournamentInfo.SelectedPrizeItem.ToItemRosterElement().EquipmentElement.GetModifiedItemName(); // } // } // return true; //} private static bool Prefix(PlayerTownVisitCampaignBehavior __instance, MenuCallbackArgs args) { //PlayerTownVisitCampaignBehavior.UpdateMenuLocations(args.MenuContext.GameMenu.StringId); //Traverse.Create(__instance).Method("UpdateMenuLocations").GetValue(new object[] { args.MenuContext.GameMenu.StringId }); typeof(PlayerTownVisitCampaignBehavior).GetMethod("UpdateMenuLocations", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly).Invoke(__instance, new object[] { args.MenuContext.GameMenu.StringId }); if (Settlement.CurrentSettlement == null || !Settlement.CurrentSettlement.IsTown || Campaign.Current.TournamentManager.GetTournamentGame(Settlement.CurrentSettlement.Town) == null || !Campaign.Current.IsDay) { MBTextManager.SetTextVariable("ADDITIONAL_STRING", GameTexts.FindText("str_town_empty_arena_text", null), false); } else { TextObject name = Campaign.Current.TournamentManager.GetTournamentGame(Settlement.CurrentSettlement.Town).Prize.Name; //Need to turn this into a transpiler instead var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(Settlement.CurrentSettlement.Town); if (!string.IsNullOrWhiteSpace(tournamentInfo.SelectedPrizeStringId)) { name = tournamentInfo.SelectedPrizeItem.ToItemRosterElement().EquipmentElement.GetModifiedItemName(); } MBTextManager.SetTextVariable("ITEM", name, false); MBTextManager.SetTextVariable("ADDITIONAL_STRING", GameTexts.FindText("str_town_new_tournament_text", null), false); } //var checknext = (bool)Traverse.Create(__instance).Method("CheckAndOpenNextLocation").GetValue(new object[] { args }); var checknext = (bool)typeof(PlayerTownVisitCampaignBehavior).GetMethod("CheckAndOpenNextLocation", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly).Invoke(__instance, new object[] { args }); //if (PlayerTownVisitCampaignBehavior.CheckAndOpenNextLocation(args)) if (checknext) { return(false); } args.MenuTitle = new TextObject("{=mMU3H6HZ}Arena", null); return(false); }
private static void Postfix(TournamentGame tournament) { var info = TournamentsXPandedBehavior.GetTournamentInfo(tournament.Town); info.ReRollsUsed = 0; }
//REVISIT - convert to transpiler patch to just change our prize payment // All we really need to change is instead of giving an ItemObject - which has no ItemModifers, we give them an ItemRosterEquipement, which can have ItemModifiers private static bool Prefix(ref TournamentBehavior __instance) { //Override Standard behavior if (Campaign.Current.GameMode != CampaignGameMode.Campaign) { return(false); } var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(__instance.TournamentGame.Town); var settlement = __instance.Settlement; /* Give Gold, Influence, Renown */ if (__instance.OverallExpectedDenars > 0) { GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, __instance.OverallExpectedDenars, false); } GainRenownAction.Apply(Hero.MainHero, __instance.TournamentGame.TournamentWinRenown, false); if (Hero.MainHero.MapFaction.IsKingdomFaction && Hero.MainHero.MapFaction.Leader != Hero.MainHero) { GainKingdomInfluenceAction.ApplyForDefault(Hero.MainHero, tournamentInfo.Rewards.BonusInfluence); } /* Give Reputation */ try { if (TournamentXPSettings.Instance.BonusReputationForTournamentWin > 0) { List <Hero> heros = new List <Hero>(); foreach (var n in settlement.Notables) { if (!heros.Contains(n)) { heros.Add(n); } } foreach (var v in settlement.BoundVillages) { foreach (var n in v.Settlement.Notables) { if (!heros.Contains(n)) { heros.Add(n); } } } if (settlement.OwnerClan.Heroes.Any <Hero>()) { foreach (var n in settlement.OwnerClan.Heroes) { if (!heros.Contains(n)) { heros.Add(n); } } } if (settlement.HeroesWithoutParty.Count > 0) { foreach (var n in settlement.HeroesWithoutParty) { if (!heros.Contains(n)) { heros.Add(n); } } } foreach (var h in heros) { if (MBRandom.RandomFloat < .51f) { ChangeRelationAction.ApplyPlayerRelation(h, TournamentXPSettings.Instance.BonusReputationForTournamentWin, true, false); } } } MBTextManager.SetTextVariable("RELATION_VALUE", TournamentXPSettings.Instance.BonusReputationForTournamentWin, false); InformationManager.AddQuickInformation(new TextObject("{=o0qwDa0q}Your relation increased by {RELATION_VALUE} with nearby notables.", null), 0, null, ""); } catch (Exception ex) { ErrorLog.Log("Error giving Reputation:\n" + ex.ToStringFull()); } /* Give Item Prize */ if (!TournamentXPSettings.Instance.EnableItemModifiersForPrizes) { if (!tournamentInfo.Rewards.PrizeGiven) { try { Hero.MainHero.PartyBelongedTo.ItemRoster.AddToCounts(__instance.TournamentGame.Prize, 1, true); tournamentInfo.Rewards.PrizeGiven = true; } catch (Exception ex) { ErrorLog.Log("Error assigning prize\n" + ex.ToStringFull()); } } } else { try { if (!tournamentInfo.Rewards.PrizeGiven) { try { if (!String.IsNullOrWhiteSpace(tournamentInfo.SelectedPrizeStringId)) { Hero.MainHero.PartyBelongedTo.ItemRoster.AddToCounts(tournamentInfo.SelectedPrizeItem.ToItemRosterElement().EquipmentElement, 1, true); tournamentInfo.Rewards.PrizeGiven = true; } } catch (Exception ex) { ErrorLog.Log("Error assigning prize\n" + ex.ToStringFull()); } } } catch (Exception ex) { ErrorLog.Log("ERROR: Tournament XPanded: OnPlayerWinTournament\nError Awarding Prize"); ErrorLog.Log("TournamentPrizePool:\n"); if (tournamentInfo != null) { ErrorLog.Log(Newtonsoft.Json.JsonConvert.SerializeObject(tournamentInfo)); } ErrorLog.Log(ex.ToStringFull()); } } if (!tournamentInfo.Rewards.PrizeGiven) { try { Hero.MainHero.PartyBelongedTo.ItemRoster.AddToCounts(__instance.TournamentGame.Prize, 1, true); tournamentInfo.Rewards.PrizeGiven = true; } catch (Exception ex2) { ErrorLog.Log("Error assigning prize\n" + ex2.ToStringFull()); } } tournamentInfo.ReRollsUsed = 0; Campaign.Current.TournamentManager.OnPlayerWinTournament(__instance.TournamentGame.GetType()); return(false); }
private static void Postfix(TournamentGame __instance, ref float __result) { var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(__instance.Town); __result += tournamentInfo.Rewards.BonusRenown; }