using System; using System.Collections; using System.Collections.Generic; using Pathfinding; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; // Token: 0x0200002E RID: 46 public class Fellowship : MonoBehaviour { // Token: 0x060006EF RID: 1775 RVA: 0x00094B38 File Offset: 0x00092D38 private void Start() { this.playerInput = base.gameObject.GetComponent(); this.moveAction = this.playerInput.actions["Move"]; this.directionAction = this.playerInput.actions["Target"]; this.party = Links.x.party; this.waypoint = Links.x.cellar.GetPooledGameObject(0); this.waypoint.SetActive(false); this.waypointAnimator = this.waypoint.transform.GetChild(0).gameObject.GetComponent(); this.waypoint.transform.parent = base.transform; this.gameplayCircleTiles = Links.x.gameplay.circleTiles; this.nodeConstraintDir.constrainWalkability = true; this.nodeConstraintDir.walkable = true; this.nodeConstraintDir.constrainTags = false; this.nodeConstraintDir.checkCircleID = 0; this.nodeConstraintDir.passID = 0; this.nodeConstraintDir.passID2 = 0; this.nodeConstraintDir.constrainPenalty = 0; this.nodeConstraintDir.checkConnections = 8; this.nodeConstraintDir.constrainToArea = -1; Shader.SetGlobalVector("_JoystickDirection", Links.x.gameplay.farPosition); this.checkTime = Time.timeSinceLevelLoad; this.portraitParentRoleSheet = Links.x.characterSheet.portraitParent; this.currentFormationPoints = this.formationPoints1; this.GetFormation(); } // Token: 0x060006F0 RID: 1776 RVA: 0x00094CC6 File Offset: 0x00092EC6 public int CharacterIndex(Character character) { return this.party.IndexOf(character); } // Token: 0x060006F1 RID: 1777 RVA: 0x00094CD4 File Offset: 0x00092ED4 public int GroupLevel() { int num = 0; for (int i = 0; i < this.party.Count; i++) { Character character = this.party[i]; if (character && character.IsSentient() && character.party) { num += character.stats.level; } } return num; } // Token: 0x060006F2 RID: 1778 RVA: 0x00094D30 File Offset: 0x00092F30 public void SetPartyNodes(string type) { bool flag = false; if (type == "Moving") { flag = true; } for (int i = 0; i < this.party.Count; i++) { if (!this.party[i].CanMove()) { this.party[i].SetNodeID(true, flag); } } } // Token: 0x060006F3 RID: 1779 RVA: 0x00094D8A File Offset: 0x00092F8A public void NewScene() { this.nodeConstraint = new NNConstraint(); this.nodeConstraintParty = new NNConstraint(); this.nodeConstraintFormation = new NNConstraint(); this.mouseNode = null; this.canPath = true; } // Token: 0x060006F4 RID: 1780 RVA: 0x00094DBC File Offset: 0x00092FBC public GraphNode NearNode(Vector3 pos, bool checkEmpty, bool overWater, bool spellTargetingGround, int checkCircle, int area) { if (!Links.x.gaia.pathfindingReady) { return null; } this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainTags = checkEmpty; this.nodeConstraintDir.checkCircleID = checkCircle; this.nodeConstraint.passID = 0; this.nodeConstraint.passID2 = 0; this.nodeConstraint.constrainPenalty = 0; this.nodeConstraint.checkConnections = 0; this.nodeConstraint.constrainToArea = area; if (overWater) { this.nodeConstraint.constrainToEnvironment = 2; } else if (spellTargetingGround) { this.nodeConstraint.constrainToEnvironment = 3; } else { this.nodeConstraint.constrainToEnvironment = 1; } if (!(AstarPath.active != null)) { return null; } GraphNode node = AstarPath.active.GetNearest(pos, this.nodeConstraint).node; if (node != null) { return node; } return null; } // Token: 0x060006F5 RID: 1781 RVA: 0x00094EA8 File Offset: 0x000930A8 public bool GetDirection(Character character, out Quaternion rot, out Vector3 moveSpeed) { rot = Quaternion.Euler(Vector3.zero); moveSpeed = Vector3.zero; if (Links.x.joy && (Links.x.gameplay.hudLeftOpen || Links.x.gameplay.hudRightOpen || Links.x.gameplay.descWindowOpen)) { this.joyStickDown = true; return false; } if (Links.x.joy && (this.joyStickDown || Links.x.gameplay.aimHold || Links.x.gameplay.gameFeedScrolling || Links.x.gameplay.makeCircleMode)) { return false; } if (Records.x.paused) { return false; } float num = this.angle; Quaternion rot2 = character.rot; this.angle = Mathf.Atan2(this.move.x, this.move.y) / 3.1415927f * 180f; if (this.angle < 0f) { this.angle += 360f; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Left"))) { this.keyDown = "Left"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Right"))) { this.keyDown = "Right"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Up"))) { this.keyDown = "Up"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Down"))) { this.keyDown = "Down"; } if (this.keyDown == "Left" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { this.keyDown = ""; } if (this.keyDown == "Right" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right"))) { this.keyDown = ""; } if (this.keyDown == "Up" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { this.keyDown = ""; } if (this.keyDown == "Down" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { this.keyDown = ""; } float y = Links.x.worldCamera.transform.rotation.eulerAngles.y; bool flag = false; if (Links.x.mk) { if (Input.GetMouseButton(0) && Links.x.pathfind) { float num2 = 0.5f; if (!Links.x.worldCamera.orthographic) { num2 = 1.25f; } Vector3 right = Links.x.rtsCamera.gameObject.transform.right; Vector3 vector = character.tr.position + right * -1f * num2; Vector3 vector2 = character.tr.position + right * num2; Vector3 vector3 = character.tr.position + new Vector3(0f, num2, 0f); Vector3 vector4 = character.tr.position - new Vector3(0f, num2, 0f); Vector3 vector5 = Links.x.worldCamera.WorldToViewportPoint(character.tr.position); Vector3 vector6 = Links.x.worldCamera.WorldToViewportPoint(vector); Vector3 vector7 = Links.x.worldCamera.WorldToViewportPoint(vector2); Vector3 vector8 = Links.x.worldCamera.WorldToViewportPoint(vector3); Vector3 vector9 = Links.x.worldCamera.WorldToViewportPoint(vector4); Vector2 vector10 = new Vector2(vector5.x, vector5.y) - new Vector2(0.5f, 0.5f); new Vector2(vector5.x, vector5.y) - new Vector2(Input.mousePosition.x / (float)Screen.width, Input.mousePosition.y / (float)Screen.height); Vector3 vector11 = new Vector3(Input.mousePosition.x / (float)Screen.width, Input.mousePosition.y / (float)Screen.height, 0f); float num3 = Mathf.Atan2(Input.mousePosition.x / (float)Screen.width - (0.5f + vector10.x), Input.mousePosition.y / (float)Screen.height - (0.5f + vector10.y)) / 3.1415927f * 180f; if (vector11.x > vector6.x && vector11.x < vector7.x && vector11.y > vector9.y && vector11.y < vector8.y && character.mainSelected) { this.angle = num; } else { character.fellowshipMod = 1f; this.angle = num3; } rot = Quaternion.Euler(new Vector3(0f, this.angle + y, 0f)); flag = true; } else { if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { rot = Quaternion.Euler(new Vector3(0f, 315f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { rot = Quaternion.Euler(new Vector3(0f, 45f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { rot = Quaternion.Euler(new Vector3(0f, 225f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { rot = Quaternion.Euler(new Vector3(0f, 135f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { if (this.keyDown == "Left") { rot = Quaternion.Euler(new Vector3(0f, 270f + y, 0f)); flag = true; } else { rot = Quaternion.Euler(new Vector3(0f, 90f + y, 0f)); flag = true; } } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { if (this.keyDown == "Down") { rot = Quaternion.Euler(new Vector3(0f, 180f + y, 0f)); flag = true; } else { rot = Quaternion.Euler(new Vector3(0f, 0f + y, 0f)); flag = true; } } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { rot = Quaternion.Euler(new Vector3(0f, 270f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right"))) { rot = Quaternion.Euler(new Vector3(0f, 90f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { rot = Quaternion.Euler(new Vector3(0f, 180f + y, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { rot = Quaternion.Euler(new Vector3(0f, 0f + y, 0f)); flag = true; } } } if (Links.x.mk) { if (flag) { this.t += Time.deltaTime; if (this.t > 1f) { this.t = 1f; } } else { this.t -= Time.deltaTime; if (this.t < 0f) { this.t = 0f; } } moveSpeed = new Vector3(this.t, 0f, this.t); } if (Links.x.joy) { rot = Quaternion.Euler(new Vector3(0f, this.angle + y, 0f)); if (this.angle > 0f) { flag = true; } moveSpeed = new Vector3(this.move.x, 0f, this.move.y); } if (flag && character.mainSelected) { this.formationHead.rotation = Quaternion.LookRotation(Links.x.main.tr.position + rot * Vector3.forward * 0.5f - Links.x.main.tr.position); } return flag; } // Token: 0x060006F6 RID: 1782 RVA: 0x00095994 File Offset: 0x00093B94 public bool MakeDirectionalWaypoint(bool endOfPath) { if (!Links.x.main || Links.x.main) { return false; } if (Links.x.joy) { this.joyStickDown = true; return false; } if (Links.x.joy && this.joyStickDown) { return false; } if (Records.x.paused) { return false; } Vector3 zero = Vector3.zero; Quaternion quaternion = Quaternion.Euler(Vector3.zero); float num = Mathf.Atan2(this.move.x, this.move.y) / 3.1415927f * 180f; if (num < 0f) { num += 360f; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Left"))) { this.keyDown = "Left"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Right"))) { this.keyDown = "Right"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Up"))) { this.keyDown = "Up"; } if (Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("Down"))) { this.keyDown = "Down"; } if (this.keyDown == "Left" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { this.keyDown = ""; } if (this.keyDown == "Right" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right"))) { this.keyDown = ""; } if (this.keyDown == "Up" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { this.keyDown = ""; } if (this.keyDown == "Down" && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { this.keyDown = ""; } if (this.prevKeyDown != this.keyDown) { this.prevConnection1 = null; this.prevConnection2 = null; this.prevConnection3 = null; } float num2 = Links.x.worldCamera.transform.rotation.eulerAngles.y + Records.x.gridOffset; bool flag = false; Vector3 vector = Links.x.main.tr.position; if (Links.x.mk) { if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { quaternion = Quaternion.Euler(new Vector3(0f, 315f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { quaternion = Quaternion.Euler(new Vector3(0f, 45f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { quaternion = Quaternion.Euler(new Vector3(0f, 225f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { quaternion = Quaternion.Euler(new Vector3(0f, 135f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { if (this.keyDown == "Left") { quaternion = Quaternion.Euler(new Vector3(0f, 270f + num2, 0f)); flag = true; } else { quaternion = Quaternion.Euler(new Vector3(0f, 90f + num2, 0f)); flag = true; } } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up")) && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { if (this.keyDown == "Down") { quaternion = Quaternion.Euler(new Vector3(0f, 180f + num2, 0f)); flag = true; } else { quaternion = Quaternion.Euler(new Vector3(0f, 0f + num2, 0f)); flag = true; } } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left"))) { quaternion = Quaternion.Euler(new Vector3(0f, 270f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right"))) { quaternion = Quaternion.Euler(new Vector3(0f, 90f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down"))) { quaternion = Quaternion.Euler(new Vector3(0f, 180f + num2, 0f)); flag = true; } if (!flag && Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up"))) { quaternion = Quaternion.Euler(new Vector3(0f, 0f + num2, 0f)); flag = true; } } if (Links.x.joy) { quaternion = Quaternion.Euler(new Vector3(0f, num + num2, 0f)); if (num > 0f) { flag = true; } } this.prevKeyDown = this.keyDown; bool flag2 = false; if (this.savedRot != quaternion && !Links.x.joy) { flag2 = true; } this.savedRot = quaternion; if (flag && Links.x.hasMain && (endOfPath || (!endOfPath && !Links.x.main.moving) || (!endOfPath && flag2)) && !Records.x.pocketPause) { Character main = Links.x.main; Vector3 vector2 = main.moveFollow.position; if (main.node != null) { vector2 = (Vector3)main.node.position; } if ((endOfPath || main.CanMakePath()) && main.IsSentient()) { Vector3 vector3 = vector2 + quaternion * Vector3.forward * Records.x.nodeSize; Debug.DrawRay(vector2, quaternion * Vector3.forward * 2f, Color.white, 2f); main.StopMoveToRoutine(); main.ClearMoveTargets(); this.nodeConstraintDir.constrainWalkability = true; this.nodeConstraintDir.walkable = true; this.nodeConstraintDir.constrainTags = false; this.nodeConstraintDir.passID = main.nodeStationaryID; this.nodeConstraintDir.passID2 = main.nodeMovingID; this.nodeConstraintDir.constrainPenalty = 0; this.nodeConstraintDir.checkConnections = main.ConnectionNumber(); this.nodeConstraintDir.constrainToArea = -1; this.nodeConstraint.constrainToEnvironment = 1; RaycastHit raycastHit; if (Physics.Raycast(vector3 + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 10f, 4456449)) { vector3 = raycastHit.point; } float num3 = Records.x.nodeSize + 0.5f; GraphNode graphNode = null; Vector3 vector4 = (Vector3)main.node.position; float num4 = -1f; Character character = null; for (int i = 0; i < 8; i++) { GraphNode graphNode2 = main.node.ConnectionFromIndex(i); if (graphNode2 != null) { Vector3 vector5 = (Vector3)graphNode2.position; Vector3 vector6 = Quaternion.LookRotation(vector3 - vector4) * Vector3.forward; Vector3 vector7 = Vector3.Normalize(vector5 - vector4); float num5 = Vector3.Dot(vector6, vector7); if (num5 >= -0.25f && num5 > num4) { this.nodeConstraintDir.constrainTags = main.hasActions; if (this.nodeConstraintDir.Suitable(graphNode2)) { bool flag3 = true; if (!main.hasActions) { for (int j = 0; j < 8; j++) { int num6 = graphNode2.ConnectionID(j); if (num6 != main.nodeStationaryID && num6 != main.nodeMovingID) { Character character2 = null; if (!main.ConnectionIsStill(num6, out character2)) { flag3 = false; character = character2; } } } } if (flag3) { num4 = num5; graphNode = graphNode2; } } } } } if (character) { character.EndPath(); } if (graphNode == null) { graphNode = main.node; } if (graphNode != null) { (Vector3)graphNode.position; if (Vector3.Distance((Vector3)graphNode.position, vector3) < num3) { vector = vector3; } else { vector = (Vector3)graphNode.position; } if (flag2 && main.NodesCount() > 0) { main.ClearNodePath(); } main.pathTargPosition = (Vector3)graphNode.position; Links.x.main.AddKeyNode(graphNode, vector); this.SetFormationHead(graphNode); this.savedRot = quaternion; return true; } } } return false; } // Token: 0x060006F7 RID: 1783 RVA: 0x0009640C File Offset: 0x0009460C public void SetFormationHead(GraphNode n) { Character character = Links.x.main; if (character.summoned) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i].selected && !this.party[i].summoned) { character = this.party[i]; this.party[i].SetAsLeader(); break; } } } if ((Vector3)n.position != character.tr.position) { this.formationHead.rotation = Quaternion.LookRotation((Vector3)n.position - character.tr.position); } this.formationHead.position = (Vector3)n.position; } // Token: 0x060006F8 RID: 1784 RVA: 0x000964E8 File Offset: 0x000946E8 public GraphNode GetFormationPosition(GraphNode node, Character character, bool useLine) { GraphNode graphNode = null; int num; if (!character.vipFollow) { num = Links.x.GetPortraitIndexWaypoints(character); if (character.summoned) { num = 4 + Links.x.GetPartySummonsIDReal(character); if (!useLine && num > 3) { num = 3; } } } else { num = 3; if (useLine) { num = 4; } } if (node == null) { return null; } this.nodeConstraintFormation.constrainToArea = (int)node.Area; this.nodeConstraintFormation.walkable = true; this.nodeConstraintFormation.constrainWalkability = true; this.nodeConstraintFormation.constrainTags = true; this.nodeConstraintFormation.checkCircleID = 1; this.nodeConstraintFormation.passID = character.nodeStationaryID; this.nodeConstraintFormation.passID2 = character.nodeMovingID; this.nodeConstraintFormation.constrainPenalty = 2; this.nodeConstraintFormation.checkConnections = character.ConnectionNumber(); if (Records.x.partySailing) { this.nodeConstraintFormation.constrainToEnvironment = 2; } else { this.nodeConstraintFormation.constrainToEnvironment = 1; } if (this.companionNode1 != null && !Records.x.InCombat(false)) { if (num == 1) { return this.companionNode1; } if (num == 2 && this.companionNode2 != null) { return this.companionNode2; } if (num == 3 && this.companionNode3 != null) { return this.companionNode3; } if (character.summoned && this.companionNode4 != null) { GraphNode graphNode2 = character.NearNode((Vector3)this.companionNode4.position, true, 0, -1, character.CheckCircleID()); if (graphNode2 != null) { return graphNode2; } } } bool flag = false; if (num > 1 && character.hasActions && !useLine) { num = Mathf.RoundToInt((float)num / 2f); } character.portraitID = (float)num; if (num == 0) { return node; } GraphNode graphNode3 = node; int num2 = 0; Vector3 vector = this.formationHead.forward * (float)num * -2f + (Vector3)node.position; for (int i = 0; i < this.party.Count; i++) { if (this.party[i]) { if (this.party[i].moving) { if (this.party[i].savedPathTarget != null) { this.party[i].savedPathTarget.planningA = 1; } } else if (this.party[i].node != null) { this.party[i].node.planningA = 1; } } } if (useLine) { this.nodeConstraintFormation.constrainTags = true; this.nodeConstraintFormation.constrainPenalty = 2; this.nodeConstraintFormation.constrainWalkability = true; this.nodeConstraintFormation.uniqueID = 1; int num3 = -1; if (Links.x.main && Links.x.main.node != null) { num3 = (int)Links.x.main.node.Area; } this.nodeConstraint.constrainToArea = num3; vector = this.formationHead.forward * (float)num * -2.5f + (Vector3)node.position; if (num % 2 == 0) { vector += this.formationHead.right * 2.5f; } else { vector += this.formationHead.right * -2.5f; } graphNode = AstarPath.active.GetNearest(vector, this.nodeConstraint).node; } else { int num4 = num; if (flag) { num4 = 1; } for (int j = 0; j < 50; j++) { this.nodeConstraintFormation.constrainTags = true; this.nodeConstraintFormation.constrainPenalty = 2; this.nodeConstraintFormation.constrainWalkability = true; this.nodeConstraintFormation.uniqueID = 0; GraphNode graphNode4 = graphNode3.ClosestConnectionDirectional(graphNode3, character.nodeStationaryID, character.nodeMovingID, 10000f, vector, (int)character.radius, character.ConnectionNumber(), this.nodeConstraintFormation, null, null, null, 0, -1); if (graphNode4 != null) { (Vector3)graphNode3.position; (Vector3)graphNode3.position; this.nodeConstraintFormation.uniqueID = 1; if (this.nodeConstraintFormation.Suitable(graphNode4)) { num2++; graphNode = graphNode4; if (num2 >= num4) { break; } graphNode3 = graphNode4; vector -= this.formationHead.forward * 2.5f; } else { graphNode3 = graphNode4; vector -= this.formationHead.forward * 1.5f; } } else { this.nodeConstraintFormation.constrainTags = false; this.nodeConstraintFormation.constrainPenalty = 0; this.nodeConstraintFormation.constrainWalkability = false; this.nodeConstraintFormation.uniqueID = 0; graphNode4 = graphNode3.ClosestConnectionDirectional(graphNode3, 0, 0, 10000f, vector, 1, 0, this.nodeConstraintFormation, null, null, null, 0, -1); if (graphNode4 != null) { graphNode3 = graphNode4; } vector -= this.formationHead.forward * 3f; } if (j % 5 == 0 && j >= 10) { vector += this.formationHead.right * 2f; } if (j % 8 == 0 && j >= 10) { vector += this.formationHead.right * -2f; } } } for (int k = 0; k < this.party.Count; k++) { if (this.party[k]) { if (this.party[k].moving) { if (this.party[k].savedPathTarget != null) { this.party[k].savedPathTarget.planningA = 0; } } else if (this.party[k].node != null) { this.party[k].node.planningA = 0; } } } return graphNode; } // Token: 0x060006F9 RID: 1785 RVA: 0x00096B10 File Offset: 0x00094D10 public GraphNode GetFormationPointInCircle(Character c) { GraphNode graphNode = c.node; if (this.circleTiles.Contains(graphNode)) { return graphNode; } if (c.summoned && !Links.x.main.hasCircleBuff && Records.x.InCombat(false)) { return graphNode; } this.nodeConstraintFormation.constrainToArea = -1; this.nodeConstraintFormation.walkable = true; this.nodeConstraintFormation.constrainWalkability = true; this.nodeConstraintFormation.constrainTags = true; this.nodeConstraintFormation.checkCircleID = 1; this.nodeConstraintFormation.passID = c.nodeStationaryID; this.nodeConstraintFormation.passID2 = c.nodeMovingID; this.nodeConstraintFormation.constrainPenalty = 0; this.nodeConstraintFormation.checkConnections = c.ConnectionNumber(); if (Records.x.partySailing) { this.nodeConstraintFormation.constrainToEnvironment = 2; } else { this.nodeConstraintFormation.constrainToEnvironment = 1; } this.openTiles.Clear(); for (int i = 0; i < this.circleTiles.Count; i++) { GraphNode graphNode2 = this.circleTiles[i]; if (this.nodeConstraintFormation.Suitable(graphNode2)) { bool flag = false; for (int j = 0; j < this.party.Count; j++) { if (this.party[j] && this.party[j].savedPathTarget == graphNode2) { flag = true; } } if (!flag) { this.openTiles.Add(graphNode2); } } } Vector3 vector = Links.x.gameplay.frontOfCircle; float num = float.PositiveInfinity; if (c.stats.formationGroup >= 4 && c.stats.formationGroup <= 6) { vector = Links.x.gameplay.middleCircle; } if (c.stats.formationGroup >= 7 && c.stats.formationGroup <= 9) { vector = Links.x.gameplay.backOfCircle; } for (int k = 0; k < this.openTiles.Count; k++) { float sqrMagnitude = ((Vector3)this.openTiles[k].position - vector).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; graphNode = this.openTiles[k]; } } return graphNode; } // Token: 0x060006FA RID: 1786 RVA: 0x00096D64 File Offset: 0x00094F64 public void MakeWaypoints(Vector3 mousePoint, GraphNode moveToNode, bool estimatePath, bool overWater) { if (Links.x.hasMain) { bool flag = EventSystem.current.IsPointerOverGameObject(); if ((flag && (moveToNode != null || this.newFormation)) || !flag) { this.mPoint = mousePoint; this.mouseNode = null; if (mousePoint != Vector3.zero && (estimatePath || Input.GetMouseButtonDown(0)) && this.mouseNode == null && Links.x.main.node != null) { this.mouseNode = this.NearNode(mousePoint, false, overWater, false, 0, (int)Links.x.main.node.Area); } GraphNode graphNode = this.mouseNode; bool flag2 = false; if (moveToNode != null) { graphNode = moveToNode; flag2 = true; if (!Links.x.hasMain) { return; } } else { graphNode = Links.x.gameplay.mouseNode; } if (graphNode != null && estimatePath) { this.StartEstimatePath(graphNode); } bool flag3 = false; if (Links.x.gameplay.quickReposition || (Links.x.pocketWheel.open && (Links.x.pocketWheel.selected == "Command Group" || Links.x.pocketWheel.selected == "Command Reposition"))) { flag3 = true; } if (graphNode != null && !estimatePath) { this.canPath = true; if ((this.canPath && Input.GetMouseButtonDown(0)) || flag2 || this.newFormation || flag3) { if (this.estimatePathRoutine != null) { base.StopCoroutine(this.estimatePathRoutine); this.estimatePathRoutine = null; } if (!flag2 && this.scatterCoroutine != null) { base.StopCoroutine(this.scatterCoroutine); } if (!this.drawingSquare) { this.creatingPath = true; this.SetFormationHead(graphNode); Links.x.gameplay.NewPaths(); int num = 0; this.pickedNodes.Clear(); Character character = null; if (Records.x.partySailing) { Links.x.gaia.boro.showWaypoint = true; Links.x.gaia.boro.MakePath(this.mouseNode, 500, false, false, true); } else { for (int i = 0; i < this.party.Count; i++) { Character character2 = this.party[i]; if (((!flag3 && character2.mainSelected) || (flag3 && !character2.mainSelected)) && character2.IsSentient() && !character2.isBoro && !character2.pipeSummons) { bool flag4 = true; character2.running = false; if (character2.hasActions && character2.actions.cannotInterrupt) { flag4 = false; character2.actions.TryingToInterruptInventoryWait(); } if (flag4) { character2.StopMoveToRoutine(); if (!flag2) { character2.ClearMoveTargets(); } num++; if (!character2.mainSelected) { if (!character) { character = character2; this.pickedNodes.Add(graphNode); } else { GraphNode graphNode2; if (character2.inCircle) { if (this.circleTiles.Contains(graphNode)) { graphNode2 = this.GetFormationPointInCircle(character2); } else { graphNode2 = this.GetFormationPosition(graphNode, character2, true); } } else { graphNode2 = this.GetFormationPosition(graphNode, character2, true); } if (graphNode2 == null) { graphNode2 = graphNode; } this.pickedNodes.Add(graphNode2); } } else { this.pickedNodes.Add(graphNode); } } else { this.pickedNodes.Add(null); } } else { this.pickedNodes.Add(null); } } for (int j = 0; j < this.pickedNodes.Count; j++) { Character character3 = this.party[j]; if (this.pickedNodes[j] != null && character3) { if (character3.stats.Overburdened()) { character3.StartQuip("I'm overburdened"); } if (character3.actions) { if (character3.actions && !character3.mainSelected) { character3.actions.ClearSelectedActionRealTime(); } if (character3.actions && !character3.mainSelected) { character3.actions.Interrupt(); } if (character3.actions) { character3.actions.CheckIfRunningAI(); } if (character3.actions) { character3.actions.hasWaypoint = true; } } if (!flag2) { character3.ClearMoveTargets(); } if (!character3.mainSelected) { character3.ClearPathUpdates(); character3.showWaypoint = true; if (flag2 && Links.x.main.followingType != "Dialogue" && !flag3) { character3.followingType = Links.x.main.followingType; character3.followingExit = Links.x.main.followingExit; character3.followingBoat = Links.x.main.followingBoat; character3.followingNode = Links.x.main.followingNode; character3.followingCharacter = Links.x.main.followingCharacter; if (!character3.CheckEarlyIfInRange()) { character3.MakePath(this.pickedNodes[j], 500, false, false, true); } } else if (Records.x.paused || Records.x.pocketPause || flag3) { if (!Links.x.pocketWheel.selected.Contains("Group") || !Links.x.pocketWheel.open) { character3.showWaypoint = true; if (character3 == character) { character3.SetWaypoint(mousePoint); } else { character3.SetWaypoint((Vector3)this.pickedNodes[j].position); } character3.commandMove = this.pickedNodes[j]; } else { character3.showWaypoint = false; } character3.StartDelayedPath(this.pickedNodes[j], (float)j, (float)j * 0.02f + Random.Range(0f, 0.02f)); if (flag3 && character3.actions && character3.actions.hasTarget) { float num2 = character3.AttackRange(); if (character3.actions.selectedTargetInteractive) { if (Vector3.Distance((Vector3)this.pickedNodes[j].position, character3.actions.selectedTargetInteractive.transform.position) > num2) { character3.actions.SetSelectedTarget(false, null, null, null); } } else if (character3.actions.selectedTarget && Vector3.Distance((Vector3)this.pickedNodes[j].position, character3.actions.selectedTarget.currentPosition) > num2) { character3.actions.SetSelectedTarget(false, null, null, null); } } } else { character3.StartDelayedPath(this.pickedNodes[j], (float)j, (float)j * 0.02f + Random.Range(0f, 0.02f)); } } else { character3.clickedPoint = mousePoint; character3.ClearPathUpdates(); character3.showWaypoint = true; character3.pathTargPosition = (Vector3)this.pickedNodes[j].position; character3.MakePath(this.pickedNodes[j], 500, false, false, true); } if (Links.x.gameplay.doubleClick && (Records.x.editor || Records.x.secrets)) { character3.running = true; } } } } this.waypoint.transform.position = mousePoint; } this.creatingPath = false; this.previousClick = (Vector3)graphNode.position; } } this.newFormation = false; } } } // Token: 0x060006FB RID: 1787 RVA: 0x00097570 File Offset: 0x00095770 public void StartEstimatePath(GraphNode mNode) { if (this.prevNode == mNode && Time.timeSinceLevelLoad > this.prevNodeTime + 0.5f) { this.prevNode = null; this.prevNodeTime = Time.timeSinceLevelLoad; } if (this.combatWait || !Records.x.combat) { this.prevNode = null; this.combatWait = false; } if (false && this.estimatePathRoutine == null && mNode != null && !Links.x.combat.combatCinematics && !Links.x.gameplay.targetingCharacter && this.prevNode != mNode) { this.estimatePathRoutine = this.EstimatePath(mNode); base.StartCoroutine(this.estimatePathRoutine); this.prevNode = mNode; } this.canPath = true; } // Token: 0x060006FC RID: 1788 RVA: 0x00097633 File Offset: 0x00095833 private IEnumerator EstimatePath(GraphNode mNode) { if (!this.creatingPath) { Character mainCharacter = Links.x.main; this.pickedNodesEstimated.Clear(); this.SetFormationHead(mNode); for (int j = 0; j < this.party.Count; j++) { if (this.party[j].mainSelected) { GraphNode formationPosition = this.GetFormationPosition(mNode, this.party[j], true); if (formationPosition != null) { this.pickedNodesEstimated.Add(formationPosition); } else { this.pickedNodesEstimated.Add(null); this.waypoint.transform.position = Links.x.gameplay.farPosition; } } else { this.pickedNodesEstimated.Add(null); } } int num2; for (int i = 0; i < this.pickedNodesEstimated.Count; i = num2 + 1) { if (i < this.party.Count && this.party[i] && this.pickedNodesEstimated[i] != null && this.party[i].node != null) { this.SetNodeConstraint(this.party[i], true, true, false, 0, 1); ABPath p = ABPath.ConstructFast(this.party[i].node, this.pickedNodesEstimated[i], null); p.nnConstraint = this.nodeConstraint; AstarPath.StartPath(p, false); yield return base.StartCoroutine(p.WaitForPath()); p.Claim(this); if (!p.error) { this.canPath = true; this.path = p.path; this.waypoint.transform.position = (Vector3)this.pickedNodesEstimated[i].position - new Vector3(0f, 0.5f, 0f); if (!Links.x.gameplay.targetingCharacter && !Links.x.gameplay.spellTargetingGround) { (Vector3)this.pickedNodesEstimated[i].position; int num = 0; for (int k = 0; k < this.path.Count; k++) { if (this.path[k] != null) { if (k == 0) { if (this.path[k] != mainCharacter.node) { (Vector3)this.path[k].position; GraphNode graphNode = this.path[k]; num++; } } else { (Vector3)this.path[k].position; GraphNode graphNode2 = this.path[k]; num++; } } } } } else { this.canPath = false; this.waypoint.transform.position = Links.x.gameplay.farPosition; } p.Release(this, false); p = null; } num2 = i; } mainCharacter = null; } bool flag = this.canPath; this.estimatePathRoutine = null; yield break; } // Token: 0x060006FD RID: 1789 RVA: 0x00097649 File Offset: 0x00095849 public void AddHudPortraitChange(Character character) { if (this.portraitHudUpdate.IndexOf(character) < 0) { this.portraitHudUpdate.Add(character); } } // Token: 0x060006FE RID: 1790 RVA: 0x00097666 File Offset: 0x00095866 public void AddPortraitChange(Character character) { if (this.portraitUpdate.IndexOf(character) < 0) { this.portraitUpdate.Add(character); } } // Token: 0x060006FF RID: 1791 RVA: 0x00097684 File Offset: 0x00095884 private void Update() { this.move = this.moveAction.ReadValue(); this.direction = this.directionAction.ReadValue(); if (this.joyStickDown && this.move.magnitude < 0.2f) { this.joyStickDown = false; } if (Links.x.joy) { bool flag = false; if (Mathf.Abs(this.move.magnitude) > 0.1f && Links.x.hasMain && !Links.x.pocketWheel.spellbook.activeSelf && !Links.x.gameplay.inPartyDock && !Links.x.gameplay.gameFeedScrolling && ((Records.x.pocketPause && Links.x.pocketWheel.targetSelection) || (!Records.x.pocketPause && Links.x.gameplay.aimHold)) && Links.x.main.IsSentient() && !Records.x.inMenus && !Records.x.removeControls && !Records.x.typing && !Links.x.gameplay.dockDown && !Links.x.gameplay.badgeScrolling) { this.angle = Mathf.Atan2(this.move.x, this.move.y) / 3.1415927f * 180f; float y = Links.x.worldCamera.transform.rotation.eulerAngles.y; if (this.angle < 0f) { this.angle += 360f; } Quaternion quaternion = Quaternion.Euler(new Vector3(0f, this.angle + y, 0f)); Vector3 vector = Links.x.main.tr.position + quaternion * Vector3.forward * 10f; Shader.SetGlobalVector("_JoystickDirection", vector); Shader.SetGlobalFloat("_JoystickMagnitude", Mathf.Abs(this.move.magnitude)); flag = true; } if (!flag) { Shader.SetGlobalVector("_JoystickDirection", Links.x.gameplay.farPosition); } } if (this.portraitUpdate.Count > 0 && Links.x.gaia.sceneLoaded) { Links.x.renderPortraits.AddCharacter(this.portraitUpdate[0], this.portraitUpdate[0].stats.xmlName, this.portraitUpdate[0].characterSheetPortrait, false, null, null, null, null); this.portraitUpdate.RemoveAt(0); } if (Time.timeSinceLevelLoad > this.updateTime + 0.05f && !Records.x.paused && !Records.x.paused && Links.x.gaia.sceneLoaded && !Records.x.pocketPause && this.waypointRoutine == null) { this.StartCheckIfAtTargetLocation(); this.updateTime = Time.timeSinceLevelLoad; } if (Time.timeSinceLevelLoad > this.checkTime + 2f && Links.x.gaia.sceneLoaded) { this.checkTime = Time.timeSinceLevelLoad; Links.x.renderPortraits.CheckForModel(); } if (Records.x.circle) { this.CheckCircle(); this.CheckCircleMorale(); } if (this.fading) { this.currentDither = Mathf.Lerp(this.startDither, this.endDither, this.fadeAmount * 1f); if ((this.endDither == 1f && this.currentDither >= 1f) || (this.endDither == 0f && this.currentDither <= 0f)) { this.fading = false; } this.fadeAmount += Time.deltaTime * 1.5f; } } // Token: 0x06000700 RID: 1792 RVA: 0x00097AB0 File Offset: 0x00095CB0 public bool EveryoneInPosition(Character c) { int num = 0; for (int i = 0; i < this.party.Count; i++) { Character character = this.party[i]; if (character && character.node != null) { Vector3 position = character.sphere.transform.position; float sqrMagnitude = ((Vector3)character.node.position - position).sqrMagnitude; if (character.moving || character.moveNode != null || character.tempStop || character.NodesCount() != 0 || sqrMagnitude >= 0.36f) { num++; } } } return num == 0; } // Token: 0x06000701 RID: 1793 RVA: 0x00097B60 File Offset: 0x00095D60 public void FreshBlinks() { foreach (Character character in this.party) { if (character && character.party) { Links.x.renderPortraits.FreshBlinks(character); } } } // Token: 0x06000702 RID: 1794 RVA: 0x00097BCC File Offset: 0x00095DCC public void ClearCompanionNodes() { this.companionNode1 = null; this.companionNode2 = null; this.companionNode3 = null; this.companionNode4 = null; } // Token: 0x06000703 RID: 1795 RVA: 0x00097BEC File Offset: 0x00095DEC public void SetUpCompanionNodes(Transform c1, Transform c2, Transform c3, Transform c4) { if (Records.x.editor) { Debug.Log(string.Concat(new string[] { "SETUP NODES ", (c1 != null) ? c1.ToString() : null, " ", (c2 != null) ? c2.ToString() : null, " ", (c3 != null) ? c3.ToString() : null, " ", (c4 != null) ? c4.ToString() : null })); } this.ClearCompanionNodes(); if (c1) { this.companionNode1 = this.NearNode(c1.position, false, false, false, 1, -1); } if (c2) { this.companionNode2 = this.NearNode(c2.position, false, false, false, 1, -1); } if (c3) { this.companionNode3 = this.NearNode(c3.position, false, false, false, 1, -1); } if (c4) { this.companionNode4 = this.NearNode(c4.position, false, false, false, 1, -1); } } // Token: 0x06000704 RID: 1796 RVA: 0x00097CFA File Offset: 0x00095EFA public void AddRallySpeed(float amt) { this.rallySpeed += amt; } // Token: 0x06000705 RID: 1797 RVA: 0x00097D0C File Offset: 0x00095F0C public void SetWaitPositions() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i]) { this.party[i].waitPosition = this.party[i].currentPosition; } } } // Token: 0x06000706 RID: 1798 RVA: 0x00097D64 File Offset: 0x00095F64 public bool InCircle(Vector3 n, bool mustBeInside) { Vector3 vector = Vector3.zero; float num = 5f; if (mustBeInside) { num = 1.5f; } for (int i = 0; i < this.circleTiles.Count; i++) { vector = (Vector3)this.circleTiles[i].position; float num2 = vector.x - n.x; if (num2 < 0f) { num2 *= -1f; } if (num2 < num) { float num3 = vector.z - n.z; if (num3 < 0f) { num3 *= -1f; } if (num3 < num) { return true; } } } return false; } // Token: 0x06000707 RID: 1799 RVA: 0x00097E08 File Offset: 0x00096008 public void StartCircle(Vector3 clampedPoint) { if (this.breakRoutine != null) { base.StopCoroutine(this.breakRoutine); } Records.x.circle = true; this.circleTiles.Clear(); for (int i = 0; i < this.gameplayCircleTiles.Count; i++) { this.circleTiles.Add(this.gameplayCircleTiles[i]); this.gameplayCircleTiles[i].circle = 1; if (this.gameplayCircleTiles[i].Penalty == 0U) { this.circleTiles[i].Penalty = 8000U; } } this.timeOutsideCircle.Clear(); for (int j = 0; j < this.party.Count; j++) { if (this.party[j] && !this.party[j].pipeSummons && !this.party[j].isBoro) { this.party[j].inCircle = true; this.party[j].commandMove = null; } this.timeOutsideCircle.Add(-1f); } this.morale = 100; Links.x.hudControl.SetMorale((float)this.morale); this.dioramaCharacters = Links.x.diorama.characters; this.DrawCircle(clampedPoint); for (int k = 0; k < this.circleTiles.Count; k++) { Links.x.cameraEffects.GroupCharacters((Vector3)this.circleTiles[k].position, null, true); } this.StartCircleFade(false); } // Token: 0x06000708 RID: 1800 RVA: 0x00097FB4 File Offset: 0x000961B4 public void StartCircleFade(bool fadeOut) { if (fadeOut) { this.startDither = 0f; this.endDither = 1f; } else { this.startDither = 1f; this.endDither = 0f; } this.currentDither = this.startDither; this.fadeAmount = 0f; this.fading = true; } // Token: 0x06000709 RID: 1801 RVA: 0x00098010 File Offset: 0x00096210 public void RemovePartyFromCircle(Character p) { int num = this.party.IndexOf(p); if (num > -1) { this.timeOutsideCircle.RemoveAt(num); } } // Token: 0x0600070A RID: 1802 RVA: 0x0009803A File Offset: 0x0009623A public void AddPartyToCircle(Character p) { this.timeOutsideCircle.Add(-1f); } // Token: 0x0600070B RID: 1803 RVA: 0x0009804C File Offset: 0x0009624C private void CheckCircleMorale() { bool flag = false; bool flag2 = false; int num = this.morale; int num2 = 0; for (int i = 0; i < this.party.Count; i++) { Character character = this.party[i]; if (character && character.inCircle && !character.pipeSummons && !character.isBoro) { num2++; } } int num3 = 1; int num4 = 1; int num5 = 1; if (num3 < 1) { num3 = 1; } int num6 = 3; int num7 = 0; int num8 = 0; int num9 = 0; float seconds = Links.x.gameplay.seconds; for (int j = 0; j < this.party.Count; j++) { Character character2 = this.party[j]; if (character2 && character2.IsSentient() && character2.inCircle && !character2.pipeSummons && !character2.summoned && !character2.isBoro) { bool flag3; if (!character2.hasCircleBuff) { if (this.timeOutsideCircle[j] == 0f) { num9++; this.timeOutsideCircle[j] = seconds; flag3 = true; } else if (this.timeOutsideCircle[j] == -1f) { num9++; if (character2.hasCircleBuff) { this.timeOutsideCircle[j] = 0f; } flag3 = true; } else if (seconds > this.timeOutsideCircle[j] + 6f) { flag3 = false; } else { num9++; flag3 = true; } } else { num9++; this.timeOutsideCircle[j] = 0f; flag3 = character2.IsSentient(); if (!character2.IsSentient()) { flag2 = true; } } if (flag3) { num8++; } } } if (num8 < num3) { flag = true; } else { if (num8 <= num4) { num7++; } if (num8 <= num5) { num7++; } } if (!flag) { this.intruderTemp.Clear(); this.intruderTimeTemp.Clear(); int num10 = 0; int num11 = 0; int num12 = 0; for (int k = 0; k < this.dioramaCharacters.Count; k++) { Character character3 = this.dioramaCharacters[k]; if (character3 && character3.npc && (character3.hostility >= 2 || character3.attackingUntilBribe) && this.InCircle(character3.currentPosition, true)) { int num13 = this.intruders.IndexOf(character3); if (num13 == -1) { this.intruderTemp.Add(character3); this.intruderTimeTemp.Add(seconds); } else { float num14 = this.intruderTime[num13]; this.intruderTemp.Add(character3); this.intruderTimeTemp.Add(num14); if (seconds > num14 + 100f) { num10++; if (seconds > num14 + 400f) { num12++; } } else { num11++; } } } } this.intruders.Clear(); this.intruderTime.Clear(); int num15 = 0; for (int l = 0; l < this.intruderTemp.Count; l++) { this.intruders.Add(this.intruderTemp[l]); this.intruderTime.Add(this.intruderTimeTemp[l]); if (seconds > this.intruderTimeTemp[l] + 60f) { num15++; } } if (num10 >= num6 || num12 > 0) { flag2 = true; flag = true; } if (num10 >= 1) { num7++; } if (num11 >= 1) { num7++; } if (num15 >= 2) { num7++; } if (num7 == 0) { this.morale = 100; } if (num7 == 1) { this.morale = 50; } if (num7 >= 2) { this.morale = 10; } Links.x.hudControl.SetMorale((float)this.morale); if (num != this.morale) { } if (!flag) { for (int m = 0; m < this.circleTiles.Count; m++) { if (this.circleTiles[m].Penalty == 0U) { this.circleTiles[m].Penalty = 8000U; } } } } if (flag) { this.BreakCircle(flag2); Links.x.gameplay.circleBreakObject.SetActive(false); } } // Token: 0x0600070C RID: 1804 RVA: 0x000984D0 File Offset: 0x000966D0 private void ReturnLines(int l) { for (int i = 0; i < this.lines.Count; i++) { Links.x.cellar.ReturnPooledGameObject(l, this.lines[i]); } this.lines.Clear(); } // Token: 0x0600070D RID: 1805 RVA: 0x0009851C File Offset: 0x0009671C private void DrawCircle(Vector3 clampedPoint) { float num = 9f; int num2 = 60; int num3 = this.linenum; this.linenum = 127; if (this.morale > 33 && this.morale < 66) { this.linenum = 126; } if (this.morale <= 33) { this.linenum = 125; } if (this.linenum != num3) { this.ReturnLines(num3); } bool flag = true; Vector3 vector = Vector3.zero; Vector3 vector2 = Vector3.up * -1f; Vector3 forward = Vector3.forward; Vector3 zero = Vector3.zero; float num4 = 0.25f; Vector3 vector3 = clampedPoint; vector3.y += 1.5f; 197120; Quaternion quaternion = Quaternion.identity; Vector3 vector4 = clampedPoint; Vector3 one = Vector3.one; int num5 = 0; this.positions.Clear(); for (int i = 0; i < this.circleTiles.Count; i++) { vector = (Vector3)this.circleTiles[i].position; int num6 = 12; if (flag) { num6 = 6; } float num7 = 6.2831855f / (float)num6; float num8 = 1.8f; if (flag) { num8 = 1.8f; } for (int j = 0; j < num6; j++) { float num9 = (float)j * num7; float num10 = num8 * Mathf.Cos(num9); float num11 = num8 * Mathf.Sin(num9); vector = (Vector3)this.circleTiles[i].position; vector.x += num10; vector.z += num11; this.positions.Add(vector); } } this.linesPoints.Clear(); float num12 = 6.2831855f / (float)num2; for (int k = 0; k < num2 + 1; k++) { int num13 = k; if (k == num2) { num13 = 0; } float num9 = (float)num13 * num12; float num10 = num * Mathf.Cos(num9); float num11 = num * Mathf.Sin(num9); vector = clampedPoint; vector.x += num10; vector.z += num11; float num14 = 200f; int num15 = -1; for (int l = 0; l < this.positions.Count; l++) { this.positions[l].y = vector.y; float sqrMagnitude = (this.positions[l] - vector).sqrMagnitude; if (sqrMagnitude < num14) { num14 = sqrMagnitude; num15 = l; } } if (num15 > -1) { vector = this.positions[num15]; } else { vector = Vector3.zero; } if (vector.x != 0f && vector.z != 0f) { float y = vector.y; vector.y += 3f; RaycastHit raycastHit; if (Physics.Raycast(vector, vector2, out raycastHit, 8f, Links.x.floor)) { vector.y = raycastHit.point.y + num4; } else { vector.y = y + num4; } if (vector4 != vector) { quaternion = Quaternion.LookRotation(vector4 - vector); if (k > 0) { if (flag) { this.linesPoints.Add(vector); } else { GameObject gameObject; if (num5 < this.lines.Count) { gameObject = this.lines[num5]; } else { gameObject = Links.x.cellar.GetPooledGameObject(this.linenum); this.lines.Add(gameObject); gameObject.SetActive(true); } gameObject.transform.position = vector; gameObject.transform.rotation = quaternion; num5++; one.z = Vector3.Distance(vector4, vector); gameObject.transform.localScale = one; } } vector4 = vector; } } } if (num5 < this.lines.Count) { for (int m = num5; m < this.lines.Count; m++) { Links.x.cellar.ReturnPooledGameObject(this.linenum, this.lines[m]); this.lines[m] = null; } this.lines.RemoveAll((GameObject item) => item == null); } float num16 = float.PositiveInfinity; Vector3 vector5 = Vector3.zero; for (int n = 0; n < this.linesPoints.Count; n++) { float sqrMagnitude2 = (this.linesPoints[n] - Links.x.gameplay.backOfCircle).sqrMagnitude; if (sqrMagnitude2 < num16) { num16 = sqrMagnitude2; vector5 = this.linesPoints[n]; } } if (vector5 != Vector3.zero) { Links.x.gameplay.circleBreakObject.SetActive(true); Links.x.gameplay.circleBreakObject.transform.position = vector5; Vector3 eulerAngles = Quaternion.LookRotation(Links.x.worldCamera.gameObject.transform.position - vector5).eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; Links.x.gameplay.circleBreakObject.transform.rotation = Quaternion.Euler(eulerAngles); } } // Token: 0x0600070E RID: 1806 RVA: 0x00098ABD File Offset: 0x00096CBD public void BreakCircle(bool fromEnemies) { Records.x.circle = false; if (this.breakRoutine != null) { base.StopCoroutine(this.breakRoutine); } this.breakRoutine = this.BreakCircleFade(fromEnemies); base.StartCoroutine(this.breakRoutine); } // Token: 0x0600070F RID: 1807 RVA: 0x00098AF8 File Offset: 0x00096CF8 private IEnumerator BreakCircleFade(bool fromEnemies) { Links.x.hudControl.SetFalseStayBack(); if (fromEnemies) { Links.x.hudControl.CircleBreak(); } Links.x.gameplay.circleBreakObject.SetActive(false); for (int i = 0; i < this.party.Count; i++) { Character character = this.party[i]; if (character && !character.isBoro) { character.inCircle = false; character.hasCircleBuff = false; character.stats.HealEffect("CircleHarmony"); if (fromEnemies) { Effects effects = character.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.gameObject.SetActive(true); effects.source = character; effects.target = character; effects.effectName = "CircleBreak"; effects.Inflicted(false); } } } if (fromEnemies) { this.timeToNextCircle = 0f; } else { this.timeToNextCircle = 0f; } this.StartCircleFade(true); while (this.fading) { yield return null; } for (int j = 0; j < this.circleTiles.Count; j++) { this.circleTiles[j].circle = 0; if (this.circleTiles[j].Penalty == 8000U) { this.circleTiles[j].Penalty = 0U; } } Links.x.gameplay.BreakCircle(); this.ReturnLines(this.linenum); this.breakRoutine = null; yield break; } // Token: 0x06000710 RID: 1808 RVA: 0x00098B10 File Offset: 0x00096D10 public void CheckCircle() { for (int i = 0; i < this.party.Count; i++) { Character character = this.party[i]; if (character) { bool hasCircleBuff = character.hasCircleBuff; bool flag = false; for (int j = 0; j < this.circleTiles.Count; j++) { if (!flag) { Vector3 vector = (Vector3)this.circleTiles[j].position; vector.y = character.currentPosition.y; if ((vector - character.currentPosition).sqrMagnitude < 4f) { flag = true; } } } if (flag) { if (!hasCircleBuff) { character.hasCircleBuff = true; if (!character.stats.HasEffect("CircleHarmony")) { Effects effects = character.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.gameObject.SetActive(true); effects.source = character; effects.target = character; effects.effectName = "CircleHarmony"; effects.sourceLevel = this.AverageLevel(); effects.Inflicted(false); } } } else if (hasCircleBuff) { character.hasCircleBuff = false; character.stats.HealEffect("CircleHarmony"); } } } } // Token: 0x06000711 RID: 1809 RVA: 0x00098C60 File Offset: 0x00096E60 private float AverageLevel() { float num = 0f; float num2 = 0f; for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.portraitOrder[i]) { num += (float)this.portraitOrder[i].stats.level; num2 += 1f; } } return num / num2; } // Token: 0x06000712 RID: 1810 RVA: 0x00098CC8 File Offset: 0x00096EC8 public void SetFriends() { if (Records.x.editor) { this.friend1.Clear(); this.friend2.Clear(); for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.friend1.Count < 2) { this.friend1.Add(this.portraitOrder[i]); } else { this.friend2.Add(this.portraitOrder[i]); } } for (int j = 0; j < this.party.Count; j++) { if (this.party[j].summoned) { this.friend1.Add(this.party[j]); } } } } // Token: 0x06000713 RID: 1811 RVA: 0x00098D8E File Offset: 0x00096F8E public bool InFriendGroup(Character c) { return this.friend1.Contains(c) || this.friend2.Contains(c); } // Token: 0x06000714 RID: 1812 RVA: 0x00098DB4 File Offset: 0x00096FB4 public bool IsGroupLeader(Character c, out Character groupLeader) { groupLeader = null; if (c.mainSelected) { if (this.friend1.Contains(c)) { groupLeader = c; return true; } if (this.friend2.Contains(c)) { groupLeader = c; return true; } } else { if (this.friend1.Contains(c)) { for (int i = 0; i < this.friend1.Count; i++) { if (this.friend1[i].mainSelected) { groupLeader = this.friend1[i]; return false; } } if (this.friend1.Count > 0) { if (this.friend1[0] == c) { groupLeader = c; return true; } groupLeader = this.friend1[0]; return false; } } if (this.friend2.Contains(c)) { for (int j = 0; j < this.friend2.Count; j++) { if (this.friend2[j].mainSelected) { groupLeader = this.friend2[j]; return false; } } if (this.friend2.Count > 0) { if (this.friend2[0] == c) { groupLeader = c; return true; } groupLeader = this.friend2[0]; return false; } } } return false; } // Token: 0x06000715 RID: 1813 RVA: 0x00098EF4 File Offset: 0x000970F4 public bool TeleportParty(bool always) { bool flag = false; if (Links.x.main.indoorID == "?") { Links.x.main.indoorID = ""; } if (Links.x.main.node == null) { return false; } for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && (!flag || always)) { Character character = this.party[i]; if (!character.mainSelected && !character.isBoro && character.IsSentient() && !character.inCircle) { if (character.indoorID == "?") { character.indoorID = ""; } bool flag2 = false; if (character.indoorID != Links.x.main.indoorID || character.desiredGraph != Links.x.main.desiredGraph || flag2 || always) { Links.x.GetPartyID(character); Vector3 eulerAngles = Links.x.main.tr.rotation.eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; eulerAngles.y *= -1f; this.formationHead.rotation = Quaternion.Euler(eulerAngles); GraphNode graphNode = Links.x.fellowship.GetFormationPosition(Links.x.main.node, character, false); bool flag3; if (graphNode != null) { Vector3 vector = (Vector3)graphNode.position; vector.y = Links.x.main.tr.position.y; if ((vector - Links.x.main.tr.position).sqrMagnitude > 625f) { flag3 = false; graphNode = null; } else { flag3 = true; } } else { flag3 = true; } if (flag3) { character.TargetReached(); character.ClearPathUpdatesAll(); if (character.actions) { if (character.actions) { character.actions.ClearSelectedActionRealTime(); } if (character.actions) { character.actions.Interrupt(); } if (character.actions) { character.actions.CheckIfRunningAI(); } } character.body.turnOnMagicaClothNextFrame = 5; character.body.SetMagicaClothState(false); if (graphNode != null) { character.tr.position = (Vector3)graphNode.position; character.SetRotation(Quaternion.LookRotation((Vector3)graphNode.position - Links.x.main.tr.position), false, true); character.FirstPosition(graphNode); } else { character.tr.position = Links.x.main.tr.position + new Vector3(1f, 0f, 1f); character.FirstPosition(null); } if (character.actions) { character.actions.EndTurn(true); } character.MakeRandomPathAfterJump(); flag = true; } } } } } return flag; } // Token: 0x06000716 RID: 1814 RVA: 0x0009924C File Offset: 0x0009744C public void StartCheckIfAtTargetLocation() { if (Records.x.partySailing) { return; } if (Records.x.removeControls) { return; } if (this.waypointRoutine == null && Links.x.main && !this.TeleportParty(false)) { this.waypointRoutine = this.CheckIfAtTargetLocation(); base.StartCoroutine(this.waypointRoutine); } } // Token: 0x06000717 RID: 1815 RVA: 0x000992AE File Offset: 0x000974AE private IEnumerator CheckIfAtTargetLocation() { Character c = null; bool someoneNeedsPath = false; bool doFollow = true; int pickupCount = this.PickupCount(); if (!Records.x.editor) { this.debug = false; } int count = this.party.Count; this.waypointOrder.Clear(); for (int j = 0; j < count; j++) { if (j == 0) { this.waypointOrder.Add(this.party[j]); } else { bool flag = false; for (int k = 0; k < this.waypointOrder.Count; k++) { if (!flag && this.party[j].stats.formationGroup < this.waypointOrder[k].stats.formationGroup) { flag = true; this.waypointOrder.Insert(k, this.party[j]); } } if (!flag) { this.waypointOrder.Add(this.party[j]); } } } this.waypointOrder.Remove(Links.x.main); if (Links.x.main) { this.waypointOrder.Insert(0, Links.x.main); } Character main = Links.x.main; if (main) { int num23; for (int i = 0; i < this.waypointOrder.Count; i = num23 + 1) { c = this.waypointOrder[i]; if (c && !someoneNeedsPath) { if (!main.physicsMove && main.savedPathTarget == null) { main.savedPathTarget = main.node; } if (Records.x.editor && (Input.GetKey(KeyCode.Alpha9) || this.debug)) { string[] array = new string[26]; array[0] = "Checking if in location "; int num = 1; Character character = c; array[num] = ((character != null) ? character.ToString() : null); array[2] = " "; array[3] = c.jumpingPosition.ToString(); array[4] = " "; array[5] = c.jumpingAreas.ToString(); array[6] = " "; array[7] = c.moving.ToString(); array[8] = " "; int num2 = 9; GraphNode moveNode2 = c.moveNode; array[num2] = ((moveNode2 != null) ? moveNode2.ToString() : null); array[10] = " "; int num3 = 11; GraphNode slideNode = c.slideNode; array[num3] = ((slideNode != null) ? slideNode.ToString() : null); array[12] = " "; array[13] = c.movingOutOfWay.ToString(); array[14] = " "; array[15] = c.NodesCount().ToString(); array[16] = " "; array[17] = c.CanMakePath().ToString(); array[18] = " "; array[19] = Links.x.gaia.sceneLoaded.ToString(); array[20] = " "; array[21] = Links.x.gaia.pathfindingReady.ToString(); array[22] = " "; array[23] = c.blockedTime.ToString(); array[24] = " "; array[25] = c.inCombat.ToString(); Debug.Log(string.Concat(array)); } bool flag2 = false; if (c.movingOutOfWayTime > 0f && Time.timeSinceLevelLoad < c.movingOutOfWayTime + 2f) { flag2 = true; } bool flag3 = c.inCombat; if (c.inCombat && c.actions && c.actions.ai.seenCount == 0) { flag3 = false; } bool flag4 = false; bool flag5 = false; Character character2 = null; if (!Records.x.friends) { flag4 = false; c.inFriendGroup = false; } GraphNode graphNode = main.savedPathTarget; Vector3 vector = main.tr.position; if (main.moving && !main.physicsMove && main.savedPathTarget != null) { vector = (Vector3)main.savedPathTarget.position; } GraphNode leaderNode = main.node; Character leader = main; if (!main.moving && !main.physicsMove && main.NodesCount() == 0) { graphNode = leaderNode; } if (main.physicsMove) { graphNode = main.node; } bool justMoved = c.justMoved; if (!c.jumpingPosition && !c.jumpingAreas && !c.isBoro) { if (!c.moving && c.moveNode == null && c.slideNode == null && !c.movingOutOfWay && c.NodesCount() == 0 && c.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && c.blockedTime == 0f && !flag3 && (!c.sailing || (c.sailing && c.boatNavigator && !c.boat.turning)) && !c.isBoro && !c.physicsMove) { Vector3 vector2 = c.sphere.transform.position; float sqrMagnitude = (c.sphere.transform.position - vector2).sqrMagnitude; if (sqrMagnitude > 0.75f && sqrMagnitude < 10f) { vector2 = c.sphere.transform.position; } float num4 = (c.tr.position - new Vector3(main.tr.position.x, c.tr.position.y, main.tr.position.z)).sqrMagnitude; float num5 = 0f; float sqrMagnitude2 = (c.tr.position - vector2).sqrMagnitude; float num6 = 5f + 2f * (float)Links.x.GetPortraitIndexWaypoints(c); if (!Links.x.main.moving) { num6 += 6f; } if (main.node != null && main.node.Penalty > 25000U) { num6 += 15f; } if (c.summoned) { num6 = 20f; } if ((Records.x.partyWait || c.inCircle) && doFollow) { num6 = 50000f; } if (flag4 && !flag5) { Vector3 vector3 = c.tr.position; if (c.GetLastNode() != null) { vector3 = (Vector3)c.GetLastNode().position; } num5 = (vector3 - new Vector3(character2.tr.position.x, c.tr.position.y, character2.tr.position.z)).sqrMagnitude; num6 = 50f; num4 = 0f; } if (Records.x.editor && (Input.GetKey(KeyCode.Alpha9) || this.debug)) { string[] array2 = new string[26]; array2[0] = "Checking if in location 2 "; int num7 = 1; Character character3 = c; array2[num7] = ((character3 != null) ? character3.ToString() : null); array2[2] = " "; array2[3] = num4.ToString(); array2[4] = " "; array2[5] = sqrMagnitude2.ToString(); array2[6] = " "; array2[7] = num6.ToString(); array2[8] = " "; array2[9] = Records.x.partyWait.ToString(); array2[10] = " "; array2[11] = justMoved.ToString(); array2[12] = " "; array2[13] = c.movingOutOfWayTime.ToString(); array2[14] = " "; int num8 = 15; GraphNode graphNode2 = this.companionNode1; array2[num8] = ((graphNode2 != null) ? graphNode2.ToString() : null); array2[16] = " "; int num9 = 17; GraphNode savedPathTarget = c.savedPathTarget; array2[num9] = ((savedPathTarget != null) ? savedPathTarget.ToString() : null); array2[18] = " "; array2[19] = flag4.ToString(); array2[20] = " "; array2[21] = flag5.ToString(); array2[22] = " "; array2[23] = main.moving.ToString(); array2[24] = " "; int num10 = 25; Vector3 vector4 = vector; array2[num10] = vector4.ToString(); Debug.Log(string.Concat(array2)); } if (sqrMagnitude2 > 9f && c.savedPathTarget != null && ((doFollow && (num4 < num6 * num6 || (flag4 && !flag5 && num5 < 64f))) || !doFollow) && !Records.x.partyWait && !c.mainSelected) { GraphNode moveNode = c.savedPathTarget; if (moveNode != null && c.node != null && c.stats.Stuck() == 0) { if (c.followingType == "") { GraphNode graphNode3 = c.NearNode(vector2, true, 0, -1, c.CheckCircleID()); if (graphNode3 != null) { Vector3 vector5 = (Vector3)graphNode3.position; if ((vector5 - vector2).sqrMagnitude < 9f && Mathf.Abs(vector5.y - vector2.y) < 1.5f) { moveNode = graphNode3; } } } ABPath p = ABPath.ConstructFast(c.node, moveNode, null); bool flag6 = false; if (c.pushCount >= this.pushCountMax) { flag6 = true; } this.SetNodeConstraintParty(c, flag6, true, true, 0, 1); p.nnConstraint = this.nodeConstraintParty; AstarPath.StartPath(p, false); yield return base.StartCoroutine(p.WaitForPath()); p.Claim(this); bool flag7 = !p.error; p.Release(this, false); if (Records.x.astarDebugging && c.mainSelected) { string[] array3 = new string[7]; int num11 = 0; Character character4 = c; array3[num11] = ((character4 != null) ? character4.ToString() : null); array3[1] = " "; array3[2] = flag7.ToString(); array3[3] = " "; array3[4] = c.node.position; array3[5] = " "; array3[6] = moveNode.position; Debug.Log(string.Concat(array3)); } if (flag7 && c.waitingForPath != 1) { c.ClearCurrentPathNodes(); c.ClearPathUpdates(); c.pathTargPosition = (Vector3)moveNode.position; int num12 = 500; if (Records.x.partyWait) { num12 = 5; } c.MakePath(moveNode, num12, false, false, false); if (c.waypoint && !(c.waypoint.transform.position == Links.x.gameplay.farPosition)) { c.showWaypoint = true; } yield return new WaitForSeconds(0.1f); } else { c.pushCount = 0; } p = null; } moveNode = null; } else if (Random.Range(0, 5) == 0 && pickupCount > 0 && !c.hasActions && !c.mainSelected) { this.LookForPickups(c); } else { if (Records.x.editor && (Input.GetKey(KeyCode.Alpha9) || this.debug)) { string[] array4 = new string[24]; array4[0] = "Checking if in location 3 "; int num13 = 1; Character character5 = c; array4[num13] = ((character5 != null) ? character5.ToString() : null); array4[2] = " "; array4[3] = num4.ToString(); array4[4] = " "; array4[5] = sqrMagnitude2.ToString(); array4[6] = " "; array4[7] = num5.ToString(); array4[8] = " "; array4[9] = num6.ToString(); array4[10] = " "; array4[11] = Records.x.partyWait.ToString(); array4[12] = " "; array4[13] = justMoved.ToString(); array4[14] = " "; array4[15] = flag2.ToString(); array4[16] = " "; int num14 = 17; GraphNode graphNode4 = this.companionNode1; array4[num14] = ((graphNode4 != null) ? graphNode4.ToString() : null); array4[18] = " "; int num15 = 19; GraphNode commandMove = c.commandMove; array4[num15] = ((commandMove != null) ? commandMove.ToString() : null); array4[20] = " "; int num16 = 21; GraphNode savedPathTarget2 = c.savedPathTarget; array4[num16] = ((savedPathTarget2 != null) ? savedPathTarget2.ToString() : null); array4[22] = " "; array4[23] = c.pickupTime.ToString(); Debug.Log(string.Concat(array4)); } if (!Records.x.InCombat(false) && !c.mainSelected && doFollow && !c.isBoro && ((!justMoved && !flag2) || (flag4 && !flag5)) && (num4 > num6 * num6 || c.inCircle) && c.pickupTime == 0f) { if (num4 >= num6 * num6 && this.companionNode1 == null && c.commandMove == null && !c.inCircle) { GraphNode graphNode5 = graphNode; if (graphNode5 == null) { graphNode5 = leaderNode; } if (Records.x.editor && Input.GetKey(KeyCode.Alpha9)) { string text = "Checking if in location 4 "; Character character6 = c; string text2 = ((character6 != null) ? character6.ToString() : null); string text3 = " "; GraphNode graphNode6 = graphNode5; Debug.Log(text + text2 + text3 + ((graphNode6 != null) ? graphNode6.ToString() : null)); } if (graphNode5 != null) { if (main.physicsMove) { Vector3 vector6 = (Vector3)graphNode5.position + Links.x.main.tr.forward * 4f; GraphNode graphNode7 = graphNode5.ClosestConnection(graphNode5, 0, 0, 25f, vector6, 0, 0, c.nodeConstraint, 0); if (graphNode7 != null) { graphNode5 = graphNode7; } } this.formationHead.rotation = Quaternion.LookRotation(main.tr.position - c.tr.position); GraphNode formationPosition = this.GetFormationPosition(graphNode5, c, true); if (Records.x.editor && (Input.GetKey(KeyCode.Alpha9) || this.debug)) { string[] array5 = new string[6]; array5[0] = "Checking if in location 4 "; int num17 = 1; Character character7 = c; array5[num17] = ((character7 != null) ? character7.ToString() : null); array5[2] = " "; int num18 = 3; GraphNode graphNode8 = formationPosition; array5[num18] = ((graphNode8 != null) ? graphNode8.ToString() : null); array5[4] = " "; array5[5] = Vector3.Distance((Vector3)graphNode5.position, c.tr.position).ToString(); Debug.Log(string.Concat(array5)); } if (formationPosition != null && c.waitingForPath != 1) { c.savedFollowNode = graphNode5; int num19 = 500; if (Records.x.partyWait) { num19 = 5; } if (flag4 && !flag5) { c.clickedPoint = character2.tr.position + this.formationHead.forward * -2.5f; } c.MakePath(formationPosition, num19, false, false, true); } } } else if (this.companionNode1 != null && !flag2) { this.CompanionIndoorNode(c); } else if (c.commandMove != null && !flag2 && !c.hasActions) { if (((Vector3)c.commandMove.position - c.tr.position).sqrMagnitude > 16f) { c.savedFollowNode = c.commandMove; c.ClearPathUpdates(); c.pathTargPosition = (Vector3)c.commandMove.position; c.MakePath(c.commandMove, 500, false, false, true); } } else if (c.inCircle && !c.mainSelected && !flag2 && !c.hasActions) { this.CheckCirclePositionAndMove(c); } } } } else if (((((flag5 && flag4) || !flag4 || !Records.x.friends) && (main.physicsMove || main.moving) && !justMoved) || (flag4 && !flag5 && (character2.moving || character2.physicsMove))) && c.savedFollowNode != null && graphNode != null && doFollow && c.CanMakePath() && c.slideNode == null && !c.movingOutOfWay && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && !flag3 && !c.mainSelected && !Records.x.partyWait && this.companionNode1 == null && c.pickupTime == 0f && c.commandMove == null && !c.inCircle) { float num20 = 6f; if (Links.x.main.physicsMove) { num20 = 10f; } if (c.NodesCount() <= 1) { num20 = 2f; } if (leaderNode.Penalty > 25000U) { num20 += 8f; } bool flag8 = false; if (c.savedFollowNode == leaderNode) { flag8 = true; } if (Records.x.editor && (Input.GetKey(KeyCode.Alpha9) || this.debug)) { string[] array6 = new string[18]; array6[0] = "Looking for point on the move "; int num21 = 1; Character character8 = c; array6[num21] = ((character8 != null) ? character8.ToString() : null); array6[2] = " "; array6[3] = c.moving.ToString(); array6[4] = " "; array6[5] = ((Vector3)c.savedFollowNode.position - vector).sqrMagnitude.ToString(); array6[6] = " "; array6[7] = num20.ToString(); array6[8] = " "; array6[9] = ((Vector3)c.savedFollowNode.position).ToString(); array6[10] = " "; int num22 = 11; Vector3 vector4 = vector; array6[num22] = vector4.ToString(); array6[12] = " "; array6[13] = flag8.ToString(); array6[14] = " "; array6[15] = c.waitingForPath.ToString(); array6[16] = " "; array6[17] = c.NodesCount().ToString(); Debug.Log(string.Concat(array6)); } if (((Vector3)c.savedFollowNode.position - vector).sqrMagnitude > num20 * num20 && !flag8) { if (Random.Range(0, 4) == 0 && !c.hasActions && !c.mainSelected && pickupCount > 0) { this.LookForPickups(c); } else { if (graphNode == null) { graphNode = leaderNode; } this.GetNewPath(c, graphNode); } } } else if (this.companionNode1 != null && !flag2) { if (!c.moving && c.moveNode == null && c.slideNode == null && !c.movingOutOfWay && c.NodesCount() == 0 && c.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && !flag3 && !c.sailing && !c.isBoro && !c.mainSelected) { this.CompanionIndoorNode(c); } } else if (c.commandMove != null && flag2 && !c.hasActions) { if (!c.moving && c.moveNode == null && c.slideNode == null && !c.movingOutOfWay && c.NodesCount() == 0 && c.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && !flag3 && !c.sailing && !c.isBoro && !c.mainSelected && ((Vector3)c.commandMove.position - c.tr.position).sqrMagnitude > 16f) { c.savedFollowNode = c.commandMove; c.ClearPathUpdates(); c.pathTargPosition = (Vector3)c.commandMove.position; c.MakePath(c.commandMove, 500, false, false, true); } } else if (c.inCircle && !c.mainSelected && !flag2 && !c.hasActions && !c.moving && c.waitingForPath == 0 && c.blockedTime == 0f) { this.CheckCirclePositionAndMove(c); } if (!c.mainSelected && !c.hasActions && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && doFollow && !c.fleeing && !c.missing && !Records.x.partyWait && !c.inCircle && !leader.jumpingAreas && !leader.jumpingPosition && !c.jumpingPosition && !c.jumpingAreas && c.IsSentient() && (c.tr.position - leader.tr.position).sqrMagnitude > 4900f && leaderNode != null) { bool flag9 = false; if (c.indoorID == "?") { c.indoorID = ""; } if (c.indoorID != leader.indoorID || c.desiredGraph != leader.desiredGraph) { flag9 = true; } if (!flag9) { this.JumpPosition(leader, i, c); } } } leaderNode = null; leader = null; } num23 = i; } } this.waypointRoutine = null; yield break; } // Token: 0x06000718 RID: 1816 RVA: 0x000992C0 File Offset: 0x000974C0 public void GetNewPath(Character c, GraphNode fromNode) { if (c.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady) { GraphNode graphNode = fromNode; if (Links.x.main.physicsMove) { graphNode = Links.x.main.node; Vector3 vector = (Vector3)graphNode.position + Links.x.main.tr.forward * 2.5f; GraphNode graphNode2 = graphNode.ClosestConnection(graphNode, 0, 0, 36f, vector, 0, 0, c.nodeConstraint, 0); if (graphNode2 != null) { graphNode = graphNode2; vector = (Vector3)graphNode.position + Links.x.main.tr.forward * 2.5f; graphNode2 = graphNode.ClosestConnection(graphNode, 0, 0, 36f, vector, 0, 0, c.nodeConstraint, 0); if (graphNode2 != null) { graphNode = graphNode2; } } } if (graphNode != null && c.waitingForPath != 1 && (c.timeSinceFollowPath == 0f || Time.timeSinceLevelLoad > c.timeSinceFollowPath + 0.5f)) { this.formationHead.rotation = Links.x.main.tr.rotation; GraphNode formationPosition = this.GetFormationPosition(graphNode, c, true); if (formationPosition != null) { c.savedFollowNode = graphNode; c.ClearPathUpdates(); c.pathTargPosition = (Vector3)formationPosition.position; c.MakePath(formationPosition, 500, false, false, true); } } } } // Token: 0x06000719 RID: 1817 RVA: 0x00099448 File Offset: 0x00097648 public void StopWalking(bool all) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && (all || !this.party[i].mainSelected)) { this.party[i].TargetReached(); } } } // Token: 0x0600071A RID: 1818 RVA: 0x000994A8 File Offset: 0x000976A8 public int PickupCount() { int num = 0; if (this.pickups == null) { this.pickups = Links.x.cellar.pickups; } int count = this.pickups.Count; for (int i = 0; i < count; i++) { if (this.pickups[i]) { num++; } } return num; } // Token: 0x0600071B RID: 1819 RVA: 0x00099504 File Offset: 0x00097704 public bool LookForPickups(Character character) { if (this.pickups == null) { this.pickups = Links.x.cellar.pickups; } int count = this.pickups.Count; float num = 20f; if (character.inCircle) { num = 8f; } float num2 = num * num; this.nearPickups.Clear(); bool flag = false; float num3 = (float)character.stats.HealthCurrent() / (float)character.stats.HealthMax(); bool flag2 = false; if (num3 < 1f) { flag2 = true; } if (character.party && character.stats.HasSpellbook() && character.stats.SpiritCurrent() < 90) { flag = true; } for (int i = 0; i < count; i++) { Pickups pickups = this.pickups[i]; if (pickups && ((flag2 && pickups.isHealth) || (pickups.isSpirit && flag)) && (pickups.tr.position - character.currentPosition).sqrMagnitude < num2) { this.nearPickups.Add(pickups); } } if (this.nearPickups.Count > 0) { this.pickupCoroutine = this.PickupMove(character); base.StartCoroutine(this.pickupCoroutine); return true; } return false; } // Token: 0x0600071C RID: 1820 RVA: 0x00099645 File Offset: 0x00097845 private IEnumerator PickupMove(Character character) { bool foundItem = false; Pickups itemToPickup = null; if (!foundItem && !character.sailing) { int num2; for (int i = 0; i < this.pickups.Count; i = num2 + 1) { if (!foundItem) { Pickups item = this.pickups[i]; GraphNode node = item.node; if (node != null) { ABPath p = ABPath.ConstructFast(character.node, node, null); p.nnConstraint = this.nodeConstraint; AstarPath.StartPath(p, false); yield return base.StartCoroutine(p.WaitForPath()); p.Claim(this); bool flag = false; if (!p.error) { flag = true; } if (flag) { this.tempPath = p.path; GraphNode graphNode = null; int num = 0; for (int j = 0; j < this.tempPath.Count; j++) { if (this.tempPath[j] != character.node) { graphNode = this.tempPath[j]; num++; } } if (graphNode != null) { foundItem = true; itemToPickup = item; character.pickupTime = Time.timeSinceLevelLoad; break; } } p.Release(this, false); p = null; } item = null; } num2 = i; } } this.pickupCoroutine = null; if (foundItem && itemToPickup.node != null) { character.ClearPathUpdates(); character.pathTargPosition = (Vector3)itemToPickup.node.position; character.MakePath(itemToPickup.node, 500, false, false, true); } yield break; } // Token: 0x0600071D RID: 1821 RVA: 0x0009965C File Offset: 0x0009785C public void JumpPosition(Character main, int i, Character selectedParty) { GraphNode formationPosition = this.GetFormationPosition(main.node, selectedParty, false); if (formationPosition != null) { selectedParty.body.SetMagicaClothState(false); selectedParty.body.turnOnMagicaClothNextFrame = 3; selectedParty.SetPosition((Vector3)formationPosition.position, null); selectedParty.ClaimNode(formationPosition, (Vector3)formationPosition.position, true); selectedParty.sphere.transform.position = (Vector3)formationPosition.position; selectedParty.savedFollowNode = main.node; selectedParty.SetMoveFollowPosition((Vector3)formationPosition.position); selectedParty.indoorID = ""; selectedParty.doorID = ""; selectedParty.TargetReached(); selectedParty.waitingForPath = 0; selectedParty.ClearMoveTargets(); if (main.desiredGraph == 1) { if (Links.x.diorama.GetIndoorView()) { selectedParty.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName((Vector3)formationPosition.position); } else { selectedParty.indoorID = "?"; } selectedParty.doorID = ""; } selectedParty.ChangeTorchLight(); selectedParty.FirstPosition(formationPosition); } } // Token: 0x0600071E RID: 1822 RVA: 0x00099788 File Offset: 0x00097988 public bool CheckCirclePositionAndMove(Character c) { GraphNode graphNode = c.node; if (this.circleTiles.Contains(graphNode)) { return false; } graphNode = this.GetFormationPointInCircle(c); if (graphNode != null && graphNode != c.node) { c.savedFollowNode = graphNode; c.ClearPathUpdates(); c.pathTargPosition = (Vector3)graphNode.position; c.MakePath(graphNode, 500, false, false, true); return true; } return false; } // Token: 0x0600071F RID: 1823 RVA: 0x000997F0 File Offset: 0x000979F0 private void CompanionIndoorNode(Character selectedParty) { int portraitIndexWaypoints = Links.x.GetPortraitIndexWaypoints(selectedParty); GraphNode graphNode = null; if (portraitIndexWaypoints == 1) { graphNode = this.companionNode1; } if (portraitIndexWaypoints == 2 && this.companionNode2 != null) { graphNode = this.companionNode2; } if (portraitIndexWaypoints == 3 && this.companionNode3 != null) { graphNode = this.companionNode3; } if (selectedParty.summoned && this.companionNode4 != null) { GraphNode graphNode2 = selectedParty.NearNode((Vector3)this.companionNode4.position, true, 0, -1, selectedParty.CheckCircleID()); if (graphNode2 != null) { graphNode = graphNode2; } } if (graphNode != null) { float num = 10f; if (selectedParty.summoned) { num = 50f; } float sqrMagnitude = (Links.x.main.tr.position - (Vector3)graphNode.position).sqrMagnitude; if (((Vector3)graphNode.position - selectedParty.tr.position).sqrMagnitude > num && sqrMagnitude > 25f) { selectedParty.savedFollowNode = graphNode; selectedParty.ClearPathUpdates(); selectedParty.pathTargPosition = (Vector3)graphNode.position; selectedParty.MakePath(graphNode, 500, false, false, true); } } } // Token: 0x06000720 RID: 1824 RVA: 0x00099914 File Offset: 0x00097B14 public bool AnyoneResurrecting(Character c) { for (int i = 0; i < this.portraitOrder.Count; i++) { Character character = this.portraitOrder[i]; if (character && character.actions && character.actions.ai.resurrectCorout != null) { if (!c) { return true; } if (c == character.actions.ai.pinnedTarget) { return true; } } } return false; } // Token: 0x06000721 RID: 1825 RVA: 0x00099990 File Offset: 0x00097B90 public bool AnyonePinning() { for (int i = 0; i < this.portraitOrder.Count; i++) { Character character = this.portraitOrder[i]; if (character && (character.stats.pinning || character.stats.pinned)) { return true; } } return false; } // Token: 0x06000722 RID: 1826 RVA: 0x000999E8 File Offset: 0x00097BE8 public bool NearCompanionNode(Character selectedParty) { int portraitIndexWaypoints = Links.x.GetPortraitIndexWaypoints(selectedParty); GraphNode graphNode = null; if (portraitIndexWaypoints == 1) { graphNode = this.companionNode1; } if (portraitIndexWaypoints == 2 && this.companionNode2 != null) { graphNode = this.companionNode2; } if (portraitIndexWaypoints == 3 && this.companionNode3 != null) { graphNode = this.companionNode3; } if (selectedParty.summoned && this.companionNode4 != null) { graphNode = this.companionNode4; } return graphNode != null && ((Vector3)graphNode.position - selectedParty.tr.position).sqrMagnitude < 10f; } // Token: 0x06000723 RID: 1827 RVA: 0x00099A7C File Offset: 0x00097C7C public void SetPartyPositions(bool useSelected) { Vector3 position = this.party[0].tr.position; GraphNode graphNode = this.party[0].node; if (graphNode == null) { graphNode = this.party[0].NearNode(position, true, 0, -1, 1); if (graphNode != null) { this.party[0].ClaimNode(graphNode, (Vector3)graphNode.position, true); } } if (graphNode != null) { this.SetFormationHead(graphNode); for (int i = 1; i < this.party.Count; i++) { if (this.party[i] && ((useSelected && this.party[i].selected) || !useSelected)) { GraphNode graphNode2 = this.party[i].NearNode((Vector3)graphNode.position, true, 0, -1, 1); if (graphNode2 != null) { this.party[i].SetPosition((Vector3)graphNode2.position, null); Quaternion quaternion = Links.x.diorama.playerStartDefault.rotation; if (!this.party[i].mainSelected) { quaternion = Quaternion.LookRotation(Links.x.main.tr.position = this.party[i].tr.position); } Vector3 eulerAngles = quaternion.eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; eulerAngles.y += Random.Range(-180f, 180f); this.party[i].SetRotation(Quaternion.Euler(eulerAngles), false, true); this.party[i].FirstPosition(graphNode2); } } } } else { Debug.Log("Start node is null"); } } // Token: 0x06000724 RID: 1828 RVA: 0x00099C60 File Offset: 0x00097E60 public void UpdateHotkeys() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i].portrait && !this.party[i].isBoro) { this.party[i].portrait.UpdateKey(Links.x.joy); } } } // Token: 0x06000725 RID: 1829 RVA: 0x00099CE4 File Offset: 0x00097EE4 public void RemoveAllFromSelected(Character c) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i] != c) { this.party[i].RemoveFromSelected(false); } } } // Token: 0x06000726 RID: 1830 RVA: 0x00099D40 File Offset: 0x00097F40 public void SetFirstAsSelected(bool setLeader) { bool flag = false; int num = 10; int num2 = -1; for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i].selected && !this.party[i].isBoro && this.party[i].stats.formationGroup < num && !this.party[i].summoned) { flag = true; num2 = i; num = this.party[i].stats.formationGroup; } } if (num2 == -1) { for (int j = 0; j < this.party.Count; j++) { if (this.party[j] && this.party[j].selected && !this.party[j].isBoro && this.party[j].stats.formationGroup < num) { flag = true; num2 = j; num = this.party[j].stats.formationGroup; } } } if (num2 >= 0) { this.party[num2].SetAsLeader(); } if (!flag && setLeader) { this.party[0].SetAsLeader(); this.party[0].AddToSelected(true, false); } } // Token: 0x06000727 RID: 1831 RVA: 0x00099EC8 File Offset: 0x000980C8 public void StopMoving() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i]) { this.party[i].EndPath(); } } } // Token: 0x06000728 RID: 1832 RVA: 0x00099F10 File Offset: 0x00098110 private bool PartyClose(Character character, Vector3 point) { point.y = character.tr.position.y; return (character.tr.position - point).sqrMagnitude < 100f; } // Token: 0x06000729 RID: 1833 RVA: 0x00099F58 File Offset: 0x00098158 public void CheckForPartySongs(string trigger) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i].IsSentient() && !this.party[i].isBoro) { int num; this.party[i].stats.CheckForSongsAndWords(trigger, out num); } } } // Token: 0x0600072A RID: 1834 RVA: 0x00099FD0 File Offset: 0x000981D0 public Character GetSearchNumber(string job, out int jobTotal, string skill, Vector3 point) { Character character = null; float num = -1f; for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.PartyClose(this.party[i], point) && !this.party[i].isBoro) { float num2 = this.party[i].stats.SearchNumber(job, false, skill); if (num2 > num) { character = this.party[i]; num = num2; } } } jobTotal = (int)Mathf.Ceil(num); return character; } // Token: 0x0600072B RID: 1835 RVA: 0x0009A070 File Offset: 0x00098270 public bool OnlyOneMoving(Character character) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i] != character && !this.party[i].isBoro) { return false; } } return true; } // Token: 0x0600072C RID: 1836 RVA: 0x0009A0D0 File Offset: 0x000982D0 public float GetPartyMoveSpeed() { int count = this.party.Count; float num = 0f; float num2 = 0f; if (Links.x.main.stats.moveSpeedMod != 0f) { return Links.x.main.stats.MoveSpeed(false); } for (int i = 0; i < count; i++) { Character character = this.party[i]; if (character && !character.isBoro && !character.summoned) { float num3 = this.party[i].stats.MoveSpeed(false); num += num3; num2 += 1f; } } return num / num2; } // Token: 0x0600072D RID: 1837 RVA: 0x0009A18C File Offset: 0x0009838C public float GetSailingSpeed(out float weightTotal, out float sailingFamilyMod, out float banners, out float boroBonus) { float num = 0f; weightTotal = 0f; sailingFamilyMod = 0f; float num2 = 0f; for (int i = 0; i < this.party.Count; i++) { if (this.party[i]) { weightTotal += this.party[i].stats.CharacterWeight(); num2 += (float)this.party[i].stats.CarryingWeight() + 50f; } } banners = 0f; boroBonus = Mathf.Round(Records.x.boroBonus.x * 5f * 100f) / 100f; weightTotal /= num2; weightTotal *= 3f; weightTotal = Mathf.Round(weightTotal * 100f) / 100f; num -= weightTotal; num += banners; return num + boroBonus; } // Token: 0x0600072E RID: 1838 RVA: 0x0009A280 File Offset: 0x00098480 public void SetPartyLightColor() { bool flag = false; for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].summoned && !this.party[i].isBoro && this.party[i].hasTorch) { flag = true; } } if (flag) { Links.x.currentPartyLightColor = Links.x.torchColor; return; } Links.x.currentPartyLightColor = Links.x.partyLightColor; } // Token: 0x0600072F RID: 1839 RVA: 0x0009A320 File Offset: 0x00098520 public bool PartyHasTorch() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].summoned && !this.party[i].isBoro && this.party[i].hasTorch) { return true; } } return false; } // Token: 0x06000730 RID: 1840 RVA: 0x0009A392 File Offset: 0x00098592 public void StartDeathSequence() { base.StartCoroutine(this.DeathSequence()); } // Token: 0x06000731 RID: 1841 RVA: 0x0009A3A1 File Offset: 0x000985A1 private IEnumerator DeathSequence() { Records.x.RemoveControls(true); Records.x.mainCharacterDead = true; Links.x.cameraEffects.PlayAnimation("CameraDeath"); Links.x.gaia.SetPlaylist("Death", true, 0f); Links.x.combat.EndCombat(false); foreach (Character character in this.party) { if (character.party) { Links.x.inventory.ClearBag(character); } } yield return new WaitForSecondsRealtime(2.5f); Links.x.gameplay.OpenDock(); Links.x.deathScreen.SetActive(true); Links.x.deathScreen.GetComponent().Setup(); yield break; } // Token: 0x06000732 RID: 1842 RVA: 0x0009A3B0 File Offset: 0x000985B0 public void SingleSelected(Character character) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i] != character && !this.party[i].isBoro) { this.party[i].RemoveFromSelected(false); } } } // Token: 0x06000733 RID: 1843 RVA: 0x0009A420 File Offset: 0x00098620 public void SetPartyRotation(Vector3 pt) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].isBoro && !this.party[i].summoned && !this.party[i].mainSelected) { this.party[i].SetRotation(Quaternion.LookRotation(pt - this.party[i].tr.position), false, false); } } } // Token: 0x06000734 RID: 1844 RVA: 0x0009A4CC File Offset: 0x000986CC public void SelectAll() { if (Links.x.cameraEffects.indoors) { string currentBoundsName = Links.x.rtsCamera.currentBoundsName; } for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].selected && !this.party[i].isBoro) { this.party[i].AddToSelected(true, false); } } this.SetFirstAsSelected(true); } // Token: 0x06000735 RID: 1845 RVA: 0x0009A564 File Offset: 0x00098764 public bool AnyoneOutside() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].isBoro && this.party[i].desiredGraph == 0) { return true; } } return false; } // Token: 0x06000736 RID: 1846 RVA: 0x0009A5C3 File Offset: 0x000987C3 public void GetFormation() { this.currentFormationPoints = this.formationPoints1; this.formationHead = this.formationPoints1[0].parent; } // Token: 0x06000737 RID: 1847 RVA: 0x0009A5E8 File Offset: 0x000987E8 public void SetNodeConstraint(Character pathfinder, bool constrainTags, bool constrainRadius, bool checkWalkRadius, int uniqueID, int checkCircle) { this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainPenalty = 0; this.nodeConstraint.constrainTags = constrainTags; this.nodeConstraint.checkCircleID = checkCircle; if (!pathfinder) { this.nodeConstraint.passID = 0; this.nodeConstraint.passID2 = 0; this.nodeConstraint.checkConnections = Records.x.playerDefaultConnections; this.nodeConstraint.constrainPenalty = 0; } else { this.nodeConstraint.passID = pathfinder.nodeStationaryID; this.nodeConstraint.passID2 = pathfinder.nodeMovingID; this.nodeConstraint.checkConnections = pathfinder.ConnectionNumber(); if (pathfinder.npc) { this.nodeConstraint.constrainPenalty = 1; } else { this.nodeConstraint.constrainPenalty = 2; } } this.nodeConstraint.constrainToArea = -1; if (Records.x.partySailing) { this.nodeConstraint.constrainToEnvironment = 2; return; } this.nodeConstraint.constrainToEnvironment = 1; } // Token: 0x06000738 RID: 1848 RVA: 0x0009A6FC File Offset: 0x000988FC public void SetNodeConstraintParty(Character pathfinder, bool constrainTags, bool constrainRadius, bool checkWalkRadius, int uniqueID, int checkCircle) { this.nodeConstraintParty.constrainWalkability = true; this.nodeConstraintParty.walkable = true; this.nodeConstraintParty.constrainPenalty = 0; this.nodeConstraintParty.constrainTags = constrainTags; this.nodeConstraintParty.checkCircleID = checkCircle; if (!pathfinder) { this.nodeConstraintParty.passID = 0; this.nodeConstraintParty.passID2 = 0; this.nodeConstraintParty.checkConnections = Records.x.playerDefaultConnections; this.nodeConstraintParty.constrainPenalty = 0; } else { this.nodeConstraintParty.passID = pathfinder.nodeStationaryID; this.nodeConstraintParty.passID2 = pathfinder.nodeMovingID; this.nodeConstraintParty.checkConnections = pathfinder.ConnectionNumber(); if (pathfinder.npc) { this.nodeConstraintParty.constrainPenalty = 1; } else { this.nodeConstraintParty.constrainPenalty = 2; } } this.nodeConstraintParty.constrainToArea = -1; if (Records.x.partySailing) { this.nodeConstraintParty.constrainToEnvironment = 2; return; } this.nodeConstraintParty.constrainToEnvironment = 1; } // Token: 0x06000739 RID: 1849 RVA: 0x0009A810 File Offset: 0x00098A10 public void UpdateSelectionFromDoors() { bool indoors = Links.x.cameraEffects.indoors; string text = ""; if (indoors) { text = Links.x.rtsCamera.currentBoundsName; } for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].isBoro && (!indoors || this.party[i].desiredGraph != 1 || !(this.party[i].indoorID == text)) && !indoors) { int desiredGraph = this.party[i].desiredGraph; } } this.SetFirstAsSelected(true); } // Token: 0x0600073A RID: 1850 RVA: 0x0009A8D0 File Offset: 0x00098AD0 public float GetDistanceToCompanions(GameObject go) { Character character = null; for (int i = 0; i < this.portraitOrder.Count; i++) { if (go == this.portraitOrder[i].gameObject) { character = this.portraitOrder[i]; } } float num = 10f; float num2 = num; for (int j = 0; j < this.portraitOrder.Count; j++) { if (this.portraitOrder[j] != character && this.portraitOrder[j] && character) { float num3 = Vector3.Distance(this.portraitOrder[j].tr.position, character.tr.position); if (num3 < num2) { num2 = num3; } } } return num2 / num; } // Token: 0x0600073B RID: 1851 RVA: 0x0009A9A4 File Offset: 0x00098BA4 public void SetMainSelectedForSection() { if (Links.x.cameraEffects.indoors) { string currentBoundsName = Links.x.rtsCamera.currentBoundsName; } bool flag = false; for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.party[i] && this.party[i].selected && !this.party[i].isBoro) { if (!flag) { this.party[i].SetAsLeader(); } flag = true; } } if (!flag) { for (int j = 0; j < this.party.Count; j++) { if (!flag && this.party[j] && !this.party[j].isBoro) { this.party[j].SetAsLeader(); flag = true; } } } } // Token: 0x0600073C RID: 1852 RVA: 0x0009AA90 File Offset: 0x00098C90 public void SetPortraitHotkeys(bool joystick) { if (this.party == null) { return; } for (int i = 0; i < this.party.Count; i++) { if (this.party[i].portrait) { this.party[i].portrait.UpdateKey(joystick); } } } // Token: 0x0600073D RID: 1853 RVA: 0x0009AAEC File Offset: 0x00098CEC public void UpdatePortraits() { for (int i = 0; i < this.party.Count; i++) { if (this.party[i].portrait) { this.party[i].portrait.SetSelection(); } this.party[i].CircleColor(false); } } // Token: 0x0600073E RID: 1854 RVA: 0x0009AB50 File Offset: 0x00098D50 public void AddXP(int xp, Character actionTarget, bool show) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && !this.party[i].dead && !this.party[i].summoned && !this.party[i].stunned && !this.party[i].isBoro) { this.party[i].stats.AddXP(xp, actionTarget, show); } } } // Token: 0x0600073F RID: 1855 RVA: 0x0009ABEE File Offset: 0x00098DEE public void CompanionDied() { Links.x.OrderPortraitList(); Links.x.hudControl.SetPortraitPositions(); Links.x.characterSheet.OrderPortraits(); Links.x.hudControl.SetPortraitBacks(); } // Token: 0x06000740 RID: 1856 RVA: 0x0009AC28 File Offset: 0x00098E28 public void SetPortraits(bool all, int num) { this.portraitOrder = Links.x.portraitOrder; for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.portraitOrder[i] && (i == num || all)) { Portrait portrait = null; this.GetPortrait(i, out portrait); Portrait portrait2; if (!this.portraitOrder[i].portrait) { portrait2 = Links.x.hudControl.CreatePortrait(this.portraitOrder[i]); } else { portrait2 = this.portraitOrder[i].portrait; } this.portraitOrder[i].portrait = portrait2; this.portraitOrder[i].characterSheetPortrait = portrait; portrait2.SetSelection(); portrait.SetCharacter(this.portraitOrder[i]); portrait.SetSelection(); } } } // Token: 0x06000741 RID: 1857 RVA: 0x0009AD19 File Offset: 0x00098F19 public void GetPortrait(int num, out Portrait characterSheetPortrait) { characterSheetPortrait = null; if (num < this.portraitParentRoleSheet.childCount && num > -1) { characterSheetPortrait = this.portraitParentRoleSheet.GetChild(num).gameObject.GetComponent(); } } // Token: 0x06000742 RID: 1858 RVA: 0x0009AD48 File Offset: 0x00098F48 public void SetStartingFormation() { this.portraitOrder = Links.x.portraitOrder; List list = new List(); List list2 = new List(); for (int i = 0; i < this.portraitOrder.Count; i++) { if (this.portraitOrder[i] && !this.portraitOrder[i].isBoro && !this.portraitOrder[i].summoned) { int num = 0; int num2 = 0; this.portraitOrder[i].stats.SetStartingFormation(out num, out num2); list.Add(num); list2.Add(num2); } } for (int j = 0; j < this.portraitOrder.Count; j++) { if (this.portraitOrder[j] && !this.portraitOrder[j].isBoro && !this.portraitOrder[j].summoned) { bool flag = false; bool flag2 = false; for (int k = 0; k < list.Count; k++) { if (k != j) { if (list[k] == list[j]) { flag = true; } if (list2[k] == list2[j]) { flag2 = true; } } } if (!flag) { this.portraitOrder[j].stats.formationGroup = list[j]; } else if (flag2) { this.portraitOrder[j].stats.formationGroup = list[j]; } else { this.portraitOrder[j].stats.formationGroup = list2[j]; } } } } // Token: 0x06000743 RID: 1859 RVA: 0x0009AF08 File Offset: 0x00099108 public int PartyCount() { int num = 0; for (int i = 0; i < this.party.Count; i++) { num++; } return num; } // Token: 0x06000744 RID: 1860 RVA: 0x0009AF34 File Offset: 0x00099134 public void SetMinimapIcons(bool state) { if (this.party != null) { for (int i = 0; i < this.party.Count; i++) { if (this.party[i] && this.party[i].mapIcon) { this.party[i].mapIcon.SetActive(state); } } } } // Token: 0x06000745 RID: 1861 RVA: 0x0009AFA1 File Offset: 0x000991A1 public void SetWaypoint() { } // Token: 0x04000A1B RID: 2587 [Header("CLICKING")] public Vector3 mousePoint; // Token: 0x04000A1C RID: 2588 public GraphNode mouseNode; // Token: 0x04000A1D RID: 2589 [Header("PARTY")] public bool drawingSquare; // Token: 0x04000A1E RID: 2590 public int formation; // Token: 0x04000A1F RID: 2591 private Transform portraitParentRoleSheet; // Token: 0x04000A20 RID: 2592 public List portraitUpdate = new List(); // Token: 0x04000A21 RID: 2593 public List portraitHudUpdate = new List(); // Token: 0x04000A22 RID: 2594 private StringFast str = new StringFast(64); // Token: 0x04000A23 RID: 2595 private List portraitOrder; // Token: 0x04000A24 RID: 2596 public List friend1 = new List(); // Token: 0x04000A25 RID: 2597 public List friend2 = new List(); // Token: 0x04000A26 RID: 2598 public int morale; // Token: 0x04000A27 RID: 2599 public float rally; // Token: 0x04000A28 RID: 2600 public float rallySpeed; // Token: 0x04000A29 RID: 2601 public float rallyBoost; // Token: 0x04000A2A RID: 2602 public float rallyAttacks; // Token: 0x04000A2B RID: 2603 public bool debug; // Token: 0x04000A2C RID: 2604 [Header("MOVEMENT")] public LineRenderer lineRendererToDrawTrajectory; // Token: 0x04000A2D RID: 2605 public bool canPath; // Token: 0x04000A2E RID: 2606 public bool lineOn; // Token: 0x04000A2F RID: 2607 public bool debuggingPath; // Token: 0x04000A30 RID: 2608 public bool newFormation; // Token: 0x04000A31 RID: 2609 private List refPrepPath; // Token: 0x04000A32 RID: 2610 private List party; // Token: 0x04000A33 RID: 2611 private List dioramaCharacters; // Token: 0x04000A34 RID: 2612 public List waypointOrder = new List(); // Token: 0x04000A35 RID: 2613 private Vector3 dir; // Token: 0x04000A36 RID: 2614 public List pickedNodes = new List(); // Token: 0x04000A37 RID: 2615 public List pickedNodesEstimated = new List(); // Token: 0x04000A38 RID: 2616 public GameObject waypoint; // Token: 0x04000A39 RID: 2617 public int summonsFormationGroup; // Token: 0x04000A3A RID: 2618 public GraphNode formationFront; // Token: 0x04000A3B RID: 2619 public SelectionBox box; // Token: 0x04000A3C RID: 2620 public int pushCountMax = 100; // Token: 0x04000A3D RID: 2621 public float angle; // Token: 0x04000A3E RID: 2622 private List pickups; // Token: 0x04000A3F RID: 2623 private List nearPickups = new List(); // Token: 0x04000A40 RID: 2624 private IEnumerator pickupCoroutine; // Token: 0x04000A41 RID: 2625 public float updateTime; // Token: 0x04000A42 RID: 2626 private List nearbyParty = new List(); // Token: 0x04000A43 RID: 2627 private List nearbyPartyNode = new List(); // Token: 0x04000A44 RID: 2628 public Transform formationHead; // Token: 0x04000A45 RID: 2629 public List formationPoints1 = new List(); // Token: 0x04000A46 RID: 2630 private List currentFormationPoints; // Token: 0x04000A47 RID: 2631 private Vector3 previousClick; // Token: 0x04000A48 RID: 2632 private Vector3 mPoint; // Token: 0x04000A49 RID: 2633 public int lookingForDomePaths; // Token: 0x04000A4A RID: 2634 private List path; // Token: 0x04000A4B RID: 2635 public bool creatingPath; // Token: 0x04000A4C RID: 2636 public Quaternion savedRot; // Token: 0x04000A4D RID: 2637 public bool combatWait; // Token: 0x04000A4E RID: 2638 public GraphNode prevConnection1; // Token: 0x04000A4F RID: 2639 public GraphNode prevConnection2; // Token: 0x04000A50 RID: 2640 public GraphNode prevConnection3; // Token: 0x04000A51 RID: 2641 public string prevKeyDown; // Token: 0x04000A52 RID: 2642 private string keyDown; // Token: 0x04000A53 RID: 2643 public GraphNode companionNode1; // Token: 0x04000A54 RID: 2644 public GraphNode companionNode2; // Token: 0x04000A55 RID: 2645 public GraphNode companionNode3; // Token: 0x04000A56 RID: 2646 public GraphNode companionNode4; // Token: 0x04000A57 RID: 2647 private List gameplayCircleTiles; // Token: 0x04000A58 RID: 2648 public List circleTiles = new List(); // Token: 0x04000A59 RID: 2649 private List openTiles = new List(); // Token: 0x04000A5A RID: 2650 [Header("INTERACTION")] public Character moveToCharacter; // Token: 0x04000A5B RID: 2651 private List tempPath; // Token: 0x04000A5C RID: 2652 private NNConstraint nodeConstraint = new NNConstraint(); // Token: 0x04000A5D RID: 2653 private NNConstraint nodeConstraintParty = new NNConstraint(); // Token: 0x04000A5E RID: 2654 private NNConstraint nodeConstraintFormation = new NNConstraint(); // Token: 0x04000A5F RID: 2655 private NNConstraint nodeConstraintDir = new NNConstraint(); // Token: 0x04000A60 RID: 2656 public float dialogueMaxDistance = 4f; // Token: 0x04000A61 RID: 2657 public IEnumerator scatterCoroutine; // Token: 0x04000A62 RID: 2658 public IEnumerator waypointRoutine; // Token: 0x04000A63 RID: 2659 public IEnumerator estimatePathRoutine; // Token: 0x04000A64 RID: 2660 public IEnumerator resurrectCoroutine; // Token: 0x04000A65 RID: 2661 private float updateTimeDomePaths; // Token: 0x04000A66 RID: 2662 private GraphNode prevNode; // Token: 0x04000A67 RID: 2663 private float prevNodeTime; // Token: 0x04000A68 RID: 2664 private Animator waypointAnimator; // Token: 0x04000A69 RID: 2665 private PlayerInput playerInput; // Token: 0x04000A6A RID: 2666 private InputAction moveAction; // Token: 0x04000A6B RID: 2667 private InputAction directionAction; // Token: 0x04000A6C RID: 2668 public Vector2 move; // Token: 0x04000A6D RID: 2669 public Vector3 direction; // Token: 0x04000A6E RID: 2670 public bool joyStickDown; // Token: 0x04000A6F RID: 2671 private float t; // Token: 0x04000A70 RID: 2672 private float checkTime; // Token: 0x04000A71 RID: 2673 [Header("GROUPS")] private List positions = new List(); // Token: 0x04000A72 RID: 2674 public List lines = new List(); // Token: 0x04000A73 RID: 2675 public int linenum; // Token: 0x04000A74 RID: 2676 public List timeOutsideCircle = new List(); // Token: 0x04000A75 RID: 2677 private List intruders = new List(); // Token: 0x04000A76 RID: 2678 private List intruderTime = new List(); // Token: 0x04000A77 RID: 2679 private List intruderTemp = new List(); // Token: 0x04000A78 RID: 2680 private List intruderTimeTemp = new List(); // Token: 0x04000A79 RID: 2681 private List linesPoints = new List(); // Token: 0x04000A7A RID: 2682 public float currentDither; // Token: 0x04000A7B RID: 2683 private float startDither; // Token: 0x04000A7C RID: 2684 private float endDither; // Token: 0x04000A7D RID: 2685 private float fadeAmount; // Token: 0x04000A7E RID: 2686 public bool fading; // Token: 0x04000A7F RID: 2687 private IEnumerator breakRoutine; // Token: 0x04000A80 RID: 2688 public float timeToNextCircle; // Token: 0x04000A81 RID: 2689 public float circleRecoverTime = 150f; }