Advertisement
Guest User

UPMod Bug Fixes #7

a guest
Jul 16th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.80 KB | None | 0 0
  1. [ModifiesType]
  2.     public class mod_GameState : GameState
  3.     {
  4.         [ModifiesMember("UpdateIsInCombatAndGameOver")]
  5.         public void mod_UpdateIsInCombatAndGameOver()
  6.         {
  7.             if (GameState.ForceCombatMode)
  8.             {
  9.                 global::Console.AddMessage("ForceCombatMode is TRUE", Color.blue);
  10.                 GameState.s_isInCombat = true;
  11.                 Stealth.GlobalSetInStealthMode(false);
  12.                 return;
  13.             }
  14.             if (GameState.s_firstLoad)
  15.             {
  16.                 return;
  17.             }
  18.             if (GameState.s_inRestMode)
  19.             {
  20.                 if (GameState.OnResting != null)
  21.                 {
  22.                     GameState.OnResting(null, EventArgs.Empty);
  23.                 }
  24.                 GameState.s_inRestMode = false;
  25.                 return;
  26.             }
  27.             if (GameState.Paused)
  28.             {
  29.                 return;
  30.             }
  31.             if (GameState.s_playerCharacter == null)
  32.             {
  33.                 return;
  34.             }
  35.             if (GameState.s_outOfCombatTimer > 0f)
  36.             {
  37.                 GameState.s_outOfCombatTimer -= Time.deltaTime;
  38.             }
  39.             if (GameState.s_isInCombat && GameState.s_combatPauseTimer > 0f)
  40.             {
  41.                 GameState.s_combatPauseTimer -= Time.deltaTime;
  42.             }
  43.             if (GameState.s_isInCombat)
  44.             {
  45.                 GameState.s_inCombatTimer += Time.deltaTime;
  46.             }
  47.             if (GameState.s_noSaveInCombatCountdown > 0)
  48.             {
  49.                 GameState.s_noSaveInCombatCountdown--;
  50.             }
  51.             GameObject target = null;
  52.             bool flag = GameState.s_isInCombat;
  53.             bool flag2 = false;
  54.             if (Faction.ActiveFactionComponents.Count == 0)
  55.             {
  56.                 return;
  57.             }
  58.             AIController activeCombatant = GameState.GetActiveCombatant(false);
  59.             if (activeCombatant)
  60.             {
  61.                 target = activeCombatant.CurrentTarget;
  62.                 GameState.s_isInCombat = true;
  63.                 flag2 = true;
  64.                 GameState.s_outOfCombatTimer = CharacterStats.StaminaRechargeDelay;
  65.             }
  66.             // PATCH START:
  67.             // RELATED BUGS: #7
  68.             else if (s_playerCharacter != null)
  69.             {
  70.                 // going invisible (e.g. Shadowing Beyond, Withdraw) should not reset combat for solo players;
  71.                 // combat should end only if there are no enemies in range
  72.  
  73.                 CharacterStats playerStats = s_playerCharacter.gameObject.GetComponent<CharacterStats>();
  74.                 AIController aIController = GameUtilities.FindActiveAIController(s_playerCharacter.gameObject);
  75.                 bool prolongCombat = false;            
  76.  
  77.                 if (aIController && playerStats && playerStats.IsInvisible)
  78.                 {
  79.                     float range = Math.Max(aIController.PerceptionDistance, 12);
  80.                     List<GameObject> enemies = new List<GameObject>();
  81.                     GameUtilities.GetEnemiesInRange(s_playerCharacter.gameObject, aIController, range, enemies, false);
  82.                     prolongCombat = enemies.Count > 0;                    
  83.                 }
  84.  
  85.                 if (prolongCombat)
  86.                 {
  87.                     flag2 = true;
  88.                     GameState.s_isInCombat = true;                    
  89.                     GameState.s_outOfCombatTimer = CharacterStats.StaminaRechargeDelay;
  90.                 }
  91.             }
  92.             // PATCH END
  93.  
  94.             GameState.s_isInCombat = (GameState.s_outOfCombatTimer > 0f);
  95.  
  96.             if (GameState.s_isInCombat && GameState.s_combatPauseTimer <= 0f)
  97.             {
  98.                 GameState.AutoPause(AutoPauseOptions.PauseEvent.CombatTimer, null, null, null);
  99.                 GameState.s_combatPauseTimer = GameState.Option.AutoPause.CombatRoundTime;
  100.             }
  101.             if (GameState.s_isInCombat != flag || (flag2 && GameState.s_isInTrapTriggeredCombat))
  102.             {
  103.                 GameState.s_inCombatTimer = 0f;
  104.                 if (GameState.s_isInCombat)
  105.                 {
  106.                     GameState.s_isInTrapTriggeredCombat = false;
  107.                     if (!GameState.s_isInTrapTriggeredCombat)
  108.                     {
  109.                         TutorialManager.STriggerTutorialsOfTypeFast(TutorialManager.ExclusiveTriggerType.COMBAT_START);
  110.                     }
  111.                     if (GameState.OnCombatStart != null)
  112.                     {
  113.                         GameState.OnCombatStart(null, EventArgs.Empty);
  114.                     }
  115.                     if (!GameState.s_isInTrapTriggeredCombat)
  116.                     {
  117.                         GameState.AutoPause(AutoPauseOptions.PauseEvent.CombatStart, target, null, null);
  118.                     }
  119.                 }
  120.                 else
  121.                 {
  122.                     GameState.s_combatPauseTimer = 0f;
  123.                     GameState.s_noSaveInCombatCountdown = 10;
  124.                     if (GameState.OnCombatEnd != null)
  125.                     {
  126.                         GameState.OnCombatEnd(null, EventArgs.Empty);
  127.                     }
  128.                     GameState.s_isInTrapTriggeredCombat = false;
  129.                 }
  130.             }
  131.             if (!GameState.s_gameOver && GameState.PartyDead)
  132.             {
  133.                 GameState.s_gameOver = true;
  134.                 GameState.s_deadTimer = 2f;
  135.             }
  136.             if (GameState.s_gameOver && GameState.s_deadTimer > 0f)
  137.             {
  138.                 GameState.s_deadTimer -= Time.deltaTime;
  139.                 if (GameState.s_deadTimer <= 0f)
  140.                 {
  141.                     GameState.s_deadTimer = 0f;
  142.                     UIDeathManager.Instance.ShowWindow();
  143.                 }
  144.             }
  145.         }
  146.  
  147.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement