using System; using System.Collections; using System.Collections.Generic; using DarkTonic.MasterAudio; using Pathfinding; using PixelCrushers.DialogueSystem; using UnityEngine; // Token: 0x02000044 RID: 68 public class PuzzleActions : MonoBehaviour { // Token: 0x06000872 RID: 2162 RVA: 0x000B8670 File Offset: 0x000B6870 private void Start() { if (!this.puzzle) { this.puzzle = base.gameObject.GetComponent(); } this.id = this.puzzle.puzzleID; if (this.id == "Break Circle" && !this.hasCollider) { this.LoadPuzzleInfo(); } } // Token: 0x06000873 RID: 2163 RVA: 0x000B86CC File Offset: 0x000B68CC public void CombatSheen(int num) { } // Token: 0x06000874 RID: 2164 RVA: 0x000B86D0 File Offset: 0x000B68D0 private void Update() { if (this.id == "C6_WeightPuzzle" || this.id == "D5_WeightPuzzle") { int count = this.listenersUp.Count; for (int i = 0; i < count; i++) { this.listenersUp[i].CheckItems(); } this.CheckWeightCharacters(); if (this.updateWeight > 0) { this.ChangeWeight(); this.updateWeight++; if (this.updateWeight > 20) { this.updateWeight = 0; } } } if (this.id == "WestRuinsFort" && Links.x.gaia.sceneLoaded && !Records.x.removeControls && this.loaded && (!this.hasClearedFort || !this.alliesAreGone || !this.rousedFort)) { bool flag = this.SeenByFortCreature(); if (flag && !this.inFort) { this.StartFort(); } if (!flag && this.inFort) { this.FortChecks(); this.EndFort(); } if (flag) { this.FortChecks(); } else if (this.rousedFort && Links.x.gameplay.seconds > this.timeSinceLeftCombat + 10000f) { this.rousedFort = false; this.gaveWarning = false; if (this.lookout) { this.lookout.hostility = 1; } Debug.Log("Lookout returned to non-hostile state"); } if (this.hasClearedFort && !this.alliesAreGone && !this.inFort) { this.CheckIfAlliesShouldLeave(); } } } // Token: 0x06000875 RID: 2165 RVA: 0x000B8868 File Offset: 0x000B6A68 public void SetLayers(int x) { if (x == 6) { if (this.layers == null) { this.layers = new List(); for (int i = 0; i < this.renderers.Length; i++) { if (this.renderers[i]) { this.layers.Add(this.renderers[i].gameObject.layer); if (this.renderers[i].gameObject.layer != 29) { this.renderers[i].gameObject.layer = 6; } } else { this.layers.Add(0); } } return; } } else { for (int j = 0; j < this.renderers.Length; j++) { if (this.renderers[j]) { this.renderers[j].gameObject.layer = this.layers[j]; } } } } // Token: 0x06000876 RID: 2166 RVA: 0x000B894C File Offset: 0x000B6B4C public void Clicked(Character party) { if (this.id == "ChalkRubbing") { if (!Records.x.InCombat(false)) { Links.x.dialogue.puzzleActions = this; Links.x.gameplay.StartDialogue(party, party, null, null, "Party/ChalkRubbing"); } else { Links.x.gameFeed.ShowNotice("Not during combat"); } } if (this.id.Contains("Bell")) { if (this.callForHelp) { this.callForHelp.CallForHelp(); } base.gameObject.transform.GetChild(0).gameObject.GetComponent().PlayAgain(); Links.x.main.PlayAnimation("Kick", 0f); MasterAudio.PlaySound3DAtVector3AndForget("Interactives", Links.x.main.currentPosition, 1.75f, new float?(1f), 0f, "Bell", null); } if (this.id == "Birch") { if (!Records.x.InCombat(false)) { Links.x.dialogue.puzzleActions = this; Links.x.gameplay.StartDialogue(party, party, null, null, "Party/BirchTree"); } else { Links.x.gameFeed.ShowNotice("Not during combat"); } } if (this.id == "ForfeitsBoard") { if (!Records.x.InCombat(false)) { Links.x.forfeits.StartMenu(); } else { Links.x.gameFeed.ShowNotice("Not during combat"); } } if (this.id == "Text") { string displayText = this.puzzle.displayText; string text = ""; if (displayText == "RozafirSign1") { text = "Rozafir lies east"; } if (displayText == "RozafirSign2") { text = "Southeast to Din Sera"; } if (displayText == "RozafirSign3") { text = "Lazure Lighthouse is north of here"; } if (displayText == "RozafirSign4") { text = "The Forten lies straight west"; } if (displayText == "WaterfallsSign1") { text = "Rozafir to the west"; } if (displayText == "WaterfallsSign2") { text = "South to Din Sera"; } if (displayText == "WaterfallsSign3") { text = "East to Din Varens"; } if (text != "") { Links.x.main.StartQuip(text); } this.HoverOut(); } if (this.id.Contains("SemizenStatue")) { if (!Records.x.InCombat(false)) { Links.x.dialogue.puzzleActions = this; Links.x.gameplay.StartDialogue(party, party, null, null, "Party/SemizenStatue_" + this.puzzle.sceneName); } else { Links.x.gameFeed.ShowNotice("Not during combat"); } } if (this.id == "Revive") { if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(party, true); base.StartCoroutine(this.clickActionCoroutine); } if (this.id == "Break Circle") { Links.x.fellowship.BreakCircle(false); } if (this.id.Contains("FairyCircle")) { if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(party, true); base.StartCoroutine(this.clickActionCoroutine); } if (this.id.Contains("C6_Tomb_") || this.id.Contains("D5_Tomb_")) { if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(party, true); base.StartCoroutine(this.clickActionCoroutine); } } // Token: 0x06000877 RID: 2167 RVA: 0x000B8D2C File Offset: 0x000B6F2C public void ClickedFromPrompt(PromptActions prompt) { if (this.id.Contains("FairyCircle")) { this.promptActions = prompt; if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(Links.x.main, true); base.StartCoroutine(this.clickActionCoroutine); } if (this.id.Contains("Fence") || this.id.Contains("Password")) { this.promptActions = prompt; if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(Links.x.main, true); base.StartCoroutine(this.clickActionCoroutine); } if (this.id.Contains("GoblinHole")) { this.promptActions = prompt; if (this.clickActionCoroutine == null) { this.clickActionCoroutine = this.ClickActions(prompt.hitCharacters[0], true); base.StartCoroutine(this.clickActionCoroutine); } } if (this.id.Contains("C6_Cave_ShroomerMushes")) { this.promptActions = prompt; if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(Links.x.main, false); base.StartCoroutine(this.clickActionCoroutine); } if (this.id.Contains("C6_DryadFlower") && QuestLog.GetQuestState("C6_DryadWitchFlower") == QuestState.ActivePart2) { this.promptActions = prompt; if (this.clickActionCoroutine != null) { base.StopCoroutine(this.clickActionCoroutine); } this.clickActionCoroutine = this.ClickActions(Links.x.main, false); base.StartCoroutine(this.clickActionCoroutine); } } // Token: 0x06000878 RID: 2168 RVA: 0x000B8EE8 File Offset: 0x000B70E8 private bool FairyShout(string keyWord1, string keyWord2, string keyWord3) { string text = Records.x.recentShout.ToLower(); return text.Contains(keyWord1) && text.Contains(keyWord2) && text.Contains(keyWord3) && Time.timeSinceLevelLoad < Records.x.lastShoutTime + 10f; } // Token: 0x06000879 RID: 2169 RVA: 0x000B8F3A File Offset: 0x000B713A private bool Password(string keyWord1) { return Records.x.recentShout.ToLower().Contains(keyWord1) && Time.timeSinceLevelLoad < Records.x.lastShoutTime + 3f; } // Token: 0x0600087A RID: 2170 RVA: 0x000B8F6D File Offset: 0x000B716D private IEnumerator ClickActions(Character party, bool waitToTurn) { if (waitToTurn) { party.SetRotation(Quaternion.LookRotation(base.transform.position - party.tr.position), false, false); yield return new WaitForEndOfFrame(); while (party.turning) { yield return null; } } if (this.id == "Revive") { Links.x.qte.playing = true; Links.x.qte.quickStart = true; Links.x.qte.StartQTE("Revive", 1f); while (Links.x.qte.playing) { yield return null; } if (Links.x.qte.completed && Links.x.qte.bonus > 0f) { yield return new WaitForSeconds(1f); this.currentHealth = (int)Links.x.qte.bonus; this.interactCharacter.PartyResurrect(this.currentHealth); GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(105); float num = this.interactCharacter.torsoPosition.y - this.interactCharacter.currentPosition.y; num = Mathf.Clamp(num, 0.5f, 1f); pooledGameObject.transform.position = this.interactCharacter.currentPosition + new Vector3(0f, num, 0f); pooledGameObject.transform.localScale = Vector3.one * this.interactCharacter.stats.characterRow._Height; pooledGameObject.SetActive(true); pooledGameObject.transform.SetParent(this.interactCharacter.tr, true); pooledGameObject.GetComponent().Play("Pickup"); } } if (this.id.Contains("FairyCircle")) { bool stop = false; string keyword = ""; string keyword2 = ""; string keyword3 = ""; if (Links.x.diorama.sceneName.Contains("C6")) { keyword = "ila"; keyword2 = "por"; keyword3 = "vex"; } else if (Links.x.diorama.sceneName.Contains("C5")) { keyword = "lis"; keyword2 = "fal"; keyword3 = "ero"; } else if (Links.x.diorama.sceneName.Contains("E6")) { keyword = "sea"; keyword2 = "mar"; keyword3 = "fin"; } while (!this.FairyShout(keyword, keyword2, keyword3) && Links.x.GetNearestParty(this.promptActions.gameObject.transform.position, null, 400f)) { yield return null; } if (!Links.x.GetNearestParty(this.promptActions.gameObject.transform.position, null, 400f)) { stop = true; } if (!this.FairyShout(keyword, keyword2, keyword3)) { stop = true; } if (!stop) { yield return new WaitForSeconds(1f); while (Records.x.inMenus) { yield return null; } this.promptActions.state = 1; if (Links.x.diorama.sceneName.Contains("C6") && QuestLog.GetQuestState("C6_Fairy") == QuestState.Unassigned) { QuestLog.SetQuestState("C6_Fairy", "active"); Links.x.diorama.CheckQuestActivations(); } if (Links.x.diorama.sceneName.Contains("C5") && QuestLog.GetQuestState("C5_Fairy") == QuestState.Unassigned) { QuestLog.SetQuestState("C5_Fairy", "active"); Links.x.diorama.CheckQuestActivations(); } if (Links.x.diorama.sceneName.Contains("E6") && QuestLog.GetQuestState("E6_Fairy") == QuestState.Unassigned) { QuestLog.SetQuestState("E6_Fairy", "active"); Links.x.diorama.CheckQuestActivations(); } Character fairy = Links.x.diorama.FindCharacterAnyState("Fairy"); Links.x.gameplay.TogglePause(false); fairy.ignoreNodeIDs = true; fairy.ignoreRemoveControls = true; Records.x.RemoveControls(true); Links.x.main.ClearNodePath(); Links.x.main.alwaysTurn = true; Links.x.main.inAction = true; Links.x.main.inActionTime = Links.x.gameplay.seconds; Links.x.main.SetRotation(Quaternion.LookRotation(fairy.tr.position - party.tr.position), false, false); fairy.SetPosition(fairy.creatures.GetActivation().position, null); fairy.SetMeshState(true); fairy.body.SetMeshState(true, true); fairy.ambushing = true; fairy.SetPosition(fairy.creatures.GetActivation().position, null); Links.x.rtsCamera.Follow(this.promptActions.gameObject.transform, null, false); Links.x.rtsCamera.Zoom(true, ""); float timeToLerp = 0.25f; float percentage = 0f; float startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; fairy.SetPosition(fairy.creatures.GetActivation().position, null); yield return null; } MasterAudio.PlaySoundAndForget("Feedback", 0.5f, new float?(1f), 0f, "Song Learned", null); Vector3 pt = (Vector3)fairy.creatures.GetWalkNodeIndex(0).position; fairy.Jump(fairy.creatures.GetWalkNodeIndex(0), pt, false, false); fairy.SetMeshState(true); fairy.body.SetMeshState(true, true); yield return new WaitForSeconds(0.5f); GameObject spellCasterFX = Links.x.cellar.GetPooledGameObject(69); spellCasterFX.transform.position = pt + new Vector3(0f, 0.5f, 0f); spellCasterFX.SetActive(true); yield return new WaitForSeconds(2f); fairy.ambushing = false; Links.x.dialogue.puzzleActions = this; Links.x.gameplay.StartDialogue(fairy, party, null, null, "Party/FairyCircle"); while (Records.x.dialogue) { yield return null; } fairy.Missing(); Links.x.cellar.ReturnPooledGameObject(69, spellCasterFX); Links.x.rtsCamera.Zoom(false, ""); Records.x.RemoveControls(false); Links.x.main.inAction = false; fairy = null; pt = default(Vector3); spellCasterFX = null; } keyword = null; keyword2 = null; keyword3 = null; } else if (this.id.Contains("Fence") || this.id.Contains("Password")) { bool stop = false; string keyword3 = ""; if (Links.x.diorama.sceneName.Contains("D6")) { keyword3 = "anthramin"; } Debug.Log("Password listen"); while (!this.Password(keyword3) && Links.x.GetNearestParty(this.promptActions.gameObject.transform.position, null, 400f)) { yield return null; } if (!Links.x.GetNearestParty(this.promptActions.gameObject.transform.position, null, 400f)) { stop = true; } if (!this.Password(keyword3)) { stop = true; } Debug.Log(stop); if (!stop) { while (Records.x.inMenus) { yield return null; } this.promptActions.state = 1; string text = ""; if (this.id.Contains("D6_Fence")) { text = "RozafirUndergroundMerchant"; } Character fairy = Links.x.diorama.FindCharacterAnyState(text); if (fairy) { Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(true); Links.x.main.ClearNodePath(); Links.x.main.alwaysTurn = true; Links.x.main.SetRotation(Quaternion.LookRotation(fairy.tr.position - party.tr.position), false, false); Links.x.rtsCamera.Follow(this.promptActions.gameObject.transform, null, false); Links.x.rtsCamera.Zoom(true, ""); yield return new WaitForSeconds(1f); MasterAudio.PlaySoundAndForget("Feedback", 0.5f, new float?(1f), 0f, "Song Learned", null); GameObject spellCasterFX = Links.x.cellar.GetPooledGameObject(69); spellCasterFX.transform.position = fairy.tr.position + new Vector3(0f, 0.5f, 0f); spellCasterFX.SetActive(true); if (this.id.Contains("D6_Fence")) { fairy.StartQuip("Let's do business, friend"); } yield return new WaitForSeconds(2f); if (this.id.Contains("D6_Fence")) { Links.x.dialogue.Peddler(fairy); QuestLog.SetQuestState("D6_Fence", QuestState.Active); } if (false) { Links.x.dialogue.puzzleActions = this; Links.x.gameplay.StartDialogue(fairy, party, null, null, "Party/FairyCircle"); while (Records.x.dialogue) { yield return null; } } this.completed = true; if (this.coll) { this.coll.enabled = false; } Links.x.cellar.ReturnPooledGameObject(69, spellCasterFX); Links.x.rtsCamera.Zoom(false, ""); Records.x.RemoveControls(false); spellCasterFX = null; } fairy = null; } keyword3 = null; } else if (this.id.Contains("C6_Tomb_") || this.id.Contains("D5_Tomb_")) { this.partyList = Links.x.portraitOrder; string text2 = "LazureTombKeyBlue"; if (this.id.Contains("Green")) { text2 = "LazureTombKeyGreen"; } if (this.id.Contains("White")) { text2 = "LazureTombKeyWhite"; } int invRowID = Links.x.library.GetInvRowID(text2); bool flag = false; foreach (Character character in this.partyList) { if (!flag && character.HasItem(invRowID) > -1) { flag = true; } } if (flag) { if (this.puzzle.animator.GetCurrentAnimatorStateInfo(0).IsName("LachoGear_activate")) { this.puzzle.animator.Play("LachoGear_deactivate"); this.completed = false; } else { this.puzzle.animator.Play("LachoGear_activate"); this.completed = true; } this.UpdateAstar(4.5f, true); } else { party.StartQuip("Looks like a tumbler lock"); } } else if (this.id.Contains("C6_Cave_ShroomerMushes")) { List tileEffects = new List(); BreakableActions breakie = GameObject.Find("Breaky_ShroomerPuzzle").GetComponent(); breakie.GetDifferentRenderers(this.puzzle.animator.gameObject); float startTime = (float)breakie.currentHealth; while (!Links.x.gaia.sceneLoaded) { yield return null; } while (this.promptActions.HitCharacterCount() > 0 && breakie.currentHealth > 0) { int num2 = 0; for (int i = 0; i < tileEffects.Count; i++) { if (tileEffects[i]) { num2++; } } if (num2 < 10 && !Records.x.pocketPause) { NNConstraint nnconstraint = new NNConstraint(); nnconstraint.constrainWalkability = true; nnconstraint.walkable = true; nnconstraint.constrainTags = true; nnconstraint.checkCircleID = 0; nnconstraint.passID = 0; nnconstraint.passID2 = 0; nnconstraint.constrainPenalty = 0; nnconstraint.checkConnections = 0; nnconstraint.constrainToArea = (int)Links.x.main.node.Area; nnconstraint.constrainToEnvironment = 1; GraphNode graphNode = AstarPath.active.GetNearest(Links.x.main.tr.position + new Vector3(Random.Range(-5f, 5f), 0f, Random.Range(-5f, 5f)), nnconstraint).node; if (graphNode != null) { this.puzzle.animator.Play("MushHeart_PumpEnemy"); TileEffects tileEffects2 = Links.x.tileEffects.AddComponent(); string text3 = "MushroomTrap"; string text4 = "PaganScroll7"; if ((float)breakie.currentHealth / (float)breakie.breakable.health < 0.5f && Random.Range(0, 4) == 0) { text3 = "MushroomTrapDifficult"; text4 = "PaganScroll8"; } Library.Pagan paganRow = Links.x.library.GetPaganRow(text3); tileEffects.Add(tileEffects2); tileEffects2.startNode = graphNode; tileEffects2.gameObject.SetActive(true); tileEffects2.severity = 0f; tileEffects2.spellIndex = 7; tileEffects2.paganRow = paganRow; tileEffects2.mainSkill = "Fauna"; tileEffects2.tether = 20f; tileEffects2.sourceLevel = 0f; tileEffects2.doSpellScroll = true; tileEffects2.spellScroll = Links.x.library.GetInvRowFromName(text4); tileEffects2.Setup(Links.x.library.GetAbilityRow(text3), null, null, null, null, null); MasterAudio.PlaySound3DAtVector3AndForget("Swarm", (Vector3)graphNode.position, 1f, new float?(1f), 0f, "", null); } } float percentage = Random.Range(30f, 100f); float timeToLerp = 0f; float startTime2 = Links.x.gameplay.seconds; while (timeToLerp < 1f && breakie.currentHealth > 0) { timeToLerp = (Links.x.gameplay.seconds - startTime2) / percentage; if (startTime != (float)breakie.currentHealth) { this.puzzle.animator.Play("MushHeart_Hit"); } startTime = (float)breakie.currentHealth; yield return null; } } if (breakie.currentHealth <= 0) { this.promptActions.state = 1; this.puzzle.animator.gameObject.SetActive(false); } tileEffects = null; breakie = null; } else if (this.id.Contains("C6_DryadFlower")) { Debug.Log("start dryad flower cinematic"); Links.x.characterSheet.StartEndMenu(false, true); Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(true); yield return new WaitForSeconds(0.5f); Links.x.rtsCamera.Zoom(true, "Dialogue"); yield return new WaitForSeconds(1f); MasterAudio.PlaySound3DAtVector3AndForget("SpellcastingVol", Links.x.main.tr.position, 1f, new float?(1f), 0.25f, "", null); GameObject spellCasterFX = Links.x.cellar.GetPooledGameObject(69); spellCasterFX.transform.position = Links.x.main.tr.position + new Vector3(0f, 0.2f, 0f); spellCasterFX.SetActive(true); yield return new WaitForSeconds(3f); Links.x.main.StartQuip("It'll need a little time to grow"); MasterAudio.PlaySoundAndForget("Feedback", 0.5f, new float?(1f), 0f, "Song Learned", null); Links.x.gameFeed.AddFeed("A seed is planted"); string text5 = "C6_DryadWitchFlower"; string text6 = "activePart2"; string text7 = "success"; int num3 = 6; bool flag2 = false; Records.x.AddQuestToTimer(text5, (float)num3, text6, text7, flag2); this.promptActions.state = 1; yield return new WaitForSeconds(3f); if (spellCasterFX) { Links.x.cellar.ReturnPooledGameObject(69, spellCasterFX); spellCasterFX = null; } Links.x.rtsCamera.Zoom(false, "Dialogue"); Records.x.RemoveControls(false); spellCasterFX = null; } else if (this.id.Contains("GoblinHole")) { while (Records.x.inMenus || Links.x.combat.inPocketAttack || Records.x.removeControls || Records.x.saving) { yield return null; } Character fairy = party; Links.x.combat.EndCombat(true); if (Links.x.main != fairy) { fairy.SetAsLeader(); } yield return new WaitForSeconds(0.01f); Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(true); fairy.ClearNodePath(); fairy.alwaysTurn = true; fairy.SetRotation(Quaternion.LookRotation(this.promptActions.gameObject.transform.position - fairy.tr.position), false, false); Links.x.rtsCamera.Follow(this.promptActions.gameObject.transform, null, false); Links.x.rtsCamera.Zoom(true, ""); fairy.animator.Play("Jump_start"); Vector3 pt = this.promptActions.gameObject.transform.position; Vector3 jumpPointDown = pt; jumpPointDown.y -= 8f; Vector3 startPosition = fairy.tr.position; AudioClip slide = Resources.Load("Dialogue Sounds/Slide"); AudioSource audioSource = base.gameObject.AddComponent(); audioSource.spatialBlend = 1f; audioSource.loop = false; audioSource.playOnAwake = false; audioSource.maxDistance = 40f; audioSource.volume = Links.x.options.soundVolume; audioSource.priority = 1; audioSource.clip = slide; audioSource.Play(); float startTime = 0.25f; float startTime2 = 0f; float timeToLerp = Time.time; while (startTime2 < 1f) { startTime2 = (Time.time - timeToLerp) / startTime; Vector3 vector = Vector3.Lerp(startPosition, pt, startTime2); fairy.SetPosition(vector, null); yield return null; } startPosition = fairy.tr.position; startTime = 0.5f; startTime2 = 0f; timeToLerp = Time.time; while (startTime2 < 1f) { startTime2 = (Time.time - timeToLerp) / startTime; Vector3 vector2 = Vector3.Lerp(startPosition, jumpPointDown, startTime2); fairy.SetPosition(vector2, null); yield return null; } Links.x.gaia.PlayFade("Out", "Scaled"); startPosition = fairy.tr.position; jumpPointDown.y -= 8f; startTime = 0.5f; startTime2 = 0f; timeToLerp = Time.time; while (startTime2 < 1f) { startTime2 = (Time.time - timeToLerp) / startTime; Vector3 vector3 = Vector3.Lerp(startPosition, jumpPointDown, startTime2); fairy.SetPosition(vector3, null); yield return null; } fairy.ClearMoveTargets(); fairy.body.SetMagicaClothState(false); fairy.animator.Play("Idle"); fairy.animID = 0; int num4 = 1; string text8 = "interior_GoblinCave"; int desiredGraph = fairy.desiredGraph; string doorID = fairy.doorID; fairy.desiredGraph = num4; fairy.doorID = text8; fairy.lastDoorID = text8; GraphNode graphNode2 = fairy.NearNode(this.promptActions.transform.GetChild(0).position, true, 0, num4, 0); fairy.SetPosition((Vector3)graphNode2.position, null); Quaternion q = this.promptActions.transform.GetChild(0).rotation; Vector3 vector4 = q.eulerAngles; q.x = 0f; q.z = 0f; vector4.y += 180f; Vector3 vector5 = Quaternion.Euler(vector4) * Vector3.forward * -1f; fairy.ClearNodePath(); fairy.SetRotation(Quaternion.Euler(vector5), false, true); fairy.ClaimNode(graphNode2, (Vector3)graphNode2.position, true); fairy.sphere.transform.position = fairy.tr.position; if (fairy.circleTr) { fairy.circleTr.position = fairy.tr.position; } fairy.SetMoveFollowPosition((Vector3)graphNode2.position); fairy.savedFollowNode = fairy.node; fairy.savedPathTarget = fairy.node; if (num4 == 1) { if (Links.x.diorama.GetIndoorView()) { fairy.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName((Vector3)graphNode2.position); } else { fairy.indoorID = "?"; } } else { fairy.indoorID = ""; } fairy.ChangeTorchLight(); if (Records.x.circle) { Links.x.fellowship.BreakCircle(false); } fairy.FirstPosition(graphNode2); List allParty = Links.x.party; Links.x.rtsCamera.JumpTo(fairy.tr, true); foreach (Character character2 in allParty) { if (character2 && !character2.mainSelected) { Links.x.fellowship.TeleportParty(false); } } fairy.body.SetMagicaClothState(true); fairy.selectedBeforeDoor = false; fairy.EndQuip(); yield return new WaitForSeconds(1f); MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", fairy.currentPosition, 1f, new float?(1f), 0f, "", null); vector4 = q.eulerAngles; vector4.x = 0f; vector4.z = 0f; vector4.y += Random.Range(0f, 180f); fairy.SetRotation(Quaternion.Euler(vector4), false, true); fairy.Bounce(fairy, "Normal Hit", 1f); fairy.animator.Play("Hit_bounce"); foreach (Character c in allParty) { if (c && c != fairy) { float num5 = Random.Range(0.05f, 0.1f); yield return new WaitForSeconds(num5); vector4 = q.eulerAngles; vector4.x = 0f; vector4.z = 0f; vector4.y += Random.Range(0f, 180f); c.SetRotation(Quaternion.Euler(vector4), false, true); c.Bounce(c, "Normal Hit", 1f); c.SetMeshState(true); c.body.SetMeshState(true, false); c.meshAlwaysOn = true; c.animator.Play("Hit_bounce"); MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", fairy.currentPosition, 1f, new float?(1f), 0f, "", null); } c = null; } List.Enumerator enumerator2 = default(List.Enumerator); Links.x.gaia.PlayFade("In", "Scaled"); yield return new WaitForSeconds(1.5f); fairy.StartQuip("Ouch."); Links.x.rtsCamera.Zoom(false, ""); Records.x.RemoveControls(false); if (slide != null) { Resources.UnloadAsset(slide); } Object.Destroy(audioSource); foreach (Character character3 in allParty) { if (character3) { character3.meshAlwaysOn = false; } } fairy = null; pt = default(Vector3); jumpPointDown = default(Vector3); startPosition = default(Vector3); slide = null; audioSource = null; q = default(Quaternion); allParty = null; } else { yield return new WaitForSeconds(0.5f); } this.clickActionCoroutine = null; yield break; yield break; } // Token: 0x0600087B RID: 2171 RVA: 0x000B8F8C File Offset: 0x000B718C public void HoverIn() { if (this.hasCollider) { if (this.id != "Revive" && this.id != "Break Circle") { Links.x.hoverObject = base.gameObject; if (!this.lightPoint) { Shader.SetGlobalVector("_DoorLightPosition", this.coll.bounds.center + Links.x.rtsCamera.gameObject.transform.forward * -2f); } else { Shader.SetGlobalVector("_DoorLightPosition", this.lightPoint.position + Links.x.rtsCamera.gameObject.transform.forward * -2f); } Records.x.hoverLightColor = Color.white * 1f; Shader.SetGlobalFloat("_DoorLightRange", 6f); } int num = 0; if (this.coll) { this.bounds = this.coll.bounds; } else { this.bounds = default(Bounds); if (this.renderers.Length != 0 && this.renderers[0]) { this.bounds = this.renderers[0].bounds; if (this.renderers.Length > 1) { int i = 1; int num2 = this.renderers.Length; while (i < num2) { if (this.renderers[i] && this.renderers[i].gameObject.layer != 29) { this.bounds.Encapsulate(this.renderers[i].bounds); } i++; } } } } if (this.id == "Birch" && Links.x.worldCamera.orthographic) { this.bounds.Expand(new Vector3(-15f, -6f, -15f)); } if (!this.bracket) { this.bracket = Links.x.cellar.GetBracket(num, this.bounds); return; } Links.x.cellar.SetBracketMaterial(num, this.bracket); } } // Token: 0x0600087C RID: 2172 RVA: 0x000B91DC File Offset: 0x000B73DC public void HoverOut() { if (this.hasCollider) { if (Links.x.hoverObject == base.gameObject || Links.x.hoverObject == null) { Links.x.hoverObject = null; } if (this.bracket) { Links.x.cellar.ReturnPooledGameObject(61, this.bracket); this.bracket = null; } } } // Token: 0x0600087D RID: 2173 RVA: 0x000B9250 File Offset: 0x000B7450 public void ClickToBreak() { } // Token: 0x0600087E RID: 2174 RVA: 0x000B9252 File Offset: 0x000B7452 public void Damage() { } // Token: 0x0600087F RID: 2175 RVA: 0x000B9254 File Offset: 0x000B7454 public void InRange() { if (this.hasCollider) { if (this.id == "Birch") { Links.x.gaia.SetPlaylist("Fairies", true, 0f); } if (this.id == "SemizenStatue") { Links.x.gaia.SetPlaylist("Semizen", true, 0f); } } } // Token: 0x06000880 RID: 2176 RVA: 0x000B92C4 File Offset: 0x000B74C4 public void OutOfRange() { if (this.hasCollider) { if (this.id == "Birch" && Links.x.soundtrack.currentSoundtrack == "Fairies" && Links.x.hasMain) { Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, Links.x.main.inTown, true); } if (this.id == "SemizenStatue" && Links.x.soundtrack.currentSoundtrack == "Semizen" && Links.x.hasMain) { Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, Links.x.main.inTown, true); } } } // Token: 0x06000881 RID: 2177 RVA: 0x000B93AC File Offset: 0x000B75AC public void StartPuzzle() { if (this.id == "ChalkRubbing") { this.StartChalkRubbing(); } if (this.id == "Birch") { Links.x.spellcrafting.StartMenu(false, Links.x.main); } if (this.id.Contains("SemizenStatue")) { if (!Links.x.dialogue.GiveXP()) { Links.x.characterSheet.enchanting = true; Links.x.characterSheet.StartMenu(false); Links.x.inventory.enchantMenu.OpenMenu(Links.x.main); return; } Links.x.questEnd.OpenPuzzleAfter(this); } } // Token: 0x06000882 RID: 2178 RVA: 0x000B9470 File Offset: 0x000B7670 public void LoadPuzzleInfo() { bool flag = true; if (this.id == "Birch" || this.id.Contains("SemizenStatue") || this.id == "Revive" || this.id == "Break Circle" || this.id.Contains("Bell") || this.id == "ForfeitsBoard" || this.id == "Text") { flag = false; } if (flag) { string text = Records.x.openBook + "/Puzzles_" + this.puzzle.sceneName + ".es3"; this.firstTimeOnScene = true; if (ES3.FileExists(text)) { this.saveFile = new ES3File(text); this.firstTimeOnScene = false; if (this.id.Contains("WeightPuzzle")) { this.completed = false; if (this.id.Contains("C6")) { if (this.saveFile.KeyExists("C6_WeightPuzzle_Complete")) { this.completed = this.saveFile.Load("C6_WeightPuzzle_Complete"); } } else if (this.id.Contains("D5") && this.saveFile.KeyExists("D5_WeightPuzzle_Complete")) { this.completed = this.saveFile.Load("D5_WeightPuzzle_Complete"); } if (this.completed) { this.WeightPuzzleComplete(true); } else { this.WeightPuzzleIncomplete(); } if (this.puzzle.animator) { this.puzzle.animator.enabled = false; } } if (this.id.Contains("Fort")) { string text2 = this.id + "_Hostages"; if (this.saveFile.KeyExists(text2)) { this.hasRescuedHostages = this.saveFile.Load(text2); } text2 = this.id + "_Fort"; if (this.saveFile.KeyExists(text2)) { this.hasClearedFort = this.saveFile.Load(text2); } text2 = this.id + "_Leader"; if (this.saveFile.KeyExists(text2)) { this.hasKilledLeader = this.saveFile.Load(text2); } text2 = this.id + "_RousedFort"; if (this.saveFile.KeyExists(text2)) { this.rousedFort = this.saveFile.Load(text2); } text2 = this.id + "_Warning"; if (this.saveFile.KeyExists(text2)) { this.gaveWarning = this.saveFile.Load(text2); if (this.gaveWarning) { this.timeSinceWarning = Links.x.gameplay.seconds + 1000f; } } } if (this.id.Contains("Fence")) { this.completed = false; if (this.saveFile.KeyExists(this.id + "_Complete")) { this.completed = this.saveFile.Load(this.id + "_Complete"); } } if (this.id.Contains("FairyCircle")) { this.completed = false; if (this.saveFile.KeyExists(this.id + "_Complete")) { this.completed = this.saveFile.Load(this.id + "_Complete"); } } if (this.id.Contains("C6_Tomb_") || this.id.Contains("D5_Tomb_")) { this.completed = false; if (this.saveFile.KeyExists(this.id + "_Complete")) { this.completed = this.saveFile.Load(this.id + "_Complete"); } } if (this.id == "C6_Cave_ShroomerMushes") { this.completed = false; if (this.saveFile.KeyExists(this.id + "_Complete")) { this.completed = this.saveFile.Load(this.id + "_Complete"); } if (this.completed) { this.SetupBreakablePuzzle(); this.BreakablePuzzle(true); } else { this.SetupBreakablePuzzle(); } } if (this.id == "FrogGameC6") { this.completed = false; if (this.saveFile.KeyExists(this.id + "_Score")) { this.savedScore = this.saveFile.Load(this.id + "_Score"); } } } } if (this.firstTimeOnScene) { if (this.id.Contains("WeightPuzzle")) { this.WeightPuzzleIncomplete(); if (this.puzzle.animator) { this.puzzle.animator.enabled = false; } } if (this.id == "C6_Cave_ShroomerMushes") { this.SetupBreakablePuzzle(); } } if (this.id == "ChalkRubbing" || this.id == "Birch" || this.id.Contains("SemizenStatue") || this.id.Contains("C6_Tomb_") || this.id.Contains("D5_Tomb_") || this.id == "Revive" || this.id == "Break Circle" || this.id.Contains("Bell") || this.id == "ForfeitsBoard" || this.id == "Text") { this.coll = base.gameObject.GetComponent(); if (this.coll) { this.coll.gameObject.layer = 16; this.coll.enabled = true; } this.hasCollider = true; this.lightPoint = null; foreach (object obj in base.transform) { Transform transform = (Transform)obj; if (transform.gameObject.name.Contains("oint")) { this.lightPoint = transform; } } this.interactionPointY = 2f; if (this.id == "Birch") { this.interactionPointY = 5f; } if (this.id == "ChalkRubbing") { this.interactionPointY = 2f; } if (this.id.Contains("SemizenStatue")) { this.interactionPointY = 6f; } } if (this.id.Contains("C6_Tomb_") || this.id.Contains("D5_Tomb_")) { foreach (Collider collider in base.gameObject.GetComponentsInChildren(true)) { if (collider != this.coll && collider.gameObject.layer != 29) { this.puzzleColliders.Add(collider); } } if (this.firstTimeOnScene || !this.completed) { this.puzzle.animator.Play("LachoGear_deactivate", -1, 1f); this.UpdateAstar(0.5f, true); } else { this.puzzle.animator.Play("LachoGear_activate", -1, 1f); this.UpdateAstar(0.5f, true); } } if (this.id == "WestRuinsFort") { this.enemyPrompt = GameObject.Find("Prompt_CampCleared_D5_RobberBarronFort").GetComponent(); this.enemyCreatures = this.enemyPrompt.prompt.campCreatures; this.allyPrompt = GameObject.Find("Prompt_CampCleared_D5_DuraScouts1").GetComponent(); this.allyCreatures = this.allyPrompt.prompt.campCreatures; } if (this.id.Contains("Bell")) { this.callForHelp = GameObject.Find("PuzzleFortFight").GetComponent(); } this.loaded = true; } // Token: 0x06000883 RID: 2179 RVA: 0x000B9CCC File Offset: 0x000B7ECC public void SavePuzzleInfo() { if (this.id == "Birch" || this.id.Contains("SemizenStatue")) { return; } string text = Records.x.openBook + "/Puzzles_" + Links.x.diorama.sceneName + ".es3"; this.saveFile = new ES3File(text); if (this.id == "C6_WeightPuzzle") { this.saveFile.Save("C6_WeightPuzzle_Complete", this.completed); } if (this.id == "D5_WeightPuzzle") { this.saveFile.Save("D5_WeightPuzzle_Complete", this.completed); } if (this.id.Contains("FairyCircle")) { this.saveFile.Save(this.id + "_Complete", this.completed); } if (this.id.Contains("Fence")) { this.saveFile.Save(this.id + "_Complete", this.completed); } if (this.id.Contains("C6_Tomb") || this.id.Contains("D5_Tomb_")) { this.saveFile.Save(this.id + "_Complete", this.completed); } if (this.id.Contains("C6_Cave_ShroomerMushes")) { this.saveFile.Save(this.id + "_Complete", this.completed); } if (this.id == "FrogGameC6") { this.saveFile.Save(this.id + "_Score", this.savedScore); } if (this.id.Contains("Fort")) { string text2 = this.id + "_Hostages"; this.saveFile.Save(text2, this.hasRescuedHostages); text2 = this.id + "_Fort"; this.saveFile.Save(text2, this.hasClearedFort); text2 = this.id + "_Leader"; this.saveFile.Save(text2, this.hasKilledLeader); text2 = this.id + "_RousedFort"; this.saveFile.Save(text2, this.rousedFort); text2 = this.id + "_Warning"; this.saveFile.Save(text2, this.gaveWarning); } this.saveFile.Sync(); } // Token: 0x06000884 RID: 2180 RVA: 0x000B9F64 File Offset: 0x000B8164 public void SetupBreakablePuzzle() { int childCount = base.gameObject.transform.childCount; foreach (object obj in base.transform) { Transform transform = (Transform)obj; if (transform != base.transform) { Animator component = transform.gameObject.GetComponent(); this.animators.Add(component); component.enabled = false; } } } // Token: 0x06000885 RID: 2181 RVA: 0x000B9FF4 File Offset: 0x000B81F4 public void BreakablePuzzle(bool fromLoad) { if (this.id == "C6_Cave_ShroomerMushes") { this.completed = true; QuestLog.SetQuestState("C6_Mushrooms", QuestState.Success); if (!fromLoad) { base.StartCoroutine(this.MushroomBreakable()); } else { int count = this.animators.Count; for (int i = 0; i < count; i++) { this.animators[i].gameObject.SetActive(false); this.UpdateAstarAtLocation(this.animators[i].gameObject.transform.position); } this.puzzle.animator.gameObject.SetActive(false); } Links.x.sceneMap.CheckQuests(); } } // Token: 0x06000886 RID: 2182 RVA: 0x000BA0AF File Offset: 0x000B82AF private IEnumerator MushroomBreakable() { while (Records.x.inMenus || Links.x.combat.inPocketAttack) { yield return null; } Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(true); Links.x.gameplay.PocketPause(true); yield return new WaitForSeconds(0.5f); yield return new WaitForSeconds(0.5f); int childCount = this.animators.Count; GameObject hov = Links.x.hoverObject; int num; for (int i = 0; i < childCount; i = num + 1) { this.animators[i].enabled = true; this.animators[i].Play("ThickShroomGone"); Links.x.gameFeed.AddFeed("Mushroom is drying"); yield return new WaitForSeconds(0.06f); this.UpdateAstarAtLocation(this.animators[i].gameObject.transform.position); if (this.animators[i].gameObject.name.Contains("Jump") || this.animators[i].gameObject.name.Contains("jump")) { MasterAudio.PlaySound3DAtVector3AndForget("Interactives", this.animators[i].gameObject.transform.position, 1f, new float?(1f), 0f, "Mushroom Drying", null); Links.x.rtsCamera.puzzleSnapCamera = true; Links.x.rtsCamera.puzzleLerp = false; Links.x.fadeAnimator.Play("CinematicQuickFade"); yield return new WaitForSecondsRealtime(0.14f); Links.x.rtsCamera.puzzleTarget = this.animators[i].gameObject; Shader.SetGlobalVector("_CinematicRevealPosition", this.animators[i].gameObject.transform.position); Shader.SetGlobalVector("_DoorLightPosition", this.animators[i].gameObject.transform.position + new Vector3(0f, 3f, 0f)); Records.x.hoverLightColor = Color.white * 0.5f; Links.x.hoverObject = this.animators[i].gameObject; Shader.SetGlobalFloat("_DoorLightRange", 30f); yield return new WaitForSeconds(1f); } num = i; } yield return new WaitForSeconds(0.5f); Links.x.fadeAnimator.Play("CinematicQuickFade"); yield return new WaitForSeconds(0.12f); Shader.SetGlobalVector("_CinematicRevealPosition", new Vector3(-100000f, -100000f, -100000f)); Links.x.rtsCamera.puzzleTarget = Links.x.main.gameObject; Links.x.rtsCamera.puzzleLerp = false; yield return new WaitForSeconds(0.01f); Links.x.rtsCamera.puzzleTarget = null; Links.x.rtsCamera.puzzleLerp = false; Links.x.rtsCamera.puzzleSnapCamera = true; if (!hov) { Links.x.hoverObject = null; } else { Links.x.hoverObject = hov; if (Links.x.gameplay.intersectingExit) { Links.x.gameplay.intersectingExit.Near(true); } } Links.x.gameplay.PocketPause(false); Records.x.RemoveControls(false); Links.x.fellowship.AddXP(50, null, true); Links.x.cameraEffects.gameFade.enabled = false; MasterAudio.PlaySoundAndForget("Feedback", 0.4f, new float?(1f), 0f, "DialogueStatPass", null); yield break; } // Token: 0x06000887 RID: 2183 RVA: 0x000BA0C0 File Offset: 0x000B82C0 private void WeightPuzzleComplete(bool fromSave) { if (this.completed && !fromSave) { return; } this.puzzle.door.locked = false; this.puzzle.door.lockable = false; this.puzzle.door.GetComponent().SetSprites(); if (!fromSave) { base.StartCoroutine(this.TombOpened()); } else { this.puzzle.door.gameObject.SetActive(false); if (this.puzzle.animator) { this.puzzle.animator.enabled = false; } } if (fromSave) { this.SetupWeightPuzzleColliders(); } this.completed = true; } // Token: 0x06000888 RID: 2184 RVA: 0x000BA16B File Offset: 0x000B836B private IEnumerator TombOpened() { while (Links.x.combat.inPocketAttack) { yield return null; } Records.x.RemoveControls(true); yield return new WaitForSeconds(0.5f); Links.x.rtsCamera.puzzleTarget = this.puzzle.door.gameObject; Links.x.rtsCamera.puzzleLerp = true; this.puzzle.animator.enabled = true; yield return new WaitForSeconds(1f); MasterAudio.PlaySound3DAtVector3AndForget("Interactives", Links.x.main.tr.position, 1f, new float?(1f), 0f, "Opening Door", null); this.puzzle.animator.Play("PuzzleDoor"); yield return new WaitForSeconds(1f); MasterAudio.PlaySoundAndForget("Feedback", 0.4f, new float?(1f), 0f, "DialogueStatPass", null); yield return new WaitForSeconds(1f); this.puzzle.door.connectedExit.GetComponent().Hover(true); Links.x.gameFeed.AddFeed("A door has been opened"); this.puzzle.door.gameObject.SetActive(false); yield return new WaitForSeconds(1f); Links.x.rtsCamera.puzzleTarget = null; yield return new WaitForSeconds(1f); Links.x.rtsCamera.puzzleLerp = false; this.puzzle.animator.enabled = false; Records.x.RemoveControls(false); yield break; } // Token: 0x06000889 RID: 2185 RVA: 0x000BA17A File Offset: 0x000B837A private void WeightPuzzleIncomplete() { this.puzzle.door.locked = true; this.puzzle.door.lockable = true; if (!base.gameObject.GetComponent()) { this.SetupWeightPuzzleColliders(); } } // Token: 0x0600088A RID: 2186 RVA: 0x000BA1B8 File Offset: 0x000B83B8 private void SetupWeightPuzzleColliders() { Transform transform = base.gameObject.transform; int num = 0; foreach (object obj in transform) { Transform transform2 = (Transform)obj; this.objects.Add(transform2.gameObject); bool flag = false; if (this.id.Contains("C6")) { if (num == 3) { flag = true; } if (num == 4) { flag = true; } if (num == 5) { flag = true; } if (num == 11) { flag = true; } if (num == 13) { flag = true; } if (num == 17) { flag = true; } if (num == 22) { flag = true; } if (num == 23) { flag = true; } } else if (this.id.Contains("D5")) { if (num == 2) { flag = true; } if (num == 7) { flag = true; } if (num == 16) { flag = true; } if (num == 9) { flag = true; } } this.lookingFor.Add(flag); this.status.Add(false); foreach (object obj2 in transform2) { Transform transform3 = (Transform)obj2; foreach (object obj3 in transform3) { BoxCollider component = ((Transform)obj3).gameObject.GetComponent(); if (component) { if (transform3.gameObject.name.Contains("State_Up")) { PuzzleListener puzzleListener = component.gameObject.AddComponent(); this.collidersUp.Add(component); this.listenersUp.Add(puzzleListener); this.originalPositions.Add(component.gameObject.transform.parent.gameObject.transform.position); puzzleListener.puzzleID = this.id; puzzleListener.coll = component; puzzleListener.puzzleActions = this; } else { this.downPositions.Add(component.gameObject.transform.parent.gameObject.transform.position); component.transform.parent.gameObject.SetActive(false); } } } } num++; } foreach (PuzzleListener puzzleListener2 in this.listenersUp) { puzzleListener2.Setup(); puzzleListener2.coll.isTrigger = true; puzzleListener2.coll.gameObject.AddComponent().isKinematic = true; } if (!this.firstTimeOnScene) { this.ChangeWeight(); } this.updateWeight = 1; } // Token: 0x0600088B RID: 2187 RVA: 0x000BA4E0 File Offset: 0x000B86E0 public void ChangeWeight() { int num = 1; bool flag = false; if (this.id == "C6_WeightPuzzle" || this.id == "D5_WeightPuzzle") { num = 1; flag = false; } int count = this.collidersUp.Count; for (int i = 0; i < count; i++) { this.CheckWeightStatus(i, num, flag); } bool flag2 = true; for (int j = 0; j < count; j++) { if (this.status[j] != this.lookingFor[j]) { flag2 = false; } } if (flag2 && this.lookingFor.Count > 0) { this.WeightPuzzleComplete(false); } } // Token: 0x0600088C RID: 2188 RVA: 0x000BA588 File Offset: 0x000B8788 private void CheckWeightStatus(int index, int amountNeeded, bool hasToBeExact) { int hitObjectCount = this.listenersUp[index].GetHitObjectCount(); float num = this.listenersUp[index].coll.bounds.center.y + this.listenersUp[index].coll.bounds.extents.y; float num2 = this.originalPositions[index].y - this.downPositions[index].y; if (hitObjectCount < amountNeeded || (hasToBeExact && hitObjectCount > amountNeeded)) { if (this.listenersUp[index].gameObject.transform.parent.gameObject.transform.position != this.originalPositions[index]) { num += num2; } } else if (this.listenersUp[index].gameObject.transform.parent.gameObject.transform.position != this.downPositions[index]) { num -= num2; } this.listenersUp[index].SetHeight(num); if (hitObjectCount < amountNeeded || (hasToBeExact && hitObjectCount > amountNeeded)) { this.listenersUp[index].gameObject.transform.parent.gameObject.transform.position = this.originalPositions[index]; if (this.status[index] && Links.x.gaia.sceneLoaded && Mathf.Abs(num2) > 0.1f) { MasterAudio.PlaySound3DAtVector3AndForget("Stone", this.listenersUp[index].coll.bounds.max, 1f, new float?(1f), 0f, "", null); } this.status[index] = false; return; } this.listenersUp[index].gameObject.transform.parent.gameObject.transform.position = this.downPositions[index]; if (!this.status[index] && Links.x.gaia.sceneLoaded && Mathf.Abs(num2) > 0.1f) { MasterAudio.PlaySound3DAtVector3AndForget("Stone", this.listenersUp[index].coll.bounds.max, 1f, new float?(1f), 0f, "", null); } this.status[index] = true; } // Token: 0x0600088D RID: 2189 RVA: 0x000BA83C File Offset: 0x000B8A3C public void CheckIfCharacterIsOnAnotherSpot(PuzzleListener excludeListener, Character c) { for (int i = 0; i < this.listenersUp.Count; i++) { if (this.listenersUp[i] != excludeListener) { this.listenersUp[i].CheckToRemoveCharacter(c); } } this.ChangeWeight(); } // Token: 0x0600088E RID: 2190 RVA: 0x000BA88C File Offset: 0x000B8A8C public void CheckWeightCharacters() { bool flag = false; for (int i = 0; i < this.hitCharacters.Count; i++) { Character character = this.hitCharacters[i]; PuzzleListener puzzleListener = null; if (character) { float num = float.PositiveInfinity; for (int j = 0; j < this.listenersUp.Count; j++) { Vector3 top = this.listenersUp[j].top; top.y = character.tr.position.y; float sqrMagnitude = (character.tr.position - top).sqrMagnitude; if (sqrMagnitude < 6.25f && sqrMagnitude < num) { num = sqrMagnitude; puzzleListener = this.listenersUp[j]; } } if (puzzleListener && !character.dead) { this.CheckIfCharacterIsOnAnotherSpot(puzzleListener, character); puzzleListener.AddCharacter(character); this.ChangeWeight(); } else { this.CheckIfCharacterIsOnAnotherSpot(null, character); flag = true; this.hitCharacters[i] = null; this.ChangeWeight(); this.updateWeight = 1; } } else { flag = true; this.hitCharacters[i] = null; this.ChangeWeight(); this.updateWeight = 1; } } if (flag) { this.hitCharacters.RemoveAll((Character item) => item == null); } } // Token: 0x0600088F RID: 2191 RVA: 0x000BA9F2 File Offset: 0x000B8BF2 public void AddWeightCharacter(Character c) { if (!this.hitCharacters.Contains(c)) { this.hitCharacters.Add(c); } this.CheckWeightCharacters(); this.updateWeight = 1; } // Token: 0x06000890 RID: 2192 RVA: 0x000BAA1B File Offset: 0x000B8C1B public void UsedFairy() { this.completed = true; if (this.coll) { this.coll.enabled = false; } } // Token: 0x06000891 RID: 2193 RVA: 0x000BAA3D File Offset: 0x000B8C3D public void StartChalkRubbing() { Links.x.hudControl.OpenChalkRubbing(); } // Token: 0x06000892 RID: 2194 RVA: 0x000BAA4E File Offset: 0x000B8C4E public void MiniGame(Character character, Character npc, int lastReward) { if (this.puzzle.puzzleID == "FrogGameC6") { base.StartCoroutine(this.FrogMiniGame(character, npc, true, lastReward)); } } // Token: 0x06000893 RID: 2195 RVA: 0x000BAA78 File Offset: 0x000B8C78 private void RestartMinigame(Character character, Character npc, int lastReward) { if (this.puzzle.puzzleID == "FrogGameC6") { base.StartCoroutine(this.FrogMiniGame(character, npc, false, lastReward)); } } // Token: 0x06000894 RID: 2196 RVA: 0x000BAAA2 File Offset: 0x000B8CA2 private IEnumerator FrogMiniGame(Character character, Character npc, bool fromBeginning, int lastReward) { List miniGameCharacters = Links.x.combat.miniGameCharacters; List party = Links.x.portraitOrder; this.scoreCap1 = 15; this.scoreCap2 = 50; this.scoreCap3 = 100; Links.x.hudControl.JoyBox(false); this.spawned.Clear(); this.prevSeconds = 0; if (fromBeginning) { Records.x.RemoveControls(true); Records.x.miniGame = true; Links.x.gaia.PlayFade("Out", "Scaled"); yield return new WaitForSeconds(0.5f); Records.x.RemoveControls(true); List creatureActions = Links.x.diorama.creatureActions; this.creature = null; for (int i = 0; i < creatureActions.Count; i++) { if (creatureActions[i].gameObject.name == "Normal Frogs") { this.creature = creatureActions[i]; } } this.spots = new List(); this.spotsAlt = new List(); Transform transform = null; Transform transform2 = null; Transform transform3 = null; this.spotPlayer = null; Transform transform4 = null; Transform transform5 = base.gameObject.transform; this.originalPlayerSpot = character.currentPosition; foreach (object obj in transform5) { Transform transform6 = (Transform)obj; if (transform6 != transform5) { string name = transform6.gameObject.name; if (name.Contains("Frog")) { if (name.Contains("Lane")) { this.spotsAlt.Add(transform6); } else { this.spots.Add(transform6); } } else if (name.Contains("Spot")) { if (name.Contains("1")) { transform = transform6; } if (name.Contains("2")) { transform2 = transform6; } if (name.Contains("3")) { transform3 = transform6; } if (name.Contains("Player")) { this.spotPlayer = transform6; } if (name.Contains("Dryad")) { transform4 = transform6; } if (name.Contains("Return")) { this.originalPlayerSpot = transform6.position; } } } } character.SetPosition(this.spotPlayer.position, null); character.FirstPosition(null); npc.SetPosition(transform4.position, null); npc.FirstPosition(null); npc.SetRotation(Quaternion.LookRotation(this.spotPlayer.position - transform4.position), false, true); character.SetRotation(Quaternion.LookRotation(this.spotPlayer.position - npc.currentPosition), false, true); int num = 0; for (int j = 0; j < party.Count; j++) { if (party[j] && party[j] != character && party[j].party) { if (num == 0) { party[j].SetPosition(transform.position, null); party[j].SetRotation(Quaternion.LookRotation(this.spotPlayer.position - transform.position), false, true); } if (num == 1) { party[j].SetPosition(transform2.position, null); party[j].SetRotation(Quaternion.LookRotation(this.spotPlayer.position - transform2.position), false, true); } if (num == 2) { party[j].SetPosition(transform3.position, null); party[j].SetRotation(Quaternion.LookRotation(this.spotPlayer.position - transform3.position), false, true); } party[j].FirstPosition(null); num++; } } miniGameCharacters.Clear(); miniGameCharacters.Add(character); Links.x.fellowship.SingleSelected(character); character.AddToSelected(false, true); character.SetAsLeader(); Links.x.rtsCamera.Follow(character.tr, character, true); Links.x.rtsCamera.Jump(character.tr.position); foreach (Character character2 in this.creature.characters) { character2.vanished = true; character2.TurnScriptsOff(); } this.ui = Object.Instantiate(Links.x.cellar.miniGameUI, Vector3.zero, Quaternion.Euler(Vector3.zero), Links.x.miscCanvas.gameObject.transform); this.minigame = this.ui.GetComponent(); this.minigame.animator.enabled = false; this.minigame.SetVolume(); this.minigame.puzzle = this; Links.x.minigame = this.minigame; this.minigame.constantScoreText.enabled = false; this.minigame.constantScoreText.text = "0"; this.minigame.gameObject.GetComponent().anchoredPosition3D = Vector3.zero; this.minigame.score = 0; this.minigame.targetScoreText.enabled = false; yield return new WaitForSeconds(0.5f); Records.x.RemoveControls(true); Links.x.gaia.PlayFade("In", "Scaled"); } else { character.SetPosition(this.spotPlayer.position, null); character.FirstPosition(null); character.SetRotation(Quaternion.LookRotation(this.spotPlayer.position - npc.currentPosition), false, true); Links.x.rtsCamera.Jump(character.tr.position); this.minigame.score = 0; miniGameCharacters.Clear(); miniGameCharacters.Add(character); this.minigame.constantScoreText.enabled = false; this.minigame.constantScoreText.text = "0"; this.minigame.targetScoreText.enabled = false; Links.x.gaia.PlayFade("In", "Scaled"); } this.targetScore = this.scoreCap1; if (this.savedScore >= this.scoreCap1) { this.targetScore = this.scoreCap2; } if (this.savedScore >= this.scoreCap2) { this.targetScore = this.scoreCap3; } int treasureScore = this.scoreCap1; if (lastReward >= 2) { treasureScore = this.scoreCap2; } if (lastReward >= 3) { treasureScore = this.scoreCap3; } this.minigame.animator.enabled = true; this.minigame.animator.Play("MiniGameStart"); this.retry = false; this.end = false; Records.x.RemoveControls(true); this.minigame.targetScoreText.text = "Target score: " + this.targetScore.ToString(); yield return new WaitForSeconds(3f); Records.x.RemoveControls(false); this.minigame.constantScoreText.enabled = true; this.minigame.targetScoreText.enabled = true; float jumpFrogSpawn = Links.x.gameplay.seconds; float timeSinceSpawn = 0f; NNConstraint nodeConstraint = new NNConstraint(); int startingHitCount = character.stats.hitCount; int startingHealth = character.stats.HealthCurrent(); Vector3 startPosition = Vector3.zero; Vector3 vector = Vector3.zero; Vector3 endPosition = Vector3.zero; bool dbl = false; int dblLane = -1; while (character.stats.hitCount == startingHitCount) { float num2 = 5f; int num3 = 0; for (int k = 0; k < this.spawned.Count; k++) { if (this.spawned[k] && this.spawned[k].tilesMoved == -1) { num3++; } } num2 -= (float)num3 * 0.5f; if ((timeSinceSpawn == 0f || Links.x.gameplay.seconds > timeSinceSpawn + num2 || dbl) && character.node != null) { bool laneFrog = true; if (Links.x.gameplay.seconds > jumpFrogSpawn + 200f && num3 < 10) { laneFrog = false; jumpFrogSpawn = Links.x.gameplay.seconds; } int num4; if (laneFrog) { num4 = Random.Range(0, this.spotsAlt.Count - 1); if (dbl) { num4 = dblLane; dbl = false; } else if (Random.Range(0, 4) == 0) { dbl = true; dblLane = num4; } startPosition = this.spotsAlt[num4].position; vector = this.spotsAlt[num4].GetChild(0).position; endPosition = this.spotsAlt[num4].GetChild(1).position; } else { laneFrog = false; num4 = -1; int num5 = Random.Range(0, this.spots.Count - 1); startPosition = this.spots[num5].position; vector = Vector3.Lerp(startPosition, character.currentPosition, 0.15f); } GraphNode node = null; nodeConstraint.constrainWalkability = true; nodeConstraint.walkable = true; nodeConstraint.constrainTags = true; if (laneFrog) { nodeConstraint.constrainTags = false; } nodeConstraint.checkConnections = 0; nodeConstraint.constrainToEnvironment = -1; nodeConstraint.constrainToArea = (int)character.node.Area; nodeConstraint.checkCircleID = 0; if (character.node.GraphIndex == 0U) { node = Links.x.gaia.exteriorGraph.GetNearestForce(vector, nodeConstraint).node; } else { node = Links.x.gaia.interiorGraph.GetNearestForce(vector, nodeConstraint).node; } GraphNode destination = null; if (laneFrog) { nodeConstraint.constrainWalkability = true; nodeConstraint.walkable = true; nodeConstraint.constrainTags = false; nodeConstraint.checkConnections = 0; nodeConstraint.constrainToEnvironment = -1; nodeConstraint.constrainToArea = (int)character.node.Area; if (character.node.GraphIndex == 0U) { destination = Links.x.gaia.exteriorGraph.GetNearestForce(endPosition, nodeConstraint).node; } else { destination = Links.x.gaia.interiorGraph.GetNearestForce(endPosition, nodeConstraint).node; } } if (node != null && this.spawned.Count < 40) { string text = "SmallJumpingFrogs"; if (!laneFrog) { text = "SmallBlueJumpingFrogs"; } Quaternion r = Quaternion.LookRotation(character.currentPosition - base.transform.position); bool flag = false; CreatureActions creature = Links.x.gaia.CreateCreature((Vector3)node.position, r, text, flag, 0f, 1); Character summon = creature.GetFirstCharacter(); this.spawned.Add(summon); miniGameCharacters.Add(summon); if (laneFrog) { summon.hostility = 1; creature.creatures.temperament = Creatures.temperamentState.FightsIfAttacked; } summon.ignoreRemoveControls = true; summon.ignoreNodeIDs = true; summon.SetPosition(startPosition, null); summon.SetRotation(r, false, true); summon.SetMeshState(true); summon.body.SetMeshState(true, true); summon.ambushing = true; summon.SetPosition(startPosition, null); summon.ignoreNodeIDs = true; summon.tilesMoved = num4; summon.name = "Frog " + this.spawned.Count.ToString(); float timeToLerp = 0.1f; float percentage = 0f; float startTime = Time.time; while (percentage < 1f && character.stats.hitCount == startingHitCount) { this.DoFrogChecks(character); percentage = (Time.time - startTime) / timeToLerp; summon.SetPosition(startPosition, null); summon.SetRotation(r, false, true); yield return null; } summon.Jump(node, (Vector3)node.position, false, false); summon.SetMeshState(true); summon.body.SetMeshState(true, true); timeToLerp = 0.5f; percentage = 0f; startTime = Time.time; while (percentage < 1f && character.stats.hitCount == startingHitCount) { this.DoFrogChecks(character); percentage = (Time.time - startTime) / timeToLerp; if (!summon.jumping && laneFrog) { summon.SetRotation(Quaternion.LookRotation((Vector3)destination.position - (Vector3)node.position), false, true); } yield return null; } summon.ambushing = false; creature.miniGameCreature = true; summon.jumpingPosition = false; if (!laneFrog) { summon.hostility = 2; summon.UpdateLKP(Links.x.main, Links.x.main.node, "Attack", true); if (!Records.x.InCombat(false)) { Links.x.combat.StartCombat(Links.x.main, summon, false, true); } Links.x.combat.AddParty(summon, false, Links.x.main, true); } else { summon.SetRotation(Quaternion.LookRotation((Vector3)destination.position - (Vector3)node.position), false, true); summon.MakePath(destination, 30, false, false, true); } timeToLerp = 1f; percentage = 0f; startTime = Time.time; bool moving = false; while (percentage < 1f && character.stats.hitCount == startingHitCount && laneFrog && !moving) { this.DoFrogChecks(character); percentage = (Time.time - startTime) / timeToLerp; if (summon.moving && !summon.jumping) { moving = true; } if (!summon.moving && summon.waitingForPath == 0) { summon.ignoreNodeIDs = true; summon.ambushing = false; summon.MakePath(destination, 30, false, false, true); } yield return null; } if (Random.Range(0, 4) == 0 || timeSinceSpawn == 0f) { int num6 = Random.Range(0, 4); if (party[num6] != character && party[num6].party && !party[num6].summoned) { Debug.Log("quip"); int num7 = Random.Range(0, 5); if (num7 == 0) { party[num6].StartQuip("You've got this!"); } if (num7 == 1) { party[num6].StartQuip("Come on, " + character.stats.GetName() + "!"); } if (num7 == 2) { party[num6].StartQuip("You can do it!"); } if (num7 == 3) { party[num6].StartQuip("Go " + character.stats.GetName() + "!"); } if (num7 == 4) { party[num6].StartQuip(character.stats.GetName() + "! " + character.stats.GetName() + "!"); } } } r = default(Quaternion); creature = null; summon = null; } timeSinceSpawn = Links.x.gameplay.seconds; node = null; destination = null; } this.DoFrogChecks(character); yield return null; } Records.x.RemoveControls(true); this.minigame.constantScoreText.enabled = false; this.minigame.targetScoreText.enabled = false; this.minigame.animator.Play("MiniGameDone"); this.minigame.scoreText.text = "score: " + this.minigame.score.ToString(); int score = this.savedScore; if (this.minigame.score > score) { score = this.minigame.score; } this.minigame.highScoreText.text = "Target score: " + this.targetScore.ToString() + "\nHigh score: " + score.ToString(); this.savedScore = score; if (this.minigame.score > treasureScore || score > treasureScore) { this.minigame.endButtonText.text = "Treasure"; } else { this.minigame.endButtonText.text = "Quit"; } while (!this.retry && !this.end) { yield return null; } Links.x.gaia.PlayFade("Out", "Scaled"); yield return new WaitForSeconds(0.5f); for (int l = 0; l < this.spawned.Count; l++) { if (this.spawned[l]) { CreatureActions creatures = this.spawned[l].creatures; this.spawned[l].Missing(); if (creatures) { Object.Destroy(creatures.gameObject); } } } this.spawned.Clear(); if (Records.x.InCombat(false)) { Links.x.combat.EndCombat(false); } character.isHit = false; character.downed = false; character.PlayAnimation("Idle", 0f); if (this.end) { this.minigame.endButtonText.text = "Return"; Object.Destroy(this.ui); Links.x.hudControl.JoyBox(false); character.SetPosition(this.originalPlayerSpot, null); character.FirstPosition(null); character.stats.SetHealth(startingHealth, false); Links.x.rtsCamera.Follow(character.tr, character, true); yield return new WaitForSeconds(0.5f); foreach (Character character3 in this.creature.characters) { character3.vanished = false; character3.TurnScriptsOn(); } Links.x.gaia.PlayFade("In", "Scaled"); Records.x.miniGame = false; Records.x.RemoveControls(false); Links.x.dialogue.SetMiniGameVariables(this.savedScore, this); Links.x.gameplay.StartDialogue(npc, character, null, null, "LazureCaves/FrogPatch"); } else { Links.x.gaia.PlayFade("Out", "Scaled"); yield return new WaitForSeconds(0.5f); this.minigame.animator.enabled = false; this.RestartMinigame(character, npc, lastReward); } yield break; } // Token: 0x06000895 RID: 2197 RVA: 0x000BAAD0 File Offset: 0x000B8CD0 private void DoFrogChecks(Character player) { bool flag = false; for (int i = 0; i < this.spawned.Count; i++) { if (this.spawned[i] && (this.spawned[i].tilesMoved >= 0 || this.spawned[i].tilesMoved == -2) && this.spawned[i].ambushing && !this.spawned[i].jumping && !this.spawned[i].moving && this.spawned[i].tilesMoved == -2) { CreatureActions creatures = this.spawned[i].creatures; this.spawned[i].Missing(); if (creatures) { Object.Destroy(creatures.gameObject); } flag = true; } } if (flag) { this.spawned.RemoveAll((Character item) => item == null); } for (int j = 0; j < this.spawned.Count; j++) { if (this.spawned[j] && this.spawned[j].tilesMoved >= 0 && !this.spawned[j].jumping && !this.spawned[j].ambushing) { Vector3 position = this.spotsAlt[this.spawned[j].tilesMoved].GetChild(1).position; float sqrMagnitude = (this.spawned[j].tr.position - position).sqrMagnitude; if (sqrMagnitude < 0.5625f || (sqrMagnitude < 4f && !this.spawned[j].moving)) { this.spawned[j].ClearNodePath(); this.spawned[j].ambushing = true; this.spawned[j].Jump(player.node, this.spotsAlt[this.spawned[j].tilesMoved].GetChild(2).position, false, false); this.spawned[j].tilesMoved = -2; this.spawned[j].SetMeshState(false); this.spawned[j].body.SetMeshState(false, true); } } } Vector3 position2 = player.tr.position; for (int k = 0; k < this.spawned.Count; k++) { if (this.spawned[k] && (this.spawned[k].tr.position - position2).sqrMagnitude < 2.25f) { player.stats.hitCount++; this.spawned[k].AddDamage(player, 1f, true, false, true, "None", 0f, 0f); } } if ((int)Links.x.gameplay.seconds > this.prevSeconds + 10 || this.prevSeconds == 0) { if (Links.x.minigame) { Links.x.minigame.AddScore(); } this.prevSeconds = (int)Links.x.gameplay.seconds; } } // Token: 0x06000896 RID: 2198 RVA: 0x000BAE98 File Offset: 0x000B9098 private bool SeenByFortCreature() { bool flag = false; bool flag2 = false; if (this.id == "WestRuinsFort") { flag = true; flag2 = true; } if (!this.hasList) { this.portraitOrder = Links.x.portraitOrder; if (this.enemies == null) { this.enemies = new List(); foreach (Creatures creatures in this.enemyCreatures) { CreatureActions component = creatures.gameObject.GetComponent(); this.enemies.Add(component); if (flag2 && component.xmlName.Contains("Lookout")) { this.characters = component.characters; for (int i = 0; i < this.characters.Count; i++) { Character character = this.characters[i]; this.lookout = character; if (character && !this.hasRescuedHostages && !this.hasKilledLeader) { character.hostility = 1; character.willBeHostile = true; } } } if (this.id == "WestRuinsFort" && component.xmlName.Contains("RobberBaron")) { this.leader = component.GetFirstCharacter(); this.middleOfFort = component.GetWalkTransform(0).position; } } this.allies = new List(); foreach (Creatures creatures2 in this.allyCreatures) { CreatureActions component2 = creatures2.gameObject.GetComponent(); if (component2) { this.allies.Add(component2); if (flag && creatures2.gameObject.name.Contains("Hostage")) { this.characters = component2.characters; for (int j = 0; j < this.characters.Count; j++) { Character character2 = this.characters[j]; if (character2) { character2.stats.SetHostageAllegiance(this.hasRescuedHostages); } } } if (this.id == "WestRuinsFort") { if (component2.xmlName.Contains("Hostage1")) { this.hostage1 = component2.GetFirstCharacter(); if (!this.hasRescuedHostages && this.hostage1) { this.hostage1.isHostage = true; } } if (component2.xmlName.Contains("Hostage2")) { this.hostage2 = component2.GetFirstCharacter(); if (!this.hasRescuedHostages && this.hostage2) { this.hostage2.isHostage = true; } } if (component2.xmlName.Contains("Hostage3")) { this.hostage3 = component2.GetFirstCharacter(); if (!this.hasRescuedHostages && this.hostage3) { this.hostage3.isHostage = true; } } } } } this.hasList = true; } if (this.id == "WestRuinsFort") { GameObject gameObject = GameObject.Find("Door_Use_Wooden_Swingy_Exterior_prisoners"); this.hostageLock = gameObject.GetComponent(); } } if (flag) { if (!this.hasRescuedHostages && this.hostageLock) { if (this.hostageLock.door.locked) { if (Links.x.gameplay.seconds > this.lastHostageAttackTime + 100f && Records.x.InCombat(false) && this.panCoroutine == null && this.rousedFort) { Character character3 = null; Character character4 = null; int num = Random.Range(0, 3); if (num == 0) { character4 = this.hostage1; } if (num == 1) { character4 = this.hostage2; } if (num == 2) { character4 = this.hostage3; } if (character4 && !character4.IsSentient()) { character4 = null; } if (!character4) { if (this.hostage1 && this.hostage1.IsSentient()) { character4 = this.hostage1; } if (this.hostage2 && this.hostage2.IsSentient()) { character4 = this.hostage2; } if (this.hostage3 && this.hostage3.IsSentient()) { character4 = this.hostage3; } } if (character4) { float num2 = 900f; for (int k = 0; k < this.enemies.Count; k++) { this.characters = this.enemies[k].characters; for (int l = 0; l < this.characters.Count; l++) { Character character5 = this.characters[l]; if (character5 && character5.IsSentient() && !character5.stats.pinned && !character5.stats.pinning && !character5.inAction && character5.stats.xmlName.Contains("Archer")) { float sqrMagnitude = (character5.currentPosition - character4.currentPosition).sqrMagnitude; if (sqrMagnitude < num2) { character3 = character5; num2 = sqrMagnitude; } } } } if (character3) { if (!character3.actions) { Links.x.combat.AddParty(character3, false, Links.x.main, true); if (character3.actions) { character3.actions.AddTarget(character4); if (character3.actions) { character3.actions.StartAction("Attack"); } } } else { character3.actions.CheckIfRunningAI(); character3.actions.AddTarget(character4); character3.actions.StartAction("Attack"); character3.meshAlwaysOn = true; character3.SetMeshState(true); } if (character3.actions) { character3.actions.doBubbleAttack = true; if (!this.firstHostageAttack) { character3.actions.bubbleAttackStopsGameplay = true; } else { character3.actions.bubbleAttackStopsGameplay = false; } this.firstHostageAttack = true; character3.actions.bubbleTarget = character4; this.lastHostageAttackTime = Links.x.gameplay.seconds; } } } } } else { this.hasRescuedHostages = true; Character character6 = this.hostage1; if (!character6) { character6 = this.hostage2; } if (!character6) { character6 = this.hostage3; } if (character6) { if (this.panCoroutine != null) { base.StopCoroutine(this.panCoroutine); } this.panCoroutine = this.CameraPanAndQuip(character6, "Hostages"); base.StartCoroutine(this.panCoroutine); } } } if (this.hasRescuedHostages) { bool flag3 = false; if (this.id == "WestRuinsFort" && (QuestLog.GetQuestState("D5_Hostages") == QuestState.Success || QuestLog.GetQuestState("D5_Hostages") == QuestState.Failure)) { flag3 = true; } if (!flag3) { bool flag4 = false; bool flag5 = true; for (int m = 0; m < 3; m++) { Character character7 = this.hostage1; if (m == 1) { character7 = this.hostage2; } if (m == 2) { character7 = this.hostage3; } if (character7) { if (!character7.dead && !character7.missing) { flag4 = true; } else { GraphNode graphNode; if (character7.creatures.daySleep) { graphNode = character7.creatures.GetWalkNodeDay(0); } else { graphNode = character7.creatures.GetWalkNodeNight(0); } if ((character7.currentPosition - (Vector3)graphNode.position).sqrMagnitude < 36f) { character7.stats.SetHostageAllegiance(true); } else { flag5 = false; } } } } if (!flag4) { QuestLog.SetQuestState("D5_Hostages", QuestState.Failure); } else if (flag5) { QuestLog.SetQuestState("D5_Hostages", QuestState.Success); } } } else if (QuestLog.GetQuestState("D5_Hostages") != QuestState.Failure) { bool flag6 = false; for (int n = 0; n < 3; n++) { Character character8 = this.hostage1; if (n == 1) { character8 = this.hostage2; } if (n == 2) { character8 = this.hostage3; } if (character8 && !character8.dead && !character8.missing) { flag6 = true; } } if (!flag6) { QuestLog.SetQuestState("D5_Hostages", QuestState.Failure); } } } for (int num3 = 0; num3 < this.enemies.Count; num3++) { this.characters = this.enemies[num3].characters; for (int num4 = 0; num4 < this.characters.Count; num4++) { Character character9 = this.characters[num4]; if (character9 && character9.IsSentient() && !character9.missing && character9.HasSomeoneInSight()) { return true; } } } return false; } // Token: 0x06000897 RID: 2199 RVA: 0x000BB7E0 File Offset: 0x000B99E0 private void StartFort() { if (Records.x.editor) { Debug.Log("Start fort"); } this.inFort = true; if (this.id.Contains("WestRuins")) { Character character = null; for (int i = 0; i < this.enemies.Count; i++) { this.characters = this.enemies[i].characters; for (int j = 0; j < this.characters.Count; j++) { Character character2 = this.characters[j]; if (character2 && !character2.stunned && !character2.sleeping && !character2.dead && !character2.missing && !character2.downed && character2.HasSomeoneInSight() && character2.stats.xmlName.Contains("Lookout") && !character2.stats.pinned && character2.stats.Confuse() == 0) { character = character2; } } } if (character) { if (this.hasKilledLeader) { this.lookout.hostility = 2; return; } if ((Links.x.gameplay.seconds > this.timeSinceWarning + 400f || this.timeSinceWarning == 0f) && this.panCoroutine == null) { this.panCoroutine = this.CameraPanAndQuip(character, "Warning"); base.StartCoroutine(this.panCoroutine); this.timeSinceWarning = Links.x.gameplay.seconds; this.gaveWarning = true; return; } } else if (this.lookout) { this.lookout.hostility = 2; } } } // Token: 0x06000898 RID: 2200 RVA: 0x000BB98C File Offset: 0x000B9B8C private void EndFort() { if (Records.x.editor) { Debug.Log("End fort"); } this.inFort = false; if (this.rousedFort) { this.timeSinceLeftCombat = Links.x.gameplay.seconds; } if (this.hasRescuedHostages) { if (this.hostage1) { this.hostage1.stats.SetHostageAllegiance(true); } if (this.hostage2) { this.hostage2.stats.SetHostageAllegiance(true); } if (this.hostage3) { this.hostage3.stats.SetHostageAllegiance(true); } } if (this.hasKilledLeader) { Debug.Log("Set fort cleared quest as success"); if (QuestLog.GetQuestState("D5_RobberFortCleared") != QuestState.Success) { QuestLog.SetQuestState("D5_RobberFortCleared", QuestState.Success); for (int i = 0; i < this.enemies.Count; i++) { this.characters = this.enemies[i].characters; for (int j = 0; j < this.characters.Count; j++) { Character character = this.characters[j]; if (character && !character.dead && !character.missing && !character.stunned) { string text = "Flee "; Character character2 = character; Debug.Log(text + ((character2 != null) ? character2.ToString() : null)); if (character.stats.characterRow._Quest != "") { QuestLog.SetQuestState(character.stats.characterRow._Quest, QuestState.Fled); } character.alwaysOn = true; character.ignoreNodeIDs = true; if (character.inactive) { character.TurnScriptsOn(); } if (character.sleeping) { character.WakeUp(); } character.creatures.CheckQuestSwap(); } } } Records.x.CheckStunnedStates(); } } this.ReturnHelp(); } // Token: 0x06000899 RID: 2201 RVA: 0x000BBB84 File Offset: 0x000B9D84 private void CheckIfAlliesShouldLeave() { if (this.hasClearedFort && QuestLog.GetQuestState("D5_DuraPoints") == QuestState.Unassigned && (QuestLog.GetQuestState("D5_Hostages") == QuestState.Failure || QuestLog.GetQuestState("D5_Hostages") == QuestState.Success)) { Debug.Log("Dura camp can leave"); this.alliesAreGone = true; QuestLog.SetQuestState("D5_DuraPoints", QuestState.Complete); } } // Token: 0x0600089A RID: 2202 RVA: 0x000BBBE0 File Offset: 0x000B9DE0 private void FortChecks() { if (this.gaveWarning && !this.rousedFort && this.lookout) { this.middleOfFort.y = this.lookout.currentPosition.y; float num = Vector3.Distance(this.middleOfFort, this.lookout.currentPosition) - 10f; float num2 = 100000f; float num3 = 100000f; Vector3 currentPosition = this.lookout.currentPosition; for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.lookout.CanSee(this.portraitOrder[i]) && !this.lookout.stats.pinned) { this.middleOfFort.y = this.portraitOrder[i].currentPosition.y; float num4 = (this.middleOfFort - this.portraitOrder[i].currentPosition).sqrMagnitude; if (num4 < num2) { num2 = num4; } currentPosition.y = this.portraitOrder[i].currentPosition.y; num4 = (currentPosition - this.portraitOrder[i].currentPosition).sqrMagnitude; if (num4 < num3) { num3 = num4; } } } if (num3 < 1600f && !this.lookout.stats.pinned && (this.lookout.hasActions || num2 < num * num)) { this.rousedFort = true; if (this.panCoroutine != null) { base.StopCoroutine(this.panCoroutine); } this.panCoroutine = this.CameraPanAndQuip(this.lookout, "AlertLookout"); base.StartCoroutine(this.panCoroutine); } } if (!this.rousedFort && this.leader && this.leader.HasSomeoneInSight()) { this.rousedFort = true; if (this.panCoroutine != null) { base.StopCoroutine(this.panCoroutine); } this.panCoroutine = this.CameraPanAndQuip(this.leader, "AlertAlternative"); base.StartCoroutine(this.panCoroutine); } if (!this.hasKilledLeader && this.leader) { bool flag = false; if (QuestLog.GetQuestState("D5_RobberBaron") == QuestState.PerpIsDead) { flag = true; } bool flag2 = false; if (QuestLog.GetQuestState("D5_RobberBaron") == QuestState.ExileIsland || QuestLog.GetQuestState("D5_RobberBaron") == QuestState.WaitingForExileIsland) { flag2 = true; } if (flag) { QuestLog.SetQuestState("D5_RobberFort", QuestState.Success); this.hasKilledLeader = true; } if (flag2) { QuestLog.SetQuestState("D5_RobberFort", QuestState.Success); this.hasKilledLeader = true; } if (flag || flag2) { Debug.Log("Set leader gone and robber fort as success"); this.hasClearedFort = true; } } } // Token: 0x0600089B RID: 2203 RVA: 0x000BBEBC File Offset: 0x000BA0BC public void CallForHelp() { if (this.inFort) { Debug.Log("Called for help"); Links.x.dialogue.SetVariableBool("D5_UsedBell", true); QuestLog.SetQuestState("D5_DuraPoints", QuestState.Active); for (int i = 0; i < this.allies.Count; i++) { this.characters = this.allies[i].characters; for (int j = 0; j < this.characters.Count; j++) { Character character = this.characters[j]; if (character && !character.dead && !character.missing && character != this.hostage1 && character != this.hostage2 && character != this.hostage3) { Character character2 = character; Debug.Log(((character2 != null) ? character2.ToString() : null) + " calling for help"); character.alwaysOn = true; if (character.inactive) { character.TurnScriptsOn(); } character.creatures.noSleep = true; if (character.sleeping) { character.WakeUp(); } character.creatures.CheckQuestSwap(); character.TransferLKP(Links.x.main); GraphNode graphNode; if (character.creatures.daySleep) { graphNode = character.creatures.GetWalkNodeNight(0); } else { graphNode = character.creatures.GetWalkNodeDay(0); } character.ignoreNodeIDs = true; character.creatures.MakeNormalPath(graphNode, false, character); } } } } } // Token: 0x0600089C RID: 2204 RVA: 0x000BC054 File Offset: 0x000BA254 private Character FirstEnemy(Character v) { float num = float.PositiveInfinity; Character character = null; for (int i = 0; i < this.enemies.Count; i++) { this.characters = this.enemies[i].characters; for (int j = 0; j < this.characters.Count; j++) { Character character2 = this.characters[j]; if (character2 && !character2.dead && !character2.missing && !character2.stunned) { float sqrMagnitude = (character2.currentPosition - v.currentPosition).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; character = character2; } } } } return character; } // Token: 0x0600089D RID: 2205 RVA: 0x000BC110 File Offset: 0x000BA310 public void ReturnHelp() { if (QuestLog.GetQuestState("D5_DuraPoints") == QuestState.Active) { QuestLog.SetQuestState("D5_DuraPoints", QuestState.Unassigned); for (int i = 0; i < this.allies.Count; i++) { this.characters = this.allies[i].characters; for (int j = 0; j < this.characters.Count; j++) { Character character = this.characters[j]; if (character && !character.dead && !character.missing && character != this.hostage1 && character != this.hostage2 && character != this.hostage3) { character.alwaysOn = true; if (character.inactive) { character.TurnScriptsOn(); } character.creatures.CheckQuestSwap(); GraphNode graphNode; if (character.creatures.daySleep) { graphNode = character.creatures.GetWalkNodeNight(0); } else { graphNode = character.creatures.GetWalkNodeDay(0); } character.creatures.MakeNormalPath(graphNode, true, character); } } } } } // Token: 0x0600089E RID: 2206 RVA: 0x000BC238 File Offset: 0x000BA438 private IEnumerator CameraPanAndQuip(Character npc, string type) { while (Records.x.saving || Records.x.inMenus || Links.x.combat.inPocketAttack) { yield return null; } Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(true); if (npc) { npc.meshAlwaysOn = true; npc.SetMeshState(true); npc.SetRotation(Quaternion.LookRotation(Links.x.main.currentPosition - npc.currentPosition), true, false); } float timeToLerp = 0.5f; float percentage = 0f; float startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } GameObject hov = Links.x.hoverObject; Links.x.rtsCamera.puzzleSnapCamera = true; Links.x.rtsCamera.puzzleLerp = false; if (this.id == "WestRuinsFort") { Links.x.rtsCamera.puzzleSnapCamera = false; } if (!(this.id == "WestRuinsFort")) { Links.x.fadeAnimator.Play("CinematicQuickFade"); yield return new WaitForSecondsRealtime(0.14f); } Links.x.rtsCamera.puzzleTarget = npc.gameObject; Shader.SetGlobalVector("_CinematicRevealPosition", npc.gameObject.transform.position); Shader.SetGlobalVector("_DoorLightPosition", npc.gameObject.transform.position + new Vector3(0f, 3f, 0f)); Records.x.hoverLightColor = Color.white * 0.5f; Links.x.hoverObject = npc.gameObject; Shader.SetGlobalFloat("_DoorLightRange", 30f); if (this.id == "WestRuinsFort") { npc.SetMeshState(true); npc.SetRotation(Quaternion.LookRotation(Links.x.main.currentPosition - npc.currentPosition), true, false); npc.alwaysLookAtParty = true; npc.meshAlwaysOn = true; if (type == "Warning") { Links.x.rtsCamera.Zoom(true, ""); MasterAudio.PlaySound3DAtVector3AndForget("Feedback", npc.gameObject.transform.position, 1f, new float?(1f), 0f, "Caught", null); npc.StartQuipAlways("Scurry away, weasels, or I'll rouse the fort!"); timeToLerp = 1f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } Links.x.gameplay.confirmText.SetActive(true); Links.x.gameplay.SetConfirmText("Skip"); timeToLerp = 4f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { if (this.Clicked()) { break; } percentage = (Time.time - startTime) / timeToLerp; yield return null; } while (this.Clicked()) { yield return null; } } else if (type == "Hostages") { this.hostageLock.PlayDoorOpen(); MasterAudio.PlaySound3DAtVector3AndForget("Feedback", npc.gameObject.transform.position, 1f, new float?(1f), 0f, "Song Learned", null); Links.x.rtsCamera.Zoom(true, "MainCharacterQTE"); yield return new WaitForSeconds(0.5f); Links.x.rtsCamera.puzzleTarget = this.hostageLock.gameObject; Shader.SetGlobalVector("_CinematicRevealPosition", npc.gameObject.transform.position); Shader.SetGlobalVector("_DoorLightPosition", npc.gameObject.transform.position + new Vector3(0f, 3f, 0f)); Links.x.hoverObject = npc.gameObject; npc.StartQuipAlways("The door is unlocked, run!"); QuestLog.SetQuestState("D5_HostagePoints", QuestState.Active); int num; for (int i = 0; i < 3; i = num + 1) { if (i == 0) { npc = this.hostage1; } if (i == 1) { npc = this.hostage2; } if (i == 2) { npc = this.hostage3; } if (npc) { if (npc.sleeping) { npc.WakeUp(); } npc.isHostage = false; npc.creatures.CheckQuestSwap(); npc.ignoreRemoveControls = true; npc.ignoreNodeIDs = true; npc.running = true; npc.forceNodePath = true; GraphNode graphNode; if (npc.creatures.daySleep) { graphNode = npc.creatures.GetWalkNodeDay(0); } else { graphNode = npc.creatures.GetWalkNodeNight(0); } npc.creatures.MakeNormalPath(graphNode, true, npc); yield return new WaitForSeconds(0.2f); } num = i; } timeToLerp = 1f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } timeToLerp = 1.5f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { if (this.Clicked()) { break; } percentage = (Time.time - startTime) / timeToLerp; yield return null; } while (this.Clicked()) { yield return null; } } else if (type.Contains("Alert")) { MasterAudio.PlaySound3DAtVector3AndForget("Feedback", npc.gameObject.transform.position, 1f, new float?(1f), 0f, "Caught", null); Links.x.gaia.SetPlaylist("Combat", true, 0.75f); for (int j = 0; j < this.enemies.Count; j++) { this.characters = this.enemies[j].characters; for (int k = 0; k < this.characters.Count; k++) { Character character = this.characters[k]; if (character && !character.dead && !character.missing && character.indoorID == Links.x.main.indoorID) { if (character.inactive) { character.TurnScriptsOn(); character.alwaysOn = true; } if (character.sleeping && type.Contains("Lookout")) { character.WakeUp(); character.ignoreRemoveControls = true; GraphNode graphNode2; if (character.creatures.daySleep) { graphNode2 = character.creatures.GetWalkNodeNight(0); } else { graphNode2 = character.creatures.GetWalkNodeDay(0); } character.creatures.MakeNormalPath(graphNode2, true, character); } if (type.Contains("Lookout")) { if (character.stats.xmlName.Contains("Skilpi")) { character.ignoreRemoveControls = true; } Links.x.combat.AddParty(character, true, Links.x.main, true); } if (type.Contains("Lookout")) { character.running = true; character.ignoreNodeIDs = true; } character.meshAlwaysOn = true; character.SetMeshState(true); if (character != npc) { character.SetRotation(Quaternion.LookRotation(npc.currentPosition - character.currentPosition), true, false); } } } } for (int l = 0; l < this.allies.Count; l++) { this.characters = this.allies[l].characters; for (int m = 0; m < this.characters.Count; m++) { Character character2 = this.characters[m]; if (character2 && !character2.dead && !character2.missing && (character2 == this.hostage1 || character2 == this.hostage2 || character2 == this.hostage3)) { if (character2.inactive) { character2.TurnScriptsOn(); character2.alwaysOn = true; } character2.meshAlwaysOn = true; character2.SetMeshState(true); } } } if (type.Contains("Lookout")) { npc.PlayAnimation("Heard", 0f); npc.StartQuipAlways("Intruders! Everyone to arms!"); Links.x.rtsCamera.Zoom(true, "MainCharacterQTE"); timeToLerp = 1f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } Links.x.gameplay.confirmText.SetActive(true); Links.x.gameplay.SetConfirmText("Skip"); timeToLerp = 2.75f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { if (this.Clicked()) { break; } percentage = (Time.time - startTime) / timeToLerp; yield return null; } while (this.Clicked()) { yield return null; } MasterAudio.PlaySoundAndForget("Dome Open", 1f, new float?(1f), 0f, "", null); MasterAudio.PlaySoundAndForget("Combat Starts", 1f, new float?(1f), 0f, "", null); MasterAudio.PlaySoundAndForget("Combat Start", 1f, new float?(1f), 0f, "", null); timeToLerp = 0.5f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } } if (type.Contains("Lookout")) { Links.x.rtsCamera.Zoom(false, ""); } else { Links.x.rtsCamera.Zoom(true, ""); } Links.x.rtsCamera.puzzleTarget = this.leader.gameObject; Links.x.rtsCamera.puzzleSnapCamera = true; Shader.SetGlobalVector("_CinematicRevealPosition", this.leader.gameObject.transform.position); Shader.SetGlobalVector("_DoorLightPosition", this.leader.gameObject.transform.position + new Vector3(0f, 3f, 0f)); Links.x.hoverObject = this.leader.gameObject; this.leader.PlayAnimation("Combat Start", 0f); if (!this.hasRescuedHostages) { if (type.Contains("Alternative")) { this.leader.StartQuipAlways("Lazure has infiltrated! Kill the hostages!"); } else { this.leader.StartQuipAlways("Intruders at the gate! Kill the hostages!"); } } else { this.leader.StartQuipAlways("Intruders! Kill them all!"); } timeToLerp = 4f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { if (this.Clicked()) { break; } percentage = (Time.time - startTime) / timeToLerp; yield return null; } while (this.Clicked()) { yield return null; } Character hostage = this.hostage1; if (!hostage) { hostage = this.hostage2; } if (!hostage) { hostage = this.hostage3; } if (hostage && !this.hasRescuedHostages) { if (this.hostage1 && this.hostage1.IsSentient()) { this.hostage1.SetRotation(Quaternion.LookRotation(npc.currentPosition - this.hostage1.currentPosition), true, false); } timeToLerp = 0.2f; percentage = 0f; startTime = Time.time; while (percentage < 1f && !this.Clicked()) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } if (this.hostage2 && this.hostage2.IsSentient()) { this.hostage2.PlayAnimation("Block", 0f); } timeToLerp = 0.3f; percentage = 0f; startTime = Time.time; while (percentage < 1f && !this.Clicked()) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } Links.x.rtsCamera.Zoom(true, "MainCharacterQTE"); Links.x.rtsCamera.puzzleTarget = hostage.gameObject; Shader.SetGlobalVector("_CinematicRevealPosition", hostage.gameObject.transform.position); Shader.SetGlobalVector("_DoorLightPosition", hostage.gameObject.transform.position + new Vector3(0f, 3f, 0f)); Links.x.hoverObject = hostage.gameObject; if (this.hostage3 && this.hostage3.IsSentient()) { this.hostage3.PlayAnimation("Distress", 0f); } timeToLerp = 2.5f; percentage = 0f; startTime = Time.time; while (percentage < 1f) { if (this.Clicked()) { break; } percentage = (Time.time - startTime) / timeToLerp; yield return null; } while (this.Clicked()) { yield return null; } } this.lastHostageAttackTime = Links.x.gameplay.seconds + 50f; hostage = null; } Links.x.rtsCamera.Zoom(false, ""); } Links.x.gameplay.confirmText.SetActive(false); if (!(this.id == "WestRuinsFort")) { Links.x.fadeAnimator.Play("CinematicQuickFade"); yield return new WaitForSeconds(0.12f); } Shader.SetGlobalVector("_CinematicRevealPosition", new Vector3(-100000f, -100000f, -100000f)); Links.x.rtsCamera.puzzleTarget = Links.x.main.gameObject; Links.x.rtsCamera.puzzleLerp = false; yield return new WaitForSeconds(0.01f); Links.x.rtsCamera.puzzleTarget = null; Links.x.rtsCamera.puzzleLerp = false; Links.x.rtsCamera.puzzleSnapCamera = true; if (this.id == "WestRuinsFort") { Links.x.rtsCamera.puzzleSnapCamera = false; yield return new WaitForSeconds(0.5f); } if (!hov) { Links.x.hoverObject = null; } else { Links.x.hoverObject = hov; if (Links.x.gameplay.intersectingExit) { Links.x.gameplay.intersectingExit.Near(true); } } if (this.id == "WestRuinsFort") { if (type.Contains("Alert")) { for (int n = 0; n < this.enemies.Count; n++) { this.characters = this.enemies[n].characters; for (int num2 = 0; num2 < this.characters.Count; num2++) { Character character3 = this.characters[num2]; if (character3 && !character3.dead && !character3.missing) { character3.alwaysOn = false; character3.meshAlwaysOn = false; character3.ignoreNodeIDs = false; character3.ignoreRemoveControls = false; } } } } if (type == "Hostages") { for (int num3 = 0; num3 < 3; num3++) { if (num3 == 0) { npc = this.hostage1; } if (num3 == 1) { npc = this.hostage2; } if (num3 == 2) { npc = this.hostage3; } if (npc) { npc.ignoreRemoveControls = false; npc.ignoreNodeIDs = true; } } } } if (npc) { npc.meshAlwaysOn = false; } Records.x.RemoveControls(false); Links.x.cameraEffects.gameFade.enabled = false; this.panCoroutine = null; yield break; } // Token: 0x0600089F RID: 2207 RVA: 0x000BC258 File Offset: 0x000BA458 private bool Clicked() { if (Links.x.joy) { if (Links.x.gameplay.cancelStart || Links.x.gameplay.actionStart || Links.x.gameplay.interactStart) { return true; } } else if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1) || Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Return)) { return true; } return false; } // Token: 0x060008A0 RID: 2208 RVA: 0x000BC2CB File Offset: 0x000BA4CB public void RetryMinigame() { this.retry = true; } // Token: 0x060008A1 RID: 2209 RVA: 0x000BC2D4 File Offset: 0x000BA4D4 public void EndMinigame() { this.end = true; } // Token: 0x060008A2 RID: 2210 RVA: 0x000BC2E0 File Offset: 0x000BA4E0 public void UpdateAstarAtLocation(Vector3 pt) { if (!Physics.Raycast(pt + new Vector3(0f, 100f, 0f), Vector3.up * -1f, 400f, 1073741824)) { Links.x.fogOfWar.UpdateGrid(pt, 10f); } else { Links.x.fogOfWarInterior.UpdateGrid(pt, 10f); } AstarPath.active.UpdateGraphs(new Bounds(pt, new Vector3(5f, 100f, 5f))); } // Token: 0x060008A3 RID: 2211 RVA: 0x000BC377 File Offset: 0x000BA577 public void UpdateAstar(float waitTime, bool toggleUseCollider) { base.enabled = true; base.StartCoroutine(this.UpdatePath(waitTime, toggleUseCollider)); } // Token: 0x060008A4 RID: 2212 RVA: 0x000BC38F File Offset: 0x000BA58F private IEnumerator UpdatePath(float waitTime, bool toggleUseCollider) { if (toggleUseCollider) { this.coll.gameObject.layer = 9; } yield return new WaitForSeconds(waitTime); if (!Links.x.gaia.sceneLoaded) { yield return new WaitForSecondsRealtime(Random.Range(0.2f, 0.5f)); } while (!Links.x.gaia.pathfindingReady) { yield return null; } for (int i = 0; i < this.puzzleColliders.Count; i++) { Vector3 center = this.puzzleColliders[i].bounds.center; if (!Physics.Raycast(center + new Vector3(0f, 100f, 0f), Vector3.up * -1f, 400f, 1073741824)) { Links.x.fogOfWar.UpdateGrid(center, 10f); } else { Links.x.fogOfWarInterior.UpdateGrid(center, 10f); } AstarPath.active.UpdateGraphs(new Bounds(center, new Vector3(10f, 100f, 10f))); } if (toggleUseCollider) { this.coll.gameObject.layer = 16; } yield break; } // Token: 0x04000D39 RID: 3385 [Header("INFO")] public Puzzle puzzle; // Token: 0x04000D3A RID: 3386 public string id; // Token: 0x04000D3B RID: 3387 private bool firstTimeOnScene; // Token: 0x04000D3C RID: 3388 private ES3File saveFile; // Token: 0x04000D3D RID: 3389 public bool completed; // Token: 0x04000D3E RID: 3390 private Collider coll; // Token: 0x04000D3F RID: 3391 private Transform lightPoint; // Token: 0x04000D40 RID: 3392 public bool canBreak; // Token: 0x04000D41 RID: 3393 public bool destroyed; // Token: 0x04000D42 RID: 3394 private PromptActions promptActions; // Token: 0x04000D43 RID: 3395 public int currentHealth; // Token: 0x04000D44 RID: 3396 [Header("Weight Puzzle")] public List collidersUp = new List(); // Token: 0x04000D45 RID: 3397 public List objects = new List(); // Token: 0x04000D46 RID: 3398 public List status = new List(); // Token: 0x04000D47 RID: 3399 public List lookingFor = new List(); // Token: 0x04000D48 RID: 3400 public List lookingForD5 = new List(); // Token: 0x04000D49 RID: 3401 public List listenersUp = new List(); // Token: 0x04000D4A RID: 3402 public List originalPositions = new List(); // Token: 0x04000D4B RID: 3403 public List downPositions = new List(); // Token: 0x04000D4C RID: 3404 public List hitCharacters = new List(); // Token: 0x04000D4D RID: 3405 public MeshRenderer[] renderers = new MeshRenderer[0]; // Token: 0x04000D4E RID: 3406 private List animators = new List(); // Token: 0x04000D4F RID: 3407 public int updateWeight; // Token: 0x04000D50 RID: 3408 private Material[] mats; // Token: 0x04000D51 RID: 3409 [Header("Interactables")] private bool hasCollider; // Token: 0x04000D52 RID: 3410 private List partyList; // Token: 0x04000D53 RID: 3411 private List puzzleColliders = new List(); // Token: 0x04000D54 RID: 3412 private IEnumerator clickActionCoroutine; // Token: 0x04000D55 RID: 3413 public float interactionPointY = 2f; // Token: 0x04000D56 RID: 3414 public GameObject bracket; // Token: 0x04000D57 RID: 3415 private Bounds bounds; // Token: 0x04000D58 RID: 3416 private List layers; // Token: 0x04000D59 RID: 3417 public GraphNode node; // Token: 0x04000D5A RID: 3418 public Character interactCharacter; // Token: 0x04000D5B RID: 3419 [Header("Minigame")] private bool retry; // Token: 0x04000D5C RID: 3420 private bool end; // Token: 0x04000D5D RID: 3421 private CreatureActions creature; // Token: 0x04000D5E RID: 3422 private GameObject ui; // Token: 0x04000D5F RID: 3423 private Minigame minigame; // Token: 0x04000D60 RID: 3424 private Vector3 originalPlayerSpot; // Token: 0x04000D61 RID: 3425 private List spots; // Token: 0x04000D62 RID: 3426 private List spotsAlt; // Token: 0x04000D63 RID: 3427 public int savedScore; // Token: 0x04000D64 RID: 3428 public int targetScore; // Token: 0x04000D65 RID: 3429 public int scoreCap1; // Token: 0x04000D66 RID: 3430 public int scoreCap2; // Token: 0x04000D67 RID: 3431 public int scoreCap3; // Token: 0x04000D68 RID: 3432 public int prevSeconds; // Token: 0x04000D69 RID: 3433 private Transform spotPlayer; // Token: 0x04000D6A RID: 3434 private List spawned = new List(); // Token: 0x04000D6B RID: 3435 [Header("Camps & Forts")] private bool inFort; // Token: 0x04000D6C RID: 3436 private PromptActions enemyPrompt; // Token: 0x04000D6D RID: 3437 private PromptActions allyPrompt; // Token: 0x04000D6E RID: 3438 private List enemyCreatures; // Token: 0x04000D6F RID: 3439 private List allyCreatures; // Token: 0x04000D70 RID: 3440 private List enemies; // Token: 0x04000D71 RID: 3441 private List allies; // Token: 0x04000D72 RID: 3442 private List characters; // Token: 0x04000D73 RID: 3443 private bool hasList; // Token: 0x04000D74 RID: 3444 private bool gaveWarning; // Token: 0x04000D75 RID: 3445 private bool rousedFort; // Token: 0x04000D76 RID: 3446 public bool hasRescuedHostages; // Token: 0x04000D77 RID: 3447 public bool hasKilledLeader; // Token: 0x04000D78 RID: 3448 public bool hasClearedFort; // Token: 0x04000D79 RID: 3449 public bool alliesAreGone; // Token: 0x04000D7A RID: 3450 private Character lookout; // Token: 0x04000D7B RID: 3451 private Character leader; // Token: 0x04000D7C RID: 3452 private Character hostage1; // Token: 0x04000D7D RID: 3453 private Character hostage2; // Token: 0x04000D7E RID: 3454 private Character hostage3; // Token: 0x04000D7F RID: 3455 private float timeSinceWarning; // Token: 0x04000D80 RID: 3456 private float timeSinceLeftCombat; // Token: 0x04000D81 RID: 3457 private float lastHostageAttackTime; // Token: 0x04000D82 RID: 3458 private Vector3 middleOfFort; // Token: 0x04000D83 RID: 3459 private List portraitOrder; // Token: 0x04000D84 RID: 3460 private IEnumerator panCoroutine; // Token: 0x04000D85 RID: 3461 private DoorActions hostageLock; // Token: 0x04000D86 RID: 3462 private PuzzleActions callForHelp; // Token: 0x04000D87 RID: 3463 private bool firstHostageAttack; // Token: 0x04000D88 RID: 3464 private bool loaded; }