using System; using System.Collections; using System.Collections.Generic; using DarkTonic.MasterAudio; using Pathfinding; using PixelCrushers.DialogueSystem; using TMPro; using UnityEngine; // Token: 0x0200001B RID: 27 public class Character : MonoBehaviour { // Token: 0x060002F0 RID: 752 RVA: 0x00039F18 File Offset: 0x00038118 private void Update() { if (!Links.x.gaia.sceneLoaded) { return; } if (Records.x.inOverworldMap) { return; } if (this.offMap || !this.body) { return; } if (this.setupComplete) { if (!this.npc && this.mainSelected && !Records.x.pocketPause) { Links.x.follow.position = this.tr.position + this.headHeight; float num = this.attackTime; if (!this.CanAttack()) { num = 0f; } if (Links.x.combat.bubbleEvent) { num = 1f; } Shader.SetGlobalFloat("_AttackTime", num); } if (Links.x.gaia.sceneLoaded && !this.dead && !this.inactive) { if (!this.body) { this.SetupBody(); } if (this.body.tr.parent == Links.x.archives.tr || !this.body.gameObject.activeSelf) { this.SetupBody(); if (this.party) { this.SetupPartyAfterLoadedVariables2(); } } if (this.body.headObject && this.body.headObject.transform.parent == Links.x.archives.tr) { this.SetupBody(); if (this.party) { this.SetupPartyAfterLoadedVariables2(); } } } if (this.inactive && !this.dayNightVanishing && !this.alwaysOn && !this.dead) { this.TurnScriptsOff(); return; } if (this.isBoro) { if (this.inactive || Links.x.gaia.boroControls.boroInvisible) { return; } if (!Links.x.gaia.boroControls.BoroNearby()) { Links.x.gaia.boroControls.StartLeaveWait(); } } bool flag = false; if (this.isHit) { if (Links.x.gameplay.seconds > this.hitTime) { bool flag2 = true; if (this.bouncer) { flag2 = false; RaycastHit raycastHit; if (Physics.SphereCast(this.tr.position + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit, 100f, 4194433)) { this.groundPoint = raycastHit.point; if (Mathf.Abs(this.groundPoint.y - this.tr.position.y) < 0.5f) { flag2 = true; } } else { flag2 = true; } if (this.bouncer.rbody.linearVelocity.magnitude < 0.3f) { flag2 = true; } if (!this.bouncer.gameObject.activeSelf) { this.bouncer.gameObject.SetActive(true); } } if ((!this.bouncer && (this.body.downHash == this.body.currentHash || this.body.downStartHash == this.body.currentHash)) || flag2) { this.isHit = false; this.postHitTime = Links.x.gameplay.seconds; if ((this.body.bounceHash == this.body.currentHash || this.body.downHash == this.body.currentHash || this.animID == 8) && !this.dead) { this.PlayAnimation("GetUp", 0f); } this.hitTime = 0f; this.hitTimeReal = 0f; if (this.stunned) { this.PlayAnimation("Hit Down", 0f); } RaycastHit raycastHit2; if (this.bouncer && this.bouncer.gameObject.activeSelf && Physics.SphereCast(this.tr.position + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit2, 100f, 4194433)) { this.groundPoint = raycastHit2.point; if (this.groundPoint.y > this.tr.position.y) { this.SetPosition(this.groundPoint, null); } } if (!this.dead) { this.ClaimNode(null, this.tr.position, false); } } if (this.hitTime == 0f) { this.PlayFaceAnimation(FaceAnimations.AnimationNames.Blink); if (this.isHit) { this.ClaimNode(null, this.tr.position, false); } this.isHit = false; this.postHitTime = Links.x.gameplay.seconds; if (this.hasActions) { Links.x.combat.GetNextAction(this); } flag = true; if (this.bouncer) { this.bouncer.End(); } if (this.dead && !this.party) { base.enabled = false; } } else if (this.NodesCount() > 0) { this.ClearNodePath(); } } if (this.bouncer && this.hitTime != 0f && this.bouncer.gameObject.activeSelf) { if (Time.timeSinceLevelLoad > this.hitTimeReal + 0.4f && Links.x.combat.inPocketAttack && this.pocketPausedOverride) { this.pocketPausedOverride = false; this.animator.speed = 0f; this.hitTimeReal = 0f; } if ((Links.x.combat.inPocketAttack || Records.x.pocketPause) && !this.pocketPausedOverride) { if (this.savedBounceVel == this.vectorZero) { this.savedBounceVel = this.bouncer.rbody.linearVelocity; this.savedBounceAngVel = this.bouncer.rbody.angularVelocity; } this.bouncer.rbody.useGravity = false; this.bouncer.rbody.isKinematic = true; } else { if (this.savedBounceVel != this.vectorZero) { this.bouncer.rbody.AddForce(this.savedBounceVel, ForceMode.VelocityChange); this.bouncer.rbody.AddTorque(this.savedBounceAngVel, ForceMode.VelocityChange); this.savedBounceVel = this.vectorZero; this.savedBounceAngVel = this.vectorZero; this.bouncer.rbody.useGravity = true; this.bouncer.rbody.isKinematic = false; } float num2 = 0f; RaycastHit raycastHit3; if (Physics.SphereCast(this.tr.position + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit3, 100f, 4194433)) { this.groundPoint = raycastHit3.point; if (this.groundPoint.y < this.tr.position.y + 0.6f) { num2 = this.tr.position.y - this.groundPoint.y; } } if (num2 > 0f) { float num3 = -600f; if (this.dead) { num3 = -300f; } this.bouncer.rbody.AddForce(Vector3.up * num3, ForceMode.Force); } if (num2 < 0.5f || this.bouncer.rbody.linearVelocity.sqrMagnitude < 0.1f) { if (this.stunned) { this.PlayAnimation("Hit Down", 0f); } if (this.body.currentHash == this.body.bounceHash) { this.animator.SetBool("Bounce Over", true); } } } } } if (this.dead && !this.party) { return; } if (this.postHitTime > 0f && (Links.x.gameplay.seconds > this.postHitTime + 15f || this.isHit || this.dead || this.stunned || this.downed || this.stats.pinned)) { this.postHitTime = 0f; } if (this.inActionTime > 0f) { if (!this.inAction) { this.inActionTime = 0f; } else if (Links.x.gameplay.seconds > this.inActionTime + 100f && this.animID != 14) { this.inAction = false; this.inActionTime = 0f; } } if (this.animID == 14 && this.body.currentHash != this.body.channelHash) { this.animID = 0; } if (this.inRecoveryTime > 0f) { if (!this.inRecovery) { this.inRecoveryTime = 0f; } else if (Links.x.gameplay.seconds > this.inRecoveryTime + 15f) { this.inRecovery = false; this.inRecoveryTime = 0f; } } if (this.inQueuedAbilityTime > 0f) { if (!this.inQueuedAbility) { this.inQueuedAbilityTime = 0f; } else if (Time.timeSinceLevelLoad > this.inQueuedAbilityTime + 2f) { this.inQueuedAbility = false; this.inQueuedAbilityTime = 0f; } } if (this.chargeTime > 0f) { if (this.charging) { if (Links.x.gameplay.seconds > this.chargeTime + 18f) { this.charging = false; if (Records.x.editor) { Debug.Log("setting charge false for " + ((this != null) ? this.ToString() : null)); } } } else { this.chargeTime = 0f; } } if (this.listenForPhysicsEnd && !this.rb.isKinematic) { Debug.Log(((this != null) ? this.ToString() : null) + " listen for physics end " + this.rb.linearVelocity.magnitude.ToString()); if (this.rb.linearVelocity.magnitude < 0.2f) { this.rb.isKinematic = true; this.ClaimNode(null, Vector3.zero, true); this.listenForPhysicsEnd = false; if (!this.moving) { this.jumping = false; } if (this.node != null) { this.SetPosition((Vector3)this.node.position, null); } this.SetRotation(Quaternion.identity, false, false); } } bool flag3 = false; if (Records.x.combat) { if (this.npc) { } if (this.npc || Records.x.InCombat(false)) { } } bool flag4 = true; if (this.IsSentient() && !this.dead && flag4 && !Records.x.removeControls && this.stats.Confuse() == 0 && (flag3 || !Records.x.pocketPause)) { if (this.attackTime < 1f) { if (!this.inAction && !this.inRecovery && !this.inQueuedAbility) { this.at += Time.deltaTime / this.currentAttackSpeed; } float num4 = this.attackTime; this.attackTime = Mathf.Lerp(0f, 1f, this.at); if (this.attackTime >= 1f) { this.inventoryTime = 0f; } if (this.mainSelected) { Links.x.hudControl.UpdateAttackTime(this.attackTime, 1f, this.inventoryTime); } if (num4 != this.attackTime && this.portrait) { this.portrait.SetActionBar(this.attackTime); this.portrait.skillBag.SetSelectedState(); } } else { if (this.mainSelected) { Links.x.hudControl.UpdateAttackTime(1f, 1f, this.inventoryTime); if (Links.x.combat.attackingInteractiveOutsideOfCombat && !Records.x.InCombat(false)) { Links.x.hudControl.ToggleAttackTimer(false); Links.x.combat.attackingInteractiveOutsideOfCombat = false; Links.x.combat.npcsInCombat = false; } } if (!Records.x.pocketPause) { float num5 = this.attackTime; if (!Records.x.removeControls) { this.attackTime = 1f; } if (!this.inAction && !this.inRecovery) { if (num5 != this.attackTime && this.portrait) { this.portrait.SetActionBar(this.attackTime); this.portrait.skillBag.SetSelectedState(); } } else if (this.portrait) { this.portrait.SetActionBar(0f); } } } } else if (!Records.x.pocketPause) { float num6 = this.attackTime; if (!Records.x.removeControls) { this.attackTime = 1f; } if (num6 != this.attackTime && this.portrait) { this.portrait.SetActionBar(this.attackTime); } } else { if (this.dead) { this.attackTime = 0f; } if (this.mainSelected) { Links.x.hudControl.UpdateAttackTime(this.attackTime, 1f, 0f); } } if (this.hasActions && this.party && !this.dead && !this.stunned) { this.portrait.skillBag.UpdateAbilityTriggers(); } if (this.party && this.currentAnimatorSpeed != this.animator.speed && !this.body.animationHold) { float num7 = 10f; if (this.IsWalking() && this.stats.moveSpeedMod == 0f) { this.animator.speed = Mathf.Lerp(this.animator.speed, this.currentAnimatorSpeed, Time.deltaTime * num7); } else { this.animator.speed = this.currentAnimatorSpeed; } } if (this.inAction || this.inRecovery) { this.body.CheckBlink(); } if (this.node != null) { if (this.slideNode == null) { if (!this.node.Walkable) { if (Records.x.editor) { Debug.Log(((this != null) ? this.ToString() : null) + " node is not walkable, moving to new node"); } GraphNode graphNode = this.NearNode(this.tr.position, true, 0, 2, 0); if (graphNode != null) { this.ClaimNode(graphNode, this.tr.position, false); if (!this.moving && !this.sailing) { this.SetMoveFollowPosition(this.NodePosition()); this.Slide(this.node, true); } } else if (this.party && !this.mainSelected) { this.setArea = (int)Links.x.main.node.Area; graphNode = this.NearNode(Links.x.main.tr.position, true, 0, 2, 0); if (graphNode != null) { this.ClaimNode(graphNode, (Vector3)graphNode.position, false); if (!this.moving && !this.sailing) { this.tr.position = (Vector3)graphNode.position; this.SetMoveFollowPosition(this.NodePosition()); } } } } if (!this.moving && this.nodePath.Count == 0 && !this.dead && !this.stunned && !this.downed && !this.sleeping && (!this.resting || (this.resting && !this.inCircle && this.hasActions)) && !this.mainSelected) { this.CheckInTile(); } } if (this.ghost && !Records.x.pocketPause) { int num8 = 1; if (this.ghost && !this.ghostVanishing) { num8 = 0; } if (this.sailing || this.movesOnWater) { num8 = 2; } if (!this.node.AllConnectionsWalkable(this.ConnectionNumber(), num8) && this.slideNode == null) { this.GhostFlee(); } } } if (this.fleeing && !this.moving && this.waitingForPath == 0 && Links.x.gameplay.seconds >= this.fleeStartTime + this.fleeTime) { this.CheckFleeEnd(); } if (this.summoned && this.stats.leaveTime > 0f && (Links.x.gameplay.seconds > this.stats.leaveTime || Links.x.gaia.waitingToRemoveScene)) { this.Missing(); } if (this.party) { if (Time.timeSinceLevelLoad > this.timeSinceMoveEnded && this.timeSinceMoveEnded != 0f && this.timeSinceMoveEnded != -100f && !Records.x.pocketPause) { if (!this.hasActions && this.animID == 0 && this.slideNode == null) { this.PlayIdle(); this.timeSinceMoveEnded = 0f; } else { this.timeSinceMoveEnded = 0f; } } if (this.sailing && this.sporeTime == 0f) { this.sporeTime = Links.x.gameplay.seconds; } if (this.sporeTime > 0f && (this.inSporeForest || this.sailing)) { float seconds = Links.x.gameplay.seconds; if ((seconds > this.sporeTime + 100f && this.inSporeForest) || (seconds > this.sporeTime + (500f - Records.x.boroBonus.z * 250f) && this.sailing)) { int num9 = 1; if (this.sailing) { num9 = 2; } this.stats.AddSpiritFromKill((float)num9); this.sporeTime = seconds; } } } if (this.kickUseTime > 0f && Time.timeSinceLevelLoad > this.kickUseTime + 0.75f) { this.kickUseTime = 0f; if (this.animID == 25 || this.animID == 26) { this.animID = 0; } } if (this.jumpTime > 0f && ((Links.x.gameplay.seconds > this.jumpTime + 60f && this.body.currentHash != this.body.jumpLoopHash && !this.mainSelected) || Links.x.gameplay.seconds > this.jumpTime + 130f || !this.jumping || this.dead || this.stunned)) { this.StopEvading(); if (this.jumping && this.IsSentient()) { this.ForceEndJump(); this.jumping = false; this.TargetReached(); if (this.actions && !this.mainSelected) { Links.x.combat.GetNextAction(this); } } this.jumpTime = 0f; this.jumping = false; if (this.isHitFlying) { this.isHitFlying = false; } } if (this.slideNode != null && !Records.x.paused && !this.dead && (!this.pocketPaused || (this.pocketPaused && this.pocketPausedOverride && !this.party && this.isHit))) { if (this.turning) { this.EndTurning(false); } if (this.stuckInPlace || this.stats.Stuck() > 0 || this.sailing || this.jumpingAreas || (!this.movesOnWater && this.isHit) || this.jumping || this.jumpingPosition) { this.slideNode = null; this.slideNodePosition = Vector3.zero; this.ClaimNode(null, this.vectorZero, false); if (this.node != null && !this.sailing && !this.isHit) { this.SetMoveFollowPosition(this.NodePosition()); } } else { float sqrMagnitude = (this.slideNodePosition - this.tr.position).sqrMagnitude; float sqrMagnitude2 = (this.prevNodePosition - this.tr.position).sqrMagnitude; if (sqrMagnitude < 0.0025000002f || (this.body.IsHit() && this.body.animationHold && !this.movesOnWater) || flag || ((sqrMagnitude > 20f || sqrMagnitude2 > 20f) && this.mainSelected)) { this.ttime = 0f; if (this.isHitFlying) { this.KnockbackEnd(false); this.isHitFlying = false; } if (this.IsWalking() && this.NodesCount() == 0) { this.SetIdle(true); } if ((Vector3)this.slideNode.position == this.slideNodePosition) { this.SetPosition((Vector3)this.slideNode.position, null); this.ClaimNode(this.slideNode, this.slideNodePosition, false); } else { this.ClaimNode(null, this.tr.position, false); } this.SetMoveFollowPosition(this.slideNodePosition); this.slideNode = null; this.slideNodePosition = Vector3.zero; this.movingOutOfWay = false; if (this.lookTarget) { this.lookTargetTime = Time.timeSinceLevelLoad; } if (this.hasActions && !this.body.IsHit() && this.timelineIcon && !this.mainSelected && this.timelineIcon.Nothing()) { this.actions.CheckIfRunningAI(); this.actions.EndTurn(true); } } else if (this.slideNode != null && this.tr.position != this.vectorZero) { if (this.isHit) { this.ttime += Time.deltaTime * 1f; } else { this.ttime += Time.deltaTime * 2f; } Vector3 vector = Vector3.MoveTowards(this.tr.position, this.slideNodePosition, 12f * Time.deltaTime); if (vector != this.tr.position && vector != this.vectorZero) { this.SetPosition(vector, null); this.SetMoveFollowPosition(this.tr.position); } if (!this.isHit && (vector - this.tr.position).sqrMagnitude > 0.010000001f) { this.SetRotation(Quaternion.LookRotation(vector - this.tr.position), false, false); } if (this.isHitFlying) { this.tr.Rotate(this.randomRot * 30f * Time.deltaTime); this.rot = this.tr.rotation; this.smoothRot = this.tr.rotation; } } else { this.ClaimNode(null, this.vectorZero, false); this.slideNode = null; this.movingOutOfWay = false; } } } if (this.jumpingAreas) { if (Time.timeSinceLevelLoad > this.jumpingAreasTime + 0.5f) { if (this.nodePath.Count > 0) { this.SetPosition((Vector3)this.jumpAreasNode.position, this.jumpAreasNode); this.moveFollow.position = (Vector3)this.jumpAreasNode.position; this.ClaimNode(this.jumpAreasNode, this.tr.position, true); this.TurnExit(); } else { this.ClaimNode(this.jumpAreasNode, this.tr.position, true); this.SetPosition((Vector3)this.jumpAreasNode.position, this.jumpAreasNode); } if (this.jumpAreasNode.GraphIndex == 0U) { this.indoorID = ""; this.desiredGraph = 0; } else { this.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName((Vector3)this.jumpAreasNode.position); this.desiredGraph = 1; } Links.x.sensory.UpdateCharactersIntExt(true); this.ChangeTorchLight(); this.body.SetMagicaClothState(false); this.body.turnOnMagicaClothNextFrame = 3; this.jumpingAreas = false; this.slideNode = null; this.tempStop = false; if (this.animID != 0) { this.PlayIdle(); } } else { this.savedPathTarget = this.jumpAreasNode; if (this.sphere) { this.sphere.transform.position = (Vector3)this.jumpAreasNode.position; } this.SetPosition((Vector3)this.jumpAreasNode.position, this.jumpAreasNode); this.moveFollow.position = (Vector3)this.jumpAreasNode.position; } } if (Time.timeSinceLevelLoad > this.movingOutOfWayTime + 8f) { this.movingOutOfWayTime = 0f; this.movingOutOfWay = false; } if (this.attentionTime > 0f && Time.timeSinceLevelLoad > this.attentionTime + 0.25f) { if (this.attentionCount < 4) { this.attentionTime = Time.timeSinceLevelLoad; } else { this.attentionTime = 0f; this.attentionCount = 0; } this.attentionCount++; if (this.attentionCount % 2 != 0) { if (!this.hovering) { this.body.Hover(false, true); } } else { this.body.Hover(true, true); } } this.updateCount--; if (this.lookTargetTime > 0f && Time.timeSinceLevelLoad > this.lookTargetTime + 2f) { if (this.lookTarget && !this.boatNavigator && !this.moving && !this.physicsMove && !this.inAction && !this.inQueuedAbility && !this.inRecovery) { if (this.lookTarget.tr.position != this.tr.position) { this.SetRotation(Quaternion.LookRotation(this.lookTarget.tr.position - this.tr.position), false, false); } this.lookTarget = null; this.lookTargetTime = 0f; } else { this.lookTarget = null; this.lookTargetTime = 0f; } } if (this.attackTargetTime > 0f) { if (Links.x.gameplay.seconds > this.attackTargetTime || !this.inAction) { this.attackTargetTime = 0f; this.attackTarget = null; } else { this.SetRotation(Quaternion.LookRotation(this.attackTarget.tr.position - this.tr.position), false, true); } } if (!this.hasActions && !this.movingOutOfWay && !this.jumpingAreas && !this.jumpingPosition && !this.mainSelected && !Records.x.removeControls && !Records.x.inMenus && Links.x.main.moving && !Links.x.main.body.sneaking && !this.body.sneaking) { float sqrMagnitude3 = (Links.x.main.tr.position - this.tr.position).sqrMagnitude; if (sqrMagnitude3 < 1f && !this.isBoro) { Links.x.main.Collide(this, false); } else if (sqrMagnitude3 < 12.25f && (this.isBoro || this.npc) && this.hostility < 2 && !this.attackingUntilBribe && !this.fleeing && Links.x.main.physicsMove && !this.resting) { Vector3 vector2 = Vector3.Normalize(Links.x.main.tr.forward); Vector3 vector3 = Vector3.Normalize(this.tr.position - Links.x.main.tr.position); if (Vector3.Dot(vector2, vector3) > 0f) { if (this.collidedTime == 0f) { this.collidedTime = Time.timeSinceLevelLoad + 4f; } else if (Time.timeSinceLevelLoad > this.collidedTime && !this.movingOutOfWay) { Links.x.main.Collide(this, false); if (this.movingOutOfWayTime > 0f && !this.stats.animal && this.quip == null && !this.stats.xmlName.Contains("Fairy")) { if (this.stats.xmlName.Contains("Dryad")) { int num10 = Random.Range(0, 5); if (num10 == 0) { this.StartQuip("I will pass"); } if (num10 == 1) { this.StartQuip("You are here"); } if (num10 == 2) { this.StartQuip("Vol knows your step"); } if (num10 == 3) { this.StartQuip("Be gentle"); } if (num10 == 4) { this.StartQuip("I am in the path"); } } else { int num11 = Random.Range(0, 5); if (num11 == 0) { this.StartQuip("Excuse me"); } if (num11 == 1) { this.StartQuip("Am I in your way?"); } if (num11 == 2) { this.StartQuip("Did you need somewhat?"); } if (num11 == 3) { this.StartQuip("Pardon me"); } if (num11 == 4) { this.StartQuip("I'll let you pass"); } } } } } } if (this.stats.hasNonCombatAI && this.stats.nonCombatAI == "Shy" && this.visible == 1) { if (sqrMagnitude3 < 64f) { if (!this.fleeing) { if (this.stats.xmlName.Contains("Fairy")) { this.ignoreNodeIDs = true; } this.Flee(Links.x.main.node, false, Links.x.gameplay.seconds, 100f); } } else if (this.stats.xmlName.Contains("Fairy") && sqrMagnitude3 > 100f) { this.ignoreNodeIDs = false; } } } if (this.collidedTime > 0f && Time.timeSinceLevelLoad > this.collidedTime + 3f) { this.collidedTime = 0f; } if (this.updateCount <= 0) { if (!this.outsideBounds && !this.stuckInPlace && !this.moving && !this.dead && !this.stunned) { if (this.node == null && Links.x.gaia.sceneLoaded) { this.FindCurrentNode(this.inCombat); } else { this.CheckInTile(); } } if (!this.npc || this.node == null || this.sleeping || this.resting) { this.updateCount = Random.Range(10, 30); if (this.resting && this.hasActions) { this.updateCount = Random.Range(2, 6); } } else { this.updateCount = Random.Range(100, 300); } if ((this.resting || this.sleeping) && this.visible == 1 && !this.inactive && (this.body.currentHash == this.body.idleHash || this.body.currentHash == this.body.combatIdleHash)) { this.animID = 0; if (this.inCircle && !this.sleeping) { this.PlayAnimation("Fatigued", 0f); } else { this.PlayAnimation("Hit Down", 0f); } } if (!this.dead && (!this.stunned || (this.stunned && this.party)) && ((this.stunned && this.party) || this.downed || (!this.hasActions && this.resting)) && this.body.currentHash != this.body.hitDownHash) { this.PlayAnimation("Hit Down", 0f); } if (this.party) { this.CheckInTown(); } if (this.sleeping || this.resting || this.stunned || this.dead || this.downed) { this.PlayFaceAnimation(FaceAnimations.AnimationNames.Sleep); } if (this.isBoro && !this.sailing && Random.Range(0, 100) == 0 && !Records.x.InCombat(false) && this.waitingForPath == 0 && !this.moving && !this.justMoved && !this.movingOutOfWay) { this.MakePath(Links.x.main.node, 3, false, true, false); } } if (this.party && (this.moving || this.physicsMove)) { this.CheckInTown(); } if (this.summoned) { if (this.animator.speed > 1f && !this.IsWalking() && this.animID != 1) { this.SetAnimatorSpeed(1f); } if (this.missingTime > 0f) { if (Time.timeSinceLevelLoad > this.missingTime + 5f && !Records.x.pocketPause) { this.SetMeshState(false); } if (Time.timeSinceLevelLoad > this.missingTime + 7f && !Records.x.pocketPause && this.visible == 0) { this.Missing(); return; } } } if (!this.CheckControls() || Records.x.dialogue) { if (!this.currentlyInDialogue) { this.currentlyInDialogue = true; if (!this.ignoreRemoveControls && Records.x.dialogue && this.nodePath.Count > 0 && !this.fleeing) { this.EndPath(); } } } else if (this.currentlyInDialogue) { this.currentlyInDialogue = false; if (this.circleTr && !this.isBoro && !this.stunned && this.usingCircles) { this.circle.SetActive(true); } if (this.npc && this.ghost && this.hostility == 0) { this.circle.SetActive(false); } this.GetPatrolHoldTime(true); } if (this.npc) { if (this.visible == 0) { if (!this.inactive && !this.missing && !this.fleeing && !this.dead && this.usingCircles && this.circle.activeSelf) { this.circle.SetActive(false); } } else if (!this.inactive && !this.dead && !this.stats.dead && !this.stunned && this.usingCircles && !this.circle.activeSelf && (!this.npc || !this.ghost || this.hostility != 0)) { this.circle.SetActive(true); } } if (Time.realtimeSinceStartup > this.currentEffectTime + 0.75f && !this.dead) { this.RotateEffects(); } if (this.body.dodgeTime > 0f && Time.timeSinceLevelLoad > this.body.dodgeTime + 0.3f) { this.body.dodgeTime = 0f; this.body.Dodge(false); } if (this.quipStartTime > -1f && this.quip && Time.time > this.quipStartTime + 5f) { this.quip.End(); this.quip = null; this.quipStartTime = -1f; } if (this.blockedTime > 0f) { this.blocked = true; } else { this.blocked = false; } if (Time.timeSinceLevelLoad > this.updateTime + 5f && !this.dayNightVanishing && !this.alwaysOn) { this.updateTime = Time.timeSinceLevelLoad + Random.Range(0f, 5f); if ((this.stats.animal || this.stats.soundID > 0) && ((this.summoned && Random.Range(0, 20) == 0) || (!this.summoned && Random.Range(0, 2) == 0)) && !Records.x.paused && !Records.x.pocketPause && !this.sleeping && !this.resting && !Records.x.InCombat(false)) { this.PlaySoundFX(0, 6); } } if ((!this.npc || (this.npc && this.inCombat && this.IsSentient())) && !this.stats.pinned && !this.stats.pinning) { float num12 = 50f; if (!this.npc) { num12 = 7f; } if (Links.x.gameplay.seconds > this.fatigueUpdateTime + num12) { this.fatigueUpdateTime = Links.x.gameplay.seconds; if (this.npc) { this.stats.AddStamina(1f); } else { this.stats.AddStamina(1f); } } } if (this.DoPatrolRotate() && true && (Time.timeSinceLevelLoad > this.patrolHoldTime || this.alwaysLookAtParty)) { this.PatrolRotate(); } if (this.pocketPaused && !this.pocketPausedOverride && !Records.x.pocketPause) { this.pocketPaused = false; if (this.blockedTime == 0f && this.prePausedSpeed < 0.1f) { this.prePausedSpeed = 1f; } this.SetAnimatorSpeed(this.prePausedSpeed); } this.UpdateRotation(); if (this.ambushing) { this.jumpingPosition = false; } if (this.jumpingPosition) { if (Time.timeSinceLevelLoad > this.jumpPositionTime + 0.5f) { this.jumpPositionTime = 0f; this.jumpingPosition = false; if (this.party) { this.animator.enabled = true; } this.ClaimNode(this.node, this.tr.position, false); if (this.party && !this.mainSelected && Links.x.gaia.sceneLoaded && this.makePathAfterJump && Records.x.InCombat(false) && Links.x.main.node != null) { this.setArea = (int)Links.x.main.node.Area; this.MakePath(Links.x.main.node, 3, false, true, true); } this.makePathAfterJump = false; } else { this.TargetReached(); this.ClearPathUpdates(); this.SetPosition(this.jumpPositionVector, null); this.ClaimNode(this.node, this.tr.position, false); if (this.party && this.cc) { this.cc.enabled = false; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; this.cc.enabled = true; this.cc.enabled = false; } } } if (this.party) { bool flag5 = false; if (this.mainSelected && (Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Left")) || Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Right")) || Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Up")) || Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Down")))) { flag5 = true; } if (this.mainSelected && !Input.GetKey(Links.x.gameplay.keyControl.GetHotkey("Commands")) && !this.inAction && !this.turning && !this.jumping && this.slideNode == null && !this.charging && ((Links.x.joy && !Records.x.pocketPause) || (Links.x.pathfind && !Links.x.gameplay.makeCircleMode && Input.GetMouseButton(0) && Links.x.mk && !Links.x.gameplay.ClickingOnInteractable() && !Input.GetMouseButtonDown(0) && (this.waitingForPath == 0 || Links.x.gameplay.holdingMouseButton)) || (Links.x.mk && flag5))) { if (this.stats.Stuck() == 0 && this.stats.Confuse() == 0) { Vector3 one = Vector3.one; Quaternion quaternion = this.rot; bool flag6 = this.physicsMove; this.movingAreas = false; this.physicsMove = Links.x.fellowship.GetDirection(this, out quaternion, out one); if (Links.x.combat.attackingInteractiveOutsideOfCombat && !Records.x.InCombat(false)) { Links.x.hudControl.ToggleAttackTimer(false); Links.x.combat.attackingInteractiveOutsideOfCombat = false; Links.x.combat.npcsInCombat = false; } if (this.physicsMove && (!this.CanPhysicsMove(flag5) || this.sailing || this.jumpingPosition)) { this.ClaimNode(this.node, this.tr.position, false); this.physicsMove = false; } if (this.physicsMove) { if (this.dodging) { this.EndDodge(); } bool flag7 = false; if (Input.GetMouseButton(0) && Links.x.pathfind && Links.x.gameplay.hitInteractable) { flag7 = true; } if (this.stats.Stuck() > 0 || !this.IsSentient() || this.downed || this.dodging || this.body.currentHash == this.body.useHash || this.body.currentHash == this.body.kickHash || ((this.animID == 25 || this.animID == 26) && this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 0.25f) || flag7) { this.physicsMove = false; } if (((Links.x.mk && ((Input.GetMouseButtonDown(0) && Links.x.pathfind) || (flag5 && !flag6))) || (Links.x.joy && this.prevMoveSpeed == Vector3.zero)) && this.stats.Overburdened()) { this.StartQuip("I'm overburdened"); } if (flag5 && Links.x.gameplay.makeCircleMode) { Links.x.gameplay.EndCircleMode(); } } else if (this.turningMain) { this.EndTurning(false); this.turningMain = false; } this.prevMoveSpeed = one; if (this.physicsMove) { if (this.previouslyMovingStartTime == 0f && !flag6) { this.previouslyMovingStartTime = Time.timeSinceLevelLoad; } if (this.previouslyMovingStartTime > 0f && Time.timeSinceLevelLoad > this.previouslyMovingStartTime + 0.05f) { this.previouslyMovingStartTime = 0f; } if (this.waypoint && this.waypoint.transform.position.x != Links.x.gameplay.farPosition.x) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } if (!flag6 && (Links.x.gameplay.holdingMouseButton || flag5)) { this.ClearMoveTargets(); } if ((this.nodePath.Count > 0 || (flag5 && !flag6)) && (Links.x.gameplay.holdingMouseButton || (flag5 && !flag6))) { this.nodePath.Clear(); this.nodeActions.Clear(); this.vectorPath.Clear(); this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.moving = false; this.moveNode = null; this.movePoint = this.vectorZero; this.waitingForNewPath = true; this.waitingForPath = 0; this.waitingForNewPathTime = 0f; this.tempStop = false; this.blockedTime = 0f; } if (!Records.x.pocketPause && Records.x.combat && Links.x.combat.GetNPCCountHostile() == 0 && !Links.x.combat.npcOnlyCombat && this.attackTime >= 1f) { Links.x.combat.EndCombat(false); } if (this.actions && this.actions.hasTarget) { this.actions.ClearSelectedActionRealTime(); } this.groundPoint = this.tr.position; Quaternion quaternion2 = Quaternion.Slerp(this.tr.rotation, quaternion, Time.fixedDeltaTime * 40f); this.rot = quaternion; this.tr.position + quaternion2 * Vector3.forward * 1f; RaycastHit raycastHit4; if (Physics.SphereCast(this.tr.position + quaternion2 * Vector3.forward * 0.5f + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit4, 100f, 4194433)) { this.groundPoint = raycastHit4.point; } else { this.groundPoint = this.tr.position + quaternion2 * Vector3.forward * 0.5f; } if (this.node != null) { this.setArea = (int)this.node.Area; } GraphNode graphNode2 = this.NearNode(this.groundPoint, false, 0, 2, 0); if (!this.sailing) { Vector3 position = this.tr.position; if (Physics.SphereCast(this.tr.position + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit4, 100f, 4194433)) { Vector3 point = raycastHit4.point; } if (Physics.SphereCast(this.tr.position + quaternion2 * Vector3.forward * 1f + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit4, 100f, 4194433)) { this.groundPoint = raycastHit4.point; } } Vector3 vector4 = Vector3.Normalize(this.body.tr.forward); Vector3 vector5 = Vector3.Normalize(this.tr.position + quaternion * Vector3.forward * 5f - this.tr.position); Vector3.Dot(vector4, vector5); bool flag8 = this.moving; float num13 = Quaternion.Angle(quaternion, this.body.tr.rotation); bool flag9 = false; if (flag9 && ((this.turning && num13 > 45f) || (flag9 && this.body.currentHash != this.body.walkEndHash && this.body.currentHash != this.body.combatWalkEndHash && this.body.currentHash != this.body.creepEndHash && num13 > 140f))) { this.turningMain = true; } else { if (this.turningMain) { this.RotateToChild(); this.turningMain = false; } if (this.turning) { this.EndTurning(false); } this.smoothRot = this.tr.rotation; this.rot = this.tr.rotation; } float num14 = 5f; if (!this.turningMain && !this.turning) { this.moving = true; if (this.dodging) { this.EndDodge(); } this.SetAnimatorSpeed(1f); if (this.waitingForPath == 0) { this.sphere.transform.position = this.tr.position; if (graphNode2 != this.node && graphNode2 != null) { this.savedPathTarget = graphNode2; this.ClaimNode(graphNode2, (Vector3)graphNode2.position, false); Links.x.gameplay.CheckTileEffects(this, this.node, false); this.mainMovePoint = (Vector3)graphNode2.position; this.DoFootsteps(); } else { this.ClaimNode(this.node, this.tr.position, false); } } if (Physics.SphereCast(this.groundPoint + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit4, 100f, 4194433)) { this.groundPoint = raycastHit4.point; } if (this.animID != 1) { this.PlayAnimation("Walk", 0f); } if (this.groundPoint != Vector3.zero) { if (!this.cc) { this.AddCC(); } if (!this.cc.enabled) { this.cc.enabled = true; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; } if (!this.playerBorders.enabled) { this.playerBorders.enabled = true; } Collider firstCollider = this.body.GetFirstCollider(); if (firstCollider && firstCollider.enabled) { this.body.SeeThroughColliders(false); } if ((Vector3)this.node.position != this.tr.position) { Vector3 vector6 = Quaternion.LookRotation(this.groundPoint - this.tr.position) * Vector3.forward * num14 * Time.deltaTime; if (Records.x.pocketPause && !this.pocketPaused) { num14 = 8f; } this.physicsY = vector6; if (one == Vector3.zero) { this.physicsY = Vector3.zero; } } if (this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.5f) { this.animator.SetFloat("Walk End", 1f); } else { this.animator.SetFloat("Walk End", 0f); } } } if (flag8 && !this.turningMain) { Quaternion quaternion3 = quaternion2; if (this.tr.position != this.lastFrame) { quaternion3 = Quaternion.LookRotation(this.tr.position - this.lastFrame); } Vector3 eulerAngles = quaternion3.eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; if (this.nodePath.Count > 0) { quaternion3 = Quaternion.Slerp(this.tr.rotation, quaternion2, Time.deltaTime * 50f); } else { quaternion3 = Quaternion.Slerp(this.tr.rotation, quaternion2, Time.deltaTime * 20f); } float num15 = Vector3.Dot(quaternion2 * Vector3.forward, Quaternion.Euler(eulerAngles) * Vector3.forward); LayerMask layerMask = 70400; float num16 = 1f; Vector3 vector7 = new Vector3(0f, 1.25f, 0f); bool flag10 = Physics.Raycast(this.tr.position + vector7 + this.tr.right * 0.5f, quaternion2 * Vector3.forward, num16, layerMask); if (!flag10) { flag10 = Physics.Raycast(this.tr.position + vector7 + this.tr.right * -0.5f, quaternion2 * Vector3.forward, num16, layerMask); } if (!flag10) { flag10 = Physics.Raycast(this.tr.position + vector7, quaternion2 * Vector3.forward, num16, layerMask); } if (this.previouslyMovingStartTime == 0f) { if (this.cc.velocity.magnitude > 0.1f && flag10 && num15 > -0.25f && this.nodePath.Count == 0) { this.tr.rotation = Quaternion.Slerp(this.tr.rotation, Quaternion.Euler(eulerAngles), Time.deltaTime * 10f); } else { this.tr.rotation = quaternion3; } } if (Physics.SphereCast(this.tr.position + this.tr.forward * 2f + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit4, 100f, 4194305)) { Vector3 vector8 = Quaternion.LookRotation(raycastHit4.point - this.tr.position) * Vector3.forward * num14 * Time.deltaTime; this.physicsY = vector8; if (one == Vector3.zero) { this.physicsY = Vector3.zero; } } if (Time.timeSinceLevelLoad > this.lastFrameTime + 0.3f || this.lastFrame == Vector3.zero) { this.lastFrame = this.tr.position; this.lastFrameTime = Time.timeSinceLevelLoad; } } if (!Records.x.InCombat(false) && this.mainSelected) { Character character = null; RaycastHit raycastHit5; if (Physics.Raycast(this.tr.position + new Vector3(0f, 1.5f, 0f), this.tr.forward, out raycastHit5, 1.5f, 64)) { Character character2 = raycastHit5.collider.gameObject.GetComponent(); if (character2) { if (!character2.npc && Links.x.fellowship.NearCompanionNode(character2) && raycastHit5.distance > 4f) { character2 = null; } if (character2 && character2 != character && (!character2.npc || character2.vipFollow) && character2 != this && !character2.isBoro) { character = character2; if (this.party) { this.lookTarget = Links.x.main; } this.Collide(character2, false); } } } float num17 = 4f; if (Records.x.circle) { num17 = 2f; } if (Physics.SphereCast(this.tr.position + new Vector3(0f, 1.5f, 0f), 2f, quaternion * Vector3.forward, out raycastHit5, num17, 64)) { Character character3 = raycastHit5.collider.gameObject.GetComponent(); if (character3) { if (!character3.npc && Links.x.fellowship.NearCompanionNode(character3) && raycastHit5.distance > 4f) { character3 = null; } if (character3 && character3 != character && (!character3.npc || character3.vipFollow) && character3 != this) { if (this.party) { this.lookTarget = Links.x.main; } if (!character3.isBoro) { this.Collide(character3, false); } } } } } this.moveFollow.position = this.tr.position; this.lastRotation = quaternion2; } else if (!Records.x.removeControls && this.IsWalking()) { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.StopMove(); } } else if (this.IsWalking() && this.nodePath.Count == 0) { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.StopMove(); } } else if (this.party) { this.physicsMove = false; if (this.cc && this.cc.enabled && !this.mainSelected) { this.cc.enabled = false; } } } if (Records.x.editor && Input.GetKeyDown(KeyCode.B) && !Records.x.typing) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " ", Records.x.pocketPause.ToString(), " ", this.pocketPaused.ToString(), " ", Records.x.removeControls.ToString(), " ", this.CanMove().ToString(), " ", this.CheckControls().ToString(), " ", Records.x.paused.ToString(), " ", Links.x.combat.inRally.ToString(), " ", this.IsSentient().ToString(), " ", this.isHit.ToString(), " ", this.blockedTime.ToString() })); } bool flag11 = false; if (this.mainSelected && this.actions && this.actions.ai.jumping) { flag11 = true; } if ((!Records.x.pocketPause || (Records.x.pocketPause && this.party && (this.pocketPausedOverride || !this.pocketPaused) && (flag3 || this.isHitFlying || Links.x.combat.inRally || Links.x.combat.inPocketAttack || flag11) && (!this.inAction || this.jumping) && (!this.inRecovery || this.jumping))) && (!this.isHit || this.jumping) && (this.jumping || this.IsSentient()) && !Records.x.paused && !this.physicsMove && !this.inactive) { if (this.waitingForPath == 3 && Time.timeSinceLevelLoad > this.waitForPathTime + 0.5f && !this.jumping) { this.DoPath(false); this.waitForPathTime = Time.timeSinceLevelLoad; } if (this.CanMove() && !this.jumpingAreas) { bool flag12 = this.AllTilesFree(this.moveNode, false); if (this.mainSelected) { this.playerBorders.enabled = true; } if (this.jumping) { flag12 = true; } if (!flag12) { if (this.NodeBlocked(this.moveNode, null)) { flag12 = true; } if (this.fleeing && this.hostility == 1) { flag12 = true; } if (this.jumping && this.ignoreRemoveControls) { flag12 = true; } if (this.jumping) { flag12 = true; } if (this.sailing && this.boatNavigator && this.boat.turning) { flag12 = true; } if (this.ghostVanishing || this.ambushing) { flag12 = true; } if (Records.x.pocketPause && this.pocketPausedOverride && this.party) { flag12 = true; } } if (this.blockedTime > 0f && flag12) { this.tempStop = false; this.blocked = false; this.blockedTime = 0f; this.animID = 0; if (Records.x.astarDebugging) { Debug.Log("Remove blocked time " + ((this != null) ? this.ToString() : null)); } } else if (this.blockedTime > 0.2f && !flag12 && !this.jumping) { if (!this.boatNavigator) { this.SetIdle(true); } this.SetAnimatorSpeed(1f); } if (Records.x.editor && Input.GetKeyDown(KeyCode.B)) { string[] array = new string[7]; array[0] = ((this != null) ? this.ToString() : null); array[1] = " "; array[2] = flag12.ToString(); array[3] = " "; int num18 = 4; GraphNode graphNode3 = this.moveNode; array[num18] = ((graphNode3 != null) ? graphNode3.ToString() : null); array[5] = " "; array[6] = this.AllTilesFree(this.moveNode, false).ToString(); Debug.Log(string.Concat(array)); } if (this.moveBackward) { if (!this.moveBackTarget) { this.animator.SetBool("Backward", false); this.moveBackward = false; } else if (!this.animator.GetBool("Backward")) { this.animator.SetBool("Backward", true); } } else if (this.moveBackTarget) { this.animator.SetBool("Backward", true); this.moveBackward = true; } if (flag12 && (this.moveNode != null || (this.jumping && this.mainSelected))) { this.moving = true; if (this.dodging && !this.evading) { this.EndDodge(); } if (this.waitingForNewPath && Time.timeSinceLevelLoad > this.waitingForNewPathTime + 2f) { this.waitingForNewPath = false; } if (this.boatNavigator) { if (this.boat.node != this.moveNode && !this.boat.turning) { this.SetMoveNode(); } } else if (this.node != this.moveNode && this.moveNode != null) { this.SetMoveNode(); } this.SetAnimatorSpeed(1f); float num19 = (this.animator.deltaPosition / Time.deltaTime).magnitude * Time.deltaTime; this.moveFollowTime += num19; Transform transform = this.tr; Transform transform2 = this.moveFollow; if (this.boatNavigator) { transform = this.boat.tr; transform2 = this.boat.moveFollow; } this.totalDist = Vector3.Distance(transform.position, this.movePoint); this.totalDistNodes = Vector3.Distance(transform2.position, this.movePoint); float num20 = this.totalDistNodes / this.totalDist; int shortNameHash = this.body.stateInfo.shortNameHash; if ((shortNameHash == this.body.walkHash || shortNameHash == this.body.walkStartHash || shortNameHash == this.body.walkEndHash || shortNameHash == this.body.combatWalkHash || shortNameHash == this.body.walkPartyHash || shortNameHash == this.body.combatWalkStartHash || shortNameHash == this.body.combatWalkEndHash || shortNameHash == this.body.creepHash || shortNameHash == this.body.creepStartHash || shortNameHash == this.body.runStartHash || shortNameHash == this.body.runHash || shortNameHash == this.body.runEndHash || shortNameHash == this.body.walkBackHash || shortNameHash == this.body.walkBackStartHash || shortNameHash == this.body.walkBackEndHash) && !float.IsNaN(num19)) { Vector3 vector9 = Vector3.MoveTowards(transform2.position, new Vector3(this.movePoint.x, transform.position.y, this.movePoint.z), num19 * num20); this.SetMoveFollowPosition(vector9); } float sqrMagnitude4 = (transform.position - new Vector3(this.movePoint.x, transform.position.y, this.movePoint.z)).sqrMagnitude; float sqrMagnitude5 = (transform2.position - new Vector3(this.movePoint.x, transform2.position.y, this.movePoint.z)).sqrMagnitude; if (float.IsNaN(num19)) { this.SetAnimatorSpeed(1E-06f); } else { this.SetAnimatorSpeed(1f); if (this.jumping && !this.charging) { this.Jumping(); } else if (this.boatNavigator && this.sailing) { this.boat.movePoint = this.movePoint; if (this.boat.closeToPoint && !this.boat.turning) { this.TurnExit(); } } else if (this.nodePath.Count <= 1 && (this.npc || this.mainSelected || this.hasActions)) { float num21 = 2.5f; Vector3 vector10 = Vector3.MoveTowards(transform.position, this.movePoint, num19); this.SetPosition(vector10, null); if ((transform.position.x == this.movePoint.x && transform.position.z == this.movePoint.z) || sqrMagnitude4 < 0.0625f || sqrMagnitude4 > this.totalDist * num21 * (this.totalDist * num21) || sqrMagnitude5 > this.totalDist * num21 * (this.totalDist * num21)) { if (this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.5f) { this.animator.SetFloat("Walk End", 1f); } else { this.animator.SetFloat("Walk End", 0f); } if (this.charging) { this.jumping = false; } this.TurnExit(); } else { if ((this.animID != this.moveAnimID || (Random.Range(0, 10) == 0 && !this.IsWalking())) && this.animID != 23 && !this.boatNavigator) { this.PlayAnimation("Walk", 0f); } if (sqrMagnitude4 <= 0.040000003f) { this.turningComplete = true; } if (sqrMagnitude4 > 0.040000003f && !this.turningComplete) { if (!this.boatNavigator) { this.GetLook(false); } if (this.usingKeys) { if (sqrMagnitude5 > 0.01f) { this.SetRotation(this.look, false, false); } } else { this.SetRotation(this.look, false, false); } } } } else { if ((this.animID != this.moveAnimID || (Random.Range(0, 10) == 0 && !this.IsWalking())) && this.animID != 23) { this.PlayAnimation("Walk", 0f); } if (sqrMagnitude4 <= 0.040000003f) { this.turningComplete = true; } if (sqrMagnitude4 > 0.040000003f && !this.turningComplete) { this.GetLook(this.mainSelected); if (this.animID == this.moveAnimID) { this.SetRotation(this.look, false, false); } } if ((transform2.position.x == this.movePoint.x && transform2.position.z == this.movePoint.z) || sqrMagnitude5 < 0.010000001f || sqrMagnitude4 > this.totalDist * 1.5f * (this.totalDist * 1.5f) || sqrMagnitude5 > this.totalDist * 1.5f * (this.totalDist * 1.5f)) { this.TurnExit(); } } } } } else { if (this.moving) { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; } this.moving = false; if (!this.turning && (this.IsWalking() || this.IsMoveAnim()) && !this.dead && !this.stunned && ((this.waitingForNewPath && this.animator.speed > 0.1f && this.NodesCount() == 0) || !this.waitingForNewPath) && this.waitingForPath == 0 && this.slideNode == null && !this.jumpingAreas) { if (!this.boatNavigator) { this.SetIdle(true); } this.waitingForNewPath = false; } if (this.waitingForNewPath && !this.turning && this.slideNode == null && !this.jumpingAreas) { if (Time.timeSinceLevelLoad > this.waitingForNewPathTime + 0.2f && this.waitingForNewPathTime > 0f) { if (!this.boatNavigator) { this.SetIdle(true); } this.SetAnimatorSpeed(1f); this.waitingForNewPath = false; this.waitingForNewPathTime = 0f; } else if (this.IsWalking()) { this.SetAnimatorSpeed(0.0001f); } } if (this.waitForPathToCharacter && ((Records.x.turnBased && !this.doingAction) || !Records.x.turnBased) && this.slideNode == null) { if (this.inCombat && !this.CanChooseActions()) { this.ClearMoveTargets(); this.waitForPathToCharacter = false; } if (this.followingType != "") { if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " prepping path from wait, delayPathCoroutine in use"); } bool flag13 = Links.x.gameplay.CanScatterPartyToMakePath(this.followingType); if (this.npc || this.hasActions) { flag13 = false; } this.StartGetPathToTarget(this.followingNode, this.followingCharacter, this.followingItem, this.followingBreakable, this.followingChest, this.followingDoor, this.followingInteractive, this.followingBoat, this, this.followingExit, flag13, false, false, this.followingType, false); this.waitForPathToCharacter = false; } } if (this.returnToPointTime > 0f && this.slideNode == null && this.body.currentHash == this.body.idleHash && Time.timeSinceLevelLoad > this.returnToPointTime + 2f && Time.timeSinceLevelLoad < this.returnToPointTime + 6f) { this.MakePath(this.returnToPoint, 20, false, false, false); this.returnToPoint = null; this.returnToPointTime = 0f; } if (this.animID == 1 && !this.IsWalking() && (this.body.currentHash == this.body.idleHash || this.body.currentHash == this.body.combatIdleHash)) { this.animID = 0; } } } else { if (!this.physicsMove) { if (this.moving) { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; } this.moving = false; this.waitingForNewPath = false; if (this.IsWalking() && !this.dead && !this.stunned && !this.waitingForNewPath && !this.turning && !this.boatNavigator) { this.SetIdle(true); } } if (!this.moving && this.movePoint == Vector3.zero && this.IsWalking()) { this.SetIdle(true); } } if (this.justMoved && Time.timeSinceLevelLoad > this.timeSinceLastMove + 0.5f) { this.justMoved = false; } if (this.pickupTime > 0f && Time.timeSinceLevelLoad > this.pickupTime + 5f) { this.pickupTime = 0f; } if (this.party && this.mapIcon) { this.mapIcon.transform.position = this.tr.position; } if (!this.moving && this.node != null && !this.turning && this.slideNode == null && !this.sailing && !Records.x.paused && this.moveFollow) { float sqrMagnitude6 = (this.moveFollow.position - this.NodePosition()).sqrMagnitude; float sqrMagnitude7 = (this.tr.position - this.NodePosition()).sqrMagnitude; if (sqrMagnitude6 > 0.25f && sqrMagnitude6 < 100f && sqrMagnitude7 < 4f) { this.SetMoveFollowPosition(Vector3.Lerp(this.moveFollow.position, this.NodePosition(), Time.deltaTime * 8f)); } } if (this.sailing) { Vector3 position2 = this.tr.position; position2.y = this.nodePoint.y; this.SetMoveFollowPosition(Vector3.Lerp(this.moveFollow.position, position2, Time.deltaTime * 8f)); } if (this.usingCircles && this.circleTr) { if (this.sailing) { this.circleTr.position = Vector3.Lerp(this.circleTr.position, this.AddVectorY(this.tr.position, 0.05f), Time.deltaTime * 40f); } else { this.circleTr.position = Vector3.Lerp(this.circleTr.position, this.AddVectorY(this.moveFollow.position, 0.05f), Time.deltaTime * 40f); } } RaycastHit raycastHit6; if (Physics.Raycast(this.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit6, 6f, 4194449)) { Vector3 normal = raycastHit6.normal; normal.y = Mathf.Clamp(normal.y, 0.97f, 1f); this.circleRot = Quaternion.FromToRotation(Vector3.up, normal); if (this.usingCircles) { this.circleTr.rotation = Quaternion.Slerp(this.circleTr.rotation, this.circleRot, Time.deltaTime * 10f); } if (this.party || this.visible == 1) { bool flag14 = false; if (this.hasActions && this.actions.ai && (this.actions.ai.busy || this.actions.ai.jumping)) { flag14 = true; } if (!this.moving && !this.physicsMove && !this.sailing && !this.jumpingAreas && !this.pocketPaused && !this.body.IsHit() && !this.jumping && !flag14 && !this.sailing && !this.movesOnWater) { float num22 = Mathf.Abs(this.tr.position.y - raycastHit6.point.y); if (num22 > 0.25f && num22 < 10f) { this.SetPosition(Vector3.Lerp(this.tr.position, new Vector3(this.tr.position.x, raycastHit6.point.y, this.tr.position.z), Time.deltaTime * 25f), null); } } } if (!this.jumping && !this.jumpingAreas) { this.useGrounder = true; if ((normal.y < 0.95f || this.mainSelected) && !this.body.grounderOn) { this.body.SetGrounderState(true); } if (!this.sailing) { this.terrainNormal = raycastHit6.normal; } } else if (this.jumping) { this.useGrounder = false; if (this.body.grounderOn) { this.body.SetGrounderState(false); } } } if (this.dodging) { if (this.moving || this.physicsMove || this.downed || this.stunned || this.sleeping || this.dead || this.inAction || this.inRecovery || this.inQueuedAbility || this.fleeing) { this.EndDodge(); } if (!this.mainSelected && Links.x.gameplay.seconds > this.blockDodgeStartTime + 17f) { this.EndDodge(); if (this.actions && !this.inAction && !this.inRecovery && !this.inQueuedAbility && this.timelineIcon && this.timelineIcon.Nothing() && !this.actions.ai.findingAction) { Links.x.combat.GetNextAction(this); } } } if (this.mainSelected) { Links.x.partyColliderAdventure.ToggleDefend(); bool flag15 = false; if (Links.x.mk && Input.GetKeyDown(Links.x.gameplay.keyControl.GetHotkey("DodgePathfind"))) { flag15 = true; } if (Links.x.joy && !Links.x.gameplay.badgeScrolling && Links.x.gameplay.targetDodgeStart) { flag15 = true; } if (Records.x.typing || Records.x.removeControls) { flag15 = false; } if (flag15 && !this.evading && this.stats.stamina >= 10f && this.CanDefend() && !Links.x.combat.inPocketAttack && !Records.x.typing && this.slideNode == null && !this.stats.pinned && !this.stats.pinning && this.stats.Stuck() == 0) { if (!this.sailing && (!this.inCircle || (this.inCircle && !this.hasCircleBuff))) { Vector3 vector11 = this.currentPosition + Quaternion.LookRotation(this.currentPosition - Links.x.gameplay.mousePoint) * Vector3.forward * 2.5f * 1f; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.constrainTags = true; this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.checkCircleID = this.CheckCircleID(); this.nodeConstraint.checkConnections = this.ConnectionNumber(); this.nodeConstraint.constrainToArea = (int)this.node.Area; int num23 = 0; if (this.party) { num23 = 2; } GraphNode graphNode4 = this.GetSlideNode(vector11, this.node, false, this.CheckCircleID(), num23); if (graphNode4 == null) { graphNode4 = this.node; } this.look = Quaternion.LookRotation(this.tr.position - Links.x.gameplay.mousePoint); if (Physics.Raycast(this.torsoPosition, this.look * Vector3.forward, 2f, Links.x.allObstacles)) { graphNode4 = null; } if (graphNode4 != null && this.stats.Stuck() == 0 && !this.jumping) { if (Records.x.pocketPause) { Links.x.gameplay.PocketPause(false); } if (this.dodging) { this.EndDodge(); } if (this.moving) { this.ClearNodePath(); } this.Jump(graphNode4, (Vector3)graphNode4.position, true, false); this.evading = true; this.stats.AddStamina(-10f); this.blockDodgeStartTime = Links.x.gameplay.seconds; } } if (!this.evading) { if (this.dodgeFX) { Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX.SetActive(false); this.dodgeFX = null; this.waitToNextDodge = 0f; } if (Records.x.pocketPause) { Links.x.gameplay.PocketPause(false); } this.animator.SetBool("DefendDone", false); this.justMoved = false; this.dodging = true; this.stats.AddStamina(-10f); this.PlayAnimation("Defend", 0f); this.animator.SetBool("Dodging", true); this.blockDodgeStartTime = Links.x.gameplay.seconds; MasterAudio.PlaySound3DAtVector3AndForget("Main Dodge", this.tr.position, Random.Range(0.4f, 0.5f), new float?(Random.Range(0.8f, 1f)), 0f, "", null); if (!this.dodgeFX) { this.dodgeFX = Links.x.cellar.GetPooledGameObject(91); this.dodgeFX.transform.position = this.tr.position + new Vector3(0f, 0.2f, 0f); this.dodgeFX.SetActive(true); } this.dodgeFX.transform.GetChild(0).gameObject.GetComponent().enabled = true; this.dodgeFX.transform.GetChild(0).gameObject.GetComponent().Play("DodgeStart", -1, 0f); this.alwaysTurn = true; this.SetRotation(Quaternion.LookRotation(Links.x.gameplay.mousePoint - this.tr.position), false, false); } } else if (flag15) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(86); pooledGameObject.transform.position = this.body.HeadPosition(0.5f); pooledGameObject.SetActive(true); MasterAudio.PlaySound3DAtVector3AndForget("Skills", this.tr.position, Random.Range(0.8f, 0.9f), new float?(Random.Range(0.8f, 1f)), 0f, "Fail", null); } if (this.dodging && Links.x.gameplay.seconds > this.blockDodgeStartTime + 7f) { if (Links.x.gameplay.seconds < this.blockDodgeStartTime + 12f) { this.dodgeFX.transform.GetChild(0).gameObject.GetComponent().Play("DodgeOut"); } else { this.EndDodge(); this.waitToNextDodge = 0f; } } if ((this.evading || !this.dodging) && Time.timeSinceLevelLoad > this.waitToNextDodge && this.waitToNextDodge > 0f) { if (this.dodgeFX) { Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX.SetActive(false); this.dodgeFX = null; } this.waitToNextDodge = 0f; } } bool flag16 = false; if ((!this.npc || (this.npc && this.inCircle)) && ((this.inCircle && !this.npc && !this.mainSelected) || (this.inCircle && this.npc))) { int num24 = 0; if (this.hasActions) { num24 = this.actions.TargetCount() + this.actions.SpellCount(); } if (this.actions && this.actions.ai) { if (this.actions.ai.findingAction) { flag16 = true; } if (this.actions.ai.busy) { flag16 = true; } } if (!this.stats.pinned && !this.stats.pinning && num24 == 0 && !this.jumping && this.IsSentient() && !this.inAction && !this.charging && !this.fleeing && !this.physicsMove && !flag16 && this.waitingForPath == 0 && !this.moving && this.NodesCount() == 0 && this.stats.Confuse() == 0 && (this.timeSinceLastDirectiveCheck == 0f || Links.x.gameplay.seconds > this.timeSinceLastDirectiveCheck + 20f) && !Links.x.combat.inPocketAttack) { GraphNode graphNode5 = this.commandMove; bool flag17 = false; if (this.commandMove != null) { graphNode5 = this.commandMove; float sqrMagnitude8 = ((Vector3)graphNode5.position - this.currentPosition).sqrMagnitude; float sqrMagnitude9 = ((Vector3)graphNode5.position - Links.x.main.tr.position).sqrMagnitude; if (sqrMagnitude8 < 9f || sqrMagnitude9 > 1600f) { this.commandMove = null; this.timeSinceLastDirectiveCheck = 0f; } else if (!this.mainSelected) { flag17 = true; } } if (this.inCircle && this.commandMove == null && !this.npc && !this.mainSelected) { graphNode5 = Links.x.fellowship.GetFormationPointInCircle(this); if (graphNode5 != null && graphNode5 != this.node) { flag17 = true; } } if (this.inCircle && this.npc && !this.group.InFormationMovement(this) && !this.group.inSwarmWait && !this.group.inSwarm) { graphNode5 = this.group.GetFormationPointInCircle(this, false); if (graphNode5 != null && graphNode5 != this.node) { flag17 = true; } else if (this.group.defensive) { this.ignoreNodeIDs = false; } } if (flag17) { this.timeSinceLastDirectiveCheck = Links.x.gameplay.seconds; this.ClearPathUpdates(); this.ClearCurrentPathNodes(); if (this.dodging) { this.EndDodge(); } this.pathTargPosition = (Vector3)graphNode5.position; if (this.npc) { this.group.JoinCirclePath(graphNode5, this); } else { this.MakePath(graphNode5, 500, false, false, true); } flag16 = true; } else { this.timeSinceLastDirectiveCheck = 0f; if (this.inCircle && !this.hasActions && !this.npc) { if (this.GetRotationAngle(Links.x.gameplay.circleRotation, this.rot) > 60f) { this.SetRotation(Links.x.gameplay.circleRotation, true, false); } } else if (this.npc && !this.group.inFormationMovement && !this.group.inSwarm && this.GetRotationAngle(this.group.targetRotation, this.rot) > 40f) { this.SetRotation(this.group.targetRotation, true, false); } } } } if (this.hasActions && !this.mainSelected) { if (this.actions && this.actions.ai) { if (this.actions.ai.findingAction) { flag16 = true; } if (this.actions.ai.busy || this.actions.spellWaveFX) { flag16 = true; } } bool flag18 = true; if (!this.stats.pinned && !this.stats.pinning && this.IsSentient() && !this.inAction && !this.inRecovery && !this.charging && !this.inQueuedAbility && !this.isHit && (flag3 || !Records.x.pocketPause) && (!this.turning || (this.turning && this.party)) && !this.fleeing && (!this.stats.animal || (this.stats.animal && this.stats.canJumpEvade)) && !flag16 && this.NodesCount() == 0 && !this.evading && !this.jumping && flag18 && this.stats.stamina >= 10f && !Links.x.combat.inPocketAttack && this.slideNode == null) { int num25 = 0; if (this.combatLevel == 0) { num25 = 1; } if (this.combatLevel == 1) { num25 = 1; } if (this.combatLevel == 2) { num25 = Random.Range(0, 12); } if (this.combatLevel == 3) { num25 = Random.Range(0, 8); } if (this.combatLevel == 4) { num25 = Random.Range(0, 5); } if (this.combatLevel == 5 || this.stats.canJumpEvade) { num25 = Random.Range(0, 3); } if (this.combatLevel >= 6) { num25 = Random.Range(0, 2); } if (this.party || (!this.party && num25 == 0) || this.stats.canJumpEvade) { bool flag19 = false; Character character4 = this.actions.AttackInBound(out flag19); if (this.party && (this.tr.position - Links.x.main.tr.position).sqrMagnitude > 900f) { character4 = null; if (this.dodging && this.actions.TargetCount() == 0 && this.actions.SpellCount() == 0 && !this.moving) { this.actions.ai.MovetoMain(); } if (this.dodging) { this.EndDodge(); } } if (!this.sailing) { bool flag20 = true; Vector3 vector12 = this.actions.ai.SpecialAttackInBound(out flag19); if (vector12 == Vector3.zero) { flag20 = false; if (character4) { vector12 = character4.currentPosition; } } if (vector12 != Vector3.zero && this.currentPosition != vector12 && ((flag20 && Links.x.gameplay.seconds > this.timeSinceLastEvade + 5f) || this.timeSinceLastEvade == 0f || Links.x.gameplay.seconds > this.timeSinceLastEvade + 5f)) { Quaternion quaternion4 = Quaternion.LookRotation(this.currentPosition - vector12); float num26 = -1f; Vector3 vector13 = this.currentPosition + quaternion4 * Vector3.forward * 2.5f * 1f; if (flag19) { if (Random.Range(0, 2) == 0) { num26 = 1f; } vector13 += quaternion4 * Vector3.right * num26 * 2.5f; } this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.constrainTags = true; this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.checkConnections = this.ConnectionNumber(); this.nodeConstraint.constrainToArea = (int)this.node.Area; this.nodeConstraint.checkCircleID = this.CheckCircleID(); GraphNode graphNode6 = this.GetSlideNode(vector13, this.node, true, this.CheckCircleID(), 2); if (this.inCircle && graphNode6 != null) { if (this.npc) { if (!this.group.InCircle((Vector3)graphNode6.position, true, false, null)) { graphNode6 = null; } } else if (!Links.x.fellowship.InCircle((Vector3)graphNode6.position, true)) { graphNode6 = null; } } if (graphNode6 == null && flag19) { vector13 += quaternion4 * Vector3.right * num26 * -5f; graphNode6 = this.GetSlideNode(vector13, this.node, true, this.CheckCircleID(), 2); } if (graphNode6 != null && this.stats.Stuck() == 0) { float sqrMagnitude10 = ((Vector3)graphNode6.position - this.currentPosition).sqrMagnitude; if (sqrMagnitude10 < 40f && sqrMagnitude10 > 0.25f && PathUtilities.IsPathPossible(graphNode6, this.node)) { this.timeSinceLastEvade = Links.x.gameplay.seconds; if (this.dodging) { this.EndDodge(); } if (this.moving) { this.ClearNodePath(); } this.stats.AddStamina(-10f); this.blockDodgeStartTime = Links.x.gameplay.seconds; this.Jump(graphNode6, (Vector3)graphNode6.position, true, false); } } } } if (character4 && !this.evading && (!this.dodging || (this.dodging && Links.x.gameplay.seconds > this.blockDodgeStartTime + 10f)) && !this.stats.animal) { this.Dodge(); this.stats.AddStamina(-10f); this.actions.ai.StopLookingForAction(); } if (this.dodging && character4) { if ((this.blockDodgeStartTime == Links.x.gameplay.seconds || Links.x.gameplay.seconds > this.blockDodgeStartTime + 7f) && !this.Pivoting() && Random.Range(0, 5) == 0) { if (this.actions) { this.actions.ai.TurnToEnemy(false, character4); } else { this.alwaysTurn = true; this.SetRotation(Quaternion.LookRotation(character4.tr.position - this.tr.position), true, false); } } } else if (this.party && this.attackTime < 0.25f && !this.Pivoting() && !this.turning && Random.Range(0, 5) == 0) { character4 = this.actions.ai.EnemyToGuardFrom(); if (character4) { this.alwaysTurn = true; this.SetRotation(Quaternion.LookRotation(character4.tr.position - this.tr.position), true, false); } } } } } if (this.dodging || this.mainSelected) { if (this.dodging && this.party && this.hasActions && this.stats.formationGroup >= 7 && !this.mainSelected && this.actions && !this.inAction && !this.inRecovery && !this.inQueuedAbility && this.timelineIcon && this.timelineIcon.Nothing() && this.actions && this.actions.ai && !this.actions.ai.IsPointAwayFromEnemies(this.tr.position, false, false)) { this.EndDodge(); if (!this.actions.ai.findingAction) { Links.x.combat.GetNextAction(this); } } if (this.dodgeFX) { this.dodgeFX.transform.position = this.tr.position + new Vector3(0f, 0.2f, 0f); RaycastHit raycastHit7; if (Physics.Raycast(this.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit7, 6f, 4194449)) { Vector3 normal2 = raycastHit7.normal; normal2.y = Mathf.Clamp(normal2.y, 0.97f, 1f); this.circleRot = Quaternion.FromToRotation(Vector3.up, normal2); this.dodgeFX.transform.rotation = Quaternion.Slerp(this.dodgeFX.transform.rotation, this.circleRot, Time.deltaTime * 10f); } } } if (!this.hasActions) { this.inCombat = false; } this.torsoPosition = this.tr.position; if (this.sleeping || this.downed || this.stunned) { this.torsoPosition.y = this.torsoPosition.y + 0.5f; } else { this.torsoPosition.y = this.torsoPosition.y + (this.characterHeight - 0.5f); } this.raycastPosition = this.tr.position; this.raycastPosition.y = this.raycastPosition.y + 3f; if (this.grassInteraction) { this.grassInteraction.position = this.tr.position; } if (this.startTurnExit) { this.startTurnExit = false; this.TurnExit(); } } if (this.tr) { this.currentPosition = this.tr.position; if (this.movesOnWater && this.waterColliderRigidbody) { this.waterColliderRigidbody.position = this.currentPosition; } } if (Records.x.editor && Records.x.testQuests) { if (this.stats.dead && !this.dead) { this.stats.dead = false; this.stats.SetHealth(0, false); this.body.StartDead(Vector3.up); this.Dead(false, true, false); } if (this.stats.stunned && !this.stunned) { this.stats.stunned = false; this.stats.SetHealth(0, false); this.Stunned(false); } } } // Token: 0x060002F1 RID: 753 RVA: 0x000404E8 File Offset: 0x0003E6E8 private void Dodge() { this.animator.SetBool("DefendDone", false); this.animator.SetBool("Dodging", true); if (this.moving) { this.TargetReached(); } this.PlayAnimation("Defend", 0f); if (!this.dodging) { this.blockDodgeStartTime = Links.x.gameplay.seconds; if (this.hasActions) { this.actions.ai.SkipFromDodge(); } } if (!this.dodgeFX) { this.dodgeFX = Links.x.cellar.GetPooledGameObject(91); this.dodgeFX.transform.position = this.tr.position + new Vector3(0f, 0.2f, 0f); this.dodgeFX.SetActive(true); this.dodgeFX.transform.rotation = this.circleRot; } this.dodging = true; } // Token: 0x060002F2 RID: 754 RVA: 0x000405EC File Offset: 0x0003E7EC public void UpdatePositions() { this.PositionEffects(); if (this.npc && this.hasActions) { this.SetStaminaBarPosition(); } if (this.party && this.dead && this.revivalGem) { this.SetRevivalGemPosition(); } if (!this.npc) { this.SetSelectedPosition(); } if (this.charmed) { this.SetHeartPosition(); } if (this.seen) { if (Time.timeSinceLevelLoad > this.seenTime + 2f && !Records.x.pocketPause) { this.seenTime = 0f; this.seen.SetActive(false); Links.x.cellar.ReturnPooledGameObject(23, this.seen); this.seen = null; } else { this.SetSeenPosition(); } } if (this.heard) { this.SetHeardPosition(); } } // Token: 0x060002F3 RID: 755 RVA: 0x000406D0 File Offset: 0x0003E8D0 public void WorldUI() { if (!Links.x.gaia.sceneLoaded || this.inactive) { this.SetActiveStateWorldUI(this.visible); return; } if (this.party && this.hasActions && this == Links.x.pocketWheel.selectedRallyCharacter && Links.x.combat.inPocketAttack) { this.SetActiveStateWorldUI(this.visible); return; } if (this.visible == 0) { this.SetActiveStateWorldUI(this.visible); return; } if (this.worldUIFade == null) { this.worldUIFade = this.WorldUIFade(); base.StartCoroutine(this.worldUIFade); } } // Token: 0x060002F4 RID: 756 RVA: 0x0004077E File Offset: 0x0003E97E private IEnumerator WorldUIFade() { yield return new WaitForSeconds(0.001f); while (this.body.dithering) { yield return null; } this.SetActiveStateWorldUI(this.visible); this.worldUIFade = null; yield break; } // Token: 0x060002F5 RID: 757 RVA: 0x00040790 File Offset: 0x0003E990 public void SetActiveStateWorldUI(int vis) { if (vis == 1) { if (this.seen) { this.seen.SetActive(true); } if (this.heard) { this.heard.SetActive(true); } if (this.stamina) { this.stamina.Activate(); } if (this.statusRing) { this.statusRing.gameObject.SetActive(true); } for (int i = 0; i < this.headEffects.Count; i++) { if (this.headEffects[i]) { this.headEffects[i].SetActive(true); } } if (this.hasActions && this.actions.chargeUpFX) { this.actions.chargeUpFX.SetActive(true); return; } } else { if (this.seen) { this.seen.SetActive(false); } if (this.heard) { this.heard.SetActive(false); } if (this.stamina) { this.stamina.Deactivate(); } if (this.statusRing) { this.statusRing.gameObject.SetActive(false); } for (int j = 0; j < this.headEffects.Count; j++) { if (this.headEffects[j]) { this.headEffects[j].SetActive(false); } } if (this.hasActions && this.actions.chargeUpFX) { this.actions.chargeUpFX.SetActive(false); } } } // Token: 0x060002F6 RID: 758 RVA: 0x00040948 File Offset: 0x0003EB48 private void Jumping() { if (this.jumpLanding) { if (this.moveNode != null) { this.SetMoveFollowPosition((Vector3)this.moveNode.position); } this.jumping = false; if (!this.InAttack() && this.IsSentient()) { this.PlayAnimation("Idle", Random.Range(0f, 1f)); } if (this.evading && !this.mainSelected && this.actions && this.actions.ai) { this.moving = true; this.Dodge(); if (this.actions) { this.actions.ai.TurnToEnemy(true, null); } } this.StopEvading(); if (!this.dodging) { this.TurnExit(); return; } } else { if (this.currentArcIndex >= 0 && this.currentArcIndex < this.arcPoints.Count) { if (this.mainSelected && this.evading && !Links.x.combat.miniEvent) { if (Links.x.mk && Input.GetKeyUp(Links.x.gameplay.keyControl.GetHotkey("DodgePathfind"))) { this.needToEndJump = true; } if (Links.x.joy && (Links.x.gameplay.targetDodgeUp || Links.x.gameplay.gameFeedScrolling)) { this.needToEndJump = true; } if (Links.x.combat.miniEvent) { this.needToEndJump = true; } this.slideNode = null; this.slideNodePosition = Vector3.zero; if (!this.cc.enabled) { this.cc.enabled = true; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; } if (!this.playerBorders.enabled) { this.playerBorders.enabled = true; } if (this.currentArcIndex == 1) { this.needToEndJump = false; this.look = Quaternion.LookRotation(Links.x.gameplay.mousePoint - this.tr.position); this.SetRotation(Quaternion.LookRotation(Links.x.gameplay.mousePoint - this.tr.position), false, true); this.jumpSpeed = 50f; this.currentArcIndex = 2; this.jumpTime = Links.x.gameplay.seconds; } RaycastHit raycastHit; if (Physics.SphereCast(this.tr.position + new Vector3(0f, 10f, 0f), 0.25f, -1f * this.upVector, out raycastHit, 100f, 4194433)) { this.groundPoint = raycastHit.point; } else { this.groundPoint = this.tr.position; } if (this.needToEndJump) { this.jumpSpeed -= Time.deltaTime * 500f; } else { this.jumpSpeed -= Time.deltaTime * 130f; } Vector3 vector = this.look * Vector3.forward * this.jumpSpeed * Time.deltaTime; if (this.groundPoint.y < this.tr.position.y) { vector.y -= 2f; } this.cc.Move(vector); if (this.node != null) { this.setArea = (int)this.node.Area; } GraphNode graphNode = this.NearNode(this.groundPoint, false, 0, 2, 0); this.sphere.transform.position = this.tr.position; if (graphNode != this.node && graphNode != null) { this.savedPathTarget = graphNode; this.ClaimNode(graphNode, (Vector3)graphNode.position, false); Links.x.gameplay.CheckTileEffects(this, this.node, false); } this.prevNodePosition = this.tr.position; if (this.jumpSpeed > 8f) { bool flag = this.needToEndJump; } if (this.jumpSpeed <= 0f) { this.jumping = false; this.jumpLanding = false; this.jumpSpeed = 0f; this.StopEvading(); if (!this.InAttack() && this.IsSentient()) { this.PlayAnimation("Idle", Random.Range(0f, 1f)); } if (!Links.x.combat.miniEvent) { this.TurnExit(); } this.SetMoveFollowPosition(this.currentPosition); } } else { Vector3 vector2 = this.arcPoints[this.currentArcIndex]; bool flag2 = false; if (this.hasActions && !this.ambushing && this.npc && this.actions && this.actions.ai.jumping) { flag2 = true; } float num = Vector3.Distance(this.topJumpPoint, this.tr.position); if (num > 2f) { num = 2f; } num *= 0.5f; num = 1f - num; float num2 = 2.5f * Time.deltaTime * 10f; if (flag2) { num2 = (5f - num) * Time.deltaTime * 10f; } if (this.isHitFlying) { num *= 3f; num2 = (5f - num) * Time.deltaTime * 10f; } Transform transform = this.tr; Vector3 vector3 = Vector3.MoveTowards(transform.position, vector2, num2); this.SetPosition(vector3, null); if (this.body.stateInfo.shortNameHash == this.body.jumpLoopHash) { this.SetMoveFollowPosition(vector2); } this.slideNode = null; this.slideNodePosition = Vector3.zero; float sqrMagnitude = (transform.position - vector2).sqrMagnitude; if (this.isHitFlying) { int count = this.arcPoints.Count; if (this.currentArcIndex < 1) { this.SetRotation(Quaternion.LookRotation(this.movePoint - this.prevPoint), false, false); } if (this.currentArcIndex > count - 3) { this.SetRotation(Quaternion.LookRotation(this.movePoint - this.prevPoint), false, false); this.body.tr.rotation = Quaternion.Slerp(this.body.tr.rotation, Quaternion.Euler(Vector3.zero), Time.deltaTime * 40f); } if (this.currentArcIndex <= count - 3 && this.currentArcIndex >= 1) { this.tr.Rotate(this.randomRot * 20f * Time.deltaTime); this.rot = this.tr.rotation; this.smoothRot = this.tr.rotation; } } if (sqrMagnitude < 0.0001f || (this.currentArcIndex == this.arcPoints.Count - 1 && sqrMagnitude < 0.010000001f) || Links.x.gameplay.seconds > this.jumpTime + 80f) { this.currentArcIndex++; if (this.evading) { if (this.currentArcIndex < this.arcPoints.Count + 4) { this.currentArcIndex += 3; } else { this.currentArcIndex = this.arcPoints.Count - 1; } } if (this.currentArcIndex > this.arcPoints.Count - 3 && this.isHitFlying && !this.stats.HasEffect("ImpactStun")) { this.KnockbackEnd(false); } if (this.currentArcIndex >= this.arcPoints.Count) { this.jumpLanding = true; if (this.hasActions && this.actions && this.actions.ai && this.actions.ai.jumping) { this.actions.ai.jumpDone = true; } this.currentArcIndex--; if (this.isHitFlying) { this.SetRotation(Quaternion.LookRotation(this.movePoint - this.prevPoint), false, true); this.isHitFlying = false; this.PlayAnimation("Hit Down", 0f); } } } else { this.SetRotation(this.look, false, false); } } this.body.tr.localRotation = Quaternion.Euler(Vector3.zero); return; } this.SetMoveFollowPosition((Vector3)this.moveNode.position); this.jumping = false; if (this.isHitFlying) { this.isHitFlying = false; } this.TurnExit(); } } // Token: 0x060002F7 RID: 759 RVA: 0x0004124C File Offset: 0x0003F44C public void KnockbackEnd(bool fromKick) { MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", this.currentPosition, 1f, new float?(1f), 0.5f, "", null); Effects effects = base.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.gameObject.SetActive(true); effects.source = null; effects.target = this; effects.fromLoad = false; effects.effectName = "ImpactStun"; effects.sourceLevel = 0f; effects.Inflicted(true); GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(112); pooledGameObject.transform.position = this.tr.position; pooledGameObject.SetActive(true); if (fromKick) { this.isHitFlying = false; } this.ignoreNodeIDs = false; if (!fromKick && this.movePoint != this.prevPoint) { this.SetRotation(Quaternion.LookRotation(this.movePoint - this.prevPoint), false, true); } } // Token: 0x060002F8 RID: 760 RVA: 0x0004135C File Offset: 0x0003F55C public bool NearFriend(out Vector3 testPointLeader, out GraphNode lookFor) { Vector3 vector = this.tr.position; testPointLeader = this.friendLeader.tr.position; lookFor = this.friendLeader.node; if (this.NodesCount() > 0) { if (this.savedPathTarget != null) { vector = (Vector3)this.savedPathTarget.position; } else { vector = (Vector3)this.GetLastNode().position; } } if (this.friendLeader.NodesCount() > 0 || this.friendLeader.moving) { if (this.friendLeader.savedPathTarget != null) { testPointLeader = (Vector3)this.friendLeader.savedPathTarget.position; lookFor = this.friendLeader.savedPathTarget; } else if (this.friendLeader.NodesCount() > 0) { testPointLeader = (Vector3)this.friendLeader.GetLastNode().position; lookFor = this.friendLeader.GetLastNode(); } } return (vector - testPointLeader).sqrMagnitude <= 36f; } // Token: 0x060002F9 RID: 761 RVA: 0x00041474 File Offset: 0x0003F674 public void UpdateCC() { if (!this.physicsMove && this.mainSelected) { if (this.cc) { if (this.party && (!this.mainSelected || (this.mainSelected && !this.cc.enabled))) { this.cc.enabled = false; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; this.cc.enabled = true; this.cc.enabled = false; return; } if (this.mainSelected && !this.physicsMove) { if (this.cc.enabled) { this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; return; } this.cc.enabled = false; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; this.cc.enabled = true; this.cc.enabled = false; return; } } } else if (!this.mainSelected && this.cc) { this.cc.enabled = false; } } // Token: 0x060002FA RID: 762 RVA: 0x00041600 File Offset: 0x0003F800 public bool CanPhysicsMove(bool wasd) { if (((!Links.x.mk || Input.GetMouseButtonUp(0)) && (!Links.x.joy || Links.x.gameplay.actionDown || Links.x.gameplay.actionUp || Links.x.gameplay.descWindowOpen || Links.x.gameplay.hudLeftOpen || Links.x.gameplay.hudRightOpen || Links.x.gameplay.spellTargetingGround)) || Records.x.typing || Records.x.removeControls || Records.x.pocketPause || Records.x.paused || Links.x.combat.miniEvent || !Links.x.gaia.sceneLoaded || !Links.x.gaia.pathfindingReady || Records.x.dialogue || this.inAction || this.inRecovery || this.inQueuedAbility || Records.x.inMenus || this.slideNode != null || this.isHit || !this.IsSentient()) { return false; } if (Links.x.mk && Links.x.gameplay.clickStartOnUIHover) { return wasd; } if (Links.x.mk && this.followingType != "") { return wasd; } return this.stats.Stuck() <= 0 && this.stats.Confuse() <= 0 && !this.fleeing && (Links.x.joy || !Links.x.gameplay.uiHover || !Links.x.mk || !Links.x.gameplay.uiHover || !Links.x.gameplay.clickStartOnUIHover); } // Token: 0x060002FB RID: 763 RVA: 0x0004184C File Offset: 0x0003FA4C public bool CanDefend() { return this.IsSentient() && !this.dead && !this.downed && !this.inAction && !this.inRecovery && !this.inQueuedAbility && !this.dodging && !this.waitingForDodgeUp && !this.fleeing && !Records.x.typing && !this.stats.pinning && !this.stats.pinned && !this.isHit && !Records.x.removeControls && !Links.x.combat.inPocketAttack && !Links.x.combat.miniEvent; } // Token: 0x060002FC RID: 764 RVA: 0x0004190C File Offset: 0x0003FB0C public bool CanAttack() { return this.IsSentient() && !this.stats.pinned && !this.stats.pinning && !this.isHit && !this.inAction && !this.fleeing && !this.inQueuedAbility && this.attackTime >= 1f && this.stats.Confuse() == 0 && !this.IsAttacking(this.body.currentHash); } // Token: 0x060002FD RID: 765 RVA: 0x0004198C File Offset: 0x0003FB8C public bool CanStartSpin() { if (Records.x.typing || Records.x.removeControls || Records.x.pocketPause || Records.x.paused || !Links.x.gaia.sceneLoaded || !Links.x.gaia.pathfindingReady || Records.x.dialogue || this.inAction || this.inRecovery || this.inQueuedAbility || Records.x.inMenus || this.slideNode != null || !this.IsSentient()) { return false; } if (this.stats.Stuck() > 0) { return false; } if (this.stats.Confuse() > 0) { return false; } if (this.fleeing) { return false; } bool joy = Links.x.joy; return true; } // Token: 0x060002FE RID: 766 RVA: 0x00041A74 File Offset: 0x0003FC74 private void StopMove() { int currentHash = this.body.currentHash; if (currentHash == this.body.walkHash || currentHash == this.body.walkStartHash || currentHash == this.body.walkBackHash || currentHash == this.body.walkBackStartHash || currentHash == this.body.combatWalkHash || currentHash == this.body.walkPartyHash || currentHash == this.body.combatWalkStartHash || currentHash == this.body.runHash || currentHash == this.body.runStartHash) { if (this.slideNode == null) { this.animator.SetBool("Idle", true); if (this.animID == 1) { this.animID = 0; } } if (Links.x.gaia.sceneLoaded) { this.timeSinceMoveEnded = Time.timeSinceLevelLoad + Random.Range(3f, 8f); } } this.lastRotation = this.tr.rotation; this.moving = false; if (this.turning) { this.EndTurning(false); } this.turningMain = false; this.physicsY = Vector3.zero; this.physicsMove = false; this.ClaimNode(this.node, this.tr.position, false); if (this.IsWalking() || this.turningMain) { this.moveFollow.position = this.tr.position; } this.mainMovePoint = Vector3.zero; } // Token: 0x060002FF RID: 767 RVA: 0x00041BEC File Offset: 0x0003FDEC public void EndDodge() { this.dodging = false; this.animator.SetBool("Dodging", false); this.animator.SetBool("DefendDone", true); if (this.dodgeFX) { Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX = null; } } // Token: 0x06000300 RID: 768 RVA: 0x00041C4D File Offset: 0x0003FE4D public bool CanChooseActions() { return true; } // Token: 0x06000301 RID: 769 RVA: 0x00041C50 File Offset: 0x0003FE50 public bool CanMove() { if (this.jumping && !Records.x.paused && this.party && (!this.pocketPaused || this.pocketPausedOverride)) { return true; } if (Links.x.combat.inPocketAttack && !this.pocketPaused && this.party) { return true; } if (this.body.IsHit()) { this.SetAnimatorSpeed(1f); } return !this.body.IsHit() && !this.stats.pinned && !this.stats.pinning && !this.turning && !this.dodging && this.moveNode != null && this.slideNode == null && this.prevNodePosition != this.vectorZero && this.moveTurns > 0f && !this.inAction && !this.inRecovery && !this.inQueuedAbility && this.CanChooseActions() && !Records.x.paused && !this.pocketPaused && !this.downed; } // Token: 0x06000302 RID: 770 RVA: 0x00041D72 File Offset: 0x0003FF72 public bool IsSentient() { return !this.dead && !this.downed && !this.stunned && !this.offMap && !this.sleeping; } // Token: 0x06000303 RID: 771 RVA: 0x00041DA0 File Offset: 0x0003FFA0 public bool CanMakePath() { return !this.offMap && this.slideNode == null && this.CanChooseActions() && ((Records.x.turnBased && !this.doingAction) || !Records.x.turnBased) && this.CheckControls() && !this.downed && !this.dead && !this.sleeping && !this.stunned; } // Token: 0x06000304 RID: 772 RVA: 0x00041E10 File Offset: 0x00040010 public bool CheckControls() { return !this.offMap && !this.turning && this.IsSentient() && !Records.x.paused && !this.pocketPaused && (!Records.x.dialogue || (Records.x.dialogue && this.ignoreRemoveControls)); } // Token: 0x06000305 RID: 773 RVA: 0x00041E6C File Offset: 0x0004006C public void ChangePauseState() { if (!Records.x.paused) { if (!this.moving) { this.prePausedSpeed = 1f; } if (this.waitingToUseItem) { Links.x.inventory.UseItemFromPause(this.waitingToUseBagItem, this.waitingToUseBeltItemIndex, this.waitingToUseBeltItemID, this); if (this.portrait) { this.portrait.QueueIcon(false); } } this.SetAnimatorSpeed(this.prePausedSpeed); return; } if (!this.pocketPaused) { this.prePausedSpeed = this.animator.speed; } this.animator.speed = 0f; } // Token: 0x06000306 RID: 774 RVA: 0x00041F14 File Offset: 0x00040114 public void ChangePocketPauseState() { if (false) { return; } if (Links.x.combat.bubbleEvent && this == Links.x.combat.bubbleEventTarget) { this.pocketPaused = false; this.pocketPausedOverride = false; this.prePausedSpeed = 1f; this.SetAnimatorSpeed(1f); return; } bool flag = false; if (Links.x.combat.inPocketAttack) { if (this == Links.x.pocketWheel.selectedRallyCharacter) { flag = true; } } else { flag = this.mainSelected; } if (!flag || (flag && Links.x.combat.bubbleEvent)) { this.pocketPausedOverride = false; if (!Records.x.pocketPause && !Links.x.combat.inPocketAttack) { if (this.dead) { this.body.PocketGore(true); } this.pocketPaused = false; this.pocketPausedOverride = false; if (this.blockedTime == 0f && this.prePausedSpeed < 0.1f) { this.prePausedSpeed = 1f; } this.SetAnimatorSpeed(this.prePausedSpeed); this.NeedToUpdateSailingAnimator(false); return; } if (!this.pocketPaused) { this.prePausedSpeed = this.animator.speed; } if (!this.moving) { this.prePausedSpeed = 1f; } this.SetAnimatorSpeed(0f); this.animator.speed = 0f; this.pocketPaused = true; this.currentAnimatorSpeed = 0f; if (this.dead) { this.body.PocketGore(false); return; } } else { if (this.pocketPaused) { this.pocketPaused = false; this.prePausedSpeed = 1f; this.SetAnimatorSpeed(1f); } this.pocketPaused = false; this.pocketPausedOverride = false; } } // Token: 0x06000307 RID: 775 RVA: 0x000420E8 File Offset: 0x000402E8 public void OverridePocketPause() { bool flag = false; if (Links.x.combat.inPocketAttack) { if (this == Links.x.pocketWheel.selectedRallyCharacter) { flag = true; } } else { flag = this.mainSelected; } if (flag && (this.inAction || this.inQueuedAbility || this.inRecovery) && this.actions && !Links.x.combat.bubbleEvent) { return; } this.pocketPausedOverride = true; this.SetAnimatorSpeed(this.prePausedSpeed); if (this.party && !Links.x.combat.bubbleEvent) { this.pocketPaused = false; } } // Token: 0x06000308 RID: 776 RVA: 0x00042198 File Offset: 0x00040398 private void GetPatrolHoldTime(bool addRandom) { this.patrolHoldTime = Time.timeSinceLevelLoad; if (this.stats.isGuard || this.stats.allegiance == 7U) { this.patrolHoldTime += 8f; if (addRandom) { this.patrolHoldTime += Random.Range(0f, 5f); } } else if (this.stats.allegiance == 6U || this.stats.allegiance == 5U || this.stats.allegiance == 0U) { this.patrolHoldTime += Random.Range(12f, 25f); } else if (this.stats.allegiance == 9U) { this.patrolHoldTime += Random.Range(10f, 20f); } else { this.patrolHoldTime += Random.Range(4f, 8f); if (addRandom) { this.patrolHoldTime += Random.Range(0f, 3f); } } if (this.stats.merchant) { this.patrolHoldTime = Time.timeSinceLevelLoad + Random.Range(0.1f, 2f); } } // Token: 0x06000309 RID: 777 RVA: 0x000422DC File Offset: 0x000404DC public bool Pivoting() { return this.body.stateInfo.shortNameHash == this.body.patrolLeftHash || this.body.stateInfo.shortNameHash == this.body.patrolRightHash || this.body.stateInfo.shortNameHash == this.body.patrolLeft45Hash || this.body.stateInfo.shortNameHash == this.body.patrolRight45Hash || this.body.stateInfo.shortNameHash == this.body.combatPivotLeftHash || this.body.stateInfo.shortNameHash == this.body.combatPivotRightHash || this.body.stateInfo.shortNameHash == this.body.combatPivotLeft45Hash || this.body.stateInfo.shortNameHash == this.body.combatPivotRight45Hash || this.body.stateInfo.shortNameHash == this.body.combatPivot180 || this.body.stateInfo.shortNameHash == this.body.patrol180 || this.body.stateInfo.shortNameHash == this.body.combatPivotLeftBackHash || this.body.stateInfo.shortNameHash == this.body.combatPivotRightBackHash || this.body.stateInfo.shortNameHash == this.body.combatPivotLeft45BackHash || this.body.stateInfo.shortNameHash == this.body.combatPivotRight45BackHash || this.body.stateInfo.shortNameHash == this.body.combatPivotBack180; } // Token: 0x0600030A RID: 778 RVA: 0x000424C0 File Offset: 0x000406C0 public bool HasPivotID() { return this.animID == 21 || this.animID == 22 || this.animID == 32 || this.animID == 31 || this.animID == 43 || this.animID == 44 || this.animID == 45 || this.animID == 46 || this.animID == 47 || this.animID == 48; } // Token: 0x0600030B RID: 779 RVA: 0x00042534 File Offset: 0x00040734 public float GetRotationAngle(Quaternion r1, Quaternion r2) { Vector3 eulerAngles = r1.eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; r1 = Quaternion.Euler(eulerAngles); Vector3 eulerAngles2 = r2.eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; r2 = Quaternion.Euler(eulerAngles2); return Quaternion.Angle(r1, r2); } // Token: 0x0600030C RID: 780 RVA: 0x00042598 File Offset: 0x00040798 public void UpdateRotation() { if (this.mainSelected && !this.fleeing && this.physicsMove && !this.pocketPaused && !Records.x.dialogue && !this.turning && (this.moving || this.physicsMove) && !this.turningMain) { this.savedRot = this.body.tr.rotation; return; } if (this.IsSentient() && !this.body.IsHit() && !this.pocketPaused && !this.ambushing && !this.stats.pinned && !this.downed && this.body.currentHash != this.body.downStartHash && this.body.currentHash != this.body.downHash && !this.resting) { if (this.Pivoting() && !this.turning) { this.rot = this.body.tr.rotation; this.smoothRot = this.rot; this.savedRot = this.rot; if (this.body.lookAtController.hasTarget) { this.body.lookAtController.EndLook(); return; } } else { Quaternion quaternion = this.rot; Quaternion quaternion2 = this.smoothRot; Quaternion quaternion3 = this.body.tr.rotation; Quaternion quaternion4 = this.tr.rotation; Vector3 vector = quaternion.eulerAngles; vector.x = 0f; vector.z = 0f; quaternion = Quaternion.Euler(vector); vector = quaternion2.eulerAngles; vector.x = 0f; vector.z = 0f; quaternion2 = Quaternion.Euler(vector); vector = quaternion3.eulerAngles; vector.x = 0f; vector.z = 0f; quaternion3 = Quaternion.Euler(vector); vector = quaternion4.eulerAngles; vector.x = 0f; vector.z = 0f; quaternion4 = Quaternion.Euler(vector); if (quaternion4 != quaternion || this.turning) { Vector3 forward = this.tr.forward; Vector3 vector2 = this.rot * Vector3.forward; Vector3.Dot(forward, vector2); float rotationAngle = this.GetRotationAngle(quaternion, quaternion3); bool flag = false; if (!this.physicsMove && this.moving) { flag = true; } if (this.mainSelected && this.physicsMove && !this.turningMain) { flag = true; } if (this.blockedTime > 0f) { flag = true; } if (this.waitingForNewPath || this.jumping) { flag = true; } if (this.slideNode != null) { flag = true; } bool alwaysRootMotion = this.stats.characterRow._AlwaysRootMotion; if (this.NodesCount() > 0 && !alwaysRootMotion) { flag = true; } if (this.alwaysTurn && !this.ignoreRemoveControls) { this.patrolSpeed = 2f; flag = false; this.alwaysTurn = false; } if ((Records.x.pocketPause && this.pocketPaused) || Records.x.miniGame) { flag = true; } if (alwaysRootMotion && rotationAngle > 40f) { flag = false; } if (this.jumping) { flag = true; } if (this.sailing && this.boatNavigator) { flag = true; } if (this.IsSentient() && (this.turning || (!flag && rotationAngle > 40f))) { bool hasRootMotionTurn = this.stats.characterRow._HasRootMotionTurn; float num = Quaternion.Angle(quaternion, quaternion2); float num2 = Quaternion.Angle(this.intervalRot, quaternion2); float num3 = Quaternion.Angle(quaternion, quaternion3); bool flag2 = this.mainSelected; if ((this.turning && this.turnTimeStarted != 0f && Time.timeSinceLevelLoad > this.turnTimeStarted + 2f) || (this.turning && (quaternion == quaternion2 || num < 15f || (this.turning && num3 < 15f && hasRootMotionTurn)) && rotationAngle < 15f)) { if (this.inAction) { if (!this.moving) { this.EndTurning(true); } else { this.EndTurning(false); } } if (this.turning && this.turnTimeStarted != 0f && Time.timeSinceLevelLoad > this.turnTimeStarted + 2f) { this.SetRotation(this.rot, false, true); } this.turning = false; this.rot = this.SlopedRotation(this.tr.rotation); quaternion2 = this.SlopedRotation(this.tr.rotation); this.animator.SetBool("TurningDone", true); if (!hasRootMotionTurn) { this.SetIdle(true); } this.turnTimeStarted = 0f; this.savedRot = this.tr.rotation; return; } if (rotationAngle > 15f || num2 < 10f || !this.turning) { if (!this.turning) { bool flag3 = this.mainSelected; this.SetIdle(false); } this.animator.SetBool("TurningDone", false); this.rotationTime = 0f; this.startRot = quaternion2; this.startRotY = this.startRot.eulerAngles.y; if (!this.turning) { this.turnTimeStarted = Time.timeSinceLevelLoad; } this.turning = true; this.savedRot = quaternion; this.SetAnimatorSpeed(1f); this.turnDirection = this.AngleDir(quaternion3 * Vector3.forward, quaternion * Vector3.forward, Vector3.up); float num4 = num; if (num4 <= 45f) { Vector3 eulerAngles = quaternion2.eulerAngles; this.intervalY = eulerAngles.y + num4 * this.turnDirection; this.intervalRot = quaternion; } else { Vector3 eulerAngles2 = quaternion2.eulerAngles; this.intervalY = eulerAngles2.y + 45f * this.turnDirection; this.intervalRot = Quaternion.Euler(new Vector3(eulerAngles2.x, this.intervalY, eulerAngles2.z)); } } if (this.turning) { if (hasRootMotionTurn && !this.stats.pinning) { if (!this.Pivoting()) { float num5 = Vector3.Dot(Vector3.Cross(quaternion3 * Vector3.forward, quaternion * Vector3.forward), Vector3.up); bool flag4 = this.hasActions; float num6 = 100f; float num7 = 60f; if (this.party) { num6 = 100f; num7 = 60f; } if (this.animator.GetBool("Combat")) { if (num5 < 0f) { if (num > num6) { this.PlayAnimation("CombatPivot180", 0f); } else if (num > num7 && num <= num6) { this.PlayAnimation("CombatPivotLeft90", 0f); } else { this.PlayAnimation("CombatPivotLeft45", 0f); } } else if (num > num6) { this.PlayAnimation("CombatPivot180", 0f); } else if (num > num7 && num <= num6) { this.PlayAnimation("CombatPivotRight90", 0f); } else { this.PlayAnimation("CombatPivotRight45", 0f); } } else if (num5 < 0f) { if (num > num6) { this.PlayAnimation("Patrol180", 0f); } else if (num > num7 && num <= num6) { this.PlayAnimation("PatrolLeft90", 0f); } else { this.PlayAnimation("PatrolLeft45", 0f); } } else if (num > num6) { this.PlayAnimation("Patrol180", 0f); } else if (num > num7 && num <= num6) { this.PlayAnimation("PatrolRight90", 0f); } else { this.PlayAnimation("PatrolRight45", 0f); } } this.SetAnimatorSpeed(1f); this.smoothRot = this.body.tr.rotation; } else { this.SetIdle(true); float num8 = 12f; this.rotationTime += Time.deltaTime * num8; float num9 = Mathf.Lerp(this.startRotY, this.intervalY, this.rotationTime); this.smoothRot = Quaternion.Euler(new Vector3(0f, num9, 0f)); this.tr.rotation = this.smoothRot; } } } bool flag5 = this.moving; if (this.IsWalking()) { flag5 = true; } if (this.boatNavigator) { flag5 = false; } if (!this.turning && !this.stunned && !this.dead && !this.downed && !this.Pivoting() && !this.body.nextFrameRotateToChild) { if (this.turning) { this.EndTurning(true); } if (flag5) { float num10 = 30f; if (Records.x.miniGame) { num10 = 100f; } this.smoothRot = Quaternion.Slerp(this.smoothRot, this.rot, Time.deltaTime * num10); } else { float num11 = 35f; if (this.slowLook) { this.smoothRot = this.SlopedRotation(this.tr.rotation); this.rot = this.SlopedRotation(this.tr.rotation); if (this.slowLook) { Quaternion quaternion5 = this.rot; vector = quaternion5.eulerAngles; vector.z = 0f; vector.x = 0f; quaternion5 = Quaternion.Euler(vector); vector2 = quaternion5 * Vector3.forward; if (this.body.headBone && !Records.x.dialogue) { this.lookAtTurnTarget.transform.position = this.body.HeadPosition(0f) + vector2 * 10f + new Vector3(0f, 0f, 0f); this.body.lookAtController.SetNewTarget(this.lookAtTurnTarget, 0f, 0f, false); } } this.slowLook = false; } else { float num12 = 1f; if (this.summoned && this.npc) { num12 = 3f; } this.smoothRot = Quaternion.Slerp(this.smoothRot, this.rot, Time.deltaTime * num11 * num12); } } this.tr.rotation = this.smoothRot; this.savedRot = this.smoothRot; return; } } else if (this.turning) { this.EndTurning(true); } } } } // Token: 0x0600030D RID: 781 RVA: 0x00043074 File Offset: 0x00041274 public void EndTurning(bool playIdle) { this.turning = false; this.RotateToChild(); this.turnTimeStarted = 0f; if (playIdle) { this.rot = this.SlopedRotation(this.tr.rotation); this.smoothRot = this.SlopedRotation(this.tr.rotation); this.SetIdle(true); } } // Token: 0x0600030E RID: 782 RVA: 0x000430D1 File Offset: 0x000412D1 public Quaternion SlopeRotation() { return Quaternion.FromToRotation(Vector3.up, this.terrainNormal); } // Token: 0x0600030F RID: 783 RVA: 0x000430E4 File Offset: 0x000412E4 public Quaternion FinalSlopedRotation(Quaternion wantedRotation) { Quaternion quaternion = wantedRotation; if (this.rotateToSlope && !this.sailing && !this.movesOnWater) { Quaternion quaternion2 = Quaternion.FromToRotation(this.tr.up, this.terrainNormal); if (this.turning) { quaternion = quaternion2 * wantedRotation; } } return quaternion; } // Token: 0x06000310 RID: 784 RVA: 0x00043138 File Offset: 0x00041338 public Quaternion SlopedRotation(Quaternion wantedRotation) { Quaternion quaternion = wantedRotation; if (this.rotateToSlope && !this.sailing && !this.movesOnWater) { Quaternion quaternion2 = Quaternion.FromToRotation(this.tr.up, this.terrainNormal); if (this.turning) { quaternion = quaternion2 * wantedRotation; } else { quaternion = Quaternion.Slerp(this.smoothRot, quaternion2 * wantedRotation, 10f * Time.deltaTime); } } return quaternion; } // Token: 0x06000311 RID: 785 RVA: 0x000431AC File Offset: 0x000413AC public void SetPosition(Vector3 pt, GraphNode n) { if (this.stats.Stuck() > 0 && this.npc && !this.jumpingAreas && !this.jumpingPosition && !this.jumping) { return; } if (this.movesOnWater && this.waterCollisions && this.waterCollisions.sliding) { return; } if (n == null) { this.tr.position = pt; return; } this.tr.position = (Vector3)n.position; } // Token: 0x06000312 RID: 786 RVA: 0x00043234 File Offset: 0x00041434 public void SetMoveFollowPosition(Vector3 pt) { if ((this.tr.position - pt).sqrMagnitude > 36f && !this.jumping && !this.sailing) { if (!this.ignoreRemoveControls && !this.jumpingAreas && !this.jumpingPosition && this.npc && !this.ambushing) { float num = 36f; if (!this.npc) { num = 225f; } if ((this.tr.position - new Vector3(pt.x, this.tr.position.y, pt.z)).sqrMagnitude > num) { this.ClaimNode(null, this.tr.position, true); this.TargetReached(); } } if (!this.jumpingAreas && !this.ignoreRemoveControls && Records.x.editor && !this.summoned && !this.body.IsHit()) { string[] array = new string[13]; array[0] = ((this != null) ? this.ToString() : null); array[1] = " MOVE FOLLOW TOO FAR "; int num2 = 2; Vector3 vector = pt; array[num2] = vector.ToString(); array[3] = " "; array[4] = this.tr.position.ToString(); array[5] = " "; array[6] = this.body.stateInfo.shortNameHash.ToString(); array[7] = " "; array[8] = this.nodePath.Count.ToString(); array[9] = " "; array[10] = this.inactive.ToString(); array[11] = " "; array[12] = this.moving.ToString(); Debug.Log(string.Concat(array)); } } if (!float.IsNaN(pt.x) && !float.IsNaN(pt.y) && !float.IsNaN(pt.z) && this.moveFollow) { this.moveFollow.position = pt; } } // Token: 0x06000313 RID: 787 RVA: 0x00043461 File Offset: 0x00041661 public void SetAttackTarget(Character c) { this.attackTarget = c; this.attackTargetTime = Links.x.gameplay.seconds; } // Token: 0x06000314 RID: 788 RVA: 0x00043480 File Offset: 0x00041680 public void SetRotation(Quaternion newRot, bool ikLook, bool instant) { if (this.stats.pinned) { return; } Vector3 eulerAngles = newRot.eulerAngles; if (!this.rotateToSlope) { eulerAngles.x = 0f; eulerAngles.z = 0f; } newRot = Quaternion.Euler(eulerAngles); this.rot = this.FinalSlopedRotation(newRot); this.slowLook = ikLook; if (this.inCombat || this.hasActions) { this.slowLook = false; } if (instant) { if (this.turning) { this.EndTurning(false); } this.smoothRot = newRot; this.rot = this.SlopedRotation(newRot); this.tr.rotation = newRot; this.body.tr.localRotation = Quaternion.Euler(Vector3.zero); this.alwaysTurn = false; return; } if (Quaternion.Angle(newRot, this.body.tr.rotation) > 45f && (this.alwaysTurn || !this.turning)) { if (this.alwaysTurn && this.turning) { this.EndTurning(false); this.savedRot = this.rot; } this.UpdateRotation(); return; } this.alwaysTurn = false; } // Token: 0x06000315 RID: 789 RVA: 0x000435A8 File Offset: 0x000417A8 public void SetMeshState(bool on) { if (this.inactive || this.missing) { on = false; } if (this.ambushing && !this.jumping) { on = false; } if (this.meshAlwaysOn && !this.missing) { on = true; } if (this.isBoro && Links.x.gaia.boroControls.boroInvisible) { on = false; } if (!on) { this.visible = 0; if (this.grassInteraction && !Records.x.removeControls && !Links.x.combat.inRally && !Links.x.combat.inPocketAttack) { Links.x.cellar.ReturnPooledGameObject(89, this.grassInteraction.gameObject); this.grassInteraction = null; } if (this.audioSource) { this.audioSource.enabled = false; } if (this.movesOnWater && !Links.x.combat.inPocketAttack) { if (this.waterColliderRigidbody) { this.waterColliderRigidbody.isKinematic = true; this.waterCollisions.sliding = false; } if (this.splash) { Links.x.cellar.ReturnPooledGameObject(141, this.splash); this.splash = null; } } this.WorldUI(); } else { this.visible = 1; if (!this.grassInteraction) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(89); if (pooledGameObject) { this.grassInteraction = pooledGameObject.transform; pooledGameObject.SetActive(true); } if (this.needsRebind && this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } } if (this.audioSource) { this.audioSource.enabled = true; } if (this.movesOnWater) { if (this.waterColliderRigidbody) { this.waterColliderRigidbody.isKinematic = false; } if (!this.splash && !this.stats.flying) { this.splash = Links.x.cellar.GetPooledGameObject(141); this.splash.SetActive(false); } } this.WorldUI(); } if (this.body) { this.body.SetMeshState(on, true); } } // Token: 0x06000316 RID: 790 RVA: 0x00043820 File Offset: 0x00041A20 public float GetAnimatorVariation(int multiple) { if (multiple == 2) { int num = Random.Range(0, 2); if (num == 0) { return 0f; } if (num == 1) { return 1f; } } else if (multiple == 3) { int num2 = Random.Range(0, 3); if (num2 == 0) { return 0f; } if (num2 == 1) { return 0.5f; } if (num2 == 2) { return 1f; } } return 0f; } // Token: 0x06000317 RID: 791 RVA: 0x0004387C File Offset: 0x00041A7C public void RotateToChild() { this.body.tr.parent = null; this.tr.rotation = this.body.tr.rotation; this.rot = this.SlopedRotation(this.tr.rotation); this.smoothRot = this.rot; this.body.tr.parent = this.tr; this.body.tr.localRotation = Quaternion.Euler(Vector3.zero); } // Token: 0x06000318 RID: 792 RVA: 0x00043908 File Offset: 0x00041B08 public bool InAttack() { return this.inAction || this.inRecovery || this.inQueuedAbility; } // Token: 0x06000319 RID: 793 RVA: 0x00043928 File Offset: 0x00041B28 public bool IsAttacking(int hash) { return hash == this.body.basicAttackHash || hash == this.body.basicAttack2Hash || hash == this.body.basicAttack3Hash || hash == this.body.basicAttack4Hash || hash == this.body.special1Hash || hash == this.body.special2Hash || hash == this.body.special3Hash || hash == this.body.special4Hash || hash == this.body.special5Hash || hash == this.body.powerDraw || hash == this.body.quickAttackHash; } // Token: 0x0600031A RID: 794 RVA: 0x000439E6 File Offset: 0x00041BE6 public bool IsCasting(int hash) { return hash == this.body.channelHash; } // Token: 0x0600031B RID: 795 RVA: 0x000439F9 File Offset: 0x00041BF9 public bool IsTrinketing(int hash) { return hash == this.body.instrumentHash || hash == this.body.charmHash; } // Token: 0x0600031C RID: 796 RVA: 0x00043A1C File Offset: 0x00041C1C public bool ActionAnimID() { return this.body.stateInfo.shortNameHash == this.body.basicAttackHash || this.body.stateInfo.shortNameHash == this.body.basicAttack2Hash || this.body.stateInfo.shortNameHash == this.body.basicAttack3Hash || this.body.stateInfo.shortNameHash == this.body.basicAttack4Hash || this.body.stateInfo.shortNameHash == this.body.quickAttackHash || this.body.stateInfo.shortNameHash == this.body.defendHash || this.body.stateInfo.shortNameHash == this.body.channelHash || this.body.stateInfo.shortNameHash == this.body.special1Hash || this.body.stateInfo.shortNameHash == this.body.special2Hash || this.body.stateInfo.shortNameHash == this.body.special3Hash || this.body.stateInfo.shortNameHash == this.body.kickHash || this.body.stateInfo.shortNameHash == this.body.useHash || this.body.stateInfo.shortNameHash == this.body.powerDraw || this.body.stateInfo.shortNameHash == this.body.instrumentHash || this.body.stateInfo.shortNameHash == this.body.charmHash || this.body.stateInfo.shortNameHash == this.body.channelHash; } // Token: 0x0600031D RID: 797 RVA: 0x00043C1C File Offset: 0x00041E1C public void PlayAnimation(string animName, float animTime) { if (this.inactive && !this.hasActions) { return; } bool flag = false; bool flag2 = false; if (this.party) { if (Links.x.combat.inPocketAttack) { if (this == Links.x.pocketWheel.selectedRallyCharacter) { flag2 = true; } } else { flag2 = this.mainSelected; } } if (flag2) { if (Links.x.combat.miniEvent && !Links.x.combat.bubbleEvent) { flag = true; } if (Links.x.combat.inPocketAttack && this.NodesCount() == 0) { flag = true; } } if (this.dead && !flag && !animName.Contains("Death")) { return; } if ((this.downed || this.sleeping) && !this.dead && !flag && !animName.Contains("Hit Down") && !animName.Contains("GetUp") && !animName.Contains("Suplex")) { if (this.body.currentHash == this.body.hitDownHash) { return; } animName = "Hit Down"; } if (this.stunned && !flag) { if (this.body.currentHash == this.body.hitDownHash || this.isHit) { return; } animName = "Hit Down"; } if (this.isHit && !flag && !this.stunned && !this.dead && !animName.Contains("Hit") && !animName.Contains("Death")) { return; } if ((this.animID == 25 || this.animID == 26) && !flag && this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 0.5f && (animName.Contains("Walk") || animName.Contains("Pivot") || animName.Contains("Idle") || animName.Contains("Patrol"))) { return; } if (flag && !animName.Contains("Attack")) { return; } if (this.animID == 53) { return; } bool flag3 = true; string text = ""; bool flag4 = this.stats.pinned; if (this.stats.pinning) { flag4 = true; } this.prevAnimID = this.animID; if ((this.stats.pinning || this.stats.pinned) && animName != "Pinning" && !animName.Contains("Down") && (!animName.Contains("Hit") || !this.stats.pinning) && !animName.Contains("Death")) { if (this.animID == 50) { return; } animName = "Pinning"; } if (this.inCombat && this.hasActions && !flag && (this.animID == 14 || this.inAction || this.IsAttacking(this.body.currentHash) || this.IsCasting(this.body.currentHash)) && !this.pocketPaused) { bool flag5 = false; if ((animName.Contains("Pivot") || animName.Contains("Patrol")) && this.hasActions && this.actions.rolling) { flag5 = true; } if (!animName.Contains("Charm") && !animName.Contains("Excited") && !animName.Contains("Attack") && !animName.Contains("Cast") && !animName.Contains("Channel") && !animName.Contains("Kick") && !animName.Contains("Instrument") && !flag5) { if (!animName.Contains("Down") && !animName.Contains("Death") && !animName.Contains("Thrown") && !animName.Contains("Interrupt") && !animName.Contains("Bounce")) { return; } this.actions.Interrupt(); if (this.animID == 8) { return; } } } if (animName.Contains("Idle")) { if (!this.npc && this.hasActions) { bool hasTarget = this.actions.hasTarget; } if (this.resting && (this.inCircle || !this.hasActions)) { if (this.inCircle) { if (this.stats.hasCircleAnims) { text = "Fatigued"; } else { text = "Hit_down"; } } else { text = "Hit_down"; } this.animator.SetBool("Idle", false); this.FinishAnimation(false, text, animTime, 0); this.SetAnimatorSpeed(1f); return; } if (this.party) { if (this.inTown && !this.hasActions) { this.animator.SetBool("Combat", false); } else { this.inTown = false; } if (!this.inTown && Time.timeSinceLevelLoad > this.timeSinceMoveEnded && this.timeSinceMoveEnded != 0f && this.timeSinceMoveEnded != -100f) { this.timeSinceMoveEnded = -100f; } } if (((this.summoned || this.npc) && (this.inCombat || this.hasActions || this.searching)) || (!this.inTown && this.party && this.timeSinceMoveEnded != -100f) || (this.hasActions && this.party) || (this.summoned && !this.npc && Records.x.InCombat(false))) { text = "Combat_Idle_loop"; this.animator.SetBool("Combat", true); } else { text = "Idle"; this.animator.SetBool("Combat", false); } this.animID = 0; if (this.animID != this.prevAnimID || !Links.x.gaia.sceneLoaded) { flag3 = false; this.SetIdle(true); } if (!flag3) { float num = this.GetAnimatorVariation(3); if (this.stats.hasCustomIdle && !this.hasActions) { num = 1f; } if (!this.sailing) { this.animator.SetFloat("Combat Variation", this.GetAnimatorVariation(2)); } if (this.party && !this.inTown && !this.sailing) { if (!this.hasActions) { this.animator.SetFloat("Combat Variation", 1f); } else { this.animator.SetFloat("Combat Variation", 0f); } } if (!this.sailing) { this.animator.SetFloat("Idle Variation", num); } animTime = Random.Range(0f, 1f); } this.animator.SetBool("Was Walking", false); this.FinishAnimation(flag3, text, animTime, 0); this.SetAnimatorSpeed(1f); if (this.sailing) { this.NeedToUpdateSailingAnimator(false); } return; } else { if (animName.Contains("Walk")) { if (this.stats.Stuck() == 0) { this.animator.SetBool("Was Walking", false); this.animID = 1; if (this.animID != this.prevAnimID || !this.IsWalking()) { flag3 = false; } if (this.body.sneaking && !this.npc) { text = "Walk_start"; this.animator.SetBool("Combat", false); } else { if (this.inCombat && !this.fleeing) { this.animator.SetBool("Combat", true); text = "Combat_walk_start"; if (this.stats.isFishMonster) { bool flag6 = false; if (this.inCircle && this.group && (this.group.inFormationMovement || this.group.inFormationWait || this.group.inSwarm || this.group.inSwarmWait)) { flag6 = true; } if (this.charging || this.evading || this.moveBackTarget || flag6) { this.animator.SetFloat("Combat Variation", 1f); } else { this.animator.SetFloat("Combat Variation", this.GetAnimatorVariation(2)); } } else if (!this.sailing) { this.animator.SetFloat("Combat Variation", this.GetAnimatorVariation(2)); } } else { if (this.party) { if (this.inTown && !this.hasActions) { this.animator.SetBool("Combat", false); } else { this.inTown = false; } if (!this.inTown && this.timeSinceMoveEnded == -100f) { if (this.mainSelected) { this.timeSinceMoveEnded = 0f; flag3 = false; } else if (Links.x.main.moving || Links.x.main.physicsMove || (Links.x.main.tr.position - this.tr.position).sqrMagnitude > 625f) { this.timeSinceMoveEnded = 0f; flag3 = false; } } } if ((this.party && !this.inTown && this.timeSinceMoveEnded != -100f) || (this.party && this.hasActions) || (!Records.x.removeControls && this.running && !this.summoned && !this.inTown)) { this.animator.SetBool("Combat", true); text = "Combat_walk_start"; } else if (this.running && !this.stats.animal && this.ignoreRemoveControls && !this.inTown) { text = "Combat_walk_start"; this.animator.SetBool("Combat", true); } else { text = "Walk_start"; this.animator.SetBool("Combat", false); } } if (this.animator.GetBool("Combat")) { if (this.moveBackTarget) { text = "Combat_walk_start_back"; this.animator.SetBool("Backward", true); this.moveBackward = true; } else { this.animator.SetBool("Backward", false); this.moveBackward = false; } } } if (!flag3 && this.body.tr.localRotation.eulerAngles.y != 0f) { this.RotateToChild(); } this.SetIdle(false); this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } } return; } if (animName.Contains("Patrol")) { if (animName.Contains("Left")) { if (animName.Contains("45")) { text = "Patrol_rotate_left 45"; this.animID = 21; } else { text = "Patrol_rotate_left"; this.animID = 22; } } else if (animName.Contains("Right")) { if (animName.Contains("45")) { text = "Patrol_rotate_right 45"; this.animID = 44; } else { text = "Patrol_rotate_right"; this.animID = 45; } } else { text = "Patrol_rotate_180"; this.animID = 43; } if (this.animID != this.prevAnimID || this.t >= 0.95f) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("CombatPivot")) { if (animName.Contains("Left")) { if (animName.Contains("45")) { text = "Pivot Left 45"; this.animID = 31; } else { text = "Pivot Left 90"; this.animID = 30; } } else if (animName.Contains("Right")) { if (animName.Contains("45")) { text = "Pivot Right 45"; this.animID = 46; } else { text = "Pivot Right 90"; this.animID = 47; } } else { text = "Pivot 180"; this.animID = 48; } if (this.moveBackward) { text += " back"; } float normalizedTime = this.animator.GetCurrentAnimatorStateInfo(0).normalizedTime; if (this.animID != this.prevAnimID || normalizedTime >= 0.95f) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("BasicAttack")) { this.animID = 2; if (!this.IsAttacking(this.body.currentHash)) { if (this.attackSpeed == 0f) { this.attackSpeed = 1f; } this.animator.SetFloat("Attack Variation", this.GetAnimatorVariation(3)); if (this.animID != this.prevAnimID) { flag3 = false; } text = "Combat_basic_attack"; this.NeedToUpdateSailingAnimator(false); if (this.needsRebind && this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(this.attackSpeed); } this.canSwitchBackToIdle = true; } return; } if (animName.Contains("SynergyAttack")) { if (this.attackSpeed == 0f) { this.attackSpeed = 1f; } if (animName.Contains("1")) { text = "Combat_synergy_normal_1"; this.animID = 15; } else if (animName.Contains("2")) { if (!Links.x.rallyStage.playing) { text = "Combat_synergy_normal_2"; } else { text = "Combat_synergy_2"; } this.animID = 16; } this.NeedToUpdateSailingAnimator(false); flag3 = false; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("SecondAttack")) { this.animID = 2; this.NeedToUpdateSailingAnimator(false); if (this.attackSpeed == 0f) { this.attackSpeed = 1f; } this.animator.SetFloat("Attack Variation", this.GetAnimatorVariation(3)); flag3 = false; text = "Combat_lefthand_attack"; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(this.attackSpeed); } this.canSwitchBackToIdle = true; this.animator.Update(0f); return; } if (animName.Contains("Instrument")) { if (animName.Contains("Horn")) { text = "Combat_instrument_horn"; this.animID = 32; } else if (animName.Contains("Pipes")) { text = "Combat_instrument_pipes"; this.animID = 41; } else { text = "Combat_instrument_flute"; this.animID = 42; } this.NeedToUpdateSailingAnimator(false); if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(false, text, animTime, -1); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName.Contains("Defend") && !flag4) { this.animID = 3; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Defend"; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName == "Hype" && !flag4) { if (this.animator.GetBool("Hyped")) { this.animID = 51; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Hype"; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } return; } else { if (animName == "Fatigued" && !flag4) { this.animID = 52; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Fatigued"; if (!this.stats.hasCircleAnims) { text = "Hit_down"; } this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName.Contains("Block") && !flag4) { if (animName.Contains("armor")) { text = "Block_armor"; this.animID = 4; } else { text = "Block_dodge"; this.animID = 5; } flag3 = false; this.FinishAnimation(flag3, text, animTime, -1); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Death")) { this.NeedToUpdateSailingAnimator(true); if (animName.Contains("1")) { text = "Death_1"; this.animID = 6; } else { text = "Death_1"; this.animID = 7; } if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName.Contains("JumpStart")) { this.animID = 33; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Jump_start"; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName.Contains("JumpDown")) { this.animID = 34; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Jump_end"; this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Hit")) { if (animName.Contains("Down")) { if (!this.animator.GetCurrentAnimatorStateInfo(0).IsName("Hit_down")) { text = "Hit_down_start"; } else { text = "Hit_down"; } this.animID = 8; if (this.animID != this.prevAnimID) { flag3 = false; } this.canSwitchBackToIdle = false; this.PlayFaceAnimation(FaceAnimations.AnimationNames.Sleep); } else if (animName.Contains("Bounce") && !flag4) { text = "Hit_bounce"; this.animID = 9; if (this.animID != this.prevAnimID) { flag3 = false; } this.canSwitchBackToIdle = false; if (this.hasActions) { this.actions.Interrupt(); } } else if (animName.Contains("Suplex") && !flag4) { text = "Hit_suplex"; this.animID = 53; if (this.animID != this.prevAnimID) { flag3 = false; } this.canSwitchBackToIdle = false; } else if (this.animID != 9) { if (animName.Contains("Interrupt") && this.actions && !this.jumping) { this.actions.Interrupt(); } if (!this.jumping && !this.stats.pinned) { if (this.turning) { this.EndTurning(false); } this.animID = 10; text = "Hit"; animTime = 0f; flag3 = false; this.SetAnimatorSpeed(1f); this.canSwitchBackToIdle = true; } } this.FinishAnimation(flag3, text, animTime, -1); return; } if (animName.Contains("CombatStart") && !flag4) { this.animID = 11; this.animator.SetBool("Combat", true); if (this.animID != this.prevAnimID) { flag3 = false; } text = "Combat_start"; this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); this.RotateToChild(); } return; } if (animName.Contains("CombatEnd") && !flag4) { this.animID = 12; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Combat_end"; this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Cast") && !flag4) { text = "Cast"; this.animID = 14; if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(false, text, animTime, -1); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("GetUp")) { this.animID = 24; if (this.animID != this.prevAnimID) { flag3 = false; } text = "Get_up"; this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; this.PlayFaceAnimation(FaceAnimations.AnimationNames.Blink); return; } if (animName.Contains("Kick")) { this.animID = 25; if (this.animID != this.prevAnimID) { } text = "Kick"; this.FinishAnimation(false, text, animTime, -1); if (!false) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; this.kickUseTime = Time.timeSinceLevelLoad; return; } if (animName.Contains("Use")) { this.animID = 26; text = "Combat_use_trinket_or_potion"; this.FinishAnimation(false, text, animTime, -1); if (!false) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; this.kickUseTime = Time.timeSinceLevelLoad; return; } if (animName.Contains("Pinning")) { this.animID = 50; if (this.stats.pinning) { text = "Combat_pins"; bool flag7 = false; if (this.hasActions && this.actions.ai.pinLow) { flag7 = true; } if (flag7) { this.animator.SetFloat("Pins", 0.5f); } else { this.animator.SetFloat("Pins", 0f); } } else { text = "Combat_pins"; this.animator.SetFloat("Pins", 1f); } this.FinishAnimation(false, text, animTime, -1); if (!false) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Talk")) { if (animName.Contains("1")) { text = "Talk_1"; this.animID = 18; } else if (animName.Contains("2")) { text = "Talk_2"; this.animID = 19; } else if (animName.Contains("3")) { text = "Talk_3"; this.animID = 20; } else if (animName.Contains("Arms")) { text = "Talk_1"; this.animID = 37; } else if (animName.Contains("Beseech")) { text = "Talk_1"; this.animID = 38; } else if (animName.Contains("Explain")) { text = "Talk_1"; this.animID = 39; } else if (animName.Contains("Grateful")) { text = "Talk_1"; this.animID = 40; } this.animator.SetBool("Idle", false); if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = false; return; } if (animName.Contains("Heard") && !flag4) { text = "Heard"; this.animID = 27; if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Stop")) { text = "Walk_end"; this.animID = 23; if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(flag3, text, animTime, 0); this.SetAnimatorSpeed(1f); this.canSwitchBackToIdle = true; return; } if (animName.Contains("Excited")) { text = "Excited"; this.animID = 1; if (this.animID != this.prevAnimID) { flag3 = false; } this.animator.SetFloat("Excited Variation", this.GetAnimatorVariation(3)); this.FinishAnimation(flag3, text, animTime, 0); this.SetAnimatorSpeed(1f); this.canSwitchBackToIdle = true; return; } if (animName.Contains("Charm")) { this.animID = 36; text = "Combat_charm"; if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } if (animName.Contains("Distress")) { this.animID = 49; text = "Distress"; if (this.animID != this.prevAnimID) { flag3 = false; } this.FinishAnimation(false, text, animTime, 0); if (!flag3) { this.SetAnimatorSpeed(1f); } this.canSwitchBackToIdle = true; return; } return; } } } // Token: 0x0600031E RID: 798 RVA: 0x00045440 File Offset: 0x00043640 public void FinishAnimation(bool same, string mecanimName, float animTime, int restart) { if (!same && mecanimName != "" && !this.inactive && this.animator.runtimeAnimatorController != null) { if (mecanimName.Contains("Idle") && !this.hasActions) { animTime = Random.Range(0f, 1f); } if (this.canSwitchBackToIdle) { this.body.waitForCrossFadeTime = Time.timeSinceLevelLoad; } if (this.animID != 43 && this.animID != 44 && this.animID != 45 && this.animID != 46 && this.animID != 47 && this.animID != 48 && this.animID != 21 && this.animID != 22 && this.animID != 30 && this.animID != 31 && this.animID != 8 && this.animID != 32 && this.animID != 41 && this.animID != 42 && this.animID != 2) { float num = 0.03f; if (this.stats.hasCustomIdle && this.animID == 0) { num = 0.1f; } this.animator.CrossFadeInFixedTime(mecanimName, num, restart, animTime); return; } this.animator.Play(mecanimName, restart, animTime); } } // Token: 0x0600031F RID: 799 RVA: 0x000455AC File Offset: 0x000437AC public void PlayFaceAnimation(FaceAnimations.AnimationNames faceAnimName) { if (this.body.headAnim && (this.visible == 1 || this.sleeping || this.stunned)) { if ((this.stunned || this.sleeping) && faceAnimName != FaceAnimations.AnimationNames.Sleep) { return; } if (this.dead && faceAnimName != FaceAnimations.AnimationNames.Dead) { return; } this.body.headAnim.PlayAnimation(faceAnimName); } } // Token: 0x06000320 RID: 800 RVA: 0x00045619 File Offset: 0x00043819 public void PlayFaceAnimation(string n) { if (this.body.headAnim && this.visible == 1) { this.body.headAnim.PlayAnimation(n); } } // Token: 0x06000321 RID: 801 RVA: 0x00045647 File Offset: 0x00043847 public void SetHeadEmotion(string type) { if (this.body.headAnim) { this.body.headAnim.emotion = type; } } // Token: 0x06000322 RID: 802 RVA: 0x0004566C File Offset: 0x0004386C public void CircleAnimation(string animationToPlay) { if (this.dead) { return; } if (this.inactive) { return; } if (this.visible == 0 && (this.npc || Records.x.inOverworldMap)) { return; } if (!this.usingCircles) { return; } if (!this.circleTr) { return; } if (this.stunned || (this.isBoro && Records.x.InCombat(false)) || (this.ghost && this.hostility == 0) || !this.usingCircles) { if (this.circle.activeSelf) { this.circle.SetActive(false); } return; } if (this.isBoro && this.sailing) { return; } if (!this.circle.activeSelf && !this.stunned && this.usingCircles) { this.circle.SetActive(true); } if (this.circle.activeSelf && !this.stunned) { if (!this.hovering) { this.circleAnimator.SetBool("Hover", false); } else { this.circleAnimator.SetBool("Hover", true); } if (this.npc && Records.x.kill) { this.circleAnimator.SetBool("Kill", true); } else { this.circleAnimator.SetBool("Kill", false); } if (this.hovering && !this.centerOfAttention && !this.isTarget && !this.stunned) { this.circleAnimator.enabled = true; this.circleAnimator.Play("Hover"); this.circleAnimator.SetBool("Hover", true); this.circleAnimator.SetBool("Target", false); } else if (this.centerOfAttention && this.hovering && !this.mainSelected && !this.stunned) { this.circleAnimator.enabled = true; this.circleAnimator.Play("Center of Attention"); this.circleAnimator.SetBool("Hover", true); this.circleAnimator.SetBool("Target", false); } else if (this.isTarget && this.hovering && !this.mainSelected && !this.stunned) { this.circleAnimator.enabled = true; this.circleAnimator.Play("Center of Attention"); this.circleAnimator.SetBool("Hover", true); this.circleAnimator.SetBool("Target", false); } else if (this.centerOfAttention && !this.hovering && !this.stunned) { this.circleAnimator.enabled = true; this.circleAnimator.Play("Hover"); this.circleAnimator.SetBool("Hover", false); this.circleAnimator.SetBool("Target", false); } else if (this.isTarget && !this.hovering && !this.stunned) { this.circleAnimator.SetBool("Hover", false); this.circleAnimator.SetBool("Target", true); this.circleAnimator.enabled = true; } else if (this.stunned && !this.isTarget && !this.hovering) { this.circleAnimator.enabled = true; this.circleAnimator.Play("Idle"); if (this.circleAnimator.GetBool("Target")) { this.circleAnimator.SetBool("Target", false); this.circleAnimator.enabled = true; } else { this.circleAnimator.enabled = false; } } if (animationToPlay != "") { this.circleAnimator.enabled = true; this.circleAnimator.Play(animationToPlay); } this.CircleColor(this.fleeing); } if (this.npc && this.hostility < 2 && !this.attackingUntilBribe) { if (!this.inCombat && !this.hasActions && !this.hovering) { this.circleAnimator.enabled = false; this.circleRenderers[2].enabled = false; return; } this.circleRenderers[2].enabled = true; } } // Token: 0x06000323 RID: 803 RVA: 0x00045A98 File Offset: 0x00043C98 public void CircleColor(bool kiting) { int num = this.partyColorID; for (int i = 0; i < this.circleRenderers.Count - 1; i++) { if (this.fleeing || kiting) { if (this.isTarget || this.centerOfAttention || this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleFleeTarget; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleFlee; } } else if (this.npc) { if (this.hostility < 2 && !this.attackingUntilBribe) { if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleNeutralHover; } else if (this.isTarget) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleNeutralTarget; } else if (this.centerOfAttention) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleNeutralTarget; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleNeutral; } } else if (this.radius > 3f) { if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargeEnemyHover; } else if (this.isTarget) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargeEnemyTarget; } else if (this.centerOfAttention) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargeEnemyTarget; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargeEnemy; } } else if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleEnemyHover; } else if (this.isTarget) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleEnemyTarget; } else if (this.centerOfAttention) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleEnemyAction; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleEnemy; } } else if (this.radius > 3f) { if (this.selected) { if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargePartyHover; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargePartySelected; } } else if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargePartyUnseletedHover; } else { this.circleRenderers[i].sharedMaterial = Links.x.selectionCircleLargeParty; } } else if (this.selected) { if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 3); } else if (this.centerOfAttention) { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 3); } else { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 2); } } else if (this.hovering) { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 3); } else if (this.centerOfAttention) { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 1); } else { this.circleRenderers[i].sharedMaterial = Links.x.GetPartyMaterial(num, 0); } } if (this.circleRenderers.Count > 1) { if (this.npc && this.hostility < 2 && !this.attackingUntilBribe) { if (!this.inCombat && !this.hasActions && !this.hovering) { this.circleRenderers[3].enabled = false; return; } } else { this.circleRenderers[3].material.SetFloat("opacity", 0.05f); this.circleRenderers[3].enabled = true; this.circleRenderers[3].material.SetColor("_Color", this.circleRenderers[2].sharedMaterial.GetColor("_Color")); } } } // Token: 0x06000324 RID: 804 RVA: 0x00045F78 File Offset: 0x00044178 public void PlaySoundFX(int fxID, int clipNum) { if (clipNum <= 2 && (this.inactive || this.visible == 0)) { return; } float soundVolume = Links.x.options.soundVolume; if (fxID > 0) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(fxID); if (pooledGameObject) { pooledGameObject.transform.position = this.body.GetFootLower().position - new Vector3(0f, 0.7f, 0f); if (!pooledGameObject.activeSelf) { pooledGameObject.SetActive(true); } } } if (clipNum < 2 && !this.mainSelected && Time.timeSinceLevelLoad < this.soundTime + 0.25f) { clipNum = -1; } if (!this.audioSource) { return; } if (!this.party && (this.visible == 0 || this.inactive)) { return; } if (clipNum > -1) { this.soundTime = Time.timeSinceLevelLoad; string text = "Human"; if (this.stats.animal) { text = "Animal"; } if (clipNum == 7) { this.audioSource.clip = Links.x.allSounds.PlaySound(text, this.stats.soundID, clipNum, ""); } if (clipNum >= 10) { if (text == "Human") { this.audioSource.clip = Links.x.allSounds.PlaySound("Talking", this.stats.characterRow._VoiceID, clipNum, ""); } else { this.audioSource.clip = Links.x.allSounds.PlaySound(text, this.stats.soundID, 7, ""); } } else { string text2 = ""; if (clipNum == 0) { text2 = this.terrain; } this.audioSource.clip = Links.x.allSounds.PlaySound(text, this.stats.soundID, clipNum, text2); } if (this.audioSource.clip != null) { if (clipNum >= 2) { if (!this.npc || clipNum >= 10) { this.audioSource.priority = 1; } else { this.audioSource.priority = 100; } if (this.summoned) { this.audioSource.volume = Links.x.options.soundVolume / 2f; } else if (this.stats.xmlName.Contains("Bakka") || this.stats.xmlName.Contains("Shroomer")) { this.audioSource.volume = Links.x.options.soundVolume * 1.5f; } else { this.audioSource.volume = Links.x.options.soundVolume; } } else { if (this.mainSelected) { this.audioSource.priority = 1; } else { this.audioSource.priority = 200; } float num = 0.18f; if (this.party && this.terrain == "Rocks") { num = 0.4f; } if (this.npc) { num *= 1.5f; } if (this.stats.Silent() > 0) { this.audioSource.volume = Links.x.options.soundVolume * (num / 3f); } else { this.audioSource.volume = Links.x.options.soundVolume * num; } } if (this.audioSource.enabled && base.gameObject.activeSelf) { this.audioSource.Play(); } } } } // Token: 0x06000325 RID: 805 RVA: 0x00046310 File Offset: 0x00044510 private bool HasPartyAsEnemy() { using (List.Enumerator enumerator = this.lkPlayer.GetEnumerator()) { while (enumerator.MoveNext()) { if (enumerator.Current.party) { return true; } } } return false; } // Token: 0x06000326 RID: 806 RVA: 0x0004636C File Offset: 0x0004456C public void SetHealthBarMaterial(bool isKiting) { if (!this.healthBar) { return; } bool flag = this.npc; } // Token: 0x06000327 RID: 807 RVA: 0x00046384 File Offset: 0x00044584 public void GetStaminaBar() { if (this.npc) { bool flag = false; if (!this.staminaBar && flag) { this.staminaBar = Links.x.cellar.GetPooledGameObject(122); this.staminaBar.SetActive(true); this.staminaBarTr = this.staminaBar.transform.GetChild(1); this.staminaBar.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); this.staminaBarScale = this.staminaBarTr.localScale; this.staminaBarScale.z = 0.34f; this.staminaBarTr.localScale = this.staminaBarScale; this.staminaBar.transform.GetChild(0).gameObject.SetActive(true); this.staminaBar.transform.GetChild(1).gameObject.SetActive(true); this.SetStaminaBarPosition(); this.GetHealthBar(); return; } this.CreateStamina(); } } // Token: 0x06000328 RID: 808 RVA: 0x00046490 File Offset: 0x00044690 public void GetHealthBar() { bool flag = false; if (this.npc && flag && !this.healthBar) { this.healthBar = Links.x.cellar.GetPooledGameObject(65); this.healthBar.SetActive(true); this.healthBarTr = this.healthBar.transform.GetChild(1); this.healthBar.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); this.SetHealthBarMaterial(this.fleeing); this.healthBarScale = this.healthBarTr.localScale; this.healthBarScale.z = 0.34f; this.healthBarTr.localScale = this.healthBarScale; this.healthBar.transform.GetChild(0).gameObject.SetActive(true); this.healthBar.transform.GetChild(1).gameObject.SetActive(true); this.SetHealthBarPosition(); } } // Token: 0x06000329 RID: 809 RVA: 0x00046598 File Offset: 0x00044798 private void SetDazedPosition() { if (!this.dazed) { return; } if (this.neck == this.body.tr) { this.dazed.transform.parent.gameObject.transform.position = this.neck.position + new Vector3(0f, 1.1f, 0f); } else { this.dazed.transform.parent.gameObject.transform.position = this.neck.position + new Vector3(0f, 1.1f, 0f); } if (!this.dazed.transform.parent.gameObject.activeSelf) { this.dazed.transform.parent.gameObject.SetActive(true); } } // Token: 0x0600032A RID: 810 RVA: 0x0004668C File Offset: 0x0004488C private void SetHealthBarPosition() { if (!this.healthBar) { return; } float num = 1.35f; if (this.neck == this.body.tr) { this.healthBar.transform.position = this.body.headBone.position + new Vector3(0f, num, 0f); return; } this.healthBar.transform.position = this.neck.position + new Vector3(0f, num, 0f); } // Token: 0x0600032B RID: 811 RVA: 0x0004672C File Offset: 0x0004492C private void SetRevivalGemPosition() { Transform transform = this.revivalGem.gameObject.transform; transform.position = this.body.headBone.position + new Vector3(0f, 1.5f, 0f); RaycastHit raycastHit; if (Physics.Raycast(transform.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 12f, Links.x.floor) && raycastHit.point.y > transform.position.y - 1f) { Vector3 position = transform.position; position.y = raycastHit.point.y + 1.5f; transform.position = position; } } // Token: 0x0600032C RID: 812 RVA: 0x0004680C File Offset: 0x00044A0C private void SetSeenPosition() { if (this.neck == this.body.tr) { this.seen.transform.position = this.body.HeadPosition(0f); return; } this.seen.transform.position = this.neck.position; } // Token: 0x0600032D RID: 813 RVA: 0x00046870 File Offset: 0x00044A70 private void SetHeardPosition() { if (this.neck == this.body.tr) { this.heard.transform.position = this.body.HeadPosition(0f); return; } this.heard.transform.position = this.neck.position; } // Token: 0x0600032E RID: 814 RVA: 0x000468D4 File Offset: 0x00044AD4 private void SetStaminaBarPosition() { if (!this.staminaBar) { return; } float num = 1.24f; if (this.neck == this.body.tr) { this.staminaBar.transform.position = this.body.headBone.position + new Vector3(0f, num, 0f); } else { this.staminaBar.transform.position = this.neck.position + new Vector3(0f, num, 0f); } this.SetHealthBarPosition(); } // Token: 0x0600032F RID: 815 RVA: 0x0004697C File Offset: 0x00044B7C private void SetHeartPosition() { if (!this.heart) { return; } if (this.neck == this.body.tr) { this.heart.transform.position = this.body.headBone.position + new Vector3(0f, 1.75f, 0f); return; } this.heart.transform.position = this.neck.position + new Vector3(0f, 1.75f, 0f); } // Token: 0x06000330 RID: 816 RVA: 0x00046A20 File Offset: 0x00044C20 private void SetSelectedPosition() { if (!this.bracket) { return; } if (!this.usingCircles) { this.bracket.transform.position = this.tr.position + new Vector3(0f, 0.2f, 0f); RaycastHit raycastHit; if (Physics.Raycast(this.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 10f, 4194449)) { Vector3 normal = raycastHit.normal; normal.y = Mathf.Clamp(normal.y, 0.97f, 1f); Quaternion quaternion = Quaternion.FromToRotation(Vector3.up, normal); this.bracket.transform.rotation = Quaternion.Slerp(this.bracket.transform.rotation, quaternion, Time.deltaTime * 10f); return; } } else { if (this.neck == this.body.tr) { this.bracket.transform.position = this.body.HeadPosition(0f) + new Vector3(0f, 1.35f, 0f); } else { this.bracket.transform.position = this.neck.position + new Vector3(0f, 1.35f, 0f); } if (this.selected && !this.bracket.activeSelf) { this.bracket.SetActive(true); } } } // Token: 0x06000331 RID: 817 RVA: 0x00046BD0 File Offset: 0x00044DD0 public void UpdateHealth() { if (this.healthBar) { float num = (float)this.stats.HealthCurrent() / (float)this.stats.HealthMax(); this.healthBarTr.localScale = new Vector3(this.healthBarScale.x, this.healthBarScale.y, this.healthBarScale.z * num); float num2 = 0f; if (this.healthBarTr.localScale.z > 0f) { num2 = (this.healthBarTr.localScale.z - this.healthBarScale.x) / 2f * 3.4f; } this.healthBarTr.localPosition = new Vector3(num2, this.healthBarTr.localPosition.y, this.healthBarTr.localPosition.z); } } // Token: 0x06000332 RID: 818 RVA: 0x00046CB4 File Offset: 0x00044EB4 public void UpdateStamina() { if (this.stamina) { this.stamina.UpdateStamina(); } if (this.staminaBar) { float num = this.stats.stamina / this.stats.maxStamina; this.staminaBarTr.localScale = new Vector3(this.staminaBarScale.x, this.staminaBarScale.y, this.staminaBarScale.z * num); float num2 = 0f; if (this.staminaBarTr.localScale.z > 0f) { num2 = (this.staminaBarTr.localScale.z - this.staminaBarScale.x) / 2f * 3.4f; } this.staminaBarTr.localPosition = new Vector3(num2, this.staminaBarTr.localPosition.y, this.staminaBarTr.localPosition.z); } } // Token: 0x06000333 RID: 819 RVA: 0x00046DAD File Offset: 0x00044FAD public void ReturnHealthBar() { if (this.healthBar) { this.healthBar.SetActive(false); Links.x.cellar.ReturnPooledGameObject(65, this.healthBar); this.healthBar = null; } } // Token: 0x06000334 RID: 820 RVA: 0x00046DE8 File Offset: 0x00044FE8 public void ReturnStaminaBar() { if (this.staminaBar) { this.staminaBar.SetActive(false); Links.x.cellar.ReturnPooledGameObject(122, this.staminaBar); this.staminaBar = null; } if (this.stamina) { this.stamina.End(); this.stamina = null; } } // Token: 0x06000335 RID: 821 RVA: 0x00046E4C File Offset: 0x0004504C public void StartCombat(Character lookAtTarget, bool midAction) { this.actionPicked = false; if (Records.x.turnBased && !midAction) { this.ClearMoveTargets(); } bool flag = false; if (lookAtTarget) { if (lookAtTarget.npc && this.party) { flag = true; } if (!lookAtTarget.npc && this.npc) { flag = true; } } if (Records.x.InCombat(false) && (flag || Links.x.combat.GetNPCCountHostile() > 0) && this.party) { if (!Records.x.pocketPause && this.mainSelected && (!Records.x.banquetIsle || (Records.x.banquetIsle && this.stats.partyID > 0))) { this.ZeroAttackTime(this.stats.Initiative()); } else if (!this.mainSelected) { this.ZeroAttackTime(this.stats.Initiative()); } } if (this.npc) { if (this.stats.isLeader && this.creatures) { this.creatures.SparkleFriends(this); } if (this.bag[18] > 1 && this.stamina && !this.stamina.hasArmor) { Library.Inventory invRow = Links.x.library.GetInvRow(this.bag[18]); this.stamina.SetupArmor(this, Mathf.RoundToInt((float)invRow._DurabilityMax), (int)this.durability[9].x); } } this.walkUsed = 0; this.overlapping = false; if (this.hostility < 2 && this.hostility > -1 && this.HasPartyAsEnemy() && !this.attackingUntilBribe && !this.vipFollow) { if (this.stats.isGuard && !this.attackingUntilBribe) { this.GuardQuip(); } if (this.stats.animal) { this.hostility = 2; } else if (!Links.x.sensory.CheckProof(this)) { this.attackingUntilBribe = true; } else { this.hostility = 2; } } this.CircleColor(false); if (lookAtTarget != this) { this.lookTarget = lookAtTarget; } this.PlayFaceAnimation(FaceAnimations.AnimationNames.Angry); this.doingAction = false; if (this.creatures && this.creatures.creatures.mobility == Creatures.mobilityState.IdlesOffGridUntilAttacked) { this.stuckInPlace = false; } if (this.portrait && this.portrait.skillBag) { this.portrait.skillBag.SetSelectedState(); } if (!this.outsideDome) { this.actionNumber = 1f; } else { this.actionNumber = 0f; } if (!this.searching) { this.CircleAnimation(""); } if (!this.searching && Records.x.turnBased) { this.StopMoveToRoutine(); } } // Token: 0x06000336 RID: 822 RVA: 0x00047130 File Offset: 0x00045330 public void GuardQuip() { int num = Random.Range(0, 6); if (num == 0) { this.StartQuip("Lawbreaker!"); } if (num == 1) { this.StartQuip("Knave!"); } if (num == 2) { this.StartQuip("Scoundrel!"); } if (num == 3) { this.StartQuip("Get out!"); } if (num == 4) { this.StartQuip("You're not wanted here!"); } if (num == 5) { this.StartQuip("Felon!"); } } // Token: 0x06000337 RID: 823 RVA: 0x0004719C File Offset: 0x0004539C public void HostileQuip() { int num = Random.Range(0, 6); if (num == 0) { this.StartQuip("You'll regret that!"); } if (num == 1) { this.StartQuip("I'll teach you a lesson!"); } if (num == 2) { this.StartQuip("You've a bold face!"); } if (num == 3) { this.StartQuip("What is this?"); } if (num == 4) { this.StartQuip("An outrage!"); } if (num == 5) { this.StartQuip("Unbelievable!"); } } // Token: 0x06000338 RID: 824 RVA: 0x00047208 File Offset: 0x00045408 public void GuiltyQuip() { int num = Random.Range(0, 2); if (num == 0) { this.StartQuip("Mercy!"); } if (num == 1) { this.StartQuip("I meant no harm!"); } } // Token: 0x06000339 RID: 825 RVA: 0x0004722D File Offset: 0x0004542D public void EndTurn() { this.body.lookAtController.EndLook(); this.actionPicked = false; this.CircleAnimation(""); this.StopMoveToRoutine(); this.doingAction = false; this.walkUsed = 0; this.SetNodeID(true, false); } // Token: 0x0600033A RID: 826 RVA: 0x00047270 File Offset: 0x00045470 public void StartTurn() { this.StopMoveToRoutine(); this.walkUsed = 0; this.actionPicked = false; this.CheckInTile(); if (Records.x.turnBased) { this.outsideDome = false; } if (!this.outsideDome) { this.actionNumber = 1f; } else { this.actionNumber = 0f; } this.CircleAnimation(""); } // Token: 0x0600033B RID: 827 RVA: 0x000472D5 File Offset: 0x000454D5 public void SetMoveBack(Character c) { if (this.mainSelected) { return; } this.moveBackTarget = c; this.moveBackward = true; this.animator.SetBool("Backward", true); } // Token: 0x0600033C RID: 828 RVA: 0x000472FF File Offset: 0x000454FF public void MoveBackEmpty() { this.moveBackTarget = null; this.animator.SetBool("Backward", false); this.moveBackward = false; } // Token: 0x0600033D RID: 829 RVA: 0x00047320 File Offset: 0x00045520 public void StopEvading() { this.evading = false; if (this.mainSelected) { this.ForceEndJump(); } } // Token: 0x0600033E RID: 830 RVA: 0x00047338 File Offset: 0x00045538 public bool InSpecialAttack() { bool flag = false; if (!this.stats) { return false; } if (this.stats.hasCustomAI && this.hasActions) { if (!this.ambushing && this.npc && this.actions && this.actions.ai.jumping) { flag = true; } if (this.actions && this.actions.chargeUpFX && this.IsCasting(this.body.currentHash)) { flag = true; } if (this.body.currentHash == this.body.special1Hash || this.body.currentHash == this.body.special2Hash) { flag = true; } } return flag; } // Token: 0x0600033F RID: 831 RVA: 0x0004740C File Offset: 0x0004560C public bool SpecialAttackTypeNearby(out Vector3 attackNode, Character potentialTarget, out bool dodgeSideways) { attackNode = Vector3.zero; dodgeSideways = false; if (this.actions.ai.jumping) { if (this.actions.ai.jumpNode != null) { if (this.actions.chargeUpFX || this.charging) { Vector3 closestPointOnFiniteLine = this.actions.ai.GetClosestPointOnFiniteLine(potentialTarget.currentPosition, this.currentPosition, (Vector3)this.actions.ai.jumpNode.position); if ((closestPointOnFiniteLine - potentialTarget.currentPosition).sqrMagnitude < (this.attackRadius + potentialTarget.attackRadius) * 0.9f * ((this.attackRadius + potentialTarget.attackRadius) * 0.9f)) { attackNode = closestPointOnFiniteLine; return true; } } else if (potentialTarget.mainSelected) { if (((Vector3)this.actions.ai.jumpNode.position - potentialTarget.currentPosition).sqrMagnitude < 16f) { attackNode = (Vector3)this.actions.ai.jumpNode.position; return true; } } else if (((Vector3)this.actions.ai.jumpNode.position - (Vector3)potentialTarget.node.position).sqrMagnitude < 16f) { attackNode = (Vector3)this.actions.ai.jumpNode.position; return true; } } return false; } if (this.actions.chargeUpFX && this.IsCasting(this.body.currentHash) && this.actions.spell != null && this.actions.spell._Name.Contains("Beam")) { float num = 9f; if (this.actions.spell._Name.Contains("FishPoison")) { num = 6f; } if ((this.currentPosition - potentialTarget.currentPosition).sqrMagnitude < num * Records.x.nodeSize + num * Records.x.nodeSize) { Vector3 forward = this.tr.forward; float num2 = Vector3.Angle(potentialTarget.currentPosition - this.currentPosition, forward); float num3 = 15f; if (this.actions.spell._Name.Contains("FishPoison")) { num3 = 20f; } if (num2 <= num3 && num2 >= num3 * -1f) { attackNode = (Vector3)this.node.position; dodgeSideways = true; return true; } } } if ((this.stats.animal || this.npc) && (this.body.currentHash == this.body.special1Hash || this.body.currentHash == this.body.special2Hash)) { Character target = this.actions.GetTarget(); GraphNode graphNode = null; if (this.actions.ProjectileCount() == 0 && target) { graphNode = target.node; } else { Projectile firstProjectile = this.actions.GetFirstProjectile(); if (firstProjectile) { graphNode = firstProjectile.targetNode; } } if (this.invRow1._MeleeRangeEnd >= 5f && graphNode != null) { int ammoIndex = this.GetAmmoIndex(this.invRow1); if (ammoIndex > -1) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.GetInvNum(ammoIndex)); if (invRowByIndex._DmgMax <= 0 && invRowByIndex._Effect != "") { float num4 = 2f; if (invRowByIndex._Effect == "FishPoison") { num4 = 2f; } if (((Vector3)graphNode.position - potentialTarget.currentPosition).sqrMagnitude < num4 * Records.x.nodeSize + num4 * Records.x.nodeSize) { attackNode = (Vector3)graphNode.position; return true; } } } } } return false; } // Token: 0x06000340 RID: 832 RVA: 0x0004785C File Offset: 0x00045A5C public void EndCombat() { this.actionPicked = false; this.MoveBackEmpty(); this.PlayFaceAnimation(FaceAnimations.AnimationNames.Smile); this.body.Dodge(false); if (this.animID != 50) { this.stats.pinned = false; this.stats.pinning = false; } this.SetStagger(0); if (this.party) { this.stats.ClearSynergies(); } if (this.raycastModifier) { Links.x.gameplay.RemoveAbilityInfo(); } if (this.creatures) { this.creatures.ReturnFromCombat(); } this.walkUsed = 0; if (this.npc) { this.animator.SetBool("Combat", false); } this.animator.SetFloat("Combat Variation", 1f); this.outsideDome = false; this.inQueuedAbility = false; this.moveOnTiles = false; this.overlapping = false; this.doingAction = false; this.inAction = false; this.inRecovery = false; this.centerOfAttention = false; this.CircleAnimation(""); this.waitingToJoinDome = false; this.ReturnStaminaBar(); this.stats.attackCount = 0; if (this.party) { this.stats.ClearSynergies(); } if (this.portrait && this.portrait.skillBag) { this.portrait.skillBag.SetSelectedState(); } if (this.dodging) { this.EndDodge(); } if (this.stats.pinning) { this.stats.HealEffect("Pinning"); this.stats.pinning = false; } if (this.party && this.portrait) { this.portrait.skillBag.SetTrinketGrid(false); } } // Token: 0x06000341 RID: 833 RVA: 0x00047A2C File Offset: 0x00045C2C public void HoverIn() { if (!this.hovering) { if (this.dead || (this.party && this.stunned)) { return; } this.hovering = true; this.CircleAnimation(""); Links.x.GetCharacterTextColor(this); if (!Links.x.fellowship.drawingSquare) { Links.x.tooltip.character = this; } if (this.timelineIcon) { this.timelineIcon.Hover(true); } if (this.portrait) { this.portrait.HoverFromCharacter(true); } } } // Token: 0x06000342 RID: 834 RVA: 0x00047AD0 File Offset: 0x00045CD0 public void HoverOut(bool useDelay) { this.hovering = false; this.CircleAnimation(""); if (this.portrait) { this.portrait.HoverFromCharacter(false); } if (this.timelineIcon) { this.timelineIcon.Hover(false); } } // Token: 0x06000343 RID: 835 RVA: 0x00047B24 File Offset: 0x00045D24 public void OutOfAmmoMessage() { if (Time.timeSinceLevelLoad > this.ammoMessageTime + 30f) { this.ammoMessageTime = Time.timeSinceLevelLoad; string ammo = this.invRow1._Ammo1; string text = ""; this.str.Clear(); if (ammo.Contains("Arrow")) { text = "arrows"; } else if (ammo.Contains("Dart")) { text = "stones"; } else if (ammo.Contains("Vial")) { text = "elyxirs"; } if (text.Contains("dart")) { text = "stones"; } if (text != "") { this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); this.str.Append(this.stats.GetName()); this.str.Append(""); this.str.Append(" is "); this.str.Append(" out of "); this.str.Append(text); this.StartQuip("Out of " + text + "!"); } } } // Token: 0x06000344 RID: 836 RVA: 0x00047C59 File Offset: 0x00045E59 public void EndQuip() { if (!this.quip) { return; } this.quip.End(); this.quip = null; this.quipStartTime = -1f; } // Token: 0x06000345 RID: 837 RVA: 0x00047C86 File Offset: 0x00045E86 public void StartQuipAlways(string text) { this.Quip(text); } // Token: 0x06000346 RID: 838 RVA: 0x00047C90 File Offset: 0x00045E90 public void StartQuip(string text) { if (Records.x.paused || (Records.x.pocketPause && !this.mainSelected) || !Links.x.hasMain) { return; } if (Links.x.rtsCamera.currentBoundsName != "" && this.indoorID != Links.x.rtsCamera.currentBoundsName) { return; } if (text == "" || this.sleeping || this.inactive || (!this.ignoreRemoveControls && Links.x.gaia.loadingCharacterCreation) || (!this.mainSelected && this.indoorID != Links.x.main.indoorID)) { return; } if (!this.setupComplete) { return; } if (!this.IsSentient()) { return; } this.Quip(text); } // Token: 0x06000347 RID: 839 RVA: 0x00047D78 File Offset: 0x00045F78 private void Quip(string text) { if (text == "NPC Heard") { if (!Links.x.AllDead() && !Records.x.miniGame && !this.seen && (!Records.x.combat || (Records.x.combat && !Links.x.combat.npcOnlyCombat))) { if (!this.heard) { this.heard = Links.x.cellar.GetPooledGameObject(22); this.heard.SetActive(true); this.SetHeardPosition(); this.RotateEffects(); } if (Time.timeSinceLevelLoad < this.timeSinceHeardTime + 10f && this.timeSinceHeardTime > 0f) { return; } this.PlaySoundFX(0, 7); this.timeSinceHeardTime = Time.timeSinceLevelLoad; text = Links.x.quips.GetQuip("Heard", this.quipIndex); } return; } if (text == "NPC Seen") { if (!this.seen && !Records.x.miniGame && (!Records.x.combat || (Records.x.combat && !Links.x.combat.npcOnlyCombat)) && !Links.x.AllDead()) { this.seen = Links.x.cellar.GetPooledGameObject(23); this.seen.SetActive(true); this.SetSeenPosition(); this.seenTime = Time.timeSinceLevelLoad; this.RotateEffects(); } if (Time.timeSinceLevelLoad < this.timeSinceSeenTime + 10f && this.timeSinceSeenTime > 0f) { return; } if (!Records.x.miniGame) { if (this.heard) { Links.x.cellar.ReturnPooledGameObject(22, this.heard); this.heard.SetActive(false); this.heard = null; } this.PlaySoundFX(0, 7); this.timeSinceSeenTime = Time.timeSinceLevelLoad; text = Links.x.quips.GetQuip("Seen", this.quipIndex); } return; } else { if (this.ghost || this.stats.animal) { return; } if (text == "Scared") { text = Links.x.quips.GetQuip("Scared", this.quipIndex); if (text == "") { this.PlaySoundFX(0, 7); return; } } if (text == "Found Item") { text = Links.x.quips.GetQuip("Found Item", this.quipIndex); if (text == "") { this.PlaySoundFX(0, 7); return; } } if (this.quip) { this.quip.gameObject.SetActive(false); this.quip.End(); this.quip = null; this.quipStartTime = -1f; } this.quip = Links.x.cellar.GetQuip(); if (!this.quip) { return; } if (text == "") { return; } if (this.quip) { this.quip.menu = false; TextMeshProUGUI component = this.quip.gameObject.transform.GetChild(0).gameObject.GetComponent(); component.text = ""; Vector3 localPosition = this.quip.transform.transform.localPosition; int length = text.Length; component.text = text; string text2 = ""; int num = 0; int length2 = text.Length; int num2 = 24; foreach (char c in text) { if (num > num2 && c.ToString() == " ") { num = 0; text2 += "\n"; } num++; text2 += c.ToString(); } component.text = text2; if (this.quipSound == -1) { this.quipSound = 11; } Links.x.sensory.LookAtObject(this.body.headBone, 15f, false, this, 3f, 1f, null, 0); component.enabled = true; if (Records.x.removeControls || (Records.x.dialogue && this.party) || (Records.x.miniGame && this.party) || this.party) { if (this.quip.transform.parent != Links.x.hudControl.quipHolderCinematic) { this.quip.transform.SetParent(Links.x.hudControl.quipHolderCinematic, true); } } else if (this.quip.transform.parent != Links.x.hudControl.miscFolderQuipsTransform) { this.quip.transform.SetParent(Links.x.hudControl.miscFolderQuipsTransform, true); } this.quip.emphasize = this.emphasizeQuip; this.quip.Setup(this.body); component.text = text2; this.quipStartTime = Time.time; TextMeshProTypewriterEffect textMeshProTypewriterEffect = this.quip.transform.GetChild(0).gameObject.GetComponent(); if (!textMeshProTypewriterEffect) { textMeshProTypewriterEffect = this.quip.transform.GetChild(0).gameObject.AddComponent(); } if (textMeshProTypewriterEffect) { this.quip.typewriter = textMeshProTypewriterEffect; textMeshProTypewriterEffect.headAnimator = this.body.headAnim; if (this.body.lookAtController.thisTarget) { textMeshProTypewriterEffect.lookAt = this.body.lookAtController.thisTarget.gameObject; } textMeshProTypewriterEffect.soundVolume = Links.x.options.soundVolume; if (Records.x.removeControls) { textMeshProTypewriterEffect.soundVolume *= 2f; } textMeshProTypewriterEffect.audioIndex = this.stats.voiceID; } this.quip.gameObject.SetActive(true); this.quip.textSize = new Vector2(component.preferredWidth, component.preferredHeight); if (this.party) { this.str.Clear(); this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); this.str.Append(this.stats.GetName()); this.str.Append(""); this.str.Append(": '"); this.str.Append(text); this.str.Append("'"); Links.x.gameFeed.AddFeed(this.str.ToString()); } this.emphasizeQuip = false; } return; } } // Token: 0x06000348 RID: 840 RVA: 0x00048494 File Offset: 0x00046694 public bool DoPatrolRotate() { return !this.vipFollow && !this.sailing && !Records.x.miniGame && !this.summoned && this.npc && this.nodePath.Count == 0 && !this.moving && !this.isHit && !this.downed && !this.resting && !this.dead && !this.turning && !this.stunned && !this.sleeping && !this.missing && this.CheckControls() && ((Records.x.turnBased && !this.doingAction) || !Records.x.turnBased) && !Records.x.dialogue && !this.inCombat && !Records.x.dialogue && !Links.x.gaia.loadingCharacterCreation && (!Records.x.removeControls || (Records.x.removeControls && this.ignoreRemoveControls)) && (!this.creatures || !this.creatures.creatures.neverRotate); } // Token: 0x06000349 RID: 841 RVA: 0x000485F0 File Offset: 0x000467F0 public void PatrolRotate() { this.justMoved = false; if (this.stats.merchant && !Links.x.main.body.sneaking) { this.SetRotation(Quaternion.LookRotation(Links.x.main.currentPosition - this.tr.position), false, false); } else if (this.rotLeft) { this.rotLeft = false; Quaternion quaternion = Quaternion.LookRotation(this.tr.position + this.tr.right * -3f - this.tr.position); Quaternion quaternion2 = Quaternion.LookRotation(this.tr.position + this.tr.forward * 3f - this.tr.position); Quaternion.Slerp(quaternion, quaternion2, 0.3f); Random.Range(0, 2); if (this.alwaysLookAtParty) { Quaternion quaternion3 = Quaternion.LookRotation(Links.x.main.tr.position - this.tr.position); this.SetRotation(quaternion3, true, false); } else { this.SetRotation(Quaternion.LookRotation(this.tr.position + this.tr.right * -3f - this.tr.position), false, false); } } else { this.rotLeft = true; Quaternion quaternion4 = Quaternion.Euler(this.tr.right); Quaternion quaternion5 = Quaternion.Euler(this.tr.forward); Quaternion.Slerp(quaternion4, quaternion5, 0.25f); Random.Range(0, 2); if (this.alwaysLookAtParty) { Quaternion quaternion6 = Quaternion.LookRotation(Links.x.main.tr.position - this.tr.position); this.SetRotation(quaternion6, true, false); } else { this.SetRotation(Quaternion.LookRotation(this.tr.position + this.tr.right * 3f - this.tr.position), false, false); } } this.patrolSpeed = Random.Range(0.5f, 0.8f); this.GetPatrolHoldTime(false); } // Token: 0x0600034A RID: 842 RVA: 0x0004885C File Offset: 0x00046A5C public bool Knockback(Vector3 attackPosition, int tileDistance, bool predictOnly, bool fromHit, bool flyback) { if (this.sailing) { return false; } if (this.node == null || this.dead || this.stunned || this.slideNode != null) { return true; } if (this.jumping || this.isHit) { return false; } Vector3 vector = this.tr.position + Quaternion.LookRotation(this.tr.position - attackPosition) * Vector3.forward * 2.5f * 1f; this.nodeConstraint.checkConnections = this.ConnectionNumber(); bool flag = false; if (this.ghost) { this.nodeConstraint.constrainToEnvironment = 0; tileDistance = 6; flag = true; } bool flag2 = true; if (this.ignoreNodeIDs) { flag2 = false; } GraphNode graphNode = this.GetSlideNode(vector, this.node, flag2, this.CheckCircleID(), 0); if (graphNode != null && tileDistance > 1) { Vector3 vector2 = Quaternion.LookRotation(this.tr.position - attackPosition) * Vector3.forward; vector = (Vector3)graphNode.position + vector2 * 2.5f * 2f; GraphNode graphNode2 = this.GetSlideNode(vector, graphNode, flag2, this.CheckCircleID(), 0); if (graphNode2 != null && !flag) { graphNode = graphNode2; if (tileDistance > 2 && !flag) { vector = this.tr.position + vector2 * 2.5f * 3f; GraphNode graphNode3 = this.GetSlideNode(vector, graphNode2, flag2, this.CheckCircleID(), 0); if (graphNode3 != null) { graphNode = graphNode3; if (tileDistance > 3 && !flag) { vector = this.tr.position + vector2 * 2.5f * 4f; GraphNode graphNode4 = this.GetSlideNode(vector, graphNode3, flag2, this.CheckCircleID(), 0); if (graphNode4 != null) { graphNode = graphNode4; if (tileDistance > 4 && !flag) { vector = this.tr.position + vector2 * 2.5f * 5f; GraphNode graphNode5 = this.GetSlideNode(vector, graphNode4, flag2, this.CheckCircleID(), 0); if (graphNode5 != null) { graphNode = graphNode5; if (tileDistance > 5 && !flag) { vector = this.tr.position + vector2 * 2.5f * 6f; GraphNode graphNode6 = this.GetSlideNode(vector, graphNode5, flag2, this.CheckCircleID(), 0); if (graphNode6 != null) { graphNode = graphNode6; } } } } } } } } } } if (graphNode == null || this.stats.Stuck() != 0 || this.jumping || this.stats.pinning || this.stats.pinning || (((Vector3)graphNode.position - this.tr.position).sqrMagnitude >= 25f && tileDistance <= 1) || !PathUtilities.IsPathPossible(graphNode, this.node)) { return false; } if (predictOnly) { return true; } this.randomRot = Vector3.zero; this.randomRot.x = Random.Range(5f, 6f); if (Random.Range(0, 2) == 0) { this.randomRot.x = this.randomRot.x * -1f; } this.randomRot.y = Random.Range(5f, 6f); if (Random.Range(0, 2) == 0) { this.randomRot.y = this.randomRot.y * -1f; } this.randomRot.z = Random.Range(5f, 6f); if (Random.Range(0, 2) == 0) { this.randomRot.z = this.randomRot.z * -1f; } this.slideNode = graphNode; if (Records.x.editor) { Debug.Log(((this != null) ? this.ToString() : null) + " sliding " + ((Vector3)this.slideNode.position).ToString()); } this.slideNodePosition = (Vector3)this.slideNode.position; this.ttime = 0f; this.prevPoint = this.tr.position; this.prevNodePosition = this.tr.position; this.sphere.transform.position = (Vector3)this.slideNode.position; this.ClearNodePath(); this.ClaimNode(graphNode, (Vector3)graphNode.position, false); if (fromHit) { Vector3 vector3 = (Vector3)graphNode.position; if (this.tr.position != (Vector3)graphNode.position) { this.SetRotation(Quaternion.LookRotation(this.tr.position - new Vector3(vector3.x, this.tr.position.y, vector3.z)), true, false); } this.PlayAnimation("Hit", 0f); this.SetAnimatorSpeed(1f); } else { if (!this.isHit) { this.PlayAnimation("Stop", 0f); } this.SetAnimatorSpeed(1f); } return true; } // Token: 0x0600034B RID: 843 RVA: 0x00048DA4 File Offset: 0x00046FA4 public void Sleep(Quaternion sleepRotation) { if (this.NodesCount() > 0) { this.TargetReached(); } this.sleeping = true; if (this.turning) { this.EndTurning(false); } this.AddEffect(40, ""); this.PlayAnimation("Hit Down", 0f); this.updateCount = 10; this.SetRotation(sleepRotation, false, true); this.PlayFaceAnimation(FaceAnimations.AnimationNames.Sleep); } // Token: 0x0600034C RID: 844 RVA: 0x00048E10 File Offset: 0x00047010 public void WakeUp() { this.sleeping = false; if (this.body.currentHash == this.body.hitDownHash || this.animator.GetCurrentAnimatorStateInfo(0).IsName("Hit_down_start")) { this.PlayAnimation("GetUp", 0f); } this.PlaySoundFX(1, 0); this.PlayFaceAnimation(FaceAnimations.AnimationNames.Blink); this.RemoveEffect(40, "", true); } // Token: 0x0600034D RID: 845 RVA: 0x00048E84 File Offset: 0x00047084 public void Fall(int totalFallTime) { this.downed = true; if (this.turning) { this.EndTurning(false); } if (!this.jumping) { this.PlayAnimation("Hit Down", 0f); } if (!this.stats.animal) { this.PlaySoundFX(1, 4); } else { this.PlaySoundFX(1, 8); } if (!this.stunGauge && !this.dead) { if ((float)totalFallTime > 50f) { this.stunGauge = Links.x.cellar.GetGauge(); if (this.stunGauge) { this.stunGauge.Setup("Stun", this, (float)totalFallTime); } } } else if (this.stunGauge) { this.stunGauge.UpdateTime((float)totalFallTime); } if (this.quip) { this.quip.EndFinal(); this.quip = null; } if (this.actions) { this.actions.Interrupt(); } this.PlayFaceAnimation(FaceAnimations.AnimationNames.Sleep); if (!this.dead) { bool flag = this.stunned; } if (this.moving) { this.TargetReached(); } } // Token: 0x0600034E RID: 846 RVA: 0x00048FAC File Offset: 0x000471AC public void GetUp() { this.downed = false; if (this.animID == 8 || this.body.currentHash == this.body.downHash || this.body.currentHash == this.body.downStartHash) { this.PlayAnimation("GetUp", 0f); } this.PlaySoundFX(1, 0); this.RemoveStun(); this.PlayFaceAnimation(FaceAnimations.AnimationNames.Blink); if (this.hasActions) { this.actions.EndTurn(true); } } // Token: 0x0600034F RID: 847 RVA: 0x00049034 File Offset: 0x00047234 public void SetStagger(int t) { if (t > 0) { if (!this.dead) { if (!this.dazedGauge) { this.dazedGauge = Links.x.cellar.GetGauge(); this.dazedGauge.Setup("Dazed", this, (float)t); return; } this.dazedGauge.UpdateTime((float)t); return; } } else if (this.dazedGauge) { this.EndGauge("Dazed"); } } // Token: 0x06000350 RID: 848 RVA: 0x000490AC File Offset: 0x000472AC public void RemoveStun() { if (this.stunGauge) { Links.x.cellar.ReturnGauge(this.stunGauge); this.stunGauge = null; } if (this.party && this.portrait) { this.portrait.skillBag.SetTrinketGrid(false); } } // Token: 0x06000351 RID: 849 RVA: 0x00049108 File Offset: 0x00047308 public void SetupSneakGauge(int duration) { if (!this.sneakGauge && !this.dead && !this.stunned) { this.sneakGauge = Links.x.cellar.GetGauge(); this.sneakGauge.Setup("Sneak", this, (float)duration); } } // Token: 0x06000352 RID: 850 RVA: 0x0004915A File Offset: 0x0004735A public bool CheckLights(bool checkOnly) { return false; } // Token: 0x06000353 RID: 851 RVA: 0x00049160 File Offset: 0x00047360 public void EndSneak(bool showMessage, bool fromLight) { this.EndGauge("Sneak"); if (showMessage) { this.str.Clear(); if (!this.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); } this.str.Append(this.stats.GetName()); if (!this.npc) { this.str.Append(""); } if (fromLight) { this.str.Append(" revealed by light"); } else { this.str.Append(" revealed"); } Links.x.gameFeed.AddFeed(this.str.ToString()); Animator animatedText = Links.x.cellar.GetAnimatedText("", "Revealed", false); animatedText.gameObject.transform.position = this.body.headBone.position + new Vector3(Random.Range(0f, 2f), Random.Range(0f, 2f), 0f); animatedText.gameObject.SetActive(true); } } // Token: 0x06000354 RID: 852 RVA: 0x00049294 File Offset: 0x00047494 public void EndGauge(string gaugeType) { if (gaugeType == "Stun") { if (this.stunGauge) { Links.x.cellar.ReturnGauge(this.stunGauge); this.stunGauge = null; return; } } else { if (gaugeType == "Dazed") { Links.x.cellar.ReturnGauge(this.dazedGauge); this.dazedGauge = null; return; } if (gaugeType == "Item") { Links.x.cellar.ReturnGauge(this.itemGauge); this.itemGauge = null; if (this.hasActions) { this.actions.cannotInterrupt = false; if (Records.x.ai == 1) { Links.x.combat.GetNextAction(this); } } this.inventoryTime = 0f; return; } Links.x.cellar.ReturnGauge(this.sneakGauge); this.sneakGauge = null; this.body.Sneaking(false); } } // Token: 0x06000355 RID: 853 RVA: 0x00049394 File Offset: 0x00047594 public void PartyResurrect(int healing) { this.dead = false; this.stunned = false; this.body.dead = false; this.body.SetLayer(6); this.thisCollider.enabled = true; this.CreateObjects(); Links.x.ChangeDeadList(this, false); base.gameObject.layer = 6; base.enabled = true; if (healing == -1) { healing = Random.Range(Mathf.RoundToInt((float)this.stats.HealthMax() / 20f), Mathf.RoundToInt((float)this.stats.HealthMax() / 10f)); } this.stats.SetHealth(healing, true); this.PlayAnimation("GetUp", 0f); if ((Links.x.main.tr.position - this.tr.position).sqrMagnitude > 900f) { Links.x.fellowship.JumpPosition(Links.x.main, Links.x.GetPartyID(this), this); } else { GraphNode graphNode = this.NearNode(this.tr.position, true, 0, -1, 0); this.FirstPosition(graphNode); } this.inAction = false; this.inRecovery = false; this.inQueuedAbility = false; this.portrait.SetHealthColor(); this.CircleAnimation(""); this.RemoveEffect(9, "", true); if (this.party) { this.portrait.skillBag.SetTrinketGrid(false); } if (this.revivalGem) { Links.x.cellar.ReturnPooledGameObject(123, this.revivalGem.gameObject); this.revivalGem = null; } if (Records.x.combat) { Links.x.combat.GivePartyActions(this, false); } } // Token: 0x06000356 RID: 854 RVA: 0x00049564 File Offset: 0x00047764 public void DropEverything() { int count = this.bag.Count; for (int i = 0; i < count; i++) { if (i % 2 == 0 && this.bag[i] > 1 && Links.x.library.GetInvRow(this.bag[i])._ArmorID != -1) { int num = -1; if (this.node != null) { num = (int)this.node.Area; } global::Item item = Links.x.inventory.groundBag.DropLoot(this.bag[i], this.bag[i + 1], this.sockets[i], this.sockets[i + 1], this.durability[i / 2], this, this.tr.position + new Vector3(Random.Range(-4f, 4f), 0f, Random.Range(-4f, 4f)), true, false, num); if (item) { Vector3 vector = this.tr.position + new Vector3(Random.Range(-4f, 4f), 0f, Random.Range(-4f, 4f)); RaycastHit raycastHit; if (Physics.Linecast(vector + new Vector3(0f, 10f, 0f), vector - new Vector3(0f, 20f, 0f), out raycastHit, 4194305)) { item.tr.position = raycastHit.point; } else { item.tr.position = new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); } } } } this.inventoryBag.EmptyItems(); } // Token: 0x06000357 RID: 855 RVA: 0x00049754 File Offset: 0x00047954 private void DropLoot() { if (this.ghost || this.droppedItems) { if (this.stats.animal) { return; } if (!this.stats.xmlName.Contains("RobberBaron")) { return; } } if (this.movesOnWater) { return; } this.droppedItems = true; for (int i = 0; i < 18; i++) { if (this.equippedItems[i]) { Object.Destroy(this.equippedItems[i]); this.equippedItems[i] = null; } } CreatureActions creatureActions = null; if (this.sailing && this.npc && this.creatures.creatureBoat && this.creatures.creatureBoat.leadCreature) { creatureActions = this.creatures.creatureBoat.leadCreature.gameObject.GetComponent(); } int count = this.bag.Count; for (int j = 0; j < count; j++) { if (j % 2 == 0 && this.bag[j] > 1 && this.durability[j / 2].x >= 0f) { Library.Inventory invRow = Links.x.library.GetInvRow(this.bag[j]); if (invRow._ArmorID != -1) { bool flag = this.IsSpecialItem(invRow, j); if (this.bag[j] == 2) { flag = true; } bool flag2 = true; int num = 3; if (this.stats.animal) { num = 7; } if (Random.Range(0, num) != 0) { flag2 = false; } if (flag) { flag2 = true; } if (invRow._DisplayName == "Severed Head") { flag2 = this.dead; } if (flag2) { if ((float)this.bag[j + 1] > 5f && this.npc) { int num2 = this.bag[j + 1]; this.bag[j + 1] = 5 + (int)Mathf.Round((float)num2 / 20f); } int num3 = this.bag[j + 1]; if (j == 8 || j == 10 || j == 12 || j == 14 || j == 26 || j == 28) { num3 = Random.Range(1, invRow._MaxStackSize / 4); } if (this.sailing && this.npc) { creatureActions.AddDroppedItemToList(this.bag[j], num3, (int)this.sockets[j].x, (int)this.sockets[j].y, (int)this.sockets[j].z, (int)this.sockets[j + 1].x, (int)this.sockets[j + 1].y, (int)this.sockets[j + 1].z, (int)this.durability[j / 2].x, (int)this.durability[j / 2].y); } else { Vector4 vector = this.durability[j / 2]; if (j == 18) { vector.x *= 2f; } int num4 = -1; if (this.node != null) { num4 = (int)this.node.Area; } global::Item item = Links.x.inventory.groundBag.DropLoot(this.bag[j], num3, this.sockets[j], this.sockets[j + 1], vector, this, this.tr.position + new Vector3(Random.Range(-4f, 4f), 0f, Random.Range(-4f, 4f)), true, false, num4); if (item) { Vector3 vector2 = this.tr.position + new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); RaycastHit raycastHit; if (Physics.Linecast(vector2 + new Vector3(0f, 10f, 0f), vector2 - new Vector3(0f, 20f, 0f), out raycastHit, 4194305)) { item.tr.position = raycastHit.point; } else { item.tr.position += new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); } } } this.bag[j] = 0; this.bag[j + 1] = 0; this.sockets[j] = Vector3.zero; this.sockets[j + 1] = Vector3.zero; this.durability[j / 2] = Vector4.zero; } } } } } // Token: 0x06000358 RID: 856 RVA: 0x00049C58 File Offset: 0x00047E58 private bool IsSpecialItem(Library.Inventory row, int rowNum) { bool flag = true; if (row._Tag.Contains("Component")) { flag = false; } return flag; } // Token: 0x06000359 RID: 857 RVA: 0x00049C7C File Offset: 0x00047E7C public int SellPriceOfDrops() { int count = this.bag.Count; int num = 0; for (int i = 0; i < count; i++) { if (i % 2 == 0 && this.bag[i] > 1 && this.durability[i / 2].x >= 0f) { Library.Inventory invRow = Links.x.library.GetInvRow(this.bag[i]); if (invRow._ArmorID != -1 && (this.IsSpecialItem(invRow, i) || Random.Range(0, 3) == 0)) { int num2 = this.bag[i + 1]; if (num2 == 0) { num2 = 1; } if (i == 8 || i == 10 || i == 12 || i == 14 || i == 26 || i == 28) { num2 = Random.Range(1, invRow._MaxStackSize / 4); } if (!invRow._Stackable) { num2 = 1; } if (invRow._NeedFullStack) { num2 = 0; } int num3 = invRow._SellPrice * num2; num += num3; Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " sell ", invRow._Name, " amount ", num2.ToString(), " for ", num3.ToString() })); } } } return num; } // Token: 0x0600035A RID: 858 RVA: 0x00049DE0 File Offset: 0x00047FE0 public void EndStun() { this.stunned = false; this.ignoreNodeIDs = false; if (!this.tr) { this.tr = base.transform; } if (this.sailing && this.npc) { Debug.Log(this.boat); if (this.boat && !this.boat.navigator) { this.boat.SetBoatNavigator(this, false); } } this.FirstPosition(null); this.PlayAnimation("GetUp", 0f); this.stats.state = "NormalDazed"; this.PlaySoundFX(0, 0); this.stats.SetHealth(this.stats.HealthMax(), false); if (this.creatures) { this.creatures.UpdateCharacter(this); } this.CircleAnimation("Idle"); this.wasStunned = true; if (this.thisCollider) { this.thisCollider.enabled = true; } if (this.party) { this.stats.SetHealth((int)((float)this.stats.HealthMax() / 2f), false); } if (this.npc) { if (this.creatures) { this.creatures.CheckQuestSwap(); } this.EndStunLoot(); this.SetupNPCAfterLoadedVariables(); Links.x.diorama.HasForSaleGroundItems(this.creatures.creatures); } this.droppedItems = false; } // Token: 0x0600035B RID: 859 RVA: 0x00049F5C File Offset: 0x0004815C public void EndStunLoot() { if (this.ghost) { return; } if (this.sailing) { return; } List savedBag = this.stats.savedBag; List savedDur = this.stats.savedDur; for (int i = 0; i < savedBag.Count; i++) { if (i % 2 == 0 && savedBag[i] > 1 && savedDur[i / 2].x >= 0f && !this.sailing) { int num = savedBag[i]; global::Item item = Links.x.diorama.CheckGroundForItem(this.creatures.creatures, this.creatures.GetCharacterIndex(this), num, this.tr.position, this, i); if (item) { this.bag[i] = item.ID; this.bag[i + 1] = item.stackSize; this.durability[i / 2] = item.durability; this.sockets[i] = item.socketA; this.sockets[i + 1] = item.socketB; item.DestroyItem(false, false); } else { if (i == 0 || i == 32) { this.bag[i] = 1; this.durability[i / 2] = new Vector4(100f, 0f, 0f, 0f); } else { this.bag[i] = 0; this.durability[i / 2] = Vector4.zero; } this.sockets[i] = Vector3.zero; this.sockets[i + 1] = Vector3.zero; this.bag[i + 1] = 0; } } } } // Token: 0x0600035C RID: 860 RVA: 0x0004A130 File Offset: 0x00048330 public void Stunned(bool fromSave) { this.stunned = true; if (this.hasActions) { this.EndCombat(); this.actions.EndActions(); } if (this.moving) { this.TargetReached(); } if (this.turning) { this.EndTurning(false); } this.ignoreNodeIDs = false; if (this.party) { if (this.selected) { this.RemoveFromSelected(false); } if (Links.x.AllStunned() && Links.x.gaia.sceneLoaded) { Links.x.fellowship.StartDeathSequence(); } } if (this.dodgeFX) { this.dodging = false; Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX = null; } if (this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } this.moving = false; if (this.sleeping) { this.RemoveEffect(40, "", true); } this.sleeping = false; this.stats.SetHealth(0, false); this.doingHit = false; this.centerOfAttention = false; this.overlapping = false; this.body.EndBlink(); this.orbitTarget = null; if (this.isHit) { this.hitTime += 50f; } this.stats.state = "Stunned"; bool flag = Links.x.sensory.CheckProof(this); if (!fromSave) { this.numberOfTimesKilled += 1f; } if (flag && this.npc) { this.stats.state = "StunnedExile"; if (!fromSave) { QuestLog.SetQuestState(this.stats.characterRow._Quest, QuestState.WaitingForExileIsland); Records.x.AddStunned(this, false); if (Records.x.CanTurnInExile(this.stats.characterRow._Quest, this.stats.xmlName)) { Links.x.combat.exileCharacter = this; } } } Records.x.CheckStunnedStates(); this.PlayFaceAnimation("Sleep"); if (!fromSave) { int num = 24; if (this.creatures) { this.creatures.AddTimeOfDeath(Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) + (float)num, this); } else { this.timeOfDeath = Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) + (float)num; } if (this.sailing && this.boatNavigator) { this.boat.SetBoatNavigator(null, false); } if (this.creatures && this.creatures.creatures.pickOneLeader && !this.stats.defendMainInCombat) { this.creatures.LeaderDied(this); } } if (this.thisCollider) { this.thisCollider.enabled = false; } if (!fromSave) { this.PlaySoundFX(0, 3); } this.hovering = false; if (this.hovering) { this.HoverOut(false); } this.body.Hover(false, false); if (this.creatures && !fromSave) { this.creatures.UpdateCharacter(this); } if (!fromSave) { this.PlayFaceAnimation(FaceAnimations.AnimationNames.Sleep); } if (!this.isHit) { this.PlayAnimation("Hit Down", 0f); } if (Links.x.gaia.sceneLoaded && Links.x.gameCard.hoverCharacter == this) { Links.x.gameCard.EndHover(this, false); } if (this.inCircle && this.npc) { this.group.LeaveCircle(this); } bool flag2 = true; if (this.sailing && this.npc) { if (this.creatures.creatureBoat) { if (this.creatures.creatureBoat.leadCreature) { this.creatures.creatureBoat.leadCreature.gameObject.GetComponent(); } else { flag2 = false; } } else { flag2 = false; } } if (this.party) { flag2 = false; } if (this.sailing) { flag2 = false; } if (flag2 && !fromSave) { this.DropLoot(); } else if (flag2) { int count = this.bag.Count; for (int i = 0; i < count; i++) { if (i % 2 == 0 && this.bag[i] > 1 && this.durability[i / 2].x >= 0f) { this.bag[i] = 0; this.bag[i + 1] = 0; this.sockets[i] = Vector3.zero; this.sockets[i + 1] = Vector3.zero; this.durability[i / 2] = Vector4.zero; } } } if (this.party) { Effects effects = base.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.source = this; effects.target = this; effects.fromLoad = false; effects.effectName = "Stunned"; effects.sourceLevel = 0f; effects.Inflicted(false); this.node.ID = this.nodeStationaryID; this.stats.SetHealth(0, false); this.portrait.SetHealthColor(); if (this.portrait) { this.portrait.skillBag.SetTrinketGrid(false); } } else { if (this.stats.xmlName == "RenazinSpy") { Records.x.AddQuestToTimer("D6_RenazinInformant", 28f, "any", "activePart2", false); } if (this.stats.xmlName == "RozafirStoreKeep") { Links.x.dialogue.HealRozafirFarmers(); } if (this.circle) { this.circle.SetActive(false); } this.RemoveLastNode(false); this.lastNode = null; List list = new List(); foreach (Effects effects2 in this.stats.effects) { list.Add(effects2); } for (int j = 0; j < list.Count; j++) { list[j].Healed(true, false); } this.stats.ClearAilments(); Links.x.diorama.CheckLinkedCharacters(this); } this.droppedItems = true; } // Token: 0x0600035D RID: 861 RVA: 0x0004A7F8 File Offset: 0x000489F8 public void AddDead() { Records.x.AddDead(this); this.dead = true; } // Token: 0x0600035E RID: 862 RVA: 0x0004A80C File Offset: 0x00048A0C public void Dead(bool fromSave, bool fromCombat, bool permanent) { this.dead = true; if (this.turning) { this.EndTurning(false); } this.moving = false; if (this.sleeping) { this.sleeping = false; this.RemoveEffect(40, "", true); } this.doingHit = false; this.centerOfAttention = false; this.overlapping = false; this.jumpingAreas = false; this.meshAlwaysOff = false; this.inAction = false; this.inRecovery = false; this.inQueuedAbility = false; if (this.hasActions) { this.EndCombat(); this.actions.EndActions(); } if (this.statusRing) { this.statusRing.End(); this.statusRing = null; } if (this.inCircle && this.npc) { this.group.LeaveCircle(this); } this.body.EndBlink(); this.orbitTarget = null; bool flag = false; if (Records.x.dialogue && Links.x.dialogue.diaFile.Contains("PostingMaster")) { flag = true; } if (!this.party || (this.party && flag)) { this.stats.state = "Dead"; this.RemoveLastNode(false); this.lastNode = null; } else { this.node.ID = this.nodeStationaryID; } if (this.isHit) { this.hitTime += 50f; } if (this.dodgeFX) { this.dodging = false; Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX = null; } if (Links.x.gaia.sceneLoaded && Links.x.gameCard.hoverCharacter == this) { Links.x.gameCard.EndHover(this, false); } this.PlayFaceAnimation(FaceAnimations.AnimationNames.Dead); if (!fromSave) { this.numberOfTimesKilled += 1f; } if (!fromSave && !this.missing) { if (this.stats.characterRow._Quest != "") { bool flag2 = false; if (this.stats.characterRow._QuestProofState != "") { if (Links.x.sensory.CheckProof(this) || Records.x.IsFelon(this.stats.xmlName)) { flag2 = true; QuestLog.SetQuestState(this.stats.characterRow._Quest, QuestState.PerpIsDead); if (this.stats.xmlName == "RenazinSpy") { Records.x.AddQuestToTimer("D6_RenazinInformant", 28f, "any", "activePart2", false); } } if (this.stats.xmlName == "RozafirStoreKeep") { Records.x.AddQuestToTimer("D6_NewStoreKeep", 24f, "unassigned", "active", false); Links.x.dialogue.HealRozafirFarmers(); } } if (this.stats.characterRow._SetQuestStateOnDeath != "" && !flag2) { QuestState questState = Records.x.StringToQuestState(this.stats.characterRow._SetQuestStateOnDeath); Debug.Log(string.Concat(new string[] { "Setting death state ", this.stats.characterRow._Quest, " ", questState.ToString(), " ", this.stats.characterRow._SetQuestStateOnDeath })); QuestLog.SetQuestState(this.stats.characterRow._Quest, questState); if (this.stats.xmlName == "RozafirStoreKeep") { Records.x.AddQuestToTimer("D6_LicechGuardsLeave", 2f, "unassigned", "active", false); Links.x.dialogue.HealRozafirFarmers(); } if (this.stats.xmlName == "RenazinSpy") { Records.x.AddQuestToTimer("D6_RenazinInformant", 28f, "any", "activePart2", false); } Links.x.diorama.CheckQuestActivations(); } Records.x.CheckStunnedStates(); Records.x.KilledStunnedFelon(this.stats.xmlName); } else if (this.stats.xmlName.Contains("FishMonsterWhite") && Links.x.gameplay.IsDay() && this.node.GraphIndex == 0U) { if (QuestLog.GetQuestState("Sela_Quest") != QuestState.Unassigned) { Links.x.main.StartQuip("Sela will be pleased"); } if (QuestLog.GetQuestState("Sela_Quest") != QuestState.Complete) { Debug.Log("Killed fish monster in sunlight"); QuestLog.SetQuestState("Sela_Quest", QuestState.Success); MasterAudio.PlaySoundAndForget("Feedback", 0.5f, new float?(1f), 0f, "Song Learned", null); this.str.Clear(); this.str.Append("Sela is pleased"); Links.x.gameFeed.AddFeed(this.str.ToString()); } } if (!this.summoned) { Records.x.KilledStunnedVictim(this.stats.xmlName); } if (this.creatures && this.creatures.creatures.pickOneLeader && !this.stats.defendMainInCombat) { this.creatures.LeaderDied(this); } if (this.npc && !this.summoned) { Links.x.diorama.CheckCampCleared(); Links.x.diorama.CheckLinkedCharacters(this); } } else if (!fromSave && this.stats.characterRow._Quest != "") { Records.x.KilledStunnedFelon(this.stats.xmlName); } if (!this.party) { if (this.sailing && this.boatNavigator) { this.boat.SetBoatNavigator(null, false); } this.ZeroPreviousNode(); this.lastNode = null; if (!this.sailing) { if (this.node != null && this.radius == 1f && (this.node.ID == this.nodeStationaryID || this.node.ID == this.nodeMovingID)) { this.node.ID = 0; this.node.Tag = 0U; } if (this.radius > 1f && this.node != null) { this.node.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.node.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } } this.timeOfDeath = float.PositiveInfinity; if (this.creatures) { this.timeOfDeath = Links.x.gameplay.seconds + Random.Range(70f, 90f); float num = Random.Range(24f, 48f); if (this.creatures.sailing) { num = 26f; } this.creatures.AddTimeOfDeath((float)Links.x.gameplay.GetCurrentGameTimeHours() + num, this); } if (!fromSave) { float num2 = Random.Range(45f, 80f); if (!this.creatures.creatures.hasLeader) { num2 = Random.Range(45f, 80f) * 7f; } if (!this.ghost) { if (this.stats.characterRow._DeathType == "None" || permanent) { this.stats.state = "Swallowed"; if (!this.goreObj) { this.PlayAnimation("Death", 0f); } Links.x.sensory.AddMP(this); } else if (this.creatures.temporary) { this.stats.state = "Gone"; this.PlayAnimation("Death", 0f); Links.x.sensory.AddMP(this); } else if (Links.x.diorama.InResurrectionFog(this.tr.position) && (this.stats.characterRow._DeathType == "Volling" || this.stats.characterRow._DeathType == "Animal" || this.stats.characterRow._DeathType == "Resurrect")) { this.stats.state = "Purgatory"; if (!this.goreObj) { this.PlayAnimation("Death", 0f); } this.timeOfDeath = Links.x.gameplay.seconds + num2; this.creatures.AddTimeOfDeath(this.timeOfDeath, this); if (!this.ghost) { Links.x.sensory.AddMP(this); } } else { this.stats.state = "Swallowed"; if (!this.goreObj) { this.PlayAnimation("Death", 0f); } GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(63); pooledGameObject.transform.position = this.tr.position; pooledGameObject.SetActive(true); Links.x.cameraEffects.AddRemoveGhost(pooledGameObject.transform.GetChild(0).gameObject.GetComponent(), true); Links.x.sensory.AddMP(this); } if (this.stats.characterRow._DeathType == "Bat") { base.StartCoroutine(this.SpawnDeathCreature()); } } else { if (Links.x.diorama.mapCanResurrect) { this.stats.state = "Purgatory"; } else { this.stats.state = "Swallowed"; Links.x.sensory.AddMP(this); } this.PlayAnimation("Dead", 0f); this.timeOfDeath = Links.x.gameplay.seconds + num2; this.creatures.AddTimeOfDeath(this.timeOfDeath, this); } } this.gos.Remove(this); this.ReturnPooledObjects(); } else if (flag) { if (Links.x.diorama.InResurrectionFog(this.tr.position)) { this.stats.state = "Purgatory"; } else { this.stats.state = "Swallowed"; } this.timeOfDeath = Links.x.gameplay.seconds + Random.Range(45f, 80f); } else if (!this.revivalGem) { GameObject pooledGameObject2 = Links.x.cellar.GetPooledGameObject(123); this.revivalGem = pooledGameObject2.GetComponent(); pooledGameObject2.transform.SetParent(this.tr, false); this.SetRevivalGemPosition(); pooledGameObject2.SetActive(true); this.revivalGem.interactCharacter = this; this.revivalGem.LoadPuzzleInfo(); } if (this.body.dodgeTime > 0f) { this.body.Dodge(false); } if (this.thisCollider) { this.thisCollider.enabled = false; } if (!this.party) { List list = new List(); foreach (Effects effects in this.stats.effects) { list.Add(effects); } for (int i = 0; i < list.Count; i++) { list[i].Healed(true, false); } this.stats.ClearAilments(); } if (fromCombat) { this.PlaySoundFX(0, 3); } this.hovering = false; if (!fromCombat) { this.HoverOut(false); } if (this.party) { if (this.portrait) { this.portrait.skillBag.SetTrinketGrid(false); } this.PlayAnimation("Death", 0f); if (Links.x.AllDead()) { Links.x.fellowship.StartDeathSequence(); } else if (Links.x.main == this) { base.StartCoroutine(this.WaitToChangeLeader()); } if (flag) { this.ReturnPartyPooledObjects(); this.ReturnPooledObjects(); } } this.body.Hover(false, false); if (!this.missing && (this.npc || (this.party && flag) || (this.summoned && this.charmed) || (this.npc && this.body.goreObj))) { Links.x.ChangeDeadList(this, true); } if (fromCombat) { this.PlayAnimation("Death", 0f); this.PlayFaceAnimation("Sleep"); } if (this.missing) { this.body.SetMeshState(false, true); this.visible = 0; this.stats.state = "Fled"; } if ((!this.party || (this.party && flag)) && this.gos != null) { int num3 = this.gos.IndexOf(this); if (num3 > -1) { this.gos.RemoveAt(num3); } } if (this.npc) { Links.x.ChangeNPCList(this, false); } else if ((this.party && flag) || !this.party) { Links.x.ChangePartyList(this, false, this.party); } this.dead = true; if (this.creatures && !fromSave) { this.creatures.UpdateCharacter(this); } if (!this.missing) { if (!fromSave && this.npc) { Links.x.combat.allDeadCount++; } bool flag3 = true; if (this.sailing && this.npc) { if (this.creatures.creatureBoat) { if (this.creatures.creatureBoat.leadCreature) { this.creatures.creatureBoat.leadCreature.gameObject.GetComponent(); } else { flag3 = false; } } else { flag3 = false; } } if (flag3 && fromCombat && (this.npc || flag)) { this.DropLoot(); } } if (this.party && flag) { Links.x.inventory.ClearBag(this); Links.x.fellowship.CompanionDied(); } base.gameObject.layer = 0; if (!this.party && !this.isHit) { base.enabled = false; } this.deadInactive = false; if (this.summoned) { if (!this.creatures.GetTileEffect()) { this.creatures.Unsummon(false); if (!this.pipeSummons && fromCombat) { GameObject pooledGameObject3 = Links.x.cellar.GetPooledGameObject(32); pooledGameObject3.transform.position = this.tr.position; pooledGameObject3.SetActive(true); } } else { this.creatures.GetTileEffect().RemoveSummons(this.creatures, this.tr.position); } } if (this.party && !fromSave && flag) { if (Records.x.combat && Links.x.diorama.InResurrectionFog(this.tr.position)) { Records.x.AddTemporaryCreature(this.stats.GetName(), "Ghost", "GhostMap", Links.x.diorama.sceneName, 2, this.tr.position, "Resurrected", this.stats.GetName(), this.stats.HealthMax() / 2, "", 0, 0f, "GhostMap", this.tr.position, false); } this.stats.SetHealth(0, false); this.TurnScriptsOff(); } this.droppedItems = true; } // Token: 0x0600035F RID: 863 RVA: 0x0004B85C File Offset: 0x00049A5C private IEnumerator WaitToChangeLeader() { yield return new WaitForSeconds(0.5f); if (this == Links.x.main && this.dead && (Links.x.creation || (Records.x.InCombat(false) && !Records.x.dialogue && !Records.x.inMenus))) { Character nearestParty = Links.x.GetNearestParty(this.tr.position); if (nearestParty) { nearestParty.SetAsLeader(); Links.x.fellowship.SingleSelected(nearestParty); nearestParty.AddToSelected(false, true); nearestParty.SetAsLeader(); Links.x.rtsCamera.Follow(nearestParty.tr, nearestParty, false); } } yield break; } // Token: 0x06000360 RID: 864 RVA: 0x0004B86B File Offset: 0x00049A6B private IEnumerator SpawnDeathCreature() { yield return new WaitForSeconds(0.0001f); CreatureActions creatureActions = this.creatures; Vector3 position = this.tr.position; string text = "SummonBatSpawn"; Quaternion rotation = this.tr.rotation; bool flag = false; Character firstCharacter = Links.x.gaia.CreateCreature(position, rotation, text, flag, 0f, 1).GetFirstCharacter(); firstCharacter.TransferLKP(this); firstCharacter.SetPosition(position, null); firstCharacter.SetRotation(rotation, false, false); firstCharacter.hostility = 2; firstCharacter.OverridePocketPause(); firstCharacter.SetAnimatorSpeed(1f); firstCharacter.UpdateLKP(Links.x.main, Links.x.main.node, "Attack", true); firstCharacter.jumpingPosition = false; if (!Records.x.InCombat(false)) { Links.x.combat.StartCombat(Links.x.main, firstCharacter, false, true); } Links.x.combat.AddParty(firstCharacter, false, null, true); yield break; } // Token: 0x06000361 RID: 865 RVA: 0x0004B87C File Offset: 0x00049A7C public void AddBlood(Character actionTarget) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(5); pooledGameObject.gameObject.SetActive(true); pooledGameObject.transform.position = actionTarget.body.HeadPosition(0f); Quaternion quaternion = this.tr.rotation; if (actionTarget != this.tr && this.tr.position != actionTarget.tr.position) { quaternion = Quaternion.LookRotation(this.tr.position - actionTarget.tr.position); } pooledGameObject.transform.rotation = quaternion; actionTarget.PlayAnimation("Hit", 0f); } // Token: 0x06000362 RID: 866 RVA: 0x0004B933 File Offset: 0x00049B33 public void Explode() { if (!this.exploded) { this.exploded = true; Links.x.diorama.BombBomb(this.currentPosition, this); } } // Token: 0x06000363 RID: 867 RVA: 0x0004B95C File Offset: 0x00049B5C public void AddDamage(Character actionTarget, float damage, bool canShowDeath, bool interrupt, bool isMainTarget, string hitType, float hitTimeAdd, float staminaReduction) { if (actionTarget.isBoro) { return; } GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(5); pooledGameObject.gameObject.SetActive(true); pooledGameObject.transform.position = actionTarget.body.HeadPosition(0f); Quaternion quaternion = this.tr.rotation; if (actionTarget != this.tr && this.tr.position != actionTarget.tr.position) { quaternion = Quaternion.LookRotation(this.tr.position - actionTarget.tr.position); } pooledGameObject.transform.rotation = quaternion; actionTarget.PlaySoundFX(0, 2); if (!actionTarget.summoned && Records.x.InCombat(false)) { Links.x.cellar.DropPickup(true, this.torsoPosition, actionTarget); } bool flag = false; if (actionTarget.stats.xmlName.Contains("Stack") && actionTarget.body.model.Contains("Stack")) { flag = true; } if (isMainTarget) { MasterAudio.PlaySound3DAtVector3AndForget("Blood Hit", actionTarget.tr.position, 1f, new float?(1f), 0.1f, "", null); Animator animator = Links.x.cellar.GetBlood(); animator.gameObject.SetActive(true); animator.transform.position = actionTarget.body.HeadPosition(0f); animator.transform.rotation = quaternion; int num = Random.Range(0, 5); if (num == 1) { animator.Play("Blood_animation_B"); } if (num == 2) { animator.Play("Blood_animation_C"); } if (num == 3) { animator.Play("Blood_animation_D"); } if (num == 4) { animator.Play("Blood_animation_E"); } animator = Links.x.cellar.GetBlood(); animator.gameObject.SetActive(true); animator.transform.position = actionTarget.body.HeadPosition(0f) - new Vector3(0f, 0.5f, 0f); animator.transform.rotation = quaternion; int num2 = Random.Range(0, 5); if (num2 == 1) { animator.Play("Blood_animation_B"); } if (num2 == 2) { animator.Play("Blood_animation_C"); } if (num2 == 3) { animator.Play("Blood_animation_D"); } if (num2 == 4) { animator.Play("Blood_animation_E"); } } bool flag2 = Records.x.noDamage; if (!Records.x.editor) { flag2 = false; } if ((!actionTarget.party || (actionTarget.party && !flag2)) && damage != 0f && !Records.x.miniGame && !flag) { actionTarget.stats.AddHealth((int)Mathf.Ceil(-1f * damage)); } bool flag3 = true; bool flag4 = false; if (damage != 0f) { actionTarget.stats.hitCount++; if (actionTarget.npc) { actionTarget.stats.AddStamina(-3f - staminaReduction); } if (actionTarget.stats.pinning) { actionTarget.stats.pinHitCount++; } bool flag5 = true; bool flag6 = false; bool flag7 = false; bool flag8 = false; bool flag9 = false; if (flag) { flag5 = false; flag9 = true; if (actionTarget.body.model.Contains("Stack")) { flag3 = false; actionTarget.stats.SetHealth(actionTarget.stats.HealthMax(), false); actionTarget.UpdateModel("CropGoblinGrunt"); actionTarget.animator.runtimeAnimatorController = Links.x.archives.GetOverrideController("_CropGoblinGrunt_Unarmed"); CreatureActions creatureActions = actionTarget.creatures; Vector3 vector = actionTarget.tr.position + Quaternion.LookRotation(actionTarget.currentPosition - this.currentPosition) * Vector3.forward; if (actionTarget.node != null) { GraphNode graphNode = actionTarget.node.ClosestConnection(actionTarget.node, 0, 0, 25f, vector, 0, 0, actionTarget.nodeConstraint, 0); if (graphNode != null) { vector = (Vector3)graphNode.position; } } string text = "CropGoblin"; Quaternion rotation = actionTarget.tr.rotation; Character firstCharacter = Links.x.gaia.CreateCreature(vector, rotation, text, false, 0f, 1).GetFirstCharacter(); firstCharacter.TransferLKP(actionTarget); firstCharacter.SetPosition(vector, null); actionTarget.PlayAnimation("Idle", 0f); firstCharacter.SetRotation(rotation, false, false); if (this.npc) { firstCharacter.hostility = 2; } actionTarget.stats.SetHealth(actionTarget.stats.HealthMax(), false); Links.x.combat.AddParty(firstCharacter, false, null, true); } } float num3 = 8f; float num4 = 15f; if (actionTarget.party) { num4 = num3; } if (hitType.Contains("Bounce") && this.stats.Stuck() == 0 && !this.ambushing && !actionTarget.stats.pinned) { flag4 = true; Quaternion quaternion2 = Quaternion.LookRotation(this.currentPosition - actionTarget.currentPosition); actionTarget.SetRotation(quaternion2, false, true); if ((float)this.stats.weightBase < 20f) { flag8 = true; } bool flag10 = false; if (actionTarget.hasActions && actionTarget.actions.ai.jumping) { flag10 = true; } if (this.party && actionTarget.stats.Level() > this.stats.Level() && !flag10) { flag9 = true; } if (actionTarget.mainSelected || Links.x.combat.miniEvent) { if (Links.x.combat.miniEvent && !Links.x.combat.bubbleEvent && actionTarget.mainSelected) { flag5 = false; } if (Links.x.combat.miniEvent && Links.x.combat.bubbleEvent && actionTarget == Links.x.combat.bubbleEventTarget) { flag5 = false; } if (actionTarget.mainSelected && Links.x.combat.bubbleEvent) { flag6 = true; } } if (actionTarget.npc && actionTarget.stats.animal && actionTarget.stamina) { flag7 = actionTarget.stamina.hasArmor; } if (flag10) { flag6 = true; } bool flag11 = false; if (Links.x.combat.inPocketAttack && this.party) { if (actionTarget == Links.x.combat.rallyTarget) { flag11 = true; } if (Links.x.rallyStage.playing && Links.x.rallyStage.stage == "Bow") { flag11 = false; } } bool flag12 = false; if ((!actionTarget.party || flag6) && actionTarget.stats.characterRow._Height < 4f && actionTarget.animID != 53 && (!flag7 || flag11) && !flag8 && !flag9) { flag12 = true; } if (flag12 && (this.sailing || this.movesOnWater)) { flag12 = false; flag5 = true; } if (flag12) { if (hitType.Contains("Small")) { actionTarget.Bounce(this, "Small Hit", hitTimeAdd); } else { actionTarget.Bounce(this, "Normal Hit", hitTimeAdd); } } else if (flag5 && !flag7 && !flag8 && !flag9) { actionTarget.isHit = true; if (actionTarget.actions) { actionTarget.actions.Interrupt(); } actionTarget.hitTime = Links.x.gameplay.seconds + num4 + hitTimeAdd; actionTarget.hitTimeReal = Time.timeSinceLevelLoad; actionTarget.PlayAnimation("Hit Down", 0f); } else { flag4 = false; } } else if (!actionTarget.jumping && hitType == "Down" && !this.ambushing && !actionTarget.stats.pinned) { actionTarget.isHit = true; if (actionTarget.actions) { actionTarget.actions.Interrupt(); } actionTarget.hitTime = Links.x.gameplay.seconds + num4 + hitTimeAdd; actionTarget.hitTimeReal = Time.timeSinceLevelLoad; actionTarget.PlayAnimation("Hit Down", 0f); if (Links.x.combat.inPocketAttack) { actionTarget.OverridePocketPause(); } flag4 = true; } } if (!flag4) { if (actionTarget.animID != 53) { if (!interrupt) { actionTarget.PlayAnimation("Hit", 0f); } else { actionTarget.PlayAnimation("HitInterrupt", 0f); } if (Links.x.combat.inPocketAttack) { actionTarget.OverridePocketPause(); } } } else if (interrupt && this.actions && !this.jumping) { this.actions.Interrupt(); } if (actionTarget.stats.hasHitAI) { actionTarget.stats.DoHitAI(this); } if (damage == 0f) { return; } if (actionTarget.stats.HealthCurrent() < 0) { actionTarget.stats.SetHealth(0, false); } if (actionTarget.stats.HealthCurrent() <= 0 && !actionTarget.dead && canShowDeath && flag3) { bool flag13 = this.stats.ShouldStun(actionTarget); if (actionTarget.summoned) { flag13 = false; } if (actionTarget.ghost) { flag13 = false; } if (actionTarget.movesOnWater) { flag13 = false; } if (actionTarget.stats.hasEveryAttackAI && actionTarget.stats.xmlName.Contains("Bomb")) { flag13 = false; actionTarget.Explode(); } if (actionTarget.stats.xmlName.Contains("GraveKeeper")) { if (actionTarget.stats.xmlName.Contains("LocalGraveKeeper") && Links.x.diorama.mapCanResurrect) { flag13 = true; } if (!actionTarget.stats.xmlName.Contains("Local")) { flag13 = false; } } if (this.ghost) { flag13 = false; } if (actionTarget.stats.xmlName.Contains("Acorn")) { flag13 = false; } if (actionTarget.npc) { int xp = actionTarget.stats.characterRow._XP; Links.x.fellowship.AddXP(xp, actionTarget, false); } if (this.party) { this.stats.killCount++; } if (!flag13 || actionTarget.party) { this.str.Clear(); if (!actionTarget.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(actionTarget)); } this.str.Append(actionTarget.stats.GetName()); if (!actionTarget.npc) { this.str.Append(""); } if (!actionTarget.party) { this.str.Append(" is dead"); } else { this.str.Append(" is knocked out"); } Links.x.gameFeed.AddFeed(this.str.ToString()); actionTarget.body.lookAtController.EndLook(); MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", this.tr.position, 1f, new float?(1f), 0.5f, "", null); MasterAudio.PlaySound3DAtVector3AndForget("Death", this.tr.position, 1f, new float?(1f), 0f, "", null); if (this.party && this.stats.HasSpellbook()) { this.stats.AddSpiritFromKill(3f); } if (!actionTarget.party) { GameObject gameObject = Links.x.archives.CheckRecycledDeaths(actionTarget.stats.characterRow._DeathID, "Random"); if (gameObject == null) { int num5 = Random.Range(0, 3); string text2 = ""; if (num5 == 0) { text2 = "Random"; } if (num5 == 1) { text2 = "Head"; } if (num5 == 2) { text2 = "Critical"; } gameObject = Links.x.library.GetDeath(actionTarget.stats.characterRow._DeathID, text2); if (gameObject) { GameObject gameObject2 = Object.Instantiate(gameObject, actionTarget.tr.position, actionTarget.tr.rotation, Links.x.cellar.tr); gameObject2.SetActive(false); gameObject = gameObject2; Gore gore = gameObject2.AddComponent(); actionTarget.body.goreScript = gore; gore.Setup(); } } if (!actionTarget.goreObj) { actionTarget.goreObj = gameObject; actionTarget.goreType = "Random"; if (gameObject) { Vector3 position = actionTarget.tr.position; position.y -= 1f; gameObject.transform.parent = null; gameObject.transform.position = actionTarget.tr.position + new Vector3(0f, 0.5f, 0f); gameObject.transform.rotation = actionTarget.tr.rotation; actionTarget.body.StartDead(position); Links.x.combat.preDome = false; Gore gore2 = gameObject.GetComponent(); if (gore2) { actionTarget.body.goreScript = gore2; gore2.DoReset(); } else { gore2 = gameObject.AddComponent(); actionTarget.body.goreScript = gore2; gore2.Setup(); } gore2.character = actionTarget; gore2.startTime = Links.x.gameplay.seconds; gameObject.SetActive(true); float num6 = 600f; if (actionTarget.stats.xmlName.Contains("Bomb")) { actionTarget.body.AddExplosionDeadForce(); } else { actionTarget.body.AddDeadForce(Quaternion.LookRotation(position - this.tr.position) * Vector3.forward, num6); } if (Links.x.combat.inPocketAttack && Links.x.rallyStage.playing) { actionTarget.body.PocketGore(false); } } else { Vector3 position2 = actionTarget.tr.position; position2.y -= 1f; actionTarget.body.StartDead(position2); } } } bool flag14 = false; if (!actionTarget.dead) { actionTarget.Dead(false, true, flag14); } if (actionTarget.npc) { Links.x.combat.Enraged(); } if (!actionTarget.summoned && Records.x.InCombat(false) && !actionTarget.ghost) { Links.x.cellar.DropPickup(false, this.torsoPosition, actionTarget); return; } } else { this.str.Clear(); if (!actionTarget.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(actionTarget)); } this.str.Append(actionTarget.stats.GetName()); if (!actionTarget.npc) { this.str.Append(""); } if (this.stats.xmlName.Contains("LocalGraveKeeper")) { this.str.Append(" is dormant"); } else { this.str.Append(" is stunned"); } Links.x.gameFeed.AddFeed(this.str.ToString()); actionTarget.body.lookAtController.EndLook(); MasterAudio.PlaySound3DAtVector3AndForget("Body Fall", actionTarget.tr.position, 1f, new float?(1f), 0.5f, "", null); actionTarget.Stunned(false); } } } // Token: 0x06000364 RID: 868 RVA: 0x0004C97C File Offset: 0x0004AB7C public void Bounce(Character attacker, string type, float hitTimeAdd) { if (this.sailing || this.movesOnWater) { this.isHit = true; if (this.actions) { this.actions.Interrupt(); } float num = 8f; float num2 = 15f; if (this.party) { num2 = num; } this.hitTime = Links.x.gameplay.seconds + num2 + hitTimeAdd; this.hitTimeReal = Time.timeSinceLevelLoad; this.PlayAnimation("Hit Down", 0f); if (Links.x.combat.inPocketAttack) { this.OverridePocketPause(); return; } } else { this.isHit = true; if (this.stats.characterRow._Height > 4f) { this.isHit = true; this.hitTime = Links.x.gameplay.seconds + 10f; this.hitTimeReal = Time.timeSinceLevelLoad; this.PlayAnimation("Hit", 0f); return; } if (type == "Small Hit") { this.hitTime = Links.x.gameplay.seconds + 5f; } this.hitTime = Links.x.gameplay.seconds + 15f; this.hitTime += hitTimeAdd; if (this.sleeping) { this.WakeUp(); } this.slideNode = null; this.slideNodePosition = Vector3.zero; if (!this.bouncer) { GameObject gameObject = GameObject.CreatePrimitive(PrimitiveType.Cube); gameObject.transform.localScale = Vector3.one * 1f; this.bouncer = gameObject.AddComponent(); this.bouncer.rbody = gameObject.AddComponent(); this.bouncer.rbody.mass = 7f; gameObject.GetComponent().material = Links.x.bounceFriction; gameObject.layer = 20; if (Records.x.editor) { gameObject.transform.SetParent(Links.x.cellar.tr); } gameObject.GetComponent().enabled = false; } this.bouncer.gameObject.SetActive(true); this.bouncer.c = this; this.bouncer.StartLisening("Hit"); if (this.jumping) { this.jumping = false; this.jumpLanding = false; this.ClearNodePath(); } this.EndDodge(); this.bouncer.gameObject.transform.position = this.tr.position + new Vector3(0f, this.characterHeight / 2f, 0f); float num3 = 1300f; if (type == "Knockback") { num3 += 3000f; } this.savedBounceVel = Vector3.zero; Vector3 vector = this.currentPosition; if (attacker) { vector = attacker.currentPosition; } if (vector == this.currentPosition) { vector.x += Random.Range(-1f, 1f); vector.z += Random.Range(-1f, 1f); } this.bouncer.rbody.AddForce(Quaternion.LookRotation(this.currentPosition - new Vector3(vector.x, this.currentPosition.y, vector.z)) * Vector3.forward * num3, ForceMode.Force); float num4 = 6000f; if (type == "Knockback") { num4 += 4000f; } if (type == "Small Hit") { num4 = 1000f; } this.bouncer.rbody.AddForce(Vector3.up * num4, ForceMode.Force); this.animator.SetBool("Bounce Over", false); this.PlayAnimation("Hit Bounce", 0f); this.hitTimeReal = Time.timeSinceLevelLoad; if (type == "Knockback") { this.hitTime += 25f; this.hitTimeReal += 0.5f; } if (attacker && attacker.mainSelected && !Links.x.rallyStage.playing) { this.OverridePocketPause(); } this.SetPosition(this.bouncer.rbody.transform.position, null); } } // Token: 0x06000365 RID: 869 RVA: 0x0004CDF8 File Offset: 0x0004AFF8 public bool CheckForCharm(Character target) { if (this.npc || this.summoned) { return false; } string text = target.stats.characterRow._Race; if (text == "Forest" || text == "Fish" || text == "Shroom" || text == "Shroomer") { int num = this.HasRosary(); if (num > -1) { if (text == "Shroom") { text = "Shroomer"; } text = "Charm" + text; Library.Abilities abilityRow = Links.x.library.GetAbilityRow(text); bool flag = false; float num2 = this.stats.Charming(abilityRow._Name, true); string text2 = this.stats.CharmingCalculation(abilityRow._Name); if (Records.x.showRuleset) { string[] array = new string[5]; array[0] = ((this != null) ? this.ToString() : null); array[1] = " charming, charming roll: "; array[2] = num2.ToString(); array[3] = ", charm skill "; int num3 = 4; Library.Abilities abilities = abilityRow; array[num3] = ((abilities != null) ? abilities.ToString() : null); Debug.Log(string.Concat(array)); } float num4 = target.stats.CharmResistance(false, (float)target.stats.HealthCurrent()); float num5 = this.stats.SummonModCharm(); num4 += this.stats.SummonModCharm(); string text3 = this.stats.CharmResist(num5, (float)target.stats.HealthCurrent()); if (num2 >= num4) { flag = true; } bool flag2 = false; if (num2 - 2f >= num4) { if (Random.Range(0, 5) == 0) { flag = true; flag2 = true; } else { flag = false; } } float num6 = num2 - num4; if (flag) { float num7 = target.stats.GetStatOnly("Sensory") / 5f + target.stats.GetStatOnly("Aura") / 3f; if (text.Contains("Fish")) { this.stats.AddSkillProgress(23, num7, null); } if (text.Contains("Forest")) { this.stats.AddSkillProgress(24, num7, null); } if (text.Contains("Shroom")) { this.stats.AddSkillProgress(25, num7, null); } if (this.mainSelected) { Links.x.cellar.GetAnimatedText("PocketDmg", "Charmed", Records.x.IsTextLeft(this, target)).gameObject.transform.position = target.body.HeadPosition(0f) + new Vector3(Random.Range(0f, 0.5f), Random.Range(-0.5f, 0.5f), 0f); } MasterAudio.PlaySoundAndForget("Feedback", 0.5f, new float?(1f), 0f, "Song Learned", null); if (target.downed) { target.PlayAnimation("GetUp", 0f); } else { target.PlayAnimation("Idle", 0f); } target.downed = true; if (target.actions && target.actions.ai.findingAction) { target.actions.ai.StopLookingForAction(); target.actions.EndActions(); } Library.Abilities abilities2 = abilityRow; Links.x.library.GetEffectRow(abilities2._Name); CreatureActions creatureActions = target.creatures; Vector3 position = target.tr.position; string xmlName = creatureActions.xmlName; Quaternion rotation = target.tr.rotation; bool flag3 = true; if (this.npc) { flag3 = false; } Character firstCharacter = Links.x.gaia.CreateCreature(position, rotation, xmlName, flag3, 0f, 1).GetFirstCharacter(); firstCharacter.TransferLKP(this); firstCharacter.SetPosition(position, null); target.PlayAnimation("Idle", 0f); firstCharacter.SetRotation(rotation, false, false); if (this.npc) { firstCharacter.hostility = 2; } target.stats.SetHealth(Mathf.RoundToInt((float)target.stats.HealthCurrent() + (float)target.stats.HealthMax() / 2f), false); Links.x.combat.AddParty(firstCharacter, false, null, true); creatureActions.Charmed(target); target.DestroyCharacter(); num *= 2; int num8 = this.bag[num + 1]; num8--; this.bag[num + 1] = num8; if (this.party) { Links.x.inventory.SetBagAmt(num / 2, num8, this); this.portrait.skillBag.SetTrinketGrid(false); } if (this.bag[num + 1] <= 0) { if (this.party) { this.bag[num] = 0; this.bag[num + 1] = 0; Links.x.inventory.RemoveBagItem(num / 2, this); this.portrait.skillBag.SetTrinketGrid(false); } else { this.bag[num] = 0; this.bag[num + 1] = 0; } } if (this.party) { this.portrait.skillBag.UpdateAmmoNumbers(); } Links.x.gameFeed.AddFeed(this.str.ToString()); base.StartCoroutine(this.CharmWait(firstCharacter, target, num4, num2, text2, text3, flag2)); Effects effects = firstCharacter.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.source = this; effects.target = firstCharacter; effects.targetInteractive = null; effects.fromLoad = false; effects.effectName = "CharmPotency"; effects.sourceLevel = 1f + num6 / 2f; effects.Inflicted(true); this.stats.AddSpirit(15); return true; } if (this.mainSelected) { Links.x.cellar.GetAnimatedText("NPCDmg", "Failed", Records.x.IsTextLeft(this, target)).gameObject.transform.position = target.body.HeadPosition(0f) + new Vector3(Random.Range(0f, 0.5f), Random.Range(-0.5f, 0.5f), 0f); } Library.Effects effectRow = Links.x.library.GetEffectRow(abilityRow._Name); GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(57); if (pooledGameObject) { pooledGameObject.transform.position = target.body.HeadPosition(0f) + new Vector3(0f, effectRow._FXOffset, 0f); pooledGameObject.SetActive(true); } this.str.Clear(); if (!this.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); } this.str.Append(this.stats.GetName()); if (!this.npc) { this.str.Append(""); } this.str.Append(" failed to bind "); if (!target.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(target)); } this.str.Append(target.stats.GetName()); if (!target.npc) { this.str.Append(""); } if (Records.x.showRulesetInfo) { this.str.Append(" ... "); this.str.Append(text2); this.str.Append(" vs. "); this.str.Append(text3); this.str.Append(""); } Links.x.gameFeed.AddFeed(this.str.ToString()); MasterAudio.PlaySound3DAtVector3AndForget("Skills", this.tr.position, Random.Range(0.4f, 0.6f), new float?(Random.Range(0.7f, 1f)), 0f, "Fail", null); } } return false; } // Token: 0x06000366 RID: 870 RVA: 0x0004D648 File Offset: 0x0004B848 private IEnumerator CharmWait(Character summon, Character target, float difficulty, float charmRoll, string charmRollString, string charmDifficulty, bool didRoll) { if (summon) { yield return new WaitForEndOfFrame(); while (summon.turning) { yield return null; } summon.Charmed(this); GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(56); if (pooledGameObject) { pooledGameObject.transform.position = summon.body.HeadPosition(0f) + new Vector3(0f, 1f, 0f); pooledGameObject.SetActive(true); } MasterAudio.PlaySound3DAtVector3AndForget("Skills", this.tr.position, 1f, new float?(1f), 0f, "Charm", null); this.str.Clear(); if (!this.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); } this.str.Append(this.stats.GetName()); if (!this.npc) { this.str.Append(""); } if (didRoll) { this.str.Append(" passed roll and bound "); } else { this.str.Append(" bound "); } if (!target.npc) { this.str.Append(Links.x.gameFeed.GetPartyColorText(target)); } this.str.Append(target.stats.GetName()); if (!target.npc) { this.str.Append(""); } if (Records.x.showRulesetInfo) { this.str.Append(" ... "); this.str.Append(charmRollString); this.str.Append(" vs. "); this.str.Append(charmDifficulty); this.str.Append(""); } Links.x.gameFeed.AddFeed(this.str.ToString()); } if (this.actions) { this.actions.EndAttackTime(0f); this.actions.EndTurn(true); } yield break; } // Token: 0x06000367 RID: 871 RVA: 0x0004D698 File Offset: 0x0004B898 public void SetMoveNode() { int num = 1; if (this.sailing || this.movesOnWater) { num = 2; } if (this.boatNavigator) { if (this.moveNode.AllConnectionsFreeParty(this.boat.nodeStationaryID, this.boat.nodeMovingID, this.boat.ConnectionNumber(), num) == 0) { this.boat.ClaimNode(this.moveNode, (Vector3)this.moveNode.position, false); return; } } else if (this.moveNode.AllConnectionsFreeParty(this.nodeStationaryID, this.nodeMovingID, this.ConnectionNumber(), num) == 0) { this.ClaimNode(this.moveNode, (Vector3)this.moveNode.position, false); } } // Token: 0x06000368 RID: 872 RVA: 0x0004D750 File Offset: 0x0004B950 public void TurnEnter(bool ignoreControls) { if (this.dead || this.stunned) { return; } this.startTurnExit = false; if (this.nodePath.Count > 0 && !this.dead && this.setupComplete && !this.downed && Links.x.gaia.sceneLoaded) { this.stepReady = true; this.tempStop = false; this.moveTurn = false; this.SetMoveFollowPosition(this.tr.position); if (this.nodePath.Count <= 0) { this.TargetReached(); return; } if (this.moveIndex == -1) { if (this.nodePath.Count > 0) { this.ChangeNodes(); } this.moveIndex = 0; } if (this.nodePath.Count > 1 && this.animID == 23) { this.animID = 0; } this.DoFootsteps(); if (this.moveNode != this.node && !this.jumping) { bool flag = this.boatNavigator; } if (this.moveNode != null && !Records.x.paused && !this.turning) { this.SetMoveNode(); return; } } else { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.moveNode = null; this.moving = false; this.movePoint = this.vectorZero; this.stepReady = false; if (this.isHit && this.IsMoveAnim() && this.downed) { this.PlayAnimation("Hit Down", 0f); } if (this.resting && (!this.inCombat || this.inCircle) && this.animID != 8 && !this.IsWalking() && !this.moving && this.waitingForPath == 0 && !this.isHit && !this.dead && !this.stunned && !this.stats.pinned && !this.stats.pinning && !this.inAction && !this.inRecovery && !this.inQueuedAbility) { if (this.inCircle) { this.PlayAnimation("Fatigued", 0f); } else { this.PlayAnimation("Hit Down", 0f); } } if (!this.dead && this.IsMoveAnim() && !this.boatNavigator && !this.stunned) { this.SetIdle(true); } this.TargetReached(); if ((this.missing || (!this.hasActions && this.fleeing)) && this.nodePath.Count == 0 && !this.moving) { this.fleeing = true; this.CheckFleeEnd(); if (this.fleeing) { return; } } if (this.swarm) { if (this.lkBool.Count == 0 && this.canLeave) { if (!this.actions && !this.hasActions) { this.Leave(true); return; } } else if (!this.canLeave && this.lkPlayer.Count > 0) { for (int i = 0; i < this.lkPlayer.Count; i++) { if (!this.canLeave) { Character component = this.lkPlayer[i].GetComponent(); if (component && component.stats.xmlName != this.stats.xmlName) { this.canLeave = true; } } } } } } } // Token: 0x06000369 RID: 873 RVA: 0x0004DAC4 File Offset: 0x0004BCC4 public void RemoveLastNode(bool setNull) { this.ZeroPreviousNode(); this.lastNode = null; if (this.node != null) { this.node.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.node.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } if (setNull) { this.node = null; } if (this.party) { if (this.mainNode2 != null) { this.mainNode2.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode2.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode3 != null) { this.mainNode3.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode3.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode4 != null) { this.mainNode4.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode4.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } this.mainNode2 = null; this.mainNode3 = null; this.mainNode4 = null; } } // Token: 0x0600036A RID: 874 RVA: 0x0004DBE8 File Offset: 0x0004BDE8 public void ClearNodeIDs() { if (this.node != null) { this.node.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.node.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } } // Token: 0x0600036B RID: 875 RVA: 0x0004DC22 File Offset: 0x0004BE22 public bool IsMoveAnim() { return this.animID == 1; } // Token: 0x0600036C RID: 876 RVA: 0x0004DC30 File Offset: 0x0004BE30 public void ChangeNodes() { if (this.dead || this.stunned || !this.moveFollow) { return; } if (!this.tr) { return; } if (this.nodeActions.Count == 0 || !Links.x.gaia.sceneLoaded) { return; } if (!this.boatNavigator) { this.prevNodePosition = this.tr.position; this.prevNode = this.node; } else { this.prevNodePosition = this.boat.tr.position; this.prevNode = this.boat.node; } this.prevFollowPosition = this.moveFollow.position; this.moveNode = null; this.movePoint = this.vectorZero; this.moveCount = 1; this.moveTurns = 1f; this.moveTurnSpeed = 1f; bool flag = false; for (int i = 1; i < this.nodeActions.Count; i++) { if (!flag) { if (this.nodeActions[i].Contains("Switch")) { flag = true; } else { this.moveTurns += 1f; } } } this.moveTurnSpeed = this.moveTurns; if (!this.npc && this.raycastModifier && this.raycastModifier.enabled) { this.setArea = (int)this.node.Area; GraphNode graphNode = this.NearNode(this.vectorPath[0], false, 0, -1, 0); if (graphNode != null) { if (graphNode.Area != this.node.Area) { this.nodePath[0] = graphNode; } Vector3 vector = (Vector3)graphNode.position; if (Mathf.Abs(vector.y - this.vectorPath[0].y) > 1.5f) { this.vectorPath[0] = new Vector3(this.vectorPath[0].x, vector.y, this.vectorPath[0].z); } } } this.nextNode = this.nodePath[0]; this.moveNode = this.nextNode; this.movePoint = this.vectorPath[0]; this.totalDist = Vector3.Distance(this.prevNodePosition, this.movePoint); this.totalDistNodes = Vector3.Distance(this.moveFollow.position, this.movePoint); if (this.node != null) { Vector3 vector2 = (Vector3)this.node.position; Vector3 vector3 = (Vector3)this.moveNode.position; vector2.y = vector3.y; Vector3.Distance(vector2, vector3); } this.jumping = false; this.jumpLanding = false; Vector3 vector4 = (Vector3)this.nextNode.position; Vector3 vector5 = this.prevNodePosition; bool flag2 = true; if (this.node != null && this.moveNode != null && !this.boatNavigator && (((this.node.environment == 0 || this.node.environment == 1) && this.moveNode.environment == 2) || (this.node.environment == 2 && (this.moveNode.environment == 0 || this.moveNode.environment == 1)))) { flag2 = false; } bool flag3 = false; if (this.hasActions && !this.ambushing && this.actions && this.actions.ai.jumping && !this.charging) { flag3 = true; } bool flag4 = false; if (!flag2 || (this.totalDist > 4f && Records.x.pocketPause && this.party && flag4) || this.evading || this.isHitFlying || this.charging || this.ambushing || flag3 || this.alwaysJump) { this.jumping = true; this.alwaysJump = false; this.jumpLanding = false; this.jumpTime = Links.x.gameplay.seconds; this.currentArcIndex = 0; int num = 0; if (flag3 && !this.charging && !this.evading) { if (this.stats.xmlName.Contains("Bakka")) { num = 15; } else if (this.stats.xmlName.Contains("Jump")) { num = 20; } } if (this.isHitFlying) { num = 5; } if (this.charging) { this.chargeTime = Links.x.gameplay.seconds; if (this.mainSelected) { this.setArea = (int)this.node.Area; GraphNode graphNode2 = this.NearNode(this.movePoint, false, 0, -1, 0); if (graphNode2 == null && this.actions) { graphNode2 = this.actions.ai.chargeTarget.node; } if (graphNode2 != null && graphNode2.Area != this.node.Area && this.actions) { graphNode2 = this.actions.ai.chargeTarget.node; } if (graphNode2 != null) { if (((Vector3)graphNode2.position - this.movePoint).sqrMagnitude < 2.25f) { if (!Physics.Raycast(this.movePoint + new Vector3(0f, 5f, 0f), Vector3.up * -1f, 10f, 1) || Physics.Linecast(this.torsoPosition, this.movePoint + new Vector3(0f, 3f, 0f), 99072)) { this.movePoint = (Vector3)graphNode2.position; } } else { this.movePoint = (Vector3)graphNode2.position; } } } } else { if (this.sailing) { this.DrawArc(this.movePoint, num); } else { this.DrawArc(this.movePoint, num); if (!this.InAttack() && !this.downed) { this.PlayAnimation("JumpStart", 0f); } } if (this.isHitFlying && this.arcPoints.Count >= 4) { this.currentArcIndex = 3; } if (this.evading && this.arcPoints.Count >= 2) { this.currentArcIndex = 1; } } if (!this.evading && !this.isHitFlying) { this.SetRotation(Quaternion.LookRotation(this.movePoint - this.tr.position), false, false); } else if (this.evading) { this.look = Quaternion.LookRotation(this.tr.position - this.movePoint); this.SetRotation(this.look, false, false); } else { bool flag5 = this.isHitFlying; } } if (this.moveNode != null && !this.moveNode.Walkable) { this.TargetReached(); return; } if (false && this.nodePath.Count > 1) { this.moveCount = 2; this.moveTurns = 1f; this.moveTurnSpeed = 1f; this.moveNode = this.nodePath[1]; this.movePoint = this.vectorPath[1]; this.nextNode = this.moveNode; } this.turningComplete = false; this.moveFollowTime = 0f; this.moveAnimID = 1; if (this.boatNavigator && this.boat) { this.boat.NewPoint(this.movePoint, this.savedPathTarget); } if (this.nextNode != null && this.node != null) { bool flag6 = false; if (this.nextNode.HasLinkNode() && this.node.HasLinkNode() && !this.mainSelected) { flag6 = true; } if (this.nextNode.Area != this.node.Area || (this.totalDist > 50f && !this.jumping) || flag6) { bool flag7 = this.AllTilesFree(this.nextNode, false); if (!flag7 && this.collisionCharacter) { if (Records.x.editor) { Character character = this.collisionCharacter; Debug.Log(((character != null) ? character.ToString() : null) + " blocking " + ((this != null) ? this.ToString() : null) + " day night move"); } if (this.collisionCharacter.visible == 0) { flag7 = true; } if (this.collisionCharacter.dayNightVanishing) { flag7 = true; } } if (!flag7 && (this.ghostVanishing || this.ambushing)) { flag7 = true; } if (!flag7 && this.dayNightVanishing && this.collisionCharacter && this.collisionCharacter.npc && this.collisionCharacter.dayNightVanishing) { flag7 = true; } if (flag7) { this.body.SetGrounderState(false); this.SetPosition((Vector3)this.nextNode.position, this.jumpAreasNode); this.moveFollow.position = (Vector3)this.nextNode.position; this.tempStop = true; if (this.nextNode.GraphIndex == 0U) { this.indoorID = ""; this.desiredGraph = 0; } else { this.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName((Vector3)this.nextNode.position); this.desiredGraph = 1; } Links.x.sensory.UpdateCharactersIntExt(true); this.jumpedAreas = false; this.jumpingAreasRotation = this.smoothRot; this.jumpingAreas = true; this.meshAlwaysOff = false; this.body.SetMeshState(false, true); this.jumpingAreasTime = Time.timeSinceLevelLoad; this.jumpAreasNode = this.nextNode; } else { this.TargetReached(); } } } if (this.NodesCount() > 0 && this.movePoint != this.tr.position && !this.boatNavigator) { if (!this.evading && !this.isHitFlying) { this.GetLook(true); } if ((!this.body.sameNode || !this.usingKeys) && (this.AllTilesFree(this.moveNode, false) || this.jumping || this.charging)) { this.SetRotation(this.look, false, false); } } } // Token: 0x0600036D RID: 877 RVA: 0x0004E6B4 File Offset: 0x0004C8B4 public void GetLook(bool always) { if (this.tr.position == this.movePoint) { return; } if (this.moveBackTarget) { if (this.rotateToSlope) { this.look = Quaternion.LookRotation(this.tr.position - new Vector3(this.movePoint.x, this.movePoint.y, this.movePoint.z)); return; } this.look = Quaternion.LookRotation(this.tr.position - new Vector3(this.movePoint.x, this.tr.position.y, this.movePoint.z)); return; } else { if (this.rotateToSlope) { this.look = Quaternion.LookRotation(new Vector3(this.movePoint.x, this.movePoint.y, this.movePoint.z) - this.tr.position); return; } this.look = Quaternion.LookRotation(new Vector3(this.movePoint.x, this.tr.position.y, this.movePoint.z) - this.tr.position); return; } } // Token: 0x0600036E RID: 878 RVA: 0x0004E80C File Offset: 0x0004CA0C public void TurnExit() { if (this.dead || this.stunned || !Links.x.gaia.sceneLoaded) { return; } bool flag = false; this.turningComplete = false; if (this.charging) { this.jumping = false; this.charging = false; } if (this.isHitFlying) { this.isHitFlying = false; } if (this.stats.Stuck() > 0 && !this.boatNavigator) { this.sphere.transform.position = this.tr.position; this.TargetReached(); return; } if (this.hasActions && (this.followingType == "" || this.followingType.Contains("Attack"))) { bool flag2 = true; if (this.sailing && this.boatNavigator && this.boat.turning) { flag2 = false; } if (this.fleeing) { flag2 = false; } if (flag2 && this.attackTime >= 1f && !this.mainSelected) { bool flag3 = this.actions.CheckIfMoveComplete(); if (this.actions && flag3 && !this.actions.castingSpell && !this.actions.cannotInterrupt) { return; } } } bool flag4 = this.CheckEarlyIfInRange(); if (this.stepReady && !this.dead && !this.stunned && !this.moveTurn && this.setupComplete && !this.downed && this.nodePath.Count > 0 && !flag4) { this.stepReady = false; if (this.usingKeys && this.CheckControls() && this.nodeActions.Count == 1 && this.mainSelected) { flag = Links.x.fellowship.MakeDirectionalWaypoint(true); if (!flag) { this.SetIdle(true); } } if (!this.moveTurn && !flag) { this.GetNextNode(); } if (this.nodePath.Count < 1 && this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; } if (this.nodePath.Count > 0 && !this.boatNavigator) { Links.x.gameplay.CheckTileEffects(this, this.node, false); } } else { this.stepReady = false; } if (this.nodeActions.Count == 0) { this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.moveNode = null; this.movePoint = this.vectorZero; this.moving = false; } if (this.nodeActions.Count <= 1 && !this.npc && !this.inCombat && !this.inCircle && !this.hasActions && !this.mainSelected && !Links.x.combat.inPocketAttack && this.waitingForPath == 0 && Links.x.main) { if (Links.x.main.physicsMove) { Links.x.fellowship.GetNewPath(this, Links.x.main.node); } else if ((Links.x.main.currentPosition - this.currentPosition).sqrMagnitude < 36f) { this.TargetReached(); return; } } if (flag4 && !this.jumpingAreas) { this.TargetReached(); return; } if (this.nodeActions.Count > 0 && !flag && !this.jumpingAreas) { this.TurnEnter(false); } } // Token: 0x0600036F RID: 879 RVA: 0x0004EBB3 File Offset: 0x0004CDB3 public int GetNodeCount() { return this.nodePath.Count; } // Token: 0x06000370 RID: 880 RVA: 0x0004EBC0 File Offset: 0x0004CDC0 public void GetNextNode() { if (this.nodeActions.Count == 1) { if (this.nodePath.Count > 0) { for (int i = 0; i < this.moveCount; i++) { if (this.nodePath.Count > 0) { this.nodePath.RemoveAt(0); this.vectorPath.RemoveAt(0); } } } this.nodeActions.Clear(); this.TargetReached(); return; } if (this.nodeActions.Count > 1) { if (this.nodeActions.Count > this.moveCount) { for (int j = 0; j < this.moveCount; j++) { this.nodeActions.RemoveAt(0); } } if (this.nodePath.Count > 0 && ((this.nodeActions[0].Contains("TileSwitch") && this.moveTurns == 1f) || (this.nodeActions[0].Contains("TileSwitch") && this.moveTurns == 2f))) { for (int k = 0; k < this.moveCount; k++) { if (this.nodePath.Count > 0) { this.nodePath.RemoveAt(0); this.vectorPath.RemoveAt(0); } } this.prevNodePosition = this.tr.position; if (this.nodePath.Count > 0) { this.ChangeNodes(); return; } if (this.nodeActions.Count == 0) { this.TargetReached(); return; } } } else { this.TargetReached(); } } // Token: 0x06000371 RID: 881 RVA: 0x0004ED48 File Offset: 0x0004CF48 public int NodesCount() { return this.nodePath.Count; } // Token: 0x06000372 RID: 882 RVA: 0x0004ED55 File Offset: 0x0004CF55 public GraphNode LastNode() { return this.nodePath[this.nodePath.Count - 1]; } // Token: 0x06000373 RID: 883 RVA: 0x0004ED70 File Offset: 0x0004CF70 public void Collide(Character collidedCharacter, bool hit) { if (collidedCharacter && this.mainSelected) { bool flag = true; if (collidedCharacter.hasActions) { flag = false; } bool flag2 = collidedCharacter.npc; if (collidedCharacter.physicsMove) { flag = false; } if (collidedCharacter.npc && (collidedCharacter.attackingUntilBribe || collidedCharacter.hostility >= 2)) { flag = false; } if (Time.timeSinceLevelLoad < collidedCharacter.movingOutOfWayTime + 2f) { flag = false; } if (collidedCharacter.stats.Stuck() > 0 || collidedCharacter.jumping) { flag = false; } if (collidedCharacter.turning || collidedCharacter.sleeping || collidedCharacter.resting || collidedCharacter.inQueuedAbility) { flag = false; } if (collidedCharacter.node == null) { flag = false; } if (collidedCharacter.party && Records.x.partyWait && flag) { flag = false; if ((collidedCharacter.tr.position - this.tr.position).sqrMagnitude < 0.25f) { flag = true; } } if (Links.x.main.body.sneaking) { flag = false; } if (flag) { if (collidedCharacter.party && !this.mainSelected) { collidedCharacter.lookTarget = Links.x.main; } Vector3 vector = this.tr.right; if (!this.npc && Links.x.GetPartyID(this) % 2 == 0) { vector *= -1f; } Vector3 vector2 = collidedCharacter.tr.position + this.tr.forward * 5f + vector * 2f; if (hit) { vector2 = collidedCharacter.tr.position + Quaternion.LookRotation(collidedCharacter.tr.position - Links.x.main.tr.position) * Vector3.forward * 3f; } collidedCharacter.nodeConstraint.walkable = true; collidedCharacter.nodeConstraint.constrainWalkability = true; collidedCharacter.nodeConstraint.constrainTags = true; if (collidedCharacter.inCircle && this.party) { collidedCharacter.nodeConstraint.checkCircleID = collidedCharacter.CheckCircleID(); } else { collidedCharacter.nodeConstraint.checkCircleID = 0; } collidedCharacter.nodeConstraint.passID = collidedCharacter.nodeStationaryID; collidedCharacter.nodeConstraint.passID2 = collidedCharacter.nodeMovingID; collidedCharacter.nodeConstraint.checkConnections = collidedCharacter.ConnectionNumber(); collidedCharacter.nodeConstraint.constrainToArea = (int)collidedCharacter.node.Area; int num = 2; int num2 = collidedCharacter.CheckCircleID(); if (collidedCharacter.inCircle && collidedCharacter.hasCircleBuff) { num = 1; num2 = 2; } GraphNode graphNode = collidedCharacter.GetSlideNode(vector2, collidedCharacter.node, true, num2, num); if (graphNode != null) { collidedCharacter.lookTarget = Links.x.main; collidedCharacter.movingOutOfWayTime = Time.timeSinceLevelLoad; collidedCharacter.movingOutOfWay = true; if (collidedCharacter.turning) { collidedCharacter.EndTurning(false); } int num3 = 4; if (collidedCharacter.inCircle) { num3 = 2; } if (collidedCharacter.party && Records.x.friends) { num3 = 1; } if (collidedCharacter.hasCircleBuff) { collidedCharacter.MakePath(graphNode, 1, false, false, true); return; } collidedCharacter.MakePath(Links.x.main.node, num3, false, true, true); } } } } // Token: 0x06000374 RID: 884 RVA: 0x0004F0BC File Offset: 0x0004D2BC public GraphNode GetSlideNode(Vector3 direction, GraphNode n, bool constrainTags, int circleID, int constrainPenalty) { this.nodeConstraint.constrainToArea = (int)n.Area; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.constrainTags = constrainTags; if (constrainTags) { this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.checkCircleID = circleID; } else { this.nodeConstraint.passID = 0; this.nodeConstraint.passID2 = 0; this.nodeConstraint.checkCircleID = 0; } if (this.npc) { this.nodeConstraint.constrainPenalty = 0; } else { this.nodeConstraint.constrainPenalty = constrainPenalty; } this.nodeConstraint.checkConnections = this.ConnectionNumber(); if (!constrainTags) { this.nodeConstraint.checkConnections = 0; } if (this.ghost) { this.nodeConstraint.constrainToEnvironment = 0; } if (this.movesOnWater) { this.nodeConstraint.constrainToEnvironment = 2; } float num = 49f; if (this.hasCircleBuff) { num = 100f; } return n.ClosestConnection(n, this.nodeStationaryID, this.nodeMovingID, num, direction, (int)this.radius, this.ConnectionNumber(), this.nodeConstraint, 0); } // Token: 0x06000375 RID: 885 RVA: 0x0004F200 File Offset: 0x0004D400 public GraphNode FindSlideNode(Character movingCharacter, Vector3 fromPoint, bool self, bool straightBack) { Quaternion quaternion = this.tr.rotation; if (movingCharacter.tr.position != this.tr.position && !self) { quaternion = Quaternion.LookRotation(movingCharacter.tr.position - this.tr.position); } else { quaternion = Quaternion.LookRotation(fromPoint - this.tr.position); } float num = 1f; Vector3 position = movingCharacter.tr.position; if (straightBack) { num = -0.5f; } Vector3 vector = position + quaternion * Vector3.forward * num; if (!movingCharacter.stunned && !straightBack) { if (Random.Range(0, 2) == 0) { vector += quaternion * Vector3.right * 1.5f; } else { vector += quaternion * Vector3.right * -1.5f; } } this.nodeConstraint.constrainToArea = (int)movingCharacter.node.Area; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.constrainTags = true; this.nodeConstraint.checkCircleID = 0; this.nodeConstraint.passID = movingCharacter.nodeStationaryID; this.nodeConstraint.passID2 = movingCharacter.nodeMovingID; if (this.npc) { this.nodeConstraint.constrainPenalty = 0; } else { this.nodeConstraint.constrainPenalty = 2; } this.nodeConstraint.checkConnections = movingCharacter.ConnectionNumber(); if (this.movesOnWater) { this.nodeConstraint.constrainToEnvironment = 2; } GraphNode graphNode = movingCharacter.node.ClosestConnection(movingCharacter.node, movingCharacter.nodeStationaryID, movingCharacter.nodeMovingID, 25f, vector, (int)this.radius, movingCharacter.ConnectionNumber(), this.nodeConstraint, 0); GraphNode graphNode2 = graphNode; if (graphNode != null) { GraphNode graphNode3 = graphNode.ClosestConnection(graphNode, movingCharacter.nodeStationaryID, movingCharacter.nodeMovingID, 25f, vector, (int)this.radius, movingCharacter.ConnectionNumber(), this.nodeConstraint, 0); if (graphNode3 != null) { graphNode2 = graphNode3; } } return graphNode2; } // Token: 0x06000376 RID: 886 RVA: 0x0004F424 File Offset: 0x0004D624 public bool NodeBlocked(GraphNode blockedNode, GameObject blockedObj) { if (!Links.x.gaia.sceneLoaded) { this.SetAnimatorSpeed(1f); return true; } if (this.jumping) { return false; } this.tempStop = true; this.stepReady = false; this.moveTurn = false; if (Records.x.astarDebugging && this.blockedTime == 0f) { string[] array = new string[13]; array[0] = ((this != null) ? this.ToString() : null); array[1] = " NODE BLOCKED "; int num = 2; Character character = this.collisionCharacter; array[num] = ((character != null) ? character.ToString() : null); array[3] = " "; array[4] = this.node.ID.ToString(); array[5] = " "; array[6] = this.pushCount.ToString(); array[7] = " "; array[8] = this.blockedTime.ToString(); array[9] = " "; int num2 = 10; GraphNode graphNode = this.targetNode; array[num2] = ((graphNode != null) ? graphNode.ToString() : null); array[11] = " "; array[12] = this.pushCount.ToString(); Debug.Log(string.Concat(array)); } if ((this.isBoro || this.party) && this.ignoreRemoveControls && Records.x.removeControls && this.jumping) { this.tempStop = false; this.stepReady = true; this.blockedTime = 0f; this.SetAnimatorSpeed(1f); return true; } if (this.ghostVanishing || this.ambushing) { this.tempStop = false; this.stepReady = true; this.blockedTime = 0f; this.SetAnimatorSpeed(1f); return true; } if (this.inCircle && this.npc && this.collisionCharacter && this.collisionCharacter.group == this.group) { this.tempStop = false; this.stepReady = true; this.blockedTime = 0f; this.SetAnimatorSpeed(1f); return true; } bool flag = true; if (flag && this.pushCount >= Links.x.fellowship.pushCountMax) { flag = false; } if (this.isBoro) { flag = true; } if (this.party && !this.mainSelected && this.collisionCharacter && !this.collisionCharacter.npc) { flag = false; } if (this.boatNavigator || this.inCombat || this.hasActions) { flag = false; } if (flag && !this.sailing && this.collisionCharacter) { if (this.collisionCharacter.movingOutOfWay && (this.ignoreRemoveControls || this.isBoro || this.mainSelected)) { this.tempStop = false; this.stepReady = true; this.blockedTime = 0f; this.SetAnimatorSpeed(1f); return true; } flag = true; if (this.collisionCharacter.mainSelected) { flag = false; } if (this.collisionCharacter.node == null) { flag = false; } if (this.collisionCharacter.resting || this.collisionCharacter.stunned || this.collisionCharacter.sleeping || this.collisionCharacter.downed) { flag = false; } if ((this.collisionCharacter.moving || this.collisionCharacter.NodesCount() > 0) && !this.mainSelected) { flag = false; } if (this.collisionCharacter.hasActions && this.collisionCharacter.npc) { flag = false; } if (this.isBoro && this.collisionCharacter.party) { flag = true; } if (this.collisionCharacter.isBoro) { flag = true; } if (this.collisionCharacter.sailing) { flag = false; } if (Records.x.astarDebugging) { string[] array2 = new string[9]; array2[0] = flag.ToString(); array2[1] = " "; int num3 = 2; Character character2 = this.collisionCharacter; array2[num3] = ((character2 != null) ? character2.ToString() : null); array2[3] = " "; array2[4] = this.collisionCharacter.waitingForPath.ToString(); array2[5] = " "; int num4 = 6; GraphNode graphNode2 = this.collisionCharacter.node; array2[num4] = ((graphNode2 != null) ? graphNode2.ToString() : null); array2[7] = " "; array2[8] = this.collisionCharacter.NodesCount().ToString(); Debug.Log(string.Concat(array2)); } if (flag) { if (Records.x.astarDebugging) { string text = "pushing "; Character character3 = this.collisionCharacter; Debug.Log(text + ((character3 != null) ? character3.ToString() : null)); } GraphNode graphNode3 = this.FindSlideNode(this.collisionCharacter, this.movePoint, false, false); if (graphNode3 != null && graphNode3 != this.collisionCharacter.node && this.collisionCharacter.stats.Stuck() == 0 && ((Vector3)graphNode3.position - this.collisionCharacter.tr.position).sqrMagnitude < 16f && PathUtilities.IsPathPossible(graphNode3, this.collisionCharacter.node)) { if (this.canPush && !this.stats.animal) { this.pushCount = 0; } this.tempStop = false; if (Records.x.astarDebugging && this.blockedTime == 0f) { string text2 = ((this != null) ? this.ToString() : null); string text3 = " shoving "; Character character4 = this.collisionCharacter; Debug.Log(text2 + text3 + ((character4 != null) ? character4.ToString() : null)); } if (this.collisionCharacter.returnToPointTime == 0f && this.collisionCharacter.npc) { this.collisionCharacter.returnToPoint = this.collisionCharacter.node; } this.collisionCharacter.returnToPointTime = Time.timeSinceLevelLoad; this.collisionCharacter.Slide(graphNode3, false); this.waitingForNewPath = false; this.collisionCharacter.body.lookAtController.SetNewTarget(this.body.headBone, 0f, 0f, false); this.blockedTime = 0f; this.stepReady = true; if (this.collisionCharacter.body.sneaking) { this.collisionCharacter.EndSneak(true, false); } if (this.npc && !this.stats.animal && !this.ghost && !this.ghost && !this.summoned && this.collisionCharacter.party && Time.timeSinceLevelLoad > this.lastExcuseTime + 5f) { this.StartQuip("Excuse me"); this.lastExcuseTime = Time.timeSinceLevelLoad; } this.SetAnimatorSpeed(1f); return false; } } this.pushCount++; this.collisionCharacter = null; } if (this.blockedTime == 0f) { if (this.npc || this.summoned) { this.blockedTime = Time.timeSinceLevelLoad + Random.Range(0.1f, 0.4f); } else { int num5 = Links.x.fellowship.CharacterIndex(this); this.blockedTime = Time.timeSinceLevelLoad + ((float)num5 * 0.05f + 0.05f); if (this.mainSelected || Links.x.fellowship.OnlyOneMoving(this)) { this.blockedTime = Time.timeSinceLevelLoad; } } this.waitingForNewPath = true; this.waitingForNewPathTime = Time.timeSinceLevelLoad; } if (!this.stats.flying) { this.SetAnimatorSpeed(0.0001f); } bool flag2 = false; if (this.inFriendGroup && !this.isFriendGroupLeader && !this.friendLeader.moving && !this.friendLeader.physicsMove && this.collisionCharacter == this.friendLeader) { flag2 = true; this.TargetReached(); } if (this.blockedTime != 0f && Time.timeSinceLevelLoad > this.blockedTime && !flag2) { this.nodePath.Clear(); this.nodeActions.Clear(); this.vectorPath.Clear(); this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.moving = false; this.moveNode = null; this.movePoint = this.vectorZero; this.waitingForNewPath = true; this.waitingForNewPathTime = Time.timeSinceLevelLoad; this.tempStop = false; this.blockedTime = 0f; this.blockPathCount++; if (this.blockPathCount > 2) { this.SetAnimatorSpeed(1f); this.PlayIdle(); this.blockPathCount = 0; } if (this.targetNode != null && !this.hasActions && this.npc) { this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.constrainTags = true; this.nodeConstraint.checkCircleID = this.CheckCircleID(); if (!this.npc && this.targetNode.circle == 1) { this.nodeConstraint.checkCircleID = 1; } if (!this.boatNavigator) { this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.checkConnections = this.ConnectionNumber(); } else { this.nodeConstraint.passID = this.boat.nodeStationaryID; this.nodeConstraint.passID2 = this.boat.nodeMovingID; this.nodeConstraint.checkConnections = this.boat.ConnectionNumber(); } this.nodeConstraint.constrainToArea = -1; if (!this.nodeConstraint.Suitable(this.targetNode)) { int id = this.targetNode.ID; if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " repath node id is " + id.ToString()); } bool flag3 = false; if (!this.npc) { int count = this.gos.Count; for (int i = 0; i < count; i++) { Character character5 = this.gos[i]; if (character5.nodeStationaryID == id) { break; } if (character5.nodeMovingID == id) { flag3 = true; break; } } } if (!flag3) { if (this.boatNavigator) { this.targetNode = this.boat.NearNode((Vector3)this.targetNode.position, true, 0, -1); } else { this.targetNode = this.NearNode((Vector3)this.targetNode.position, true, 0, -1, this.CheckCircleID()); if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " had to repath but node was not longer available"); } } } } if (this.inCombat && this.hasActions) { this.actions.targetMovePosition = this.targetNode; } if (this.party || (this.boatNavigator && this.sailing && this.isBoro)) { this.showWaypoint = true; } if (this.party) { this.pushCount = Links.x.fellowship.pushCountMax + 1; } this.MakePath(this.targetNode, 200, false, false, this.party); } else { this.TargetReached(); } } return false; } // Token: 0x06000377 RID: 887 RVA: 0x0004FF50 File Offset: 0x0004E150 public bool IsWalking() { int currentHash = this.body.currentHash; return currentHash == this.body.walkHash || currentHash == this.body.walkStartHash || currentHash == this.body.combatWalkHash || currentHash == this.body.walkPartyHash || currentHash == this.body.combatWalkStartHash || currentHash == this.body.walkEndHash || currentHash == this.body.combatWalkEndHash || currentHash == this.body.creepStartHash || currentHash == this.body.creepEndHash || currentHash == this.body.creepHash || currentHash == this.body.walkBackHash || currentHash == this.body.walkBackStartHash || currentHash == this.body.walkBackEndHash; } // Token: 0x06000378 RID: 888 RVA: 0x0005002C File Offset: 0x0004E22C public void SetAnimatorSpeed(float speed) { if (this.body.animationHold) { return; } if (this.pocketPaused && !this.pocketPausedOverride && Records.x.pocketPause && (!Links.x.combat.inPocketAttack || !this.party || !Links.x.pocketWheel.rallyWheelOpen)) { return; } if (this.turning) { if (this.party) { speed = 1.5f; if (this.hasActions) { speed *= 1.25f; } } else if (!this.dodging && (this.moving || this.movingOutOfWay)) { speed = 1.4f; } else { if (this.patrolSpeed == 0f) { this.patrolSpeed = 1f; } if (this.hasActions) { if (this.moving) { this.patrolSpeed = 0.75f; } else { this.patrolSpeed = 0.75f; } } speed = this.patrolSpeed; } } else { bool @bool = this.animator.GetBool("Idle"); if ((this.animID == 1 || (!@bool && this.IsWalking())) && !Links.x.combat.combatCinematics && !this.tempStop && !this.blocked && !this.turning && !this.isHit && speed > 0.1f) { float num; if (!this.party && !this.isBoro) { if (this.npc && !this.stats.animal && !this.hasActions && !Records.x.banquetIsle && !this.vipFollow) { num = this.stats.MoveSpeed(false) * 0.75f; } else { num = this.stats.MoveSpeed(false); } if (this.inCircle && this.group && (this.group.inFormationMovement || this.group.inSwarm || this.group.inSwarmWait)) { num *= this.group.FormationSpeed(this); } if (this.summoned && !this.npc) { float sqrMagnitude = (this.currentPosition - Links.x.main.currentPosition).sqrMagnitude; if (sqrMagnitude > 625f && sqrMagnitude <= 1225f && !this.hasActions) { num *= 1.3f; } if (sqrMagnitude > 1225f) { num *= 2f; } } } else if (this.body.sneaking) { num = this.stats.MoveSpeed(false) - 0.25f; } else if (this.inCombat || (Records.x.InCombat(false) && (this.vipFollow || this.summoned))) { num = this.stats.MoveSpeed(false); } else { num = Links.x.main.stats.PartyAdventureMoveSpeed(); RaycastHit raycastHit; if (this.mainSelected && Physics.SphereCast(this.currentPosition + new Vector3(0f, 4f, 0f), 0.25f, Vector3.up * -1f, out raycastHit, 20f, Links.x.floor)) { num *= Mathf.Clamp(Mathf.Abs(raycastHit.normal.y), 0.85f, 1f); } if (this.inTown && !this.fleeing) { num *= 1.2f; } if (this.movingOutOfWay) { num *= 1.1f; } if (this.followingType != "" && !this.physicsMove) { num *= 1.1f; } if (!this.mainSelected && !Links.x.combat.inPocketAttack && !this.isBoro) { float sqrMagnitude2 = (this.currentPosition - Links.x.main.currentPosition).sqrMagnitude; if (sqrMagnitude2 < 64f) { num *= 0.9f - Mathf.Clamp(this.portraitID / 20f, 0f, 0.4f); } if (sqrMagnitude2 >= 64f && sqrMagnitude2 <= 144f && !this.hasActions) { num *= 0.95f - Mathf.Clamp(this.portraitID / 20f, 0f, 0.4f); } if (sqrMagnitude2 > 144f && sqrMagnitude2 <= 625f && !this.hasActions) { num *= 1.05f - Mathf.Clamp(this.portraitID / 20f, 0f, 0.4f); } if (sqrMagnitude2 > 625f && sqrMagnitude2 <= 1225f && !this.hasActions) { num *= 1.3f - Mathf.Clamp(this.portraitID / 20f, 0f, 0.4f); } if (sqrMagnitude2 > 1225f) { num *= 2f; } } if (this.isBoro && !this.sailing) { num = 0.6f; } } if (this.running) { speed *= 1.5f; } speed *= Mathf.Clamp(num, 0f, 20f); if (this.fleeing && !Records.x.removeControls && !this.summoned) { speed *= 2f; } if (this.moveBackward) { speed *= this.stats.characterRow._MoveBackSpeed; } if (this.stats.race == "Yeti") { if (this.inTown) { speed *= 0.9f; } else if (this.mainSelected || this.hasActions) { speed *= 0.8f; } else { speed *= 0.72f; } } if (this.charging) { if (this.stats.animal) { speed *= 3f; } else { speed *= 3.5f; } } } else if (this.IsAttacking(this.body.currentHash)) { if (speed > 0.1f) { speed = 1f; } } else if (speed > 0.1f) { speed = 1f; } } if ((!this.IsWalking() || !this.party) && speed != this.animator.speed) { this.animator.speed = speed; } this.currentAnimatorSpeed = speed; } // Token: 0x06000379 RID: 889 RVA: 0x000506A8 File Offset: 0x0004E8A8 public void DoPath(bool skipPool) { if (this.waitingForPath == -1) { this.waitingForPath = 0; } this.MakePath(this.savedPathTarget, this.maxNodesSave, this.estimatedPathSave, this.toDirectionSave, skipPool); } // Token: 0x0600037A RID: 890 RVA: 0x000506DC File Offset: 0x0004E8DC public void UpdateSizeRadius(float n) { this.radius = n; if (this.radius <= 1f) { this.attackRadius = Records.x.nodeSize / 2f; } if (this.radius == 3f) { this.attackRadius = Records.x.nodeSize * 2f / 2f; } if (this.radius == 4f) { this.attackRadius = Records.x.nodeSize * 3f / 2f; } if (this.radius == 8f) { this.attackRadius = Records.x.nodeSize * 3f / 2f; } if (this.thisCollider) { if (this.radius <= 3f) { this.thisCollider.radius = 0.7f; } else { this.thisCollider.radius = 2.5f; } } if (this.playerBorders) { this.playerBorders.UpdateSize(n); if (this.radius == 1f) { this.cc.radius = 0.7f; return; } if (this.radius == 8f) { this.cc.radius = 2.5f; } } } // Token: 0x0600037B RID: 891 RVA: 0x00050820 File Offset: 0x0004EA20 public Vector3 BoundsMin() { return this.thisCollider.bounds.min; } // Token: 0x0600037C RID: 892 RVA: 0x00050840 File Offset: 0x0004EA40 public Vector3 BoundsMax() { return this.thisCollider.bounds.max - new Vector3(0f, 0.5f, 0f); } // Token: 0x0600037D RID: 893 RVA: 0x00050879 File Offset: 0x0004EA79 public int ConnectionNumber() { if (this.radius == 1f) { return 0; } if (this.radius == 3f) { return 3; } if (this.radius == 4f) { return 4; } if (this.radius >= 8f) { return 8; } return 0; } // Token: 0x0600037E RID: 894 RVA: 0x000508B8 File Offset: 0x0004EAB8 public float RealRadius() { if (this.radius == 1f) { return 1f; } if (this.radius == 3f) { return 1.5f; } if (this.radius == 4f) { return 2f; } if (this.radius >= 8f) { return 3f; } return 1f; } // Token: 0x0600037F RID: 895 RVA: 0x00050918 File Offset: 0x0004EB18 public void CheckPath(GraphNode pathTarg, bool toDirection) { if (!Links.x.gaia.sceneLoaded) { return; } if (this.NodesCount() == 0) { this.charging = false; } if (!this.npc) { if (Random.Range(0, 2) == 0 && this.hasActions) { this.walkConstraint.constrainPenalty = 2; } else { this.walkConstraint.constrainPenalty = 3; } } else if ((!this.hasActions && Random.Range(0, 10) == 0 && (this.deactivating || this.dayNightVanishing || this.alwaysOn)) || this.missing || this.waitingForNewPath) { this.walkConstraint.constrainPenalty = 0; } else { this.walkConstraint.constrainPenalty = 1; } this.walkConstraint.constrainWalkability = true; this.walkConstraint.walkable = true; if ((this.stats.animal && !this.ignoreNodeIDs) || (this.party && !this.mainSelected && !this.boatNavigator && (this.hasActions || !Links.x.main.moving || (!this.hasActions && Random.Range(0, 4) != 0))) || (this.fleeing || (Records.x.removeControls && !this.ignoreNodeIDs)) || (this.npc && !this.dayNightVanishing) || this.boatNavigator) { this.pushCount = Links.x.fellowship.pushCountMax + 100; } else if (this.npc && this.dayNightVanishing) { if (Random.Range(0, 2) == 0) { this.pushCount = 0; } else { this.pushCount = Links.x.fellowship.pushCountMax + 100; } } if (this.ignoreNodeIDs || (this.isBoro && Records.x.removeControls) || (!this.hasActions && this.pushCount < Links.x.fellowship.pushCountMax && this.returnToPointTime == 0f && !this.boatNavigator) || (this.ghostVanishing || this.ambushing || (this.dayNightVanishing && this.visible == 0 && !this.waitingForNewPath && !this.boatNavigator)) || (this.mainSelected && Records.x.pocketPause && !this.pocketPaused)) { this.walkConstraint.constrainTags = false; } else { this.walkConstraint.constrainTags = true; } this.walkConstraint.checkCircleID = this.CheckCircleID(); if (this.boatNavigator) { if (this.sailing && !this.npc) { if (!this.raycastModifier) { this.raycastModifier = base.gameObject.AddComponent(); } } else if (this.isBoro && this.raycastModifier) { Object.Destroy(this.raycastModifier); } } bool flag = false; if (this.raycastModifier) { if (this.mainSelected && !this.waitingForNewPath && this.radius < 3f) { flag = true; } if (Links.x.combat.inPocketAttack && this.party) { flag = true; } if (this.boatNavigator && !this.npc) { if (this.boat) { flag = true; this.raycastModifier.sailing = true; this.raycastModifier.excludeObject = this.boat.gameObject; } } else { this.raycastModifier.sailing = false; } if (!flag) { this.raycastModifier.enabled = false; if (this.simpleSmoothModifier) { this.simpleSmoothModifier.enabled = true; } } else { if (this.simpleSmoothModifier) { this.simpleSmoothModifier.enabled = false; } this.raycastModifier.enabled = true; } } else if (this.simpleSmoothModifier) { this.simpleSmoothModifier.enabled = true; } this.simpleSmoothModifier.radius = (int)this.radius; if (this.walkConstraint.constrainTags) { this.walkConstraint.passID = this.nodeMovingID; this.walkConstraint.passID2 = this.nodeStationaryID; } else { this.walkConstraint.passID = 0; this.walkConstraint.passID2 = 0; } this.walkConstraint.checkConnections = this.ConnectionNumber(); this.walkConstraint.constrainDistance = false; this.walkConstraint.constrainToArea = -1; if (!this.npc && Links.x.hasMain && this.node != null && Links.x.main.node != null && this.node != null && this.node.Area == Links.x.main.node.Area && !this.inCircle) { this.walkConstraint.constrainToArea = (int)this.node.Area; } if (this.ghost && !this.ghostVanishing) { this.walkConstraint.constrainToEnvironment = 0; } if (this.sailing && this.boatNavigator) { this.walkConstraint.passID = this.boat.nodeMovingID; this.walkConstraint.passID2 = this.boat.nodeStationaryID; this.walkConstraint.constrainToEnvironment = 2; this.walkConstraint.checkConnections = 4; this.boat.SetNodeID(true, true); if (this.boat.node == null) { return; } if (this.simpleSmoothModifier && !flag) { this.simpleSmoothModifier.enabled = true; } } else if (this.movesOnWater) { this.walkConstraint.constrainToEnvironment = 2; } else { this.SetNodeID(true, true); if (this.node == null) { return; } } if (!toDirection) { if (this.raycastModifier && (pathTarg.Area != this.node.Area || pathTarg.GraphIndex != this.node.GraphIndex)) { this.raycastModifier.enabled = false; if (this.simpleSmoothModifier) { this.simpleSmoothModifier.enabled = true; } } this.seeker.pathConstraint = this.walkConstraint; if (this.mainSelected || (this.isBoro && this.sailing)) { this.seeker.clickPoint = this.clickedPoint; this.seeker.StartPath(this.tr.position, (Vector3)pathTarg.position, null); this.waitingForPath = 1; } else { if (this.party) { if (!this.raycastModifier.enabled) { this.seeker.clickPoint = Vector3.zero; } } else { this.seeker.clickPoint = Vector3.zero; } GraphNode graphNode = this.CastPoint(); if (graphNode != null) { this.seeker.StartPath(graphNode, pathTarg, null); this.waitingForPath = 1; } } } if (toDirection) { if (this.fleeing || this.movingOutOfWay) { if (this.fleeingAroundPoint) { this.seeker.clickPoint = Vector3.zero; this.seeker.pathConstraint = this.walkConstraint; pathTarg = this.NearNode((Vector3)pathTarg.position + new Vector3(Random.Range(-2f, 2f), 0f, Random.Range(-2f, 2f)), true, 0, -1, 0); if (pathTarg != null) { this.seeker.StartPath(this.CastPoint(), pathTarg, null); } else { this.seeker.StartFleePath(this.CastPoint(), this.savedPathTarget, 40000, new OnPathDelegate(this.PathFinished), 5f, 1000); } } else { this.seeker.clickPoint = Vector3.zero; this.seeker.pathConstraint = this.walkConstraint; int num = this.maxNodesSave; if (num > 40) { num = 40; } Vector3 vector = new Vector3(Random.Range(-2f, 2f), 0f, Random.Range(-2f, 2f)); if (this.savedPathTarget != null) { vector = (Vector3)this.savedPathTarget.position; } Quaternion quaternion = Quaternion.LookRotation(this.currentPosition - vector); if (!this.npc || this.hasActions) { this.setArea = (int)this.node.Area; } if (this.radius < 3f) { pathTarg = this.NearNode(this.currentPosition + quaternion * Vector3.forward * (float)num + new Vector3(Random.Range(-4f, 4f), 0f, Random.Range(-4f, 4f)), true, 0, -1, 0); } if (pathTarg != null && this.radius < 3f && Random.Range(0, 3) == 0) { this.seeker.StartPath(this.CastPoint(), pathTarg, null); } else { if (this.radius < 3f) { pathTarg = this.NearNode(this.currentPosition + quaternion * Vector3.forward * 3f + new Vector3(Random.Range(-4f, 4f), 0f, Random.Range(-4f, 4f)), true, 0, -1, 0); } if (pathTarg != null && this.radius < 3f) { this.seeker.StartPath(this.CastPoint(), pathTarg, null); } else { this.seeker.StartFleePath(this.CastPoint(), this.savedPathTarget, 40000, new OnPathDelegate(this.PathFinished), 1f, 1000); } } } this.waitingForPath = 1; } else { this.seeker.clickPoint = Vector3.zero; this.seeker.pathConstraint = this.walkConstraint; this.seeker.StartRandomPath(this.CastPoint(), 40000, new OnPathDelegate(this.PathFinished), 10f, 1000, (Vector3)this.savedPathTarget.position); this.waitingForPath = 1; } } if (Records.x.astarDebugging) { Debug.Log("Submitting path finished to seeker " + ((this != null) ? this.ToString() : null) + " " + this.waitingForPath.ToString()); } } // Token: 0x06000380 RID: 896 RVA: 0x00051358 File Offset: 0x0004F558 public void TakePath(Character takeFrom, GraphNode destination) { Debug.Log("take path " + ((takeFrom != null) ? takeFrom.ToString() : null) + " " + ((this != null) ? this.ToString() : null)); this.ClearNodePath(); this.prepPath.Clear(); this.prepVectorPath.Clear(); this.prepPathTemp = takeFrom.prepPath; this.prepVectorPathTemp = takeFrom.prepVectorPath; for (int i = 0; i < this.prepPathTemp.Count; i++) { this.prepPath.Add(this.prepPathTemp[i]); this.prepVectorPath.Add(this.prepVectorPathTemp[i]); } this.savedPathTarget = destination; this.maxNodesSave = 100; this.estimatedPathSave = false; this.toDirectionSave = false; } // Token: 0x06000381 RID: 897 RVA: 0x00051428 File Offset: 0x0004F628 public void Jump(GraphNode destination, Vector3 point, bool evade, bool isFlyBack) { this.ClearNodePath(); this.prepPath.Clear(); this.prepVectorPath.Clear(); this.prepVectorPath.Add(point); this.prepPath.Add(destination); this.waitingForPath = 2; this.savedPathTarget = destination; this.maxNodesSave = 100; this.estimatedPathSave = false; this.toDirectionSave = false; this.evading = evade; this.isHitFlying = isFlyBack; this.slideNode = null; this.DoPath(true); } // Token: 0x06000382 RID: 898 RVA: 0x000514AC File Offset: 0x0004F6AC public void PathFinished(Path p) { if (!Links.x.gaia.sceneLoaded || this.waitingForPath == 0) { if (Records.x.astarDebugging && Links.x.gaia.sceneLoaded) { Debug.Log(((this != null) ? this.ToString() : null) + " Path canceled - waiting for path = 0"); } return; } p.Claim(this); if (this.sailing && this.boatNavigator) { this.boat.SetNodeID(true, false); } else { this.SetNodeID(true, false); } if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { "Path finished ", (this != null) ? this.ToString() : null, " ", p.error.ToString(), " ", p.path.Count.ToString(), " ", p.vectorPath.Count.ToString() })); } bool flag = false; if (!p.error && !this.jumpingAreas) { this.tempPath = p.path; this.pathpointVectors = p.vectorPath; bool flag2 = false; if (this.raycastModifier && this.raycastModifier.enabled) { flag2 = true; } if (flag2) { if (!this.mainSelected && !this.hasActions && !this.inCircle && !this.inCombat && !this.npc && !this.isBoro && !this.sailing) { if (this.tempPath.Count > 15 && (Links.x.main.tr.position - this.currentPosition).sqrMagnitude < 400f) { flag = true; } if (this.tempPath.Count > 9 && (Links.x.main.tr.position - this.currentPosition).sqrMagnitude < 100f) { flag = true; } } this.prepVectorPath.Clear(); this.prepPath.Clear(); int count = this.pathpointVectors.Count; this.pointsTemp.Clear(); this.nodesTemp.Clear(); this.prevPoint = this.tr.position; if (this.pathpointVectors.Count > 0) { this.prevPoint = this.pathpointVectors[0]; } if (!flag) { for (int i = 1; i < count; i++) { float num = Vector3.Distance(this.pathpointVectors[i], this.prevPoint); int num2 = Mathf.RoundToInt(num) / 2 + 1; if (this.sailing) { num2 = Mathf.RoundToInt(num) / 4 + 1; } if (num == 0f) { num = 0.2f; } for (int j = 0; j < num2; j++) { float num3 = 2f * (float)j / num; if (this.sailing) { num3 = (float)(j + 1) / (float)num2; } if (num3 > 1f) { num3 = 1f; } if (num3 < 0f) { num3 = 0f; } Vector3 vector = Vector3.Lerp(this.prevPoint, this.pathpointVectors[i], num3); RaycastHit raycastHit; if (this.boatNavigator) { if (Physics.Raycast(vector + new Vector3(0f, 10f, 0f), Vector3.up * -1f, out raycastHit, 20f, 16) && !this.pointsTemp.Contains(raycastHit.point)) { this.pointsTemp.Add(raycastHit.point); this.nodesTemp.Add(this.tempPath[0]); } } else if (Physics.Raycast(vector + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 12f, 4194305) && Vector3.Distance(this.tr.position, vector) > 0.1f && !this.pointsTemp.Contains(raycastHit.point)) { this.pointsTemp.Add(raycastHit.point); this.nodesTemp.Add(this.tempPath[0]); } if (j == num2 - 1) { this.prevPoint = vector; } } } if (this.pointsTemp.Count > 0) { this.pointsTemp[this.pointsTemp.Count - 1] = this.pathpointVectors[this.pathpointVectors.Count - 1]; } else if (this.pathpointVectors.Count > 0) { this.pointsTemp.Add(this.pathpointVectors[this.pathpointVectors.Count - 1]); this.nodesTemp.Add(this.tempPath[0]); } if (this.pointsTemp.Count > 0) { GraphNode graphNode = this.NearNode(this.pointsTemp[this.pointsTemp.Count - 1], false, 0, (int)this.node.GraphIndex, 0); if (graphNode != null && this.nodesTemp.Count > 0) { this.nodesTemp[this.nodesTemp.Count - 1] = graphNode; } } for (int k = 0; k < this.pointsTemp.Count; k++) { if (k > 0) { this.prepVectorPath.Add(this.pointsTemp[k]); this.prepPath.Add(this.nodesTemp[k]); } else if ((this.pointsTemp[k] - this.tr.position).sqrMagnitude > 0.040000003f || this.boatNavigator) { this.prepVectorPath.Add(this.pointsTemp[k]); this.prepPath.Add(this.nodesTemp[k]); } } } } this.movingAreas = false; if (!flag2) { int count2 = this.tempPath.Count; this.prepPath.Clear(); this.prepVectorPath.Clear(); if (this.maxNodesSave == 0) { this.maxNodesSave = 100; } if (this.party && !this.mainSelected && this.maxNodesSave > 20) { this.maxNodesSave = 20; } uint num4 = 0U; if (this.node != null) { num4 = this.node.Area; } float nodeSize = Records.x.nodeSize; float nodeSize2 = Records.x.nodeSize; bool flag3 = false; Vector3 vector2 = this.tr.position; bool flag4 = false; bool flag5 = false; if (!this.mainSelected && !this.hasActions && !this.inCircle && !this.inCombat && !this.npc && !this.isBoro) { flag4 = false; if (this.tempPath.Count > 20 && (Links.x.main.tr.position - this.currentPosition).sqrMagnitude < 225f) { flag = true; flag3 = true; } if (this.tempPath.Count > 9 && (Links.x.main.tr.position - this.currentPosition).sqrMagnitude < 100f) { flag = true; flag3 = true; } } for (int l = 0; l < count2; l++) { if (this.prepPath.Count < this.maxNodesSave && this.tempPath[l] != null) { if (l == 0) { bool flag6 = false; if (this.tempPath[l].Area != num4) { flag6 = true; } GraphNode graphNode2 = this.node; if (this.boatNavigator) { GraphNode graphNode3 = this.boat.node; } if (flag6 && this.movingOutOfWay) { flag3 = true; } if (this.party && !this.mainSelected && flag6 && !this.inCircle) { flag3 = true; } if (this.forceNodePath) { flag6 = true; } float num5 = 6f; if (this.pathpointVectors.Count > 0) { num5 = (this.pathpointVectors[0] - this.tr.position).sqrMagnitude; } if (num5 > 36f && this.tempPath[0].HasLinkNode()) { flag6 = true; } if ((this.tempPath.Count <= 1 || (!this.sailing && num5 >= 6f)) && !flag3) { if (l < this.tempPath.Count) { if (flag6 || this.tempPath.Count == 1) { this.prepVectorPath.Add(this.GetNodeCenter(this.tempPath[l])); vector2 = this.prepVectorPath[0]; } else { if (l < this.pathpointVectors.Count) { this.prepVectorPath.Add(this.pathpointVectors[l]); } else { this.prepVectorPath.Add(this.GetNodeCenter(this.tempPath[l])); } vector2 = this.prepVectorPath[0]; } this.prepPath.Add(this.tempPath[l]); } else { if (flag6) { this.prepVectorPath.Add(this.GetNodeCenter(this.tempPath[this.tempPath.Count - 1])); } else { this.prepVectorPath.Add(this.pathpointVectors[this.pathpointVectors.Count - 1]); } this.prepPath.Add(this.tempPath[this.tempPath.Count - 1]); vector2 = this.prepVectorPath[0]; } } if (flag6) { this.movingAreas = true; } } else { int count3 = this.tempPath.Count; int count4 = this.pathpointVectors.Count; bool flag7 = false; if (l < count3 && l - 1 < count3) { if (this.tempPath[l].Area != this.tempPath[l - 1].Area) { flag7 = true; } if (((Vector3)this.tempPath[l].position - (Vector3)this.tempPath[l - 1].position).sqrMagnitude > 36f && (this.tempPath[l].HasLinkNode() || this.tempPath[l - 1].HasLinkNode())) { flag7 = true; } } if (l < count4 && l - 1 < count4) { float sqrMagnitude = (this.pathpointVectors[l] - this.pathpointVectors[l - 1]).sqrMagnitude; } if (l < count3 && l + 1 < count3 && this.tempPath[l].Area != this.tempPath[l + 1].Area) { flag7 = true; } if (l - 1 < count3 && l - 2 < count3 && l - 1 >= 0 && l - 2 >= 0 && this.tempPath[l - 1].Area != this.tempPath[l - 2].Area) { flag7 = true; } if (l - 2 < count3 && l - 3 < count3 && l - 3 >= 0 && l - 2 >= 0 && this.tempPath[l - 2].Area != this.tempPath[l - 3].Area) { flag7 = true; } if (l + 1 < count3 && l + 2 < count3 && this.tempPath[l + 1].Area != this.tempPath[l + 2].Area) { flag7 = true; } if (l + 2 < count3 && l + 3 < count3 && this.tempPath[l + 2].Area != this.tempPath[l + 3].Area) { flag7 = true; } if (flag7 && this.movingOutOfWay && this.party) { flag3 = true; } if (this.party && !this.mainSelected && flag7 && !this.missing && !this.inCircle) { flag3 = true; } if (this.forceNodePath) { flag7 = true; } if (flag4) { flag5 = false; if (l % 2 == 0) { flag5 = true; Vector3 vector3 = new Vector3(0f, 1f, 0f); Vector3 up = Vector3.up; LayerMask layerMask = 6357760; Vector3 vector4 = vector2; Vector3 vector5 = this.pathpointVectors[l]; Vector3 vector6 = Quaternion.LookRotation(vector5 - vector4) * Vector3.right; if (flag7) { flag5 = false; } if (flag5 && Physics.Linecast(vector4 + vector3, vector5 + vector3, layerMask)) { flag5 = false; } if (flag5 && Physics.Linecast(vector4 + vector3 + vector6 * 0.5f, vector5 + vector3 + vector6 * 0.5f, layerMask)) { flag5 = false; } if (flag5 && Physics.Linecast(vector4 + vector3 - vector6 * 0.5f, vector5 + vector3 - vector6 * 0.5f, layerMask)) { flag5 = false; } if (flag5) { float num6 = Vector3.Distance(vector5, vector4); int num7 = 1; int num8 = Mathf.RoundToInt(num6) * num7; for (int m = 0; m < num8; m++) { float num9 = (float)m / (float)num8; if (num9 > 1f) { num9 = 1f; } if (num9 < 0f) { num9 = 0f; } Vector3 vector7 = Vector3.Lerp(vector4, vector5, num9); if (flag5 && flag5) { if (!Physics.Raycast(vector7 + vector3, up * -1f, 2f, 4194305)) { flag5 = false; } RaycastHit raycastHit2; if (flag5 && Physics.Raycast(vector7 + vector3, up * -1f, out raycastHit2, 8f, 4194321) && raycastHit2.collider.gameObject.layer == 4) { flag5 = false; } } } } } } if (((this.boatNavigator && l % 3 == 0) || (!this.boatNavigator && !flag4) || (!this.boatNavigator && flag4 && !flag5) || (l == count2 - 1 && this.boatNavigator && this.hasActions) || (l == this.maxNodesSave - 1 && this.boatNavigator && this.hasActions)) && !flag3 && l < this.pathpointVectors.Count) { if (flag7) { this.prepVectorPath.Add(this.GetNodeCenter(this.tempPath[l])); vector2 = this.GetNodeCenter(this.tempPath[l]); } else { this.prepVectorPath.Add(this.pathpointVectors[l]); vector2 = this.pathpointVectors[l]; } this.prepPath.Add(this.tempPath[l]); } if (l < this.tempPath.Count) { num4 = this.tempPath[l].Area; } if (flag7) { this.movingAreas = true; } } } } if (((this.isBoro && this.sailing) || this.mainSelected) && this.clickedPoint != Vector3.zero && !this.usingCircles && Vector3.Distance(this.clickedPoint, this.pathpointVectors[this.pathpointVectors.Count - 1]) < 1f && !Physics.CheckSphere(this.clickedPoint, 1f, -2147417280)) { this.pathpointVectors[this.pathpointVectors.Count - 1] = this.clickedPoint; } this.forceNodePath = false; } if (this.prepPath.Count > 0) { this.waitingForPath = 2; if (this.toDirectionSave && this.prepPath[this.prepPath.Count - 1] != null) { this.savedPathTarget = this.prepPath[this.prepPath.Count - 1]; } if (Records.x.astarDebugging) { string[] array = new string[6]; array[0] = "Do path "; array[1] = ((this != null) ? this.ToString() : null); array[2] = " node path count "; array[3] = this.prepPath.Count.ToString(); array[4] = " "; int num10 = 5; GraphNode graphNode4 = this.prepPath[this.prepPath.Count - 1]; array[num10] = ((graphNode4 != null) ? graphNode4.ToString() : null); Debug.Log(string.Concat(array)); } if (this.savedPathTarget == null) { this.savedPathTarget = this.prepPath[this.prepPath.Count - 1]; } this.blockedTime = 0f; this.justMoved = false; this.tempStop = false; this.blocked = false; this.vectorPath.Clear(); this.nodePath.Clear(); this.nodeActions.Clear(); this.timeSinceFollowPath = Time.timeSinceLevelLoad; this.DoPath(true); } else { flag = true; } } else { flag = true; } if (flag) { if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " path failed, error: ", p.error.ToString(), " ", this.maxNodesSave.ToString(), " ", this.node.environment.ToString() })); if (this.tempPath != null) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " temp path count ", this.tempPath.Count.ToString(), " push count ", this.pushCount.ToString() })); } } this.movingOutOfWay = false; if (this.npc) { this.waitingForPath = 3; this.waitForPathTime = Time.timeSinceLevelLoad; if (this.hasActions) { if (!p.error && this.tempPath.Count == 1) { this.TargetReached(); } else { this.CheckIfClearPathEfforts(); } } else { this.CheckIfClearPathEfforts(); } } else if (this.hasActions && !this.jumpingAreas) { this.waitingForPath = 3; this.waitForPathTime = Time.timeSinceLevelLoad; if (!p.error && this.tempPath.Count == 1) { this.TargetReached(); return; } this.CheckIfClearPathEfforts(); return; } else { this.waitingForPath = 0; } } if (this.prepPath.Count == 0 && this.hasActions && this.creatures) { this.patrolNode--; } p.Release(this, false); } // Token: 0x06000383 RID: 899 RVA: 0x0005288C File Offset: 0x00050A8C public void AddKeyNode(GraphNode n, Vector3 pt) { if (n == this.node) { this.body.sameNode = true; } else { this.body.sameNode = false; } this.prepVectorPath.Clear(); this.prepPath.Clear(); this.prepPath.Add(n); this.prepVectorPath.Add(pt); this.waitingForPath = 2; this.savedPathTarget = n; this.maxNodesSave = 1; this.estimatedPathSave = false; this.toDirectionSave = false; this.DoPath(true); this.usingKeys = true; this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } // Token: 0x06000384 RID: 900 RVA: 0x00052954 File Offset: 0x00050B54 public GraphNode GetLastPrepNode() { if (this.nodePath.Count == 0) { return null; } if (!this.CheckControls()) { return null; } if (!Records.x.InCombat(false)) { return this.nodePath[this.nodePath.Count - 1]; } if (this.nodePath[this.nodePath.Count - 1] == null) { return null; } return this.nodePath[this.nodePath.Count - 1]; } // Token: 0x06000385 RID: 901 RVA: 0x000529D4 File Offset: 0x00050BD4 public void FindCurrentNodeAnytime(bool snap) { if (Links.x.gaia.noAstar || !this.tr) { return; } GraphNode graphNode = this.NearNode(this.tr.position, true, 0, -1, 0); if (graphNode != null) { this.nodePoint = (Vector3)graphNode.position; if (Mathf.Abs(this.nodePoint.y - this.tr.position.y) < 2f && (this.nodePoint - this.tr.position).sqrMagnitude < 16f) { if (!this.stuckInPlace && !this.moving && snap && !this.mainSelected) { this.Slide(graphNode, false); } this.ClaimNode(graphNode, this.nodePoint, false); } } } // Token: 0x06000386 RID: 902 RVA: 0x00052AB0 File Offset: 0x00050CB0 public void FindCurrentNode(bool snap) { if (this.tr && !this.offMap) { GraphNode graphNode = this.NearNode(this.tr.position, true, 0, -1, 0); if (graphNode != null && Mathf.Abs(this.nodePoint.y - this.tr.position.y) < 2f && (this.nodePoint - this.tr.position).sqrMagnitude < 16f) { this.nodePoint = (Vector3)graphNode.position; this.ClaimNode(graphNode, this.nodePoint, false); if (!this.stuckInPlace && !this.moving && snap && !this.mainSelected) { this.Slide(graphNode, false); } } } } // Token: 0x06000387 RID: 903 RVA: 0x00052B88 File Offset: 0x00050D88 public void SetWaypoint(Vector3 pt) { if ((this.vectorPath.Count > 2 || pt != Vector3.zero) && (this.mainSelected || this.showWaypoint) && this.waypoint) { if (!this.waypoint.activeSelf) { this.waypoint.SetActive(true); } if (!this.waypointAnimator.enabled) { this.waypointAnimator.enabled = true; this.waypointAnimator.Play("waypointArrowStart"); } if (pt == Vector3.zero) { pt = this.vectorPath[this.vectorPath.Count - 1]; } this.waypoint.transform.position = pt + new Vector3(0f, -0.5f, 0f); } } // Token: 0x06000388 RID: 904 RVA: 0x00052C6C File Offset: 0x00050E6C private bool CanEndJump() { RaycastHit raycastHit; return Physics.Raycast(this.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 30f, 4194449) && Vector3.Distance(raycastHit.point, this.tr.position) < 0.5f; } // Token: 0x06000389 RID: 905 RVA: 0x00052CE0 File Offset: 0x00050EE0 public void ForceEndJump() { RaycastHit raycastHit; if (this.jumping && Physics.Raycast(this.tr.position + new Vector3(0f, 3f, 0f), Vector3.up * -1f, out raycastHit, 30f, 4194449)) { this.SetPosition(raycastHit.point, null); } this.jumping = false; this.jumpLanding = false; } // Token: 0x0600038A RID: 906 RVA: 0x00052D58 File Offset: 0x00050F58 public void ClearNodePath() { if (this.jumping && !this.CanEndJump()) { return; } this.jumpLanding = false; this.vectorPath.Clear(); this.nodePath.Clear(); this.nodeActions.Clear(); this.moving = false; this.moveNode = null; this.movePoint = Vector3.zero; if (!this.npc && !this.isBoro && this.waypoint && this.waypointAnimator) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } if (this.sphere) { this.sphere.transform.position = this.tr.position; } this.waitingForPath = 0; this.savedPathTarget = null; this.jumping = false; if (this.isHitFlying) { this.isHitFlying = false; } this.waitingForNewPath = false; this.StopEvading(); this.MoveBackEmpty(); if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " is clearning node path"); } this.SetIdle(true); } // Token: 0x0600038B RID: 907 RVA: 0x00052EA8 File Offset: 0x000510A8 public void EndPath() { if (this.sailing) { return; } if (this.jumping) { return; } if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " end path ", this.nodePath.Count.ToString(), " ", this.vectorPath.Count.ToString(), " ", this.animator.speed.ToString(), " ", this.animID.ToString(), " ", this.moveOnTiles.ToString() })); } if (this.moving && this.movePoint != this.vectorZero) { this.sphere.transform.position = this.movePoint; } else if (this.sphere) { if (this.node != null && !this.mainSelected) { this.sphere.transform.position = this.NodePosition(); } else { this.sphere.transform.position = this.tr.position; } } if (Records.x.dialogue || Records.x.turnBased) { this.currentlyInDialogue = true; } if (this.node == null || Records.x.turnBased) { this.FindCurrentNode(false); } this.returnToPointTime = 0f; this.StopEvading(); if (this.nodePath.Count == 0 && this.node != null && !Records.x.dialogue) { if ((this.NodePosition() - this.tr.position).sqrMagnitude > 0.5625f) { this.vectorPath.Clear(); this.nodePath.Clear(); this.nodeActions.Clear(); this.nodeActions.Add("TileSwitch"); this.nodePath.Add(this.node); this.vectorPath.Add(this.NodePosition()); this.moveIndex = -1; this.waitingForPath = 0; if (this.sphere && this.node != null) { this.sphere.transform.position = this.NodePosition(); } if (this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } if (this.hasActions) { this.actions.targetMovePosition = this.nodePath[this.nodePath.Count - 1]; if (this.actions.TargetCount() > 0 && this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } } this.blockedTime = 0f; this.targetNode = this.node; this.tempStop = false; this.TurnEnter(true); } return; } this.savedPathTarget = null; this.waitingForPath = 0; int num = this.nodePath.Count - 1; if (this.nodePath.Count > 0) { this.tempStop = false; for (int i = 0; i < this.nodePath.Count; i++) { if (i != num) { this.nodePath[i] = null; this.nodeActions[i] = ""; this.vectorPath[i] = Vector3.zero; } else if (this.node != null) { this.nodePath[i] = this.node; this.vectorPath[i] = this.NodePosition(); this.moveNode = this.node; this.movePoint = this.NodePosition(); } } this.nodePath.RemoveAll((GraphNode item) => item == null); this.nodeActions.RemoveAll((string item) => item == ""); this.vectorPath.RemoveAll((Vector3 item) => item == Vector3.zero); if (this.sphere && this.node != null) { this.sphere.transform.position = this.NodePosition(); } if (this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } if (this.hasActions) { this.actions.targetMovePosition = this.nodePath[this.nodePath.Count - 1]; } this.GetLook(true); this.targetNode = this.node; } this.waitingForNewPath = false; this.StopMoveToRoutine(); this.ClearMoveTargets(); } // Token: 0x0600038C RID: 908 RVA: 0x0005342C File Offset: 0x0005162C public void StartDelayedPath(GraphNode pathTarg, float t, float delay) { if (!this) { return; } if (this.dead) { return; } if (this.inactive) { return; } if (this.delayPathCoroutine != null) { base.StopCoroutine(this.delayPathCoroutine); this.delayPathCoroutine = null; } this.delayPathCoroutine = this.DelayedPath(pathTarg, t, delay); base.StartCoroutine(this.delayPathCoroutine); } // Token: 0x0600038D RID: 909 RVA: 0x0005348B File Offset: 0x0005168B private IEnumerator DelayedPath(GraphNode pathTarg, float t, float delay) { if (delay > 0f) { if (delay == 100f) { yield return new WaitForSeconds(1f); while (!Links.x.fellowship.EveryoneInPosition(this)) { yield return null; } } else { while (this.inRecovery && this.hasActions) { yield return null; } yield return new WaitForSeconds(delay); } } else { yield return new WaitForSeconds(0.02f * t); } this.MakePath(pathTarg, 100, false, false, true); yield break; } // Token: 0x0600038E RID: 910 RVA: 0x000534B0 File Offset: 0x000516B0 public void ClearPathUpdatesAll() { Links.x.gameplay.RemoveNeedsPath(this); this.savedPathTarget = null; this.waitingForPath = 0; this.MoveBackEmpty(); this.blockedTime = 0f; this.stepReady = false; this.justMoved = false; this.tempStop = false; this.blocked = false; if (this.turning) { this.EndTurning(false); } } // Token: 0x0600038F RID: 911 RVA: 0x00053518 File Offset: 0x00051718 public void ClearCurrentPathNodes() { Links.x.gameplay.RemoveNeedsPath(this); this.savedPathTarget = null; this.waitingForPath = 0; this.MoveBackEmpty(); this.blockedTime = 0f; this.stepReady = false; this.justMoved = false; this.tempStop = false; this.blocked = false; if (this.turning) { this.EndTurning(false); } this.vectorPath.Clear(); this.nodePath.Clear(); this.nodeActions.Clear(); } // Token: 0x06000390 RID: 912 RVA: 0x000535A0 File Offset: 0x000517A0 public void ClearPathUpdates() { this.waitingForPath = 0; } // Token: 0x06000391 RID: 913 RVA: 0x000535AC File Offset: 0x000517AC public void MakePath(GraphNode pathTarg, int maxNodes, bool estimatePath, bool toDirection, bool skipPool) { if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " making path ", (pathTarg != null) ? pathTarg.ToString() : null, " ", this.waitingForPath.ToString() })); } if (this.dead || this.stunned || this.offMap || this.sleeping || (this.party && Records.x.partyCamping)) { return; } if (Records.x.removeControls && !this.ignoreRemoveControls && !Links.x.combat.inPocketAttack && !Links.x.combat.inRally) { return; } if (Records.x.dialogue && !this.ignoreRemoveControls) { return; } if (this.sailing && !this.ignoreRemoveControls && !this.boatNavigator) { return; } if (this.ambushing && this.waitingForPath == 0) { return; } if (!Links.x.gaia.sceneLoaded) { return; } if (Links.x.combat.combatCinematics && !this.waitingToJoinDome) { this.waitingForPath = 0; return; } if (this.stuckInPlace && !this.boatNavigator) { this.waitingForPath = 0; return; } if (this.stats.Stuck() > 0 && !this.sailing) { if (this.hasActions) { this.actions.EndTurn(true); } this.waitingForPath = 0; return; } if (!this.tr || this.dead || this.stunned) { this.waitingForPath = 0; return; } if (this.inactive && this.npc) { this.waitingForPath = 0; return; } if (this.node == null && !this.boatNavigator) { this.FindCurrentNode(true); } if (this.boatNavigator && this.boat.node == null) { this.boat.ClaimNode(null, this.boat.tr.position, false); } if (pathTarg == null) { this.waitingForPath = 0; return; } if (this.jumpingAreas) { return; } if (Records.x.astarDebugging) { string[] array = new string[22]; array[0] = ((this != null) ? this.ToString() : null); array[1] = " "; array[2] = ((Vector3)pathTarg.position).ToString(); array[3] = " "; array[4] = this.waitingForPath.ToString(); array[5] = " skip: "; array[6] = skipPool.ToString(); array[7] = " max: "; array[8] = maxNodes.ToString(); array[9] = " prep count: "; array[10] = this.prepPath.Count.ToString(); array[11] = " searching: "; array[12] = this.searching.ToString(); array[13] = " to direction: "; array[14] = toDirection.ToString(); array[15] = this.fleeingAroundPoint.ToString(); array[16] = " move target "; int num = 17; Character character = this.followingCharacter; array[num] = ((character != null) ? character.ToString() : null); array[18] = " ignore node ids "; array[19] = this.ignoreNodeIDs.ToString(); array[20] = " running "; array[21] = this.running.ToString(); Debug.Log(string.Concat(array)); } if (this.jumping && this.waitingForPath == 0) { return; } if (!Links.x.gaia.pathfindingReady) { this.waitingForPath = 0; return; } if (this.party && this.inRecovery && this.hasActions) { this.StartDelayedPath(pathTarg, 0f, 0.0001f); } if (!this.npc || this.inCombat) { skipPool = true; } if (!this.usingKeys) { this.body.sameNode = false; } this.usingKeys = false; this.maxNodesSave = maxNodes; this.blockedTime = 0f; this.tempStop = false; this.blocked = false; if (this.sphere) { this.sphere.transform.position = (Vector3)pathTarg.position; } this.savedPathTarget = pathTarg; if (this.body.lookAtController.hasTarget && !Records.x.dialogue) { this.body.lookAtController.hasTarget = false; } if (!skipPool) { this.estimatedPathSave = estimatePath; this.toDirectionSave = toDirection; Links.x.gameplay.AddNeedsPath(this, false); this.waitingForPath = -1; return; } if (this.waitingForPath == 3) { this.waitingForPath = 0; } if (this.waitingForPath <= 0 && !this.outsideBounds) { if (this.charging) { this.jumping = false; this.charging = false; } this.savedPathTarget = pathTarg; this.estimatedPathSave = estimatePath; this.toDirectionSave = toDirection; this.CheckPath(pathTarg, toDirection); return; } if (this.waitingForPath != 1) { this.waitingForPath = 0; if (!estimatePath && !this.estimatedPathSave) { this.OnMovePathComplete(); if (!this.npc) { if (this.nodePath.Count > 0) { if (this.canPush && !this.stats.animal) { this.pushCount = 0; } if ((!this.usingKeys && this.showWaypoint && this.mainSelected) || (this.isBoro && this.sailing)) { if (this.waypoint) { if (!this.waypoint.activeSelf) { this.waypoint.SetActive(true); } if (!this.waypointAnimator.enabled) { this.waypointAnimator.enabled = true; this.waypointAnimator.Play("waypointArrowStart"); } this.waypoint.transform.position = this.vectorPath[this.vectorPath.Count - 1] + new Vector3(0f, -0.5f, 0f); } } else if (this.waypoint && !this.showWaypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; } this.showWaypoint = false; if (this.hasActions) { this.actions.targetMovePosition = this.nodePath[this.nodePath.Count - 1]; if (this.actions.TargetCount() > 0 && this.waypoint) { if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } this.waypoint.transform.position = Links.x.gameplay.farPosition; } } } } else if (this.hasActions && this.nodePath.Count > 0) { this.actions.targetMovePosition = this.nodePath[this.nodePath.Count - 1]; } else if (this.nodePath.Count == 0) { if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " doesn't have enough nodes to make path"); } this.TargetReached(); } } else if (this.npc) { this.prepPath.Clear(); this.prepVectorPath.Clear(); } else { Records.x.InCombat(false); } this.clickedPoint = Vector3.zero; } } // Token: 0x06000392 RID: 914 RVA: 0x00053D2C File Offset: 0x00051F2C public void CheckIfClearPathEfforts() { this.pathTries++; if (this.pathTries > 2) { this.pathTries = 0; this.attackRadiusTries = 0; if (this.inCombat) { this.ClearMoveTargets(); this.waitingForPath = 0; this.sphere.transform.position = this.tr.position; this.TargetReached(); if (this.hasActions) { this.actions.EndTurn(true); return; } } else { this.ClearMoveTargets(); this.waitingForPath = 0; if (this.sphere) { this.sphere.transform.position = this.tr.position; } this.TargetReached(); this.patrolNode++; } } } // Token: 0x06000393 RID: 915 RVA: 0x00053DF8 File Offset: 0x00051FF8 public void StopMoveToRoutine() { if (!this) { return; } if (base.gameObject.activeSelf) { if (this.pathToCharacterCoroutine != null) { base.StopCoroutine(this.pathToCharacterCoroutine); } if (this.delayPathCoroutine != null) { base.StopCoroutine(this.delayPathCoroutine); } this.delayPathCoroutine = null; this.pathToCharacterCoroutine = null; } } // Token: 0x06000394 RID: 916 RVA: 0x00053E54 File Offset: 0x00052054 public bool CheckEarlyIfInRange() { if (this.followingType == "Dialogue") { float sqrMagnitude = (this.followingCharacter.tr.position - this.tr.position).sqrMagnitude; float num = this.InteractionDistanceCheck(this.followingType); return sqrMagnitude <= num; } return false; } // Token: 0x06000395 RID: 917 RVA: 0x00053EB0 File Offset: 0x000520B0 public void FinishMoveTo() { if (!Links.x.gaia.sceneLoaded) { this.ClearMoveTargets(); return; } if (this.followingCharacter) { this.targetPosition = this.followingCharacter.tr.position; } if (this.followingItem) { this.targetPosition = this.followingItem.tr.position; } if (this.followingType == "Dialogue") { Links.x.gameplay.FollowCharacterPathFinished(this.followingCharacter, this); } this.followingType.Contains("Charm"); if (this.followingType == "Attack") { if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.FollowCharacterPathFinished(this.followingCharacter, this); } if (this.followingType == "Item") { this.TargetReached(); if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.ItemPathFinished(this.followingItem, this); } if (this.followingType == "Exit") { if (this.turning) { this.EndTurning(true); } Links.x.gameplay.MapExitFinished(this.followingExit, this, false); } if (this.followingType == "Boat") { Links.x.gameplay.BoatFollowFinished(this.followingBoat); } if (this.followingType == "Breakable") { this.TargetReached(); if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.BreakableFinished(this.followingBreakable, this); } if (this.followingType == "Chest") { this.TargetReached(); if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.ChestFinished(this.followingChest, this); } if (this.followingType == "Door") { this.TargetReached(); if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.DoorFinished(this.followingDoor, this); } if (this.followingType == "Puzzle") { this.TargetReached(); if (this.inCombat && Records.x.turnBased) { this.actionPicked = true; } Links.x.gameplay.PuzzleFinished(this.followingInteractive, this); } if (this.followingCharacter || this.followingItem) { Quaternion quaternion = Quaternion.Euler(this.vectorZero); if (this.followingItem) { quaternion = Quaternion.LookRotation(this.followingItem.tr.position - this.tr.position); } else if (this.followingCharacter.transform.position != this.tr.position) { quaternion = Quaternion.LookRotation(this.followingCharacter.tr.position - this.tr.position); } this.rot = quaternion; Vector3 eulerAngles = this.rot.eulerAngles; eulerAngles.z = 0f; eulerAngles.x = 0f; this.rot = Quaternion.Euler(eulerAngles); } this.ClearMoveTargets(); } // Token: 0x06000396 RID: 918 RVA: 0x00054248 File Offset: 0x00052448 public void ClearMoveTargets() { if (Records.x.astarDebugging && !this.npc) { Debug.Log(((this != null) ? this.ToString() : null) + " clearing targets"); } this.followingCharacter = null; if (this.followingItem) { this.followingItem.StopMovingTo(); } this.followingItem = null; this.followingType = ""; this.followingNode = null; this.followingInteractive = null; this.followingBreakable = null; this.followingChest = null; this.followingDoor = null; this.followingBoat = null; this.followingExit = null; this.followingTime = 0f; if (this.pathToCharacterCoroutine != null) { base.StopCoroutine(this.pathToCharacterCoroutine); this.pathToCharacterCoroutine = null; } if (this.party) { this.waitingForNewPath = false; this.vectorPath.Clear(); this.nodePath.Clear(); this.nodeActions.Clear(); if (!this.npc && !this.isBoro && this.waypoint) { this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } if (this.sphere) { this.sphere.transform.position = this.tr.position; } this.waitingForPath = 0; this.savedPathTarget = null; } } // Token: 0x06000397 RID: 919 RVA: 0x000543CC File Offset: 0x000525CC public float InteractionDistanceCheck(string moveType) { float num = 4f; if (moveType == "Dialogue") { num = Links.x.fellowship.dialogueMaxDistance * Links.x.fellowship.dialogueMaxDistance; } if (moveType == "DialogueLong") { num = 100f; } if (moveType == "Searching") { float num2 = 15f; num = num2 * num2; } if (moveType.Contains("Charm")) { float num3 = 10f; num = num3 * num3; } if (moveType == "Item") { float num4 = 4f; num = num4 * num4; } if (moveType == "Boat") { float num5 = 20f; num = num5 * num5; } if (moveType == "Exit") { float num6 = 3f; if (this.followingExit.mapExit.exitTo != MapExit.exitToNames.Interiors && this.followingExit.mapExit.exitTo != MapExit.exitToNames.Exterior) { num6 = 4f; } num = num6 * num6; } if (moveType == "Breakable") { float num7 = 4f; if (this.followingBreakable.resourceLocation >= 0 && (this.followingBreakable.breakable.component == Breakable.ComponentTypes.Berry || this.followingBreakable.breakable.component == Breakable.ComponentTypes.Rock)) { num7 = 6f; } num = num7 * num7; } if (moveType == "Puzzle") { float num8 = 6f; num = num8 * num8; } if (moveType == "Chest") { float num9 = 4f; num = num9 * num9; } if (moveType == "Door") { float num10 = 4f; num = num10 * num10; } return num; } // Token: 0x06000398 RID: 920 RVA: 0x00054548 File Offset: 0x00052748 public void StartGetPathToTarget(GraphNode moveToNode, Character moveToCharacter, global::Item moveToItem, BreakableActions moveToBreakable, ChestActions moveToChest, DoorActions moveToDoor, PuzzleActions moveToInteractive, Boat moveToBoat, Character partyCharacter, MapExitActions moveToExit, bool unblockPath, bool showFeed, bool moveWithoutPoint, string moveType, bool distanceCheckOnly) { if (this.hasActions && this.actions.cannotInterrupt) { this.actions.TryingToInterruptInventoryWait(); return; } if (Records.x.astarDebugging && this.moveNode != null) { Debug.Log(((this != null) ? this.ToString() : null) + " is making target path for: " + ((Vector3)moveToNode.position).ToString()); } if (!Links.x.gaia.sceneLoaded || moveToNode == null) { return; } if (partyCharacter.node == null) { partyCharacter.FindCurrentNode(false); } if (partyCharacter.node == null) { return; } if (moveToCharacter) { if (moveToCharacter.dead || (moveToCharacter.stunned && !Records.x.kill)) { this.ClearMoveTargets(); return; } if (moveToCharacter.node == null) { this.ClearMoveTargets(); return; } } if (moveType == "Searching" && this.stats.formationGroup == 0) { return; } if (this.npc && this.inCircle) { return; } if (this.followingTime == 0f) { this.followingTime = Time.timeSinceLevelLoad; } else if (Time.timeSinceLevelLoad > this.followingTime + 10f) { this.ClearMoveTargets(); return; } this.followingCharacter = moveToCharacter; this.followingType = moveType; this.followingNode = moveToNode; if (this.followingItem && this.followingItem != moveToItem) { this.followingItem.StopMovingTo(); if (moveToItem) { moveToItem.MovingTo(); } } this.followingItem = moveToItem; this.followingBreakable = moveToBreakable; this.followingChest = moveToChest; this.followingDoor = moveToDoor; this.followingInteractive = moveToInteractive; this.followingBoat = moveToBoat; this.followingExit = moveToExit; if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " is making target path for: ", moveType, " distance only ", distanceCheckOnly.ToString(), " move node: ", (moveToNode != null) ? moveToNode.ToString() : null, " for character: ", (moveToCharacter != null) ? moveToCharacter.ToString() : null })); } if (this.pathToCharacterCoroutine == null && !this.doingAction && this.followingType != "") { this.pathToCharacterCoroutine = this.GetPathToTarget(moveToNode, moveToCharacter, moveToItem, moveToBreakable, moveToChest, moveToDoor, moveToInteractive, moveToBoat, partyCharacter, moveToExit, unblockPath, showFeed, moveWithoutPoint, moveType, 0f); base.StartCoroutine(this.pathToCharacterCoroutine); this.waitForPathToCharacter = false; return; } this.waitForPathToCharacter = true; } // Token: 0x06000399 RID: 921 RVA: 0x000547F0 File Offset: 0x000529F0 private IEnumerator GetPathToTarget(GraphNode moveToNode, Character moveToCharacter, global::Item moveToItem, BreakableActions moveToBreakable, ChestActions moveToChest, DoorActions moveToDoor, PuzzleActions moveToInteractive, Boat moveToBoat, Character partyCharacter, MapExitActions moveToExit, bool unblockPath, bool showFeed, bool moveWithoutPoint, string moveType, float maxDistance) { if (Records.x.paused) { yield return null; } float num = ((Vector3)moveToNode.position - (Vector3)partyCharacter.node.position).sqrMagnitude; float num2 = 100f; Vector3 realPosition = (Vector3)moveToNode.position; float maxY = 2.5f; if (moveType.Contains("Item")) { moveToNode = this.NearNode(moveToItem.transform.position, false, 0, 2, 0); Vector3 vector = (Vector3)moveToNode.position; Vector3 vector2 = this.NodePosition(); num = (vector - new Vector3(vector2.x, vector.y, vector2.z)).sqrMagnitude; num2 = (moveToItem.tr.position - new Vector3(this.tr.position.x, moveToItem.tr.position.y, this.tr.position.z)).sqrMagnitude; realPosition = moveToItem.tr.position; maxY = 4f; } if (moveType.Contains("Attacking") || moveType.Contains("Dialogue") || moveType.Contains("Charm")) { num = ((Vector3)moveToCharacter.node.position - (Vector3)partyCharacter.node.position).sqrMagnitude; num2 = (moveToCharacter.tr.position - this.tr.position).sqrMagnitude; realPosition = moveToCharacter.tr.position; maxY = 4f; } if (moveToBreakable) { num2 = (moveToBreakable.gameObject.transform.position - this.tr.position).sqrMagnitude; realPosition = moveToBreakable.gameObject.transform.position; } if (moveToChest) { num2 = (moveToChest.gameObject.transform.position - this.tr.position).sqrMagnitude; realPosition = moveToChest.gameObject.transform.position; } if (moveToDoor) { num2 = (moveToDoor.lockColliderPosition - this.tr.position).sqrMagnitude; realPosition = moveToDoor.lockColliderPosition; } if (moveToInteractive) { num2 = (moveToInteractive.gameObject.transform.position - this.tr.position).sqrMagnitude; realPosition = moveToInteractive.gameObject.transform.position; if (moveToInteractive.id.Contains("Birch") && Links.x.diorama.sceneName.Contains("C6")) { realPosition = (Vector3)moveToNode.position; } maxY = 4f; } if (moveToExit && moveToExit.mapExit.doorPoint != Vector3.zero) { num2 = ((Vector3)moveToNode.position - this.tr.position).sqrMagnitude; } maxDistance = this.InteractionDistanceCheck(moveType); if (moveType == "Dialogue" && moveToCharacter && moveToCharacter.stats.xmlName.Contains("StoreKeep")) { maxDistance = this.InteractionDistanceCheck("DialogueLong"); } if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { "Distance is ", num.ToString(), " real dist is ", num2.ToString(), " max distance is ", maxDistance.ToString(), " ", Vector3.Distance(this.NodePosition(), (Vector3)moveToNode.position).ToString(), " node pos ", this.NodePosition().ToString(), " following pos ", ((Vector3)moveToNode.position).ToString() })); } if ((num <= maxDistance || num2 < maxDistance) && moveType != "Searching" && !Records.x.paused) { if (this.followingExit) { this.alwaysTurn = true; this.SetRotation(Quaternion.LookRotation(this.followingExit.transform.position - this.tr.position), false, false); if (this.turning) { yield return new WaitForSeconds(0.25f); } } this.FinishMoveTo(); } else { if (moveToCharacter && moveType != "Searching" && moveToCharacter.node != null) { this.followingNode = moveToCharacter.node; moveToNode = this.followingNode; } if (moveType == "Boat") { this.followingNode = AstarPath.active.GetNearest(moveToBoat.transform.position, this.nodeConstraint).node; moveToNode = this.followingNode; } GraphNode foundNode = null; if (this.delayPath > 0f) { yield return new WaitForSeconds(this.delayPath); this.delayPath = 0f; } float minDistance = 0f; if (moveType == "Door") { minDistance = 0.48999998f; } bool stop = false; bool onTable = false; bool canCheckAllAngles = false; Vector3 forwAngle = Vector3.zero; Vector3 rightAngle = Vector3.zero; (Vector3)moveToNode.position; if (this.followingType == "Item" && Mathf.Abs(realPosition.y - this.tr.position.y) > 1.25f) { forwAngle = Quaternion.LookRotation(realPosition - new Vector3(this.tr.position.x, realPosition.y, this.tr.position.z)) * Vector3.forward; RaycastHit raycastHit; if (Physics.Raycast(this.tr.position + new Vector3(0f, 0.5f, 0f), forwAngle, out raycastHit, 30f, Links.x.sightBlockers) && raycastHit.normal.y <= 0.5f) { onTable = true; } canCheckAllAngles = true; rightAngle = Quaternion.LookRotation(realPosition - new Vector3(this.tr.position.x, realPosition.y, this.tr.position.z)) * Vector3.right; } if (this.followingType == "Breakable" && moveToBreakable.resourceLocation >= 0) { canCheckAllAngles = true; RaycastHit raycastHit2; Physics.Raycast(moveToBreakable.gameObject.transform.position + new Vector3(0f, 10f, 0f), Vector3.up * -1f, out raycastHit2, 30f, 4194433); forwAngle = Quaternion.LookRotation(realPosition - new Vector3(this.tr.position.x, realPosition.y, this.tr.position.z)) * Vector3.forward; rightAngle = Quaternion.LookRotation(realPosition - new Vector3(this.tr.position.x, realPosition.y, this.tr.position.z)) * Vector3.right; } bool testSpread = false; Vector3 stayPoint = Vector3.zero; if (this.followingType == "Searching" && (this.stats.defendMainInCombat || this.stats.stayNearPatrol)) { if (this.stats.defendMainInCombat && this.stats.defendingCharacter && this.stats.defendingCharacter.IsSentient()) { stayPoint = this.stats.defendingCharacter.currentPosition; testSpread = true; } if (this.stats.stayNearPatrol) { stayPoint = (Vector3)this.stats.stayNearPoint.position; testSpread = true; } } int num14; for (int i = 0; i < 8; i = num14 + 1) { if (i == 0 || (foundNode == null && canCheckAllAngles)) { GraphNode checkNode = moveToNode; GraphNode offsetNode = null; bool flag = false; if (canCheckAllAngles) { offsetNode = null; float num3 = 2.5f; Vector3 vector3 = Vector3.zero; if (i == 0) { vector3 = realPosition + forwAngle * -1f * num3; } if (i == 7) { vector3 = realPosition + forwAngle * num3; } if (i == 4) { vector3 = realPosition + rightAngle * -1f * num3; } if (i == 3) { vector3 = realPosition + rightAngle * num3; } if (i == 5) { vector3 = realPosition + forwAngle * num3 + rightAngle * num3; } if (i == 1) { vector3 = realPosition + forwAngle * -1f * num3 + rightAngle * num3; } if (i == 6) { vector3 = realPosition + forwAngle * num3 + rightAngle * -1f * num3; } if (i == 2) { vector3 = realPosition + forwAngle * -1f * num3 + rightAngle * -1f * num3; } if (onTable) { vector3.y = this.tr.position.y; } offsetNode = this.NearNode(vector3, false, 0, 2, 0); if (offsetNode != null) { checkNode = offsetNode; } else { flag = true; } } if (!flag && Links.x.gaia.pathfindingReady && Links.x.gaia.sceneLoaded && this.followingType != "") { for (int j = 0; j < 2; j = num14 + 1) { if (foundNode == null && this.followingType != "" && Links.x.gaia.pathfindingReady) { GraphNode graphNode = checkNode; if (j == 1) { graphNode = this.node; } ConstantPath constPath = ConstantPath.ConstructFast(graphNode, Records.x.GetConstantPathRadius(4), null); this.interactConstraint.constrainWalkability = false; this.interactConstraint.walkable = true; this.interactConstraint.constrainTags = false; this.interactConstraint.passID = 0; this.interactConstraint.passID2 = 0; this.interactConstraint.checkConnections = 0; this.interactConstraint.constrainToEnvironment = 1; if (this.ghost && !this.ghostVanishing) { this.interactConstraint.constrainToEnvironment = 0; } if ((this.sailing && this.boatNavigator) || this.movesOnWater) { this.interactConstraint.constrainToEnvironment = 2; } this.interactConstraint.constrainToArea = -1; this.interactConstraint.checkCircleID = 0; constPath.nnConstraint = this.interactConstraint; int x = 0; Vector3 zero = Vector3.zero; Vector3 thisPosition = this.tr.position; (Vector3)checkNode.position; Vector3 vector4 = Vector3.zero; int num4; if (Links.x.gaia.pathfindingReady && Links.x.gaia.sceneLoaded) { AstarPath.StartPath(constPath, false); yield return base.StartCoroutine(constPath.WaitForPath()); constPath.Claim(this); this.allNodes = constPath.allNodes; x = this.allNodes.Count; num4 = x - 1; if (!this.hasActions && (this.pushCount < Links.x.fellowship.pushCountMax || this.mainSelected)) { this.interactConstraint.constrainTags = false; } else { this.interactConstraint.constrainTags = true; } if (!this.mainSelected) { this.interactConstraint.checkCircleID = this.CheckCircleID(); } this.interactConstraint.passID = partyCharacter.nodeMovingID; this.interactConstraint.passID2 = partyCharacter.nodeStationaryID; this.interactConstraint.constrainWalkability = true; this.interactConstraint.walkable = true; if (this.npc) { this.interactConstraint.constrainPenalty = 1; } else { this.interactConstraint.constrainPenalty = 2; } this.interactConstraint.constrainToEnvironment = 1; if (this.ghost && !this.ghostVanishing) { this.interactConstraint.constrainToEnvironment = 0; } if (this.sailing && this.boatNavigator) { this.interactConstraint.constrainToEnvironment = 2; this.interactConstraint.passID = this.boat.nodeMovingID; this.interactConstraint.passID2 = this.boat.nodeStationaryID; this.interactConstraint.checkConnections = this.boat.ConnectionNumber(); } else { this.interactConstraint.checkConnections = partyCharacter.ConnectionNumber(); } if (this.movesOnWater) { this.interactConstraint.constrainToEnvironment = 2; } this.interactConstraint.constrainToArea = (int)this.node.Area; this.suitableNodes.Clear(); this.bestNodes.Clear(); this.nearNodes.Clear(); float num5 = 225f; for (int l = 0; l < x; l++) { GraphNode graphNode2 = this.allNodes[l]; if ((((Vector3)graphNode2.position - realPosition).sqrMagnitude < num5 || testSpread) && this.interactConstraint.Suitable(graphNode2)) { if (!testSpread) { this.suitableNodes.Add(graphNode2); } else if (((Vector3)graphNode2.position - stayPoint).sqrMagnitude < 100f) { this.suitableNodes.Add(graphNode2); } } } constPath.Release(this, false); } x = this.suitableNodes.Count; num4 = x - 1; this.used.Clear(); for (int m = 0; m < x; m++) { this.used.Add(false); } Vector3 vector5 = Quaternion.LookRotation(realPosition - new Vector3(this.tr.position.x, realPosition.y, this.tr.position.z)) * Vector3.forward; Vector3 vector6 = Vector3.zero; for (int n = 0; n < x; n++) { if (!stop) { float num6 = 100000f; int num7 = -1; for (int num8 = num4; num8 >= 0; num8--) { if (!stop && !this.used[num8]) { vector4 = (Vector3)this.suitableNodes[num8].position; float sqrMagnitude = this.SubtractVectors(new Vector3(realPosition.x, vector4.y, realPosition.z), vector4).sqrMagnitude; bool flag2; if (onTable) { if (vector4.y > thisPosition.y + 1.25f) { } flag2 = true; } else { flag2 = true; if (Mathf.Abs(vector4.y - thisPosition.y) > maxY) { flag2 = false; } } if (testSpread || (sqrMagnitude < num6 && sqrMagnitude < maxDistance && sqrMagnitude > minDistance && flag2)) { num7 = num8; num6 = sqrMagnitude; } } } if (num7 > -1) { this.used[num7] = true; this.bestNodes.Add(this.suitableNodes[num7]); } if (this.followingType == "") { stop = true; } } } x = this.bestNodes.Count; num4 = x - 1; this.used.Clear(); for (int num9 = 0; num9 < x; num9++) { this.used.Add(false); } if (moveType != "Exit") { for (int num10 = 0; num10 < x; num10++) { float num6 = -100f; int num7 = -1; for (int num11 = 0; num11 < x; num11++) { if (!this.used[num11]) { vector4 = (Vector3)this.bestNodes[num11].position; vector6 = Vector3.Normalize(realPosition - new Vector3(vector4.x, realPosition.y, vector4.z)); float num12 = Vector3.Dot(vector5, vector6); if (num12 > num6) { num7 = num11; num6 = num12; } } } if (num7 > -1) { this.used[num7] = true; this.nearNodes.Add(this.bestNodes[num7]); } if (this.followingType == "") { stop = true; } } } else { for (int num13 = 0; num13 < x; num13++) { this.nearNodes.Add(this.bestNodes[num13]); } } if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { this.allNodes.Count.ToString(), " ", this.suitableNodes.Count.ToString(), " ", this.bestNodes.Count.ToString(), " ", this.nearNodes.Count.ToString(), " ", stop.ToString() })); } if (this.followingType == "Exit") { this.nearNodes.Insert(0, moveToNode); } x = this.nearNodes.Count; bool flag3 = this.nearNodes.Count != 0 && !stop; if (flag3) { if (x > 0) { bool foundPath = false; for (int k = 0; k < x; k = num14 + 1) { if (!foundPath && !stop) { GraphNode destination = this.nearNodes[k]; if (this.node != null && destination != null) { ABPath p = ABPath.ConstructFast(this.node, destination, null); p.nnConstraint = this.interactConstraint; AstarPath.StartPath(p, false); yield return base.StartCoroutine(p.WaitForPath()); p.Claim(this); if (!p.error) { foundPath = true; foundNode = destination; } p.Release(this, false); p = null; } destination = null; } if (this.followingType == "") { stop = true; } num14 = k; } } if (foundNode != null) { if (canCheckAllAngles) { this.followingNode = offsetNode; moveToNode = offsetNode; break; } break; } } constPath = null; thisPosition = default(Vector3); } num14 = j; } } checkNode = null; offsetNode = null; } num14 = i; } if (canCheckAllAngles) { num = ((Vector3)moveToNode.position - (Vector3)partyCharacter.node.position).sqrMagnitude; num2 = (realPosition - partyCharacter.tr.position).sqrMagnitude; maxDistance = this.InteractionDistanceCheck(moveType); if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { "Item check final distance is ", num.ToString(), " max distance is ", maxDistance.ToString(), " ", Vector3.Distance(this.NodePosition(), (Vector3)moveToNode.position).ToString(), " node pos ", this.NodePosition().ToString(), " following pos ", ((Vector3)moveToNode.position).ToString() })); } if (num <= maxDistance || num2 <= maxDistance) { stop = true; this.FinishMoveTo(); } } if (!Links.x.gaia.pathfindingReady || !Links.x.gaia.sceneLoaded) { stop = true; } if (Records.x.astarDebugging && !stop) { if (foundNode != null) { string[] array = new string[8]; array[0] = "Interactive path found for "; array[1] = ((this != null) ? this.ToString() : null); array[2] = " "; array[3] = ((Vector3)foundNode.position).ToString(); array[4] = " "; array[5] = stop.ToString(); array[6] = " "; int num15 = 7; Character character = this.followingCharacter; array[num15] = ((character != null) ? character.ToString() : null); Debug.Log(string.Concat(array)); } else { Debug.Log(string.Concat(new string[] { "Interactive path NOT found for ", (this != null) ? this.ToString() : null, " node counts: ", this.suitableNodes.Count.ToString(), " ", this.bestNodes.Count.ToString(), " ", this.nearNodes.Count.ToString() })); if (moveToNode != null) { Debug.Log(((Vector3)moveToNode.position).ToString() + " move to node " + ((this != null) ? this.ToString() : null)); if (Records.x.editor) { this.CreateSphere((Vector3)moveToNode.position, 1f); } } } } if (!stop) { if (foundNode != null && this.followingType != "") { if (!this.npc) { if (moveType == "Item" || moveType == "Breakable" || moveType == "Chest" || moveType == "Puzzle" || moveType == "Door" || moveType == "Exit" || moveType == "Boat" || moveType.Contains("Charm")) { this.ClearPathUpdates(); if (!this.npc && this.hasActions) { if (this.actions) { this.actions.ClearSelectedActionRealTime(); } if (this.actions) { this.actions.Interrupt(); } if (this.actions) { this.actions.CheckIfRunningAI(); } } if (this.party || (this.boatNavigator && this.sailing && this.isBoro)) { this.showWaypoint = true; } if (Vector3.Distance((Vector3)foundNode.position, this.tr.position) < 0.75f) { this.FinishMoveTo(); } else { this.MakePath(foundNode, 100, false, false, true); } this.movingToPatrolNode = false; } else { Links.x.fellowship.MakeWaypoints(Vector3.zero, foundNode, false, false); } } else { this.ClearPathUpdates(); if (this.searching && moveType == "Searching" && this.animID == 24) { yield return new WaitForSeconds(1f); } this.MakePath(foundNode, 100, false, false, true); this.movingToPatrolNode = false; } } else { this.selectedBeforeDoor = false; if (!this.npc && this.followingType != "") { this.ClearPathUpdates(); this.ClearMoveTargets(); Links.x.gameFeed.ShowNotice("Cannot reach"); } else if (moveWithoutPoint && !stop) { this.ClearPathUpdates(); if (!this.npc && this.hasActions) { this.actions.ClearSelectedActionRealTime(); this.actions.Interrupt(); this.actions.CheckIfRunningAI(); } if (this.party || (this.boatNavigator && this.sailing && this.isBoro)) { this.showWaypoint = true; } this.MakePath(moveToNode, 100, false, true, true); this.movingToPatrolNode = false; } } } foundNode = null; forwAngle = default(Vector3); rightAngle = default(Vector3); stayPoint = default(Vector3); } this.pathToCharacterCoroutine = null; yield break; } // Token: 0x0600039A RID: 922 RVA: 0x00054870 File Offset: 0x00052A70 public void OnMovePathComplete() { int count = this.prepPath.Count; if (this.prepPath.Count > 0 && this.prepPath[this.prepPath.Count - 1] != null) { this.targetNode = this.prepPath[this.prepPath.Count - 1]; } this.PrepPath(count, false); if (this.animID == 23) { this.animID = 0; } } // Token: 0x0600039B RID: 923 RVA: 0x000548E8 File Offset: 0x00052AE8 public GraphNode GetPathNode(int num) { if (this.nodePath.Count == 0) { return this.node; } if (num < this.nodePath.Count) { return this.nodePath[num]; } return this.nodePath[this.nodePath.Count - 1]; } // Token: 0x0600039C RID: 924 RVA: 0x0005493C File Offset: 0x00052B3C public void DoFootsteps() { bool flag = false; if (!this.npc || (this.npc && this.hostility == 2) || (this.npc && this.attackingUntilBribe)) { flag = true; } if (this.isBoro && !this.sailing) { flag = false; } if (this.movesOnWater) { this.PlaySplash(); MasterAudio.PlaySound3DAtVector3AndForget("Splash", this.tr.position, Random.Range(0.4f, 0.5f), new float?(Random.Range(0.95f, 1f)), 0f, "", null); } if (flag) { if (this.sailing && this.boatNavigator) { this.boat.AddSounds(); } else { Links.x.sensory.AddFootstep(this); } if (this.npc) { bool flag2 = this.inCombat; } } this.GetTerrain(); if (this.party || this.visible == 1) { this.stats.CheckTerrainAbilities(this.terrain); } } // Token: 0x0600039D RID: 925 RVA: 0x00054A4C File Offset: 0x00052C4C public void PlaySplash() { if (this.splash) { Vector3 position = this.tr.position; position.y = 20.2f; if (!this.splash.activeSelf) { this.splash.SetActive(true); } foreach (object obj in this.splash.transform) { ((Transform)obj).gameObject.SetActive(true); } this.splash.transform.position = position; } } // Token: 0x0600039E RID: 926 RVA: 0x00054B00 File Offset: 0x00052D00 public void GetTerrain() { RaycastHit raycastHit; if (!this.dead && !this.stunned && this.visible == 1 && Physics.Raycast(this.nodePoint, Links.x.rtsCamera.tr.forward, out raycastHit, 600f, 16777216)) { Vector2 textureCoord = raycastHit.textureCoord; if (this.desiredGraph == 1) { textureCoord.x *= (float)Links.x.sensory.terrainTextureWidthInt; textureCoord.y *= (float)Links.x.sensory.terrainTextureHeightInt; } else { textureCoord.x *= (float)Links.x.sensory.terrainTextureWidthExt; textureCoord.y *= (float)Links.x.sensory.terrainTextureHeightExt; } string text = this.terrain; this.terrain = Links.x.sensory.GetPixelColor((int)textureCoord.x, (int)textureCoord.y, this.desiredGraph); if (this.mainSelected && Links.x.diorama.underground) { Color32 color = this.terrainColor; this.terrainColor = Links.x.sensory.GetPixelColorForUndergroundMap((int)textureCoord.x, (int)textureCoord.y); if (Links.x.sceneMap.undergroundMap) { Links.x.sceneMap.undergroundMap.ChangedArea(this.indoorID); } } } } // Token: 0x0600039F RID: 927 RVA: 0x00054C84 File Offset: 0x00052E84 public GraphNode CastPoint() { if (this.boatNavigator && this.sailing) { return this.boat.node; } if (this.node == null) { return this.NearNode(this.tr.position, false, 0, -1, 0); } if (this.npc) { return this.node; } if (this.SubtractVectors(this.tr.position, (Vector3)this.node.position).sqrMagnitude > 6.25f) { return this.NearNode(this.tr.position, false, 0, 2, 0); } return this.node; } // Token: 0x060003A0 RID: 928 RVA: 0x00054D28 File Offset: 0x00052F28 public void PrepPath(int pathLength, bool isCombatMove) { if (this.nodePath.Count > 0) { this.moveTurn = true; } this.blockedTime = 0f; int num = this.prepPath.Count; if (this.prepPath.Count > 0) { this.targetNode = this.prepPath[this.prepPath.Count - 1]; } if (this.animID == 23) { this.animID = 0; } this.moveIndex = -1; this.nodePath.Clear(); this.vectorPath.Clear(); this.nodeActions.Clear(); for (int i = 0; i < this.prepPath.Count; i++) { if (this.prepPath[i] != null) { this.nodePath.Add(this.prepPath[i]); this.vectorPath.Add(this.prepVectorPath[i]); this.nodeActions.Add("TileSwitch"); } } num = this.nodePath.Count; if (this.nodePath.Count > 0 && this.nodePath[num - 1] != null) { this.targetNode = this.nodePath[num - 1]; } if (this.party && this.raycastModifier && this.raycastModifier.enabled) { this.targetNode = this.NearNode(this.vectorPath[num - 1], false, 0, -1, 0); } if (!this.npc) { Links.x.fellowship.SetWaypoint(); } if (!this.moveTurn && this.nodePath.Count > 0) { this.nextNode = this.nodePath[0]; } if (Records.x.astarDebugging) { Debug.Log(string.Concat(new string[] { "Prep path made for ", (this != null) ? this.ToString() : null, " node points ", this.nodePath.Count.ToString(), " ", this.tr.position.ToString() })); } if (this.nodePath.Count == 0) { this.vectorPath.Clear(); this.nodePath.Clear(); this.EndPath(); if (this.fleeTime > 0f) { this.Flee(this.fleePoint, this.missing, 0f, 0f); return; } } else { if (this.fleeTime > 0f) { this.fleeing = true; if (Records.x.combat && this.radius < 3f) { this.ignoreNodeIDs = true; } this.CircleColor(true); } this.TurnEnter(false); if (this.isHitFlying && this.jumping && this.CanMove() && !this.pocketPaused) { this.Jumping(); } } } // Token: 0x060003A1 RID: 929 RVA: 0x0005501C File Offset: 0x0005321C public void PlayIdle() { if (this.IsSentient()) { if (this.animID != 6 && this.animID != 7 && this.animID != 33 && this.animID != 34 && this.animID != 8 && this.animID != 9 && this.animID != 23 && this.animID != 10 && this.animID != 23 && this.animID != 15 && this.animID != 16 && this.animID != 25) { this.PlayAnimation("Idle", Random.Range(0f, 1f)); this.animator.SetBool("Idle", true); if (this.summoned) { this.SetAnimatorSpeed(1f); } } if (this.dodging) { this.PlayAnimation("Defend", 0f); } if (this.sailing) { this.NeedToUpdateSailingAnimator(false); } } } // Token: 0x060003A2 RID: 930 RVA: 0x00055120 File Offset: 0x00053320 public void SetIdle(bool state) { if (state) { if (this.resting && !this.hasActions) { this.animator.SetBool("Idle", false); if (this.inCircle) { this.PlayAnimation("Fatigued", 0f); } else { this.PlayAnimation("Hit_down", 0f); } } else { if (this.animID != 0 && this.npc && !this.sailing) { this.animator.SetFloat("Combat Variation", this.GetAnimatorVariation(2)); float num = this.GetAnimatorVariation(3); if (this.stats.hasCustomIdle && !this.hasActions) { num = 1f; } this.animator.SetFloat("Idle Variation", num); } this.animator.SetBool("Idle", true); if (this.IsSentient() && (this.animID == 23 || this.animID == 1)) { this.animID = 0; } } } else { this.animator.SetBool("Idle", false); } this.SetAnimatorSpeed(1f); } // Token: 0x060003A3 RID: 931 RVA: 0x0005523C File Offset: 0x0005343C public void EarlyFinish(bool doMoveTurn) { if (this.jumping) { return; } this.MoveBackEmpty(); this.StopEvading(); this.nodePath.Clear(); this.nodeActions.Clear(); this.vectorPath.Clear(); if (!this.npc && this.hasActions) { this.actions.ClearMoves(); } this.moveIndex = -1; this.moveTurn = doMoveTurn; if (!this.waitingForNewPath && !this.boatNavigator && (this.animID == 23 || this.animID == 1)) { this.animID = 0; } if (this.fleeing) { this.CheckFleeEnd(); if (this.fleeing) { return; } } this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; if (!this.moveTurn && !this.waitingForNewPath) { if (!this.boatNavigator) { this.SetIdle(true); } this.moving = false; this.moveNode = null; this.movePoint = this.vectorZero; } if (Records.x.astarDebugging && Links.x.gaia.sceneLoaded) { Debug.Log("Early finish " + ((this != null) ? this.ToString() : null)); } } // Token: 0x060003A4 RID: 932 RVA: 0x0005536D File Offset: 0x0005356D public void StopMoving() { this.TargetReached(); } // Token: 0x060003A5 RID: 933 RVA: 0x00055378 File Offset: 0x00053578 public void TargetReached() { if (this.dead || this.stunned) { return; } if (this.jumping && !this.CanEndJump()) { return; } this.MoveBackEmpty(); this.animator.SetBool("Backward", false); this.StopEvading(); if (this.sailing && this.boatNavigator) { this.prevNodePosition = this.boat.tr.position; this.boat.TargetReached(); } else { this.prevNodePosition = this.tr.position; if (!this.waitingForNewPath) { if (this.IsMoveAnim()) { this.SetIdle(true); } if (this.animID == 23 || this.animID == 1) { this.animID = 0; } } } if (!this.fleeing && !Records.x.removeControls && !this.inCircle && this.npc && !this.missing && !this.ambushing) { if (this.creatures) { if (this.creatures.deactivating) { this.ignoreNodeIDs = true; } else { this.ignoreNodeIDs = false; } } else { this.ignoreNodeIDs = false; } } if (Links.x.gaia.sceneLoaded) { this.timeSinceMoveEnded = Time.timeSinceLevelLoad + Random.Range(3f, 8f); } this.justMoved = true; this.timeSinceLastMove = Time.timeSinceLevelLoad; this.moving = false; this.movingOutOfWay = false; this.returnToPointTime = 0f; this.running = false; this.blockPathCount = 0; if (this.isHitFlying) { this.isHitFlying = false; } this.movingAreas = false; this.alwaysJump = false; this.charging = false; if (Records.x.astarDebugging && Links.x.gaia.sceneLoaded) { Debug.Log("Target reached " + ((this != null) ? this.ToString() : null) + " " + this.tr.position.ToString()); } this.pathTries = 0; if (this.moveTurn) { this.stepReady = false; this.moveTurn = false; return; } this.movePoint = this.vectorZero; this.moveNode = null; this.stepReady = false; this.nodePath.Clear(); this.vectorPath.Clear(); this.nodeActions.Clear(); if (!this.npc && Records.x.InCombat(false)) { Links.x.combat.updateCircles = true; } if (this.hasActions && (this.followingType == "" || this.followingType.Contains("Attack")) && (!this.sailing || (this.sailing && this.npc)) && !this.jumpingPosition && this.waitingForPath != 1) { this.actions.CheckIfMoveComplete(); } if (this.fleeing) { this.CheckFleeEnd(); if (this.fleeing) { return; } } if (this.missing) { if (this.visible == 0) { this.Missing(); return; } this.fleeing = true; Debug.Log("Flee " + ((this != null) ? this.ToString() : null)); } if (!this.npc) { if (this.waypoint) { if ((this.tr.position - this.sphere.transform.position).sqrMagnitude < Records.x.nodeSize * Records.x.nodeSize || Records.x.dialogue || Records.x.removeControls) { this.savedPathTarget = null; this.sphere.transform.position = this.tr.position; } else if (!this.hasActions && !this.mainSelected && (this.tr.position - Links.x.main.tr.position).sqrMagnitude < 100f) { this.savedPathTarget = null; this.sphere.transform.position = this.tr.position; } this.waypoint.transform.position = Links.x.gameplay.farPosition; if (this.waypointAnimator.enabled) { this.waypointAnimator.enabled = false; } } } else { this.savedPathTarget = null; } if (this.movingToPatrolNode) { this.patrolNode++; this.movingToPatrolNode = false; } this.stepReady = false; this.tempStop = false; this.prepPath.Clear(); this.moveNode = null; this.movePoint = this.vectorZero; this.targetNode = null; this.nextNode = null; this.moveIndex = -1; this.blockedTime = 0f; if (!this.inactive) { if (this.sailing && this.boatNavigator) { this.boat.SetNodeID(false, false); } else { this.ClaimNode(this.node, this.nodePoint, false); } } if (this.doTurn && !this.hasActions && !this.boatNavigator && this.endTurn != Vector3.zero) { this.SetRotation(Quaternion.Euler(this.endTurn), false, false); } if (this.fleeing && this.fleeingAroundPoint) { this.SetRotation(Quaternion.LookRotation((Vector3)this.fleePoint.position, this.tr.position), false, false); } if (this.lookTarget && !this.boatNavigator && !this.moving && !this.mainSelected) { if (this.hasActions || Records.x.removeControls) { this.justMoved = false; this.SetRotation(Quaternion.LookRotation(this.lookTarget.tr.position - this.tr.position), false, false); this.lookTarget = null; } else { this.lookTargetTime = Time.timeSinceLevelLoad; } } if (this.npc) { this.GetPatrolHoldTime(true); } if (this.boatNavigator) { this.boat.CheckInTile(); } else { this.CheckInTile(); } if (this.downed || ((!this.hasActions || this.inCircle) && this.resting)) { if (this.resting && this.inCircle) { this.PlayAnimation("Fatigued", 0f); } else { this.PlayAnimation("Hit Down", 0f); } } if (this.followingType != "") { bool flag = Links.x.gameplay.CanScatterPartyToMakePath(this.followingType); if (this.npc || this.hasActions) { flag = false; } if (this.npc && this.followingType == "Searching" && this.GetLKPlayerBool(this.followingCharacter)) { this.ClearMoveTargets(); return; } this.StartGetPathToTarget(this.followingNode, this.followingCharacter, this.followingItem, this.followingBreakable, this.followingChest, this.followingDoor, this.followingInteractive, this.followingBoat, this, this.followingExit, flag, false, false, this.followingType, true); } } // Token: 0x060003A6 RID: 934 RVA: 0x00055AB4 File Offset: 0x00053CB4 public bool ObstacleTest(Vector3 pos, Vector3 testFromPos, bool testFromTr) { pos.y += 1.5f; float num = this.radius * 0.25f; Vector3 forward = Vector3.forward; Quaternion quaternion = this.rot; Vector3 vector = forward; for (int i = 0; i < 6; i++) { vector.y += 60f; quaternion = Quaternion.Euler(new Vector3(0f, vector.y, 0f)); if (Physics.Raycast(pos, quaternion * forward, num, Links.x.geometry)) { return true; } } if (testFromTr) { testFromPos.y += 1.5f; if (Physics.Linecast(testFromPos, pos, Links.x.geometry)) { return true; } } return false; } // Token: 0x060003A7 RID: 935 RVA: 0x00055B78 File Offset: 0x00053D78 public bool PointInNodes(Vector3 pt) { bool flag = false; Vector3 vector = this.NodePosition(); float num = pt.x - vector.x; if (num < 0f) { num *= -1f; } if (num < Records.x.nodeSize / 2f + 0.1f) { float num2 = pt.z - vector.z; if (num2 < 0f) { num2 *= -1f; } if (num2 < Records.x.nodeSize / 2f + 0.1f) { flag = true; } } return flag; } // Token: 0x060003A8 RID: 936 RVA: 0x00055C00 File Offset: 0x00053E00 public bool ConnectionIsParty(int x) { int count = this.gos.Count; for (int i = 0; i < count; i++) { Character character = this.gos[i]; if (character.nodeStationaryID == x || character.nodeMovingID == x) { return !character.npc; } } return true; } // Token: 0x060003A9 RID: 937 RVA: 0x00055C54 File Offset: 0x00053E54 public bool ConnectionIsStill(int x, out Character pushCharacter) { int count = this.gos.Count; pushCharacter = null; for (int i = 0; i < count; i++) { Character character = this.gos[i]; if ((character.nodeStationaryID == x || character.nodeMovingID == x) && (character.moving || character.NodesCount() > 0)) { if (character.npc && character.hasActions) { return false; } if (character.npc) { pushCharacter = character; return true; } if (!character.npc) { if (character.moving) { pushCharacter = character; } return true; } } } return true; } // Token: 0x060003AA RID: 938 RVA: 0x00055CE4 File Offset: 0x00053EE4 public bool AllTilesFree(GraphNode pt, bool planning) { if (pt == null) { return true; } bool flag = false; if ((!Records.x.removeControls && this.missing) || (this.offMap || this.ghostVanishing || (Records.x.pocketPause && !this.pocketPaused && !flag)) || Links.x.combat.inRally || this.ambushing) { return true; } int num = 0; if (this.sailing && !this.boatNavigator) { return true; } if (this.ignoreNodeIDs) { return true; } if (this.charging) { return true; } int num2 = 1; if (this.sailing || this.movesOnWater) { num2 = 2; } int num3; if (this.boatNavigator) { num3 = pt.AllConnectionsFreeParty(this.boat.nodeMovingID, this.boat.nodeStationaryID, this.boat.ConnectionNumber(), num2); } else { num3 = pt.AllConnectionsFreeParty(this.nodeMovingID, this.nodeStationaryID, this.ConnectionNumber(), num2); } bool flag2; if (num3 == 0) { flag2 = true; } else { flag2 = false; num = num3; } if (!flag2) { if (!planning && !this.boatNavigator) { int count = this.gos.Count; int i = 0; while (i < count) { Character character = this.gos[i]; if (character.nodeStationaryID == num || character.nodeMovingID == num) { if (character.NodesCount() == 0 && character.waitingForPath == 0 && character.blockedTime == 0f && character.nodeMovingID == num) { character.SetNodeID(true, false); if (Records.x.astarDebugging) { string[] array = new string[8]; array[0] = "setting collision character's node id "; int num4 = 1; Character character2 = character; array[num4] = ((character2 != null) ? character2.ToString() : null); array[2] = " "; int num5 = 3; GraphNode graphNode = character.node; array[num5] = ((graphNode != null) ? graphNode.ToString() : null); array[4] = " "; array[5] = num.ToString(); array[6] = " "; array[7] = ((this != null) ? this.ToString() : null); Debug.Log(string.Concat(array)); } } if (!this.npc && !this.hasActions && !this.mainSelected) { bool flag3 = false; if (Links.x.main.moving) { if (character.moving) { flag3 = true; } if (this.NodesCount() > 1) { flag3 = true; } } else if ((this.currentPosition - Links.x.main.currentPosition).sqrMagnitude > 625f) { flag3 = true; } if (flag3) { return true; } } if (character.node == null) { pt.ID = 0; character.FindCurrentNode(false); return true; } this.collisionCharacter = character; break; } else { i++; } } } if (this.collisionCharacter && this.mainSelected && (!this.collisionCharacter.npc || this.movingAreas)) { flag2 = true; } } return flag2; } // Token: 0x060003AB RID: 939 RVA: 0x00055FCC File Offset: 0x000541CC public Character GetNodeCharacter(int index) { int count = this.gos.Count; for (int i = 0; i < count; i++) { Character character = this.gos[i]; if (character.nodeStationaryID == index || character.nodeMovingID == index) { return character; } } return null; } // Token: 0x060003AC RID: 940 RVA: 0x00056018 File Offset: 0x00054218 public void CheckInTile() { if (!Links.x.gaia.sceneLoaded) { return; } if (this.inactive) { return; } if (this.isBoro && this.sailing) { return; } if (this.ghostVanishing || this.ambushing) { return; } if (Records.x.pocketPause) { return; } if (this.jumpingAreas || this.jumpingPosition) { return; } if (this.Pivoting()) { return; } if (this.inAction || this.inRecovery || this.inQueuedAbility) { return; } if (this.mainSelected) { return; } if (this.ignoreRemoveControls) { return; } if (this.jumping || this.charging || Links.x.combat.inPocketAttack) { return; } if (Time.timeSinceLevelLoad < this.tileCheckUpdateTime + 0.25f) { return; } if (this.inCircle && this.npc && this.group.inSwarm) { return; } if (this.isHit || this.body.IsHit()) { return; } if (this.waitingForPath == 1 || this.IsWalking()) { return; } if (!this.npc && !this.hasActions && Links.x.main && Links.x.main.moving) { return; } this.tileCheckUpdateTime = Time.timeSinceLevelLoad; if (this.node != null && this.slideNode == null) { Vector3 vector = this.NodePosition(); vector.y = this.tr.position.y; float sqrMagnitude = (vector - this.tr.position).sqrMagnitude; GraphNode graphNode = this.node; float num = Records.x.nodeSize * Records.x.nodeSize; if (this.radius > 1f) { num += 4f; } float num2 = 0.5625f; if (this.radius > 1f) { num2 = 2.25f; } float sqrMagnitude2 = (this.tr.position - Links.x.main.currentPosition).sqrMagnitude; bool flag = false; if (!this.moving && this.node.ID != this.nodeStationaryID && this.node.ID != this.nodeMovingID) { flag = true; } if ((sqrMagnitude > num || sqrMagnitude2 < 1f || this.node == Links.x.main.node || this.node == Links.x.main.mainNode2 || this.node == Links.x.main.mainNode3 || this.node == Links.x.main.mainNode4 || flag) && !this.moving && this.nodePath.Count == 0 && this.blockedTime == 0f && !this.waitingForNewPath) { bool flag2 = true; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainWalkability = true; if (this.sailing) { this.nodeConstraint.checkCircleID = 0; this.nodeConstraint.constrainTags = false; this.nodeConstraint.passID = 0; this.nodeConstraint.passID2 = 0; this.nodeConstraint.constrainToEnvironment = 2; } else { this.nodeConstraint.constrainTags = true; if (this.ghostVanishing) { this.nodeConstraint.constrainTags = false; } this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; if (this.ghost && !this.ghostVanishing) { this.nodeConstraint.constrainToEnvironment = 0; } else { this.nodeConstraint.constrainToEnvironment = 1; } if (this.movesOnWater) { this.nodeConstraint.constrainToEnvironment = 2; } this.nodeConstraint.checkCircleID = 0; } this.nodeConstraint.checkConnections = this.ConnectionNumber(); this.nodeConstraint.constrainToArea = -1; GraphNode graphNode2 = this.node.ClosestConnection(this.node, this.nodeStationaryID, this.nodeMovingID, 6f, this.tr.position, (int)this.radius, this.ConnectionNumber(), this.nodeConstraint, 0); if (graphNode2 != null) { vector = (Vector3)graphNode2.position; vector.y = this.tr.position.y; if ((vector - this.tr.position).sqrMagnitude < sqrMagnitude) { this.ClaimNode(graphNode2, (Vector3)graphNode2.position, false); flag2 = false; } } if (Records.x.astarDebugging && Records.x.editor && !this.sailing) { Debug.Log(string.Concat(new string[] { "Off tile ", (this != null) ? this.ToString() : null, " by ", Vector3.Distance((Vector3)graphNode.position, this.tr.position).ToString(), ", new node off by ", Vector3.Distance(this.NodePosition(), this.tr.position).ToString(), ", needs tile: ", flag2.ToString() })); } if (flag2) { GraphNode graphNode3 = this.NearNode(this.tr.position, true, 0, -1, 0); if (graphNode3 != null) { this.ClaimNode(graphNode3, (Vector3)graphNode3.position, false); } } if (this.inCombat && !this.sailing && !this.mainSelected) { vector = this.NodePosition(); vector.y = this.tr.position.y; if (!this.moving && ((vector - this.tr.position).sqrMagnitude > Records.x.nodeSize / 2f * (Records.x.nodeSize / 2f) || flag) && !this.mainSelected) { this.Slide(this.node, false); return; } } } else if (sqrMagnitude > num2 && !this.moving && this.nodePath.Count == 0 && this.blockedTime == 0f && !this.waitingForNewPath && !this.sailing && this.movePoint == Vector3.zero && this.rb.isKinematic && !this.mainSelected && !this.physicsMove && this.stats.Stuck() <= 0 && this.waitingForPath == 0) { bool flag3 = false; if (this.inCircle && this.ignoreNodeIDs) { flag3 = true; } if (!flag3) { this.Slide(this.node, false); } } } } // Token: 0x060003AD RID: 941 RVA: 0x00056708 File Offset: 0x00054908 public void SlideTo(GraphNode slide) { if (this.boatNavigator || this.sailing || this.jumping) { this.slideNode = null; this.slideNodePosition = Vector3.zero; return; } if (this.moving) { this.ClearNodePath(); } this.movingOutOfWayTime = Time.timeSinceLevelLoad; this.movingOutOfWay = true; this.slideNode = slide; this.slideNodePosition = (Vector3)slide.position; if (Records.x.editor) { Debug.Log(((this != null) ? this.ToString() : null) + " sliding " + ((Vector3)this.slideNode.position).ToString()); } this.ttime = 0f; this.prevPoint = this.tr.position; this.prevNodePosition = this.tr.position; this.ClaimNode(this.slideNode, (Vector3)this.slideNode.position, false); } // Token: 0x060003AE RID: 942 RVA: 0x00056808 File Offset: 0x00054A08 public void Slide(GraphNode n, bool actualSlide) { if (this.sailing) { return; } if (this.charging || this.evading || this.jumping || this.isHitFlying) { return; } bool flag = actualSlide; if (this.InAttack() && this.node.Walkable) { flag = false; } if (this.stats.Stuck() > 0 || this.stats.pinning || this.stats.pinned) { return; } if (flag) { if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " sliding"); } this.slideNode = n; this.slideNodePosition = (Vector3)n.position; if (Records.x.editor) { Debug.Log(((this != null) ? this.ToString() : null) + " sliding " + ((Vector3)this.slideNode.position).ToString()); } this.ttime = 0f; this.prevPoint = this.tr.position; this.prevNodePosition = this.tr.position; this.PlayAnimation("Stop", 0f); return; } if (!this.InAttack() && this.NodesCount() == 0) { if (Records.x.astarDebugging) { Debug.Log(((this != null) ? this.ToString() : null) + " slide jump"); } this.Jump(n, this.GetNodeCenter(n), false, false); } } // Token: 0x060003AF RID: 943 RVA: 0x00056994 File Offset: 0x00054B94 public void ZeroPreviousNode() { if (this.lastNode != null && this.radius == 1f && this.lastNode != this.node && (this.lastNode.ID == this.nodeStationaryID || this.lastNode.ID == this.nodeMovingID) && this.lastNode != this.node) { this.lastNode.ID = 0; this.lastNode.Tag = 0U; } if (this.radius > 1f && this.lastNode != null && this.lastNode != this.node) { this.lastNode.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.lastNode.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } this.lastNode = null; if (this.party) { if (this.mainNode2 != null) { this.mainNode2.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode2.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode3 != null) { this.mainNode3.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode3.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode4 != null) { this.mainNode4.SetFlowerConnections(0, this.nodeMovingID, this.ConnectionNumber()); this.mainNode4.SetFlowerConnections(0, this.nodeStationaryID, this.ConnectionNumber()); } this.mainNode2 = null; this.mainNode3 = null; this.mainNode4 = null; } } // Token: 0x060003B0 RID: 944 RVA: 0x00056B32 File Offset: 0x00054D32 public bool HasNode(GraphNode mouseNode) { return false; } // Token: 0x060003B1 RID: 945 RVA: 0x00056B35 File Offset: 0x00054D35 public Vector3 NodePosition() { if (this.radius == 3f) { return this.node.QuadCenter(); } return (Vector3)this.node.position; } // Token: 0x060003B2 RID: 946 RVA: 0x00056B60 File Offset: 0x00054D60 public Vector3 GetNodeCenter(GraphNode n) { if (this.radius == 3f) { return n.QuadCenter(); } return (Vector3)n.position; } // Token: 0x060003B3 RID: 947 RVA: 0x00056B84 File Offset: 0x00054D84 public void ClaimNode(GraphNode curr, Vector3 pos, bool snap) { if (Links.x.gaia.noAstar) { return; } if (this.offMap) { return; } bool flag = false; if (this.outsideBounds) { this.nodePoint = this.tr.position; } else { if (curr == null && pos != this.vectorZero) { GraphNode graphNode = this.NearNode(pos, true, 0, -1, 0); if (graphNode != null) { if (this.node != graphNode) { flag = true; } this.node = graphNode; this.nodePoint = this.NodePosition(); } else { this.RemoveLastNode(true); this.nodePoint = this.tr.position; } } if (curr == null && pos == this.vectorZero) { if (this.tr.position != this.vectorZero) { this.node = this.NearNode(this.tr.position, true, 0, -1, 0); if (this.node != null) { this.nodePoint = this.NodePosition(); if (!this.stuckInPlace && this.stats.Stuck() == 0 && !this.sailing && (snap || this.moveOnTiles || (!this.moveOnTiles && !this.mainSelected))) { this.SetPosition(this.nodePoint, null); } } flag = true; } else { this.RemoveLastNode(true); this.nodePoint = this.tr.position; } } if (curr != null) { if (this.node != curr) { if (curr.GraphIndex == 1U) { this.GetIndoorID(); } else { this.indoorID = ""; } if (this.hasActions) { this.CheckForLeaveBehindTiles(); } flag = true; if (this.body.sneaking) { this.CheckLights(false); } float num = 100f; if (this.running) { num = 49f; } if ((this.lastFatiguePosition - this.tr.position).sqrMagnitude > num && this.npc) { if (this.inCombat) { if (this.running) { this.stats.AddStamina(-3f); } else { this.stats.AddStamina(-1f); } } this.lastFatiguePosition = this.tr.position; } } this.node = curr; this.nodePoint = this.NodePosition(); } if (flag && !this.moving) { Links.x.gameplay.CheckTileEffects(this, this.node, false); } if (this.node == null) { this.nodePoint = this.tr.position; } this.ZeroPreviousNode(); if (this.mainSelected && this.node != null && this.radius <= 1f) { int num2 = 0; for (int i = 0; i < 4; i++) { float num3 = 2f; GraphNode graphNode2 = null; for (int j = 0; j < 8; j++) { GraphNode graphNode3 = this.node.ConnectionFromIndex(j); if (graphNode3 != null && graphNode3 != this.mainNode2 && graphNode3 != this.mainNode3 && graphNode3 != this.mainNode4) { float num4 = Vector3.Distance(this.tr.position, (Vector3)graphNode3.position); if (num4 < num3) { graphNode2 = graphNode3; num3 = num4; } } } if (graphNode2 == null) { break; } if (num2 == 0) { this.mainNode2 = graphNode2; } if (num2 == 1) { this.mainNode3 = graphNode2; } if (num2 == 2) { this.mainNode4 = graphNode2; } num2++; } this.GetIndoorID(); } if (this.node != null) { this.SetNodeID(false, false); this.lastNode = this.node; } else { this.lastNode = null; } } this.CheckForPickup(); if (this.party && this.IsWalking() && Links.x.diorama.InTown(this.tr.position) != this.inTown) { this.PlayAnimation("Walk", 0f); } this.heightAdd = this.characterHeight - 0.5f; } // Token: 0x060003B4 RID: 948 RVA: 0x00056F78 File Offset: 0x00055178 public void CheckForLeaveBehindTiles() { if (this.npc && this.stats.leaveBehindTiles) { string text = ""; if (this.stats.xmlName.Contains("Fish") && (this.IsWalking() || this.animID == 1) && this.animator.GetFloat("Combat Variation") == 1f) { text = "FishPoison"; } if (text != "") { Library.Abilities abilityRow = Links.x.library.GetAbilityRow(text); TileEffects tileEffects = Links.x.tileEffects.AddComponent(); tileEffects.startNode = this.node; tileEffects.spellTarget = null; tileEffects.source = this; tileEffects.spellIndex = this.stats.SpellIndex(text); tileEffects.paganRow = Links.x.library.GetPaganRow(text); tileEffects.mainSkill = abilityRow._MainSkill; tileEffects.sourceLevel = (float)this.stats.level; tileEffects.Setup(abilityRow, null, this.actions, null, null, this); } } } // Token: 0x060003B5 RID: 949 RVA: 0x0005708C File Offset: 0x0005528C public void CheckForPickup() { Pickups pickups = Links.x.cellar.NodeHasPickup(this.node); if (pickups) { pickups.PickItUp(this); } } // Token: 0x060003B6 RID: 950 RVA: 0x000570C0 File Offset: 0x000552C0 public void GetIndoorID() { if (this.node == null) { return; } if (this.node.GraphIndex == 1U) { this.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName((Vector3)this.node.position); return; } this.indoorID = ""; } // Token: 0x060003B7 RID: 951 RVA: 0x0005711C File Offset: 0x0005531C public void SetNodeID(bool overrideDefaults, bool moving) { if (this.dead) { return; } if (this.sailing) { return; } int num = this.nodeMovingID; if (this.nodePath.Count == 0 || (this.nodePath.Count > 0 && this.blockedTime > 0f)) { num = this.nodeStationaryID; } if (overrideDefaults) { if (moving) { num = this.nodeMovingID; } else { num = this.nodeStationaryID; } } if (this.node != null && !this.sailing) { this.node.SetFlowerConnections(num, this.nodeMovingID, this.ConnectionNumber()); this.node.SetFlowerConnections(num, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainSelected) { if (this.mainNode2 != null) { this.mainNode2.SetFlowerConnections(num, this.nodeMovingID, this.ConnectionNumber()); this.mainNode2.SetFlowerConnections(num, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode3 != null) { this.mainNode3.SetFlowerConnections(num, this.nodeMovingID, this.ConnectionNumber()); this.mainNode3.SetFlowerConnections(num, this.nodeStationaryID, this.ConnectionNumber()); } if (this.mainNode4 != null) { this.mainNode4.SetFlowerConnections(num, this.nodeMovingID, this.ConnectionNumber()); this.mainNode4.SetFlowerConnections(num, this.nodeStationaryID, this.ConnectionNumber()); } } } // Token: 0x060003B8 RID: 952 RVA: 0x0005727C File Offset: 0x0005547C public int CheckCircleID() { if (this.inCircle) { if (!this.npc) { if (this.hasCircleBuff) { return 1; } } else if (this.group) { if (this.hasCreatureBuff) { return this.group.groupID; } if (!this.hasCreatureBuff) { if (false) { return 0; } return this.group.groupID; } } } return 0; } // Token: 0x060003B9 RID: 953 RVA: 0x000572E0 File Offset: 0x000554E0 public GraphNode NearNode(Vector3 pos, bool checkEmpty, int uniqueID, int graphIndex, int circleID) { if (this.ghostVanishing) { checkEmpty = false; } if (Links.x.gaia.noAstar) { return null; } this.nodeConstraint.constrainWalkability = true; this.nodeConstraint.walkable = true; this.nodeConstraint.constrainTags = checkEmpty; this.nodeConstraint.checkCircleID = circleID; this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.constrainPenalty = 0; this.nodeConstraint.checkConnections = this.ConnectionNumber(); if (this.ghost && !this.ghostVanishing) { this.nodeConstraint.constrainToEnvironment = 0; } else if (this.sailing || this.movesOnWater) { this.nodeConstraint.constrainToEnvironment = 2; } else { this.nodeConstraint.constrainToEnvironment = 1; } this.nodeConstraint.uniqueID = uniqueID; int num = this.setArea; this.nodeConstraint.constrainToArea = num; this.setArea = -1; GraphNode graphNode = AstarPath.active.GetNearest(pos, this.nodeConstraint).node; if (graphNode != null) { return graphNode; } return null; } // Token: 0x060003BA RID: 954 RVA: 0x00057408 File Offset: 0x00055608 public Vector3 FindFloorPoint(Vector3 start, bool directRaycast, Vector3 checkFrom, float minDist, string type) { Vector3 vector = this.vectorZero; bool flag = false; Vector3 vector2 = start; vector2.y += 0.9f; float num = 1.75f; if (Physics.Raycast(vector2, -1f * this.upVector, out this.rayHit, num, 4096)) { Vector3 point = this.rayHit.point; bool flag2 = false; if (!flag2) { flag2 = this.ObstacleTest(point, checkFrom, directRaycast); } if (!flag2) { bool flag3 = true; if (type != "") { flag3 = this.AllTilesFree(null, true); } if (flag3) { flag = true; vector = point; } } } if (type == "") { flag = true; } bool flag4 = false; if (type == "Quick") { flag4 = true; } if (!flag) { float num2 = float.PositiveInfinity; float num3 = 2f; float num4 = 2f; if (start == checkFrom) { flag4 = true; } if (flag4) { int num5 = 0; int num6 = 0; int num7 = 0; int num8 = 0; int num9 = Random.Range(0, 4); if (num9 == 1) { num5 = 1; num6 = 2; num7 = 3; num8 = 0; } if (num9 == 2) { num5 = 3; num6 = 2; num7 = 0; num8 = 1; } if (num9 == 3) { num5 = 2; num6 = 3; num7 = 1; num8 = 0; } this.nodeFindDirections[num5] = checkFrom; Vector3[] array = this.nodeFindDirections; int num10 = num5; array[num10].x = array[num10].x + num3; Vector3[] array2 = this.nodeFindDirections; int num11 = num5; array2[num11].y = array2[num11].y + 0.5f; this.nodeFindDirections[num6] = checkFrom; Vector3[] array3 = this.nodeFindDirections; int num12 = num6; array3[num12].z = array3[num12].z + num3; Vector3[] array4 = this.nodeFindDirections; int num13 = num6; array4[num13].y = array4[num13].y + 0.5f; this.nodeFindDirections[num7] = checkFrom; Vector3[] array5 = this.nodeFindDirections; int num14 = num7; array5[num14].x = array5[num14].x + num3 * -1f; Vector3[] array6 = this.nodeFindDirections; int num15 = num7; array6[num15].y = array6[num15].y + 0.5f; this.nodeFindDirections[num8] = checkFrom; Vector3[] array7 = this.nodeFindDirections; int num16 = num8; array7[num16].z = array7[num16].z + num3 * -1f; Vector3[] array8 = this.nodeFindDirections; int num17 = num8; array8[num17].y = array8[num17].y + 0.5f; } else { Vector3 eulerAngles = Quaternion.LookRotation(start - checkFrom).eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; Vector3 vector3 = eulerAngles; vector3.y += 45f; Vector3 vector4 = eulerAngles; vector4.y -= 45f; Vector3 vector5 = eulerAngles; vector5.y += 90f; Vector3 vector6 = eulerAngles; vector6.y -= 90f; this.nodeFindDirections[0] = this.vectorZero; this.nodeFindDirections[1] = this.vectorZero; this.nodeFindDirections[2] = this.vectorZero; this.nodeFindDirections[3] = this.vectorZero; bool flag5 = false; bool flag6 = false; bool flag7 = false; bool flag8 = false; if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector3) * Vector3.forward, 3f, Links.x.allObstacles)) { flag6 = true; } if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector4) * Vector3.forward, 3f, Links.x.allObstacles)) { flag5 = true; } if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector5) * Vector3.forward, 2f, Links.x.allObstacles)) { flag8 = true; } if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector6) * Vector3.forward, 2f, Links.x.allObstacles)) { flag7 = true; } if (flag5) { this.nodeFindDirections[0] = checkFrom + Quaternion.Euler(vector4) * Vector3.forward * num4; } if (flag6) { this.nodeFindDirections[1] = checkFrom + Quaternion.Euler(vector3) * Vector3.forward * num4; } if (flag7) { this.nodeFindDirections[2] = checkFrom + Quaternion.Euler(vector6) * Vector3.forward * num4; } if (flag8) { this.nodeFindDirections[3] = checkFrom + Quaternion.Euler(vector5) * Vector3.forward * num4; } if (!flag5 && !flag7 && !flag6 && !flag8) { vector5 = eulerAngles; vector5.y += 135f; vector6 = eulerAngles; vector6.y -= 135f; if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector5) * Vector3.forward, out this.rayHit, 4f, Links.x.allObstacles)) { this.nodeFindDirections[1] = checkFrom + Quaternion.Euler(vector5) * Vector3.forward * num4; } if (!Physics.Raycast(checkFrom + this.yAdd2, Quaternion.Euler(vector6) * Vector3.forward, out this.rayHit, 4f, Links.x.allObstacles)) { this.nodeFindDirections[0] = checkFrom + Quaternion.Euler(vector6) * Vector3.forward * num4; } } } for (int i = 0; i < 4; i++) { Vector3 vector7 = this.nodeFindDirections[i]; bool flag9 = true; Vector3 vector8 = vector7; vector8.y = start.y; float sqrMagnitude = this.SubtractVectors(start, vector8).sqrMagnitude; if (flag9 && vector7 != this.vectorZero && sqrMagnitude < num2) { vector2 = vector7; vector2.y += 0.8f; if (Physics.Raycast(vector2, -1f * this.upVector, out this.rayHit, num, 4194449)) { Vector3 point2 = this.rayHit.point; bool flag10 = this.ObstacleTest(point2, checkFrom, directRaycast); if (!flag10 && !flag4) { flag9 = this.AllTilesFree(null, true); } if (!flag10 && flag9) { num2 = sqrMagnitude; vector = point2; } } } } } return vector; } // Token: 0x060003BB RID: 955 RVA: 0x00057ABB File Offset: 0x00055CBB public GraphNode GetLastNode() { if (this.nodePath.Count > 0) { return this.nodePath[this.nodePath.Count - 1]; } return null; } // Token: 0x060003BC RID: 956 RVA: 0x00057AE8 File Offset: 0x00055CE8 public void ZeroAttackTime(float attackTimeReduction) { this.currentAttackSpeed = this.stats.ActionTime() + this.inventoryTime; if (this.currentAttackSpeed < 0.25f) { this.currentAttackSpeed = 0.25f; } float num = this.currentAttackSpeed * attackTimeReduction / this.currentAttackSpeed; this.at = num; this.attackTime = num; this.stats.UpdateAbilityTriggers(); if (this.portrait) { this.portrait.SetActionBar(this.attackTime); this.portrait.skillBag.SetSelectedState(); } this.inventoryTime = 0f; } // Token: 0x060003BD RID: 957 RVA: 0x00057B88 File Offset: 0x00055D88 public void FullAttackTime() { if (!this.IsSentient()) { this.attackTime = 0f; return; } this.at = 1f; this.attackTime = 1f; this.inventoryTime = 0f; if (this.portrait) { this.portrait.SetActionBar(this.attackTime); this.portrait.skillBag.SetSelectedState(); } if (this.mainSelected) { Links.x.hudControl.UpdateAttackTime(this.at, 1f, this.inventoryTime); } } // Token: 0x060003BE RID: 958 RVA: 0x00057C20 File Offset: 0x00055E20 public void UpdateAtkTime(float amt) { this.inventoryTime += amt; if (amt < 0f && this.mainSelected) { Links.x.hudControl.AttackTimerDecreaseTime(); } float num = this.at * this.currentAttackSpeed; this.currentAttackSpeed = this.stats.ActionTime() + this.inventoryTime; if (this.currentAttackSpeed < 0.25f) { this.currentAttackSpeed = 0.25f; } this.at = num / this.currentAttackSpeed; this.attackTime = this.at; if (this.portrait) { this.portrait.SetActionBar(this.attackTime); } if (this.mainSelected) { Links.x.hudControl.UpdateAttackTime(this.at, 1f, this.inventoryTime); if (Records.x.pocketPause && amt > 0f) { Links.x.gameplay.PocketPause(false); } } } // Token: 0x060003BF RID: 959 RVA: 0x00057D1C File Offset: 0x00055F1C public void Leave(bool canBeStunned) { if (this.dead || (!canBeStunned && this.stunned)) { Debug.Log("Cannot make a dead/stunned character leave " + ((this != null) ? this.ToString() : null)); } if (Records.x.editor) { Debug.Log("Leaving " + ((this != null) ? this.ToString() : null)); } this.missing = true; this.missingTime = Time.timeSinceLevelLoad; this.hostility = -1; if (this.actions && this.hasActions) { this.actions.EndActions(); } if (this.sleeping) { this.WakeUp(); } if (this.inactive) { this.TurnScriptsOn(); } this.alwaysOn = true; this.stats.state = "Fled"; if (Links.x.hasMain) { this.Flee(Links.x.main.node, true, Links.x.gameplay.seconds, 100f); } else { this.Flee(this.node, true, Links.x.gameplay.seconds, 100f); } if (this.stunned) { this.Missing(); } } // Token: 0x060003C0 RID: 960 RVA: 0x00057E53 File Offset: 0x00056053 public void LeaveToDeactivationPoint() { if (this.inactive) { this.TurnScriptsOn(); } this.alwaysOn = true; if (this.sleeping) { this.WakeUp(); } this.deactivating = true; } // Token: 0x060003C1 RID: 961 RVA: 0x00057E80 File Offset: 0x00056080 public void Missing() { this.missing = true; this.alwaysOn = true; this.Dead(true, false, true); CreatureActions creatureActions = this.creatures; if (creatureActions && this.swarm) { creatureActions.RemoveFromScene(); } this.SetMeshState(false); this.stats.state = "Fled"; this.body.SetMeshState(false, true); this.body.Missing(); if (this.summoned) { this.DestroyCharacter(); } if (Records.x.editor) { Debug.Log(((this != null) ? this.ToString() : null) + " has left the scene"); } } // Token: 0x060003C2 RID: 962 RVA: 0x00057F28 File Offset: 0x00056128 public void Flee(GraphNode fromNode, bool isMissing, float startTime, float fleeTimeLength) { if (!this.fleeingAroundPoint && (this.fleeTime > 0f || this.stunned || this.dead)) { return; } if (startTime != 0f) { this.fleeTime = fleeTimeLength; this.fleeStartTime = startTime; } if (Records.x.editor) { Debug.Log("Fleeing " + ((this != null) ? this.ToString() : null)); } this.fleePoint = fromNode; if (this.mainSelected && this.physicsMove) { this.StopMove(); } this.fleeing = true; int num = 20; if (this.summoned && isMissing) { num = 80; this.ignoreNodeIDs = true; } this.MakePath(fromNode, num, false, true, false); this.CircleColor(true); } // Token: 0x060003C3 RID: 963 RVA: 0x00057FE8 File Offset: 0x000561E8 public void CheckFleeEnd() { if (this.sailing) { this.fleeing = false; } if (this.tr) { Vector3 position = this.tr.position; if (this.fleeing && this.fleePoint != null) { if (Links.x.hasMain) { if (this.fleePoint == null) { this.fleePoint = Links.x.main.node; } } else if (this.fleePoint == null) { this.fleePoint = this.node; } if (!this.hasActions && Records.x.InCombat(false) && this.hostility != 2 && !this.attackingUntilBribe && Links.x.gameplay.seconds >= this.fleeStartTime + this.fleeTime) { this.fleeTime += Random.Range(100f, 200f); this.StartQuip("Help!"); } if (((Links.x.main.tr.position - position).sqrMagnitude < 625f && this.missing) || (!this.missing && Links.x.gameplay.seconds < this.fleeStartTime + this.fleeTime) || this.stats.Confuse() > 0 || this.fleeingAroundPoint) { this.MakePath(this.fleePoint, 20, false, true, false); return; } if (this.missing) { this.Missing(); } else { this.fleeing = false; } } else if (this.missing) { this.Missing(); } else { this.fleeing = false; } } if (!this.missing) { this.fleeing = false; } if (!this.fleeing) { this.fleeTime = 0f; this.fleeStartTime = 0f; } this.CircleColor(false); } // Token: 0x060003C4 RID: 964 RVA: 0x000581C3 File Offset: 0x000563C3 public void EndFleeFromEffect() { this.fleeing = false; this.fleeTime = 0f; this.fleeStartTime = 0f; } // Token: 0x060003C5 RID: 965 RVA: 0x000581E2 File Offset: 0x000563E2 public void StartFleeAroundPoint(GraphNode fromNode) { this.fleeingAroundPoint = true; this.fleeing = true; base.StartCoroutine(this.FleeAroundPt(fromNode)); } // Token: 0x060003C6 RID: 966 RVA: 0x00058200 File Offset: 0x00056400 private IEnumerator FleeAroundPt(GraphNode fromNode) { if (this.actions) { this.actions.Interrupt(); } this.TargetReached(); this.Flee(fromNode, this.missing, Links.x.gameplay.seconds, 10000f); yield return new WaitForSeconds(0.1f); if (this.fleeingAroundPoint) { if (this.actions) { this.actions.Interrupt(); } this.TargetReached(); } yield return new WaitForSeconds(0.1f); if (this.fleeingAroundPoint) { if (this.actions) { this.actions.Interrupt(); } this.TargetReached(); } yield return new WaitForSeconds(0.1f); if (this.fleeingAroundPoint) { if (this.actions) { this.actions.Interrupt(); } this.TargetReached(); } yield return new WaitForSeconds(0.1f); if (this.fleeingAroundPoint) { this.Flee(fromNode, this.missing, Links.x.gameplay.seconds, 10000f); } yield break; } // Token: 0x060003C7 RID: 967 RVA: 0x00058216 File Offset: 0x00056416 public void EndFleeAroundPoint() { this.fleeingAroundPoint = false; this.EndFleeFromEffect(); } // Token: 0x060003C8 RID: 968 RVA: 0x00058228 File Offset: 0x00056428 public void GhostFlee() { if (!this.stats.HasEffect("GhostFlee")) { Effects effects = base.gameObject.AddComponent(); Links.x.cellar.AddEffects(effects); effects.source = this; effects.target = this; effects.effectName = "GhostFlee"; effects.sourceLevel = 0f; effects.Inflicted(false); } if (Links.x.gameplay.seconds > this.lastGhostFleeTime + 50f) { this.lastGhostFleeTime = Links.x.gameplay.seconds; GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(118); pooledGameObject.transform.position = this.tr.position - new Vector3(0f, 1.5f, 0f); pooledGameObject.SetActive(true); } this.PlayAnimation("Hit", 0f); MasterAudio.PlaySound3DAtVector3AndForget("GhostScream", this.tr.position, Random.Range(0.2f, 0.3f), new float?(Random.Range(0.7f, 1f)), 0f, "", null); if (this.hasActions) { this.actions.CheckIfRunningAI(); this.actions.EndTurn(true); } this.ClearNodePath(); this.Knockback(Links.x.NearestIncense(this.currentPosition), 6, false, false, false); this.SetMoveFollowPosition(this.NodePosition()); } // Token: 0x060003C9 RID: 969 RVA: 0x000583B0 File Offset: 0x000565B0 public void SetAsLeader() { bool flag = false; if (Links.x.main == this) { flag = true; } if (Links.x.main != this) { Character main = Links.x.main; if (!Records.x.removeControls) { Links.x.gameplay.SetSelectionCircle(this); } Links.x.RemoveOtherLeaders(this); Links.x.ChangePartyPositionFromLeader(this); if (Links.x.main.moonlight) { Links.x.main.moonlight.moonlightRevealer.main = false; } if (this.hasActions && main.actions && !main.actions.ai.findingAction && !main.inRecovery && !main.inAction && !main.inQueuedAbility && !main.dead) { Links.x.combat.GetNextAction(main); } this.ClearNodePath(); this.ClearPathUpdatesAll(); if (main) { if (main.body) { main.body.CombatSheen(0); } if (main.portrait) { main.portrait.skillBag.SetTrinketGrid(false); main.portrait.skillBag.UpdateAbilityTriggers(); } } if (Records.x.pocketPause) { main.ChangePocketPauseState(); } Links.x.combat.pocketTarget = null; if (Records.x.partyWait) { main.waitPosition = main.currentPosition; } } Links.x.hasMain = true; Links.x.main = this; Links.x.follow.position = this.tr.position + this.headHeight; this.mainSelected = true; this.selected = true; this.movingOutOfWay = false; this.body.SeeThroughColliders(false); this.MoveBackEmpty(); Links.x.gameplay.SetDomeSize(); Links.x.fellowship.RemoveAllFromSelected(this); Links.x.rtsCamera.Follow(this.tr, this, false); this.UpdateCC(); if (Links.x.sensory && !this.inCombat && !flag && Links.x.gaia.sceneLoaded) { Links.x.sensory.LookAtObject(this.body.headBone, 10f, false, this, 3f, 0.1f, null, 1); } if (this.portrait) { if (this.portrait.skillBag) { this.portrait.skillBag.SetSelectedState(); } this.portrait.SetFatigue(); } if (this.inCombat) { if (this.actions) { if (!this.body.attacking && !this.inAction && !this.inRecovery && !Records.x.pocketPause) { this.ClearNodePath(); } this.actions.CheckIfRunningAI(); } Links.x.hudControl.UpdateAttackTime(this.attackTime, 1f, this.inventoryTime); } if (this.body) { this.body.CombatSheen(0); } if (this.CanAttack()) { if (Records.x.pocketPause) { Links.x.gameplay.PocketPause(true); Shader.SetGlobalFloat("_AttackTime", this.attackTime); this.ChangePocketPauseState(); } } else { Shader.SetGlobalFloat("_AttackTime", 0f); } if (Records.x.pocketPause) { Links.x.hudControl.ToggleAttackTimer(true); } Links.x.rtsCamera.Follow(this.tr, this, false); if (this.portrait && this.portrait.skillBag) { Links.x.pocketWheel.Open(this); } if (this.moonlight) { this.moonlight.moonlightRevealer.main = true; } Links.x.fellowship.UpdatePortraits(); Links.x.gameplay.UpdateSelectedParty(); this.CircleAnimation(""); if (this.bracket) { this.bracket.SetActive(true); } } // Token: 0x060003CA RID: 970 RVA: 0x00058808 File Offset: 0x00056A08 public void AddToSelected(bool updatePortrait, bool setLeader) { if (this.stunned || this.dead) { return; } if (this.isBoro) { return; } this.selected = true; if (updatePortrait && this.portrait) { this.portrait.SetSelection(); } this.CircleAnimation(""); if (Records.x.InCombat(false)) { Links.x.combat.GetTargets(false, false, null); } this.selectedBeforeDoor = false; if (this.bracket) { this.bracket.SetActive(true); } this.PlayFaceAnimation(FaceAnimations.AnimationNames.Smile); this.SetAsLeader(); } // Token: 0x060003CB RID: 971 RVA: 0x000588AC File Offset: 0x00056AAC public void RemoveFromSelected(bool setLeader) { this.selected = false; this.CircleAnimation(""); if (Records.x.InCombat(false)) { Links.x.combat.GetTargets(false, false, null); } if (this.bracket) { this.bracket.SetActive(false); } this.PlayFaceAnimation(FaceAnimations.AnimationNames.Frown); if (this.moonlight) { this.moonlight.moonlightRevealer.main = false; } this.body.SeeThroughColliders(false); if (this.cc && this.cc.enabled) { this.cc.enabled = false; this.playerBorders.enabled = false; } if (this.portrait && this.portrait.skillBag) { this.portrait.skillBag.SetSelectedState(); } } // Token: 0x060003CC RID: 972 RVA: 0x00058997 File Offset: 0x00056B97 public void StartExploration() { this.CircleAnimation(""); } // Token: 0x060003CD RID: 973 RVA: 0x000589A4 File Offset: 0x00056BA4 public void ToggleCombatAnimator(bool state) { } // Token: 0x060003CE RID: 974 RVA: 0x000589A6 File Offset: 0x00056BA6 public void ToggleArrow(bool on) { if (!on) { this.CircleAnimation(""); return; } this.CircleAnimation(""); } // Token: 0x060003CF RID: 975 RVA: 0x000589C4 File Offset: 0x00056BC4 public void DropWeapon() { int num = this.bag[0]; if (num > 1) { int num2 = -1; if (this.node != null) { num2 = (int)this.node.Area; } global::Item item = Links.x.inventory.groundBag.DropLoot(num, this.bag[1], Vector3.zero, Vector3.zero, this.durability[0], null, base.gameObject.transform.position, false, false, num2); if (item) { Links.x.diorama.AddItem(item); } } this.bag[0] = 0; this.bag[1] = 0; this.CreateEquippedItems(0, 0, Vector3.zero, Vector3.zero, 0, true); } // Token: 0x060003D0 RID: 976 RVA: 0x00058A8C File Offset: 0x00056C8C public void CreateEquippedItems(int ID, int stackSize, Vector3 socketA, Vector3 socketB, int slot, bool force) { bool flag = true; bool flag2 = false; bool flag3 = false; if (ID == 0 && slot <= 2) { ID = 1; } if (slot == 8 || slot == 10 || slot == 12) { return; } if (slot == 32 || slot == 34 || slot == 36) { return; } Library.Inventory inventory = null; if (ID <= 1 || stackSize <= -100) { flag3 = true; } if (slot == 0) { inventory = this.invRow1; } if (slot == 2) { inventory = this.invRow2; } if (slot == 4) { inventory = this.invRow3; } if (slot == 6) { inventory = this.invRow4; } int num = slot / 2; if (this.equippedItems[num]) { Equipment component = this.equippedItems[num].GetComponent(); int id = component.id; GameObject ammoObject = component.ammoObject; string ammoObjectName = component.ammoObjectName; component.ammoObject = null; if (flag || force) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(id); GameObject gameObject = this.equippedItems[num]; if (this.party && slot < 8 && gameObject) { MeshRenderer component2 = gameObject.gameObject.GetComponent(); if (component2) { if (component2.material.GetFloat("_Glow") > 0f) { component2.material.SetFloat("_Glow", 0f); } } else { SkinnedMeshRenderer component3 = gameObject.gameObject.GetComponent(); if (component3 && component3.material.GetFloat("_Glow") > 0f) { component3.material.SetFloat("_Glow", 0f); } } } Links.x.archives.RecycleItemBody(gameObject, invRowByIndex._CharacterModel); this.equippedItems[slot / 2] = null; inventory = null; flag2 = true; if (ammoObject) { Links.x.archives.RecycleItemBody(ammoObject, ammoObjectName); } } } if (slot == 18 && this.stats.model != this.stats.characterRow._Model) { flag = true; flag3 = false; } if (this.bag[slot] == 0) { this.equippedItems[slot / 2] = null; inventory = null; } Library.Inventory inventory2; if (slot <= 6) { inventory = Links.x.library.GetInvRowByIndex(ID); inventory2 = inventory; } else { inventory2 = Links.x.library.GetInvRowByIndex(ID); } if (inventory2._UIModel.Contains("None")) { flag3 = true; } bool flag4 = false; bool flag5 = false; if (slot == 0 && inventory._Tag == "Weapon") { this.invRow1 = inventory; } if (slot == 2) { this.invRow2 = inventory; } if (slot == 4) { this.invRow3 = inventory; } if (slot == 6) { this.invRow4 = inventory; } if ((slot == 0 || slot == 2 || slot == 4 || slot == 6) && this.party && this.portrait) { this.portrait.skillBag.SetTrinketGrid(false); } if (flag) { if (slot < 4) { this.stats.UpdateAbilityTriggers(); } if (slot == 7 || slot == 13 || slot == 14) { this.stats.UpdateAbilityTriggers(); } } if (this.party && (slot == 0 || slot == 2) && this.portrait) { this.portrait.SetWpnDurabilityColor(); } if (slot == 16 || slot == 20 || slot == 22 || slot == 24) { this.stats.EnchantJewelryEffects(slot, false); } if (!flag3 && (flag || force)) { if (slot == 0 && !this.npc && ID <= 1) { Links.x.inventory.CreateFist(0, false, this, null, false); } if (slot != 4) { } if (ID > 1) { if (slot == 18) { if (this.party && inventory2._ArmorID != -1) { if (this.bodyObj) { Links.x.archives.RecycleBody(this.bodyObj, this.bodyObj.name, base.gameObject.name); } this.bodyObj = null; this.stats.model = Links.x.archives.GetArmorModel(inventory2._CharacterModel, this.stats.race, this.stats.sex, this); this.SetupBody(); this.AddEquippedItems(); this.SetMeshState(true); flag4 = true; flag5 = true; } } else { Transform transform = this.body.GetSlot(slot); if (transform) { GameObject itemPrefabBody = Links.x.archives.GetItemPrefabBody(inventory2._CharacterModel); bool flag6 = false; int num2 = 2; string text = "slingstone_ammo_clay"; if (inventory2._MeleeRangeEnd >= 5f && slot == 0) { flag6 = true; } if (inventory2._Name.Contains("Bow")) { transform = this.body.GetSlot(2); num2 = 0; text = "arrow_tier1"; } if (inventory2._MainSkill == "Elixir" && inventory2._Tag == "Weapon") { text = "item_ammo_projectile_globe1"; } if (!itemPrefabBody) { Debug.Log(((this != null) ? this.ToString() : null) + " missing item prefab " + inventory2._Name); } if (itemPrefabBody && transform) { itemPrefabBody.gameObject.transform.SetParent(transform, false); itemPrefabBody.gameObject.transform.localPosition = new Vector3(0f, 0f, 0f); itemPrefabBody.gameObject.transform.localRotation = Quaternion.Euler(this.vectorZero); Equipment equipment = itemPrefabBody.GetComponent(); if (!equipment) { equipment = itemPrefabBody.AddComponent(); } equipment.id = inventory2._ID; if (inventory2._Tag == "Weapon") { itemPrefabBody.name = inventory2._MainSkill; if (inventory2._MainSkill == "Whip") { itemPrefabBody.name = "FlailWhip"; } if (inventory._MainSkill == "Sling") { itemPrefabBody.name = "Sling_t-1_a_maya"; } } BoxCollider boxCollider = itemPrefabBody.GetComponent(); if (boxCollider) { Object.Destroy(boxCollider); } this.equippedItems[slot / 2] = itemPrefabBody; flag2 = true; if (slot < 8 && this.party && this.durability[slot / 2].x <= (float)Records.x.durabilityThreshold && itemPrefabBody.gameObject && itemPrefabBody.gameObject.GetComponent() && itemPrefabBody.gameObject.GetComponent().material) { itemPrefabBody.gameObject.GetComponent().material.SetFloat("_Glow", 1f); } if (flag6) { GameObject itemPrefabBody2 = Links.x.archives.GetItemPrefabBody(text); itemPrefabBody2.gameObject.transform.SetParent(this.body.GetSlot(num2), false); itemPrefabBody2.gameObject.transform.localPosition = new Vector3(0f, 0f, 0f); itemPrefabBody2.gameObject.transform.localRotation = Quaternion.Euler(this.vectorZero); equipment.ammoObject = itemPrefabBody2; equipment.ammoObjectName = text; boxCollider = itemPrefabBody2.GetComponent(); if (boxCollider) { Object.Destroy(boxCollider); } } } } } } else { this.equippedItems[slot / 2] = null; if (slot == 18 && this.party) { string armorModel = Links.x.archives.GetArmorModel("Tunic", this.stats.race, this.stats.sex, this); if (this.stats.model != armorModel && !this.ghost) { this.stats.model = armorModel; this.SetupBody(); this.AddEquippedItems(); this.SetMeshState(true); flag4 = true; flag5 = true; } } } } else { this.AnimatorController(slot); } if (!flag3 && (flag || force)) { this.AnimatorController(slot); } if (flag2) { this.body.GatherRenderers(false); if (this.visible == 1 || !this.npc) { this.SetMeshState(true); } else { this.SetMeshState(false); } if (!this.npc && (slot == 16 || slot == 24)) { flag4 = true; flag5 = true; } } bool flag7 = false; bool flag8 = false; if (this.bag[14] == Links.x.library.torchID || this.bag[26] == Links.x.library.torchID || this.bag[28] == Links.x.library.torchID) { flag7 = true; } if (this.bag[14] == Links.x.library.incenseTorchID || this.bag[26] == Links.x.library.incenseTorchID || this.bag[28] == Links.x.library.incenseTorchID) { flag8 = true; } if (flag7) { this.AddTorch(); this.hasTorch = true; } if (flag8) { this.AddIncenseTorch(); this.hasIncenseTorch = true; } if (this.hasTorch && !flag7) { this.RemoveTorch(); this.hasTorch = false; } if (this.hasIncenseTorch && !flag8) { this.RemoveIncenseTorch(); this.hasIncenseTorch = false; } if (flag4 && !this.summoned) { Links.x.fellowship.AddHudPortraitChange(this); } if (flag5 && !this.summoned) { Links.x.fellowship.AddPortraitChange(this); } if (!this.npc) { if (this.invRow1 == null) { Links.x.inventory.CreateFist(0, false, this, null, false); } else if (this.invRow1._DisplayName == "Empty") { Links.x.inventory.CreateFist(0, false, this, null, false); } else if (this.ammoCount1 < 0) { this.ammoCount1 = 0; } } if (this.party) { this.portrait.SetMagicColor(); } this.GetAlternativeWeaponRows(); } // Token: 0x060003D1 RID: 977 RVA: 0x000594D8 File Offset: 0x000576D8 public bool ShowSailAnim() { if (!this.sailing) { return false; } if (!this.npc) { if (!this.party) { return false; } if (Links.x.gaia.boat.leavingBoat) { return false; } } return !this.pocketPausedOverride && !this.inAction && !this.inRecovery && !this.IsAttacking(this.body.currentHash) && !this.stats.animal && !this.inQueuedAbility && this.animID != 2 && this.animID != 32 && this.animID != 41 && this.animID != 42 && this.animID != 15 && this.animID != 16 && !this.alwaysJump && !this.jumping && !this.dead && !this.stunned && !this.dodging; } // Token: 0x060003D2 RID: 978 RVA: 0x000595C8 File Offset: 0x000577C8 public void NeedToUpdateSailingAnimator(bool always) { if (!this.sailing && !always) { return; } bool flag = this.ShowSailAnim(); if (this.oar && !flag) { this.AnimatorController(0); this.AnimatorController(2); } if (!this.oar && flag) { this.AnimatorController(0); } GameObject gameObject = this.equippedItems[0]; GameObject gameObject2 = this.equippedItems[1]; if (this.oar) { if (gameObject && gameObject.activeSelf) { gameObject.SetActive(false); } if (gameObject2 && gameObject2.activeSelf) { gameObject2.SetActive(false); return; } } else { if (gameObject && !gameObject.activeSelf) { gameObject.SetActive(true); } if (gameObject2 && !gameObject2.activeSelf) { gameObject2.SetActive(true); } } } // Token: 0x060003D3 RID: 979 RVA: 0x0005969C File Offset: 0x0005789C public void AnimatorController(int slot) { bool flag = false; int num = 1; if (slot == 0 && this.invRow1 != null) { num = this.invRow1._ID; if (this.invRow1._UIModel.Contains("None")) { flag = true; } } if (slot == 2 && this.invRow2 != null) { num = this.invRow2._ID; } bool flag2 = false; if (this.sailing && this.ShowSailAnim()) { flag2 = true; } if (flag2) { if (slot == 0) { bool flag3 = false; if (this.party) { if (Links.x.gaia.boat) { flag3 = Links.x.gaia.boat.IsSailorLeft(this); } } else if (this.boat) { flag3 = this.boat.IsSailorLeft(this); } string text = this.animationPrefix; if (text != "_Volling") { text = "_Volling"; } if (flag3) { this.animControllerName = text + "_SailingLeft"; } else { this.animControllerName = text + "_SailingRight"; } AnimatorOverrideController overrideController = Links.x.archives.GetOverrideController(this.animControllerName); this.animator.runtimeAnimatorController = overrideController; this.animator.SetBool("Party", this.party); if (!this.oar) { this.oar = Links.x.cellar.GetPooledGameObject(137); this.oar.transform.parent = this.body.GetSlot(0); this.oar.SetActive(true); this.oar.transform.localPosition = Vector3.zero; this.oar.transform.localRotation = Quaternion.Euler(Vector3.zero); this.oar.layer = 6; return; } } } else { if (this.oar) { Links.x.cellar.ReturnPooledGameObject(137, this.oar); this.oar = null; } if (slot == 0 && num <= 1) { this.animControllerName = this.animationPrefix + "_Unarmed"; AnimatorOverrideController animatorOverrideController = Links.x.archives.GetOverrideController(this.animControllerName); if (!animatorOverrideController) { if (this.bag[0] <= 1) { this.animControllerName = this.animationPrefix + "_unarmed"; animatorOverrideController = Links.x.archives.GetOverrideController(this.animControllerName); } if (!animatorOverrideController) { Debug.Log("missing animation override controller for " + this.animControllerName + " " + ((this != null) ? this.ToString() : null)); } } this.animator.runtimeAnimatorController = animatorOverrideController; this.animator.SetBool("Party", this.party); if (this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } this.needsRebind = false; if (this.invRow1 != null && (this.invRow1._MainSkill == "Whip" || this.invRow1._MainSkill == "Sling")) { this.needsRebind = true; } } if (slot == 2 && num <= 1 && this.animator.runtimeAnimatorController != null && (this.animator.runtimeAnimatorController.name.Contains("Multi") || this.animator.runtimeAnimatorController.name.Contains("Shield"))) { string text2 = this.invRow1._CharacterAnimation; if (this.stats.race == "Yeti") { text2 = Records.x.GetWeaponControllerPrefix(this.invRow1, this.invRow2, this.stats.race, false); } this.animControllerName = this.animationPrefix + text2; AnimatorOverrideController overrideController2 = Links.x.archives.GetOverrideController(this.animControllerName); if (overrideController2 != null) { this.animator.runtimeAnimatorController = overrideController2; } this.animator.enabled = false; this.animator.enabled = true; if (this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } this.needsRebind = false; if (this.invRow1 != null && (this.invRow1._MainSkill == "Whip" || this.invRow1._MainSkill == "Sling")) { this.needsRebind = true; } this.animator.SetBool("Party", this.party); } if (slot == 0 && num > 1 && flag && this.invRow1._CharacterAnimation != "") { string characterAnimation = this.invRow1._CharacterAnimation; this.animControllerName = this.animationPrefix + characterAnimation; AnimatorOverrideController animatorOverrideController2 = Links.x.archives.GetOverrideController(this.animControllerName); if (animatorOverrideController2 != null) { this.animator.runtimeAnimatorController = animatorOverrideController2; } else if (!animatorOverrideController2) { if (this.bag[0] <= 1) { this.animControllerName = this.animationPrefix + "_unarmed"; animatorOverrideController2 = Links.x.archives.GetOverrideController(this.animControllerName); } if (!animatorOverrideController2) { Debug.Log("missing animation override controller for " + this.animControllerName + " " + ((this != null) ? this.ToString() : null)); } else { this.animator.runtimeAnimatorController = animatorOverrideController2; } } } if (slot == 0 && num > 1) { if (this.equippedItems[0]) { this.equippedItems[0].SetActive(true); } string weaponControllerPrefix = Records.x.GetWeaponControllerPrefix(this.invRow1, this.invRow2, this.stats.race, false); this.animControllerName = this.animationPrefix + weaponControllerPrefix; AnimatorOverrideController animatorOverrideController3 = Links.x.archives.GetOverrideController(this.animControllerName); if (animatorOverrideController3 == null && this.animationPrefix.Contains("Volling")) { this.animControllerName = "_Volling" + weaponControllerPrefix; animatorOverrideController3 = Links.x.archives.GetOverrideController(this.animControllerName); } if (animatorOverrideController3 != null) { this.animator.runtimeAnimatorController = animatorOverrideController3; } if (this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } this.needsRebind = false; if (this.invRow1 != null && (this.invRow1._MainSkill == "Whip" || this.invRow1._MainSkill == "Sling")) { this.needsRebind = true; } this.animator.enabled = false; this.animator.enabled = true; this.animator.SetBool("Party", this.party); } if (slot == 2 && num > 1) { if (this.equippedItems[1]) { this.equippedItems[1].SetActive(true); } string weaponControllerPrefix2 = Records.x.GetWeaponControllerPrefix(this.invRow1, this.invRow2, this.stats.race, false); this.animControllerName = this.animationPrefix + weaponControllerPrefix2; AnimatorOverrideController animatorOverrideController4 = Links.x.archives.GetOverrideController(this.animControllerName); if (animatorOverrideController4 == null && this.animationPrefix.Contains("Volling")) { this.animControllerName = "_Volling" + weaponControllerPrefix2; animatorOverrideController4 = Links.x.archives.GetOverrideController(this.animControllerName); } if (animatorOverrideController4 != null) { this.animator.runtimeAnimatorController = animatorOverrideController4; } if (this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); } this.needsRebind = false; if (this.invRow1 != null && (this.invRow1._MainSkill == "Whip" || this.invRow1._MainSkill == "Sling")) { this.needsRebind = true; } this.animator.SetBool("Party", this.party); this.animator.enabled = false; this.animator.enabled = true; } } } // Token: 0x060003D4 RID: 980 RVA: 0x00059F6C File Offset: 0x0005816C public void InvFromDB() { this.bag.Clear(); this.sockets.Clear(); this.durability.Clear(); int num = 54; if (!this.npc || this.stats.characterRow._CanJoinParty) { num = 176; } for (int i = 0; i < num / 2; i++) { this.bag.Add(0); this.bag.Add(0); this.sockets.Add(Vector3.zero); this.sockets.Add(Vector3.zero); this.bagPositions.Add(-1); this.durability.Add(Vector4.zero); } List savedBag = this.stats.savedBag; List savedDur = this.stats.savedDur; for (int j = 0; j < num; j++) { if (j < savedBag.Count) { this.bag[j] = savedBag[j]; if (this.stats.savedIntercesion > -1 && this.stats.savedIntercesion == this.bag[j]) { this.sockets[j] = this.stats.savedIntercessionA; this.sockets[j + 1] = this.stats.savedIntercessionB; } } } for (int k = 0; k < this.durability.Count; k++) { if (k < savedDur.Count) { this.durability[k] = savedDur[k]; } } if (this.bag[0] == 0) { this.bag[0] = 1; this.bag[1] = 1; } } // Token: 0x060003D5 RID: 981 RVA: 0x0005A124 File Offset: 0x00058324 public string GetNPCSavedItems() { this.str.Clear(); int count = this.bag.Count; int num = 0; for (int i = 0; i < count; i++) { if (i % 2 == 0) { if (num > 0) { this.str.Append(","); } Library.Inventory invRow = Links.x.library.GetInvRow(this.bag[i]); this.str.Append(invRow._Name); this.str.Append(","); this.str.Append(this.bag[i + 1]); this.str.Append(","); this.str.Append(this.sockets[i].x); this.str.Append(","); this.str.Append(this.sockets[i].y); this.str.Append(","); this.str.Append(this.sockets[i].z); this.str.Append(","); this.str.Append(this.sockets[i + 1].x); this.str.Append(","); this.str.Append(this.sockets[i + 1].y); this.str.Append(","); this.str.Append(this.sockets[i + 1].z); this.str.Append(","); this.str.Append(this.durability[i / 2].x); this.str.Append(","); this.str.Append(this.durability[i / 2].z); this.str.Append(","); this.str.Append(this.durability[i / 2].w); this.str.Append(","); this.str.Append(i / 2); num++; } } return this.str.ToString(); } // Token: 0x060003D6 RID: 982 RVA: 0x0005A3AC File Offset: 0x000585AC public void SetNPCSavedItems(string itemList) { if (this.ghost) { return; } if (itemList == null) { return; } char c = ','; int num = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; int num8 = -1; int num9 = 0; int num10 = 0; int num11 = 0; List list = new List(); string[] array = new string[0]; array = itemList.Split(c, StringSplitOptions.None); int num12 = array.Length; int num13 = 0; for (int i = 0; i < num12; i++) { if (num13 == 0) { int num14 = 0; if (array[i] != "" && array[i] != null) { bool flag = true; string text = array[i]; Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName(text); if (invRowFromName != null) { num14 = invRowFromName._ID; } if (flag) { int.TryParse(array[i + 1], out num); int.TryParse(array[i + 2], out num2); int.TryParse(array[i + 3], out num3); int.TryParse(array[i + 4], out num4); int.TryParse(array[i + 5], out num5); int.TryParse(array[i + 6], out num6); int.TryParse(array[i + 7], out num7); int.TryParse(array[i + 8], out num8); int.TryParse(array[i + 9], out num9); int.TryParse(array[i + 10], out num10); int.TryParse(array[i + 11], out num11); list.Add(num14); list.Add(num); list.Add(num2); list.Add(num3); list.Add(num4); list.Add(num5); list.Add(num6); list.Add(num7); list.Add(num8); list.Add(num9); list.Add(num10); list.Add(num11); } } } if (num13 == 11) { num13 = 0; } else { num13++; } } for (int j = 0; j < this.bag.Count; j++) { if (j % 2 == 0) { this.bag[j] = 0; this.bag[j + 1] = 0; this.sockets[j] = Vector3.zero; this.sockets[j + 1] = Vector3.zero; this.durability[j / 2] = Vector4.zero; } } num12 = list.Count; num13 = 0; if (!this.stunned) { for (int k = 0; k < num12; k++) { if (num13 == 0) { num11 = list[k + 11] * 2; if (num11 < this.bag.Count) { this.bag[num11] = list[k]; this.bag[num11 + 1] = list[k + 1]; this.sockets[num11] = new Vector3((float)list[k + 2], (float)list[k + 3], (float)list[k + 4]); this.sockets[num11 + 1] = new Vector3((float)list[k + 5], (float)list[k + 6], (float)list[k + 7]); this.durability[num11 / 2] = new Vector4((float)list[k + 8], 0f, (float)list[k + 9], (float)list[k + 10]); } else { this.bag.Add(list[k]); this.bag.Add(list[k + 1]); this.sockets.Add(new Vector3((float)list[k + 2], (float)list[k + 3], (float)list[k + 4])); this.sockets.Add(new Vector3((float)list[k + 5], (float)list[k + 6], (float)list[k + 7])); this.durability.Add(new Vector4((float)list[k + 8], 0f, (float)list[k + 9], (float)list[k + 10])); } } if (num13 == 11) { num13 = 0; } else { num13++; } } } } // Token: 0x060003D7 RID: 983 RVA: 0x0005A82C File Offset: 0x00058A2C public void SetUpInv() { Links.x.inventory.SetUpBag(this); this.tempBagID = this.inventoryBag.bagID; this.tempBagAmoumt = this.inventoryBag.bagAmount; this.tempSocketA = this.inventoryBag.socketA; this.tempSocketB = this.inventoryBag.socketB; this.tempBagPos = this.inventoryBag.bagPos; this.tempDurability = this.inventoryBag.durability; this.tempBagItems = this.inventoryBag.bagItems; Links.x.inventory.SpawnSavedItems(this); } // Token: 0x060003D8 RID: 984 RVA: 0x0005A8D0 File Offset: 0x00058AD0 public int FreeBagID() { int num = -1; for (int i = 36; i < this.bag.Count; i++) { if (this.bag[i] == 0 && i % 2 == 0) { num = i; break; } } return num; } // Token: 0x060003D9 RID: 985 RVA: 0x0005A910 File Offset: 0x00058B10 public void UpdateListsFromInv(bool updatedBodyEquipped) { if (this.party) { this.bag.Clear(); this.bagPositions.Clear(); this.sockets.Clear(); this.durability.Clear(); int count = this.tempBagID.Count; for (int i = 0; i < count; i++) { this.bag.Add(this.tempBagID[i]); this.bag.Add(this.tempBagAmoumt[i]); this.sockets.Add(this.tempSocketA[i]); this.sockets.Add(this.tempSocketB[i]); this.bagPositions.Add(this.tempBagPos[i]); this.durability.Add(this.tempDurability[i]); } if (this.portrait && updatedBodyEquipped) { this.portrait.skillBag.SetTrinketGrid(false); } } } // Token: 0x060003DA RID: 986 RVA: 0x0005AA1C File Offset: 0x00058C1C public void SetBagPosition(int equipIndex, int n) { if (equipIndex < 0) { return; } if (equipIndex >= this.bagPositions.Count) { Debug.Log("bagPosition list is not large enough for this " + equipIndex.ToString() + " " + ((this != null) ? this.ToString() : null)); return; } this.bagPositions[equipIndex] = n; } // Token: 0x060003DB RID: 987 RVA: 0x0005AA72 File Offset: 0x00058C72 public GameObject GetItemEquipped(int index) { if (this.equippedItems[index]) { return this.equippedItems[index]; } return null; } // Token: 0x060003DC RID: 988 RVA: 0x0005AA90 File Offset: 0x00058C90 public string GetAmmoType() { if (this.invRow1._MainSkill == "Bow") { return "arrows"; } if (this.invRow1._MainSkill.Contains("Sling")) { return "stones"; } return "vials"; } // Token: 0x060003DD RID: 989 RVA: 0x0005AADC File Offset: 0x00058CDC public bool HasAmmoOrMelee(Library.Inventory row, bool justCheckAmmo) { if (row._MeleeRangeEnd >= 5f) { if (row._MainSkill == "Bow" && row._Ammo1 == "Bow") { for (int i = 4; i < 8; i++) { if (this.bag[i * 2] >= Links.x.library.arrowsMin && this.bag[i * 2] <= Links.x.library.arrowsMax) { return true; } } return false; } if (row._MainSkill == "Sling" && row._Ammo1 == "Dart") { for (int j = 4; j < 8; j++) { if (this.bag[j * 2] == Links.x.library.dartsMin) { return true; } } return false; } if (row._MainSkill.Contains("Elixir")) { for (int k = 4; k < 8; k++) { if (this.bag[k * 2] >= Links.x.library.vialsMin && this.bag[k * 2] <= Links.x.library.vialsMin + 1) { return true; } } return false; } for (int l = 4; l < 8; l++) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.bag[l * 2]); if (invRowByIndex._Tag == "Ammunition" && (invRowByIndex._Name == row._Ammo1 || invRowByIndex._Name == row._Ammo2)) { return true; } } } return !justCheckAmmo; } // Token: 0x060003DE RID: 990 RVA: 0x0005AC90 File Offset: 0x00058E90 public bool NeedsAmmo() { return this.invRow1._MainSkill == "Bow" || this.invRow1._MainSkill == "Sling" || this.invRow1._MainSkill.Contains("Elixir"); } // Token: 0x060003DF RID: 991 RVA: 0x0005ACE8 File Offset: 0x00058EE8 public void GetAmmoSlotsNPC(out int slot1, out int slot2, out int slot3, Library.Inventory row) { slot1 = 0; slot2 = 0; slot3 = 0; for (int i = 0; i < 3; i++) { int num = this.bag[(i + 4) * 2]; int num2 = i + 4; if (row._MainSkill == "Bow" && row._Ammo1 == "Arrow") { if (this.bag[num2 * 2] < Links.x.library.arrowsMin || this.bag[num2 * 2] > Links.x.library.arrowsMax || this.bag[num2 * 2] <= 1) { num = 0; } } else if (row._MainSkill == "Sling" && row._Ammo1 == "Dart") { if (this.bag[num2 * 2] != Links.x.library.dartsMin) { num = 0; } } else if (row._MainSkill.Contains("Elixir") && row._Ammo1 != "Dart") { if (this.bag[num2 * 2] < Links.x.library.vialsMin || this.bag[num2 * 2] > Links.x.library.vialsMin + 1 || this.bag[num2 * 2] <= 1) { num = 0; } } else { bool flag = false; Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.bag[num2 * 2]); if (invRowByIndex._Tag == "Ammunition" && (invRowByIndex._Name == row._Ammo1 || invRowByIndex._Name == row._Ammo2)) { flag = true; } if (!flag) { num = 0; } } if (i == 0) { slot1 = num; } if (i == 1) { slot2 = num; } if (i == 2) { slot3 = num; } } } // Token: 0x060003E0 RID: 992 RVA: 0x0005AEE8 File Offset: 0x000590E8 public int GetAmmoIndex(Library.Inventory row) { int num = this.selectedAmmoIndex; bool flag = false; if (this.selectedAmmoIndex <= 0) { if (row._MainSkill == "Bow" && row._Ammo1 == "Arrow" && this.bag[8] >= Links.x.library.arrowsMin && this.bag[8] <= Links.x.library.arrowsMax && this.bag[8] > 1) { return 8; } if (row._MainSkill == "Sling" && row._Ammo1 == "Dart" && this.bag[8] == Links.x.library.dartsMin) { return 8; } if (row._MainSkill.Contains("Elixir") && this.bag[8] >= Links.x.library.vialsMin && this.bag[8] <= Links.x.library.vialsMin + 1 && this.bag[8] > 1) { return 8; } if (row._MainSkill == "Sling" && row._Ammo1 != "Dart") { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.bag[8]); if (invRowByIndex._Tag == "Ammunition" && (invRowByIndex._Name == row._Ammo1 || invRowByIndex._Name == row._Ammo2)) { return 8; } } } else if (this.selectedAmmoIndex == 1) { if (row._MainSkill == "Bow" && row._Ammo1 == "Arrow" && this.bag[10] >= Links.x.library.arrowsMin && this.bag[10] <= Links.x.library.arrowsMax && this.bag[10] > 1) { return 10; } if (row._MainSkill == "Sling" && row._Ammo1 == "Dart" && this.bag[10] == Links.x.library.dartsMin) { return 10; } if (row._MainSkill.Contains("Elixir") && this.bag[10] >= Links.x.library.vialsMin && this.bag[10] <= Links.x.library.vialsMin + 1 && this.bag[10] > 1) { return 10; } if (row._MainSkill == "Sling" && row._Ammo1 != "Dart") { Library.Inventory invRowByIndex2 = Links.x.library.GetInvRowByIndex(this.bag[10]); if (invRowByIndex2._Tag == "Ammunition" && (invRowByIndex2._Name == row._Ammo1 || invRowByIndex2._Name == row._Ammo2)) { return 10; } } } else if (this.selectedAmmoIndex == 2) { if (row._MainSkill == "Bow" && row._Ammo1 == "Arrow" && this.bag[12] >= Links.x.library.arrowsMin && this.bag[12] <= Links.x.library.arrowsMax && this.bag[12] > 1) { return 12; } if (row._MainSkill == "Sling" && row._Ammo1 == "Dart" && this.bag[12] == Links.x.library.dartsMin) { return 12; } if (row._MainSkill.Contains("Elixir") && this.bag[12] >= Links.x.library.vialsMin && this.bag[12] <= Links.x.library.vialsMin + 1 && this.bag[12] > 1) { return 12; } if (row._MainSkill == "Sling" && row._Ammo1 != "Dart") { Library.Inventory invRowByIndex3 = Links.x.library.GetInvRowByIndex(this.bag[12]); if (invRowByIndex3._Tag == "Ammunition" && (invRowByIndex3._Name == row._Ammo1 || invRowByIndex3._Name == row._Ammo2)) { return 12; } } } if (!flag) { if (row._MainSkill == "Bow" && row._Ammo1 == "Arrow") { for (int i = 4; i < 8; i++) { if (this.bag[i * 2] >= Links.x.library.arrowsMin && this.bag[i * 2] <= Links.x.library.arrowsMax && this.bag[i * 2] > 1) { if (i == 4) { this.selectedAmmoIndex = 0; } if (i == 5) { this.selectedAmmoIndex = 1; } if (i == 6) { this.selectedAmmoIndex = 2; } if (this.party && num != this.selectedAmmoIndex) { this.portrait.skillBag.selectedAmmoIndex = this.selectedAmmoIndex; this.portrait.skillBag.SetTrinketGrid(false); } return i * 2; } } } else if (row._MainSkill == "Sling" && row._Ammo1 == "Dart") { for (int j = 4; j < 8; j++) { if (this.bag[j * 2] == Links.x.library.dartsMin && this.bag[j * 2] > 1) { if (j == 4) { this.selectedAmmoIndex = 0; } if (j == 5) { this.selectedAmmoIndex = 1; } if (j == 6) { this.selectedAmmoIndex = 2; } if (this.party && num != this.selectedAmmoIndex) { this.portrait.skillBag.selectedAmmoIndex = this.selectedAmmoIndex; this.portrait.skillBag.SetTrinketGrid(false); } return j * 2; } } } else if (row._MainSkill.Contains("Elixir")) { for (int k = 4; k < 8; k++) { if (this.bag[k * 2] >= Links.x.library.vialsMin && this.bag[k * 2] <= Links.x.library.vialsMin + 1 && this.bag[k * 2] > 1) { if (k == 4) { this.selectedAmmoIndex = 0; } if (k == 5) { this.selectedAmmoIndex = 1; } if (k == 6) { this.selectedAmmoIndex = 2; } if (this.party && num != this.selectedAmmoIndex) { this.portrait.skillBag.selectedAmmoIndex = this.selectedAmmoIndex; this.portrait.skillBag.SetTrinketGrid(false); } return k * 2; } } } else { for (int l = 4; l < 8; l++) { Library.Inventory invRowByIndex4 = Links.x.library.GetInvRowByIndex(this.bag[l * 2]); if (invRowByIndex4._Tag == "Ammunition" && (invRowByIndex4._Name == row._Ammo1 || invRowByIndex4._Name == row._Ammo2)) { if (l == 4) { this.selectedAmmoIndex = 0; } if (l == 5) { this.selectedAmmoIndex = 1; } if (l == 6) { this.selectedAmmoIndex = 2; } return l * 2; } } } } if (this.party && num != this.selectedAmmoIndex) { this.portrait.skillBag.SetTrinketGrid(false); } return -1; } // Token: 0x060003E1 RID: 993 RVA: 0x0005B778 File Offset: 0x00059978 public void UseAmmo(int ammoIndex) { int num = this.bag[ammoIndex]; int num2 = this.bag[ammoIndex + 1]; num2--; this.bag[ammoIndex + 1] = num2; if (this.party) { Links.x.inventory.SetBagAmt(ammoIndex / 2, num2, this); } if (this.bag[ammoIndex + 1] <= 0) { if (this.party) { this.bag[ammoIndex] = 0; this.bag[ammoIndex + 1] = 0; Links.x.inventory.RemoveBagItem(ammoIndex / 2, this); this.portrait.skillBag.SetTrinketGrid(false); } else { this.bag[ammoIndex] = 0; this.bag[ammoIndex + 1] = 0; } if (this.npc) { this.LookForAmmoInBag(ammoIndex, this.invRow1._MainSkill, this.invRow1); } } if (this.party) { this.portrait.skillBag.UpdateAmmoNumbers(); } } // Token: 0x060003E2 RID: 994 RVA: 0x0005B884 File Offset: 0x00059A84 public void LookForAmmoInBag(int ammoIndex, string mainSkill, Library.Inventory weaponRow) { bool flag = false; if (this.npc) { if (ammoIndex == -1) { if (this.bag[8] == 0) { ammoIndex = 8; } else if (this.bag[10] == 0) { ammoIndex = 10; } else { if (this.bag[12] != 0) { return; } ammoIndex = 12; } } int count = this.bag.Count; for (int i = 36; i < count; i++) { if (i % 2 == 0 && !flag) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.bag[i]); if (invRowByIndex._Tag == "Ammunition") { if (mainSkill == "Bow" && weaponRow._Ammo1 == "Arrow") { if (this.bag[i] >= Links.x.library.arrowsMin && this.bag[i] <= Links.x.library.arrowsMax && this.bag[i] > 1) { if (this.party && this.inventoryBag) { this.inventoryBag.SwapBagItem(i / 2, ammoIndex / 2, this, true); } else { this.bag[ammoIndex] = this.bag[i]; this.bag[ammoIndex + 1] = this.bag[i + 1]; } } } else if (mainSkill == "Sling" && weaponRow._Ammo1 == "Dart") { if (this.bag[i] == Links.x.library.dartsMin && this.bag[i] > 1) { if (this.party && this.inventoryBag) { this.inventoryBag.SwapBagItem(i / 2, ammoIndex / 2, this, true); } else { this.bag[ammoIndex] = this.bag[i]; this.bag[ammoIndex + 1] = this.bag[i + 1]; } } } else if (mainSkill.Contains("Elixir")) { if (this.bag[i] >= Links.x.library.vialsMin && this.bag[i] <= Links.x.library.vialsMin + 1 && this.bag[i] > 1) { if (this.party && this.inventoryBag) { this.inventoryBag.SwapBagItem(i / 2, ammoIndex / 2, this, true); } else { this.bag[ammoIndex] = this.bag[i]; this.bag[ammoIndex + 1] = this.bag[i + 1]; } } } else if (invRowByIndex._Name == weaponRow._Ammo1 || invRowByIndex._Name == weaponRow._Ammo2) { if (this.party && this.inventoryBag) { this.inventoryBag.SwapBagItem(i / 2, ammoIndex / 2, this, true); } else { this.bag[ammoIndex] = this.bag[i]; this.bag[ammoIndex + 1] = this.bag[i + 1]; } } } } } } } // Token: 0x060003E3 RID: 995 RVA: 0x0005BC28 File Offset: 0x00059E28 public void RemoveEnchantedJewelryDurability() { int num = 8; if (this.sockets[num * 2].x != 0f) { Vector3 vector = this.sockets[num * 2 + 1]; } num = 10; if (this.sockets[num * 2].x != 0f) { Vector3 vector2 = this.sockets[num * 2 + 1]; } num = 11; if (this.sockets[num * 2].x != 0f) { Vector3 vector3 = this.sockets[num * 2 + 1]; } num = 12; if (this.sockets[num * 2].x != 0f) { Vector3 vector4 = this.sockets[num * 2 + 1]; } } // Token: 0x060003E4 RID: 996 RVA: 0x0005BCEC File Offset: 0x00059EEC public void UpdateArmor(int subtractChunk) { if (this.stamina) { Vector4 vector = this.durability[9]; float num = (float)this.stamina.maxArmor / 7f * (float)subtractChunk; vector.x -= num; if (vector.x < 0f) { vector.x = 0f; } this.durability[9] = vector; this.stamina.UpdateArmor((int)this.durability[9].x); } } // Token: 0x060003E5 RID: 997 RVA: 0x0005BD7C File Offset: 0x00059F7C public void UpdateDurability(int index, int loss, bool isShield, bool physicalDurability) { if (this.bag[index * 2] > 1) { int num = (int)this.durability[index].x; if (this.invRow1._DurabilityMax < 0) { return; } if (index == 0 && this.invRow1._DurabilityMax < 0) { return; } num -= loss; if (num < 0) { num = 0; } this.durability[index] = new Vector4((float)num, this.durability[index].y, this.durability[index].z, this.durability[index].w); if (index == 9 && this.stamina && this.stamina.hasArmor) { this.stamina.UpdateArmor((int)this.durability[index].x); } if (this.party && this.inventoryBag) { this.inventoryBag.SetDurability(this.durability[index], index); ItemEquipped itemEquipped = this.body.GetItemEquipped(index); if (itemEquipped) { itemEquipped.durability = this.durability[index]; } if (num <= 0) { if (index < 4 && !isShield) { this.str.Clear(); this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); this.str.Append(this.stats.GetName()); this.str.Append(""); this.str.Append("'s weapon needs to be repaired"); Links.x.gameFeed.AddFeed(this.str.ToString()); } else if (index < 4 && isShield) { this.str.Clear(); this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); this.str.Append(this.stats.GetName()); this.str.Append(""); this.str.Append("'s shield needs to be repaired"); Links.x.gameFeed.AddFeed(this.str.ToString()); } else { this.str.Clear(); this.str.Append(Links.x.gameFeed.GetPartyColorText(this)); this.str.Append(this.stats.GetName()); this.str.Append(""); this.str.Append("'s armor needs to be repaired"); Links.x.gameFeed.AddFeed(this.str.ToString()); } MasterAudio.PlaySound3DAtVector3AndForget("Armor Break", this.tr.position, 1f, new float?(1f), 0f, "", null); } if (num <= Records.x.durabilityThreshold) { this.ChangeDurabilityVisual(index); } if (this.portrait) { this.portrait.SetWpnDurabilityColor(); } } if ((index == 8 || index == 10 || index == 11 || index == 12) && num <= 0) { this.stats.EnchantJewelryEffects(index * 2, false); } } } // Token: 0x060003E6 RID: 998 RVA: 0x0005C0D8 File Offset: 0x0005A2D8 public void ChangeDurabilityVisual(int index) { if (this.durability[index].x <= (float)Records.x.durabilityThreshold) { GameObject gameObject = this.equippedItems[index]; if (gameObject && gameObject.GetComponent()) { gameObject.GetComponent().material.SetFloat("_Glow", 1f); } } else { GameObject gameObject2 = this.equippedItems[index]; if (gameObject2 && gameObject2.GetComponent()) { gameObject2.GetComponent().material.SetFloat("_Glow", 0f); } } if (this.portrait) { this.portrait.SetWpnDurabilityColor(); } } // Token: 0x060003E7 RID: 999 RVA: 0x0005C190 File Offset: 0x0005A390 public void UseQuickItem(int index) { int invNum = this.GetInvNum(index * 2); if (invNum > 1) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(invNum); if (this.hasActions) { this.actions.spellScroll = null; } if (Records.x.pocketPause && !this.mainSelected && (invRowByIndex._Name.Contains("SpellScroll") || invRowByIndex._Name.Contains("PaganScroll"))) { return; } Links.x.inventory.UseBeltItem(index, this); if (this.portrait && !this.hasActions) { this.portrait.QueueIcon(false); } } } // Token: 0x060003E8 RID: 1000 RVA: 0x0005C240 File Offset: 0x0005A440 public bool ItemHasSocket(int index) { Vector3 vector = this.sockets[index]; Vector3 vector2 = this.sockets[index + 1]; return vector.x > 0f || vector.y > 0f || vector.z > 0f || (vector2.x > 0f || vector2.y > 0f || vector2.z > 0f); } // Token: 0x060003E9 RID: 1001 RVA: 0x0005C2BC File Offset: 0x0005A4BC public int HasSocket(int itemIndex, int socketNum) { Vector3 vector = this.sockets[itemIndex]; Vector3 vector2 = this.sockets[itemIndex + 1]; if (socketNum == 0) { return (int)vector.x; } if (socketNum == 1) { return (int)vector.y; } if (socketNum == 2) { return (int)vector.z; } if (socketNum == 3) { return (int)vector2.x; } if (socketNum == 4) { return (int)vector2.y; } if (socketNum == 5) { return (int)vector2.z; } return 0; } // Token: 0x060003EA RID: 1002 RVA: 0x0005C32D File Offset: 0x0005A52D public int GetInstrumentRow() { return this.instrumentInUse; } // Token: 0x060003EB RID: 1003 RVA: 0x0005C338 File Offset: 0x0005A538 public int InstrumentTypeIndex(string type) { int invNum = this.GetInvNum(14); if (Links.x.library.GetInvRow(invNum)._MainSkill == type) { return 7; } int invNum2 = this.GetInvNum(26); if (Links.x.library.GetInvRow(invNum2)._MainSkill == type) { return 13; } int invNum3 = this.GetInvNum(28); if (Links.x.library.GetInvRow(invNum3)._MainSkill == type) { return 14; } return -1; } // Token: 0x060003EC RID: 1004 RVA: 0x0005C3C0 File Offset: 0x0005A5C0 public int HasRosary() { int num = this.GetInvNum(14); if (num > 0 && Links.x.library.GetInvRow(num)._MainSkill.Contains("Charm")) { return 7; } num = this.GetInvNum(26); if (num > 0 && Links.x.library.GetInvRow(num)._MainSkill.Contains("Charm")) { return 13; } num = this.GetInvNum(28); if (num > 0 && Links.x.library.GetInvRow(num)._MainSkill.Contains("Charm")) { return 14; } return -1; } // Token: 0x060003ED RID: 1005 RVA: 0x0005C460 File Offset: 0x0005A660 public bool HasInstrument() { int invNum = this.GetInvNum(14); Library.Inventory invRow = Links.x.library.GetInvRow(invNum); int invNum2 = this.GetInvNum(26); Library.Inventory invRow2 = Links.x.library.GetInvRow(invNum2); int invNum3 = this.GetInvNum(28); Library.Inventory invRow3 = Links.x.library.GetInvRow(invNum3); for (int i = 0; i < 3; i++) { Library.Inventory inventory = invRow; if (i == 1) { inventory = invRow2; } if (i == 2) { inventory = invRow3; } if (inventory._MainSkill.Contains("Flute") || inventory._MainSkill.Contains("Drum") || inventory._MainSkill.Contains("Horn") || inventory._MainSkill.Contains("Pipe")) { return true; } } return false; } // Token: 0x060003EE RID: 1006 RVA: 0x0005C534 File Offset: 0x0005A734 public bool HasInstrumentType(string n) { int invNum = this.GetInvNum(14); Library.Inventory invRow = Links.x.library.GetInvRow(invNum); int invNum2 = this.GetInvNum(26); Library.Inventory invRow2 = Links.x.library.GetInvRow(invNum2); int invNum3 = this.GetInvNum(28); Library.Inventory invRow3 = Links.x.library.GetInvRow(invNum3); for (int i = 0; i < 3; i++) { Library.Inventory inventory = invRow; if (i == 1) { inventory = invRow2; } if (i == 2) { inventory = invRow3; } if (inventory._MainSkill.Contains(n)) { return true; } } return false; } // Token: 0x060003EF RID: 1007 RVA: 0x0005C5C8 File Offset: 0x0005A7C8 public Library.Inventory GetInstrumentType(string n) { int invNum = this.GetInvNum(14); Library.Inventory invRow = Links.x.library.GetInvRow(invNum); int invNum2 = this.GetInvNum(26); Library.Inventory invRow2 = Links.x.library.GetInvRow(invNum2); int invNum3 = this.GetInvNum(28); Library.Inventory invRow3 = Links.x.library.GetInvRow(invNum3); for (int i = 0; i < 3; i++) { Library.Inventory inventory = invRow; if (i == 1) { inventory = invRow2; } if (i == 2) { inventory = invRow3; } if (inventory._MainSkill.Contains(n)) { return inventory; } } return null; } // Token: 0x060003F0 RID: 1008 RVA: 0x0005C65D File Offset: 0x0005A85D public int GetInvNum(int rowID) { return this.bag[rowID]; } // Token: 0x060003F1 RID: 1009 RVA: 0x0005C66C File Offset: 0x0005A86C public float GetAllSockets(int rowID) { Vector3 vector = this.sockets[rowID]; Vector3 vector2 = this.sockets[rowID + 1]; return vector.x + vector.y + vector.z + vector2.x + vector2.y + vector2.z; } // Token: 0x060003F2 RID: 1010 RVA: 0x0005C6BE File Offset: 0x0005A8BE public Vector3 GetSocketNum(int rowID) { return this.sockets[rowID]; } // Token: 0x060003F3 RID: 1011 RVA: 0x0005C6CC File Offset: 0x0005A8CC public Vector4 GetDurabilityNum(int rowID) { return this.durability[rowID]; } // Token: 0x060003F4 RID: 1012 RVA: 0x0005C6DA File Offset: 0x0005A8DA public void SetInvNum(int rowID, int total) { this.bag[rowID] = total; } // Token: 0x060003F5 RID: 1013 RVA: 0x0005C6EC File Offset: 0x0005A8EC public void SetSocketNum(int rowID, int total, int id) { Vector3 vector = this.sockets[rowID]; if (id == 0) { vector.x = (float)total; } if (id == 1) { vector.y = (float)total; } if (id == 2) { vector.z = (float)total; } this.sockets[rowID] = vector; } // Token: 0x060003F6 RID: 1014 RVA: 0x0005C73C File Offset: 0x0005A93C public void SwitchItem(int from, int to) { int num = this.bag[to]; int num2 = this.bag[to + 2]; Vector3 vector = this.sockets[to]; Vector3 vector2 = this.sockets[to + 1]; int num3 = this.bagPositions[to / 2]; Vector4 vector3 = this.durability[to / 2]; int num4 = this.bag[from]; int num5 = this.bag[from + 1]; Vector3 vector4 = this.sockets[from]; Vector3 vector5 = this.sockets[from + 1]; int num6 = this.bagPositions[from / 2]; Vector4 vector6 = this.durability[from / 2]; this.bag[from] = num; this.bag[from + 1] = num2; this.sockets[from] = vector; this.sockets[from + 1] = vector2; this.bagPositions[from / 2] = num3; this.durability[from / 2] = vector3; this.bag[to] = num4; this.bag[to + 1] = num5; this.sockets[to] = vector4; this.sockets[to + 1] = vector5; this.bagPositions[to / 2] = num6; this.durability[to / 2] = vector6; if (this.party) { this.inventoryBag.SwapBagItem(from / 2, to / 2, this, false); } if (this.party && this.portrait) { this.portrait.skillBag.SetSelectedWpnIndex(this.selectedWpnIndex); } } // Token: 0x060003F7 RID: 1015 RVA: 0x0005C8F8 File Offset: 0x0005AAF8 public void SwitchWeaponsRows() { Library.Inventory inventory = this.altInvRow1; this.altInvRow1 = this.invRow1; this.invRow1 = inventory; inventory = this.altInvRow2; this.altInvRow2 = this.invRow2; this.invRow2 = inventory; inventory = this.altInvRow3; this.altInvRow3 = this.invRow3; this.invRow3 = inventory; inventory = this.altInvRow4; this.altInvRow4 = this.invRow4; this.invRow4 = inventory; } // Token: 0x060003F8 RID: 1016 RVA: 0x0005C970 File Offset: 0x0005AB70 public void UpdateWeaponVisuals() { this.CreateEquippedItems(this.bag[2], this.bag[3], this.sockets[2], this.sockets[3], 2, true); this.CreateEquippedItems(this.bag[4], this.bag[5], this.sockets[4], this.sockets[5], 4, true); this.CreateEquippedItems(this.bag[6], this.bag[7], this.sockets[6], this.sockets[7], 6, true); this.CreateEquippedItems(this.bag[0], this.bag[1], this.sockets[0], this.sockets[1], 0, true); this.stats.UpdateAbilityTriggers(); } // Token: 0x060003F9 RID: 1017 RVA: 0x0005CA68 File Offset: 0x0005AC68 public void GetAlternativeWeaponRows() { if (this.bag[32] >= 1) { this.altInvRow1 = Links.x.library.GetInvRowByIndex(this.bag[32]); } if (this.bag[34] >= 1) { this.altInvRow2 = Links.x.library.GetInvRowByIndex(this.bag[34]); } if (this.bag[36] >= 1) { this.altInvRow3 = Links.x.library.GetInvRowByIndex(this.bag[34]); } if (this.bag[30] >= 1) { this.altInvRow4 = Links.x.library.GetInvRowByIndex(this.bag[30]); } } // Token: 0x060003FA RID: 1018 RVA: 0x0005CB40 File Offset: 0x0005AD40 public bool RemoveItem(int itemID, int amt) { if (this.npc) { int num = this.HasItem(itemID); if (num > -1) { if (this.bag[num + 1] <= 1) { this.bag[num] = 0; this.bag[num + 1] = 0; this.sockets[num] = Vector3.zero; this.sockets[num + 1] = Vector3.zero; this.bagPositions[num / 2] = 0; this.durability[num / 2] = Vector4.zero; } else { this.bag[num + 1] = this.bag[num + 1] - 1; } return true; } return false; } else { global::Item item = Links.x.inventory.CheckListForItem(itemID, this); int num2 = Links.x.inventory.GetBagIndex(item, this); if (item) { if (item.stackable) { if (amt == 1) { if (item.stackSize == 1) { item.DestroyItem(true, false); Links.x.inventory.RemoveBagItem(num2, this); } else { item.stackSize--; Links.x.inventory.SetBagAmt(item, item.stackSize, this); item.CheckStackSize(); } } else if (item.stackSize == amt) { item.DestroyItem(true, false); Links.x.inventory.RemoveBagItem(num2, this); } else if (item.stackSize > amt) { item.stackSize -= amt; Links.x.inventory.SetBagAmt(item, item.stackSize, this); item.CheckStackSize(); } else { int num3 = amt - item.stackSize; item.DestroyItem(true, false); Links.x.inventory.RemoveBagItem(num2, this); for (int i = 0; i < 100; i++) { if (num3 > 0) { item = Links.x.inventory.CheckListForItem(itemID, this); num2 = Links.x.inventory.GetBagIndex(item, this); if (item) { if (item.stackSize > num3) { item.stackSize -= num3; Links.x.inventory.SetBagAmt(item, item.stackSize, this); item.CheckStackSize(); num3 = 0; } else { num3 -= item.stackSize; item.DestroyItem(true, false); Links.x.inventory.RemoveBagItem(num2, this); } } } } } } else { item.DestroyItem(true, false); Links.x.inventory.RemoveBagItem(num2, this); } if (this.portrait && num2 < 36) { this.portrait.skillBag.SetTrinketGrid(false); } return true; } num2 = this.HasItem(itemID); if (num2 < 36 && num2 > -1) { if (this.bag[num2 + 1] <= 1) { this.bag[num2] = 0; this.bag[num2 + 1] = 0; this.sockets[num2] = Vector3.zero; this.sockets[num2 + 1] = Vector3.zero; this.bagPositions[num2 / 2] = 0; this.durability[num2 / 2] = Vector4.zero; this.CreateEquippedItems(this.bag[num2], this.bag[num2 + 1], this.sockets[num2], this.sockets[num2 + 1], num2, true); this.UpdateInvLists("", num2 / 2, this.bag[num2], this.bag[num2 + 1], this.durability[num2 / 2], this.sockets[num2], this.sockets[num2 + 1], null); } else { this.bag[num2 + 1] = this.bag[num2 + 1] - 1; Links.x.inventory.SetListItems(num2 / 2, null, this.bag[num2], this.bag[num2 + 1], this.sockets[num2], this.sockets[num2 + 1], this.bagPositions[num2 / 2], this.durability[num2 / 2], this); } } if (this.portrait && this.portrait.skillBag) { this.portrait.skillBag.SetTrinketGrid(false); } return false; } } // Token: 0x060003FB RID: 1019 RVA: 0x0005CFCC File Offset: 0x0005B1CC public void UpdateInvLists(string type, int invIndex, int newID, int newAmt, Vector4 dur, Vector3 socketA, Vector3 socketB, global::Item newItem) { if (invIndex * 2 + 2 >= this.bag.Count || invIndex <= -1) { return; } this.bag[invIndex * 2] = newID; this.bag[invIndex * 2 + 1] = newAmt; this.sockets[invIndex * 2] = socketA; this.sockets[invIndex * 2 + 1] = socketB; this.durability[invIndex] = dur; if (!this.npc) { bool flag = false; if (newItem && newAmt == 0 && newItem.stackable) { flag = true; } if (flag || newID == 0 || type == "BagRemove") { Links.x.inventory.SetListItems(invIndex, null, newID, 0, Vector3.zero, Vector3.zero, 0, Vector4.zero, this); if (newID == 0 && (invIndex == 0 || invIndex == 2)) { Links.x.inventory.SetListItems(invIndex, null, newID, 0, Vector3.zero, Vector3.zero, 0, Vector4.zero, this); Links.x.inventory.CreateFist(invIndex, true, this, null, true); } if (newItem) { newItem.DestroyItem(false, false); } if (invIndex < 18) { this.CreateEquippedItems(this.bag[invIndex * 2], this.bag[invIndex * 2 + 1], this.sockets[invIndex * 2], this.sockets[invIndex * 2 + 1], invIndex * 2, true); return; } } else if (newItem) { Links.x.inventory.SetListItems(invIndex, newItem, newID, newAmt, socketA, socketB, 0, newItem.durability, this); if (newItem) { newItem.stackSize = Links.x.inventory.GetBagAmt(invIndex); newItem.CheckStackSize(); } } } } // Token: 0x060003FC RID: 1020 RVA: 0x0005D198 File Offset: 0x0005B398 public void AddTorch() { if (!this.hasTorch) { this.stats.AddBlind(-10f); } if (!this.moonlight) { Light light = base.gameObject.GetComponent(); if (!light) { light = base.gameObject.AddComponent(); } light.color = Links.x.torchColor; light.type = LightType.Point; light.range = 10f; light.enabled = false; this.moonlight = base.gameObject.GetComponent(); if (!this.moonlight) { this.moonlight = base.gameObject.AddComponent(); } if (this.desiredGraph == 1) { this.moonlight.interiorLight = true; } if (this.party) { this.moonlight.characterID = Links.x.GetPartyID(this); } else { this.moonlight.characterID = -1; } this.moonlight.yOffset = 4f; this.moonlight.dynamicLight = true; } else { this.moonlight.l.color = Links.x.torchColor; this.moonlight.SetColor(); } this.hasTorch = true; Links.x.fellowship.SetPartyLightColor(); } // Token: 0x060003FD RID: 1021 RVA: 0x0005D2E0 File Offset: 0x0005B4E0 public void ChangeTorchLight() { if (this.hasTorch || this.hasLight || this.hasIncenseTorch) { this.moonlight = base.gameObject.GetComponent(); if (this.indoorID != "" || Links.x.diorama.underground) { this.moonlight.interiorLight = true; } else { this.moonlight.interiorLight = false; } this.moonlight.SetupLight(true); if (this.hasIncenseTorch) { this.moonlight = this.incense.gameObject.GetComponent(); if (this.indoorID != "" || Links.x.diorama.underground) { this.moonlight.interiorLight = true; } else { this.moonlight.interiorLight = false; } this.moonlight.SetupLight(true); } } } // Token: 0x060003FE RID: 1022 RVA: 0x0005D3CC File Offset: 0x0005B5CC public void RemoveTorch() { if (this.hasTorch) { this.stats.AddBlind(10f); } Light component = base.gameObject.GetComponent(); if (!this.party) { if (component) { Object.Destroy(component); } this.moonlight = base.gameObject.GetComponent(); if (this.moonlight) { Object.Destroy(this.moonlight); } MoonlightRevealer component2 = base.gameObject.GetComponent(); if (component2) { Object.Destroy(component2); } } else { this.moonlight.l.color = Links.x.partyLightColor; this.moonlight.SetColor(); } this.hasTorch = false; if (this.party) { Links.x.fellowship.SetPartyLightColor(); } } // Token: 0x060003FF RID: 1023 RVA: 0x0005D49C File Offset: 0x0005B69C public void AddIncenseTorch() { if (!this.hasIncenseTorch) { this.incense = new GameObject("Incense"); this.incense.transform.SetParent(this.tr); this.incense.transform.localPosition = Vector3.zero; this.incense.AddComponent().isDynamic = true; this.hasIncenseTorch = true; Light light = this.incense.gameObject.GetComponent(); if (!light) { light = this.incense.gameObject.AddComponent(); } light.color = Links.x.incenseTorchColor; light.type = LightType.Point; light.range = 4f; light.enabled = false; Moonlight moonlight = this.incense.gameObject.GetComponent(); if (!moonlight) { moonlight = this.incense.gameObject.AddComponent(); } if (this.desiredGraph == 1 || Links.x.diorama.underground) { moonlight.interiorLight = true; } moonlight.yOffset = 4f; moonlight.dynamicLight = true; } } // Token: 0x06000400 RID: 1024 RVA: 0x0005D5B7 File Offset: 0x0005B7B7 public void RemoveIncenseTorch() { this.hasIncenseTorch = false; if (this.incense) { this.incense.GetComponent().Remove(); Object.Destroy(this.incense); } } // Token: 0x06000401 RID: 1025 RVA: 0x0005D5E8 File Offset: 0x0005B7E8 private IEnumerator PlayerLight() { yield return new WaitForSecondsRealtime(0.1f); this.AddPlayerLight(); yield break; } // Token: 0x06000402 RID: 1026 RVA: 0x0005D5F8 File Offset: 0x0005B7F8 public void AddPlayerLight() { this.hasLight = true; if (!this.moonlight) { Light light = base.gameObject.GetComponent(); if (!light) { light = base.gameObject.AddComponent(); } light.color = Links.x.partyLightColor; light.type = LightType.Point; light.range = 10f; light.enabled = false; this.moonlight = base.gameObject.GetComponent(); if (!this.moonlight) { this.moonlight = base.gameObject.AddComponent(); } if (this.desiredGraph == 1 || Links.x.diorama.underground) { this.moonlight.interiorLight = true; } if (this.party) { this.moonlight.characterID = Links.x.GetPartyID(this); } else { this.moonlight.characterID = -1; } this.moonlight.yOffset = 4f; this.moonlight.dynamicLight = true; } if (this.hasTorch) { this.moonlight.l.color = Links.x.torchColor; this.moonlight.SetColor(); } else { this.moonlight.l.color = Links.x.partyLightColor; this.moonlight.SetColor(); } Links.x.fellowship.SetPartyLightColor(); } // Token: 0x06000403 RID: 1027 RVA: 0x0005D768 File Offset: 0x0005B968 public void RemovePlayerLight() { this.hasLight = false; Light component = base.gameObject.GetComponent(); if (component) { Object.Destroy(component); } this.moonlight = base.gameObject.GetComponent(); if (this.moonlight) { Object.Destroy(this.moonlight); } MoonlightRevealer component2 = base.gameObject.GetComponent(); if (component2) { Object.Destroy(component2); } base.StartCoroutine(this.PlayerLight()); } // Token: 0x06000404 RID: 1028 RVA: 0x0005D7E8 File Offset: 0x0005B9E8 public int GetGlam() { return (int)(0f + Links.x.library.GetInvRowByIndex(this.GetInvNum(16))._AC + Links.x.library.GetInvRowByIndex(this.GetInvNum(20))._AC + Links.x.library.GetInvRowByIndex(this.GetInvNum(22))._AC + Links.x.library.GetInvRowByIndex(this.GetInvNum(24))._AC); } // Token: 0x06000405 RID: 1029 RVA: 0x0005D874 File Offset: 0x0005BA74 public int GetMagicAC() { return 0 + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(2))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(14))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(16))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(18))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(20))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(22))._MagicAC + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(24))._MagicAC; } // Token: 0x06000406 RID: 1030 RVA: 0x0005D954 File Offset: 0x0005BB54 public int GetMagicItems() { return 0 + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(2))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(14))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(16))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(18))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(20))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(22))._MagicBonus + (int)Links.x.library.GetInvRowByIndex(this.GetInvNum(24))._MagicBonus; } // Token: 0x06000407 RID: 1031 RVA: 0x0005DA34 File Offset: 0x0005BC34 public int ItemAmount(int ID) { int num = 0; for (int i = 0; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0) { num += this.bag[i + 1]; } } return num; } // Token: 0x06000408 RID: 1032 RVA: 0x0005DA80 File Offset: 0x0005BC80 public int HasItem(int ID) { for (int i = 0; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0) { return i; } } return -1; } // Token: 0x06000409 RID: 1033 RVA: 0x0005DABC File Offset: 0x0005BCBC public int HasBook(int ID) { for (int i = 0; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0 && this.sockets[i].x == (float)this.stats.partyID) { return i; } } return -1; } // Token: 0x0600040A RID: 1034 RVA: 0x0005DB18 File Offset: 0x0005BD18 public int HasItemInBag(int ID) { for (int i = 0; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0) { return i; } } return -1; } // Token: 0x0600040B RID: 1035 RVA: 0x0005DB54 File Offset: 0x0005BD54 public int HasItemInBagOnly(int ID) { for (int i = 18; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0) { return i; } } return -1; } // Token: 0x0600040C RID: 1036 RVA: 0x0005DB90 File Offset: 0x0005BD90 public int HowManyItemsInBag(int ID, int checkFrom) { int num = 0; for (int i = checkFrom; i < this.bag.Count; i++) { if (this.bag[i] == ID && i % 2 == 0) { num += this.bag[i + 1]; if (this.bag[i + 1] == 0) { num++; } } } return num; } // Token: 0x0600040D RID: 1037 RVA: 0x0005DBF0 File Offset: 0x0005BDF0 public int HasHealthItem() { if (this.npc) { for (int i = 0; i < this.bag.Count; i++) { if (i % 2 == 0 && Links.x.library.GetInvRowByIndex(this.bag[i])._Effect.Contains("Health")) { return i; } } } else { if (this.bag[14] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[14]); if (inventory._Effect.Contains("Health") && inventory._Tag == "Consumable") { return 14; } } if (this.bag[26] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[26]); if (inventory._Effect.Contains("Health") && inventory._Tag == "Consumable") { return 26; } } if (this.bag[28] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[28]); if (inventory._Effect.Contains("Health") && inventory._Tag == "Consumable") { return 28; } } } return -1; } // Token: 0x0600040E RID: 1038 RVA: 0x0005DD54 File Offset: 0x0005BF54 private bool IsBuffItem(string n) { if (this.npc) { if (n.Contains("Spirit")) { return true; } } else if (n.Contains("Spirit") && this.stats.HasSpellbook() && this.stats.SpiritCurrent() < 30) { float num = (float)this.stats.HealthCurrent() / (float)this.stats.HealthMax(); if (!n.Contains("Health") || (n.Contains("Health") && num < (float)this.stats.useItemsAI)) { return true; } } return false; } // Token: 0x0600040F RID: 1039 RVA: 0x0005DDE8 File Offset: 0x0005BFE8 public int HasBuffItem() { if (this.npc) { bool flag = false; for (int i = 0; i < this.bag.Count; i++) { if (i % 2 == 0) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(this.bag[i]); if (invRowByIndex._Tag == "Consumable" && this.IsBuffItem(invRowByIndex._Effect)) { return -1; } } } this.stats.hasBuffItem = flag; } else { if (this.bag[14] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[14]); if (inventory._Tag == "Consumable" && this.IsBuffItem(inventory._Effect)) { return 14; } } if (this.bag[26] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[26]); if (inventory._Tag == "Consumable" && this.IsBuffItem(inventory._Effect)) { return 26; } } if (this.bag[28] > 1) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(this.bag[28]); if (inventory._Tag == "Consumable" && this.IsBuffItem(inventory._Effect)) { return 28; } } } return -1; } // Token: 0x06000410 RID: 1040 RVA: 0x0005DF60 File Offset: 0x0005C160 public int BuffItemID(string type) { for (int i = 0; i < this.bag.Count; i++) { if (i % 2 == 0 && Links.x.library.GetInvRowByIndex(this.bag[i])._Effect.Contains(type)) { return this.bag[i]; } } return -1; } // Token: 0x06000411 RID: 1041 RVA: 0x0005DFC0 File Offset: 0x0005C1C0 public int GiveItem(int ID, int stackSize, Vector3 socketA, Vector3 socketB, Vector4 time, bool fromSomeone) { Library.Inventory invRowByIndex = Links.x.library.GetInvRowByIndex(ID); int num = this.HasItem(ID); if (num > -1 && invRowByIndex._Stackable && this.bag[num + 2] + stackSize < invRowByIndex._MaxStackSize) { List list = this.bag; int num2 = num + 2; list[num2] += stackSize; return -1; } int num3 = this.FreeBagID(); if (this.CheckControls() && !this.stats.animal && fromSomeone) { this.StartQuip("Thanks"); } if (num3 == -1) { this.bag.Add(0); this.bag.Add(0); this.sockets.Add(Vector3.zero); this.sockets.Add(Vector3.zero); this.durability.Add(Vector4.zero); num3 = this.FreeBagID(); } if (invRowByIndex._Tag == "Weapon" && this.bag[0] <= 1) { int num4 = this.bag[0]; int num5 = this.bag[1]; Vector3 vector = this.sockets[0]; Vector3 vector2 = this.sockets[1]; this.bag[0] = ID; this.bag[1] = stackSize; this.sockets[0] = socketA; this.sockets[1] = socketB; if (num4 > 1) { this.bag[num3] = num4; this.bag[num3 + 1] = num5; this.sockets[num3] = vector; this.sockets[num3 + 1] = vector2; } num3 = 0; if (!this.stats.animal && fromSomeone) { this.StartQuip("I could use this"); } } else if (invRowByIndex._Tag == "Shield" && this.bag[1] <= 1) { int num6 = this.bag[2]; int num7 = this.bag[3]; Vector3 vector3 = this.sockets[2]; Vector3 vector4 = this.sockets[3]; this.bag[2] = ID; this.bag[3] = stackSize; this.sockets[2] = socketA; this.sockets[3] = socketB; if (num6 > 1) { this.bag[num3] = num6; this.bag[num3 + 1] = num7; this.sockets[num3] = vector3; this.sockets[num3 + 1] = vector4; } num3 = 2; if (!this.stats.animal && fromSomeone) { this.StartQuip("I could use this"); } } else if (invRowByIndex._Tag.Contains("Armor")) { bool flag = true; if (this.bag[invRowByIndex._EquipSlotID * 2] > 1) { int num8 = this.bag[invRowByIndex._EquipSlotID * 2]; int num9 = (int)Links.x.library.GetInvRowByIndex(num8)._AC; Library.Inventory invRowByIndex2 = Links.x.library.GetInvRowByIndex(ID); if (num9 > (int)invRowByIndex2._AC) { flag = false; } if (flag) { this.bag[num3] = num8; this.bag[num3 + 1] = this.bag[invRowByIndex._EquipSlotID * 2 + 1]; this.sockets[num3] = this.sockets[invRowByIndex._EquipSlotID * 2]; this.sockets[num3 + 1] = this.sockets[invRowByIndex._EquipSlotID * 2 + 1]; if (!this.stats.animal) { this.StartQuip("Looks like an upgrade"); } } } else if (!this.stats.animal && fromSomeone) { this.StartQuip("I could use this"); } if (flag) { int num10 = invRowByIndex._EquipSlotID * 2; int num11 = this.bag[num10]; int num12 = this.bag[num10 + 1]; Vector3 vector5 = this.sockets[num10]; Vector3 vector6 = this.sockets[num10 + 1]; this.bag[num10] = ID; this.bag[num10 + 1] = stackSize; this.sockets[num10] = socketA; this.sockets[num10 + 1] = socketB; this.bag[num3] = num11; this.bag[num3 + 1] = num12; this.sockets[num3] = vector5; this.sockets[num3 + 1] = vector6; num3 = num10; } } else { this.bag[num3] = ID; this.bag[num3 + 1] = stackSize; this.sockets[num3] = socketA; this.sockets[num3 + 1] = socketB; this.durability[num3 / 2] = time; } return num3; } // Token: 0x06000412 RID: 1042 RVA: 0x0005E4F0 File Offset: 0x0005C6F0 public void InitiateDialogue() { Links.x.dialogue.npc1 = this; if (Links.x.hasMain) { Links.x.dialogue.party = Links.x.main; } else { Links.x.dialogue.party = Links.x.GetNearestParty(this.tr.position); } if (this.stats.initiateDialogue != 1 && this.stats.initiateDialogue != 11) { this.stats.canTalk = false; } Links.x.gameplay.StartDialogue(this, Links.x.dialogue.party, null, null, this.stats.dialogueFile); } // Token: 0x06000413 RID: 1043 RVA: 0x0005E5B0 File Offset: 0x0005C7B0 public void SetupBasic(bool isParty, int num, string workingName, int pathNodeID, bool resurrecting, int partyID) { this.tr = base.transform; this.tr.gameObject.layer = 6; if (this.ghost || resurrecting) { this.tr.gameObject.layer = 1; } this.visible = 1; this.indoorID = ""; this.invRow1 = Links.x.library.GetInvRowByIndex(1); this.altInvRow1 = Links.x.library.GetInvRowByIndex(1); this.vectorZero = Vector3.zero; this.headHeight = new Vector3(0f, 3f, 0f); this.torsoHeight = new Vector3(0f, 2f, 0f); this.upVector = Vector3.up; this.yAdd2 = new Vector3(0f, 1.5f, 0f); this.yAdd1 = new Vector3(0f, 0.5f, 0f); this.yAdd3 = new Vector3(0f, 2.5f, 0f); if (!this.audioSource) { this.audioSource = base.gameObject.AddComponent(); } this.audioSource.spatialBlend = 1f; this.audioSource.loop = false; this.audioSource.playOnAwake = false; this.audioSource.maxDistance = 40f; this.ghost = resurrecting; if (workingName.Contains("Ghost") && !workingName.Contains("Radamant")) { this.ghost = true; } if (this.ghost) { this.hostility = 2; } if (!isParty) { this.npc = true; } else { this.npc = false; } this.CreateObjects(); if (!this.seeker) { this.seeker = base.gameObject.AddComponent(); this.seeker.pathCallback = new OnPathDelegate(this.PathFinished); if (isParty && !this.summoned && !this.ghost) { this.raycastModifier = base.gameObject.AddComponent(); this.raycastModifier.enabled = false; } this.simpleSmoothModifier = base.gameObject.AddComponent(); } this.rot = this.tr.rotation; this.smoothRot = this.tr.rotation; if (isParty && !this.summoned) { pathNodeID += 3; } this.nodeStationaryID = pathNodeID; this.nodeMovingID = pathNodeID + 300; this.followingType = ""; if (!this.stats) { this.stats = base.gameObject.AddComponent(); } this.party = false; if (isParty && !this.summoned) { this.party = true; } this.stats.SetupStats(this, workingName); this.animationPrefix = this.stats.characterRow._AnimationPrefix; if (this.stats.race == "Yeti") { this.animationPrefix = "_VollingYeti"; } if (this.ghost) { this.hostility = 2; this.SetResurrected(); if (this.creatures) { this.creatures.SetTemperament(2); } } this.SetupBody(); this.nodeConstraint = new NNConstraint(); this.nodeConstraint.walkable = true; this.nodeConstraint.constrainTags = true; this.nodeConstraint.checkCircleID = 0; this.nodeConstraint.passID = this.nodeStationaryID; this.nodeConstraint.passID2 = this.nodeMovingID; this.nodeConstraint.checkConnections = this.ConnectionNumber(); this.nodeConstraint.constrainToArea = -1; this.desiredGraph = -1; this.walkConstraint = new NNConstraint(); this.quipIndex = Links.x.quips.GetQuipIndex(this.stats.characterRow._QuipID); this.hasCinematicQuip = Links.x.quips.HasIdleQuip(this.quipIndex); if (!this.npc) { base.gameObject.name = this.stats.displayName; } this.UpdateSizeRadius(this.radius); this.SceneSetup(); this.Reincarnate(); this.InvFromDB(); if (isParty) { this.hostility = -1; if (num == 0 && !this.summoned && !Links.x.gaia.sceneLoaded) { this.SetAsLeader(); } if (!this.summoned) { this.partyColorID = Links.x.GetOpenPartyColor(); Links.x.fellowship.SetPortraits(true, 0); if (!this.cc) { this.AddCC(); } } else { this.partyColorID = 6; } if (this.party) { this.fowRevealer = base.gameObject.AddComponent(); this.fowRevealer.main = true; this.fowRevealer.enabled = false; this.fowRevealer.character = this; this.fowRevealerInterior = base.gameObject.AddComponent(); this.fowRevealerInterior.main = true; this.fowRevealerInterior.enabled = false; this.fowRevealerInterior.character = this; } this.GetPartyPooledObjects(); if (this.party) { this.AddPlayerLight(); } } else { if (this.stats.characterRow._CanJoinParty) { this.ClearQuips(); } if (!this.npc && this.body.model.Contains("heep")) { this.GetPartyPooledObjects(); } } if (isParty) { Links.x.diorama.sceneName != "Statues"; } if (Records.x.editor) { this.sphere.name = ((this != null) ? this.ToString() : null) + " Sphere"; } this.terrain = "Grass"; this.setupComplete = true; if (this.npc || !this.party) { if (!this.creatures.ambush) { this.FirstPosition(null); } this.creatures.canJoinParty = this.stats.characterRow._CanJoinParty; this.GetPatrolHoldTime(true); } if (this.party) { this.stats.partyID = partyID; this.stats.CharacterLoad(); } if (isParty) { if (this.bracket) { this.SetBracketPosition(); } bool flag = this.summoned; } this.CircleAnimation(""); base.enabled = true; if (this.ghost) { this.stats.soundID = 2; } if (this.summoned && !this.npc) { this.stats.SetSummonAllegiance(); } if (this.npc && this.creatures && this.creatures.movesOnWater && !this.stats.flying && !this.waterCollider) { this.waterCollider = new GameObject("Water Collider " + ((this != null) ? this.ToString() : null)); CapsuleCollider capsuleCollider = this.waterCollider.AddComponent(); capsuleCollider.radius = 1.5f; capsuleCollider.height = 1f; this.waterColliderRigidbody = this.waterCollider.AddComponent(); this.waterColliderRigidbody.useGravity = false; this.waterColliderRigidbody.isKinematic = true; this.waterColliderRigidbody.mass = 0.1f; this.waterColliderRigidbody.constraints = RigidbodyConstraints.FreezeAll; capsuleCollider.material = Links.x.zeroFriction; this.waterCollider.layer = 0; this.waterCollisions = this.waterCollider.AddComponent(); this.waterCollisions.character = this; } if (!this.party) { if (this.goreObj) { this.SetMeshState(false); } } else if (!this.grassInteraction) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(89); if (pooledGameObject) { this.grassInteraction = pooledGameObject.transform; pooledGameObject.SetActive(true); } } this.FullAttackTime(); } // Token: 0x06000414 RID: 1044 RVA: 0x0005EDAD File Offset: 0x0005CFAD public Vector3 HeadHeight() { return this.headHeight; } // Token: 0x06000415 RID: 1045 RVA: 0x0005EDB8 File Offset: 0x0005CFB8 private void AddCC() { this.cc = base.gameObject.GetComponent(); if (!this.cc) { this.cc = base.gameObject.AddComponent(); this.cc.radius = 0.7f; this.cc.center = new Vector3(0f, 2f, 0f); this.cc.height = 3.5f; this.cc.slopeLimit = 60f; this.cc.stepOffset = 0.8f; this.cc.minMoveDistance = 0f; this.cc.skinWidth = 0.3f; this.cc.enabled = false; this.cc.transform.position = this.tr.position; this.cc.transform.rotation = this.tr.rotation; this.cc.enabled = true; this.cc.enabled = false; } this.playerBorders = base.gameObject.GetComponent(); if (!this.playerBorders) { this.playerBorders = base.gameObject.AddComponent(); this.playerBorders.character = this; this.playerBorders.enabled = false; } } // Token: 0x06000416 RID: 1046 RVA: 0x0005EF17 File Offset: 0x0005D117 public string GetBoundCharacter() { if (this.dockFriend) { return this.dockFriend.boundCharacterName; } return ""; } // Token: 0x06000417 RID: 1047 RVA: 0x0005EF38 File Offset: 0x0005D138 public void GetFriendDock(Character boundToCharacter) { if (!this.dockFriend && boundToCharacter) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(121); this.dockFriend = pooledGameObject.GetComponent(); this.dockFriend.Setup(this, boundToCharacter); } } // Token: 0x06000418 RID: 1048 RVA: 0x0005EF88 File Offset: 0x0005D188 public void Charmed(Character boundToCharacter) { this.charmed = true; if (!this.heart) { this.heart = Links.x.cellar.GetPooledGameObject(66); this.heart.SetActive(true); this.SetHeartPosition(); } this.SetMeshState(true); this.body.SetMeshState(true, false); this.GetFriendDock(boundToCharacter); } // Token: 0x06000419 RID: 1049 RVA: 0x0005EFF0 File Offset: 0x0005D1F0 public void BoroBoat() { if (!this.boroBoat) { this.boroBoat = Links.x.cellar.GetPooledGameObject(136); this.boroBoat.SetActive(true); this.boroBoat.transform.parent = this.body.GetHips(); this.boroBoat.transform.localPosition = new Vector3(0f, -0.1f, 0f); this.boroBoat.transform.localRotation = Quaternion.identity; if (this.body) { this.body.GatherRenderers(false); } } } // Token: 0x0600041A RID: 1050 RVA: 0x0005F0A0 File Offset: 0x0005D2A0 public void ToggleBoat(bool state) { if (this.sailing) { state = false; } if (this.boroBoat) { this.boroBoat.SetActive(state); } } // Token: 0x0600041B RID: 1051 RVA: 0x0005F0C6 File Offset: 0x0005D2C6 public void SetBracketPosition() { this.SetSelectedPosition(); } // Token: 0x0600041C RID: 1052 RVA: 0x0005F0D0 File Offset: 0x0005D2D0 private void CreateObjects() { if (!this.sphere) { this.sphere = Links.x.cellar.GetPooledGameObject(2); } if (!this.moveFollow) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(2); if (Records.x.editor) { pooledGameObject.name = ((this != null) ? this.ToString() : null) + " Move Follow"; } this.moveFollow = pooledGameObject.transform; } if (!this.lookAtTurnTarget) { GameObject pooledGameObject2 = Links.x.cellar.GetPooledGameObject(2); if (Records.x.editor) { pooledGameObject2.name = ((this != null) ? this.ToString() : null) + " Look At Turn Target"; } this.lookAtTurnTarget = pooledGameObject2.transform; } } // Token: 0x0600041D RID: 1053 RVA: 0x0005F1A8 File Offset: 0x0005D3A8 private void SetResurrected() { for (int i = 0; i < this.bag.Count; i++) { if (i == 0) { this.bag[i] = 1; } else { this.bag[i] = 0; } } if (this.stats.GetSkill(13) < 100f) { this.stats.SetSkill(13, 120); } this.dayNightVanishing = false; this.vanished = false; this.alwaysOn = false; this.stats.SetResurrectionFactions(); } // Token: 0x0600041E RID: 1054 RVA: 0x0005F230 File Offset: 0x0005D430 public void CreateStamina() { GameObject gameObject = new GameObject("Stamina"); gameObject.transform.SetParent(Links.x.cellar.tr); this.stamina = gameObject.AddComponent(); this.stamina.Setup(this); if (this.bag[18] > 1) { Library.Inventory invRow = Links.x.library.GetInvRow(this.bag[18]); this.stamina.SetupArmor(this, Mathf.RoundToInt((float)invRow._DurabilityMax / 2f), (int)this.durability[9].x); } } // Token: 0x0600041F RID: 1055 RVA: 0x0005F2D8 File Offset: 0x0005D4D8 public void CreateStatusRing(Effects effect, string spriteName, int arrows) { if (!this.statusRing) { GameObject gameObject = new GameObject("Status Ring"); gameObject.transform.SetParent(Links.x.cellar.tr); this.statusRing = gameObject.AddComponent(); this.statusRing.character = this; if (this.radius == 3f) { this.statusRing.radius = 1f; this.statusRing.speedBoost = 2f; } if (this.radius == 4f) { this.statusRing.radius = 0.75f; this.statusRing.speedBoost = 1.5f; } if (this.radius == 8f) { this.statusRing.radius = 0.5f; this.statusRing.speedBoost = 1f; } } this.statusRing.AddEffect(spriteName, effect, true, arrows); } // Token: 0x06000420 RID: 1056 RVA: 0x0005F3C8 File Offset: 0x0005D5C8 public void HealStatusRing(Effects effect, string spriteName) { if (this.statusRing) { this.statusRing.RemoveEffect(spriteName, effect); } } // Token: 0x06000421 RID: 1057 RVA: 0x0005F3E4 File Offset: 0x0005D5E4 public void UpdateModel(string n) { if (this.bodyObj) { Links.x.archives.RecycleBody(this.bodyObj, this.bodyObj.name, base.gameObject.name); } this.bodyObj = null; this.stats.model = n; this.SetupBody(); this.AddEquippedItems(); this.SetMeshState(true); } // Token: 0x06000422 RID: 1058 RVA: 0x0005F450 File Offset: 0x0005D650 public void SetupBody() { bool flag = false; if (this.bodyObj) { if (this.boroBoat) { flag = true; Links.x.cellar.ReturnPooledGameObject(136, this.boroBoat); this.boroBoat = null; } Links.x.archives.RecycleBody(this.bodyObj, this.bodyObj.name, base.gameObject.name); } this.bodyObj = null; string text = this.stats.model; if (this.ghost && !text.Contains("host")) { text = "Ghost_A"; this.stats.model = text; } this.bodyObj = Links.x.archives.InstantiateBody(text, this.tr); if (this.hostility == 2) { bool flag2 = this.ghost; } if (!this.bodyObj) { Debug.Log(string.Concat(new string[] { (this != null) ? this.ToString() : null, " missing model ", this.stats.model, " ", this.stats.xmlName })); } this.bodyObj.transform.localPosition = this.vectorZero; this.body = this.bodyObj.GetComponent(); this.body.Reset(); this.body.model = text; this.body.character = this; this.body.SetupHead(this.stats.headModel); this.body.GatherRenderers(true); bool flag3 = true; if (this.party) { flag3 = false; } this.body.SetupTextures(this.stats.race, this.stats.sex, this.stats.characterRow, this.stats.skinTexture, this.stats.hairTexture, flag3); if (flag) { this.BoroBoat(); } this.animator = this.body.anim; this.bodyObj.name = text; this.bodyObj.SetActive(true); this.neck = this.body.GetNeck(); this.body.tr.localRotation = this.savedRot; this.rotateToSlope = this.stats.characterRow._RotateToSlope; if (this.bracket) { this.SetBracketPosition(); } CapsuleCollider component = this.bodyObj.GetComponent(); if (component && !this.stats.animal) { component.enabled = false; } else if (component) { component.enabled = false; this.body.gameObject.layer = 31; if (!this.body.gameObject.GetComponent()) { this.body.gameObject.AddComponent().character = this; } } this.thisCollider = base.gameObject.GetComponent(); if (!this.thisCollider) { this.thisCollider = base.gameObject.AddComponent(); } if (this.radius <= 3f) { this.thisCollider.radius = 0.75f; } if (this.ghost) { this.thisCollider.radius = 3f; } this.thisCollider.height = 3.5f; if (component) { this.thisCollider.center = component.center; } else { this.thisCollider.center = new Vector3(0f, 1.75f, 0f); } if (!this.rb) { this.rb = base.gameObject.AddComponent(); } this.rb.isKinematic = true; this.thisCollider.enabled = true; if (this.ghost) { this.thisCollider.isTrigger = true; } if (this.party) { this.StopMove(); } if (this.stats.race == "Yeti") { this.animationPrefix = "_VollingYeti"; } string text2 = this.animationPrefix + "_Unarmed"; AnimatorOverrideController animatorOverrideController = Links.x.archives.GetOverrideController(text2); if (animatorOverrideController == null && !this.stats.animal) { animatorOverrideController = Links.x.archives.GetOverrideController("_Volling_Unarmed"); } this.animator.runtimeAnimatorController = animatorOverrideController; if (this.body) { this.body.anim.Rebind(); this.body.anim.Update(0f); this.body.transform.localPosition = Vector3.zero; } this.needsRebind = false; if (this.animator) { this.animator.SetBool("Party", this.party); } if (this.ghost) { this.body.SetGhost(); } if (this.party && !Links.x.gameplay.spellTargetingParty) { this.body.SeeThroughColliders(false); } if (this.stats.hasCustomIdle && !this.sailing) { this.animator.SetFloat("Idle Variation", 1f); } } // Token: 0x06000423 RID: 1059 RVA: 0x0005F995 File Offset: 0x0005DB95 public void SetupPartyAfterLoadedVariables() { this.portrait.SetHealthColor(); this.SetUpInv(); } // Token: 0x06000424 RID: 1060 RVA: 0x0005F9A8 File Offset: 0x0005DBA8 public void SetupPartyAfterLoadedVariables2() { this.stats.UpdateAbilityTriggers(); if (this.portrait) { this.portrait.skillBag.UpdateWindowStates(); } if (this.bag[18] > 0) { if (Links.x.library.GetInvRowByIndex(this.bag[18])._ArmorID != -1) { this.CreateEquippedItems(this.bag[18], this.bag[19], new Vector3(-1f, -1f, -1f), new Vector3(-1f, -1f, -1f), 18, true); } else { this.AddEquippedItems(); } } else { this.AddEquippedItems(); } this.stats.UpdateAbilityTriggers(); if (this.portrait) { this.portrait.skillBag.UpdateWindowStates(); } this.portrait.SetFatigue(); this.portrait.SetHealthColor(); this.stats.FormationTactics(); this.animationPrefix = this.stats.characterRow._AnimationPrefix; if (this.stats.race == "Yeti") { this.animationPrefix = "_VollingYeti"; } Links.x.gaia.settingUpParty = false; } // Token: 0x06000425 RID: 1061 RVA: 0x0005FB00 File Offset: 0x0005DD00 public void GetPartyPooledObjects() { this.waypoint = Links.x.cellar.GetPooledGameObject(0); this.waypointAnimator = this.waypoint.transform.GetChild(0).gameObject.GetComponent(); this.waypoint.SetActive(true); this.waypoint.transform.parent = Links.x.gameplay.transform; this.waypointRenderer = this.waypoint.transform.GetChild(0).gameObject.transform.GetChild(0).gameObject.GetComponent(); this.waypointRenderer.sharedMaterial = Links.x.GetPartyMaterial(this.partyColorID, 4); if (this.party) { this.mapIcon = this.CreateSphere(this.tr.position, 2f); if (Records.x.editor) { this.mapIcon.name = this.stats.GetName() + "'s Map Icon"; } this.mapIcon.SetActive(true); this.mapIcon.layer = 15; this.mapIcon.transform.parent = Links.x.cellar.tr; this.mapIcon.GetComponent().sharedMaterial = Links.x.mapIconMaterial; } } // Token: 0x06000426 RID: 1062 RVA: 0x0005FC64 File Offset: 0x0005DE64 public void ReturnPartyPooledObjects() { if (this.mapIcon) { Object.Destroy(this.mapIcon); } this.mapIcon = null; if (this.waypoint) { this.waypoint.gameObject.SetActive(false); this.waypoint = null; } if (this.portrait) { this.portrait.Remove(); this.characterSheetPortrait.Remove(); } this.portrait = null; this.characterSheetPortrait = null; if (this.revivalGem) { Links.x.cellar.ReturnPooledGameObject(123, this.revivalGem.gameObject); this.revivalGem = null; } if (this.statusRing) { this.statusRing.End(); this.statusRing = null; } if (this.stamina) { this.stamina.End(); this.stamina = null; } if (this.stats.boro && this.boroBoat) { Links.x.cellar.ReturnPooledGameObject(136, this.boroBoat); this.boroBoat = null; } } // Token: 0x06000427 RID: 1063 RVA: 0x0005FD90 File Offset: 0x0005DF90 public void AddEquippedItems() { for (int i = 0; i < 19; i++) { if (this.bag[i * 2] > 0 || i == 0 || i == 1) { if ((i == 0 || i == 1) && this.bag[i * 2] == 0) { this.bag[i * 2] = 1; } if (i != 9) { this.CreateEquippedItems(this.bag[i * 2], this.bag[i * 2 + 1], this.sockets[i * 2], this.sockets[i * 2 + 1], i * 2, true); } } } } // Token: 0x06000428 RID: 1064 RVA: 0x0005FE3C File Offset: 0x0005E03C public void EquipNPC(int i, int moveTo) { if (i != moveTo) { int num = this.bag[i * 2]; int num2 = this.bag[i * 2 + 1]; Vector3 vector = this.sockets[i * 2]; Vector3 vector2 = this.sockets[i * 2 + 1]; Vector4 vector3 = this.durability[i]; this.bag[i * 2] = this.bag[moveTo * 2]; this.bag[i * 2 + 1] = this.bag[moveTo * 2 + 1]; this.sockets[i * 2] = this.sockets[moveTo * 2]; this.sockets[i * 2 + 1] = this.sockets[moveTo * 2 + 1]; this.durability[i] = this.durability[moveTo]; this.bag[moveTo * 2] = num; this.bag[moveTo * 2 + 1] = num2; this.sockets[moveTo * 2] = vector; this.sockets[moveTo * 2 + 1] = vector2; this.durability[moveTo] = vector3; } this.CreateEquippedItems(this.bag[moveTo * 2], this.bag[moveTo * 2 + 1], this.sockets[moveTo * 2], this.sockets[moveTo * 2 + 1], moveTo * 2, true); } // Token: 0x06000429 RID: 1065 RVA: 0x0005FFC4 File Offset: 0x0005E1C4 public void UnequipNPC(int i) { this.CreateEquippedItems(this.bag[i * 2], this.bag[i * 2 + 1], this.sockets[i * 2], this.sockets[i * 2 + 1], i * 2, true); } // Token: 0x0600042A RID: 1066 RVA: 0x00060018 File Offset: 0x0005E218 public void SetupNPCAfterLoadedVariables() { bool flag = this.wasStunned; if (!this.stunned) { for (int i = 0; i < 19; i++) { if (this.bag[i * 2] > 0 || i == 0) { this.CreateEquippedItems(this.bag[i * 2], this.bag[i * 2 + 1], this.sockets[i * 2], this.sockets[i * 2 + 1], i * 2, true); } } } if (this.portrait) { this.portrait.skillBag.UpdateWindowStates(); } this.stats.UpdateAbilityTriggers(); this.stats.Talk(); this.stats.FormationTactics(); } // Token: 0x0600042B RID: 1067 RVA: 0x000600DC File Offset: 0x0005E2DC public void AddToParty() { this.EndPath(); this.stats.originalMap = Links.x.diorama.sceneName; if (this.creatures) { this.creatures.SetStateByIndex(0, "Companion"); } this.npc = false; this.hostility = -1; if (!this.summoned) { this.party = true; } Links.x.ChangeNPCList(this, false); Links.x.ChangePartyList(this, true, this.party); Links.x.ClearNPCs(); if (this.creatures) { this.creatures.JoiningParty(); } this.stats.state = "Companion"; Links.x.gameFeed.AddFeed(this.stats.displayName + " has joined you"); Links.x.fellowship.SetPortraits(true, 0); this.fowRevealer = base.gameObject.AddComponent(); this.fowRevealer.main = true; this.fowRevealer.enabled = true; this.fowRevealer.character = this; this.fowRevealerInterior = base.gameObject.AddComponent(); this.fowRevealerInterior.main = true; this.fowRevealerInterior.enabled = true; this.fowRevealerInterior.character = this; if (!this.raycastModifier) { this.raycastModifier = base.gameObject.AddComponent(); this.raycastModifier.enabled = false; } this.waypoint = Links.x.cellar.GetPooledGameObject(0); this.waypoint.SetActive(false); this.waypoint.transform.parent = Links.x.gameplay.transform; this.party = true; this.body.GatherRenderers(false); this.partyColorID = Links.x.GetOpenPartyColor(); Links.x.fellowship.SetPortraits(true, 0); this.AddPlayerLight(); if (!this.cc) { this.AddCC(); } if (Links.x.main == this && !Records.x.InCombat(false)) { Links.x.rtsCamera.Follow(base.transform, this, false); } this.GetPartyPooledObjects(); Records.x.RemoveTemporaryCreature(this.stats.creaturesName, this.stats.xmlName, this.stats.originalMap, 0); this.tr.SetParent(Links.x.fellowship.transform); this.tr.parent = null; this.tr.SetAsLastSibling(); this.SetUpInv(); this.RemoveFromSelected(false); this.stats.partyID = Records.x.partyTotal; Records.x.partyTotal++; Debug.Log(this.stats.partyID.ToString() + " " + Records.x.partyTotal.ToString()); if (this.stats.partyID == 1) { global::Item item; ItemEquipped itemEquipped; Links.x.inventory.AddFromGround(null, null, 0, false, 0f, Links.x.library.GetInvRowID("Songbook"), 1, new Vector3((float)this.stats.partyID, 0f, 0f), new Vector3(0f, 0f, 0f), new Vector4(0f, 0f, 0f, 0f), this, false, false, out item, out itemEquipped); this.stats.UpdateAbilityTriggers(); this.portrait.skillBag.SetSongGrid(); } Links.x.characterSheet.OrderPortraits(); this.stats.stamina = 30f; this.stats.maxStamina = 30f; Links.x.pocketWheel.NewScene(); } // Token: 0x0600042C RID: 1068 RVA: 0x000604D0 File Offset: 0x0005E6D0 public void RemoveFromParty(bool remainAsNPC) { Links.x.inventory.ClearBag(this); this.portrait.skillBag.Remove(); if (this.stats.GetName() == "Viorica") { this.stats.xmlName = "BanquetIsleFriend"; } if (this.stats.GetName() == "Emil") { this.stats.xmlName = "BanquetIsleFriend2"; } if (this.portrait) { this.portrait.Remove(); this.characterSheetPortrait.Remove(); } if (this.waypoint) { this.waypoint.gameObject.SetActive(false); this.waypoint = null; } this.portrait = null; this.characterSheetPortrait = null; if (this.raycastModifier) { this.raycastModifier.enabled = false; } if (remainAsNPC) { this.npc = true; } this.hostility = 0; this.ClearQuips(); Links.x.AddRemovedCompanion(this); Links.x.ChangePartyList(this, false, this.party); if (remainAsNPC) { Links.x.ChangeNPCList(this, true); } if (this.fowRevealer) { Object.Destroy(this.fowRevealerInterior); Object.Destroy(this.fowRevealer); } if (this.cc) { Object.Destroy(this.cc); Object.Destroy(this.playerBorders); } if (remainAsNPC) { Debug.Log(string.Concat(new string[] { this.stats.originalMap, " ", Links.x.diorama.sceneName, " ", this.stats.xmlName })); if (this.stats.originalMap != Links.x.diorama.sceneName) { this.stats.GetEffectStrings(); Records.x.AddTemporaryCreature(this.stats.creaturesName, this.stats.xmlName, this.stats.originalMap, Links.x.diorama.sceneName, 0, this.tr.position, "Normal", "", this.stats.HealthCurrent(), this.stats.savedEffects, 0, 0f, Links.x.diorama.sceneName, this.tr.position, false); } else { this.creatures = Links.x.diorama.SetCreatureState(this.stats.xmlName, "Normal", 0); this.stats.state = "Normal"; if (Records.x.banquetIsle) { this.creatures.SetTemperament(2); this.creatures.SetCharacter0(this, 2); } else { this.creatures.SetCharacter0(this, 1); } } base.gameObject.transform.parent = Links.x.diorama.creatures; } Links.x.ReorderPortraits(); this.ReturnPartyPooledObjects(); this.RemovePlayerLight(); if (Links.x.main == this) { Links.x.protagonist.SetAsLeader(); } this.party = false; this.mainSelected = false; this.stats.maxStamina = this.stats.characterRow._Stamina; this.stats.stamina = this.stats.maxStamina; if (Records.x.editor || Records.x.secrets) { Links.x.gameFeed.AddFeed(this.stats.displayName + " has left the party."); } Links.x.pocketWheel.NewScene(); } // Token: 0x0600042D RID: 1069 RVA: 0x00060899 File Offset: 0x0005EA99 public void AddToLists() { Links.x.ChangeNPCList(this, true); this.SceneSetup(); } // Token: 0x0600042E RID: 1070 RVA: 0x000608B0 File Offset: 0x0005EAB0 public void RemovingScene() { if (!this.tr) { return; } this.TargetReached(); this.ClearMoveTargets(); if (this.sphere && this.tr) { this.sphere.transform.position = this.tr.position; } this.RemoveLastNode(true); this.node = null; if (this.hasActions && this.npc && this.actions) { this.actions.EndActions(); } if (this.dockFriend) { this.dockFriend.RemovePortrait(); } if (this.npc) { this.ReturnPooledObjects(); this.stats.ReturnPooledEffects(); this.ReturnToPool(); } } // Token: 0x0600042F RID: 1071 RVA: 0x00060979 File Offset: 0x0005EB79 public void DestroyCharacter() { Records.x.AddDestroyCharacter(this); } // Token: 0x06000430 RID: 1072 RVA: 0x00060986 File Offset: 0x0005EB86 public void DestroyCharacterWait() { base.StartCoroutine(this.DestroyWait()); } // Token: 0x06000431 RID: 1073 RVA: 0x00060995 File Offset: 0x0005EB95 private IEnumerator DestroyWait() { float timeToLerp = Random.Range(3f, 5f); float percentage = 0f; float startTime = Time.time; while (percentage < 1f && Links.x.gaia.sceneLoaded) { percentage = (Time.time - startTime) / timeToLerp; yield return null; } this.DestroyCharacter(); yield break; } // Token: 0x06000432 RID: 1074 RVA: 0x000609A4 File Offset: 0x0005EBA4 public void FinishDestroyingCharacter() { if (Links.x.gaia.sceneLoaded && Links.x.gameCard.hoverCharacter == this) { Links.x.gameCard.EndHover(this, false); } this.TargetReached(); this.ClearMoveTargets(); if (this.sphere) { this.sphere.transform.position = this.tr.position; } this.RemoveLastNode(true); if (this.hasActions && this.actions) { this.actions.EndActions(); } this.node = null; if (this.body) { this.body.RemoveDeathParts(); } if (this.bouncer) { this.bouncer.EndNow(); Object.Destroy(this.bouncer.gameObject); this.bouncer = null; } if (this.hasIncenseTorch) { this.RemoveIncenseTorch(); } if (this.hasTorch) { this.RemoveTorch(); } if (this.statusRing) { this.statusRing.End(); this.statusRing = null; } if (this.stamina) { this.stamina.End(); this.stamina = null; } if (this.oar) { Links.x.cellar.ReturnPooledGameObject(137, this.oar); this.oar = null; } if (this.npc) { Links.x.ChangeNPCList(this, false); } else if (this.party) { this.ReturnPartyPooledObjects(); Links.x.inventory.ClearBag(this); if (this.portrait) { this.portrait.skillBag.Remove(); } } else if (this.creatures && this.summoned) { Object.Destroy(this.creatures.gameObject); } if (this.gos != null) { this.gos.Remove(this); } Links.x.ChangeDeadList(this, false); if (this.portrait) { Links.x.hudControl.RemovePortrait(this.portrait); this.portrait = null; this.characterSheetPortrait.Remove(); this.characterSheetPortrait = null; } this.ReturnPooledObjects(); this.stats.ReturnPooledEffects(); this.ReturnToPool(); } // Token: 0x06000433 RID: 1075 RVA: 0x00060C08 File Offset: 0x0005EE08 public void SceneSetup() { this.gos = Links.x.diorama.characters; if (this.npc) { if (!this.setupComplete && !this.gos.Contains(this)) { this.gos.Add(this); return; } } else { this.gos.Add(this); } } // Token: 0x06000434 RID: 1076 RVA: 0x00060C64 File Offset: 0x0005EE64 private void CheckInTown() { bool flag = this.inTown; if (this.party) { this.inSporeForest = Links.x.diorama.InSporeForest(this.currentPosition); if (this.sporeTime == 0f) { this.sporeTime = Links.x.gameplay.seconds; } } this.inTown = Links.x.diorama.InTown(this.tr.position); if (!this.hasActions && this.inTown) { if (this.party) { this.animator.SetBool("Party", true); } this.animator.SetBool("InTown", true); } else { if (this.party) { this.animator.SetBool("Party", true); } this.animator.SetBool("InTown", false); } if (this.mainSelected && this.inTown != flag) { Links.x.gaia.SetEnvironmentPlaylist(false, this.inTown, false); } if (this.inTown != flag) { this.SetAnimatorSpeed(1f); this.animator.speed = this.currentAnimatorSpeed; } } // Token: 0x06000435 RID: 1077 RVA: 0x00060D90 File Offset: 0x0005EF90 public bool InSporeForest() { return this.inSporeForest; } // Token: 0x06000436 RID: 1078 RVA: 0x00060D98 File Offset: 0x0005EF98 public void MakeRandomPathAfterJump() { this.makePathAfterJump = true; } // Token: 0x06000437 RID: 1079 RVA: 0x00060DA4 File Offset: 0x0005EFA4 public void FirstPosition(GraphNode firstNode) { if (!this.setupComplete || (this.dead && this.npc) || !this.tr) { return; } if (this.npc && this.creatures && this.creatures.ambush) { return; } this.jumpingAreas = false; this.jumpingPosition = true; this.jumpPositionTime = Time.timeSinceLevelLoad; this.jumpPositionVector = this.tr.position; this.movingAreas = false; this.meshAlwaysOff = false; if (this.cc && this.cc.enabled) { this.cc.enabled = false; this.cc.enabled = true; } this.nodePoint = this.tr.position; if (this.party && !this.hasActions) { this.timeSinceMoveEnded = -100f; if (this.animator) { this.animator.SetBool("Combat", false); } } GraphNode graphNode = firstNode; if (graphNode == null) { this.moveOnTiles = this.ghost; graphNode = this.NearNode(this.nodePoint, true, 0, -1, 0); this.moveOnTiles = false; } if (graphNode != null) { this.nodePoint = (Vector3)graphNode.position; } if (this.nodePoint != this.vectorZero && !this.stuckInPlace && !this.sailing) { this.SetPosition(this.nodePoint, null); } this.slideNode = null; this.slideNodePosition = Vector3.zero; this.lastFatiguePosition = this.tr.position; this.ClaimNode(graphNode, this.nodePoint, true); if (graphNode != null && !this.stuckInPlace && !this.sailing) { this.SetPosition((Vector3)graphNode.position, graphNode); } if (this.circleTr) { this.circleTr.position = this.tr.position; } this.SetMoveFollowPosition(this.tr.position); if (graphNode != null) { this.SetMoveFollowPosition((Vector3)graphNode.position); } this.TargetReached(); if (!this.npc) { this.GetTerrain(); } if (!this.resting && !Links.x.gaia.sceneLoaded) { this.PlayAnimation("Idle", Random.Range(0f, 1f)); } if (Links.x.gaia.sceneLoaded) { this.DoFootsteps(); } this.rot = this.tr.rotation; this.smoothRot = this.tr.rotation; this.savedRot = this.tr.rotation; if (this.mainSelected) { Links.x.follow.position = this.tr.position + this.headHeight; } if (this.node != null) { this.desiredGraph = (int)this.node.GraphIndex; } this.lastFatiguePosition = this.tr.position; if (this.desiredGraph == 1) { if (Links.x.diorama.GetIndoorView()) { this.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName(this.tr.position); } } else { this.indoorID = ""; } if (this.sphere) { this.sphere.transform.position = this.tr.position; } this.savedPathTarget = this.node; this.savedFollowNode = this.node; this.body.SetMagicaClothWind(); if (this.mainSelected) { this.CheckInTown(); if (!this.inTown) { Links.x.gaia.SetEnvironmentPlaylist(Links.x.gameplay.sailing, this.inTown, false); } } } // Token: 0x06000438 RID: 1080 RVA: 0x00061178 File Offset: 0x0005F378 public void SettlePosition() { if (this.node != null) { this.desiredGraph = (int)this.node.GraphIndex; } this.rot = this.tr.rotation; this.smoothRot = this.tr.rotation; this.savedRot = this.tr.rotation; this.SetMoveFollowPosition(this.tr.position); if (this.desiredGraph == 1) { this.indoorID = Links.x.diorama.GetIndoorView().GetInteriorBoundsName(this.tr.position); } else { this.indoorID = ""; } if (this.sphere) { this.sphere.transform.position = this.tr.position; } } // Token: 0x06000439 RID: 1081 RVA: 0x00061248 File Offset: 0x0005F448 public void TurnScriptsOff() { if (this.party && !this.isBoro && !this.offMap) { return; } if (this.deactivating || this.fleeing) { return; } if (this.dayNightVanishing || this.alwaysOn) { return; } if (this.creatures && this.creatures.activating) { return; } if (this.hasActions && this.actions) { this.actions.EndActions(); } base.enabled = false; this.animator.enabled = false; this.stats.enabled = false; if (this.body) { this.body.lookAtController.SetAsActive(false); this.body.TurnOffIK(); if (this.body.headAnim) { this.body.headAnim.enabled = false; } } this.SetMeshState(false); this.body.enabled = false; this.inactive = true; this.TargetReached(); if (this.thisCollider) { this.thisCollider.enabled = false; } this.audioSource.enabled = false; if (this.usingCircles && this.circleTr) { this.circle.SetActive(false); } this.ClearLKP(); if (this.party || this.isBoro || this.vanished) { this.RemoveLastNode(true); } } // Token: 0x0600043A RID: 1082 RVA: 0x000613C4 File Offset: 0x0005F5C4 public void TurnScriptsOn() { if (this.offMap || this.vanished) { return; } if (Records.x.partySailing && this.summoned && !this.npc) { return; } base.enabled = true; this.body.enabled = true; this.animator.enabled = true; this.stats.enabled = true; this.audioSource.enabled = true; if (this.thisCollider) { this.thisCollider.enabled = true; } this.inactive = false; if (this.body.headAnim) { this.body.headAnim.enabled = true; } if (this.creatures) { this.creatures.CheckSleep(this); } if (this.party) { this.FindCurrentNode(true); } if (this.circleTr && !this.isBoro && !this.inactive && this.visible == 1 && !this.stunned && this.usingCircles) { this.circle.SetActive(true); } this.CircleAnimation(""); } // Token: 0x0600043B RID: 1083 RVA: 0x000614EE File Offset: 0x0005F6EE public void Reincarnate() { if (!this.npc) { Links.x.ChangePartyList(this, true, this.party); return; } Links.x.ChangeNPCList(this, true); } // Token: 0x0600043C RID: 1084 RVA: 0x00061518 File Offset: 0x0005F718 public void ResetCharacter() { this.setupComplete = false; this.outsideBounds = false; this.animID = 0; this.nodeActions.Clear(); this.nodePath.Clear(); this.vectorPath.Clear(); this.prepPath.Clear(); this.moving = false; this.swarm = false; this.inCombat = false; if (this.actions) { this.actions.EndActions(); this.actions = null; } this.hasActions = false; this.npc = true; this.dead = false; this.moveNode = null; this.movePoint = this.vectorZero; this.patrolNode = 0; this.canLeave = false; this.moveTurn = false; this.mainSelected = false; this.protagonist = false; this.mainSelected = false; this.moveTurns = 0f; this.hovering = false; if (this.mainSelected) { Debug.Log("sliding"); } this.slideNode = null; this.nextNode = null; this.prevNodePosition = this.vectorZero; this.node = null; this.nodePoint = this.vectorZero; this.targetNode = null; this.moveIndex = -1; this.missing = false; this.fleeing = false; for (int i = 0; i < this.equippedItems.Length; i++) { if (this.equippedItems[i] != null) { Object.Destroy(this.equippedItems[i]); } this.equippedItems[i] = null; } this.blockedTime = 0f; this.tempStop = false; this.setupComplete = false; this.isHit = false; this.downed = false; this.resting = false; this.doingHit = false; } // Token: 0x0600043D RID: 1085 RVA: 0x000616C8 File Offset: 0x0005F8C8 public void ReturnToPool() { if (this.bodyObj) { base.enabled = false; this.body.enabled = true; this.animator.enabled = true; this.stats.enabled = true; if (this.body) { this.body.lookAtController.SetAsActive(false); this.body.TurnOffIK(); if (this.body.headAnim) { this.body.headAnim.enabled = true; } } Links.x.archives.RecycleBody(this.bodyObj, this.bodyObj.name, base.gameObject.name); } this.bodyObj = null; if (this.dead) { Links.x.ChangeDeadList(this, false); } if (this.npc) { Links.x.ChangeNPCList(this, false); } this.ReturnPooledObjects(); if (this) { Object.Destroy(base.gameObject); } } // Token: 0x0600043E RID: 1086 RVA: 0x000617CF File Offset: 0x0005F9CF public int GetLKPCount() { return this.lkPlayer.Count; } // Token: 0x0600043F RID: 1087 RVA: 0x000617DC File Offset: 0x0005F9DC public void UpdateLKP(Character character, GraphNode position, string action, bool seen) { if (this.hasActions && this.actions.ai.findingAction) { return; } if (character == this || !character) { return; } int num = this.lkPlayer.IndexOf(character); if (num == -1) { if (seen || action == "Heard") { if (!seen) { action = "Search"; } this.lkPlayer.Add(character); this.lkPosition.Add(position); this.lkAction.Add(action); this.lkBool.Add(seen); } } else { bool flag = true; if (!seen) { if (action.Contains("Heard")) { if (this.lkBool[num]) { flag = false; } else { string text = this.lkAction[num]; if (!text.Contains("Search")) { action = "Search"; } else { action = text; } } } else { string text2 = this.lkAction[num]; if (!text2.Contains("Search")) { action = "Search"; } else { action = text2; } } } if (flag) { this.lkPosition[num] = position; this.lkAction[num] = action; this.lkBool[num] = seen; } } this.hasLKP = true; } // Token: 0x06000440 RID: 1088 RVA: 0x00061924 File Offset: 0x0005FB24 public void TransferLKP(Character source) { this.lkPlayer.Clear(); this.lkPosition.Clear(); this.lkAction.Clear(); this.lkBool.Clear(); List list = source.lkPlayer; List list2 = source.lkPosition; List list3 = source.lkAction; List list4 = source.lkBool; int count = list.Count; for (int i = 0; i < count; i++) { this.lkPlayer.Add(list[i]); this.lkPosition.Add(list2[i]); this.lkAction.Add(list3[i]); this.lkBool.Add(list4[i]); } } // Token: 0x06000441 RID: 1089 RVA: 0x000619E0 File Offset: 0x0005FBE0 public void UpdateLKPSpecial(Character character, GraphNode position, string action, bool seen) { if (this.lkPlayer.IndexOf(character) == -1) { this.lkPlayer.Add(character); this.lkPosition.Add(position); this.lkAction.Add(action); this.lkBool.Add(seen); } this.hasLKP = true; } // Token: 0x06000442 RID: 1090 RVA: 0x00061A34 File Offset: 0x0005FC34 public void RemoveLKPlayer(Character character) { int num = this.lkPlayer.IndexOf(character); if (num > -1) { this.lkPlayer.RemoveAt(num); this.lkPosition.RemoveAt(num); this.lkAction.RemoveAt(num); this.lkBool.RemoveAt(num); } } // Token: 0x06000443 RID: 1091 RVA: 0x00061A82 File Offset: 0x0005FC82 public bool HasLKPlayer(Character character) { return this.lkPlayer.IndexOf(character) != -1; } // Token: 0x06000444 RID: 1092 RVA: 0x00061A98 File Offset: 0x0005FC98 public bool GetLKPlayerBool(Character character) { int num = this.lkPlayer.IndexOf(character); return num != -1 && this.lkBool[num]; } // Token: 0x06000445 RID: 1093 RVA: 0x00061AC4 File Offset: 0x0005FCC4 public Character GetNearestPartyLKP(Vector3 pt) { float num = float.PositiveInfinity; Character character = null; for (int i = 0; i < this.lkPlayer.Count; i++) { if (this.lkPlayer[i].party && !this.lkPlayer[i].stunned && !this.lkPlayer[i].dead) { float sqrMagnitude = (this.lkPlayer[i].tr.position - pt).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; character = this.lkPlayer[i]; } } } return character; } // Token: 0x06000446 RID: 1094 RVA: 0x00061B68 File Offset: 0x0005FD68 public bool HasSomeoneInSight() { for (int i = 0; i < this.lkPlayer.Count; i++) { if (!this.lkPlayer[i].npc && !this.lkPlayer[i].stunned && !this.lkPlayer[i].dead && this.lkBool[i]) { return true; } } return false; } // Token: 0x06000447 RID: 1095 RVA: 0x00061BD8 File Offset: 0x0005FDD8 public bool HasPartyLKP() { for (int i = 0; i < this.lkPlayer.Count; i++) { if (this.lkPlayer[i].party && !this.lkPlayer[i].stunned && !this.lkPlayer[i].dead) { return true; } } return false; } // Token: 0x06000448 RID: 1096 RVA: 0x00061C37 File Offset: 0x0005FE37 public void ClearLKP() { this.hasLKP = false; this.lkAction.Clear(); this.lkPosition.Clear(); this.lkBool.Clear(); this.lkPlayer.Clear(); } // Token: 0x06000449 RID: 1097 RVA: 0x00061C6C File Offset: 0x0005FE6C public bool CanSee(Character checkCharacter) { int num = this.lkPlayer.IndexOf(checkCharacter); return num > -1 && this.lkBool[num]; } // Token: 0x0600044A RID: 1098 RVA: 0x00061C98 File Offset: 0x0005FE98 public void ReturnPooledObjects() { if (this.sleeping) { this.sleeping = false; this.RemoveEffect(40, "", true); } if (this.splash) { Links.x.cellar.ReturnPooledGameObject(141, this.splash); this.splash = null; } if (this.quip) { this.quip.gameObject.SetActive(false); this.quip.EndFinal(); this.quip = null; } if (this.stunGauge) { this.stunGauge.gameObject.SetActive(false); this.stunGauge = null; } if (this.dazedGauge) { this.dazedGauge.gameObject.SetActive(false); this.dazedGauge = null; } if (this.waypoint) { this.waypoint.gameObject.SetActive(false); this.waypoint = null; } if (this.heart) { Links.x.cellar.ReturnPooledGameObject(66, this.heart); this.heart = null; } if (this.dodgeFX) { Links.x.cellar.ReturnPooledGameObject(91, this.dodgeFX); this.dodgeFX = null; } if (this.dazed) { Links.x.cellar.ReturnPooledGameObject(100, this.dazed.transform.parent.gameObject); this.dazed = null; } this.ReturnHealthBar(); this.ReturnStaminaBar(); if (this.grassInteraction) { Links.x.cellar.ReturnPooledGameObject(89, this.grassInteraction.gameObject); this.grassInteraction = null; } if (this.bracket) { Links.x.cellar.ReturnPooledGameObject(61, this.bracket); } if (this.stats.boro && this.boroBoat) { Links.x.cellar.ReturnPooledGameObject(136, this.boroBoat); this.boroBoat = null; } if (this.dockFriend) { this.dockFriend.Remove(); this.dockFriend = null; } if (this.moveFollow) { Links.x.cellar.ReturnEmptyPoint(this.moveFollow.gameObject); this.moveFollow = null; } if (this.sphere) { Links.x.cellar.ReturnEmptyPoint(this.sphere); this.sphere = null; } if (this.lookAtTurnTarget) { Links.x.cellar.ReturnEmptyPoint(this.lookAtTurnTarget.gameObject); this.lookAtTurnTarget = null; } if (this.heard) { Links.x.cellar.ReturnPooledGameObject(22, this.heard); this.heard.SetActive(false); this.heard = null; } if (this.seen) { Links.x.cellar.ReturnPooledGameObject(23, this.seen); this.seen.SetActive(false); this.seen = null; } if (this.oar) { Links.x.cellar.ReturnPooledGameObject(137, this.oar); this.oar = null; } this.EndQuip(); } // Token: 0x0600044B RID: 1099 RVA: 0x00062000 File Offset: 0x00060200 public void UpdateArrowColor() { int num = this.partyColorID; if (this.hoverWaypointRenderer) { this.hoverWaypointRenderer.sharedMaterial = Links.x.GetPartyMaterial(num, 4); this.waypointRenderer.sharedMaterial = Links.x.GetPartyMaterial(num, 4); } } // Token: 0x0600044C RID: 1100 RVA: 0x0006204F File Offset: 0x0006024F public void ClearQuips() { this.hasCinematicQuip = false; } // Token: 0x0600044D RID: 1101 RVA: 0x00062058 File Offset: 0x00060258 public void FindQuip() { if (this.hasCinematicQuip && !Records.x.dialogue && !Records.x.removeControls) { bool flag = false; if (this.stats.xmlName.Contains("Fairy")) { flag = true; } bool flag2 = true; if (Time.timeSinceLevelLoad < this.lastIdleQuipTime) { return; } if (Time.timeSinceLevelLoad < Records.x.lastQuipTime + 3f && !flag) { return; } if ((Random.Range(0, 200) > 0 && !flag) || this.quip) { flag2 = false; } if (this.hasActions) { flag2 = false; } if (flag2) { Records.x.lastQuipTime = Time.timeSinceLevelLoad; this.lastIdleQuipTime = Time.timeSinceLevelLoad + Random.Range(10f, 25f); if (flag) { this.lastIdleQuipTime = Time.timeSinceLevelLoad + Random.Range(15f, 20f); } string text = "Idle"; if (this.inCombat) { text = "Combat"; } string text2 = Links.x.quips.GetQuip(text, this.quipIndex); this.StartQuip(text2); } } } // Token: 0x0600044E RID: 1102 RVA: 0x00062180 File Offset: 0x00060380 public GameObject AddEffect(int num, string extra) { int num2 = -1; for (int i = 0; i < this.headEffectsID.Count; i++) { if (num == this.headEffectsID[i] && extra == this.headEffectsExtras[i]) { num2 = i; break; } } if (num2 == -1) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(num); if (pooledGameObject) { pooledGameObject.transform.position = this.neck.position + new Vector3(0f, 1.5f, 0f); pooledGameObject.transform.parent = this.tr; pooledGameObject.SetActive(true); this.headEffectsID.Add(num); this.headEffectsExtras.Add(extra); this.headEffects.Add(pooledGameObject); this.currentEffect = this.headEffects.Count - 2; this.RotateEffects(); if (num == 85) { Links.x.cameraEffects.AddRemoveGhost(pooledGameObject.transform.GetChild(0).gameObject.GetComponent(), true); } } return pooledGameObject; } int count = this.headEffects.Count; return null; } // Token: 0x0600044F RID: 1103 RVA: 0x000622B0 File Offset: 0x000604B0 public void RemoveEffect(int num, string extra, bool returnIt) { int num2 = -1; for (int i = 0; i < this.headEffectsID.Count; i++) { if (num == this.headEffectsID[i] && extra == this.headEffectsExtras[i]) { num2 = i; break; } } if (num2 > -1) { if (num == 85 && this.headEffects[num2]) { Links.x.cameraEffects.AddRemoveGhost(this.headEffects[num2].transform.GetChild(0).gameObject.GetComponent(), false); } if (returnIt && this.headEffects[num2]) { Links.x.cellar.ReturnPooledGameObject(num, this.headEffects[num2]); } this.headEffectsID.RemoveAt(num2); this.headEffects.RemoveAt(num2); this.headEffectsExtras.RemoveAt(num2); this.RotateEffects(); } } // Token: 0x06000450 RID: 1104 RVA: 0x000623A8 File Offset: 0x000605A8 public void RotateEffects() { this.currentEffect++; if (this.currentEffect > this.headEffects.Count - 1) { this.currentEffect = 0; } if (this.seen || this.heard) { this.currentEffect = -1; } for (int i = 0; i < this.headEffects.Count; i++) { if (this.headEffectsID[i] == 44 && !this.headEffects[i].activeSelf) { this.headEffects[i].SetActive(true); } } this.currentEffectTime = Time.realtimeSinceStartup; } // Token: 0x06000451 RID: 1105 RVA: 0x00062458 File Offset: 0x00060658 public void PositionEffects() { for (int i = 0; i < this.headEffects.Count; i++) { if (this.headEffects[i]) { int num = this.headEffectsID[i]; if (num == 46 || num == 48) { this.headEffects[i].transform.position = this.tr.position + new Vector3(0f, 0.1f, 0f); } else if (num != 43) { if (num == 44 || num == 85) { Vector3 eulerAngles = Quaternion.LookRotation(Links.x.worldCamera.transform.position - this.currentPosition).eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; this.headEffects[i].transform.position = this.body.GetHead().position + new Vector3(0f, 0.3f, 0f) + Quaternion.Euler(eulerAngles) * Vector3.forward * 0.4f; this.headEffects[i].transform.rotation = Quaternion.Euler(eulerAngles); } else if (!this.IsSentient()) { if (num == 40) { Vector3 eulerAngles2 = Quaternion.LookRotation(Links.x.worldCamera.transform.position - this.currentPosition).eulerAngles; eulerAngles2.x = 0f; eulerAngles2.z = 0f; this.headEffects[i].transform.position = this.body.GetHead().position + new Vector3(0f, 1f, 0f) + Quaternion.Euler(eulerAngles2) * Vector3.forward * 0.4f; this.headEffects[i].transform.rotation = Quaternion.Euler(eulerAngles2); } else { this.headEffects[i].transform.position = this.body.GetHead().position + new Vector3(0f, 1f, 0f); } } else if (this.neck == this.tr || this.neck == this.body.tr) { float num2 = this.characterHeight; if (this.npc && this.hasActions) { num2 += 0.25f; } this.headEffects[i].transform.position = this.tr.position + new Vector3(0f, num2, 0f); } else { float num3 = 1.5f; if (this.npc && this.hasActions) { num3 += 0.25f; } if (this.npc && this.stats.pinning) { num3 += 0.5f; } this.headEffects[i].transform.position = this.neck.position + new Vector3(0f, num3, 0f); } } } } } // Token: 0x06000452 RID: 1106 RVA: 0x000627E4 File Offset: 0x000609E4 public Vector3 SubtractVectors(Vector3 a, Vector3 b) { Vector3 vector; vector.x = a.x - b.x; vector.y = a.y - b.y; vector.z = a.z - b.z; return vector; } // Token: 0x06000453 RID: 1107 RVA: 0x00062830 File Offset: 0x00060A30 public Vector3 AddVectors(Vector3 a, Vector3 b) { Vector3 vector; vector.x = a.x + b.x; vector.y = a.y + b.y; vector.z = a.z + b.z; return vector; } // Token: 0x06000454 RID: 1108 RVA: 0x0006287C File Offset: 0x00060A7C public Vector3 AddVectorY(Vector3 a, float b) { Vector3 vector; vector.x = a.x; vector.y = a.y + b; vector.z = a.z; return vector; } // Token: 0x06000455 RID: 1109 RVA: 0x000628B4 File Offset: 0x00060AB4 public float AngleDir(Vector3 fwd, Vector3 targetDir, Vector3 up) { float num = Vector3.Dot(Vector3.Cross(fwd, targetDir), up); if (num > 0f) { return 1f; } if (num <= 0f) { return -1f; } return 1f; } // Token: 0x06000456 RID: 1110 RVA: 0x000628F0 File Offset: 0x00060AF0 public Vector3 CustomNormalize(Vector3 v) { double num = Math.Sqrt((double)(v.x * v.x + v.y * v.y + v.z * v.z)); if (num > 9.99999974737875E-06) { float num2 = (float)num; v.x /= num2; v.y /= num2; v.z /= num2; return v; } return this.vectorZero; } // Token: 0x06000457 RID: 1111 RVA: 0x00062968 File Offset: 0x00060B68 public GameObject CreateSphere(Vector3 position, float size) { GameObject gameObject = GameObject.CreatePrimitive(PrimitiveType.Sphere); gameObject.transform.parent = Links.x.gameplay.transform; gameObject.transform.position = position; gameObject.transform.localScale = new Vector3(size, size, size); Object.Destroy(gameObject.GetComponent()); gameObject.layer = 2; return gameObject; } // Token: 0x06000458 RID: 1112 RVA: 0x000629C8 File Offset: 0x00060BC8 public float AttackRange() { float num = this.invRow1._MeleeRangeEnd; if (this.hasActions && this.actions.hasPowerDraw) { num += 30f; } return num * Records.x.nodeSize + this.attackRadius + Records.x.nodeSize / 2f; } // Token: 0x06000459 RID: 1113 RVA: 0x00062A24 File Offset: 0x00060C24 public bool InAttackShape(Character target, Vector3 targetPosition, Character attacker, Vector3 attackerPosition, Vector3 checkPosition, Library.Inventory row) { float num = attacker.stats.MultiHitMod(); if (attacker.stats.HandCount() > 1f) { if (target != this) { float num2 = (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius) * (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius); if ((attackerPosition - checkPosition).sqrMagnitude < num2) { float num3 = 80f; Vector3 vector = Quaternion.LookRotation(targetPosition - new Vector3(attackerPosition.x, targetPosition.y, attackerPosition.z)) * Vector3.forward; float num4 = Vector3.Angle(this.SubtractVectors(checkPosition, new Vector3(attackerPosition.x, checkPosition.y, attackerPosition.z)), vector); float num5 = num3 + num / 10f; if (num4 <= num5 && num4 >= num5 * -1f) { return true; } } } return false; } if (row._MainSkill == "Pole") { if (target != this) { float num6 = (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + 5f + num / 10f) * (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + 5f + num / 10f); if ((attackerPosition - checkPosition).sqrMagnitude < num6) { float num7 = 15f; Vector3 vector2 = Quaternion.LookRotation(targetPosition - new Vector3(attackerPosition.x, targetPosition.y, attackerPosition.z)) * Vector3.forward; float num8 = Vector3.Angle(this.SubtractVectors(checkPosition, new Vector3(attackerPosition.x, checkPosition.y, attackerPosition.z)), vector2); float num9 = num7 + num / 10f; if (num8 <= num9 && num8 >= num9 * -1f) { return true; } } } return false; } if (row._MainSkill == "Sword") { if (target != this) { float num10 = (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + 2.5f) * (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + 2.5f); if ((attackerPosition - checkPosition).sqrMagnitude < num10) { float num11 = 40f; Vector3 vector3 = Quaternion.LookRotation(targetPosition - new Vector3(attackerPosition.x, targetPosition.y, attackerPosition.z)) * Vector3.forward; float num12 = Vector3.Angle(this.SubtractVectors(checkPosition, new Vector3(attackerPosition.x, checkPosition.y, attackerPosition.z)), vector3); float num13 = num11 + num / 10f; if (num12 <= num13 && num12 >= num13 * -1f) { return true; } } } return false; } if (row._MainSkill == "Bow") { return false; } if (row._MainSkill == "Elixir" && Links.x.combat.inPocketAttack) { if (target != this) { float num14 = (5f + num / 10f) * (5f + num / 10f); if ((targetPosition - checkPosition).sqrMagnitude < num14) { return true; } } return false; } if (row._MainSkill == "Sling" && Links.x.combat.inPocketAttack) { if (target != this) { float num15 = (5f + num / 10f) * (5f + num / 10f); if ((targetPosition - checkPosition).sqrMagnitude < num15) { return true; } } return false; } if (row._MainSkill == "ShortSword" || row._MainSkill == "Ax" || row._MainSkill == "Hand-to-Hand") { if (target != this) { bool flag = false; if (row._Name.Contains("Dagger") || row._Name.Contains("Awl") || row._Name.Contains("Knife")) { flag = true; } float num16 = 0f; if (flag) { num16 = Mathf.Round(num / 10f); } float num17 = (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + num16) * (row._MeleeRangeEnd * Records.x.nodeSize + attacker.attackRadius + this.attackRadius + num16); if ((attackerPosition - checkPosition).sqrMagnitude < num17) { float num18 = 60f; Vector3 vector4 = Quaternion.LookRotation(targetPosition - new Vector3(attackerPosition.x, targetPosition.y, attackerPosition.z)) * Vector3.forward; float num19 = Vector3.Angle(this.SubtractVectors(checkPosition, new Vector3(attackerPosition.x, checkPosition.y, attackerPosition.z)), vector4); float num20 = num18 + num / 10f; if (num19 <= num20 && num19 >= num20 * -1f) { return true; } } } return false; } if (row._MainSkill == "Scepter") { if (target != this) { float num21 = (3f + num / 10f) * (3f + num / 10f); if ((attackerPosition + Quaternion.LookRotation(targetPosition - attackerPosition) * Vector3.forward * 2f - checkPosition).sqrMagnitude < num21) { return true; } } return false; } if (row._MainSkill == "Whip") { if (target != this) { float num22 = (4f + num / 10f) * (4f + num / 10f); if ((attackerPosition + Quaternion.LookRotation(targetPosition - attackerPosition) * Vector3.forward * 4f - checkPosition).sqrMagnitude < num22) { return true; } } return false; } return false; } // Token: 0x0600045A RID: 1114 RVA: 0x00063098 File Offset: 0x00061298 public void GetAttackShapeCone(Vector3 targetPosition, Library.Inventory row, out Vector3 conePosition, out Quaternion coneRotation, out float coneAngle, out float coneDistance, out float sphereRadius) { conePosition = Vector3.zero; coneRotation = Quaternion.LookRotation(targetPosition - new Vector3(this.currentPosition.x, targetPosition.y, this.currentPosition.z)); coneAngle = 45f; coneDistance = 2f; sphereRadius = 0f; float num = this.stats.MultiHitMod(); if (this.stats.HandCount() > 1f) { conePosition = this.currentPosition; coneAngle = (80f + num / 10f) * 2f; coneDistance = this.attackRadius * 2f + row._MeleeRangeEnd * Records.x.nodeSize; return; } if (row._MainSkill == "Pole") { conePosition = this.currentPosition; coneAngle = (15f + num / 10f) * 2f; coneDistance = this.attackRadius * 2f + row._MeleeRangeEnd * Records.x.nodeSize + num / 10f + 5f; } if (row._MainSkill == "Sword") { conePosition = this.currentPosition; coneAngle = (40f + num / 10f) * 2f; coneDistance = this.attackRadius * 2f + row._MeleeRangeEnd * Records.x.nodeSize + 2.5f; } if (row._MainSkill == "Bow") { conePosition = Vector3.zero; } if (row._MainSkill == "Elixir") { if (!Links.x.combat.inPocketAttack) { conePosition = Vector3.zero; } else { conePosition = targetPosition; coneAngle = 360f; sphereRadius = 5f + num / 10f; coneDistance = 0f; } } if (row._MainSkill == "Sling") { if (!Links.x.combat.inPocketAttack) { conePosition = Vector3.zero; } else { conePosition = targetPosition; coneAngle = 360f; sphereRadius = 5f + num / 10f; coneDistance = 0f; } } if (row._MainSkill == "ShortSword" || row._MainSkill == "Ax" || row._MainSkill == "Hand-to-Hand") { bool flag = false; if (row._Name.Contains("Dagger") || row._Name.Contains("Awl") || row._Name.Contains("Knife")) { flag = true; } if (!flag) { conePosition = this.currentPosition; coneAngle = (60f + num / 10f) * 2f; coneDistance = this.attackRadius * 2f + row._MeleeRangeEnd * Records.x.nodeSize; } else { conePosition = this.currentPosition; coneAngle = 360f; sphereRadius = this.attackRadius * 2f + row._MeleeRangeEnd * Records.x.nodeSize + num / 10f; coneDistance = 0f; } } if (row._MainSkill == "Scepter") { Vector3 vector = this.currentPosition + Quaternion.LookRotation(targetPosition - this.currentPosition) * Vector3.forward * 2f; conePosition = vector; coneAngle = 360f; sphereRadius = 3f + num / 10f; coneDistance = 0f; } if (row._MainSkill == "Whip") { Vector3 vector2 = this.currentPosition + Quaternion.LookRotation(targetPosition - this.currentPosition) * Vector3.forward * 4f; conePosition = vector2; coneAngle = 360f; sphereRadius = 4f + num / 10f; coneDistance = 0f; } } // Token: 0x0600045B RID: 1115 RVA: 0x000634BA File Offset: 0x000616BA public int GetArcPoints() { return this.arcPoints.Count; } // Token: 0x0600045C RID: 1116 RVA: 0x000634C8 File Offset: 0x000616C8 public void DrawArc(Vector3 arcEndPosition, int traj) { this.arcTarget = arcEndPosition; if (this.isHitFlying) { this.arcTarget = arcEndPosition + Quaternion.LookRotation(this.tr.position - arcEndPosition) * Vector3.forward * 3f; } this.arcPoints.Clear(); Vector3 position = this.tr.position; this.trajectoryModifier = 1; this.initialVelocity = (float)traj; Quaternion quaternion = this.GetBearing(position, this.arcTarget); this.moveFollow.rotation = quaternion; this.CalculateTrajectory(position, 0); if (traj == 0 && !this.isHitFlying && !this.ambushing && this.evading && Mathf.Abs(arcEndPosition.y - position.y) < 2f) { int num = this.arcPoints.Count - 1; float num2 = Vector3.Distance(position, arcEndPosition); for (int i = 0; i < this.arcPoints.Count; i++) { if (i != num) { Vector3 vector = this.arcPoints[i]; Vector3 vector2 = vector; vector2.y = position.y; float num3 = Vector3.Distance(position, vector2); Vector3 vector3 = Vector3.Lerp(position, arcEndPosition, num3 / num2); float num4 = vector.y - vector3.y; num4 /= 2f; num4 += vector3.y; this.arcPoints[i] = new Vector3(vector.x, num4, vector.z); } } } if (this.isHitFlying && this.arcPoints.Count > 3 && Random.Range(0, 3) == 0) { position = this.arcTarget; this.arcTarget = arcEndPosition; this.trajectoryModifier = 1; this.initialVelocity = 0f; quaternion = this.GetBearing(position, this.arcTarget); this.moveFollow.rotation = quaternion; this.CalculateTrajectory(position, 1); } this.moveFollow.rotation = Quaternion.identity; } // Token: 0x0600045D RID: 1117 RVA: 0x000636D8 File Offset: 0x000618D8 public Quaternion GetBearing(Vector3 start, Vector3 targetPt) { this.bearing = Quaternion.Euler(Vector3.zero); Vector3 vector = targetPt - start; float num = Mathf.Sqrt(Mathf.Pow(vector.x, 2f) + Mathf.Pow(vector.z, 2f)); float num2 = -vector.y; float num3 = this.gravity * (this.gravity * Mathf.Pow(num, 2f) + 2f * num2 * Mathf.Pow(this.initialVelocity, 2f)); float num4 = Mathf.Sqrt(Mathf.Pow(this.initialVelocity, 4f) - num3); bool flag = float.IsNaN(num4); if (!flag) { float num5 = (Mathf.Pow(this.initialVelocity, 2f) + (float)this.trajectoryModifier * num4) / (this.gravity * num); float num6 = 57.29578f * Mathf.Atan(num5); this.bearing = Quaternion.LookRotation(vector); Vector3 eulerAngles = this.bearing.eulerAngles; eulerAngles.x = num6; this.bearing.eulerAngles = eulerAngles; } if (flag) { this.initialVelocity += 1f; this.GetBearing(start, targetPt); } return this.bearing; } // Token: 0x0600045E RID: 1118 RVA: 0x0006380C File Offset: 0x00061A0C public RaycastHit CalculateTrajectory(Vector3 start, int x) { RaycastHit raycastHit = default(RaycastHit); float num = -(1f / this.trajectoryPrecision); bool flag = false; for (int i = 0; i < this.maximumIterations; i++) { if (!flag) { num += 1f / this.trajectoryPrecision; Vector3 vector = start + this.moveFollow.forward * this.initialVelocity * num + 0.5f * this.gravity2 * Mathf.Pow(num, 2f); if ((vector - this.arcTarget).sqrMagnitude < 0.25f) { flag = true; this.prevPos = vector; } this.arcPoints.Add(vector); } } this.arcPoints.Add(this.arcTarget); float num2 = -100000f; if (x == 0) { for (int j = 0; j < this.arcPoints.Count; j++) { if (this.arcPoints[j].y > num2) { this.topJumpPoint = this.arcPoints[j]; num2 = this.topJumpPoint.y; } } } return raycastHit; } // Token: 0x04000526 RID: 1318 [Header("SETTINGS")] public string workingName; // Token: 0x04000527 RID: 1319 public string animationPrefix; // Token: 0x04000528 RID: 1320 public string doorID; // Token: 0x04000529 RID: 1321 public string lastDoorID; // Token: 0x0400052A RID: 1322 public string terrain; // Token: 0x0400052B RID: 1323 public bool protagonist; // Token: 0x0400052C RID: 1324 public bool mainSelected; // Token: 0x0400052D RID: 1325 public bool missing; // Token: 0x0400052E RID: 1326 public bool npc; // Token: 0x0400052F RID: 1327 public bool dead; // Token: 0x04000530 RID: 1328 public bool stunned; // Token: 0x04000531 RID: 1329 public bool swarm; // Token: 0x04000532 RID: 1330 public bool canLeave; // Token: 0x04000533 RID: 1331 public bool party; // Token: 0x04000534 RID: 1332 public bool inCombat; // Token: 0x04000535 RID: 1333 public bool doingHit; // Token: 0x04000536 RID: 1334 public bool hovering; // Token: 0x04000537 RID: 1335 public bool isHit; // Token: 0x04000538 RID: 1336 public bool isHitFlying; // Token: 0x04000539 RID: 1337 public bool downed; // Token: 0x0400053A RID: 1338 public bool resting; // Token: 0x0400053B RID: 1339 public bool sleeping; // Token: 0x0400053C RID: 1340 public bool hasCinematicQuip; // Token: 0x0400053D RID: 1341 public bool running; // Token: 0x0400053E RID: 1342 public bool inactive; // Token: 0x0400053F RID: 1343 public bool deadInactive; // Token: 0x04000540 RID: 1344 public bool alwaysOn; // Token: 0x04000541 RID: 1345 public bool stuckInPlace; // Token: 0x04000542 RID: 1346 public bool cannotAttack; // Token: 0x04000543 RID: 1347 public bool useGrounder; // Token: 0x04000544 RID: 1348 public bool centerOfAttention; // Token: 0x04000545 RID: 1349 public bool isTarget; // Token: 0x04000546 RID: 1350 public bool summoned; // Token: 0x04000547 RID: 1351 public bool pipeSummons; // Token: 0x04000548 RID: 1352 public bool charmed; // Token: 0x04000549 RID: 1353 public bool actionPicked; // Token: 0x0400054A RID: 1354 public bool selected; // Token: 0x0400054B RID: 1355 public bool inAction; // Token: 0x0400054C RID: 1356 public bool inRecovery; // Token: 0x0400054D RID: 1357 public bool inQueuedAbility; // Token: 0x0400054E RID: 1358 public bool offMap; // Token: 0x0400054F RID: 1359 public bool changingMaps; // Token: 0x04000550 RID: 1360 public bool changingTeleports; // Token: 0x04000551 RID: 1361 public bool waitingToUseItem; // Token: 0x04000552 RID: 1362 public bool dayNightVanishing; // Token: 0x04000553 RID: 1363 public bool ghostVanishing; // Token: 0x04000554 RID: 1364 public bool vanished; // Token: 0x04000555 RID: 1365 public bool sailing; // Token: 0x04000556 RID: 1366 public bool boatNavigator; // Token: 0x04000557 RID: 1367 public bool alwaysJump; // Token: 0x04000558 RID: 1368 public bool isBoro; // Token: 0x04000559 RID: 1369 public bool ignoreNodeIDs; // Token: 0x0400055A RID: 1370 public bool interactiveObject; // Token: 0x0400055B RID: 1371 public bool selectedBeforeDoor; // Token: 0x0400055C RID: 1372 public bool ghost; // Token: 0x0400055D RID: 1373 public bool hasIncenseTorch; // Token: 0x0400055E RID: 1374 public bool leashed; // Token: 0x0400055F RID: 1375 public bool deactivating; // Token: 0x04000560 RID: 1376 public bool dodging; // Token: 0x04000561 RID: 1377 public bool hasTorch; // Token: 0x04000562 RID: 1378 public bool pocketPaused; // Token: 0x04000563 RID: 1379 public bool jumpingAreas; // Token: 0x04000564 RID: 1380 public bool jumpedAreas; // Token: 0x04000565 RID: 1381 public bool inTown; // Token: 0x04000566 RID: 1382 public bool ambushing; // Token: 0x04000567 RID: 1383 public bool movingAreas; // Token: 0x04000568 RID: 1384 public bool attackingUntilBribe; // Token: 0x04000569 RID: 1385 public bool meshAlwaysOn; // Token: 0x0400056A RID: 1386 public bool meshAlwaysOff; // Token: 0x0400056B RID: 1387 public bool enraged; // Token: 0x0400056C RID: 1388 public bool wasStunned; // Token: 0x0400056D RID: 1389 public bool droppedItems; // Token: 0x0400056E RID: 1390 public bool moveBackward; // Token: 0x0400056F RID: 1391 public bool evading; // Token: 0x04000570 RID: 1392 public bool charging; // Token: 0x04000571 RID: 1393 public bool vipFollow; // Token: 0x04000572 RID: 1394 public bool inFriendGroup; // Token: 0x04000573 RID: 1395 public bool isFriendGroupLeader; // Token: 0x04000574 RID: 1396 public bool movesOnWater; // Token: 0x04000575 RID: 1397 public bool hasCreatureBuff; // Token: 0x04000576 RID: 1398 public bool inCircle; // Token: 0x04000577 RID: 1399 public bool hasCircleBuff; // Token: 0x04000578 RID: 1400 public bool protectMe; // Token: 0x04000579 RID: 1401 public bool listenForPhysicsEnd; // Token: 0x0400057A RID: 1402 public bool pocketPausedOverride; // Token: 0x0400057B RID: 1403 public bool willBeHostile; // Token: 0x0400057C RID: 1404 public bool alwaysLookAtParty; // Token: 0x0400057D RID: 1405 public bool isHostage; // Token: 0x0400057E RID: 1406 public bool inSporeForest; // Token: 0x0400057F RID: 1407 public int visible; // Token: 0x04000580 RID: 1408 public int nodeMovingID; // Token: 0x04000581 RID: 1409 public int nodeStationaryID; // Token: 0x04000582 RID: 1410 public int hostility; // Token: 0x04000583 RID: 1411 public int koCount; // Token: 0x04000584 RID: 1412 public int moveAnimID; // Token: 0x04000585 RID: 1413 public int patrolNode; // Token: 0x04000586 RID: 1414 public int combatLevel; // Token: 0x04000587 RID: 1415 public int quipSound; // Token: 0x04000588 RID: 1416 public int quipIndex; // Token: 0x04000589 RID: 1417 public int partyColorID; // Token: 0x0400058A RID: 1418 public int tilesMoved; // Token: 0x0400058B RID: 1419 public int desiredGraph; // Token: 0x0400058C RID: 1420 public int selectedAmmoIndex; // Token: 0x0400058D RID: 1421 public int selectedWpnIndex; // Token: 0x0400058E RID: 1422 public int currentDoor; // Token: 0x0400058F RID: 1423 public int startFleeArea; // Token: 0x04000590 RID: 1424 public float distanceToParty; // Token: 0x04000591 RID: 1425 public float knockback; // Token: 0x04000592 RID: 1426 public float timeOfDeath; // Token: 0x04000593 RID: 1427 public float leashDistance; // Token: 0x04000594 RID: 1428 public float numberOfTimesKilled; // Token: 0x04000595 RID: 1429 public float portraitID; // Token: 0x04000596 RID: 1430 public Quaternion circleRot; // Token: 0x04000597 RID: 1431 public float radius = 1f; // Token: 0x04000598 RID: 1432 public float currentAnimatorSpeed; // Token: 0x04000599 RID: 1433 public float fellowshipMod; // Token: 0x0400059A RID: 1434 public float attackRadius = 0.5f; // Token: 0x0400059B RID: 1435 public float characterHeight = 3f; // Token: 0x0400059C RID: 1436 private int prevAnimID; // Token: 0x0400059D RID: 1437 private bool hasLight; // Token: 0x0400059E RID: 1438 private bool needsRebind; // Token: 0x0400059F RID: 1439 private bool exploded; // Token: 0x040005A0 RID: 1440 public string indoorID = ""; // Token: 0x040005A1 RID: 1441 public string animControllerName; // Token: 0x040005A2 RID: 1442 public Vector3 currentPosition; // Token: 0x040005A3 RID: 1443 private Color32 terrainColor; // Token: 0x040005A4 RID: 1444 [Header("INVENTORY")] public int ammoCount1; // Token: 0x040005A5 RID: 1445 public Library.Inventory invRow1; // Token: 0x040005A6 RID: 1446 public Library.Inventory invRow2; // Token: 0x040005A7 RID: 1447 public Library.Inventory invRow3; // Token: 0x040005A8 RID: 1448 public Library.Inventory invRow4; // Token: 0x040005A9 RID: 1449 public Library.Inventory altInvRow1; // Token: 0x040005AA RID: 1450 public Library.Inventory altInvRow2; // Token: 0x040005AB RID: 1451 public Library.Inventory altInvRow3; // Token: 0x040005AC RID: 1452 public Library.Inventory altInvRow4; // Token: 0x040005AD RID: 1453 public List bag = new List(); // Token: 0x040005AE RID: 1454 public List bagPositions = new List(); // Token: 0x040005AF RID: 1455 public List sockets = new List(); // Token: 0x040005B0 RID: 1456 public List durability = new List(); // Token: 0x040005B1 RID: 1457 public GameObject[] equippedItems = new GameObject[19]; // Token: 0x040005B2 RID: 1458 private List tempBagID; // Token: 0x040005B3 RID: 1459 private List tempBagItems; // Token: 0x040005B4 RID: 1460 private List tempBagAmoumt; // Token: 0x040005B5 RID: 1461 private List tempSocketA; // Token: 0x040005B6 RID: 1462 private List tempSocketB; // Token: 0x040005B7 RID: 1463 private List tempBagPos; // Token: 0x040005B8 RID: 1464 private List tempDurability; // Token: 0x040005B9 RID: 1465 public float inventoryTime; // Token: 0x040005BA RID: 1466 public InventoryContainer inventoryBag; // Token: 0x040005BB RID: 1467 [Header("LISTS")] public List lkPlayer = new List(); // Token: 0x040005BC RID: 1468 public List lkPosition = new List(); // Token: 0x040005BD RID: 1469 public List lkAction = new List(); // Token: 0x040005BE RID: 1470 public List lkBool = new List(); // Token: 0x040005BF RID: 1471 public bool hasLKP; // Token: 0x040005C0 RID: 1472 private List gos; // Token: 0x040005C1 RID: 1473 private Vector3[] nodeFindDirections = new Vector3[4]; // Token: 0x040005C2 RID: 1474 [Header("AI")] public Actions actions; // Token: 0x040005C3 RID: 1475 public bool hasActions; // Token: 0x040005C4 RID: 1476 public bool searching; // Token: 0x040005C5 RID: 1477 public bool noiseImmune; // Token: 0x040005C6 RID: 1478 public bool outsideDome; // Token: 0x040005C7 RID: 1479 public bool waitingToJoinDome; // Token: 0x040005C8 RID: 1480 public bool doingAction; // Token: 0x040005C9 RID: 1481 public bool waitForPathToCharacter; // Token: 0x040005CA RID: 1482 public bool moveOnTiles; // Token: 0x040005CB RID: 1483 public bool usingKeys; // Token: 0x040005CC RID: 1484 public bool overlapping; // Token: 0x040005CD RID: 1485 public bool canSwitchBackToIdle; // Token: 0x040005CE RID: 1486 public bool justMoved; // Token: 0x040005CF RID: 1487 private float knockbackMax; // Token: 0x040005D0 RID: 1488 public string anim; // Token: 0x040005D1 RID: 1489 public int animID; // Token: 0x040005D2 RID: 1490 public int walkUsed; // Token: 0x040005D3 RID: 1491 public int currentTargetIndex; // Token: 0x040005D4 RID: 1492 private Vector3 targetPosition; // Token: 0x040005D5 RID: 1493 private Vector3 lastFatiguePosition; // Token: 0x040005D6 RID: 1494 public float actionNumber; // Token: 0x040005D7 RID: 1495 public GraphNode savedFollowNode; // Token: 0x040005D8 RID: 1496 private float at; // Token: 0x040005D9 RID: 1497 private float hitTimeReal; // Token: 0x040005DA RID: 1498 private float timeSinceLastMove; // Token: 0x040005DB RID: 1499 private float currentAttackSpeed; // Token: 0x040005DC RID: 1500 public float attackTime; // Token: 0x040005DD RID: 1501 public float hitTime; // Token: 0x040005DE RID: 1502 public Character orbitTarget; // Token: 0x040005DF RID: 1503 [Header("PHYSICS")] public bool physicsMove; // Token: 0x040005E0 RID: 1504 public float movingOutOfWayTime; // Token: 0x040005E1 RID: 1505 public bool turningMain; // Token: 0x040005E2 RID: 1506 public bool hittingWall; // Token: 0x040005E3 RID: 1507 private Quaternion lastRotation; // Token: 0x040005E4 RID: 1508 private Vector3 prevMoveSpeed; // Token: 0x040005E5 RID: 1509 private float rbMaxSpeed; // Token: 0x040005E6 RID: 1510 public Vector3 mainMovePoint; // Token: 0x040005E7 RID: 1511 public Vector3 groundPoint; // Token: 0x040005E8 RID: 1512 public CharacterController cc; // Token: 0x040005E9 RID: 1513 public Vector3 physicsY; // Token: 0x040005EA RID: 1514 public PlayerBorders playerBorders; // Token: 0x040005EB RID: 1515 private Vector3 lastFrame; // Token: 0x040005EC RID: 1516 public bool jumpingPosition; // Token: 0x040005ED RID: 1517 private float lastFrameTime; // Token: 0x040005EE RID: 1518 private float jumpPositionTime; // Token: 0x040005EF RID: 1519 private float previouslyMovingStartTime; // Token: 0x040005F0 RID: 1520 private Vector3 jumpPositionVector; // Token: 0x040005F1 RID: 1521 private bool needToEndJump; // Token: 0x040005F2 RID: 1522 [Header("PATHFINDING")] public Vector3 nodePoint; // Token: 0x040005F3 RID: 1523 public Vector3 endTurn; // Token: 0x040005F4 RID: 1524 public Vector3 movePoint; // Token: 0x040005F5 RID: 1525 public Vector3 pathTargPosition; // Token: 0x040005F6 RID: 1526 public Vector3 leashCenter; // Token: 0x040005F7 RID: 1527 public Vector3 terrainNormal; // Token: 0x040005F8 RID: 1528 public Vector3 waitPosition; // Token: 0x040005F9 RID: 1529 public int waitingForPath; // Token: 0x040005FA RID: 1530 public int nextOpen; // Token: 0x040005FB RID: 1531 public int nextOpenVisual; // Token: 0x040005FC RID: 1532 public int nexOpenOverlap; // Token: 0x040005FD RID: 1533 public int pushCount; // Token: 0x040005FE RID: 1534 public int blockPathCount; // Token: 0x040005FF RID: 1535 public GraphNode node; // Token: 0x04000600 RID: 1536 public GraphNode mainNode2; // Token: 0x04000601 RID: 1537 public GraphNode mainNode3; // Token: 0x04000602 RID: 1538 public GraphNode mainNode4; // Token: 0x04000603 RID: 1539 public GraphNode moveNode; // Token: 0x04000604 RID: 1540 public GraphNode targetNode; // Token: 0x04000605 RID: 1541 public GraphNode nextNode; // Token: 0x04000606 RID: 1542 public GraphNode savedPathTarget; // Token: 0x04000607 RID: 1543 public GraphNode prevNode; // Token: 0x04000608 RID: 1544 public GraphNode returnToPoint; // Token: 0x04000609 RID: 1545 private Vector3 prevPoint; // Token: 0x0400060A RID: 1546 private Vector3 prevNodePosition; // Token: 0x0400060B RID: 1547 private Vector3 prevFollowPosition; // Token: 0x0400060C RID: 1548 private Vector3 randomRot; // Token: 0x0400060D RID: 1549 public Quaternion rot; // Token: 0x0400060E RID: 1550 public Quaternion look; // Token: 0x0400060F RID: 1551 public Quaternion smoothRot; // Token: 0x04000610 RID: 1552 public Quaternion savedRot; // Token: 0x04000611 RID: 1553 private bool rotLeft; // Token: 0x04000612 RID: 1554 private Quaternion startRot; // Token: 0x04000613 RID: 1555 private Quaternion intervalRot; // Token: 0x04000614 RID: 1556 private Quaternion jumpingAreasRotation; // Token: 0x04000615 RID: 1557 public GraphNode slideNode; // Token: 0x04000616 RID: 1558 public GraphNode lastNode; // Token: 0x04000617 RID: 1559 public GraphNode fleePoint; // Token: 0x04000618 RID: 1560 public GraphNode commandMove; // Token: 0x04000619 RID: 1561 public Vector3 slideNodePosition; // Token: 0x0400061A RID: 1562 private Character collisionCharacter; // Token: 0x0400061B RID: 1563 public Character lookTarget; // Token: 0x0400061C RID: 1564 public Character attackTarget; // Token: 0x0400061D RID: 1565 public Character moveBackTarget; // Token: 0x0400061E RID: 1566 public NNConstraint nodeConstraint; // Token: 0x0400061F RID: 1567 public NNConstraint walkConstraint; // Token: 0x04000620 RID: 1568 public bool forceNodePath; // Token: 0x04000621 RID: 1569 public bool rotateToSlope; // Token: 0x04000622 RID: 1570 public bool moving; // Token: 0x04000623 RID: 1571 public bool alwaysTurn; // Token: 0x04000624 RID: 1572 public bool turning; // Token: 0x04000625 RID: 1573 public bool tempStop; // Token: 0x04000626 RID: 1574 public bool stepReady; // Token: 0x04000627 RID: 1575 public bool doTurn; // Token: 0x04000628 RID: 1576 public bool fleeing; // Token: 0x04000629 RID: 1577 public bool fleeingAroundPoint; // Token: 0x0400062A RID: 1578 public bool prepMove; // Token: 0x0400062B RID: 1579 public bool blocked; // Token: 0x0400062C RID: 1580 public bool ignoreRemoveControls; // Token: 0x0400062D RID: 1581 public bool moveTurn; // Token: 0x0400062E RID: 1582 public bool outsideBounds; // Token: 0x0400062F RID: 1583 public bool movingOutOfWay; // Token: 0x04000630 RID: 1584 public bool moveToObject; // Token: 0x04000631 RID: 1585 public bool movingToPatrolNode; // Token: 0x04000632 RID: 1586 public bool waitingForNewPath; // Token: 0x04000633 RID: 1587 public bool jumping; // Token: 0x04000634 RID: 1588 public bool jumpLanding; // Token: 0x04000635 RID: 1589 public bool showWaypoint; // Token: 0x04000636 RID: 1590 public bool noJumpArc; // Token: 0x04000637 RID: 1591 public bool checkForLeaderPath; // Token: 0x04000638 RID: 1592 public bool changedFleeArea; // Token: 0x04000639 RID: 1593 private bool estimatedPathSave; // Token: 0x0400063A RID: 1594 private bool toDirectionSave; // Token: 0x0400063B RID: 1595 private bool startTurnExit; // Token: 0x0400063C RID: 1596 private bool startWithRotate; // Token: 0x0400063D RID: 1597 private bool turningComplete; // Token: 0x0400063E RID: 1598 private bool makePathAfterJump; // Token: 0x0400063F RID: 1599 private float ammoMessageTime; // Token: 0x04000640 RID: 1600 private float lookTargetTime; // Token: 0x04000641 RID: 1601 private float jumpTime; // Token: 0x04000642 RID: 1602 private float timeSinceLastEvade; // Token: 0x04000643 RID: 1603 private float attackTargetTime; // Token: 0x04000644 RID: 1604 private float t; // Token: 0x04000645 RID: 1605 private float intervalY; // Token: 0x04000646 RID: 1606 private float startRotY; // Token: 0x04000647 RID: 1607 private float rotationTime; // Token: 0x04000648 RID: 1608 private float seenTime; // Token: 0x04000649 RID: 1609 private float waitForPathTime; // Token: 0x0400064A RID: 1610 private float ttime; // Token: 0x0400064B RID: 1611 private float moveFollowTime; // Token: 0x0400064C RID: 1612 private float moveTurnSpeed; // Token: 0x0400064D RID: 1613 private float moveTurns; // Token: 0x0400064E RID: 1614 private float totalDist; // Token: 0x0400064F RID: 1615 private float totalDistNodes; // Token: 0x04000650 RID: 1616 private float fleeTime; // Token: 0x04000651 RID: 1617 private float fleeStartTime; // Token: 0x04000652 RID: 1618 private float returnToPointTime; // Token: 0x04000653 RID: 1619 private float turnDirection; // Token: 0x04000654 RID: 1620 private float timeSinceLastDirectiveCheck; // Token: 0x04000655 RID: 1621 private int moveCount; // Token: 0x04000656 RID: 1622 private int moveIndex; // Token: 0x04000657 RID: 1623 private int maxNodesSave; // Token: 0x04000658 RID: 1624 public int setArea = -1; // Token: 0x04000659 RID: 1625 private float jumpingAreasTime; // Token: 0x0400065A RID: 1626 private float patrolSpeed; // Token: 0x0400065B RID: 1627 private GraphNode jumpAreasNode; // Token: 0x0400065C RID: 1628 private float turnTimeStarted; // Token: 0x0400065D RID: 1629 private float waitToNextDodge; // Token: 0x0400065E RID: 1630 private float jumpSpeed; // Token: 0x0400065F RID: 1631 public float waitingForNewPathTime; // Token: 0x04000660 RID: 1632 private List prepPathTemp; // Token: 0x04000661 RID: 1633 private List prepVectorPathTemp; // Token: 0x04000662 RID: 1634 public List nodeActions = new List(); // Token: 0x04000663 RID: 1635 public List nodePath = new List(); // Token: 0x04000664 RID: 1636 public List prepPath = new List(); // Token: 0x04000665 RID: 1637 public List vectorPath = new List(); // Token: 0x04000666 RID: 1638 public List prepVectorPath = new List(); // Token: 0x04000667 RID: 1639 private List pathpointVectors; // Token: 0x04000668 RID: 1640 private List pointsTemp = new List(); // Token: 0x04000669 RID: 1641 private List nodesTemp = new List(); // Token: 0x0400066A RID: 1642 public global::Item clickedItem; // Token: 0x0400066B RID: 1643 public Character followingCharacter; // Token: 0x0400066C RID: 1644 public string followingType; // Token: 0x0400066D RID: 1645 private float followingTime; // Token: 0x0400066E RID: 1646 public GraphNode followingNode; // Token: 0x0400066F RID: 1647 public global::Item followingItem; // Token: 0x04000670 RID: 1648 public PuzzleActions followingInteractive; // Token: 0x04000671 RID: 1649 public BreakableActions followingBreakable; // Token: 0x04000672 RID: 1650 public ChestActions followingChest; // Token: 0x04000673 RID: 1651 public DoorActions followingDoor; // Token: 0x04000674 RID: 1652 public Boat followingBoat; // Token: 0x04000675 RID: 1653 public MapExitActions followingExit; // Token: 0x04000676 RID: 1654 private List tempPath; // Token: 0x04000677 RID: 1655 private List tempPath2; // Token: 0x04000678 RID: 1656 public Interact moveToInteract; // Token: 0x04000679 RID: 1657 public Transform moveFollow; // Token: 0x0400067A RID: 1658 public int pathTries; // Token: 0x0400067B RID: 1659 public int attackRadiusTries; // Token: 0x0400067C RID: 1660 private Seeker seeker; // Token: 0x0400067D RID: 1661 private SimpleSmoothModifier simpleSmoothModifier; // Token: 0x0400067E RID: 1662 private RaycastModifier raycastModifier; // Token: 0x0400067F RID: 1663 public float blockedTime; // Token: 0x04000680 RID: 1664 public float timeSinceFollowPath; // Token: 0x04000681 RID: 1665 private bool canPush = true; // Token: 0x04000682 RID: 1666 public IEnumerator pathToCharacterCoroutine; // Token: 0x04000683 RID: 1667 public IEnumerator worldUIFade; // Token: 0x04000684 RID: 1668 public float delayPath; // Token: 0x04000685 RID: 1669 public Vector3 clickedPoint; // Token: 0x04000686 RID: 1670 private NNConstraint interactConstraint = new NNConstraint(); // Token: 0x04000687 RID: 1671 private List allNodes; // Token: 0x04000688 RID: 1672 private List suitableNodes = new List(); // Token: 0x04000689 RID: 1673 private List used = new List(); // Token: 0x0400068A RID: 1674 private List bestNodes = new List(); // Token: 0x0400068B RID: 1675 private List nearNodes = new List(); // Token: 0x0400068C RID: 1676 [Header("MISC")] public bool setupComplete; // Token: 0x0400068D RID: 1677 private Vector3 vectorZero; // Token: 0x0400068E RID: 1678 private Vector3 upVector; // Token: 0x0400068F RID: 1679 private Vector3 yAdd3; // Token: 0x04000690 RID: 1680 private Vector3 yAdd2; // Token: 0x04000691 RID: 1681 private Vector3 yAdd1; // Token: 0x04000692 RID: 1682 private Vector3 headHeight; // Token: 0x04000693 RID: 1683 private Vector3 torsoHeight; // Token: 0x04000694 RID: 1684 private RaycastHit rayHit; // Token: 0x04000695 RID: 1685 public string goreType; // Token: 0x04000696 RID: 1686 public int updateCount; // Token: 0x04000697 RID: 1687 public Vector3 torsoPosition; // Token: 0x04000698 RID: 1688 public Vector3 raycastPosition; // Token: 0x04000699 RID: 1689 private float updateTime; // Token: 0x0400069A RID: 1690 private float quipStartTime; // Token: 0x0400069B RID: 1691 private float tileCheckUpdateTime; // Token: 0x0400069C RID: 1692 private float sporeTime; // Token: 0x0400069D RID: 1693 public float postHitTime; // Token: 0x0400069E RID: 1694 public float heightAdd; // Token: 0x0400069F RID: 1695 public float attackSpeed; // Token: 0x040006A0 RID: 1696 public float timeSinceMoveEnded; // Token: 0x040006A1 RID: 1697 public float patrolHoldTime; // Token: 0x040006A2 RID: 1698 public float spinTime; // Token: 0x040006A3 RID: 1699 public float timeSinceCircle; // Token: 0x040006A4 RID: 1700 private bool currentlyInDialogue; // Token: 0x040006A5 RID: 1701 private bool slowLook; // Token: 0x040006A6 RID: 1702 private bool huddleOn; // Token: 0x040006A7 RID: 1703 private bool waitingForSpinUp; // Token: 0x040006A8 RID: 1704 public IEnumerator delayPathCoroutine; // Token: 0x040006A9 RID: 1705 private float timeSinceHeardTime; // Token: 0x040006AA RID: 1706 private float collidedTime; // Token: 0x040006AB RID: 1707 private float timeSinceSeenTime; // Token: 0x040006AC RID: 1708 private float lastIdleQuipTime; // Token: 0x040006AD RID: 1709 private float attentionTime; // Token: 0x040006AE RID: 1710 private float prevAnimSpeed; // Token: 0x040006AF RID: 1711 private float prePausedSpeed; // Token: 0x040006B0 RID: 1712 private float lastExcuseTime; // Token: 0x040006B1 RID: 1713 private float kickUseTime; // Token: 0x040006B2 RID: 1714 private float soundTime; // Token: 0x040006B3 RID: 1715 private float fatigueUpdateTime; // Token: 0x040006B4 RID: 1716 private float lastGhostFleeTime; // Token: 0x040006B5 RID: 1717 private float chargeTime; // Token: 0x040006B6 RID: 1718 public int attentionCount; // Token: 0x040006B7 RID: 1719 public int waitingToUseBeltItemID; // Token: 0x040006B8 RID: 1720 public int waitingToUseBeltItemIndex; // Token: 0x040006B9 RID: 1721 public global::Item waitingToUseBagItem; // Token: 0x040006BA RID: 1722 private StringFast str = new StringFast(64); // Token: 0x040006BB RID: 1723 public int instrumentInUse; // Token: 0x040006BC RID: 1724 public bool emphasizeQuip; // Token: 0x040006BD RID: 1725 public float blockDodgeStartTime; // Token: 0x040006BE RID: 1726 private bool waitingForDodgeUp; // Token: 0x040006BF RID: 1727 public float inQueuedAbilityTime; // Token: 0x040006C0 RID: 1728 public float inActionTime; // Token: 0x040006C1 RID: 1729 public float inRecoveryTime; // Token: 0x040006C2 RID: 1730 public float dazedTime; // Token: 0x040006C3 RID: 1731 public float pickupTime; // Token: 0x040006C4 RID: 1732 public float missingTime; // Token: 0x040006C5 RID: 1733 public int dazedCount; // Token: 0x040006C6 RID: 1734 [Header("OBJECTS")] public Transform tr; // Token: 0x040006C7 RID: 1735 public GameObject sphere; // Token: 0x040006C8 RID: 1736 public GameObject waypoint; // Token: 0x040006C9 RID: 1737 public GameObject bodyObj; // Token: 0x040006CA RID: 1738 public GameObject goreObj; // Token: 0x040006CB RID: 1739 public OverHeadUI quip; // Token: 0x040006CC RID: 1740 public Boat boat; // Token: 0x040006CD RID: 1741 private Gauge stunGauge; // Token: 0x040006CE RID: 1742 private Gauge sneakGauge; // Token: 0x040006CF RID: 1743 private Gauge itemGauge; // Token: 0x040006D0 RID: 1744 private Gauge dazedGauge; // Token: 0x040006D1 RID: 1745 public Body body; // Token: 0x040006D2 RID: 1746 public Transform grassInteraction; // Token: 0x040006D3 RID: 1747 public Animator animator; // Token: 0x040006D4 RID: 1748 private Animator waypointAnimator; // Token: 0x040006D5 RID: 1749 public Stats stats; // Token: 0x040006D6 RID: 1750 public GameObject seen; // Token: 0x040006D7 RID: 1751 public GameObject heard; // Token: 0x040006D8 RID: 1752 public Portrait characterSheetPortrait; // Token: 0x040006D9 RID: 1753 public Portrait portrait; // Token: 0x040006DA RID: 1754 public DockFriend dockFriend; // Token: 0x040006DB RID: 1755 public Rigidbody rb; // Token: 0x040006DC RID: 1756 public AudioSource audioSource; // Token: 0x040006DD RID: 1757 public CreatureActions creatures; // Token: 0x040006DE RID: 1758 public TimelineIcon timelineIcon; // Token: 0x040006DF RID: 1759 public CapsuleCollider thisCollider; // Token: 0x040006E0 RID: 1760 public FOWRevealer fowRevealer; // Token: 0x040006E1 RID: 1761 public FOWRevealerInterior fowRevealerInterior; // Token: 0x040006E2 RID: 1762 public Moonlight moonlight; // Token: 0x040006E3 RID: 1763 public GameObject mapIcon; // Token: 0x040006E4 RID: 1764 public Transform lookAtTurnTarget; // Token: 0x040006E5 RID: 1765 public Animator circleAnimator; // Token: 0x040006E6 RID: 1766 public Transform circleTr; // Token: 0x040006E7 RID: 1767 private GameObject circle; // Token: 0x040006E8 RID: 1768 private List circleRenderers = new List(); // Token: 0x040006E9 RID: 1769 private MeshRenderer waypointRenderer; // Token: 0x040006EA RID: 1770 private MeshRenderer hoverWaypointRenderer; // Token: 0x040006EB RID: 1771 private bool usingCircles; // Token: 0x040006EC RID: 1772 public GameObject bracket; // Token: 0x040006ED RID: 1773 public GameObject heart; // Token: 0x040006EE RID: 1774 public Animator dazed; // Token: 0x040006EF RID: 1775 private GameObject incense; // Token: 0x040006F0 RID: 1776 public GameObject healthBar; // Token: 0x040006F1 RID: 1777 public GameObject healthBarTarget; // Token: 0x040006F2 RID: 1778 public Transform healthBarTr; // Token: 0x040006F3 RID: 1779 private Vector3 healthBarScale; // Token: 0x040006F4 RID: 1780 public GameObject staminaBar; // Token: 0x040006F5 RID: 1781 public Transform staminaBarTr; // Token: 0x040006F6 RID: 1782 private Vector3 staminaBarScale; // Token: 0x040006F7 RID: 1783 public Transform neck; // Token: 0x040006F8 RID: 1784 public List headEffects = new List(); // Token: 0x040006F9 RID: 1785 private List headEffectsID = new List(); // Token: 0x040006FA RID: 1786 private List headEffectsExtras = new List(); // Token: 0x040006FB RID: 1787 private int currentEffect; // Token: 0x040006FC RID: 1788 private float currentEffectTime; // Token: 0x040006FD RID: 1789 private GameObject dodgeFX; // Token: 0x040006FE RID: 1790 private GameObject boroBoat; // Token: 0x040006FF RID: 1791 public bool hasInfoCard; // Token: 0x04000700 RID: 1792 public Character friendLeader; // Token: 0x04000701 RID: 1793 public EnemyGroup group; // Token: 0x04000702 RID: 1794 public PuzzleActions revivalGem; // Token: 0x04000703 RID: 1795 public StatusRing statusRing; // Token: 0x04000704 RID: 1796 public Stamina stamina; // Token: 0x04000705 RID: 1797 public GameObject oar; // Token: 0x04000706 RID: 1798 public GameObject splash; // Token: 0x04000707 RID: 1799 public GameObject waterCollider; // Token: 0x04000708 RID: 1800 private Rigidbody waterColliderRigidbody; // Token: 0x04000709 RID: 1801 private WaterCollisions waterCollisions; // Token: 0x0400070A RID: 1802 [Header("ARC")] private float gravity = -9.81f; // Token: 0x0400070B RID: 1803 private float initialVelocity = 3f; // Token: 0x0400070C RID: 1804 private Quaternion bearing; // Token: 0x0400070D RID: 1805 private int trajectoryModifier = 1; // Token: 0x0400070E RID: 1806 private Vector3 projectileVelocity; // Token: 0x0400070F RID: 1807 private Vector3 arcTarget; // Token: 0x04000710 RID: 1808 private float trajectoryPrecision = 20f; // Token: 0x04000711 RID: 1809 private int maximumIterations = 50; // Token: 0x04000712 RID: 1810 private Vector3 gravity2 = new Vector3(0f, -9.81f, 0f); // Token: 0x04000713 RID: 1811 public LineRenderer lineRendererToDrawTrajectory; // Token: 0x04000714 RID: 1812 private Vector3 prevPos; // Token: 0x04000715 RID: 1813 public List arcPoints = new List(); // Token: 0x04000716 RID: 1814 public int currentArcIndex; // Token: 0x04000717 RID: 1815 private Vector3 previousPosition; // Token: 0x04000718 RID: 1816 private Vector3 topJumpPoint; // Token: 0x04000719 RID: 1817 public CollisionListener bouncer; // Token: 0x0400071A RID: 1818 private Vector3 savedBounceVel; // Token: 0x0400071B RID: 1819 private Vector3 savedBounceAngVel; }