3745 lines
107 KiB
C#
3745 lines
107 KiB
C#
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<Puzzle>();
|
|
}
|
|
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<int>();
|
|
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<HannahAnimatorSimple>().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<Animator>().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> tileEffects = new List<TileEffects>();
|
|
BreakableActions breakie = GameObject.Find("Breaky_ShroomerPuzzle").GetComponent<BreakableActions>();
|
|
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<TileEffects>();
|
|
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("<color=#FFFFFF>A seed is planted</color>");
|
|
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<AudioClip>("Dialogue Sounds/Slide");
|
|
AudioSource audioSource = base.gameObject.AddComponent<AudioSource>();
|
|
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<Character> 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<Character>.Enumerator enumerator2 = default(List<Character>.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<bool>("C6_WeightPuzzle_Complete");
|
|
}
|
|
}
|
|
else if (this.id.Contains("D5") && this.saveFile.KeyExists("D5_WeightPuzzle_Complete"))
|
|
{
|
|
this.completed = this.saveFile.Load<bool>("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<bool>(text2);
|
|
}
|
|
text2 = this.id + "_Fort";
|
|
if (this.saveFile.KeyExists(text2))
|
|
{
|
|
this.hasClearedFort = this.saveFile.Load<bool>(text2);
|
|
}
|
|
text2 = this.id + "_Leader";
|
|
if (this.saveFile.KeyExists(text2))
|
|
{
|
|
this.hasKilledLeader = this.saveFile.Load<bool>(text2);
|
|
}
|
|
text2 = this.id + "_RousedFort";
|
|
if (this.saveFile.KeyExists(text2))
|
|
{
|
|
this.rousedFort = this.saveFile.Load<bool>(text2);
|
|
}
|
|
text2 = this.id + "_Warning";
|
|
if (this.saveFile.KeyExists(text2))
|
|
{
|
|
this.gaveWarning = this.saveFile.Load<bool>(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<bool>(this.id + "_Complete");
|
|
}
|
|
}
|
|
if (this.id.Contains("FairyCircle"))
|
|
{
|
|
this.completed = false;
|
|
if (this.saveFile.KeyExists(this.id + "_Complete"))
|
|
{
|
|
this.completed = this.saveFile.Load<bool>(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<bool>(this.id + "_Complete");
|
|
}
|
|
}
|
|
if (this.id == "C6_Cave_ShroomerMushes")
|
|
{
|
|
this.completed = false;
|
|
if (this.saveFile.KeyExists(this.id + "_Complete"))
|
|
{
|
|
this.completed = this.saveFile.Load<bool>(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<int>(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<Collider>();
|
|
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<Collider>(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<PromptActions>();
|
|
this.enemyCreatures = this.enemyPrompt.prompt.campCreatures;
|
|
this.allyPrompt = GameObject.Find("Prompt_CampCleared_D5_DuraScouts1").GetComponent<PromptActions>();
|
|
this.allyCreatures = this.allyPrompt.prompt.campCreatures;
|
|
}
|
|
if (this.id.Contains("Bell"))
|
|
{
|
|
this.callForHelp = GameObject.Find("PuzzleFortFight").GetComponent<PuzzleActions>();
|
|
}
|
|
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<bool>("C6_WeightPuzzle_Complete", this.completed);
|
|
}
|
|
if (this.id == "D5_WeightPuzzle")
|
|
{
|
|
this.saveFile.Save<bool>("D5_WeightPuzzle_Complete", this.completed);
|
|
}
|
|
if (this.id.Contains("FairyCircle"))
|
|
{
|
|
this.saveFile.Save<bool>(this.id + "_Complete", this.completed);
|
|
}
|
|
if (this.id.Contains("Fence"))
|
|
{
|
|
this.saveFile.Save<bool>(this.id + "_Complete", this.completed);
|
|
}
|
|
if (this.id.Contains("C6_Tomb") || this.id.Contains("D5_Tomb_"))
|
|
{
|
|
this.saveFile.Save<bool>(this.id + "_Complete", this.completed);
|
|
}
|
|
if (this.id.Contains("C6_Cave_ShroomerMushes"))
|
|
{
|
|
this.saveFile.Save<bool>(this.id + "_Complete", this.completed);
|
|
}
|
|
if (this.id == "FrogGameC6")
|
|
{
|
|
this.saveFile.Save<int>(this.id + "_Score", this.savedScore);
|
|
}
|
|
if (this.id.Contains("Fort"))
|
|
{
|
|
string text2 = this.id + "_Hostages";
|
|
this.saveFile.Save<bool>(text2, this.hasRescuedHostages);
|
|
text2 = this.id + "_Fort";
|
|
this.saveFile.Save<bool>(text2, this.hasClearedFort);
|
|
text2 = this.id + "_Leader";
|
|
this.saveFile.Save<bool>(text2, this.hasKilledLeader);
|
|
text2 = this.id + "_RousedFort";
|
|
this.saveFile.Save<bool>(text2, this.rousedFort);
|
|
text2 = this.id + "_Warning";
|
|
this.saveFile.Save<bool>(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<Animator>();
|
|
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<DoorActions>().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<MapExitActions>().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<MapExit>())
|
|
{
|
|
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<BoxCollider>();
|
|
if (component)
|
|
{
|
|
if (transform3.gameObject.name.Contains("State_Up"))
|
|
{
|
|
PuzzleListener puzzleListener = component.gameObject.AddComponent<PuzzleListener>();
|
|
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<Rigidbody>().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<Character> miniGameCharacters = Links.x.combat.miniGameCharacters;
|
|
List<Character> 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> 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<Transform>();
|
|
this.spotsAlt = new List<Transform>();
|
|
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<GameObject>(Links.x.cellar.miniGameUI, Vector3.zero, Quaternion.Euler(Vector3.zero), Links.x.miscCanvas.gameObject.transform);
|
|
this.minigame = this.ui.GetComponent<Minigame>();
|
|
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<RectTransform>().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<CreatureActions>();
|
|
foreach (Creatures creatures in this.enemyCreatures)
|
|
{
|
|
CreatureActions component = creatures.gameObject.GetComponent<CreatureActions>();
|
|
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<CreatureActions>();
|
|
foreach (Creatures creatures2 in this.allyCreatures)
|
|
{
|
|
CreatureActions component2 = creatures2.gameObject.GetComponent<CreatureActions>();
|
|
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<DoorActions>();
|
|
}
|
|
}
|
|
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<BoxCollider> collidersUp = new List<BoxCollider>();
|
|
|
|
// Token: 0x04000D45 RID: 3397
|
|
public List<GameObject> objects = new List<GameObject>();
|
|
|
|
// Token: 0x04000D46 RID: 3398
|
|
public List<bool> status = new List<bool>();
|
|
|
|
// Token: 0x04000D47 RID: 3399
|
|
public List<bool> lookingFor = new List<bool>();
|
|
|
|
// Token: 0x04000D48 RID: 3400
|
|
public List<bool> lookingForD5 = new List<bool>();
|
|
|
|
// Token: 0x04000D49 RID: 3401
|
|
public List<PuzzleListener> listenersUp = new List<PuzzleListener>();
|
|
|
|
// Token: 0x04000D4A RID: 3402
|
|
public List<Vector3> originalPositions = new List<Vector3>();
|
|
|
|
// Token: 0x04000D4B RID: 3403
|
|
public List<Vector3> downPositions = new List<Vector3>();
|
|
|
|
// Token: 0x04000D4C RID: 3404
|
|
public List<Character> hitCharacters = new List<Character>();
|
|
|
|
// Token: 0x04000D4D RID: 3405
|
|
public MeshRenderer[] renderers = new MeshRenderer[0];
|
|
|
|
// Token: 0x04000D4E RID: 3406
|
|
private List<Animator> animators = new List<Animator>();
|
|
|
|
// 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<Character> partyList;
|
|
|
|
// Token: 0x04000D53 RID: 3411
|
|
private List<Collider> puzzleColliders = new List<Collider>();
|
|
|
|
// 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<int> 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<Transform> spots;
|
|
|
|
// Token: 0x04000D62 RID: 3426
|
|
private List<Transform> 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<Character> spawned = new List<Character>();
|
|
|
|
// 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<Creatures> enemyCreatures;
|
|
|
|
// Token: 0x04000D6F RID: 3439
|
|
private List<Creatures> allyCreatures;
|
|
|
|
// Token: 0x04000D70 RID: 3440
|
|
private List<CreatureActions> enemies;
|
|
|
|
// Token: 0x04000D71 RID: 3441
|
|
private List<CreatureActions> allies;
|
|
|
|
// Token: 0x04000D72 RID: 3442
|
|
private List<Character> 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<Character> 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;
|
|
}
|