コード例 #1
0
        private void StartCampaign_Click(object sender, EventArgs e)
        {
            campaign = new Campaign(player, (int)missionNumber.Value, difficultyBar.Value);
            campaign.Start();
            Hide();

            do
            {
                try
                {
                    campaign.activeGame.ShowDialog();
                }
                catch (Exception f)
                {
                    Trace.TraceError(f.ToString());
                    MessageBox.Show(f.ToString());
                }

                if (campaign.activeGame.dead)
                {
                    MessageBox.Show("You have lost the campaign as you have died! Good luck next time!");
                    return;
                }
                if (campaign.activeGame.giveReward)
                {
                    MissionResult worldView = GenerateRewardAndHeal(player, campaign.activeGame, campaign.mission, campaign.healthRegen, (double)(campaign.Round - 1) / campaign.numberOfGames, "Next Mission");
                    worldView.ShowDialog();
                }
            } while (campaign.Next());

            MessageBox.Show("You have won!");
        }
コード例 #2
0
        public static void Prefix(Contract __instance, MissionResult result, bool isGoodFaithEffort)
        {
            if (__instance != null && !__instance.ContractTypeValue.IsSkirmish)
            {
                SimGameState simulation = HBS.LazySingletonBehavior <UnityGameInstance> .Instance.Game.Simulation;

                ModState.Employer = __instance.GetTeamFaction("ecc8d4f2-74b4-465d-adf6-84445e5dfc230");
                SimGameReputation employerRep = simulation.GetReputation(ModState.Employer);
                ModState.EmployerRep    = employerRep;
                ModState.EmployerRepRaw = simulation.GetRawReputation(ModState.Employer);

                ModState.IsEmployerAlly = simulation.IsFactionAlly(ModState.Employer);
                ModState.MRBRating      = simulation.GetCurrentMRBLevel(); // Normalize to 0 indexing
                Mod.Log.Info?.Write($"At contract start for employer: Employer:({ModState.Employer}):  " +
                                    $"employerRep:{ModState.EmployerRep}  employerIsAllied:{ModState.IsEmployerAlly}  " +
                                    $"MRBRating: {ModState.MRBRating}  MRBIndex: {Helper.MRBCfgIdx()}");

                // Calculate the rollup, reputation and etc:
                Mod.Log.Info?.Write($" -- Contract Rollup Idx: {Helper.MRBCfgIdx()} => " +
                                    $"RawRollup: {Mod.Config.RollupMRBValue[Helper.MRBCfgIdx()]}");
                RepCfg repCfg = Mod.Config.Reputation[Helper.FactionCfgIdx()];
                Mod.Log.Info?.Write($" -- Faction Rep Idx: {Helper.FactionCfgIdx()} => " +
                                    $"Reputation: {repCfg.Reputation}  " +
                                    $"RollupMultiComponent: {repCfg.RollupMultiComponent}  RollupMultiMech: {repCfg.RollupMultiMech}  " +
                                    $"HoldbackTrigger: {repCfg.HoldbackTrigger}  HoldbackValueCapMulti: {repCfg.HoldbackValueCapMulti}");
            }
        }
コード例 #3
0
ファイル: MissionLoader.cs プロジェクト: sierenavg/test1
        public override MissionResult Run(object ip)
        {
            CRecipe       rec     = (CRecipe)ip;
            MissionResult statues = MissionResult.NORMAL;

            statues = this.selfCheck();
            if (statues != MissionResult.NORMAL)
            {
                return(statues);
            }

            statues = this.loadRecipe();
            if (statues != MissionResult.NORMAL)
            {
                return(statues);
            }

            statues = this.checkRGVstatus();
            if (statues != MissionResult.NORMAL)
            {
                return(statues);
            }

            statues = this.RunRecipe(rec);
            return(statues);
        }
コード例 #4
0
ファイル: AIModel.cs プロジェクト: AbsolutD/avalon
        private static BaseCommand GenerateVoteMissionCommand(GameModel model, Player player)
        {
            if (model.GamePhase != GamePhase.MissionVoting)
            {
                throw new GamePhaseException(model.GamePhase.ToString());
            }

            if (!model.CurrentMission.Team.Contains(player))
            {
                throw new NotOnTeamException();
            }

            if (model.CurrentMission.MissionVoteOf[player] != MissionResult.Unknown)
            {
                throw new TwiceVoteException();
            }

            MissionResult missionVote =
                (Character.IsGoodRole(player.Role)) ?
                MissionResult.Succeed :
                MissionResult.Fail;

            VoteMissionCommand command = new VoteMissionCommand(player.Id, missionVote);

            return(command);
        }
コード例 #5
0
ファイル: Contract.cs プロジェクト: ajkroeg/WarTechIIC
        public static void Postfix(Contract __instance, MissionResult result, bool isGoodFaithEffort)
        {
            try {
                Settings s = WIIC.settings;
                WIIC.modLog.Debug?.Write($"Contract complete: {__instance.Name}, override: {__instance.Override.ID}");

                Flareup flareup = Utilities.currentFlareup();
                if (flareup == null || __instance.Name != flareup.currentContractName)
                {
                    return;
                }

                int bonus   = flareup.type == "Attack" ? s.attackBonusPerHalfSkull : s.raidBonusPerHalfSkull;
                int newCost = __instance.MoneyResults + bonus * __instance.Difficulty;
                WIIC.modLog.Info?.Write($"{flareup.type} contract complete, adding bonus. old money: {__instance.MoneyResults}, new: {newCost}, funds: {WIIC.sim.Funds}");

                Traverse.Create(__instance).Property("MoneyResults").SetValue(newCost);
                WIIC.modLog.Info?.Write($"Reading it back after setting: {__instance.MoneyResults}");

                bonus = flareup.type == "Attack" ? s.attackBonusSalvage : s.raidBonusSalvage;
                WIIC.modLog.Info?.Write($"Addng salvage. FinalSalvageCount: {__instance.FinalSalvageCount}, bonus: {bonus}");
                Traverse.Create(__instance).Property("FinalSalvageCount").SetValue(__instance.FinalSalvageCount + bonus);
            }
            catch (Exception e) {
                WIIC.modLog.Error?.Write(e);
            }
        }
コード例 #6
0
ファイル: EvaluateGameResult.cs プロジェクト: AbsolutD/avalon
        public override void ExecuteCommand(GameModel model)
        {
            ValidateCommand(model);

            model.GamePhase = GamePhase.GameOver;

            if (model.Missions.Count(ms => ms != null && ms.MissionResult == MissionResult.Succeed) >= 3)
            {
                model.GameResult   = MissionResult.Succeed;
                model.DefeatReason = DefeatType.NotDefeated;
            }
            else if (model.Missions.Count(ms => ms != null && ms.MissionResult == MissionResult.Fail) >= 3)
            {
                model.GameResult   = MissionResult.Fail;
                model.DefeatReason = DefeatType.FailedMission;
            }
            else
            {
                model.GameResult   = MissionResult.Fail;
                model.DefeatReason = DefeatType.HammerRejected;
            }

            GameResult   = model.GameResult;
            DefeatReason = model.DefeatReason;
        }
コード例 #7
0
 public override void OnMissionResultReady(MissionResult missionResult)
 {
     if (!missionResult.PlayerVictory)
     {
         return;
     }
     this.BattleObserver.BattleResultsReady();
 }
コード例 #8
0
        internal MissionResult RunChangeCar_Loader(int carSideId, ChangeCarStep curStep)
        {
            //  throw new NotImplementedException();



            bool isLeft;

            if (carSideId == 0)
            {
                isLeft = true;
            }
            else
            {
                isLeft = false;
            }

            ChangeCarCmd curCmd = new ChangeCarCmd(isLeft, true, curStep);

            MissionResult result = CheckChangeCarLoader();

            if (result != MissionResult.NORMAL)
            {
                return(result);
            }


            if (isLeft)
            {
                this.loaderItemNum_left = 0;
            }
            else
            {
                this.loaderItemNum_right = 0;
            }



            if (isLeft)
            {
                this._ChangeCar_Loader.Status = ChangeCarStatus.CHANGING_LEFT;
            }
            else
            {
                this._ChangeCar_Loader.Status = ChangeCarStatus.CHANGING_RIGHT;
            }

            //  this.m_alarmManager.LedCarOut(isLeft,true);

            this._ChangeCarTask_Loader = new Task <MissionResult>(this._ChangeCar_Loader.RunChangeCar_Loader, (object)(curCmd));
            this._ChangeCarTask_Loader.Start();

            return(MissionResult.START);
        }
コード例 #9
0
ファイル: Mission.cs プロジェクト: AbsolutD/avalon
        public void ValuateMissionVote()
        {
            if (Team == null)
            {
                throw new InvalidOperationException("Missionteam unitialized.");
            }

            if (MissionResult != MissionResult.Unknown)
            {
                throw new InvalidOperationException("MissionResult already valuated!");
            }

            MissionResult = CountMissionResult();
        }
コード例 #10
0
ファイル: Patches.cs プロジェクト: gnivler/LootMagnet
        public static void Prefix(Contract __instance, MissionResult result, bool isGoodFaithEffort)
        {
            if (__instance != null && !__instance.ContractTypeValue.IsSkirmish)
            {
                SimGameState simulation = HBS.LazySingletonBehavior <UnityGameInstance> .Instance.Game.Simulation;

                ModState.Employer = __instance.GetTeamFaction("ecc8d4f2-74b4-465d-adf6-84445e5dfc230");
                SimGameReputation employerRep = simulation.GetReputation(ModState.Employer);
                ModState.EmployerRep    = employerRep;
                ModState.EmployerRepRaw = simulation.GetRawReputation(ModState.Employer);
                ModState.IsEmployerAlly = simulation.IsCareerFactionAlly(ModState.Employer);
                ModState.MRBRating      = simulation.GetCurrentMRBLevel() - 1; // Normalize to 0 indexing
                Mod.Log.Info($"At contract start, Player has MRB:{ModState.MRBRating}  Employer:({ModState.Employer}) EmployerRep:{ModState.EmployerRep} / EmployerAllied:{ModState.IsEmployerAlly}");
            }
        }
コード例 #11
0
 public override InquiryData OnEndMissionRequest(out bool canPlayerLeave)
 {
     canPlayerLeave = true;
     if (!this.IsPlayerDead() && this.Mission.IsPlayerCloseToAnEnemy())
     {
         canPlayerLeave = false;
         InformationManager.AddQuickInformation(GameTexts.FindText("str_can_not_retreat"));
     }
     else
     {
         MissionResult missionResult = (MissionResult)null;
         if (!this.IsPlayerDead() && !this.MissionEnded(ref missionResult))
         {
             return(new InquiryData("", GameTexts.FindText("str_retreat_question").ToString(), true, true, GameTexts.FindText("str_ok").ToString(), GameTexts.FindText("str_cancel").ToString(), new Action(this.Mission.OnEndMissionResult), (Action)null));
         }
     }
     return((InquiryData)null);
 }
コード例 #12
0
ファイル: IOController.cs プロジェクト: AbsolutD/avalon
        private void CreateMissionVoteCmd(MissionResult missionVote)
        {
            VoteMissionCommand command = new VoteMissionCommand(LocalPlayer.Id, missionVote);

            try
            {
                command.ValidateCommand(GameModel);
            }
            catch (BaseException ex)
            {
                if (ex is VoteTypeException)
                {
                    InfoText.text = "You character alignment is Good. You must vote with Succeed!";
                }
                return;
            }
            GameController.AddCommand(command);
        }
コード例 #13
0
        public static MissionResult GenerateRewardAndHeal(HumanPlayer player, MainGameWindow mainWindow, Mission.Mission mission, int healthRegen, double progression, string closeButtonText)
        {
            //Reset troop stats
            foreach (Weapon weapon in player.troop.weapons)
            {
                if (weapon.type != BaseAttackType.range)
                {
                    weapon.SetAttacks(weapon.MaxAttacks());
                }
            }

            player.mana.RawValue          = player.mana.MaxValue().Value;
            player.troop.health.RawValue += healthRegen;
            player.troop.health.RawValue  = player.troop.health.Value > player.troop.health.MaxValue().Value ? player.troop.health.MaxValue().Value : player.troop.health.Value;

            List <Armour> loot = new List <Armour>();

            if (mission.lootDead)
            {
                //Generate loot from dead players
                List <Armour> lootableArmour = new List <Armour>();
                foreach (var deadPlayer in mainWindow.killedPlayers)
                {
                    lootableArmour.AddRange(deadPlayer.troop.armours);
                }

                lootableArmour = lootableArmour.OrderBy(a => World.World.random.Next()).ToList(); // I know it is not the most effiecent but that does not matter here

                int chosen = 0;
                foreach (var lootpiece in lootableArmour)
                {
                    if (World.World.random.NextDouble() < 1d / (chosen + 1d))
                    {
                        lootpiece.active = false;
                        loot.Add(lootpiece);
                        chosen++;
                    }
                }
            }
            //Show world map
            MissionResult worldView = new MissionResult(player, progression, mission, loot, closeButtonText);

            return(worldView);
        }
コード例 #14
0
        public int Unload(int posId)
        {
            MissionResult r = this._MissionManager.RunUnloader(posId);

            switch (r)
            {
            case MissionResult.START:
                // MessageBox.Show("Mission Start");
                break;

            default:
                MessageBox.Show("unloader Error " + r.ToString());
                break;
            }
            // MessageBox.Show("finish");
            return(1);
            //return this.m_processManager.
            //throw new NotImplementedException();
        }
コード例 #15
0
        public void PerformTheMission_MissionFailed_ReturnMissionResult()
        {
            var missionResult = new MissionResult()
            {
                Success = false
            };

            _missionService.Setup(m => m.SolveMission(
                                      It.IsAny <string>(),
                                      It.IsAny <string>()))
            .Returns(Task.FromResult(missionResult));

            var result = _newbieWarrior.PerformTheMission(
                _missionService.Object,
                It.IsAny <string>(),
                It.IsAny <string>());

            Assert.That(result.Success, Is.EqualTo(false));
        }
コード例 #16
0
        public override bool MissionEnded(ref MissionResult missionResult)
        {
            bool flag = false;

            if (this._isEnemySideRetreating || this._isEnemySideDepleted)
            {
                missionResult = MissionResult.CreateSuccessful((IMission)this.Mission);
                flag          = true;
            }
            else if (this._isPlayerSideDepleted)
            {
                missionResult = MissionResult.CreateDefeated((IMission)this.Mission);
                flag          = true;
            }
            if (flag)
            {
                this._missionAgentSpawnLogic.StopSpawner();
            }
            return(flag);
        }
コード例 #17
0
        public override void LoadTestData()
        {
            // TODO: Remove after testing
            List <UserInfo> randos  = Helper.GenerateFakeActivity();
            var             mresult = new MissionResult {
                employer      = Faction.Steiner,
                target        = Faction.Liao,
                result        = BattleTech.MissionResult.Victory,
                systemName    = "FOOBAR",
                difficulty    = 3,
                awardedRep    = 0,
                planetSupport = 0,
            };

            foreach (UserInfo rando in randos)
            {
                string hashedID = String.Format("{0:X}", rando.companyName.GetHashCode());
                Holder.connectionStore.Add(hashedID, rando);
                Helper.RecordPlayerActivity(mresult, hashedID, rando.companyName, DateTime.UtcNow);
            }
        }
コード例 #18
0
        public void PerformTheMission_MissionSuccessful_ReturnTrue()
        {
            _warrior.Setup(w => w.ChooseTheBestMission(
                               It.IsAny <List <MissionInfo> >(),
                               It.IsAny <UserInfo>()))
            .Returns(new MissionInfo());

            var missionResult = new MissionResult {
                Success = true
            };

            _warrior.Setup(w => w.PerformTheMission(
                               It.IsAny <IMissionService>(),
                               It.IsAny <string>(),
                               It.IsAny <string>()))
            .Returns(missionResult);


            var result = _missionBoard.PerformTheMission();

            Assert.That(result, Is.EqualTo(true));
        }
コード例 #19
0
        public override bool MissionEnded(ref MissionResult missionResult)
        {
            if (this.IsSallyOutOver)
            {
                missionResult = MissionResult.CreateSuccessful((IMission)this.Mission);
                return(true);
            }
            if (this._checkState != SallyOutEndLogic.EndConditionCheckState.Active)
            {
                return(false);
            }
            foreach (Team team in (ReadOnlyCollection <Team>) this.Mission.Teams)
            {
                switch (team.Side)
                {
                case BattleSideEnum.Defender:
                    if (team.FormationsIncludingSpecial.Any <Formation>() && team.Formations.Any <Formation>((Func <Formation, bool>)(f => !TeamAISiegeComponent.IsFormationInsideCastle(f, false, 0.9f))))
                    {
                        this._checkState = SallyOutEndLogic.EndConditionCheckState.Idle;
                        return(false);
                    }
                    continue;

                case BattleSideEnum.Attacker:
                    if (TeamAISiegeComponent.IsFormationGroupInsideCastle(team.FormationsIncludingSpecial, false, 0.1f))
                    {
                        this._checkState = SallyOutEndLogic.EndConditionCheckState.Idle;
                        return(false);
                    }
                    continue;

                default:
                    continue;
                }
            }
            this.IsSallyOutOver = true;
            missionResult       = MissionResult.CreateSuccessful((IMission)this.Mission);
            return(true);
        }
コード例 #20
0
 public override bool MissionEnded(ref MissionResult missionResult)
 {
     if (!this.IsDeploymentFinished)
     {
         return(false);
     }
     if (this.IsPlayerDead())
     {
         missionResult = MissionResult.CreateDefeated((IMission)this.Mission);
         return(true);
     }
     if (this.Mission.GetMemberCountOfSide(BattleSideEnum.Attacker) == 0)
     {
         missionResult = this.Mission.PlayerTeam.Side == BattleSideEnum.Attacker ? MissionResult.CreateDefeated((IMission)this.Mission) : MissionResult.CreateSuccessful((IMission)this.Mission);
         return(true);
     }
     if (this.Mission.GetMemberCountOfSide(BattleSideEnum.Defender) != 0)
     {
         return(false);
     }
     missionResult = this.Mission.PlayerTeam.Side == BattleSideEnum.Attacker ? MissionResult.CreateSuccessful((IMission)this.Mission) : MissionResult.CreateDefeated((IMission)this.Mission);
     return(true);
 }
コード例 #21
0
 static void Postfix(Contract __instance, MissionResult result)
 {
     try {
         GameInstance game     = LazySingletonBehavior <UnityGameInstance> .Instance.Game;
         StarSystem   system   = game.Simulation.StarSystems.Find(x => x.ID == __instance.TargetSystem);
         Faction      oldOwner = system.Def.Owner;
         if (result == MissionResult.Victory)
         {
             system = Helper.PlayerAttackSystem(system, game.Simulation, __instance.Override.employerTeam.faction, __instance.Override.targetTeam.faction, true);
         }
         else
         {
             system = Helper.PlayerAttackSystem(system, game.Simulation, __instance.Override.employerTeam.faction, __instance.Override.targetTeam.faction, false);
         }
         if (system.Def.Owner != oldOwner)
         {
             SimGameInterruptManager interruptQueue = (SimGameInterruptManager)AccessTools.Field(typeof(SimGameState), "interruptQueue").GetValue(game.Simulation);
             interruptQueue.QueueGenericPopup_NonImmediate("Conquered", Helper.GetFactionName(system.Def.Owner, game.Simulation.DataManager) + " took " + system.Name + " from " + Helper.GetFactionName(oldOwner, game.Simulation.DataManager), true, null);
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
     }
 }
コード例 #22
0
ファイル: Mission.cs プロジェクト: AbsolutD/avalon
        public void AddMissionVote(Player player, MissionResult missionVote)
        {
            if (Team == null)
            {
                throw new InvalidOperationException("Missionteam uninitialized.");
            }

            if (missionVote == MissionResult.Unknown)
            {
                throw new ArgumentException("vote");
            }

            if (!Team.Contains(player))
            {
                throw new ArgumentException("player not in team");
            }

            if (MissionVoteOf[player] != MissionResult.Unknown)
            {
                throw new ArgumentException("player alrdy vote");
            }

            MissionVoteOf[player] = missionVote;
        }
 public override bool MissionEnded(ref MissionResult missionResult)
 {
     return(this.Mission.InputManager.IsKeyPressed(TaleWorlds.InputSystem.InputKey.Tab));
 }
コード例 #24
0
        public static BaseCommand CommandFromString(String strCommand, GameModel model)
        {
            if (strCommand.StartsWith("EvaluateGameResult "))
            {
                String[]      split      = strCommand.Split(' ');
                MissionResult gameResult = (MissionResult)Int32.Parse(split[1]);
                DefeatType    defeatType = (DefeatType)Int32.Parse(split[2]);

                EvaluateGameResult command = new EvaluateGameResult();
                command.GameResult   = gameResult;
                command.DefeatReason = defeatType;

                return(command);
            }

            if (strCommand.StartsWith("EvaluateMissionVote "))
            {
                String[]            split         = strCommand.Split(' ');
                MissionNumber       missionNumber = (MissionNumber)Int32.Parse(split[1]);
                EvaluateMissionVote command       = new EvaluateMissionVote(missionNumber);
                return(command);
            }

            if (strCommand.StartsWith("EvaluateTeamVote "))
            {
                String[]         split         = strCommand.Split(' ');
                MissionNumber    missionNumber = (MissionNumber)Int32.Parse(split[1]);
                VoteNumber       voteNumber    = (VoteNumber)Int32.Parse(split[2]);
                EvaluateTeamVote command       = new EvaluateTeamVote(missionNumber, voteNumber);
                return(command);
            }

            if (strCommand.StartsWith("PickTeam "))
            {
                String[] split     = strCommand.Split(' ');
                int      leaderId  = Int32.Parse(split[1]);
                string   teamCode  = split[2];
                int      playerNum = teamCode.Length;

                HashSet <int> playerTeamIds = new HashSet <int>();
                for (int i = 0; i < teamCode.Length; i++)
                {
                    if (teamCode[i] == '1')
                    {
                        playerTeamIds.Add(i);
                    }
                }

                PickTeamCommand command = new PickTeamCommand(leaderId, playerTeamIds, playerNum);
                return(command);
            }

            if (strCommand.StartsWith("VoteMission "))
            {
                String[]           split       = strCommand.Split(' ');
                int                playerId    = Int32.Parse(split[1]);
                MissionResult      missionVote = (MissionResult)Int32.Parse(split[2]);
                VoteMissionCommand command     = new VoteMissionCommand(playerId, missionVote);
                return(command);
            }

            if (strCommand.StartsWith("VoteTeam "))
            {
                String[]        split    = strCommand.Split(' ');
                int             playerId = Int32.Parse(split[1]);
                VoteType        teamVote = (VoteType)Int32.Parse(split[2]);
                VoteTeamCommand command  = new VoteTeamCommand(playerId, teamVote);
                return(command);
            }

            if (strCommand.StartsWith("ChangePlayer "))
            {
                String[]            split      = strCommand.Split(' ');
                int                 playerId   = Int32.Parse(split[1]);
                PlayerType          playerType = (PlayerType)Int32.Parse(split[2]);
                String              playerName = split[3];
                ChangePlayerCommand command    = new ChangePlayerCommand(playerId, playerType, playerName);
                return(command);
            }

            throw new ArgumentException("Command string not found: " + strCommand);
        }
コード例 #25
0
            public static void Postfix(Contract __instance, MissionResult result, bool isGoodFaithEffort)
            {
                SpecHolder.HolderInstance.emplRep = __instance.EmployerReputationResults;
                var employer           = __instance.Override.employerTeam.FactionDef.FactionValue.Name;
                var target             = __instance.Override.targetTeam.FactionDef.FactionValue.Name;
                var employerRepMult    = 1f;
                var targetRepMult      = 1f;
                var contractPayOutMult = 1f;

                SpecHolder.HolderInstance.kills  = 0;
                SpecHolder.HolderInstance.bounty = 0;

                var playerUnits = UnityGameInstance.BattleTechGame.Combat.AllActors.Where(x => x.team.IsLocalPlayer);

                foreach (var unit in playerUnits)
                {
                    var p    = unit.GetPilot();
                    var pKey = p.FetchGUID();
                    if (pKey == "NOTAPILOT")
                    {
                        continue;
                    }
                    var contractID = __instance.Override.ContractTypeValue.Name;
                    //processing mission outcomes

                    if (SpecHolder.HolderInstance.OpForSpecMap.ContainsKey(pKey))
                    {
                        var opSpecs             = new List <OpForSpec>();
                        var employerRepMultTemp = new List <float>()
                        {
                            0f
                        };
                        foreach (var spec in SpecHolder.HolderInstance.OpForSpecMap[pKey])
                        {
                            opSpecs.AddRange(SpecManager.ManagerInstance.OpForSpecList.Where(x => x.OpForSpecID == spec));
                        }

                        foreach (var opSpec in opSpecs)
                        {
                            if (opSpec.factionID == target || opSpec.applyToFaction.Contains(target))
                            {
                                if (opSpec.repMult.ContainsKey(employer))
                                {
                                    employerRepMultTemp.Add(opSpec.repMult[employer]);
                                    //employerRepMult += (opSpec.repMult[employer]);
                                    ModInit.modLog.LogMessage($"current employer [employer] reputation multiplier: {opSpec.repMult[employer]}");
                                }

                                if (opSpec.repMult.ContainsKey(employer_string))
                                {
                                    employerRepMultTemp.Add(opSpec.repMult[employer_string]);
                                    //employerRepMult += (opSpec.repMult[employer_string]);
                                    ModInit.modLog.LogMessage($"current employer [employer_string] reputation multiplier: {opSpec.repMult[employer_string]}");
                                }

                                if (opSpec.repMult.ContainsKey(owner_string) && sim.CurSystem.OwnerValue.Name == employer)
                                {
                                    employerRepMultTemp.Add(opSpec.repMult[owner_string]);
//                                        employerRepMult += (opSpec.repMult[owner_string]);
                                    ModInit.modLog.LogMessage($"current employer [owner_string] reputation multiplier: {opSpec.repMult[owner_string]}");
                                }

                                employerRepMult += employerRepMultTemp.Max();

                                if (opSpec.repMult.ContainsKey(target) && !opSpec.repMult.ContainsKey(target_string))
                                {
                                    targetRepMult *= (opSpec.repMult[target]);
                                    ModInit.modLog.LogMessage($"current target [target] reputation multiplier: {targetRepMult}");
                                }
                                if (!opSpec.repMult.ContainsKey(target) && opSpec.repMult.ContainsKey(target_string))
                                {
                                    targetRepMult *= (opSpec.repMult[target_string]);
                                    ModInit.modLog.LogMessage($"current target [target_string] reputation multiplier: {targetRepMult}");
                                }
                                if (opSpec.repMult.ContainsKey(target) && opSpec.repMult.ContainsKey(target_string))
                                {
                                    targetRepMult *= Math.Min(opSpec.repMult[target], opSpec.repMult[target_string]);
                                    ModInit.modLog.LogMessage($"current target [target && target_string] reputation multiplier: {targetRepMult}");
                                }

                                if (opSpec.cashMult.ContainsKey(employer) && !opSpec.cashMult.ContainsKey(employer_string))
                                {
                                    contractPayOutMult += (opSpec.cashMult[employer]);
                                    ModInit.modLog.LogMessage($"current contract payout multiplier: {contractPayOutMult}");
                                }

                                if (!opSpec.cashMult.ContainsKey(employer) && opSpec.cashMult.ContainsKey(employer_string))
                                {
                                    contractPayOutMult += (opSpec.cashMult[employer_string]);
                                    ModInit.modLog.LogMessage($"current contract payout multiplier: {contractPayOutMult}");
                                }

                                if (opSpec.cashMult.ContainsKey(employer) && opSpec.cashMult.ContainsKey(employer_string))
                                {
                                    contractPayOutMult += Math.Max(opSpec.cashMult[employer_string], opSpec.cashMult[employer]);
                                    ModInit.modLog.LogMessage($"current contract payout multiplier: {contractPayOutMult}");
                                }
                            }
                        }

                        if (SpecHolder.HolderInstance.OpForKillsTEMPTracker.ContainsKey(pKey))
                        {
                            if (SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey].ContainsKey(target))
                            {
                                SpecHolder.HolderInstance.kills += SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey][target];
                                ModInit.modLog.LogMessage($"OpForKillsTEMPTracker was {SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey][target]}");
                            }

                            foreach (var opSpec in opSpecs)
                            {
                                if (opSpec.factionID.Contains(target) || opSpec.applyToFaction.Contains(target))
                                {
                                    if (opSpec.killBounty.ContainsKey(employer) &&
                                        !opSpec.killBounty.ContainsKey(employer_string))
                                    {
                                        SpecHolder.HolderInstance.bounty += opSpec.killBounty[employer];
                                        ModInit.modLog.LogMessage($"Kill bounty: {SpecHolder.HolderInstance.bounty}");
                                    }
                                    if (!opSpec.killBounty.ContainsKey(employer) &&
                                        opSpec.killBounty.ContainsKey(employer_string))
                                    {
                                        SpecHolder.HolderInstance.bounty += opSpec.killBounty[employer_string];
                                        ModInit.modLog.LogMessage($"Kill bounty: {SpecHolder.HolderInstance.bounty}");
                                    }
                                    if (opSpec.killBounty.ContainsKey(employer) &&
                                        opSpec.killBounty.ContainsKey(employer_string))
                                    {
                                        SpecHolder.HolderInstance.bounty += Math.Max(opSpec.killBounty[employer], opSpec.killBounty[employer_string]);
                                        ModInit.modLog.LogMessage($"Kill bounty: {SpecHolder.HolderInstance.bounty}");
                                    }
                                }
                            }
                        }
                    }

                    var taggedMSpecCt  = 0;
                    var taggedOPSpecCt = 0;

                    if (!ModInit.modSettings.TaggedMissionSpecsCountTowardMax)
                    {
                        foreach (var tag in ModInit.modSettings.taggedMissionSpecs)
                        {
                            if (p.pilotDef.PilotTags.Contains(tag.Key))
                            {
                                taggedMSpecCt += tag.Value.Count;
                            }
                        }

                        ModInit.modLog.LogMessage(
                            $"{taggedMSpecCt} tagged Mission Specs found for {p.Callsign}.");
                        foreach (var tag in ModInit.modSettings.taggedOpForSpecs)
                        {
                            if (p.pilotDef.PilotTags.Contains(tag.Key))
                            {
                                taggedOPSpecCt += tag.Value.Count;
                            }
                        }
                    }

                    //processing spec progress below
                    if (ModInit.modSettings.WhiteListMissions.Contains(contractID))
                    {
                        if (SpecHolder.HolderInstance.MissionsTracker.ContainsKey(pKey))
                        {
                            if (!SpecHolder.HolderInstance.MissionsTracker[pKey].ContainsKey(contractID))
                            {
                                SpecHolder.HolderInstance.MissionsTracker[pKey].Add(contractID, 0);
                                ModInit.modLog.LogMessage(
                                    $"No key for {contractID} found in {p.Callsign}'s MissionsTracker. Adding it with default value 0.");
                            }

                            if (ModInit.modSettings.MissionSpecSuccessRequirement == 0 ||
                                (ModInit.modSettings.MissionSpecSuccessRequirement == 1 && isGoodFaithEffort) ||
                                (ModInit.modSettings.MissionSpecSuccessRequirement == 2 &&
                                 result == MissionResult.Victory))
                            {
                                SpecHolder.HolderInstance.MissionsTracker[pKey][contractID] += 1;
                                ModInit.modLog.LogMessage(
                                    $"Adding 1 to {p.Callsign}'s MissionsTracker for {contractID}");
                            }

                            var mspecsCollapsed = SpecManager.ManagerInstance.MissionSpecList.Where(x =>
                                                                                                    SpecHolder.HolderInstance.MissionSpecMap[pKey].Any(y => y == x.MissionSpecID))
                                                  .Select(x => x.contractTypeID).Distinct().ToList();

                            if (SpecManager.ManagerInstance.MissionSpecList.Any(x => x.contractTypeID == contractID))
                            {
                                foreach (var missionSpec in SpecManager.ManagerInstance.MissionSpecList.Where(x =>
                                                                                                              x.contractTypeID == contractID))
                                {
                                    if (missionSpec.missionsRequired == 0)
                                    {
                                        ModInit.modLog.LogMessage(
                                            $"{missionSpec.MissionSpecName} has 0 required missions set, ignoring.");
                                        continue;
                                    }

                                    if ((SpecHolder.HolderInstance.MissionSpecMap[pKey].Count - taggedMSpecCt <
                                         ModInit.modSettings.MaxMissionSpecializations) ||
                                        (!ModInit.modSettings.MissionTiersCountTowardMax &&
                                         (mspecsCollapsed.Count - taggedMSpecCt <
                                          ModInit.modSettings.MaxMissionSpecializations) ||
                                         mspecsCollapsed.Contains(missionSpec.contractTypeID)))
                                    {
                                        if (SpecHolder.HolderInstance.MissionsTracker[pKey][contractID] >=
                                            missionSpec.missionsRequired && contractID == missionSpec.contractTypeID &&
                                            !SpecHolder
                                            .HolderInstance.MissionSpecMap[pKey]
                                            .Contains(missionSpec.MissionSpecID))
                                        {
                                            ModInit.modLog.LogMessage(
                                                $"{p.Callsign} has achieved {missionSpec.MissionSpecName} for {missionSpec.contractTypeID}!");
                                            SpecHolder.HolderInstance.MissionSpecMap[pKey]
                                            .Add(missionSpec.MissionSpecID);
                                            if (!mspecsCollapsed.Contains(missionSpec.contractTypeID))
                                            {
                                                mspecsCollapsed.Add(missionSpec.contractTypeID);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ModInit.modLog.LogMessage(
                                            $"{p.Callsign} already has the maximum, {mspecsCollapsed.Count}{ModInit.modSettings.MaxMissionSpecializations}, Mission Specializations!");
                                    }

                                    if (missionSpec.cashMult > 0 && SpecHolder.HolderInstance.MissionSpecMap[pKey]
                                        .Any(y => y == missionSpec.MissionSpecID))
                                    {
                                        contractPayOutMult += (missionSpec.cashMult);
                                        ModInit.modLog.LogMessage(
                                            $"current contract payout multiplier: {contractPayOutMult} from {missionSpec.MissionSpecName}");
                                    }
                                }
                            }
                        }
                    }

                    if (ModInit.modSettings.WhiteListOpFor.Contains(__instance.Override.targetTeam.FactionValue.Name) && SpecHolder.HolderInstance.OpForKillsTEMPTracker.ContainsKey(pKey))
                    {
                        if (SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey].Count <= 0)
                        {
                            return;
                        }
                        foreach (var key in SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey]?.Keys)
                        {
                            if (ModInit.modSettings.WhiteListOpFor.Contains(key))
                            {
                                if (!SpecHolder.HolderInstance.OpForKillsTracker[pKey].ContainsKey(key))
                                {
                                    SpecHolder.HolderInstance.OpForKillsTracker[pKey].Add(key, 0);
                                    ModInit.modLog.LogMessage(
                                        $"No key for {key} found in {p.Callsign}'s OpForKillsTracker. Adding it with default value 0.");
                                }
                                SpecHolder.HolderInstance.OpForKillsTracker[pKey][key] +=
                                    SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey][key];
                                ModInit.modLog.LogMessage(
                                    $"Adding {SpecHolder.HolderInstance.OpForKillsTEMPTracker[pKey][key]} {key} kills to {p.Callsign}'s OpForKillsTracker");
                            }
                        }
                    }

                    var opforspecCollapsed = SpecManager.ManagerInstance.OpForSpecList.Where(x =>
                                                                                             SpecHolder.HolderInstance.OpForSpecMap[pKey].Any(y => y == x.OpForSpecID))
                                             .Select(x => x.factionID).Distinct().ToList();

                    if (SpecHolder.HolderInstance.OpForSpecMap.ContainsKey(pKey) &&
                        (SpecHolder.HolderInstance.OpForKillsTracker.ContainsKey(pKey)))
                    {
                        foreach (var opforSpec in SpecManager.ManagerInstance.OpForSpecList)
                        {
                            if (opforSpec.killsRequired == 0)
                            {
                                ModInit.modLog.LogMessage(
                                    $"{opforSpec.OpForSpecName} has 0 required kills set, ignoring.");
                                continue;
                            }

                            if ((SpecHolder.HolderInstance.OpForSpecMap[pKey].Count - taggedOPSpecCt <
                                 ModInit.modSettings.MaxOpForSpecializations) ||
                                (!ModInit.modSettings.OpForTiersCountTowardMax &&
                                 (opforspecCollapsed.Count - taggedOPSpecCt <
                                  ModInit.modSettings.MaxOpForSpecializations) ||
                                 opforspecCollapsed.Contains(opforSpec.factionID)))
                            {
                                foreach (var opfor in new List <string>(SpecHolder.HolderInstance.OpForKillsTracker[pKey]
                                                                        .Keys))
                                {
                                    if (SpecHolder.HolderInstance.OpForKillsTracker[pKey][opfor] >=
                                        opforSpec.killsRequired && opfor == opforSpec.factionID && !SpecHolder
                                        .HolderInstance.OpForSpecMap[pKey].Contains(opforSpec.OpForSpecID))
                                    {
                                        ModInit.modLog.LogMessage(
                                            $"{p.Callsign} has achieved {opforSpec.OpForSpecName} against {opforSpec.factionID}!");
                                        SpecHolder.HolderInstance.OpForSpecMap[pKey].Add(opforSpec.OpForSpecID);
                                        if (!opforspecCollapsed.Contains(opforSpec.factionID))
                                        {
                                            opforspecCollapsed.Add(opforSpec.factionID);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ModInit.modLog.LogMessage(
                                    $"{p.Callsign} already has the maximum, {opforspecCollapsed.Count}/{ModInit.modSettings.MaxOpForSpecializations}, OpFor Specializations!");
                            }
                        }
                    }
                }

                SpecHolder.HolderInstance.totalBounty = SpecHolder.HolderInstance.kills * SpecHolder.HolderInstance.bounty;
                ModInit.modLog.LogMessage($"{SpecHolder.HolderInstance.totalBounty} in bounties awarded.");

                var employerRep    = Mathf.RoundToInt(__instance.EmployerReputationResults * employerRepMult);
                var targetRep      = Mathf.RoundToInt(__instance.TargetReputationResults * targetRepMult);
                var contractPayout = Mathf.RoundToInt((__instance.MoneyResults * contractPayOutMult) + SpecHolder.HolderInstance.totalBounty);

                ModInit.modLog.LogMessage($"Employer Reputation Change: {__instance.EmployerReputationResults} x {employerRepMult} = {employerRep}");
                ModInit.modLog.LogMessage($"Target Reputation Change: {__instance.TargetReputationResults} x {targetRepMult} = {targetRep}");
                ModInit.modLog.LogMessage($"Contract Payout: ({__instance.MoneyResults} x {contractPayOutMult}) + {SpecHolder.HolderInstance.totalBounty} = {contractPayout}");


                Traverse.Create(__instance).Property("EmployerReputationResults").SetValue(employerRep);
                Traverse.Create(__instance).Property("TargetReputationResults").SetValue(targetRep);
                Traverse.Create(__instance).Property("MoneyResults").SetValue(contractPayout);

                SpecHolder.HolderInstance.OpForKillsTEMPTracker = new Dictionary <string, Dictionary <string, int> >();
            }
コード例 #26
0
ファイル: VoteMissionCommand.cs プロジェクト: AbsolutD/avalon
 public VoteMissionCommand(int playerId, MissionResult missionVote)
 {
     PlayerId    = playerId;
     MissionVote = missionVote;
 }
コード例 #27
0
 public abstract System PostMissionResult(MissionResult mresult, string CompanyName);
コード例 #28
0
    IEnumerator interpretationEvent()
    {
        catIndex = 0;
        dogIndex = 0;
        if (PuzzleManager.stageInfo.hasCat)
        {
            catArrow.gameObject.SetActive(true);
        }
        if (PuzzleManager.stageInfo.hasDog)
        {
            dogArrow.gameObject.SetActive(true);
        }
        yield return(new WaitForSeconds(catArrow.duration + secondsBetweenMoves));

        while (catIndex < catInstructionList.list.Count || dogIndex < dogInstructionList.list.Count)
        {
            Utils.InstructionType catAction = Utils.InstructionType.WAIT, dogAction = Utils.InstructionType.WAIT;
            if (PuzzleManager.stageInfo.hasCat && catIndex < catInstructionList.list.Count)
            {
                catArrow.target = catIndex;
            }
            if (PuzzleManager.stageInfo.hasDog && dogIndex < dogInstructionList.list.Count)
            {
                dogArrow.target = dogIndex;
            }
            if (catIndex < catInstructionList.list.Count)
            {
                catAction = catInstructionList.list[catIndex].GetComponent <InstructionListNode>().instructionType;
            }
            if (dogIndex < dogInstructionList.list.Count)
            {
                dogAction = dogInstructionList.list[dogIndex].GetComponent <InstructionListNode>().instructionType;
            }
            if (willCollide(catAction, dogAction))
            {
                missionFailed = true;
            }
            if (missionFailed)
            {
                break;
            }
            if (catIndex < catInstructionList.list.Count)
            {
                switch (catAction)
                {
                case Utils.InstructionType.MOVE_U:
                    moveCat('U');
                    break;

                case Utils.InstructionType.MOVE_L:
                    moveCat('L');
                    break;

                case Utils.InstructionType.MOVE_R:
                    moveCat('R');
                    break;

                case Utils.InstructionType.MOVE_D:
                    moveCat('D');
                    break;

                case Utils.InstructionType.GRAB_U:
                    StartCoroutine(grabCat('U'));
                    break;

                case Utils.InstructionType.GRAB_L:
                    StartCoroutine(grabCat('L'));
                    break;

                case Utils.InstructionType.GRAB_R:
                    StartCoroutine(grabCat('R'));
                    break;

                case Utils.InstructionType.GRAB_D:
                    StartCoroutine(grabCat('D'));
                    break;

                case Utils.InstructionType.WAIT:
                    waitCat();
                    if (!catIsWaiting)
                    {
                        continue;
                    }
                    break;
                }
                if (!catIsWaiting)
                {
                    catNextStep();
                }
            }
            if (dogIndex < dogInstructionList.list.Count)
            {
                switch (dogAction)
                {
                case Utils.InstructionType.MOVE_U:
                    moveDog('U');
                    break;

                case Utils.InstructionType.MOVE_L:
                    moveDog('L');
                    break;

                case Utils.InstructionType.MOVE_R:
                    moveDog('R');
                    break;

                case Utils.InstructionType.MOVE_D:
                    moveDog('D');
                    break;

                case Utils.InstructionType.GRAB_U:
                    StartCoroutine(grabDog('U'));
                    break;

                case Utils.InstructionType.GRAB_L:
                    StartCoroutine(grabDog('L'));
                    break;

                case Utils.InstructionType.GRAB_R:
                    StartCoroutine(grabDog('R'));
                    break;

                case Utils.InstructionType.GRAB_D:
                    StartCoroutine(grabDog('D'));
                    break;

                case Utils.InstructionType.WAIT:
                    waitDog();
                    if (!dogIsWaiting)
                    {
                        continue;
                    }
                    break;
                }
                if (!dogIsWaiting)
                {
                    dogNextStep();
                }
            }
            if (catIsWaiting && dogIndex >= dogInstructionList.list.Count)
            {
                missionFailed = true;
                missionResult = MissionResult.Condition.CAT_WAITING_FAIL;
                break;
            }
            if (dogIsWaiting && catIndex >= catInstructionList.list.Count)
            {
                missionFailed = true;
                missionResult = MissionResult.Condition.DOG_WAITING_FAIL;
                break;
            }
            yield return(new WaitForSeconds(secondsPerMove + secondsBetweenMoves));
        }

        yield return(new WaitForSeconds(1f));

        if (!missionFailed)
        {
            missionResult = MissionResult.checkMissionResult(puzzleManager, catIsHoldingKind, dogIsHoldingKind);
            if (missionResult != MissionResult.Condition.SUCCESS)
            {
                missionFailed = true;
            }
        }
        endMenu.SetActive(true);
        foreach (Text child in endMenu.GetComponentsInChildren <Text>())
        {
            if (child.name == "ResultText")
            {
                child.text = MissionResult.conditionNames[missionResult];
            }
        }

        if (missionResult == MissionResult.Condition.SUCCESS)
        {
            SaveManager.SetFinishedMap(PuzzleManager.stageInfo.name.Substring("PuzzleStage".Length));
        }

        isInterpreting = false;
        yield break;
    }
コード例 #29
0
 public System PostMissionResultDepricated5(MissionResult mresult)
 {
     logger.Warn("WARNING: Deprecated method invoked: PostMissionResultDepricated5");
     return(PostMissionResult(mresult, "UNKNOWN"));
 }
コード例 #30
0
 public override bool MissionEnded(ref MissionResult missionResult) => this.Mission.MainAgent != null && !this.Mission.MainAgent.IsActive();