示例#1
0
        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));
                }
            }
        }
示例#2
0
 private static void Postfix(TournamentGame game)
 {
     if (game.Town != null)
     {
         var info = TournamentsXPandedBehavior.GetTournamentInfo(game.Town);
         info.ReRollsUsed = 0;
     }
 }
示例#3
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());
            }
        }
示例#6
0
        //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);
        }
示例#9
0
        private static void Postfix(TournamentGame __instance, ref float __result)
        {
            var tournamentInfo = TournamentsXPandedBehavior.GetTournamentInfo(__instance.Town);

            __result += tournamentInfo.Rewards.BonusRenown;
        }