5529 lines
146 KiB
C#
5529 lines
146 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using DarkTonic.MasterAudio;
|
|
using Pathfinding;
|
|
using PixelCrushers.DialogueSystem;
|
|
using UnityEngine;
|
|
|
|
// Token: 0x02000022 RID: 34
|
|
public class CreatureActions : MonoBehaviour
|
|
{
|
|
// Token: 0x06000509 RID: 1289 RVA: 0x0006F352 File Offset: 0x0006D552
|
|
private void Awake()
|
|
{
|
|
this.thisName = base.gameObject.name;
|
|
this.tr = base.gameObject.transform;
|
|
}
|
|
|
|
// Token: 0x0600050A RID: 1290 RVA: 0x0006F376 File Offset: 0x0006D576
|
|
public void UpdateName()
|
|
{
|
|
this.thisName = base.gameObject.name;
|
|
}
|
|
|
|
// Token: 0x0600050B RID: 1291 RVA: 0x0006F389 File Offset: 0x0006D589
|
|
private void Start()
|
|
{
|
|
}
|
|
|
|
// Token: 0x0600050C RID: 1292 RVA: 0x0006F38C File Offset: 0x0006D58C
|
|
public void SetupCreatures()
|
|
{
|
|
if (this.creatures.number == 0)
|
|
{
|
|
this.creatures.number = 1;
|
|
}
|
|
this.waitingForPrompt = false;
|
|
this.xmlName = this.creatures.characterName.ToString();
|
|
this.characterRow = Links.x.library.GetPCRowFromName(this.xmlName);
|
|
if (this.characterRow == null)
|
|
{
|
|
Debug.Log(this.xmlName + " doesn't have database row");
|
|
return;
|
|
}
|
|
this.GetMorningNightHours();
|
|
this.disappearDay = false;
|
|
this.disappearNight = false;
|
|
this.waitTime = 0f;
|
|
this.tr = base.transform;
|
|
this.questPointSwap = false;
|
|
if (this.creatures.changePointsFromQuest != Creatures.Adventures.None)
|
|
{
|
|
QuestState questState = QuestLog.GetQuestState(this.creatures.changePointsFromQuest.ToString());
|
|
QuestState questState2 = Records.x.StringToQuestState(this.creatures.changePointsFromQuestState.ToString());
|
|
if (questState == questState2)
|
|
{
|
|
this.questPointSwap = true;
|
|
}
|
|
}
|
|
Transform parent = base.gameObject.transform.parent;
|
|
if (parent && parent.gameObject != Links.x.diorama.creatures.gameObject)
|
|
{
|
|
this.inGroup = true;
|
|
}
|
|
this.GetPoints(this.questPointSwap, false);
|
|
if (this.temporary)
|
|
{
|
|
this.LoadCreatures();
|
|
}
|
|
string sceneName = Links.x.diorama.sceneName;
|
|
if (this.temporary)
|
|
{
|
|
sceneName = this.originalScene;
|
|
}
|
|
if (this.temporaryState != "" && this.temporary)
|
|
{
|
|
for (int i = 0; i < this.states.Count; i++)
|
|
{
|
|
this.states[i] = this.temporaryState;
|
|
}
|
|
}
|
|
if (this.delays != null)
|
|
{
|
|
this.waitingForDelay = true;
|
|
this.startDelayTime = Links.x.gameplay.seconds;
|
|
this.FinishSetUp();
|
|
return;
|
|
}
|
|
this.InstantiateCreatures(sceneName, this.thisName);
|
|
}
|
|
|
|
// Token: 0x0600050D RID: 1293 RVA: 0x0006F58C File Offset: 0x0006D78C
|
|
public void CheckHourRespawn()
|
|
{
|
|
if (this.CheckForAllDead())
|
|
{
|
|
bool flag = this.CanRespawn();
|
|
if (flag)
|
|
{
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
if (i < this.states.Count)
|
|
{
|
|
string text = this.states[i];
|
|
if (Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) >= this.data[i].x && flag && text != "Purgatory" && text != "Resurrected" && text != "Stunned" && text != "Fled" && !text.Contains("Dazed"))
|
|
{
|
|
text = "Respawning";
|
|
this.states[i] = "Respawning";
|
|
if (this.sailing && this.creatures.wipeOutBehavior != Creatures.wipeOutState.RespawnBoat)
|
|
{
|
|
this.sailing = false;
|
|
if (this.creatureBoat)
|
|
{
|
|
this.creatureBoat.creatureBoat.RemoveBoat();
|
|
}
|
|
this.creatureBoat.creatureBoat.leadCreature = null;
|
|
this.creatures.isCreatureGroupLeader = false;
|
|
this.creatureBoat = null;
|
|
}
|
|
if (this.sailing && this.creatureBoat && this.creatureBoat.creatureBoat)
|
|
{
|
|
this.creatureBoat.creatureBoat.NewNPC();
|
|
}
|
|
if (this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithHostileCreature || this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithPeacefulCreature || this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnBoat)
|
|
{
|
|
this.xmlName = this.creatures.afterDeathSpawns.ToString();
|
|
this.characterRow = Links.x.library.GetPCRowFromName(this.xmlName);
|
|
if (this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithPeacefulCreature)
|
|
{
|
|
this.temperaments[i] = 1;
|
|
}
|
|
else
|
|
{
|
|
this.temperaments[i] = 2;
|
|
}
|
|
}
|
|
else if (this.creatures.temperament == Creatures.temperamentState.FightsIfAttacked)
|
|
{
|
|
this.temperaments[i] = 1;
|
|
}
|
|
else
|
|
{
|
|
this.temperaments[i] = 2;
|
|
}
|
|
this.data[i] = new Vector3(0f, 0f, this.data[i].z);
|
|
this.health[i] = this.characterRow._Life;
|
|
this.InstanceCreature(i, this.thisName, false, Vector3.zero, text);
|
|
this.states[i] = "Normal";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600050E RID: 1294 RVA: 0x0006F840 File Offset: 0x0006DA40
|
|
private bool CanRespawn()
|
|
{
|
|
bool flag = false;
|
|
if (this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithHostileCreature || this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithPeacefulCreature || this.creatures.wipeOutBehavior == Creatures.wipeOutState.ResurrectTowerAfterTimePasses || this.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnBoat)
|
|
{
|
|
flag = Random.Range(0, 2) == 0 || this.sailing;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600050F RID: 1295 RVA: 0x0006F8A0 File Offset: 0x0006DAA0
|
|
private bool CheckForAllDead()
|
|
{
|
|
bool flag = false;
|
|
if (this.creatures.afterDeathSpawns != Creatures.xmlNames.None)
|
|
{
|
|
int num = 0;
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
string text = "";
|
|
if (i < this.maps.Count)
|
|
{
|
|
text = this.states[i];
|
|
}
|
|
if (text == null)
|
|
{
|
|
text = "";
|
|
}
|
|
if (text.Contains("Gone") || text.Contains("Fled") || text.Contains("Swallowed") || text.Contains("Respawning"))
|
|
{
|
|
num++;
|
|
}
|
|
}
|
|
if (num == this.creatures.number)
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x06000510 RID: 1296 RVA: 0x0006F94C File Offset: 0x0006DB4C
|
|
public void InstantiateCreatures(string scene, string objName)
|
|
{
|
|
bool flag = false;
|
|
this.CheckForAllDead();
|
|
if (this.creatures.deactivateFromQuest != Creatures.Adventures.None)
|
|
{
|
|
QuestState questState = QuestLog.GetQuestState(this.creatures.deactivateFromQuest.ToString());
|
|
string text = this.creatures.deactivateQuestState.ToString();
|
|
QuestState questState2 = Records.x.StringToQuestState(text);
|
|
if (questState == questState2 && this.creatures.deactivateQuestState != Creatures.AdventureStates.NotApplicable)
|
|
{
|
|
bool flag2 = false;
|
|
if (Records.x.HasQuestTimer(this.creatures.deactivateFromQuest.ToString(), text))
|
|
{
|
|
flag2 = true;
|
|
}
|
|
if (!flag2)
|
|
{
|
|
if (Records.x.questDebugging)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"Deactivate: ",
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
Records.x.StringToQuestState(this.creatures.deactivateQuestState.ToString()).ToString(),
|
|
" ",
|
|
questState.ToString()
|
|
}));
|
|
}
|
|
for (int i = 0; i < this.states.Count; i++)
|
|
{
|
|
this.states[i] = "Fled";
|
|
}
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
if (this.sailing && this.creatures.isCreatureGroupLeader && !Records.x.turnOffCharacters)
|
|
{
|
|
GameObject gameObject = Links.x.archives.InstantiateBoat(this.creatureBoat.boat.ToString(), Links.x.gameplay.gameObject.transform);
|
|
Vector3 vector = this.walkPointsDay[0].position;
|
|
Quaternion quaternion = this.walkPointsDay[0].rotation;
|
|
gameObject.transform.parent = null;
|
|
if (this.hasSaveFile)
|
|
{
|
|
Vector4 vector2 = this.positions[0];
|
|
vector = Vector3.zero;
|
|
vector.x = vector2.x;
|
|
vector.z = vector2.z;
|
|
vector.y = vector2.y;
|
|
float num = float.PositiveInfinity;
|
|
for (int j = 0; j < this.walkPointsDay.Count; j++)
|
|
{
|
|
Vector3 vector3 = this.walkPointsDay[j].position - vector;
|
|
float sqrMagnitude = vector3.sqrMagnitude;
|
|
if (sqrMagnitude < num)
|
|
{
|
|
num = sqrMagnitude;
|
|
quaternion = this.walkPointsDay[j].rotation;
|
|
}
|
|
}
|
|
}
|
|
this.creatureBoat.creatureBoat = gameObject.GetComponent<Boat>();
|
|
this.creatureBoat.creatureBoat.inMenu = false;
|
|
this.creatureBoat.creatureBoat.model = this.creatureBoat.boat.ToString();
|
|
this.creatureBoat.creatureBoat.NPCSetupFromLoad(vector, quaternion);
|
|
this.creatureBoat.creatureBoat.leadCreature = this;
|
|
this.creatureBoat.leadCreature = this.creatures;
|
|
gameObject.SetActive(true);
|
|
}
|
|
this.GetPointNodes();
|
|
for (int k = 0; k < this.creatures.number; k++)
|
|
{
|
|
string text2 = Links.x.diorama.sceneName;
|
|
string text3 = "";
|
|
if (k < this.maps.Count)
|
|
{
|
|
text2 = this.maps[k];
|
|
text3 = this.states[k];
|
|
}
|
|
if (text3 == null)
|
|
{
|
|
text3 = "";
|
|
}
|
|
if (text3.Contains("Resurrected") && this.health[k] <= 0 && !Links.x.diorama.mapCanResurrect)
|
|
{
|
|
text3 = "Gone";
|
|
this.states[k] = "Gone";
|
|
}
|
|
if (text3.Contains("Purgatory"))
|
|
{
|
|
if (!Links.x.diorama.mapCanResurrect)
|
|
{
|
|
text3 = "Gone";
|
|
this.states[k] = "Gone";
|
|
}
|
|
if (Mathf.Floor(Links.x.gameplay.seconds) >= this.data[k].x && Links.x.diorama.mapCanResurrect && this.LeaderAliveOrNoLeader())
|
|
{
|
|
text3 = "Resurrected";
|
|
this.states[k] = "Resurrected";
|
|
this.health[k] = 2;
|
|
string text4 = "Resurrecting ";
|
|
Vector3 vector3 = this.data[k];
|
|
Debug.Log(text4 + vector3.x.ToString() + " " + Links.x.gameplay.seconds.ToString());
|
|
}
|
|
else
|
|
{
|
|
this.health[k] = 0;
|
|
}
|
|
}
|
|
if (text3.Contains("Stunned"))
|
|
{
|
|
if (Links.x.forfeits.InForfeitsBoard(this.xmlName) || (this.xmlName.Contains("LocalGraveKeeper") && !Links.x.diorama.mapCanResurrect))
|
|
{
|
|
Debug.Log("Stun ended for " + this.xmlName + " but was turned in so setting state to gone");
|
|
text3 = "Gone";
|
|
if (k < this.states.Count)
|
|
{
|
|
this.states[k] = "Gone";
|
|
}
|
|
}
|
|
if (Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) >= this.data[k].x && text3 != "Gone" && text3 != "Fled")
|
|
{
|
|
text3 = "NormalDazed";
|
|
this.states[k] = text3;
|
|
this.health[k] = this.characterRow._Life / 2;
|
|
this.SetAfterStunState(k);
|
|
Debug.Log("done with stun " + ((this != null) ? this.ToString() : null));
|
|
}
|
|
if (text3.Contains("Exile") && this.characterRow._Quest != "" && QuestLog.GetQuestState(this.characterRow._Quest) == QuestState.ExileIsland)
|
|
{
|
|
text3 = "Gone";
|
|
}
|
|
}
|
|
else if (this.xmlName.Contains("LocalGraveKeeper") && !Links.x.diorama.mapCanResurrect)
|
|
{
|
|
text3 = "Gone";
|
|
if (k < this.states.Count)
|
|
{
|
|
this.states[k] = "Gone";
|
|
}
|
|
}
|
|
bool flag3 = true;
|
|
if (Records.x.turnOffAnimals)
|
|
{
|
|
flag3 = false;
|
|
if (this.characterRow._Quest != "")
|
|
{
|
|
flag3 = true;
|
|
}
|
|
if (this.characterRow._DialogueFile != "")
|
|
{
|
|
flag3 = true;
|
|
}
|
|
if (this.characterRow._Name.Contains("Boro"))
|
|
{
|
|
flag3 = true;
|
|
}
|
|
}
|
|
if (Records.x.turnOffCharacters)
|
|
{
|
|
flag3 = false;
|
|
}
|
|
if ((text2 == scene || this.temporary) && (text3.Contains("Normal") || text3 == "" || text3.Contains("Stunned") || text3 == null || text3 == "Resurrected" || text3 == "Respawning" || text3 == "Purgatory2") && flag3 && !flag)
|
|
{
|
|
if (text3 == "Resurrected")
|
|
{
|
|
this.characters.Add(null);
|
|
text3 = "Resurrected";
|
|
this.states[k] = "Resurrected";
|
|
this.health[k] = 2;
|
|
this.InstanceCreature(k, objName, true, (Vector3)this.GetWalkIndex(k).position, text3);
|
|
}
|
|
else
|
|
{
|
|
this.characters.Add(null);
|
|
bool flag4 = false;
|
|
if (text3 == "Purgatory2")
|
|
{
|
|
flag4 = true;
|
|
}
|
|
this.InstanceCreature(k, objName, flag4, Vector3.zero, text3);
|
|
if (text3 == "NormalDazed")
|
|
{
|
|
this.SetAfterStunState(k);
|
|
}
|
|
if (flag4 && this.characters[k] && this.health[k] > 0)
|
|
{
|
|
this.characters[k].stats.SetHealth((int)this.ResurrectedHealth(), true);
|
|
this.characters[k].stats.state = "Resurrected";
|
|
}
|
|
this.CheckVIP();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.characters.Add(null);
|
|
}
|
|
}
|
|
this.waitTime = 0f;
|
|
this.FinishSetUp();
|
|
}
|
|
|
|
// Token: 0x06000511 RID: 1297 RVA: 0x00070207 File Offset: 0x0006E407
|
|
public void FinishSetUp()
|
|
{
|
|
if (this.characters.Count == 0 && !this.waitingForDelay)
|
|
{
|
|
base.enabled = false;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000512 RID: 1298 RVA: 0x00070225 File Offset: 0x0006E425
|
|
public void SetAsResurrected()
|
|
{
|
|
}
|
|
|
|
// Token: 0x06000513 RID: 1299 RVA: 0x00070228 File Offset: 0x0006E428
|
|
public void CheckResurrections()
|
|
{
|
|
if (Records.x.turnOffCharacters || Records.x.turnOffAnimals)
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
string text = Links.x.diorama.sceneName;
|
|
string text2 = "";
|
|
if (i < this.maps.Count)
|
|
{
|
|
text = this.maps[i];
|
|
text2 = this.states[i];
|
|
}
|
|
else if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (text2 == null)
|
|
{
|
|
text2 = "";
|
|
}
|
|
if (text2.Contains("Purgatory"))
|
|
{
|
|
if (Links.x.diorama.mapCanResurrect && this.LeaderAliveOrNoLeader())
|
|
{
|
|
this.temperaments[i] = 2;
|
|
if (Links.x.gameplay.seconds >= this.data[i].x)
|
|
{
|
|
this.states[i] = "Resurrected";
|
|
if (text == Links.x.diorama.sceneName || this.temporary)
|
|
{
|
|
Vector3 vector = (Vector3)this.GetWalkIndex(i).position;
|
|
if (this.characters[i])
|
|
{
|
|
vector = this.characters[i].tr.position;
|
|
}
|
|
else
|
|
{
|
|
if (this.hasSaveFile)
|
|
{
|
|
Vector4 vector2 = this.positions[i];
|
|
if (vector2.x != 0f && vector2.z != 0f && !this.sailing)
|
|
{
|
|
vector = Vector3.zero;
|
|
vector.x = vector2.x;
|
|
vector.z = vector2.z;
|
|
vector.y = vector2.y;
|
|
}
|
|
}
|
|
this.health[i] = 10;
|
|
}
|
|
this.health[i] = (int)this.ResurrectedHealth();
|
|
this.InstanceCreature(i, this.thisName, true, vector, "Resurrected");
|
|
this.characters[i].hostility = 2;
|
|
this.characters[i].stats.SetHealth((int)this.ResurrectedHealth(), true);
|
|
this.characters[i].stats.state = "Resurrected";
|
|
}
|
|
}
|
|
}
|
|
else if (!Links.x.diorama.mapCanResurrect)
|
|
{
|
|
this.states[i] = "Gone";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000514 RID: 1300 RVA: 0x0007055B File Offset: 0x0006E75B
|
|
private float ResurrectedHealth()
|
|
{
|
|
return (float)Random.Range(1, Mathf.RoundToInt((float)this.characterRow._Life / 3f));
|
|
}
|
|
|
|
// Token: 0x06000515 RID: 1301 RVA: 0x0007057C File Offset: 0x0006E77C
|
|
public bool LeaderAliveOrNoLeader()
|
|
{
|
|
if (!this.creatures.hasLeader)
|
|
{
|
|
return true;
|
|
}
|
|
if (this.xmlName.Contains("Ghost"))
|
|
{
|
|
Character leader = this.GetLeader();
|
|
return leader && !leader.dead && !leader.stunned;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x06000516 RID: 1302 RVA: 0x000705D0 File Offset: 0x0006E7D0
|
|
public void ResurrectCreature(Character character, Vector3 startPosition)
|
|
{
|
|
if (Records.x.turnOffCharacters || Records.x.turnOffAnimals)
|
|
{
|
|
return;
|
|
}
|
|
int num = -1;
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i] == character)
|
|
{
|
|
num = i;
|
|
break;
|
|
}
|
|
}
|
|
if (num == -1)
|
|
{
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j] == null)
|
|
{
|
|
num = j;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num > -1)
|
|
{
|
|
if (Links.x.diorama.mapCanResurrect && this.LeaderAliveOrNoLeader())
|
|
{
|
|
this.temperaments[num] = 2;
|
|
this.health[num] = (int)this.ResurrectedHealth();
|
|
this.InstanceCreature(num, this.thisName, true, startPosition, "Resurrected");
|
|
this.characters[num].dead = false;
|
|
this.characters[num].hostility = 0;
|
|
this.characters[num].stats.SetHealth(this.health[num], true);
|
|
this.characters[num].stats.state = "Resurrected";
|
|
this.characters[num].tr.position = startPosition;
|
|
this.characters[num].FirstPosition(null);
|
|
this.characters[num].SetupNPCAfterLoadedVariables();
|
|
this.characters[num].hostility = 2;
|
|
this.characters[num].CircleAnimation("");
|
|
return;
|
|
}
|
|
this.states[num] = "Gone";
|
|
this.characters[num].stats.state = "Gone";
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000517 RID: 1303 RVA: 0x000707A4 File Offset: 0x0006E9A4
|
|
public void CheckStuns()
|
|
{
|
|
if (Records.x.turnOffCharacters || Records.x.turnOffAnimals || this.xmlName == null)
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
string sceneName = Links.x.diorama.sceneName;
|
|
string text = "";
|
|
if (i < this.maps.Count)
|
|
{
|
|
string text2 = this.maps[i];
|
|
text = this.states[i];
|
|
}
|
|
else if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (text == null)
|
|
{
|
|
text = "";
|
|
}
|
|
if (text.Contains("Stunned") && Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) >= this.data[i].x)
|
|
{
|
|
if (Links.x.forfeits.InForfeitsBoard(this.xmlName) || (this.xmlName.Contains("LocalGraveKeeper") && !Links.x.diorama.mapCanResurrect))
|
|
{
|
|
Debug.Log("Stun ended for " + this.xmlName + " but was turned in so setting state to gone");
|
|
text = "Gone";
|
|
if (i < this.states.Count)
|
|
{
|
|
this.states[i] = "Gone";
|
|
}
|
|
}
|
|
if (text != "Gone")
|
|
{
|
|
if (this.characterRow != null && i < this.health.Count)
|
|
{
|
|
this.health[i] = this.characterRow._Life / 2;
|
|
}
|
|
if (text.Contains("Exile"))
|
|
{
|
|
text = "NormalDazed";
|
|
}
|
|
else
|
|
{
|
|
text = "NormalDazed";
|
|
}
|
|
this.states[i] = text;
|
|
if (this.characters.Count < 1)
|
|
{
|
|
Debug.Log(((this != null) ? this.ToString() : null) + " did not have characters for stun end");
|
|
this.characters.Add(null);
|
|
}
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].EndStun();
|
|
}
|
|
else
|
|
{
|
|
this.InstanceCreature(i, this.thisName, false, (Vector3)this.GetWalkIndex(i).position, text);
|
|
this.characters[i].EndStun();
|
|
}
|
|
this.SetAfterStunState(i);
|
|
if (this.xmlName.Contains("LocalGraveKeeper"))
|
|
{
|
|
Debug.Log(this.characters[i].stunned.ToString() + " " + this.characters[i].dead.ToString());
|
|
Transform parent = base.gameObject.transform.parent;
|
|
if (parent.gameObject != Links.x.diorama.creatures)
|
|
{
|
|
foreach (object obj in parent)
|
|
{
|
|
CreatureActions component = ((Transform)obj).gameObject.GetComponent<CreatureActions>();
|
|
if (component && component != this)
|
|
{
|
|
component.CheckResurrections();
|
|
string text3 = "Check resurrections ";
|
|
CreatureActions creatureActions = component;
|
|
Debug.Log(text3 + ((creatureActions != null) ? creatureActions.ToString() : null));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000518 RID: 1304 RVA: 0x00070BA4 File Offset: 0x0006EDA4
|
|
public void SetAfterStunState(int i)
|
|
{
|
|
if (i < this.temperaments.Count && i > -1 && i < this.characters.Count)
|
|
{
|
|
if (this.creatures.afterStunState == Creatures.AfterStun.Passive || this.creatures.afterStunState == Creatures.AfterStun.Panic)
|
|
{
|
|
bool flag = false;
|
|
if (this.temperaments[i] != (int)this.creatures.temperament)
|
|
{
|
|
flag = true;
|
|
}
|
|
this.temperaments[i] = 1;
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].hostility = this.temperaments[i];
|
|
this.characters[i].CircleAnimation("");
|
|
if (!this.characters[i].stats.animal && flag)
|
|
{
|
|
int num = Random.Range(0, 3);
|
|
if (num == 0)
|
|
{
|
|
this.characters[i].StartQuip("What happened?");
|
|
}
|
|
if (num == 1)
|
|
{
|
|
this.characters[i].StartQuip("Everything's a bit hazy");
|
|
}
|
|
if (num == 2)
|
|
{
|
|
this.characters[i].StartQuip("Memory is a little blurry");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.creatures.afterStunState == Creatures.AfterStun.Hostile)
|
|
{
|
|
this.temperaments[i] = 2;
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].hostility = this.temperaments[i];
|
|
this.characters[i].CircleAnimation("");
|
|
}
|
|
}
|
|
if (this.creatures.afterStunState == Creatures.AfterStun.Panic && this.characters[i])
|
|
{
|
|
this.characters[i].Flee(this.characters[i].node, false, Links.x.gameplay.seconds, 1000f);
|
|
this.characters[i].StartQuip("Help!");
|
|
}
|
|
if (this.creatures.afterStunState == Creatures.AfterStun.LeaveWithQuestDeactivation)
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.Log(((this != null) ? this.ToString() : null) + " awake from stun");
|
|
}
|
|
if (this.deactivation)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
(this != null) ? this.ToString() : null,
|
|
" awake from stun ",
|
|
this.creatures.deactivateFromQuest.ToString(),
|
|
" ",
|
|
QuestLog.GetQuestState(this.creatures.deactivateFromQuest.ToString()).ToString(),
|
|
" ",
|
|
Records.x.StringToQuestState(this.creatures.deactivateQuestState.ToString()).ToString()
|
|
}));
|
|
}
|
|
if (QuestLog.GetQuestState(this.creatures.deactivateFromQuest.ToString()) == Records.x.StringToQuestState(this.creatures.deactivateQuestState.ToString()) || (this.creatures.deactivateFromQuest.ToString() != "" && this.creatures.deactivateQuestState == Creatures.AdventureStates.NotApplicable))
|
|
{
|
|
string text = this.creatures.deactivateQuestState.ToString();
|
|
if (this.creatures.deactivateQuestState == Creatures.AdventureStates.NotApplicable)
|
|
{
|
|
text = "any";
|
|
Debug.Log("any");
|
|
}
|
|
Records.x.AddQuestToTimer(this.creatures.deactivateFromQuest.ToString(), 1f, text, this.creatures.deactivateQuestStateComplete.ToString(), true);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else if (this.characters[i])
|
|
{
|
|
this.characters[i].ignoreNodeIDs = true;
|
|
this.characters[i].Leave(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000519 RID: 1305 RVA: 0x00070FE4 File Offset: 0x0006F1E4
|
|
public void InstanceCreature(int i, string n, bool resurrected, Vector3 startPosition, string stateName)
|
|
{
|
|
GameObject gameObject = new GameObject(string.Concat(new string[]
|
|
{
|
|
this.xmlName,
|
|
"_",
|
|
this.thisName,
|
|
"_",
|
|
i.ToString()
|
|
}));
|
|
if (this.alliedToParty)
|
|
{
|
|
gameObject.transform.parent = Links.x.gameplay.transform;
|
|
gameObject.transform.parent = null;
|
|
}
|
|
Character character = gameObject.AddComponent<Character>();
|
|
int num = i;
|
|
if (resurrected)
|
|
{
|
|
gameObject.transform.position = startPosition;
|
|
}
|
|
else if (!this.ambush)
|
|
{
|
|
if (this.GetWalkIndex(num) != null)
|
|
{
|
|
gameObject.transform.position = (Vector3)this.GetWalkIndex(num).position;
|
|
}
|
|
else
|
|
{
|
|
gameObject.transform.position = this.walkPointsDay[0].position;
|
|
}
|
|
}
|
|
if (this.activation && this.creatures.activateFromQuest != Creatures.Adventures.None && !this.ambush)
|
|
{
|
|
QuestState questState = QuestLog.GetQuestState(this.creatures.activateFromQuest.ToString());
|
|
QuestState questState2 = Records.x.StringToQuestState(this.creatures.activateQuestState.ToString());
|
|
if (questState == questState2)
|
|
{
|
|
this.activating = true;
|
|
if (this.activation.childCount == 0)
|
|
{
|
|
gameObject.transform.position = this.activation.position;
|
|
}
|
|
else
|
|
{
|
|
gameObject.transform.position = this.activation.GetChild(0).position;
|
|
}
|
|
}
|
|
}
|
|
if (stateName == "NormalDazed")
|
|
{
|
|
character.wasStunned = true;
|
|
}
|
|
character.patrolNode = num;
|
|
character.creatures = this;
|
|
character.hostility = (int)this.creatures.temperament;
|
|
character.summoned = this.summons;
|
|
character.protectMe = this.creatures.protectUs;
|
|
character.movesOnWater = this.movesOnWater;
|
|
this.characters[i] = character;
|
|
if (resurrected && !this.xmlName.Contains("host"))
|
|
{
|
|
this.xmlName = "LazureGhostDrudge";
|
|
}
|
|
character.SetupBasic(this.alliedToParty, 0, this.xmlName, Records.x.currentPathNode, resurrected, 0);
|
|
Records.x.currentPathNode++;
|
|
Quaternion rotation = this.GetWalkTransform(num).rotation;
|
|
if (rotation == Quaternion.Euler(Vector3.zero))
|
|
{
|
|
rotation.y = Random.Range(-1f, 1f);
|
|
}
|
|
character.SetRotation(rotation, false, true);
|
|
if (this.creatures.stayNearPoints)
|
|
{
|
|
this.characters[i].stats.stayNearPatrol = true;
|
|
GraphNode graphNode;
|
|
if (this.daySleep)
|
|
{
|
|
graphNode = this.GetWalkNodeNight(0);
|
|
}
|
|
else
|
|
{
|
|
graphNode = this.GetWalkNodeDay(0);
|
|
}
|
|
this.characters[i].stats.stayNearPoint = graphNode;
|
|
}
|
|
character.stats.creaturesName = n;
|
|
if (i < this.states.Count)
|
|
{
|
|
character.stats.state = this.states[i];
|
|
}
|
|
if (this.creatures.number == 1 && this.hasSaveFile)
|
|
{
|
|
if (this.Peddler() && this.saveFile.KeyExists("Peddler"))
|
|
{
|
|
character.stats.savedMerchantList = this.saveFile.Load<string>("Peddler");
|
|
character.stats.savedMerchantTime = this.saveFile.Load<int>("PeddlerTime");
|
|
if (this.saveFile.KeyExists("PeddlerHistory"))
|
|
{
|
|
character.stats.savedMerchantHistory = this.saveFile.Load<string>("PeddlerHistory");
|
|
}
|
|
}
|
|
if (this.data.Count > 0 && (this.creatures.saveItems || this.data[0].z > 0f))
|
|
{
|
|
bool flag = false;
|
|
if (this.characterRow._DialogueFile != "")
|
|
{
|
|
flag = true;
|
|
}
|
|
if ((flag || this.creatures.saveItems) && this.saveFile.KeyExists("Items"))
|
|
{
|
|
this.savedBagItems = this.saveFile.Load<string>("Items");
|
|
character.SetNPCSavedItems(this.savedBagItems);
|
|
}
|
|
}
|
|
}
|
|
character.stuckInPlace = false;
|
|
character.cannotAttack = false;
|
|
if (this.creatures.mobility == Creatures.mobilityState.IdlesOffGridUntilAttacked && this.temperaments[i] != 0)
|
|
{
|
|
character.stuckInPlace = true;
|
|
}
|
|
if (this.creatures.mobility == Creatures.mobilityState.AlwaysOffGrid)
|
|
{
|
|
character.cannotAttack = true;
|
|
}
|
|
if (!this.hasSaveFile)
|
|
{
|
|
if (!this.summons)
|
|
{
|
|
this.initiateDialogue[i] = this.characters[i].stats.initiateDialogue;
|
|
this.health[i] = this.characters[i].stats.HealthCurrent();
|
|
this.states[i] = "Normal";
|
|
this.temperaments[i] = this.characters[i].hostility;
|
|
Vector4 vector = new Vector4(0f, 0f, 0f, 0f);
|
|
vector.x = this.characters[i].tr.position.x;
|
|
vector.y = this.characters[i].tr.position.y;
|
|
vector.z = this.characters[i].tr.position.z;
|
|
vector.w = (float)this.characters[i].desiredGraph;
|
|
this.positions[i] = vector;
|
|
this.doorID[i] = this.characters[i].doorID;
|
|
if (this.temporary)
|
|
{
|
|
this.maps[i] = this.originalScene;
|
|
}
|
|
else
|
|
{
|
|
this.maps[i] = Links.x.diorama.sceneName;
|
|
}
|
|
}
|
|
else if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add(this.characters[i].doorID);
|
|
}
|
|
}
|
|
else if (i < this.health.Count && this.health[i] <= 0 && !resurrected)
|
|
{
|
|
character.Stunned(true);
|
|
}
|
|
if (this.creatures.rope && character)
|
|
{
|
|
this.creatures.rope.SetActive(true);
|
|
Rope rope = this.creatures.rope.GetComponent<Rope>();
|
|
if (!rope)
|
|
{
|
|
rope = this.creatures.rope.AddComponent<Rope>();
|
|
}
|
|
rope.SetupCharacter(character, 10f);
|
|
}
|
|
if (this.creatureBoat)
|
|
{
|
|
int num2 = 0;
|
|
int num3 = 0;
|
|
using (IEnumerator enumerator = this.creatureBoat.transform.GetEnumerator())
|
|
{
|
|
while (enumerator.MoveNext())
|
|
{
|
|
if ((Transform)enumerator.Current == base.transform)
|
|
{
|
|
num2 = num3;
|
|
}
|
|
num3++;
|
|
}
|
|
}
|
|
this.creatureBoat.creatureBoat.AddSailor(character, num2);
|
|
this.sailing = true;
|
|
}
|
|
this.SetLoadedVariables(false, i);
|
|
if (resurrected)
|
|
{
|
|
this.randomNodeCenter = character.node;
|
|
}
|
|
if (!this.sailing)
|
|
{
|
|
if (this.GetDayNight(false))
|
|
{
|
|
this.StartDay(true);
|
|
}
|
|
else
|
|
{
|
|
this.StartNight(true);
|
|
}
|
|
this.CheckSleep(character);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600051A RID: 1306 RVA: 0x00071828 File Offset: 0x0006FA28
|
|
public bool GetDayNight(bool timeJump)
|
|
{
|
|
bool flag = false;
|
|
int num = (int)Mathf.Floor(Links.x.gameplay.gameHours);
|
|
bool flag2 = false;
|
|
for (int i = this.morningHour; i < this.morningHour + 24; i++)
|
|
{
|
|
int num2 = i;
|
|
if (i >= 24)
|
|
{
|
|
num2 -= 24;
|
|
}
|
|
if (!flag2 && !flag && num2 == this.nightHour)
|
|
{
|
|
flag2 = true;
|
|
}
|
|
if (num == num2 && !flag2)
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
this.isDay = true;
|
|
}
|
|
else
|
|
{
|
|
this.isDay = false;
|
|
}
|
|
this.CheckIfHasTimeLocation(timeJump);
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600051B RID: 1307 RVA: 0x000718B4 File Offset: 0x0006FAB4
|
|
public void SetLoadedVariables(bool all, int index)
|
|
{
|
|
if (this.waitingForPrompt)
|
|
{
|
|
return;
|
|
}
|
|
bool flag = false;
|
|
if (this.hasSaveFile)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i] && (all || index == i))
|
|
{
|
|
if (i < this.initiateDialogue.Count)
|
|
{
|
|
this.characters[i].stats.initiateDialogue = this.initiateDialogue[i];
|
|
int num = this.health[i];
|
|
if (Links.x.diorama.lastTimeOnScene > 0f && num > 0 && (float)Links.x.gameplay.gameDays > Links.x.diorama.lastTimeOnScene + 1f)
|
|
{
|
|
num += 10 * (int)((float)Links.x.gameplay.gameDays - Links.x.diorama.lastTimeOnScene);
|
|
}
|
|
this.characters[i].stats.SetHealth(num, false);
|
|
if (this.health[i] <= 0 && !this.states[i].Contains("Stunned"))
|
|
{
|
|
this.characters[i].Dead(true, false, false);
|
|
}
|
|
this.characters[i].stats.state = this.states[i];
|
|
this.characters[i].hostility = this.temperaments[i];
|
|
this.characters[i].patrolNode = (int)this.data[i].y;
|
|
this.characters[i].numberOfTimesKilled = this.data[i].z;
|
|
if (!this.temporary || (this.temporary && this.characters[i].ghost))
|
|
{
|
|
this.characters[i].doorID = this.doorID[i];
|
|
Vector4 vector = this.positions[i];
|
|
if (vector.x != 0f && vector.z != 0f && !this.sailing)
|
|
{
|
|
Vector3 zero = Vector3.zero;
|
|
zero.x = vector.x;
|
|
zero.z = vector.z;
|
|
zero.y = vector.y;
|
|
this.characters[i].desiredGraph = (int)vector.w;
|
|
this.characters[i].tr.position = zero;
|
|
this.characters[i].FirstPosition(null);
|
|
}
|
|
}
|
|
this.characters[i].stats.savedEffects = this.effects[i];
|
|
if (this.characters[i].stats.state == null)
|
|
{
|
|
this.characters[i].stats.state = "";
|
|
}
|
|
if (this.characters[i].hostility >= 1 && this.characters[i].stats.HealthCurrent() > 0 && this.effects[i] != "")
|
|
{
|
|
flag = true;
|
|
}
|
|
this.characters[i].CircleAnimation("");
|
|
}
|
|
else
|
|
{
|
|
this.LoadFresh(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j] && (all || index == j))
|
|
{
|
|
this.LoadFresh(j);
|
|
}
|
|
}
|
|
}
|
|
for (int k = 0; k < this.characters.Count; k++)
|
|
{
|
|
if (this.characters[k] && (all || index == k))
|
|
{
|
|
this.characters[k].SetupNPCAfterLoadedVariables();
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int l = 0; l < this.characters.Count; l++)
|
|
{
|
|
if (this.characters[l] && (all || index == l))
|
|
{
|
|
this.SpawnEffects(this.characters[l], this.effects[l]);
|
|
}
|
|
}
|
|
}
|
|
if (this.sailing && this.hasSaveFile)
|
|
{
|
|
if (this.creatureBoat.leadCreature == this.creatures)
|
|
{
|
|
Vector4 vector2 = this.positions[0];
|
|
Vector3 zero2 = Vector3.zero;
|
|
zero2.x = vector2.x;
|
|
zero2.z = vector2.z;
|
|
zero2.y = vector2.y;
|
|
this.creatureBoat.creatureBoat.tr.position = zero2;
|
|
return;
|
|
}
|
|
}
|
|
else if (this.sailing && !this.hasSaveFile && this.creatureBoat.creatureBoat.navigator == this.characters[0])
|
|
{
|
|
this.creatureBoat.creatureBoat.transform.position = this.creatureBoat.leadCreature.GetComponent<CreatureActions>().GetWalkTransform(0).position;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600051C RID: 1308 RVA: 0x00071DFC File Offset: 0x0006FFFC
|
|
private void LoadFresh(int i)
|
|
{
|
|
if (!this.sailing)
|
|
{
|
|
string text = "";
|
|
if (this.characters[i].node == null)
|
|
{
|
|
this.characters[i].FindCurrentNode(true);
|
|
}
|
|
this.characters[i].doorID = text;
|
|
if (text != "")
|
|
{
|
|
this.characters[i].desiredGraph = 1;
|
|
}
|
|
if (!this.ambush && !this.activation)
|
|
{
|
|
this.characters[i].FirstPosition(null);
|
|
}
|
|
else if (this.activation)
|
|
{
|
|
this.characters[i].SettlePosition();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.characters[i].doorID = "";
|
|
this.characters[i].desiredGraph = 0;
|
|
this.characters[i].FirstPosition(null);
|
|
}
|
|
this.characters[i].stats.SpawnStartingEffect();
|
|
}
|
|
|
|
// Token: 0x0600051D RID: 1309 RVA: 0x00071F0C File Offset: 0x0007010C
|
|
public void SpawnEffects(Character character, string savedEffects)
|
|
{
|
|
this.rawlines = new string[0];
|
|
char c = ',';
|
|
this.rawlines = savedEffects.Split(c, StringSplitOptions.None);
|
|
int num = 0;
|
|
string text = "";
|
|
string text2 = "";
|
|
string text3 = "";
|
|
string text4 = "";
|
|
if (savedEffects != " " && savedEffects != ",")
|
|
{
|
|
foreach (string text5 in this.rawlines)
|
|
{
|
|
num++;
|
|
if (num == 1)
|
|
{
|
|
text = text5;
|
|
}
|
|
if (num == 2)
|
|
{
|
|
text2 = text5;
|
|
}
|
|
if (num == 3)
|
|
{
|
|
text3 = text5;
|
|
}
|
|
if (num == 4)
|
|
{
|
|
text4 = text5;
|
|
}
|
|
if (num == 4 && text != "")
|
|
{
|
|
character.stats.AddEffectFromLoad(text, text2, text3, text4);
|
|
num = 0;
|
|
}
|
|
}
|
|
}
|
|
character.stats.SpawnEffects();
|
|
}
|
|
|
|
// Token: 0x0600051E RID: 1310 RVA: 0x00071FE0 File Offset: 0x000701E0
|
|
public void OverrideLoadedVariables(int life, string savedEffects)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].stats.SetHealth(life, true);
|
|
this.health[i] = life;
|
|
this.effects[i] = savedEffects;
|
|
this.characters[i].stats.savedEffects = savedEffects;
|
|
if (this.characters[i].hostility > 1 && (this.characters[i].stats.state.Contains("Normal") || this.characters[i].stats.state == "") && this.characters[i].stats.HealthCurrent() > 0)
|
|
{
|
|
this.SpawnEffects(this.characters[i], this.effects[i]);
|
|
}
|
|
this.characters[i].SetupNPCAfterLoadedVariables();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600051F RID: 1311 RVA: 0x00072108 File Offset: 0x00070308
|
|
public string GetSaveIdentifier()
|
|
{
|
|
if ((this.creatures.activateFromQuest == Creatures.Adventures.None && this.creatures.deactivateFromQuest == Creatures.Adventures.None) || this.creatures.number > 1)
|
|
{
|
|
return this.thisName;
|
|
}
|
|
return this.creatures.characterName.ToString();
|
|
}
|
|
|
|
// Token: 0x06000520 RID: 1312 RVA: 0x0007215C File Offset: 0x0007035C
|
|
public void LoadCreatures()
|
|
{
|
|
string sceneName = Links.x.diorama.sceneName;
|
|
if (this.temporary)
|
|
{
|
|
sceneName = this.originalScene;
|
|
}
|
|
string text = string.Concat(new string[]
|
|
{
|
|
Records.x.openBook,
|
|
"/Creature_",
|
|
sceneName,
|
|
"_",
|
|
this.GetSaveIdentifier(),
|
|
".es3"
|
|
});
|
|
if (base.gameObject.transform.parent)
|
|
{
|
|
this.creatureBoat = base.gameObject.transform.parent.gameObject.GetComponent<CreatureBoat>();
|
|
if (this.creatureBoat)
|
|
{
|
|
this.sailing = true;
|
|
}
|
|
}
|
|
if (ES3.FileExists(text) && !this.summons)
|
|
{
|
|
this.hasSaveFile = true;
|
|
this.saveFile = new ES3File(text);
|
|
this.initiateDialogue = this.saveFile.Load<List<int>>("InitiateDialogue");
|
|
this.health = this.saveFile.Load<List<int>>("Health");
|
|
this.data = this.saveFile.Load<List<Vector3>>("Data");
|
|
this.states = this.saveFile.Load<List<string>>("States");
|
|
this.temperaments = this.saveFile.Load<List<int>>("Temperment");
|
|
this.positions = this.saveFile.Load<List<Vector4>>("Positions");
|
|
this.timeSinceWipeOut = this.saveFile.Load<float>("TimeSinceWipeOut");
|
|
this.maps = this.saveFile.Load<List<string>>("Maps");
|
|
this.effects = this.saveFile.Load<List<string>>("Effects");
|
|
this.doorID = this.saveFile.Load<List<string>>("Indoors");
|
|
if (this.sailing && this.creatures.isCreatureGroupLeader)
|
|
{
|
|
this.savedItems = this.saveFile.Load<string>("SailingItems");
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.hasSaveFile = false;
|
|
this.timeSinceWipeOut = 0f;
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(Vector2.zero);
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000521 RID: 1313 RVA: 0x00072408 File Offset: 0x00070608
|
|
public void SaveCreatures()
|
|
{
|
|
if (this.waitingForPrompt || (this.summons && !this.onlyTemporary))
|
|
{
|
|
return;
|
|
}
|
|
string sceneName = Links.x.diorama.sceneName;
|
|
if (!this.onlyTemporary)
|
|
{
|
|
if (this.temporary)
|
|
{
|
|
sceneName = this.originalScene;
|
|
}
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (this.characters[i])
|
|
{
|
|
int num = this.characters[i].stats.initiateDialogue;
|
|
if (num == 3)
|
|
{
|
|
num = 1;
|
|
}
|
|
this.initiateDialogue[i] = num;
|
|
this.health[i] = this.characters[i].stats.HealthCurrent();
|
|
if (this.characters[i].missing)
|
|
{
|
|
this.health[i] = 0;
|
|
}
|
|
this.temperaments[i] = this.characters[i].hostility;
|
|
this.data[i] = new Vector3(this.data[i].x, (float)this.characters[i].patrolNode, this.characters[i].numberOfTimesKilled);
|
|
Vector4 vector = new Vector4(0f, 0f, 0f, 0f);
|
|
vector.x = this.characters[i].tr.position.x;
|
|
vector.y = this.characters[i].tr.position.y;
|
|
vector.z = this.characters[i].tr.position.z;
|
|
if (this.sailing && this.creatureBoat.creatureBoat.navigator == this.characters[i])
|
|
{
|
|
vector.x = this.creatureBoat.creatureBoat.tr.position.x;
|
|
vector.y = this.creatureBoat.creatureBoat.tr.position.y;
|
|
vector.z = this.creatureBoat.creatureBoat.tr.position.z;
|
|
}
|
|
vector.w = (float)this.characters[i].desiredGraph;
|
|
if (!this.questPointSwap && this.creatures.changePointsFromQuest != Creatures.Adventures.None)
|
|
{
|
|
QuestState questState = QuestLog.GetQuestState(this.creatures.changePointsFromQuest.ToString());
|
|
QuestState questState2 = Records.x.StringToQuestState(this.creatures.changePointsFromQuestState.ToString());
|
|
if (questState == questState2)
|
|
{
|
|
Debug.Log(((this != null) ? this.ToString() : null) + " needs to swap points next time, not saving position");
|
|
vector.x = 0f;
|
|
vector.y = 0f;
|
|
vector.z = 0f;
|
|
vector.w = 0f;
|
|
}
|
|
}
|
|
this.positions[i] = vector;
|
|
this.doorID[i] = this.characters[i].doorID;
|
|
this.states[i] = this.characters[i].stats.state;
|
|
if (this.characters[i].party)
|
|
{
|
|
Debug.Log("states " + this.states[i]);
|
|
}
|
|
if (!this.characters[i].changingMaps && !this.temporary)
|
|
{
|
|
this.maps[i] = sceneName;
|
|
}
|
|
if (this.characters[i].hostility >= 1)
|
|
{
|
|
this.characters[i].stats.GetEffectStrings();
|
|
}
|
|
this.effects[i] = this.characters[i].stats.savedEffects;
|
|
}
|
|
}
|
|
string text = string.Concat(new string[]
|
|
{
|
|
Records.x.openBook,
|
|
"/Creature_",
|
|
sceneName,
|
|
"_",
|
|
this.GetSaveIdentifier(),
|
|
".es3"
|
|
});
|
|
this.saveFile = new ES3File(text);
|
|
this.saveFile.Save<List<int>>("InitiateDialogue", this.initiateDialogue);
|
|
this.saveFile.Save<List<int>>("Health", this.health);
|
|
this.saveFile.Save<List<Vector3>>("Data", this.data);
|
|
this.saveFile.Save<List<int>>("Temperment", this.temperaments);
|
|
this.saveFile.Save<List<Vector4>>("Positions", this.positions);
|
|
this.saveFile.Save<List<string>>("Maps", this.maps);
|
|
this.saveFile.Save<List<string>>("States", this.states);
|
|
this.saveFile.Save<List<string>>("Indoors", this.doorID);
|
|
this.saveFile.Save<List<string>>("Effects", this.effects);
|
|
this.saveFile.Save<float>("TimeSinceWipeOut", this.timeSinceWipeOut);
|
|
if (this.sailing && this.creatureBoat.leadCreature == this.creatures)
|
|
{
|
|
if (this.items != null)
|
|
{
|
|
this.MakeItemSaveString();
|
|
}
|
|
this.saveFile.Save<string>("SailingItems", this.savedItems);
|
|
}
|
|
if (this.creatures.number <= 1 && this.characters.Count > 0 && this.characters[0] && this.Peddler())
|
|
{
|
|
this.saveFile.Save<string>("Peddler", this.characters[0].stats.savedMerchantList);
|
|
this.saveFile.Save<int>("PeddlerTime", this.characters[0].stats.savedMerchantTime);
|
|
this.saveFile.Save<string>("PeddlerHistory", this.characters[0].stats.savedMerchantHistory);
|
|
}
|
|
if (this.creatures.number == 1 && this.data.Count > 0 && (this.creatures.saveItems || this.data[0].z > 0f))
|
|
{
|
|
bool flag = false;
|
|
if (this.characterRow._DialogueFile != "")
|
|
{
|
|
flag = true;
|
|
}
|
|
if (flag || this.creatures.saveItems)
|
|
{
|
|
if (this.characters.Count > 0)
|
|
{
|
|
if (this.characters[0])
|
|
{
|
|
this.savedBagItems = this.characters[0].GetNPCSavedItems();
|
|
this.saveFile.Save<string>("Items", this.savedBagItems);
|
|
}
|
|
else if (this.savedBagItems != "")
|
|
{
|
|
this.saveFile.Save<string>("Items", this.savedBagItems);
|
|
}
|
|
}
|
|
else if (this.savedBagItems != "")
|
|
{
|
|
this.saveFile.Save<string>("Items", this.savedBagItems);
|
|
}
|
|
}
|
|
}
|
|
if (this.temporary)
|
|
{
|
|
Character firstCharacter = this.GetFirstCharacter();
|
|
if (firstCharacter)
|
|
{
|
|
this.AddTempCreature(this.GetFirstCharacter(), this.maps[0], firstCharacter.tr.position, this.futureDelay, Links.x.diorama.sceneName, false);
|
|
}
|
|
else
|
|
{
|
|
this.AddTempCreature(null, this.maps[0], this.positions[0], this.futureDelay, Links.x.diorama.sceneName, false);
|
|
}
|
|
}
|
|
this.saveFile.Sync();
|
|
this.hasSaveFile = true;
|
|
return;
|
|
}
|
|
Character firstCharacter2 = this.GetFirstCharacter();
|
|
this.originalScene = "";
|
|
if (firstCharacter2)
|
|
{
|
|
this.AddTempCreature(this.GetFirstCharacter(), Links.x.diorama.sceneName, firstCharacter2.tr.position, 0f, Links.x.diorama.sceneName, false);
|
|
return;
|
|
}
|
|
this.AddTempCreature(null, Links.x.diorama.sceneName, this.positions[0], 0f, Links.x.diorama.sceneName, false);
|
|
}
|
|
|
|
// Token: 0x06000522 RID: 1314 RVA: 0x00072D48 File Offset: 0x00070F48
|
|
private bool Peddler()
|
|
{
|
|
if (this.xmlName.Contains("Peddler"))
|
|
{
|
|
return true;
|
|
}
|
|
if (Links.x.diorama.sceneName.Contains("D6"))
|
|
{
|
|
if (this.xmlName.Contains("Chanter"))
|
|
{
|
|
return true;
|
|
}
|
|
if (this.xmlName.Contains("RozafirUndergroundMerchant"))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x06000523 RID: 1315 RVA: 0x00072DB0 File Offset: 0x00070FB0
|
|
public void UpdatePosition(Vector3 pt)
|
|
{
|
|
for (int i = 0; i < this.delays.Count; i++)
|
|
{
|
|
if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (this.delays[i] > -1f && this.delays[i] != 0f && i < this.positions.Count)
|
|
{
|
|
this.positions[i] = pt;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000524 RID: 1316 RVA: 0x00072ED8 File Offset: 0x000710D8
|
|
public void UpdateCharacter(Character character)
|
|
{
|
|
int num = this.characters.IndexOf(character);
|
|
if (num > -1)
|
|
{
|
|
this.health[num] = character.stats.HealthCurrent();
|
|
int num2 = character.stats.initiateDialogue;
|
|
if (num2 == 3)
|
|
{
|
|
num2 = 2;
|
|
}
|
|
this.initiateDialogue[num] = num2;
|
|
this.temperaments[num] = character.hostility;
|
|
Vector4 vector = new Vector4(0f, 0f, 0f, 0f);
|
|
vector.x = character.tr.position.x;
|
|
vector.y = character.tr.position.y;
|
|
vector.z = character.tr.position.z;
|
|
vector.w = (float)character.desiredGraph;
|
|
if (this.sailing && this.creatureBoat.creatureBoat.navigator == character)
|
|
{
|
|
vector.x = this.creatureBoat.creatureBoat.tr.position.x;
|
|
vector.y = this.creatureBoat.creatureBoat.tr.position.y;
|
|
vector.z = this.creatureBoat.creatureBoat.tr.position.z;
|
|
}
|
|
this.positions[num] = vector;
|
|
this.doorID[num] = character.doorID;
|
|
this.states[num] = character.stats.state;
|
|
this.data[num] = new Vector3(this.data[num].x, (float)character.patrolNode, character.numberOfTimesKilled);
|
|
if (character.hostility >= 1)
|
|
{
|
|
character.stats.GetEffectStrings();
|
|
}
|
|
this.effects[num] = character.stats.savedEffects;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000525 RID: 1317 RVA: 0x000730C4 File Offset: 0x000712C4
|
|
public void Charmed(Character character)
|
|
{
|
|
int num = this.characters.IndexOf(character);
|
|
this.states[num] = "Gone";
|
|
this.characters[num] = null;
|
|
this.health[num] = 0;
|
|
this.effects[num] = "";
|
|
}
|
|
|
|
// Token: 0x06000526 RID: 1318 RVA: 0x0007311C File Offset: 0x0007131C
|
|
public string GetState(Character character)
|
|
{
|
|
int num = this.characters.IndexOf(character);
|
|
if (num > -1)
|
|
{
|
|
return this.states[num];
|
|
}
|
|
return "";
|
|
}
|
|
|
|
// Token: 0x06000527 RID: 1319 RVA: 0x0007314C File Offset: 0x0007134C
|
|
public int GetCharacterIndex(Character character)
|
|
{
|
|
return this.characters.IndexOf(character);
|
|
}
|
|
|
|
// Token: 0x06000528 RID: 1320 RVA: 0x0007315A File Offset: 0x0007135A
|
|
public Character GetCharacterAtIndex(int index)
|
|
{
|
|
if (index == -1)
|
|
{
|
|
return null;
|
|
}
|
|
if (this.characters.Count <= 0)
|
|
{
|
|
return null;
|
|
}
|
|
if (index < this.characters.Count)
|
|
{
|
|
return this.characters[index];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Token: 0x06000529 RID: 1321 RVA: 0x00073190 File Offset: 0x00071390
|
|
public Character GetFirstCharacter(bool canBeStunned)
|
|
{
|
|
if (this.characters.Count > 0)
|
|
{
|
|
Character character = this.characters[0];
|
|
if (character)
|
|
{
|
|
if (!character.dead && (!character.stunned || canBeStunned))
|
|
{
|
|
return character;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Token: 0x0600052A RID: 1322 RVA: 0x000731DC File Offset: 0x000713DC
|
|
public bool AnyAlive()
|
|
{
|
|
if (this.characters.Count > 0)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character && !character.dead)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x0600052B RID: 1323 RVA: 0x00073230 File Offset: 0x00071430
|
|
public bool AnyNearParty()
|
|
{
|
|
if (!Links.x.hasMain)
|
|
{
|
|
return true;
|
|
}
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character && (Links.x.main.currentPosition - character.currentPosition).sqrMagnitude < 2500f)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x0600052C RID: 1324 RVA: 0x000732A4 File Offset: 0x000714A4
|
|
public Character GetFirstCharacter()
|
|
{
|
|
if (this.characters.Count <= 0 || !this.characters[0])
|
|
{
|
|
return null;
|
|
}
|
|
if (!this.characters[0].dead && !this.characters[0].stunned)
|
|
{
|
|
return this.characters[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Token: 0x0600052D RID: 1325 RVA: 0x00073308 File Offset: 0x00071508
|
|
public void AddTimeOfDeath(float t, Character character)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (character == this.characters[i])
|
|
{
|
|
this.data[i] = new Vector3(t, this.data[i].y, character.numberOfTimesKilled);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600052E RID: 1326 RVA: 0x00073428 File Offset: 0x00071628
|
|
public float GetTimeOfDeath(Character character)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (i >= this.initiateDialogue.Count)
|
|
{
|
|
this.initiateDialogue.Add(0);
|
|
this.health.Add(10);
|
|
this.data.Add(new Vector2(0f, 0f));
|
|
this.states.Add("Normal");
|
|
this.temperaments.Add((int)this.creatures.temperament);
|
|
this.positions.Add(Vector4.zero);
|
|
this.maps.Add(Links.x.diorama.sceneName);
|
|
this.effects.Add("");
|
|
this.doorID.Add("");
|
|
}
|
|
if (character == this.characters[i])
|
|
{
|
|
return this.data[i].x;
|
|
}
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
// Token: 0x0600052F RID: 1327 RVA: 0x00073538 File Offset: 0x00071738
|
|
public void DayNightSwitch(bool timeJump)
|
|
{
|
|
this.GetDayNight(timeJump);
|
|
bool flag = false;
|
|
bool flag2 = false;
|
|
if (Mathf.Floor(Links.x.gameplay.gameHours) == (float)this.morningHour)
|
|
{
|
|
flag = true;
|
|
}
|
|
if (Mathf.Floor(Links.x.gameplay.gameHours) == (float)this.nightHour)
|
|
{
|
|
flag2 = true;
|
|
}
|
|
if (flag)
|
|
{
|
|
this.StartDay(false);
|
|
}
|
|
if (flag2)
|
|
{
|
|
this.StartNight(false);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000530 RID: 1328 RVA: 0x000735A4 File Offset: 0x000717A4
|
|
public bool NearWalkNode(string type, Character character, float max, bool canCheckArea)
|
|
{
|
|
if (character.sleeping)
|
|
{
|
|
return false;
|
|
}
|
|
if (type == "Night" || type == "Any")
|
|
{
|
|
Vector3 position = character.tr.position;
|
|
if (character.node != null && this.walkNodesNight.Count > 0 && canCheckArea && !this.activation && !this.deactivation && character.node.Area == this.walkNodesNight[0].Area)
|
|
{
|
|
return true;
|
|
}
|
|
for (int i = 0; i < this.walkNodesNight.Count; i++)
|
|
{
|
|
if (this.walkNodesNight[i] == null)
|
|
{
|
|
Debug.Log(((this != null) ? this.ToString() : null) + " null node");
|
|
}
|
|
else if ((position - (Vector3)this.walkNodesNight[i].position).sqrMagnitude < max)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
if (type == "Day" || type == "Any")
|
|
{
|
|
Vector3 position2 = character.tr.position;
|
|
if (character.node != null && this.walkNodesDay.Count > 0 && canCheckArea && !this.activation && !this.deactivation && character.node.Area == this.walkNodesDay[0].Area)
|
|
{
|
|
return true;
|
|
}
|
|
for (int j = 0; j < this.walkNodesDay.Count; j++)
|
|
{
|
|
if (this.walkNodesDay[j] != null && (position2 - (Vector3)this.walkNodesDay[j].position).sqrMagnitude < max)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x06000531 RID: 1329 RVA: 0x0007377C File Offset: 0x0007197C
|
|
private void CheckGhostVanish(Character character)
|
|
{
|
|
if (character.ghost && Links.x.diorama.ghostPoint && (Links.x.diorama.ghostPoint.transform.position - character.tr.position).sqrMagnitude > 25f)
|
|
{
|
|
character.ghostVanishing = true;
|
|
character.alwaysOn = true;
|
|
character.TurnScriptsOn();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000532 RID: 1330 RVA: 0x000737F4 File Offset: 0x000719F4
|
|
public void StartNight(bool checkFromArea)
|
|
{
|
|
if (this.deactivating)
|
|
{
|
|
return;
|
|
}
|
|
if (this.stopPatrolTemporarily)
|
|
{
|
|
return;
|
|
}
|
|
if (this.disappearNight || this.hasDayNightCycle)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
if (i == -1 || i >= this.vanishNodesNight.Count)
|
|
{
|
|
this.waitTime = 0f;
|
|
this.standTime = 0f;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.CheckSleep(this.characters[i]);
|
|
if (!this.NearWalkNode("Night", this.characters[i], 100f, checkFromArea))
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
if (i == -1 || i >= this.walkNodesNight.Count)
|
|
{
|
|
Debug.LogWarning("Missing node " + ((this != null) ? this.ToString() : null));
|
|
}
|
|
else
|
|
{
|
|
this.vanishNode = this.walkNodesNight[i];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.vanishNode = this.vanishNodesNight[i];
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.CheckSleep(this.characters[i]);
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
if (this.characters[i].actions)
|
|
{
|
|
this.characters[i].actions.EndActions();
|
|
}
|
|
if (PathUtilities.IsPathPossible(this.vanishNode, this.characters[i].node))
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
}
|
|
else
|
|
{
|
|
this.characters[i].dayNightVanishing = false;
|
|
this.characters[i].alwaysOn = false;
|
|
}
|
|
}
|
|
else if (!this.characters[i].vanished)
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (this.disappearDay)
|
|
{
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j])
|
|
{
|
|
this.VanishReturn(this.characters[j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000533 RID: 1331 RVA: 0x00073B2C File Offset: 0x00071D2C
|
|
public void LoopNight(int index)
|
|
{
|
|
if (this.deactivating)
|
|
{
|
|
return;
|
|
}
|
|
if (this.stopPatrolTemporarily)
|
|
{
|
|
return;
|
|
}
|
|
if (!this.disappearNight)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].patrolNode = i;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (index <= -1 || index >= this.vanishNodesNight.Count)
|
|
{
|
|
Debug.LogWarning(((this != null) ? this.ToString() : null) + " did not have enough vanish nodes " + index.ToString());
|
|
return;
|
|
}
|
|
this.vanishNode = this.vanishNodesNight[index];
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
this.VanishMapExit(this.characters[index], index);
|
|
return;
|
|
}
|
|
this.VanishDisappear(this.characters[index]);
|
|
}
|
|
|
|
// Token: 0x06000534 RID: 1332 RVA: 0x00073C0D File Offset: 0x00071E0D
|
|
public void VanishReturn(Character character)
|
|
{
|
|
character.dayNightVanishing = false;
|
|
character.alwaysOn = false;
|
|
character.vanished = false;
|
|
character.TurnScriptsOn();
|
|
}
|
|
|
|
// Token: 0x06000535 RID: 1333 RVA: 0x00073C2C File Offset: 0x00071E2C
|
|
public void VanishDisappear(Character character)
|
|
{
|
|
if ((this.vanishNodesNight.Count > 0 && this.disappearNight && !this.isDay) || (this.disappearDay && this.vanishNodesDay.Count > 0 && this.isDay))
|
|
{
|
|
character.dayNightVanishing = true;
|
|
character.alwaysOn = false;
|
|
character.TurnScriptsOff();
|
|
character.vanished = true;
|
|
return;
|
|
}
|
|
character.alwaysOn = false;
|
|
character.dayNightVanishing = false;
|
|
character.vanished = false;
|
|
}
|
|
|
|
// Token: 0x06000536 RID: 1334 RVA: 0x00073CA8 File Offset: 0x00071EA8
|
|
public void VanishMapExit(Character character, int i)
|
|
{
|
|
MapExit mapExit = Links.x.diorama.ClosestMapEntrance((Vector3)this.vanishNode.position);
|
|
if (mapExit != null)
|
|
{
|
|
bool flag = Links.x.diorama.IsInteriorExit(mapExit);
|
|
MapExit.interiorNames exteriorConnection = mapExit.exteriorConnection;
|
|
string text = "";
|
|
if (flag)
|
|
{
|
|
text = mapExit.interiorConnection.ToString();
|
|
}
|
|
string indoorID = this.characters[i].indoorID;
|
|
MapExit mapExit2 = Links.x.diorama.MatchMapExitInteriorExterior(flag, exteriorConnection, mapExit);
|
|
Links.x.gaia.TeleportNPC(character, mapExit2, text, flag);
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"finish vanishing ",
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
this.characters[i].node.GraphIndex.ToString(),
|
|
" ",
|
|
this.vanishNode.GraphIndex.ToString(),
|
|
" ",
|
|
this.characters[i].indoorID,
|
|
" ",
|
|
indoorID
|
|
}));
|
|
this.characters[i].dayNightVanishing = false;
|
|
this.characters[i].alwaysOn = false;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000537 RID: 1335 RVA: 0x00073E14 File Offset: 0x00072014
|
|
public void StartDay(bool checkFromArea)
|
|
{
|
|
if (this.deactivating)
|
|
{
|
|
return;
|
|
}
|
|
if (this.stopPatrolTemporarily)
|
|
{
|
|
return;
|
|
}
|
|
if (this.disappearDay || this.hasDayNightCycle)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
if (this.vanishNodesDay.Count == 0)
|
|
{
|
|
this.waitTime = 0f;
|
|
this.standTime = 0f;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.CheckSleep(this.characters[i]);
|
|
if (!this.NearWalkNode("Day", this.characters[i], 100f, checkFromArea))
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
this.vanishNode = this.walkNodesDay[i];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.vanishNode = this.vanishNodesDay[i];
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.CheckSleep(this.characters[i]);
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
if (this.characters[i].node != null)
|
|
{
|
|
if (this.characters[i].actions)
|
|
{
|
|
this.characters[i].actions.EndActions();
|
|
}
|
|
if (PathUtilities.IsPathPossible(this.vanishNode, this.characters[i].node))
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
}
|
|
else
|
|
{
|
|
this.characters[i].dayNightVanishing = false;
|
|
this.characters[i].alwaysOn = false;
|
|
}
|
|
}
|
|
}
|
|
else if (!this.characters[i].vanished)
|
|
{
|
|
this.characters[i].dayNightVanishing = true;
|
|
if (this.characters[i].inactive)
|
|
{
|
|
this.characters[i].TurnScriptsOn();
|
|
}
|
|
this.characters[i].alwaysOn = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (this.disappearNight)
|
|
{
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j] && !this.characters[j].ghost)
|
|
{
|
|
this.VanishReturn(this.characters[j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000538 RID: 1336 RVA: 0x0007413C File Offset: 0x0007233C
|
|
public void LoopDay(int index)
|
|
{
|
|
if (this.deactivating)
|
|
{
|
|
return;
|
|
}
|
|
if (this.stopPatrolTemporarily)
|
|
{
|
|
return;
|
|
}
|
|
if (this.disappearDay)
|
|
{
|
|
if (index == -1 || index >= this.vanishNodesDay.Count)
|
|
{
|
|
Debug.Log(((this != null) ? this.ToString() : null) + " error for vanish day nodes");
|
|
}
|
|
this.vanishNode = this.vanishNodesDay[index];
|
|
if (Records.x.editor)
|
|
{
|
|
if (this.characters[index].node == null && !this.characters[index].stunned)
|
|
{
|
|
Character character = this.characters[index];
|
|
Debug.Log(((character != null) ? character.ToString() : null) + " has no node");
|
|
}
|
|
if (this.vanishNode == null)
|
|
{
|
|
Character character2 = this.characters[index];
|
|
Debug.Log(((character2 != null) ? character2.ToString() : null) + " night vanish node is null");
|
|
}
|
|
}
|
|
if (this.characters[index].node != null)
|
|
{
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
this.VanishMapExit(this.characters[index], index);
|
|
return;
|
|
}
|
|
this.VanishDisappear(this.characters[index]);
|
|
return;
|
|
}
|
|
else if (!this.characters[index].stunned)
|
|
{
|
|
Character character3 = this.characters[index];
|
|
Debug.Log(((character3 != null) ? character3.ToString() : null) + " is missing node, cannot vanish, position is " + this.characters[index].tr.position.ToString());
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].patrolNode = i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000539 RID: 1337 RVA: 0x00074315 File Offset: 0x00072515
|
|
public void ChangingTime(float gameHours, bool partyCamping)
|
|
{
|
|
if (this.waitingForPrompt)
|
|
{
|
|
return;
|
|
}
|
|
base.StartCoroutine(this.JumpTime(gameHours, partyCamping));
|
|
}
|
|
|
|
// Token: 0x0600053A RID: 1338 RVA: 0x0007432F File Offset: 0x0007252F
|
|
private IEnumerator JumpTime(float gameHours, bool partyCamping)
|
|
{
|
|
if (this.sailing)
|
|
{
|
|
if (this.creatureBoat && this.creatureBoat.creatureBoat && !this.CheckForAllDead())
|
|
{
|
|
Character character2 = null;
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j] && this.characters[j].boatNavigator)
|
|
{
|
|
character2 = this.characters[j];
|
|
}
|
|
}
|
|
if (character2)
|
|
{
|
|
int num = character2.patrolNode;
|
|
float num2 = float.PositiveInfinity;
|
|
Vector3 position = this.creatureBoat.creatureBoat.tr.position;
|
|
for (int k = 0; k < this.walkPointsDay.Count; k++)
|
|
{
|
|
float sqrMagnitude = (this.walkPointsDay[k].position - position).sqrMagnitude;
|
|
if (sqrMagnitude < num2)
|
|
{
|
|
num2 = sqrMagnitude;
|
|
num = k;
|
|
}
|
|
}
|
|
num++;
|
|
if (num >= this.walkPointsDay.Count)
|
|
{
|
|
num = 0;
|
|
}
|
|
this.isDay = true;
|
|
GraphNode walkIndex = this.GetWalkIndex(num);
|
|
Debug.Log(walkIndex);
|
|
this.creatureBoat.creatureBoat.TimeJump((Vector3)walkIndex.position, this.walkPointsDay[num].rotation);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.noSleep = false;
|
|
int num3;
|
|
for (int i = 0; i < this.characters.Count; i = num3 + 1)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character && !character.dead && !character.stunned && !character.missing)
|
|
{
|
|
character.TargetReached();
|
|
bool flag = false;
|
|
bool flag2 = false;
|
|
if (Mathf.Floor(gameHours) == (float)this.morningHour)
|
|
{
|
|
flag = true;
|
|
}
|
|
if (Mathf.Floor(gameHours) == (float)this.nightHour)
|
|
{
|
|
flag2 = true;
|
|
}
|
|
this.GetDayNight(true);
|
|
bool flag3 = false;
|
|
if (Records.x.dialogue && (character == Links.x.dialogue.npc1 || character == Links.x.dialogue.npc2 || character == Links.x.dialogue.npc3 || character == Links.x.dialogue.npc4))
|
|
{
|
|
flag2 = false;
|
|
flag = false;
|
|
flag3 = true;
|
|
}
|
|
if (flag2 || flag)
|
|
{
|
|
this.DayNightSwitch(true);
|
|
if (flag2 && this.disappearNight)
|
|
{
|
|
this.LoopNight(i);
|
|
}
|
|
if (flag && this.disappearDay)
|
|
{
|
|
this.LoopDay(i);
|
|
}
|
|
}
|
|
bool flag4 = true;
|
|
if (character.node == null && Records.x.editor)
|
|
{
|
|
Character character3 = character;
|
|
Debug.Log(((character3 != null) ? character3.ToString() : null) + " has no node when time jumping");
|
|
flag4 = false;
|
|
}
|
|
if (this.summons || this.temporary || flag3 || this.stopPatrolTemporarily)
|
|
{
|
|
flag4 = false;
|
|
}
|
|
if (flag4 && !this.sailing)
|
|
{
|
|
this.CheckSleep(character);
|
|
if (!character.vanished && !character.sleeping)
|
|
{
|
|
int currentPatrolID = character.patrolNode;
|
|
if (!flag2 && !flag)
|
|
{
|
|
num3 = currentPatrolID;
|
|
currentPatrolID = num3 + 1;
|
|
}
|
|
if (currentPatrolID >= this.CurrentPointsCount())
|
|
{
|
|
currentPatrolID = 0;
|
|
}
|
|
GraphNode destination = this.GetWalkIndex(currentPatrolID);
|
|
if (this.deactivating)
|
|
{
|
|
destination = this.deactivationNode;
|
|
}
|
|
if (this.hasTimePoint > -1)
|
|
{
|
|
destination = this.timeNode;
|
|
}
|
|
if (character.node != null && destination != null)
|
|
{
|
|
bool flag5 = false;
|
|
if (character.node.Area == destination.Area || this.sailing)
|
|
{
|
|
flag5 = true;
|
|
}
|
|
if (!flag5)
|
|
{
|
|
NNConstraint nnconstraint = new NNConstraint();
|
|
nnconstraint.constrainWalkability = true;
|
|
nnconstraint.walkable = true;
|
|
nnconstraint.constrainTags = false;
|
|
nnconstraint.checkCircleID = 0;
|
|
nnconstraint.passID = 0;
|
|
nnconstraint.passID2 = 0;
|
|
nnconstraint.constrainPenalty = 0;
|
|
nnconstraint.checkConnections = 0;
|
|
nnconstraint.constrainToArea = -1;
|
|
nnconstraint.constrainToEnvironment = 1;
|
|
if (this.movesOnWater)
|
|
{
|
|
nnconstraint.constrainToEnvironment = 2;
|
|
}
|
|
nnconstraint.constrainDistance = false;
|
|
ABPath p = ABPath.ConstructFast(character.node, destination, null);
|
|
p.nnConstraint = nnconstraint;
|
|
AstarPath.StartPath(p, false);
|
|
yield return base.StartCoroutine(p.WaitForPath());
|
|
p.Claim(this);
|
|
flag5 = !p.error;
|
|
p.Release(this, false);
|
|
if (!flag5)
|
|
{
|
|
character.patrolNode++;
|
|
}
|
|
if (!flag5 && Records.x.editor)
|
|
{
|
|
string[] array = new string[9];
|
|
int num4 = 0;
|
|
Character character4 = character;
|
|
array[num4] = ((character4 != null) ? character4.ToString() : null);
|
|
array[1] = " cannot time jump to new area, current area is ";
|
|
array[2] = ((Vector3)character.node.position).ToString();
|
|
array[3] = " ";
|
|
array[4] = character.indoorID;
|
|
array[5] = ", going to node at ";
|
|
array[6] = destination.GraphIndex.ToString();
|
|
array[7] = " ";
|
|
array[8] = ((Vector3)destination.position).ToString();
|
|
Debug.Log(string.Concat(array));
|
|
}
|
|
p = null;
|
|
}
|
|
if (flag5)
|
|
{
|
|
if (this.hasDayNightCycle)
|
|
{
|
|
character.dayNightVanishing = false;
|
|
}
|
|
character.patrolNode = currentPatrolID;
|
|
character.ClearNodePath();
|
|
character.tr.position = (Vector3)this.GetWalkIndex(currentPatrolID).position;
|
|
Transform walkTransform = this.GetWalkTransform(currentPatrolID);
|
|
if (walkTransform)
|
|
{
|
|
character.SetRotation(walkTransform.rotation, false, true);
|
|
}
|
|
character.FirstPosition(null);
|
|
}
|
|
}
|
|
destination = null;
|
|
}
|
|
}
|
|
if (character.quip)
|
|
{
|
|
character.quip.ReturnToCellar();
|
|
character.quip = null;
|
|
}
|
|
if (partyCamping && character.hostility == 2)
|
|
{
|
|
Links.x.diorama.CheckDistanceToRestingParty(character);
|
|
}
|
|
this.CheckSleep(character);
|
|
}
|
|
character = null;
|
|
num3 = i;
|
|
}
|
|
}
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x0600053B RID: 1339 RVA: 0x0007434C File Offset: 0x0007254C
|
|
public bool AddAllToCombat(Character closestParty, bool searching, bool overrideSleep, bool quip)
|
|
{
|
|
if (!closestParty)
|
|
{
|
|
return false;
|
|
}
|
|
bool flag = false;
|
|
int desiredGraph = closestParty.desiredGraph;
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character && character.hostility < 2 && !character.attackingUntilBribe && !character.inCombat && (overrideSleep || !character.sleeping) && (!Links.x.combat.isJustice || (Links.x.combat.isJustice && character.stats.characterRow._QuestProofState != "")) && character.desiredGraph == desiredGraph && (desiredGraph == 0 || character.indoorID == closestParty.indoorID))
|
|
{
|
|
float num = character.stats.SightRadius(false, false, false) * character.stats.SightRadius(false, false, false);
|
|
closestParty = Links.x.GetNearestParty(character.currentPosition);
|
|
if (closestParty && (closestParty.currentPosition - character.currentPosition).sqrMagnitude < num)
|
|
{
|
|
if (character.sleeping && overrideSleep)
|
|
{
|
|
character.WakeUp();
|
|
}
|
|
if (character.IsSentient())
|
|
{
|
|
if (character.vipFollow || this.vipFollow)
|
|
{
|
|
this.VIPFail();
|
|
}
|
|
character.hostility = 2;
|
|
searching = false;
|
|
this.characters[i].UpdateLKP(closestParty, closestParty.node, "Heard", false);
|
|
Links.x.sensory.AddPlayerToCombat(this.characters[i], closestParty, false, searching, true);
|
|
if (quip)
|
|
{
|
|
if (!Links.x.sensory.CheckProof(this.characters[i]))
|
|
{
|
|
this.characters[i].HostileQuip();
|
|
}
|
|
else
|
|
{
|
|
this.characters[i].GuiltyQuip();
|
|
}
|
|
}
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600053C RID: 1340 RVA: 0x00074558 File Offset: 0x00072758
|
|
public void SetState(Character character, string s)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (character == this.characters[i])
|
|
{
|
|
this.states[i] = s;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600053D RID: 1341 RVA: 0x0007459C File Offset: 0x0007279C
|
|
public void SetStateByIndex(int num, string s)
|
|
{
|
|
this.states[num] = s;
|
|
}
|
|
|
|
// Token: 0x0600053E RID: 1342 RVA: 0x000745AC File Offset: 0x000727AC
|
|
public bool ReturnSingleToMap(string creaturesName, int temperament, string xmlName, int xmlNameIndex, string originalMap, Vector3 position, string state, int life, string savedEffects, int index)
|
|
{
|
|
bool flag = false;
|
|
if (index > -1)
|
|
{
|
|
this.positions[index] = position;
|
|
this.maps[index] = originalMap;
|
|
if (originalMap == Links.x.diorama.sceneName)
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600053F RID: 1343 RVA: 0x00074600 File Offset: 0x00072800
|
|
public void UpdateTemporaryListsFromMapChange(string mapToCheck)
|
|
{
|
|
for (int i = 0; i < this.delays.Count; i++)
|
|
{
|
|
if (this.delays[i] > 0f)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
this.movingFromMap[i],
|
|
" ",
|
|
mapToCheck
|
|
}));
|
|
if (this.movingFromMap[i] == mapToCheck)
|
|
{
|
|
Records.x.ReturnTemporaryCreatureToPreviousMap(base.gameObject.name, this.xmlName, i, this.originalScene);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000540 RID: 1344 RVA: 0x000746B8 File Offset: 0x000728B8
|
|
public void MoveToNewMap(Character character, string newMap, Vector3 newPosition, float delayTime)
|
|
{
|
|
if (!this.canJoinParty)
|
|
{
|
|
int num = this.characters.IndexOf(character);
|
|
if (character.hostility >= 1)
|
|
{
|
|
character.stats.GetEffectStrings();
|
|
}
|
|
this.maps[num] = newMap;
|
|
this.AddTempCreature(character, newMap, newPosition, delayTime, Links.x.diorama.sceneName, true);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000541 RID: 1345 RVA: 0x00074718 File Offset: 0x00072918
|
|
public void AddTempCreature(Character character, string newMap, Vector3 newPosition, float delayTime, string mapMovingFrom, bool saveMapMoving)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"From creature, add temp ",
|
|
this.xmlName,
|
|
" ",
|
|
(character != null) ? character.ToString() : null,
|
|
" ",
|
|
newMap,
|
|
" ",
|
|
this.temporary.ToString(),
|
|
" ",
|
|
delayTime.ToString(),
|
|
" ",
|
|
this.onlyTemporary.ToString()
|
|
}));
|
|
int num = this.characters.IndexOf(character);
|
|
string text = Links.x.diorama.sceneName;
|
|
if (this.temporary)
|
|
{
|
|
text = this.originalScene;
|
|
}
|
|
if (this.onlyTemporary)
|
|
{
|
|
text = "";
|
|
mapMovingFrom = "";
|
|
}
|
|
int num2 = num;
|
|
if (this.temporary)
|
|
{
|
|
num2 = this.temporaryIndex;
|
|
}
|
|
if (character)
|
|
{
|
|
if (character.ghost)
|
|
{
|
|
newMap = Links.x.diorama.sceneName;
|
|
}
|
|
if (this.states[num].Contains("Purgatory"))
|
|
{
|
|
this.states[num] = "Resurrected";
|
|
}
|
|
if (character.missing)
|
|
{
|
|
this.states[num] = "Gone";
|
|
}
|
|
Records.x.AddTemporaryCreature(this.thisName, this.xmlName, text, newMap, character.hostility, newPosition, this.states[num], this.GetSaveIdentifier(), character.stats.HealthCurrent(), character.stats.savedEffects, num2, delayTime, mapMovingFrom, character.tr.position, saveMapMoving);
|
|
return;
|
|
}
|
|
if (this.temporary || this.onlyTemporary)
|
|
{
|
|
if (this.onlyTemporary)
|
|
{
|
|
this.health[0] = 0;
|
|
this.states[0] = "Gone";
|
|
num2 = 0;
|
|
}
|
|
Records.x.AddTemporaryCreature(this.thisName, this.xmlName, text, newMap, this.temperaments[0], newPosition, this.states[0], this.GetSaveIdentifier(), this.health[0], "", num2, delayTime, mapMovingFrom, this.positions[0], saveMapMoving);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000542 RID: 1346 RVA: 0x0007495C File Offset: 0x00072B5C
|
|
public void UpdateDelays(float delayTime, int index, string map)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"update delay time ",
|
|
index.ToString(),
|
|
" ",
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
delayTime.ToString(),
|
|
" ",
|
|
this.creatures.number.ToString()
|
|
}));
|
|
if (this.delays == null)
|
|
{
|
|
this.delays = new List<float>();
|
|
this.movingFromMap = new List<string>();
|
|
for (int i = 0; i < this.creatures.number; i++)
|
|
{
|
|
this.delays.Add(-1f);
|
|
this.movingFromMap.Add(map);
|
|
}
|
|
}
|
|
if (delayTime == 0f)
|
|
{
|
|
delayTime = -1f;
|
|
}
|
|
if (index < this.delays.Count && index > -1)
|
|
{
|
|
this.delays[index] = delayTime;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000543 RID: 1347 RVA: 0x00074A50 File Offset: 0x00072C50
|
|
public Transform GetWalkTransform(int i)
|
|
{
|
|
if (i == -1)
|
|
{
|
|
i = 0;
|
|
}
|
|
if (this.isDay)
|
|
{
|
|
if (this.disappearDay && !this.disappearNight)
|
|
{
|
|
return this.vanishPointsDay[i];
|
|
}
|
|
if (i < this.walkPointsDay.Count && i > -1)
|
|
{
|
|
return this.walkPointsDay[i];
|
|
}
|
|
if (this.walkPointsDay.Count > 0)
|
|
{
|
|
return this.walkPointsDay[0];
|
|
}
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
if (i == -1)
|
|
{
|
|
i = 0;
|
|
}
|
|
if (!this.disappearDay && this.disappearNight)
|
|
{
|
|
return this.vanishPointsNight[i];
|
|
}
|
|
if (i < this.walkPointsNight.Count && i > -1)
|
|
{
|
|
return this.walkPointsNight[i];
|
|
}
|
|
if (this.walkPointsNight.Count > 0)
|
|
{
|
|
return this.walkPointsNight[0];
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000544 RID: 1348 RVA: 0x00074B24 File Offset: 0x00072D24
|
|
public int CurrentPointsCount()
|
|
{
|
|
if (this.isDay)
|
|
{
|
|
return this.walkPointsDay.Count;
|
|
}
|
|
return this.walkPointsNight.Count;
|
|
}
|
|
|
|
// Token: 0x06000545 RID: 1349 RVA: 0x00074B48 File Offset: 0x00072D48
|
|
public GraphNode GetWalkIndex(int i)
|
|
{
|
|
if (this.sailing)
|
|
{
|
|
if (this.isDay)
|
|
{
|
|
return this.creatureBoat.leadCreature.GetComponent<CreatureActions>().walkNodesDay[i];
|
|
}
|
|
return this.creatureBoat.leadCreature.GetComponent<CreatureActions>().walkNodesNight[i];
|
|
}
|
|
else
|
|
{
|
|
if (i < 0)
|
|
{
|
|
i = 0;
|
|
}
|
|
if (this.isDay)
|
|
{
|
|
if (this.disappearDay && !this.disappearNight)
|
|
{
|
|
return this.vanishNodesDay[i];
|
|
}
|
|
if (i >= this.walkNodesDay.Count || this.walkNodesDay == null)
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.LogError("Not enough nodes " + ((this != null) ? this.ToString() : null) + " " + i.ToString());
|
|
}
|
|
return this.walkNodesDay[0];
|
|
}
|
|
if (i < 0 || i >= this.walkNodesDay.Count)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
i.ToString(),
|
|
" ",
|
|
this.walkNodesDay.Count.ToString(),
|
|
" not enough walk nodes ",
|
|
(this != null) ? this.ToString() : null
|
|
}));
|
|
i = 0;
|
|
}
|
|
return this.walkNodesDay[i];
|
|
}
|
|
else
|
|
{
|
|
if (!this.disappearDay && this.disappearNight)
|
|
{
|
|
return this.vanishNodesNight[i];
|
|
}
|
|
if (i >= this.walkNodesNight.Count || this.walkNodesNight == null)
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.LogError("Not enough nodes " + ((this != null) ? this.ToString() : null) + " " + i.ToString());
|
|
}
|
|
return this.walkNodesNight[0];
|
|
}
|
|
if (i < 0 || i >= this.walkNodesNight.Count)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
i.ToString(),
|
|
" ",
|
|
this.walkNodesNight.Count.ToString(),
|
|
" not enough walk nodes ",
|
|
(this != null) ? this.ToString() : null
|
|
}));
|
|
i = 0;
|
|
}
|
|
return this.walkNodesNight[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000546 RID: 1350 RVA: 0x00074D7C File Offset: 0x00072F7C
|
|
public Vector3 GetWalkTurnIndex(int i)
|
|
{
|
|
if (this.isDay)
|
|
{
|
|
if (this.walkPointsDay.Count == 0)
|
|
{
|
|
return Vector3.zero;
|
|
}
|
|
return this.walkPointsDay[i].rotation.eulerAngles;
|
|
}
|
|
else
|
|
{
|
|
if (this.walkPointsNight.Count == 0)
|
|
{
|
|
return Vector3.zero;
|
|
}
|
|
return this.walkPointsNight[i].rotation.eulerAngles;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000547 RID: 1351 RVA: 0x00074DEC File Offset: 0x00072FEC
|
|
public GraphNode GetWalkNodeIndex(int i)
|
|
{
|
|
if (this.isDay)
|
|
{
|
|
if (this.walkPointsDay.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
return this.walkNodesDay[i];
|
|
}
|
|
else
|
|
{
|
|
if (this.walkPointsNight.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
return this.walkNodesNight[i];
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000548 RID: 1352 RVA: 0x00074E38 File Offset: 0x00073038
|
|
public GraphNode GetWalkNodeDay(int i)
|
|
{
|
|
if (this.walkPointsDay.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
return this.walkNodesDay[i];
|
|
}
|
|
|
|
// Token: 0x06000549 RID: 1353 RVA: 0x00074E55 File Offset: 0x00073055
|
|
public GraphNode GetWalkNodeNight(int i)
|
|
{
|
|
if (this.walkPointsNight.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
return this.walkNodesNight[i];
|
|
}
|
|
|
|
// Token: 0x0600054A RID: 1354 RVA: 0x00074E72 File Offset: 0x00073072
|
|
public int GetWalkCount()
|
|
{
|
|
if (this.isDay)
|
|
{
|
|
return this.walkPointsDay.Count;
|
|
}
|
|
return this.walkPointsNight.Count;
|
|
}
|
|
|
|
// Token: 0x0600054B RID: 1355 RVA: 0x00074E93 File Offset: 0x00073093
|
|
public void SetTemperament(int t)
|
|
{
|
|
if (t == 0)
|
|
{
|
|
this.creatures.temperament = Creatures.temperamentState.NeverFights;
|
|
}
|
|
if (t == 1)
|
|
{
|
|
this.creatures.temperament = Creatures.temperamentState.FightsIfAttacked;
|
|
}
|
|
if (t == 2)
|
|
{
|
|
this.creatures.temperament = Creatures.temperamentState.AttacksOnSight;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600054C RID: 1356 RVA: 0x00074EC4 File Offset: 0x000730C4
|
|
public void SetCharacter0(Character character, int temp)
|
|
{
|
|
if (this.states.Count > 0)
|
|
{
|
|
if (this.characters.Count == 0)
|
|
{
|
|
this.characters.Add(character);
|
|
}
|
|
this.states[0] = "Normal";
|
|
this.temperaments[0] = temp;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600054D RID: 1357 RVA: 0x00074F16 File Offset: 0x00073116
|
|
public void SetState(int index, string s)
|
|
{
|
|
if (index < this.states.Count)
|
|
{
|
|
this.states[index] = s;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600054E RID: 1358 RVA: 0x00074F33 File Offset: 0x00073133
|
|
public void JoiningParty()
|
|
{
|
|
this.waitTime = 0f;
|
|
this.characters[0].stats.state = "Companion";
|
|
this.states[0] = "Companion";
|
|
base.enabled = false;
|
|
}
|
|
|
|
// Token: 0x0600054F RID: 1359 RVA: 0x00074F74 File Offset: 0x00073174
|
|
public void CheckForTextureSwap()
|
|
{
|
|
if (this.xmlName == "BanquetIsleFriend" || this.xmlName == "LachoPriestStart")
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character)
|
|
{
|
|
if (this.xmlName == "LachoPriestStart")
|
|
{
|
|
if (QuestLog.GetQuestState("F5_BanquetPriest") != QuestState.Unassigned)
|
|
{
|
|
character.body.faceRenderer.material.SetTexture("_MainTex", Links.x.cinematicLachoTextureSwap1);
|
|
Debug.Log("Setting priest head texture");
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
else if (this.xmlName == "BanquetIsleFriend")
|
|
{
|
|
if (QuestLog.GetQuestState("F5_BanquetFriend") == QuestState.Complete)
|
|
{
|
|
character.body.faceRenderer.material.SetTexture("_MainTex", Links.x.cinematicLachoTextureSwap2);
|
|
Debug.Log("Setting companion head texture");
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
else if (this.xmlName == "BanquetIsleFriend2")
|
|
{
|
|
if (QuestLog.GetQuestState("F5_BanquetFriend") == QuestState.Complete)
|
|
{
|
|
character.body.faceRenderer.material.SetTexture("_MainTex", Links.x.cinematicLachoTextureSwap2);
|
|
Debug.Log("Setting companion head texture");
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000550 RID: 1360 RVA: 0x000750D4 File Offset: 0x000732D4
|
|
public void Ambush(Character hitCharacter)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
Character character = this.characters[i];
|
|
if (character)
|
|
{
|
|
character.ClearMoveTargets();
|
|
character.ClearPathUpdates();
|
|
character.SetRotation(Quaternion.LookRotation(hitCharacter.tr.position - character.tr.position), true, true);
|
|
character.StartGetPathToTarget(hitCharacter.node, hitCharacter, null, null, null, null, null, null, character, null, false, false, true, "Searching", false);
|
|
character.movingToPatrolNode = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000551 RID: 1361 RVA: 0x00075168 File Offset: 0x00073368
|
|
public void CheckSleep(Character character)
|
|
{
|
|
if (!character)
|
|
{
|
|
return;
|
|
}
|
|
if (this.noSleep)
|
|
{
|
|
return;
|
|
}
|
|
if (this.isDay)
|
|
{
|
|
if (this.daySleep)
|
|
{
|
|
if (!character.sleeping)
|
|
{
|
|
bool flag = false;
|
|
Quaternion quaternion = character.tr.rotation;
|
|
for (int i = 0; i < this.walkNodesDay.Count; i++)
|
|
{
|
|
if (((Vector3)this.walkNodesDay[i].position - character.tr.position).sqrMagnitude < 2.25f)
|
|
{
|
|
flag = true;
|
|
quaternion = this.walkPointsDay[i].rotation;
|
|
}
|
|
}
|
|
if (flag && !character.hasActions)
|
|
{
|
|
character.Sleep(quaternion);
|
|
}
|
|
character.stats.AddHealth(10);
|
|
return;
|
|
}
|
|
}
|
|
else if (character.sleeping)
|
|
{
|
|
character.WakeUp();
|
|
return;
|
|
}
|
|
}
|
|
else if (this.nightSleep)
|
|
{
|
|
if (!character.sleeping)
|
|
{
|
|
bool flag2 = false;
|
|
Quaternion quaternion2 = character.tr.rotation;
|
|
for (int j = 0; j < this.walkNodesNight.Count; j++)
|
|
{
|
|
if (((Vector3)this.walkNodesNight[j].position - character.tr.position).sqrMagnitude < 2.25f)
|
|
{
|
|
flag2 = true;
|
|
if (j < this.walkPointsNight.Count)
|
|
{
|
|
quaternion2 = this.walkPointsNight[j].rotation;
|
|
}
|
|
}
|
|
}
|
|
if (flag2 && !character.hasActions)
|
|
{
|
|
character.Sleep(quaternion2);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else if (character.sleeping)
|
|
{
|
|
character.WakeUp();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000552 RID: 1362 RVA: 0x00075308 File Offset: 0x00073508
|
|
public bool IsAsleep()
|
|
{
|
|
foreach (object obj in base.transform)
|
|
{
|
|
Transform transform = (Transform)obj;
|
|
if (transform.gameObject.name.Contains("Sleep"))
|
|
{
|
|
if (transform.gameObject.name.Contains("Day") && this.isDay)
|
|
{
|
|
return true;
|
|
}
|
|
if (transform.gameObject.name.Contains("Night") && !this.isDay)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x06000553 RID: 1363 RVA: 0x000753BC File Offset: 0x000735BC
|
|
public void FarFromPoints(float currTime, Character c)
|
|
{
|
|
if (!this.noSleep & (currTime > this.lastCheckTime || (c.alwaysOn && !c.ambushing && !c.dayNightVanishing && !c.sleeping) || this.lastCheckTime == 0f))
|
|
{
|
|
bool flag = false;
|
|
if (!c.sleeping && !c.dayNightVanishing && !c.missing && !c.ambushing && !c.hasActions && c.IsSentient() && !c.vanished && !Records.x.removeControls && !this.deactivating && !c.ghostVanishing && !c.ignoreNodeIDs && this.hasTimePoint == -1 && !this.vipFollow)
|
|
{
|
|
this.lastCheckTime = currTime + Random.Range(5f, 10f);
|
|
Vector3 currentPosition = c.currentPosition;
|
|
if (this.isDay || this.walkNodesNight.Count == 0)
|
|
{
|
|
for (int i = 0; i < this.walkPointsDay.Count; i++)
|
|
{
|
|
if ((this.walkPointsDay[i].position - currentPosition).sqrMagnitude < 1600f)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int j = 0; j < this.walkPointsNight.Count; j++)
|
|
{
|
|
if ((this.walkPointsNight[j].position - currentPosition).sqrMagnitude < 1600f)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
c.alwaysOn = true;
|
|
if (c.inactive)
|
|
{
|
|
c.TurnScriptsOn();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
c.alwaysOn = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000554 RID: 1364 RVA: 0x00075584 File Offset: 0x00073784
|
|
public float NearestPatrolPoint(Vector3 pt)
|
|
{
|
|
float num = 100000f;
|
|
if (this.isDay || this.walkNodesNight.Count == 0)
|
|
{
|
|
int num2 = this.walkPointsDay.Count;
|
|
for (int i = 0; i < num2; i++)
|
|
{
|
|
float sqrMagnitude = (this.walkPointsDay[i].position - pt).sqrMagnitude;
|
|
if (sqrMagnitude < num)
|
|
{
|
|
num = sqrMagnitude;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num2 = this.walkPointsNight.Count;
|
|
for (int j = 0; j < num2; j++)
|
|
{
|
|
float sqrMagnitude2 = (this.walkPointsNight[j].position - pt).sqrMagnitude;
|
|
if (sqrMagnitude2 < num)
|
|
{
|
|
num = sqrMagnitude2;
|
|
}
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
// Token: 0x06000555 RID: 1365 RVA: 0x00075638 File Offset: 0x00073838
|
|
private void Update()
|
|
{
|
|
if (Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady)
|
|
{
|
|
if (this.sailing && !this.creatures.isCreatureGroupLeader)
|
|
{
|
|
return;
|
|
}
|
|
if (Links.x.gaia.loadingCharacterCreation)
|
|
{
|
|
return;
|
|
}
|
|
if (this.stopPatrolTemporarily)
|
|
{
|
|
return;
|
|
}
|
|
if (Records.x.dialogue || Records.x.miniGame)
|
|
{
|
|
return;
|
|
}
|
|
if (this.waitingForDelay)
|
|
{
|
|
bool flag = false;
|
|
for (int i = 0; i < this.delays.Count; i++)
|
|
{
|
|
if (!flag)
|
|
{
|
|
if (this.delays[i] > 0f)
|
|
{
|
|
if (Links.x.gameplay.seconds > this.startDelayTime + this.delays[i])
|
|
{
|
|
this.FinishDelay(i);
|
|
}
|
|
}
|
|
else if (this.delays[i] == -1f)
|
|
{
|
|
this.characters.Add(null);
|
|
string text = "";
|
|
if (i < this.states.Count)
|
|
{
|
|
text = this.states[i];
|
|
}
|
|
if (this.walkNodesDay.Count == 0)
|
|
{
|
|
this.GetPointNodes();
|
|
}
|
|
this.InstanceCreature(i, this.thisName, false, (Vector3)this.GetWalkIndex(i).position, text);
|
|
this.delays[i] = 0f;
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (this.waitingForPrompt)
|
|
{
|
|
base.enabled = false;
|
|
return;
|
|
}
|
|
if (this.summons)
|
|
{
|
|
return;
|
|
}
|
|
if (this.characters.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
bool flag2 = false;
|
|
if (this.deactivating)
|
|
{
|
|
Character firstCharacter = this.GetFirstCharacter();
|
|
if (firstCharacter)
|
|
{
|
|
if (firstCharacter.sleeping)
|
|
{
|
|
firstCharacter.WakeUp();
|
|
}
|
|
if (!firstCharacter.moving && firstCharacter.IsSentient())
|
|
{
|
|
GraphNode graphNode = this.deactivationNode;
|
|
if ((firstCharacter.tr.position - (Vector3)graphNode.position).sqrMagnitude > 4f && graphNode != null)
|
|
{
|
|
if (!firstCharacter.nodeConstraint.Suitable(graphNode))
|
|
{
|
|
graphNode = firstCharacter.NearNode((Vector3)this.deactivationNode.position, true, 0, -1, 0);
|
|
if (graphNode == null)
|
|
{
|
|
graphNode = this.deactivationNode;
|
|
}
|
|
}
|
|
if (firstCharacter.waitingForPath != 1 && firstCharacter.blockedTime == 0f && firstCharacter.NodesCount() == 0 && !firstCharacter.hasActions)
|
|
{
|
|
this.MakeNormalPath(graphNode, true, firstCharacter);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if ((this.hasTimePoint > -1 || this.CurrentPointsCount() == 1) && !this.vipFollow)
|
|
{
|
|
bool flag3 = false;
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (this.characters[j] && this.characters[j].dayNightVanishing && this.hasTimePoint == -1)
|
|
{
|
|
flag3 = true;
|
|
}
|
|
}
|
|
if (Time.timeSinceLevelLoad > this.standTime + 0.25f || flag3)
|
|
{
|
|
for (int k = 0; k < this.characters.Count; k++)
|
|
{
|
|
Character character = this.characters[k];
|
|
if (character && !character.dead && !character.inactive && !character.stunned && ((character.dayNightVanishing && !character.hasActions) || (!character.inactive && character.animID != 1 && !character.searching && !character.fleeing && !character.inCombat && character.CanMakePath() && character.IsSentient())))
|
|
{
|
|
Vector3 vector = (Vector3)this.GetWalkNodeIndex(0).position;
|
|
GraphNode graphNode2 = this.GetWalkNodeIndex(0);
|
|
Vector3 vector2 = this.GetWalkTurnIndex(0);
|
|
if (this.hasTimePoint > -1)
|
|
{
|
|
vector = (Vector3)this.timeNode.position;
|
|
graphNode2 = this.timeNode;
|
|
vector2 = this.timeRot.eulerAngles;
|
|
}
|
|
this.CheckSleep(character);
|
|
if (character.dayNightVanishing && this.hasTimePoint == -1)
|
|
{
|
|
vector = (Vector3)this.vanishNode.position;
|
|
if (character.nodeConstraint.Suitable(this.vanishNode))
|
|
{
|
|
graphNode2 = this.vanishNode;
|
|
}
|
|
else
|
|
{
|
|
graphNode2 = character.NearNode((Vector3)this.vanishNode.position, true, 0, -1, 0);
|
|
if (graphNode2 == null)
|
|
{
|
|
graphNode2 = this.vanishNode;
|
|
}
|
|
vector = (Vector3)graphNode2.position;
|
|
}
|
|
}
|
|
if (character.dayNightVanishing && (this.characters[k].tr.position - (Vector3)this.vanishNode.position).sqrMagnitude <= 4f)
|
|
{
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
if (!character.inactive)
|
|
{
|
|
this.VanishMapExit(this.characters[k], k);
|
|
}
|
|
}
|
|
else if (!character.inactive)
|
|
{
|
|
this.VanishDisappear(this.characters[k]);
|
|
}
|
|
}
|
|
if ((character.tr.position - vector).sqrMagnitude > 0.25f && graphNode2 != null && !character.moving && character.blockedTime == 0f && (character.waitingForPath != 1 || character.waitingForPath == 3))
|
|
{
|
|
if (!character.dayNightVanishing)
|
|
{
|
|
character.doTurn = true;
|
|
character.endTurn = vector2;
|
|
}
|
|
this.MakeNormalPath(graphNode2, false, character);
|
|
}
|
|
}
|
|
}
|
|
this.standTime = Time.timeSinceLevelLoad;
|
|
}
|
|
}
|
|
if (this.CurrentPointsCount() > 1 && !this.vipFollow && this.hasTimePoint == -1)
|
|
{
|
|
float num = this.creatures.patrolDelay;
|
|
if (this.waitTime <= 0f && this.CurrentPointsCount() != 0)
|
|
{
|
|
int num2 = 0;
|
|
for (int l = 0; l < this.characters.Count; l++)
|
|
{
|
|
Character character2 = this.characters[l];
|
|
if (character2 && !character2.inactive && !character2.missing)
|
|
{
|
|
if (character2.dayNightVanishing)
|
|
{
|
|
num = 0.1f;
|
|
if ((character2.tr.position - (Vector3)this.vanishNode.position).sqrMagnitude < 9f)
|
|
{
|
|
if (this.disappearDay && this.disappearNight)
|
|
{
|
|
this.VanishMapExit(character2, l);
|
|
}
|
|
else
|
|
{
|
|
this.VanishDisappear(character2);
|
|
}
|
|
}
|
|
}
|
|
if ((character2.NodesCount() > 0 || character2.IsWalking()) && !character2.inCombat && !character2.searching)
|
|
{
|
|
num2++;
|
|
}
|
|
}
|
|
}
|
|
if (num2 == 0)
|
|
{
|
|
flag2 = true;
|
|
}
|
|
}
|
|
if (flag2 && this.waitTime == 0f)
|
|
{
|
|
this.waitTime = Time.timeSinceLevelLoad + num;
|
|
}
|
|
if (this.waitTime != 0f && Time.timeSinceLevelLoad > this.waitTime)
|
|
{
|
|
for (int m = 0; m < this.characters.Count; m++)
|
|
{
|
|
Character character3 = this.characters[m];
|
|
if (character3 && !character3.inactive && !character3.missing && !character3.hasActions && !character3.inCombat && !Records.x.pocketPause && (!character3.IsWalking() || (character3.dayNightVanishing && !character3.moving)))
|
|
{
|
|
this.CheckSleep(character3);
|
|
if (!character3.sleeping && !character3.fleeing)
|
|
{
|
|
this.WalkToNextPoint(character3);
|
|
this.waitTime = 0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.vipFollow && this.characters.Count > 0 && Links.x.hasMain)
|
|
{
|
|
Character character4 = this.characters[0];
|
|
if (character4 && Links.x.main.node != null && character4.node != null && character4.IsSentient())
|
|
{
|
|
float sqrMagnitude = (Links.x.main.currentPosition - character4.currentPosition).sqrMagnitude;
|
|
if (!character4.vipFollow && sqrMagnitude < 2500f && Links.x.main.node.Area == character4.node.Area)
|
|
{
|
|
if (!character4.vipFollow)
|
|
{
|
|
character4.GetHealthBar();
|
|
}
|
|
character4.vipFollow = true;
|
|
character4.StartQuip("Let's go");
|
|
}
|
|
if (character4.vipFollow)
|
|
{
|
|
if (Links.x.main.node.Area != character4.node.Area || sqrMagnitude > 3600f)
|
|
{
|
|
Links.x.fellowship.JumpPosition(Links.x.main, 5, character4);
|
|
return;
|
|
}
|
|
if ((!character4.hasActions || !Records.x.InCombat(false)) && (sqrMagnitude > 225f || (Links.x.main.moving && sqrMagnitude > 100f)))
|
|
{
|
|
bool flag4 = false;
|
|
if (!character4.moving && character4.moveNode == null && character4.slideNode == null && !character4.movingOutOfWay && character4.NodesCount() == 0 && character4.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && character4.blockedTime == 0f && !character4.inCombat)
|
|
{
|
|
flag4 = true;
|
|
}
|
|
if ((Links.x.main.physicsMove || Links.x.main.moving) && character4.savedFollowNode != null && character4.waitingForPath != 1 && character4.savedPathTarget != null && character4.CanMakePath() && character4.slideNode == null && !character4.movingOutOfWay && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && !character4.inCombat && !character4.justMoved && !character4.turning && Time.timeSinceLevelLoad > this.repathTime + 2f)
|
|
{
|
|
flag4 = true;
|
|
}
|
|
if (flag4)
|
|
{
|
|
GraphNode formationPosition = Links.x.fellowship.GetFormationPosition(Links.x.main.node, character4, true);
|
|
if (formationPosition != null && ((Vector3)formationPosition.position - character4.currentPosition).sqrMagnitude > 16f)
|
|
{
|
|
this.repathTime = Time.timeSinceLevelLoad;
|
|
character4.savedFollowNode = Links.x.main.savedPathTarget;
|
|
character4.ClearPathUpdates();
|
|
character4.pathTargPosition = (Vector3)formationPosition.position;
|
|
character4.MakePath(formationPosition, 500, false, false, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000556 RID: 1366 RVA: 0x00076185 File Offset: 0x00074385
|
|
public void ReturnFromCombat()
|
|
{
|
|
this.waitTime = 0.1f;
|
|
}
|
|
|
|
// Token: 0x06000557 RID: 1367 RVA: 0x00076194 File Offset: 0x00074394
|
|
private void GhostPath(Character character)
|
|
{
|
|
if (character.ghost && !character.moving && character.blockedTime == 0f && (character.waitingForPath == 0 || character.waitingForPath == 3) && !character.hasActions)
|
|
{
|
|
if (character.ghostVanishing)
|
|
{
|
|
if ((character.tr.position - Links.x.diorama.ghostPoint.transform.position).sqrMagnitude < 9f)
|
|
{
|
|
character.ghostVanishing = false;
|
|
character.alwaysOn = false;
|
|
return;
|
|
}
|
|
this.MakeNormalPath(Links.x.diorama.ghostNode, true, character);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
this.MakeRandomPath(this.randomNodeCenter, false, character);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000558 RID: 1368 RVA: 0x00076255 File Offset: 0x00074455
|
|
private void MakeRandomPath(GraphNode n, bool run, Character character)
|
|
{
|
|
character.ClearMoveTargets();
|
|
character.ClearPathUpdates();
|
|
character.running = run;
|
|
character.MakePath(n, 10, false, true, false);
|
|
character.movingToPatrolNode = false;
|
|
}
|
|
|
|
// Token: 0x06000559 RID: 1369 RVA: 0x00076280 File Offset: 0x00074480
|
|
public void MakeNormalPath(GraphNode n, bool run, Character character)
|
|
{
|
|
character.ClearMoveTargets();
|
|
character.ClearPathUpdates();
|
|
character.running = run;
|
|
int num = 500;
|
|
if (character.dayNightVanishing)
|
|
{
|
|
num = 30;
|
|
}
|
|
character.MakePath(n, num, false, false, false);
|
|
character.movingToPatrolNode = false;
|
|
}
|
|
|
|
// Token: 0x0600055A RID: 1370 RVA: 0x000762C3 File Offset: 0x000744C3
|
|
public void LeaderFollowerPaths()
|
|
{
|
|
if (Time.timeSinceLevelLoad > this.standTime && this.followerCoroutine == null)
|
|
{
|
|
this.followerCoroutine = this.LeaderFollowerPath();
|
|
base.StartCoroutine(this.followerCoroutine);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600055B RID: 1371 RVA: 0x000762F3 File Offset: 0x000744F3
|
|
private IEnumerator LeaderFollowerPath()
|
|
{
|
|
if (this.creatures.isCreatureGroupLeader)
|
|
{
|
|
this.standTime = Time.timeSinceLevelLoad + Random.Range(1f, 4f);
|
|
Character character = this.characters[0];
|
|
if (!character.moving && character.moveNode == null && character.slideNode == null && !character.movingOutOfWay && character.NodesCount() == 0 && character.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && character.blockedTime == 0f && !character.hasActions && !character.inactive)
|
|
{
|
|
int num = character.patrolNode + 1;
|
|
if (num > this.walkNodesDay.Count - 1 || num < 0)
|
|
{
|
|
num = 0;
|
|
character.patrolNode = -1;
|
|
}
|
|
GraphNode graphNode = this.walkNodesDay[num];
|
|
if (graphNode != null)
|
|
{
|
|
character.ClearMoveTargets();
|
|
character.ClearPathUpdates();
|
|
character.MakePath(graphNode, 100, false, false, true);
|
|
character.movingToPatrolNode = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.standTime = Time.timeSinceLevelLoad + Random.Range(0.1f, 0.5f);
|
|
if (!this.groupLeader)
|
|
{
|
|
this.groupLeader = this.GetLeader();
|
|
}
|
|
int num3;
|
|
for (int i = 0; i < this.characters.Count; i = num3 + 1)
|
|
{
|
|
Character c = this.characters[i];
|
|
if (!c.moving && c.moveNode == null && c.slideNode == null && !c.movingOutOfWay && c.NodesCount() == 0 && c.CanMakePath() && Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && c.blockedTime == 0f && !c.hasActions && !c.inactive)
|
|
{
|
|
Vector3 position = c.sphere.transform.position;
|
|
float sqrMagnitude = (c.tr.position - this.groupLeader.tr.position).sqrMagnitude;
|
|
float sqrMagnitude2 = (c.tr.position - position).sqrMagnitude;
|
|
float num2 = 2f + (float)i / 2f;
|
|
if ((sqrMagnitude2 > 9f && c.savedPathTarget != null) || sqrMagnitude > num2 * num2)
|
|
{
|
|
GraphNode moveNode = c.savedPathTarget;
|
|
if (c.node != null)
|
|
{
|
|
if (sqrMagnitude > num2 * num2)
|
|
{
|
|
GraphNode graphNode2 = c.NearNode(this.groupLeader.tr.position, true, 0, -1, 0);
|
|
if (graphNode2 != null)
|
|
{
|
|
moveNode = graphNode2;
|
|
}
|
|
}
|
|
ABPath p = ABPath.ConstructFast(c.node, moveNode, null);
|
|
p.nnConstraint = c.nodeConstraint;
|
|
AstarPath.StartPath(p, false);
|
|
yield return base.StartCoroutine(p.WaitForPath());
|
|
p.Claim(this);
|
|
bool flag = false;
|
|
if (!p.error)
|
|
{
|
|
flag = true;
|
|
}
|
|
p.Release(this, false);
|
|
if (flag)
|
|
{
|
|
c.ClearPathUpdates();
|
|
c.pathTargPosition = (Vector3)moveNode.position;
|
|
c.MakePath(moveNode, 500, false, false, false);
|
|
}
|
|
yield return new WaitForSeconds(0.1f);
|
|
p = null;
|
|
}
|
|
moveNode = null;
|
|
}
|
|
}
|
|
c = null;
|
|
num3 = i;
|
|
}
|
|
}
|
|
this.followerCoroutine = null;
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x0600055C RID: 1372 RVA: 0x00076304 File Offset: 0x00074504
|
|
public void FinishDelay(int delayIndex)
|
|
{
|
|
if (this.temporaryStartNode != null && Links.x.gaia.pathfindingReady)
|
|
{
|
|
int num = this.temporaryStartNode.AllConnectionsFreeParty(0, 0, Links.x.main.ConnectionNumber(), 0);
|
|
if (this.positions.Count > 0)
|
|
{
|
|
this.positions[delayIndex] = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
if (this.walkPointsDay.Count == 0 || this.walkNodesDay.Count == 0)
|
|
{
|
|
this.walkPointsDay.Clear();
|
|
this.walkPointsNight.Clear();
|
|
this.GetPoints(false, true);
|
|
}
|
|
if (this.temporary)
|
|
{
|
|
for (int i = 0; i < this.walkPointsDay.Count; i++)
|
|
{
|
|
this.walkPointsDay[i].position = (Vector3)this.temporaryStartNode.position;
|
|
this.walkNodesDay[i] = this.temporaryStartNode;
|
|
}
|
|
for (int j = 0; j < this.walkPointsNight.Count; j++)
|
|
{
|
|
this.walkPointsNight[j].position = (Vector3)this.temporaryStartNode.position;
|
|
this.walkNodesNight[j] = this.temporaryStartNode;
|
|
}
|
|
}
|
|
foreach (object obj in this.tr)
|
|
{
|
|
Transform transform = (Transform)obj;
|
|
if (transform.gameObject.name.Contains("Day"))
|
|
{
|
|
this.day = transform;
|
|
}
|
|
if (transform.gameObject.name.Contains("Night"))
|
|
{
|
|
this.night = transform;
|
|
}
|
|
}
|
|
if (this.day)
|
|
{
|
|
foreach (object obj2 in this.day)
|
|
{
|
|
Transform transform2 = (Transform)obj2;
|
|
if (transform2 != this.tr)
|
|
{
|
|
transform2.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
}
|
|
if (this.day.childCount == 0)
|
|
{
|
|
this.day.transform.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
base.gameObject.transform.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
if (this.night)
|
|
{
|
|
foreach (object obj3 in this.night)
|
|
{
|
|
Transform transform3 = (Transform)obj3;
|
|
if (transform3 != this.tr)
|
|
{
|
|
transform3.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
}
|
|
if (this.night.childCount == 0)
|
|
{
|
|
this.night.transform.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
base.gameObject.transform.position = (Vector3)this.temporaryStartNode.position;
|
|
}
|
|
if (num != 0 && num != 10000)
|
|
{
|
|
List<Character> list = Links.x.diorama.characters;
|
|
int count = list.Count;
|
|
int k = 0;
|
|
while (k < count)
|
|
{
|
|
Character character = list[k];
|
|
if (character.nodeStationaryID == num || character.nodeMovingID == num)
|
|
{
|
|
GraphNode graphNode = character.FindSlideNode(character, (Vector3)this.temporaryStartNode.position + new Vector3(1f, 0f, 1f), true, false);
|
|
if (graphNode != null && graphNode != character.node && ((Vector3)graphNode.position - character.tr.position).sqrMagnitude < 25f && graphNode.Area == character.node.Area)
|
|
{
|
|
Debug.Log(graphNode.Area.ToString() + " " + character.node.Area.ToString());
|
|
character.SlideTo(graphNode);
|
|
this.delays[delayIndex] = 0f;
|
|
this.characters.Add(null);
|
|
string text = "";
|
|
if (delayIndex < this.states.Count)
|
|
{
|
|
text = this.states[delayIndex];
|
|
}
|
|
this.InstanceCreature(delayIndex, this.thisName, false, (Vector3)this.temporaryStartNode.position, text);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
k++;
|
|
}
|
|
}
|
|
}
|
|
else if (num == 10000)
|
|
{
|
|
Debug.Log(Vector3.Distance((Vector3)this.temporaryStartNode.position, Links.x.main.tr.position));
|
|
if (Vector3.Distance((Vector3)this.temporaryStartNode.position, Links.x.main.tr.position) < 1f)
|
|
{
|
|
GraphNode graphNode2 = Links.x.main.FindSlideNode(Links.x.main, (Vector3)this.temporaryStartNode.position + new Vector3(1f, 0f, 1f), true, false);
|
|
if (graphNode2 != null && graphNode2 != Links.x.main.node && ((Vector3)graphNode2.position - Links.x.main.tr.position).sqrMagnitude < 25f && graphNode2.Area == Links.x.main.node.Area)
|
|
{
|
|
Links.x.main.SlideTo(graphNode2);
|
|
this.delays[delayIndex] = 0f;
|
|
this.characters.Add(null);
|
|
string text2 = "";
|
|
if (delayIndex < this.states.Count)
|
|
{
|
|
text2 = this.states[delayIndex];
|
|
}
|
|
this.InstanceCreature(delayIndex, this.thisName, false, (Vector3)this.temporaryStartNode.position, text2);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.delays[delayIndex] = 0f;
|
|
this.characters.Add(null);
|
|
string text3 = "";
|
|
if (delayIndex < this.states.Count)
|
|
{
|
|
text3 = this.states[delayIndex];
|
|
}
|
|
this.InstanceCreature(delayIndex, this.thisName, false, (Vector3)this.temporaryStartNode.position, text3);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.delays[delayIndex] = 0f;
|
|
this.characters.Add(null);
|
|
string text4 = "";
|
|
if (delayIndex < this.states.Count)
|
|
{
|
|
text4 = this.states[delayIndex];
|
|
}
|
|
this.InstanceCreature(delayIndex, this.thisName, false, (Vector3)this.temporaryStartNode.position, text4);
|
|
}
|
|
bool flag = true;
|
|
for (int l = 0; l < this.delays.Count; l++)
|
|
{
|
|
if (this.delays[l] > 0f)
|
|
{
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
this.waitingForDelay = false;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600055D RID: 1373 RVA: 0x00076ABC File Offset: 0x00074CBC
|
|
public void ReturnToPatrol(Character character)
|
|
{
|
|
if (this.CurrentPointsCount() != 0)
|
|
{
|
|
this.WalkToNextPoint(character);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600055E RID: 1374 RVA: 0x00076AD0 File Offset: 0x00074CD0
|
|
public void WalkToNextPoint(Character character)
|
|
{
|
|
int num = character.patrolNode + 1;
|
|
if (num > this.GetWalkCount() - 1 || num < 0)
|
|
{
|
|
num = 0;
|
|
character.patrolNode = 0;
|
|
}
|
|
if (!character.searching && !character.inCombat)
|
|
{
|
|
GraphNode graphNode = this.GetWalkNodeIndex(num);
|
|
Vector3 walkTurnIndex = this.GetWalkTurnIndex(num);
|
|
if (character.dayNightVanishing)
|
|
{
|
|
if (character.nodeConstraint.Suitable(this.vanishNode))
|
|
{
|
|
graphNode = this.vanishNode;
|
|
}
|
|
else
|
|
{
|
|
graphNode = character.NearNode((Vector3)this.vanishNode.position, true, 0, -1, 0);
|
|
if (graphNode == null)
|
|
{
|
|
graphNode = this.vanishNode;
|
|
}
|
|
}
|
|
}
|
|
if (graphNode != null)
|
|
{
|
|
if (!character.dayNightVanishing)
|
|
{
|
|
character.doTurn = true;
|
|
character.endTurn = walkTurnIndex;
|
|
}
|
|
character.ClearMoveTargets();
|
|
character.ClearPathUpdates();
|
|
int num2 = 500;
|
|
if (character.dayNightVanishing)
|
|
{
|
|
num2 = 30;
|
|
}
|
|
character.MakePath(graphNode, num2, false, false, true);
|
|
character.movingToPatrolNode = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600055F RID: 1375 RVA: 0x00076BB8 File Offset: 0x00074DB8
|
|
public void SetGroupDialogue()
|
|
{
|
|
foreach (Character character in this.characters)
|
|
{
|
|
if (character && character.stats.initiateDialogue != 0 && character.stats.initiateDialogue != 10)
|
|
{
|
|
if (character.stats.initiateDialogue >= 10)
|
|
{
|
|
character.stats.initiateDialogue = 10;
|
|
}
|
|
else
|
|
{
|
|
character.stats.initiateDialogue = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000560 RID: 1376 RVA: 0x00076C54 File Offset: 0x00074E54
|
|
public void RemoveFromScene()
|
|
{
|
|
}
|
|
|
|
// Token: 0x06000561 RID: 1377 RVA: 0x00076C58 File Offset: 0x00074E58
|
|
public void Unsummon(bool immediate)
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
if (this.xmlName.Contains("Acorn") || immediate)
|
|
{
|
|
this.characters[i].DestroyCharacter();
|
|
}
|
|
else
|
|
{
|
|
this.characters[i].DestroyCharacterWait();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000562 RID: 1378 RVA: 0x00076CC6 File Offset: 0x00074EC6
|
|
public Vector3 GetPoint()
|
|
{
|
|
if (this.characters.Count > 0)
|
|
{
|
|
return this.characters[0].tr.position;
|
|
}
|
|
return Vector3.zero;
|
|
}
|
|
|
|
// Token: 0x06000563 RID: 1379 RVA: 0x00076CF2 File Offset: 0x00074EF2
|
|
public TileEffects GetTileEffect()
|
|
{
|
|
return this.tileEffect;
|
|
}
|
|
|
|
// Token: 0x06000564 RID: 1380 RVA: 0x00076CFA File Offset: 0x00074EFA
|
|
public void SetTileEffect(TileEffects t)
|
|
{
|
|
this.tileEffect = t;
|
|
}
|
|
|
|
// Token: 0x06000565 RID: 1381 RVA: 0x00076D04 File Offset: 0x00074F04
|
|
public Character GetLeader()
|
|
{
|
|
Character character = null;
|
|
Transform parent = base.gameObject.transform.parent;
|
|
if (parent.gameObject != Links.x.diorama.creatures)
|
|
{
|
|
foreach (object obj in parent)
|
|
{
|
|
CreatureActions component = ((Transform)obj).gameObject.GetComponent<CreatureActions>();
|
|
if (component && component.creatures.isCreatureGroupLeader)
|
|
{
|
|
character = component.GetFirstCharacter();
|
|
}
|
|
}
|
|
}
|
|
return character;
|
|
}
|
|
|
|
// Token: 0x06000566 RID: 1382 RVA: 0x00076DAC File Offset: 0x00074FAC
|
|
public void SetNewFirstLeader(Character c)
|
|
{
|
|
Debug.Log("New leader " + ((c != null) ? c.ToString() : null));
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i] && !this.characters[i].dead && !this.characters[i].stunned)
|
|
{
|
|
if (c == this.characters[i])
|
|
{
|
|
this.Leader(c);
|
|
this.characters[i].stats.defendMainInCombat = false;
|
|
this.characters[i].stats.defendingCharacter = null;
|
|
}
|
|
else
|
|
{
|
|
this.Follower(this.characters[i], c);
|
|
this.characters[i].stats.defendMainInCombat = true;
|
|
this.characters[i].stats.defendingCharacter = c;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000567 RID: 1383 RVA: 0x00076EC0 File Offset: 0x000750C0
|
|
public void LeaderDied(Character leader)
|
|
{
|
|
MasterAudio.PlaySound3DAtVector3AndForget("Interactives", Links.x.main.tr.position, 1f, new float?(1f), 0.5f, "Chest Break", null);
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i] && !this.characters[i].dead && !this.characters[i].stunned)
|
|
{
|
|
Effects existingEffect = this.characters[i].stats.GetExistingEffect("Follower");
|
|
if (existingEffect && existingEffect.source == leader)
|
|
{
|
|
existingEffect.Healed(false, true);
|
|
this.characters[i].stats.defendMainInCombat = false;
|
|
this.characters[i].stats.defendingCharacter = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000568 RID: 1384 RVA: 0x00076FCE File Offset: 0x000751CE
|
|
public void SparkleFriends(Character leader)
|
|
{
|
|
if (this.creatures.pickOneLeader)
|
|
{
|
|
base.StartCoroutine(this.Followers(leader));
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000569 RID: 1385 RVA: 0x00076FEB File Offset: 0x000751EB
|
|
private IEnumerator Followers(Character leader)
|
|
{
|
|
yield return new WaitForSeconds(0.1f);
|
|
if (leader.actions)
|
|
{
|
|
leader.actions.CheckIfRunningAI();
|
|
leader.ClearNodePath();
|
|
leader.actions.ai.SkipWatch();
|
|
leader.actions.ai.busy = true;
|
|
}
|
|
int count = 0;
|
|
int num;
|
|
for (int i = 0; i < this.characters.Count; i = num + 1)
|
|
{
|
|
if (this.characters[i] && !this.characters[i].dead && !this.characters[i].stunned && !this.characters[i].stats.isLeader && !leader.dead && !leader.stunned && !this.characters[i].stats.HasEffect("Follower"))
|
|
{
|
|
if ((this.characters[i].currentPosition - Links.x.main.currentPosition).sqrMagnitude < 900f)
|
|
{
|
|
MasterAudio.PlaySoundAndForget("Feedback", Random.Range(0.3f, 0.5f), new float?(1f), 0f, "Song Learned", null);
|
|
}
|
|
leader.SetRotation(Quaternion.LookRotation(this.characters[i].currentPosition - leader.currentPosition), false, true);
|
|
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(87);
|
|
pooledGameObject.transform.position = this.characters[i].body.HeadPosition(0f);
|
|
pooledGameObject.SetActive(true);
|
|
this.Follower(this.characters[i], leader);
|
|
this.characters[i].stats.defendMainInCombat = true;
|
|
this.characters[i].stats.defendingCharacter = leader;
|
|
yield return new WaitForSeconds(0.35f);
|
|
num = count;
|
|
count = num + 1;
|
|
leader.actions.CheckIfRunningAI();
|
|
leader.ClearNodePath();
|
|
if (count % 2 == 0)
|
|
{
|
|
leader.actions.ai.SkipWatch();
|
|
}
|
|
}
|
|
num = i;
|
|
}
|
|
if (leader.actions)
|
|
{
|
|
Links.x.combat.GetNextAction(leader);
|
|
leader.actions.ai.busy = false;
|
|
}
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x0600056A RID: 1386 RVA: 0x00077004 File Offset: 0x00075204
|
|
public Character GetFirstAsLeader(Character c)
|
|
{
|
|
Character character = null;
|
|
if (this.characters.Count > 0)
|
|
{
|
|
character = this.characters[0];
|
|
if (character)
|
|
{
|
|
if (!character.dead && !character.stunned && character != c)
|
|
{
|
|
return character;
|
|
}
|
|
if (character == c && character != null)
|
|
{
|
|
this.Leader(c);
|
|
character = null;
|
|
}
|
|
}
|
|
}
|
|
return character;
|
|
}
|
|
|
|
// Token: 0x0600056B RID: 1387 RVA: 0x00077070 File Offset: 0x00075270
|
|
private void Follower(Character c, Character leader)
|
|
{
|
|
Effects effects = c.gameObject.AddComponent<Effects>();
|
|
Links.x.cellar.AddEffects(effects);
|
|
effects.source = leader;
|
|
effects.target = c;
|
|
effects.effectName = "Follower";
|
|
effects.sourceLevel = (float)c.combatLevel;
|
|
effects.Inflicted(false);
|
|
}
|
|
|
|
// Token: 0x0600056C RID: 1388 RVA: 0x000770C8 File Offset: 0x000752C8
|
|
private void Leader(Character c)
|
|
{
|
|
c.stats.isLeader = true;
|
|
Effects effects = c.gameObject.AddComponent<Effects>();
|
|
Links.x.cellar.AddEffects(effects);
|
|
effects.source = c;
|
|
effects.target = c;
|
|
effects.effectName = "Leader";
|
|
effects.sourceLevel = (float)c.combatLevel;
|
|
effects.Inflicted(false);
|
|
}
|
|
|
|
// Token: 0x0600056D RID: 1389 RVA: 0x0007712C File Offset: 0x0007532C
|
|
public void AddDroppedItemToList(int id, int amt, int socket1, int socket2, int socket3, int socket4, int socket5, int socket6, int dur1, int dur2)
|
|
{
|
|
if (this.items == null)
|
|
{
|
|
this.items = new List<int>();
|
|
}
|
|
this.items.Add(id);
|
|
this.items.Add(amt);
|
|
this.items.Add(socket1);
|
|
this.items.Add(socket2);
|
|
this.items.Add(socket3);
|
|
this.items.Add(socket4);
|
|
this.items.Add(socket5);
|
|
this.items.Add(socket6);
|
|
this.items.Add(dur1);
|
|
this.items.Add(dur2);
|
|
this.items.Add(0);
|
|
this.MakeItemSaveString();
|
|
}
|
|
|
|
// Token: 0x0600056E RID: 1390 RVA: 0x000771E0 File Offset: 0x000753E0
|
|
public void MakeItemSaveString()
|
|
{
|
|
if (this.str == null)
|
|
{
|
|
this.str = new StringFast(64);
|
|
}
|
|
int count = this.items.Count;
|
|
int num = 0;
|
|
this.str.Clear();
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (num == 0)
|
|
{
|
|
Library.Inventory invRow = Links.x.library.GetInvRow(this.items[i]);
|
|
this.str.Append(invRow._Name);
|
|
}
|
|
else
|
|
{
|
|
this.str.Append(this.items[i]);
|
|
}
|
|
if (i != this.items.Count - 1)
|
|
{
|
|
this.str.Append(",");
|
|
}
|
|
num++;
|
|
if (num == 11)
|
|
{
|
|
num = 0;
|
|
}
|
|
}
|
|
this.savedItems = this.str.ToString();
|
|
}
|
|
|
|
// Token: 0x0600056F RID: 1391 RVA: 0x000772B0 File Offset: 0x000754B0
|
|
public void UpdateItems()
|
|
{
|
|
if (this.items == null)
|
|
{
|
|
this.items = new List<int>();
|
|
}
|
|
this.items.Clear();
|
|
List<global::Item> list = Links.x.merchant.items;
|
|
for (int i = 0; i < list.Count; i++)
|
|
{
|
|
global::Item item = list[i];
|
|
this.items.Add(item.ID);
|
|
this.items.Add(item.stackSize);
|
|
this.items.Add((int)item.socketA.x);
|
|
this.items.Add((int)item.socketA.y);
|
|
this.items.Add((int)item.socketA.z);
|
|
this.items.Add((int)item.socketB.x);
|
|
this.items.Add((int)item.socketB.y);
|
|
this.items.Add((int)item.socketB.z);
|
|
this.items.Add((int)item.durability.x);
|
|
this.items.Add((int)item.durability.y);
|
|
this.items.Add((int)item.durability.z);
|
|
}
|
|
this.MakeItemSaveString();
|
|
}
|
|
|
|
// Token: 0x06000570 RID: 1392 RVA: 0x00077404 File Offset: 0x00075604
|
|
public GraphNode NearNode(Vector3 pos)
|
|
{
|
|
if (Links.x.gaia.noAstar)
|
|
{
|
|
return null;
|
|
}
|
|
this.nodeConstraint.constrainWalkability = true;
|
|
this.nodeConstraint.walkable = true;
|
|
this.nodeConstraint.constrainTags = false;
|
|
this.nodeConstraint.checkCircleID = 0;
|
|
this.nodeConstraint.passID = 0;
|
|
this.nodeConstraint.passID2 = 0;
|
|
this.nodeConstraint.constrainPenalty = 0;
|
|
this.nodeConstraint.checkConnections = 0;
|
|
this.nodeConstraint.constrainToArea = -1;
|
|
if (this.sailing)
|
|
{
|
|
this.nodeConstraint.constrainToEnvironment = 2;
|
|
this.nodeConstraint.checkConnections = 8;
|
|
}
|
|
else if (this.movesOnWater)
|
|
{
|
|
this.nodeConstraint.constrainToEnvironment = 2;
|
|
}
|
|
else if (!this.hasFirstNode)
|
|
{
|
|
this.nodeConstraint.constrainToEnvironment = -1;
|
|
}
|
|
else
|
|
{
|
|
this.nodeConstraint.constrainToEnvironment = 1;
|
|
}
|
|
GraphNode node = AstarPath.active.GetNearest(pos, this.nodeConstraint).node;
|
|
if (!this.hasFirstNode && node != null)
|
|
{
|
|
this.hasFirstNode = true;
|
|
if (node.environment == 2 && !this.sailing && !this.creatureBoat && !this.xmlName.Contains("Boro"))
|
|
{
|
|
this.movesOnWater = true;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
|
|
// Token: 0x06000571 RID: 1393 RVA: 0x0007754C File Offset: 0x0007574C
|
|
public void GetPoints(bool questSwap, bool getNodes)
|
|
{
|
|
Transform transform = this.tr;
|
|
if (this.creatures.hasTimedLocations)
|
|
{
|
|
this.ClearTimePoints();
|
|
}
|
|
if (questSwap)
|
|
{
|
|
this.walkPointsDay.Clear();
|
|
this.walkNodesDay.Clear();
|
|
this.vanishPointsDay.Clear();
|
|
this.vanishNodesDay.Clear();
|
|
this.walkPointsNight.Clear();
|
|
this.walkNodesNight.Clear();
|
|
this.vanishPointsNight.Clear();
|
|
this.vanishNodesNight.Clear();
|
|
this.day = null;
|
|
this.night = null;
|
|
this.dayVanish = null;
|
|
this.nightVanish = null;
|
|
this.hasDayNightCycle = false;
|
|
this.daySleep = false;
|
|
this.nightSleep = false;
|
|
if (!this.tr)
|
|
{
|
|
this.tr = base.gameObject.transform;
|
|
}
|
|
transform = this.tr;
|
|
foreach (object obj in transform)
|
|
{
|
|
Transform transform2 = (Transform)obj;
|
|
if (transform2 && transform2.gameObject.name.Contains("Quest"))
|
|
{
|
|
transform = transform2;
|
|
}
|
|
}
|
|
}
|
|
this.hasDayNightCycle = true;
|
|
foreach (object obj2 in transform)
|
|
{
|
|
Transform transform3 = (Transform)obj2;
|
|
if (transform3)
|
|
{
|
|
if (transform3.gameObject.name.Contains("Day") && !transform3.gameObject.name.Contains("Vanish"))
|
|
{
|
|
this.day = transform3;
|
|
}
|
|
if (transform3.gameObject.name.Contains("Night") && !transform3.gameObject.name.Contains("Vanish"))
|
|
{
|
|
this.night = transform3;
|
|
}
|
|
if (transform3.gameObject.name.Contains("Day") && transform3.gameObject.name.Contains("Vanish"))
|
|
{
|
|
this.dayVanish = transform3;
|
|
this.disappearDay = true;
|
|
}
|
|
if (transform3.gameObject.name.Contains("Night") && transform3.gameObject.name.Contains("Vanish"))
|
|
{
|
|
this.nightVanish = transform3;
|
|
this.disappearNight = true;
|
|
}
|
|
if (transform3.gameObject.name.Contains("DaySleep"))
|
|
{
|
|
this.daySleep = true;
|
|
}
|
|
if (transform3.gameObject.name.Contains("NightSleep"))
|
|
{
|
|
this.nightSleep = true;
|
|
}
|
|
if (transform3.gameObject.name.Contains("DayNight"))
|
|
{
|
|
this.hasDayNightCycle = false;
|
|
}
|
|
if (transform3.gameObject.name.Contains("Activation"))
|
|
{
|
|
this.activation = transform3;
|
|
}
|
|
if (transform3.gameObject.name.Contains("Deactivation"))
|
|
{
|
|
this.deactivation = transform3;
|
|
}
|
|
}
|
|
}
|
|
if (this.dayVanish)
|
|
{
|
|
foreach (object obj3 in this.dayVanish)
|
|
{
|
|
Transform transform4 = (Transform)obj3;
|
|
if (transform4 != transform)
|
|
{
|
|
this.vanishPointsDay.Add(transform4);
|
|
}
|
|
}
|
|
if (this.dayVanish.childCount == 0)
|
|
{
|
|
this.vanishPointsDay.Add(this.dayVanish);
|
|
}
|
|
}
|
|
if (this.nightVanish)
|
|
{
|
|
foreach (object obj4 in this.nightVanish)
|
|
{
|
|
Transform transform5 = (Transform)obj4;
|
|
if (transform5 != transform)
|
|
{
|
|
this.vanishPointsNight.Add(transform5);
|
|
}
|
|
}
|
|
if (this.nightVanish.childCount == 0)
|
|
{
|
|
this.vanishPointsNight.Add(this.nightVanish);
|
|
}
|
|
}
|
|
if (this.day)
|
|
{
|
|
foreach (object obj5 in this.day)
|
|
{
|
|
Transform transform6 = (Transform)obj5;
|
|
bool flag = true;
|
|
if (this.creatures.hasTimedLocations)
|
|
{
|
|
flag = this.CheckForTimePoint(transform6);
|
|
}
|
|
if (transform6 != transform && flag)
|
|
{
|
|
this.walkPointsDay.Add(transform6);
|
|
}
|
|
}
|
|
if (this.day.childCount == 0)
|
|
{
|
|
this.walkPointsDay.Add(this.day);
|
|
}
|
|
}
|
|
else if (this.dayVanish && this.vanishPointsDay.Count > 0)
|
|
{
|
|
this.walkPointsDay.Add(this.vanishPointsDay[0]);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("No points for day for " + ((this != null) ? this.ToString() : null));
|
|
this.walkPointsDay.Add(base.gameObject.transform);
|
|
}
|
|
if (this.night)
|
|
{
|
|
foreach (object obj6 in this.night)
|
|
{
|
|
Transform transform7 = (Transform)obj6;
|
|
bool flag2 = true;
|
|
if (this.creatures.hasTimedLocations)
|
|
{
|
|
flag2 = this.CheckForTimePoint(transform7);
|
|
}
|
|
if (transform7 != transform && flag2)
|
|
{
|
|
this.walkPointsNight.Add(transform7);
|
|
}
|
|
}
|
|
if (this.night.childCount == 0)
|
|
{
|
|
this.walkPointsNight.Add(this.night);
|
|
}
|
|
}
|
|
else if (this.nightVanish && this.vanishPointsNight.Count > 0)
|
|
{
|
|
this.walkPointsNight.Add(this.vanishPointsNight[0]);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("No points for night for " + ((this != null) ? this.ToString() : null));
|
|
this.walkPointsNight.Add(base.gameObject.transform);
|
|
}
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i])
|
|
{
|
|
this.characters[i].patrolNode = i;
|
|
}
|
|
}
|
|
if (getNodes)
|
|
{
|
|
this.GetPointNodes();
|
|
this.waitTime = 0f;
|
|
bool dayNight = this.GetDayNight(false);
|
|
for (int j = 0; j < this.characters.Count; j++)
|
|
{
|
|
if (dayNight)
|
|
{
|
|
this.StartDay(true);
|
|
}
|
|
else
|
|
{
|
|
this.StartNight(true);
|
|
}
|
|
this.CheckSleep(this.characters[j]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000572 RID: 1394 RVA: 0x00077C74 File Offset: 0x00075E74
|
|
public void SetWaitTime()
|
|
{
|
|
if (this.waitTime > 0f)
|
|
{
|
|
this.waitTime = Time.timeSinceLevelLoad + this.creatures.patrolDelay;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000573 RID: 1395 RVA: 0x00077C9C File Offset: 0x00075E9C
|
|
private void ClearTimePoints()
|
|
{
|
|
this.morning1 = null;
|
|
this.morning2 = null;
|
|
this.morning3 = null;
|
|
this.morning4 = null;
|
|
this.morning5 = null;
|
|
this.morning6 = null;
|
|
this.afternoon1 = null;
|
|
this.afternoon2 = null;
|
|
this.afternoon3 = null;
|
|
this.afternoon4 = null;
|
|
this.afternoon5 = null;
|
|
this.afternoon6 = null;
|
|
this.evening1 = null;
|
|
this.evening2 = null;
|
|
this.evening3 = null;
|
|
this.evening4 = null;
|
|
this.evening5 = null;
|
|
this.evening6 = null;
|
|
this.night1 = null;
|
|
this.night2 = null;
|
|
this.night3 = null;
|
|
this.night4 = null;
|
|
this.night5 = null;
|
|
this.night6 = null;
|
|
}
|
|
|
|
// Token: 0x06000574 RID: 1396 RVA: 0x00077D54 File Offset: 0x00075F54
|
|
private bool CheckForTimePoint(Transform t)
|
|
{
|
|
string name = t.gameObject.name;
|
|
if (name == "Morning1")
|
|
{
|
|
this.morning1 = t;
|
|
return false;
|
|
}
|
|
if (name == "Morning2")
|
|
{
|
|
this.morning2 = t;
|
|
return false;
|
|
}
|
|
if (name == "Morning3")
|
|
{
|
|
this.morning3 = t;
|
|
return false;
|
|
}
|
|
if (name == "Morning4")
|
|
{
|
|
this.morning4 = t;
|
|
return false;
|
|
}
|
|
if (name == "Morning5")
|
|
{
|
|
this.morning5 = t;
|
|
return false;
|
|
}
|
|
if (name == "Morning6")
|
|
{
|
|
this.morning6 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon1")
|
|
{
|
|
this.afternoon1 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon2")
|
|
{
|
|
this.afternoon2 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon3")
|
|
{
|
|
this.afternoon3 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon4")
|
|
{
|
|
this.afternoon4 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon5")
|
|
{
|
|
this.afternoon5 = t;
|
|
return false;
|
|
}
|
|
if (name == "Afternoon6")
|
|
{
|
|
this.afternoon6 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening1")
|
|
{
|
|
this.evening1 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening2")
|
|
{
|
|
this.evening2 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening3")
|
|
{
|
|
this.evening3 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening4")
|
|
{
|
|
this.evening4 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening5")
|
|
{
|
|
this.evening5 = t;
|
|
return false;
|
|
}
|
|
if (name == "Evening6")
|
|
{
|
|
this.evening6 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night1")
|
|
{
|
|
this.night1 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night2")
|
|
{
|
|
this.night2 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night3")
|
|
{
|
|
this.night3 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night4")
|
|
{
|
|
this.night4 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night5")
|
|
{
|
|
this.night5 = t;
|
|
return false;
|
|
}
|
|
if (name == "Night6")
|
|
{
|
|
this.night6 = t;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x06000575 RID: 1397 RVA: 0x00077F80 File Offset: 0x00076180
|
|
public void CheckIfHasTimeLocation(bool timeJump)
|
|
{
|
|
if (this.creatures.hasTimedLocations)
|
|
{
|
|
bool flag = false;
|
|
int num = (int)Mathf.Floor(Links.x.gameplay.gameHours);
|
|
if (num == 22 && this.morning1)
|
|
{
|
|
this.HasTimedLocation(this.morning1, num);
|
|
flag = true;
|
|
}
|
|
if (num == 23 && this.morning2)
|
|
{
|
|
this.HasTimedLocation(this.morning2, num);
|
|
flag = true;
|
|
}
|
|
if (num == 0 && this.morning3)
|
|
{
|
|
this.HasTimedLocation(this.morning3, num);
|
|
flag = true;
|
|
}
|
|
if (num == 1 && this.morning4)
|
|
{
|
|
this.HasTimedLocation(this.morning4, num);
|
|
flag = true;
|
|
}
|
|
if (num == 2 && this.morning5)
|
|
{
|
|
this.HasTimedLocation(this.morning5, num);
|
|
flag = true;
|
|
}
|
|
if (num == 3 && this.morning6)
|
|
{
|
|
this.HasTimedLocation(this.morning6, num);
|
|
flag = true;
|
|
}
|
|
if (num == 4 && this.afternoon1)
|
|
{
|
|
this.HasTimedLocation(this.afternoon1, num);
|
|
flag = true;
|
|
}
|
|
if (num == 5 && this.afternoon2)
|
|
{
|
|
this.HasTimedLocation(this.afternoon2, num);
|
|
flag = true;
|
|
}
|
|
if (num == 6 && this.afternoon3)
|
|
{
|
|
this.HasTimedLocation(this.afternoon3, num);
|
|
flag = true;
|
|
}
|
|
if (num == 7 && this.afternoon4)
|
|
{
|
|
this.HasTimedLocation(this.afternoon4, num);
|
|
flag = true;
|
|
}
|
|
if (num == 8 && this.afternoon5)
|
|
{
|
|
this.HasTimedLocation(this.afternoon5, num);
|
|
flag = true;
|
|
}
|
|
if (num == 9 && this.afternoon6)
|
|
{
|
|
this.HasTimedLocation(this.afternoon6, num);
|
|
flag = true;
|
|
}
|
|
if (num == 10 && this.evening1)
|
|
{
|
|
this.HasTimedLocation(this.evening1, num);
|
|
flag = true;
|
|
}
|
|
if (num == 11 && this.evening2)
|
|
{
|
|
this.HasTimedLocation(this.evening2, num);
|
|
flag = true;
|
|
}
|
|
if (num == 12 && this.evening3)
|
|
{
|
|
this.HasTimedLocation(this.evening3, num);
|
|
flag = true;
|
|
}
|
|
if (num == 13 && this.evening4)
|
|
{
|
|
this.HasTimedLocation(this.evening4, num);
|
|
flag = true;
|
|
}
|
|
if (num == 14 && this.evening5)
|
|
{
|
|
this.HasTimedLocation(this.evening5, num);
|
|
flag = true;
|
|
}
|
|
if (num == 15 && this.evening6)
|
|
{
|
|
this.HasTimedLocation(this.evening6, num);
|
|
flag = true;
|
|
}
|
|
if (num == 16 && this.night1)
|
|
{
|
|
this.HasTimedLocation(this.night1, num);
|
|
flag = true;
|
|
}
|
|
if (num == 17 && this.night2)
|
|
{
|
|
this.HasTimedLocation(this.night2, num);
|
|
flag = true;
|
|
}
|
|
if (num == 18 && this.night3)
|
|
{
|
|
this.HasTimedLocation(this.night3, num);
|
|
flag = true;
|
|
}
|
|
if (num == 19 && this.night4)
|
|
{
|
|
this.HasTimedLocation(this.night4, num);
|
|
flag = true;
|
|
}
|
|
if (num == 20 && this.night5)
|
|
{
|
|
this.HasTimedLocation(this.night5, num);
|
|
flag = true;
|
|
}
|
|
if (num == 21 && this.night6)
|
|
{
|
|
this.HasTimedLocation(this.night6, num);
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
{
|
|
this.hasTimePoint = -1;
|
|
if (this.questTimePoint)
|
|
{
|
|
if (timeJump)
|
|
{
|
|
this.questTimePoint.instantFinish = true;
|
|
}
|
|
if (this.questTimePoint.busy || this.questTimePoint.instantFinish)
|
|
{
|
|
this.questTimePoint.destroyOnComplete = true;
|
|
return;
|
|
}
|
|
this.questTimePoint.Ending();
|
|
Object.Destroy(this.questTimePoint);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.hasTimePoint = -1;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000576 RID: 1398 RVA: 0x00078330 File Offset: 0x00076530
|
|
private void HasTimedLocation(Transform pt, int hr)
|
|
{
|
|
if (this.hasTimePoint != hr && this.characters.Count > 0 && this.characters[0])
|
|
{
|
|
Character character = this.characters[0];
|
|
bool flag = true;
|
|
if (this.creatures.changePointsFromQuest != Creatures.Adventures.None && this.creatures.changePointsFromQuest == Creatures.Adventures.C6_Willowmaid && (hr == 17 || hr == 20))
|
|
{
|
|
Library.Inventory inventory = Links.x.library.GetInvRowFromName("DryadFlower");
|
|
int num = this.characters[0].HasItem(inventory._ID);
|
|
int num2 = -1;
|
|
if (num == -1 && hr == 20)
|
|
{
|
|
inventory = Links.x.library.GetInvRowFromName("DryadFlowerDead");
|
|
num2 = this.characters[0].HasItem(inventory._ID);
|
|
}
|
|
if (num > -1 && hr == 20 && num2 == -1)
|
|
{
|
|
flag = false;
|
|
this.hasTimePoint = -1;
|
|
}
|
|
if (num <= -1 && hr == 17)
|
|
{
|
|
flag = false;
|
|
this.hasTimePoint = -1;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
this.hasTimePoint = hr;
|
|
this.timeNode = this.NearNode(pt.position);
|
|
this.timeRot = pt.rotation;
|
|
if (Records.x.editor)
|
|
{
|
|
string text = "Found time node for ";
|
|
Character character2 = character;
|
|
Debug.Log(text + ((character2 != null) ? character2.ToString() : null) + " " + hr.ToString());
|
|
}
|
|
if (this.timeNode == null)
|
|
{
|
|
this.hasTimePoint = -1;
|
|
return;
|
|
}
|
|
if (!this.questTimePoint)
|
|
{
|
|
if (!character.hasActions)
|
|
{
|
|
character.ClearNodePath();
|
|
character.TargetReached();
|
|
}
|
|
this.questTimePoint = base.gameObject.AddComponent<QuestTimePoint>();
|
|
this.questTimePoint.character = character;
|
|
this.questTimePoint.hour = hr;
|
|
this.questTimePoint.destination = (Vector3)this.timeNode.position;
|
|
this.questTimePoint.creatures = this;
|
|
this.questTimePoint.Setup(this.characterRow);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000577 RID: 1399 RVA: 0x0007852C File Offset: 0x0007672C
|
|
private void GetPointNodes()
|
|
{
|
|
if (this.walkNodesDay.Count != this.walkPointsDay.Count)
|
|
{
|
|
for (int i = 0; i < this.walkPointsDay.Count; i++)
|
|
{
|
|
GraphNode graphNode = this.NearNode(this.walkPointsDay[i].position);
|
|
this.walkNodesDay.Add(graphNode);
|
|
if (graphNode != null)
|
|
{
|
|
this.walkPointsDay[i].position = (Vector3)graphNode.position;
|
|
}
|
|
if (Records.x.editor && !this.summons && graphNode == null)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
(this != null) ? this.ToString() : null,
|
|
" has null day node at index ",
|
|
i.ToString(),
|
|
", position is: ",
|
|
this.walkPointsDay[i].transform.position.ToString(),
|
|
", is sailing: ",
|
|
this.sailing.ToString()
|
|
}));
|
|
}
|
|
}
|
|
for (int j = 0; j < this.walkPointsNight.Count; j++)
|
|
{
|
|
GraphNode graphNode2 = this.NearNode(this.walkPointsNight[j].position);
|
|
this.walkNodesNight.Add(graphNode2);
|
|
if (graphNode2 != null)
|
|
{
|
|
this.walkPointsNight[j].position = (Vector3)graphNode2.position;
|
|
}
|
|
}
|
|
if (this.dayVanish)
|
|
{
|
|
for (int k = 0; k < this.vanishPointsDay.Count; k++)
|
|
{
|
|
GraphNode graphNode3 = this.NearNode(this.vanishPointsDay[k].position);
|
|
this.vanishNodesDay.Add(graphNode3);
|
|
if (graphNode3 != null)
|
|
{
|
|
this.vanishPointsDay[k].position = (Vector3)graphNode3.position;
|
|
}
|
|
}
|
|
}
|
|
if (this.nightVanish)
|
|
{
|
|
for (int l = 0; l < this.vanishPointsNight.Count; l++)
|
|
{
|
|
GraphNode graphNode4 = this.NearNode(this.vanishPointsNight[l].position);
|
|
this.vanishNodesNight.Add(graphNode4);
|
|
if (graphNode4 != null)
|
|
{
|
|
this.vanishPointsNight[l].position = (Vector3)graphNode4.position;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000578 RID: 1400 RVA: 0x00078784 File Offset: 0x00076984
|
|
public void CheckQuestSwap()
|
|
{
|
|
if (this.creatures.changePointsFromQuest != Creatures.Adventures.None)
|
|
{
|
|
string text = this.creatures.changePointsFromQuest.ToString();
|
|
QuestState questState = QuestLog.GetQuestState(text);
|
|
QuestState questState2 = Records.x.StringToQuestState(this.creatures.changePointsFromQuestState.ToString());
|
|
if (questState == questState2)
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
(this != null) ? this.ToString() : null,
|
|
" checking for point swap for quest: ",
|
|
text,
|
|
", state is ",
|
|
questState.ToString(),
|
|
", looking for ",
|
|
questState2.ToString()
|
|
}));
|
|
}
|
|
this.questPointSwap = true;
|
|
this.GetPoints(this.questPointSwap, true);
|
|
}
|
|
else if (this.questPointSwap)
|
|
{
|
|
this.questPointSwap = false;
|
|
this.GetPoints(this.questPointSwap, true);
|
|
}
|
|
}
|
|
if (!this.deactivating)
|
|
{
|
|
QuestState questState3 = QuestLog.GetQuestState(this.creatures.deactivateFromQuest.ToString());
|
|
string text2 = this.creatures.deactivateQuestState.ToString();
|
|
QuestState questState4 = Records.x.StringToQuestState(text2);
|
|
if (questState3 == questState4 && this.creatures.deactivateQuestState != Creatures.AdventureStates.NotApplicable)
|
|
{
|
|
this.CheckDeactivation();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000579 RID: 1401 RVA: 0x000788E0 File Offset: 0x00076AE0
|
|
public void EveryoneLeave()
|
|
{
|
|
for (int i = 0; i < this.characters.Count; i++)
|
|
{
|
|
if (this.characters[i] && !this.characters[i].dead && !this.characters[i].missing)
|
|
{
|
|
this.characters[i].Missing();
|
|
}
|
|
}
|
|
this.creatures.promptHasSetThisAsMissing = true;
|
|
}
|
|
|
|
// Token: 0x0600057A RID: 1402 RVA: 0x0007895C File Offset: 0x00076B5C
|
|
public bool CheckDeactivation()
|
|
{
|
|
Character firstCharacter = this.GetFirstCharacter();
|
|
if (!firstCharacter)
|
|
{
|
|
return false;
|
|
}
|
|
if (!this.deactivating && this.deactivation)
|
|
{
|
|
Transform child = this.deactivation;
|
|
if (this.deactivation.childCount > 0)
|
|
{
|
|
child = this.deactivation.GetChild(0);
|
|
}
|
|
this.deactivationNode = firstCharacter.NearNode(child.position, false, 0, -1, 0);
|
|
this.deactivating = true;
|
|
}
|
|
if (!firstCharacter.deactivating && this.deactivation)
|
|
{
|
|
firstCharacter.LeaveToDeactivationPoint();
|
|
}
|
|
if (firstCharacter.dayNightVanishing)
|
|
{
|
|
firstCharacter.dayNightVanishing = false;
|
|
}
|
|
if (firstCharacter.vanished)
|
|
{
|
|
firstCharacter.TurnScriptsOn();
|
|
firstCharacter.vanished = false;
|
|
}
|
|
if (this.deactivation)
|
|
{
|
|
firstCharacter.alwaysOn = true;
|
|
float sqrMagnitude = ((Vector3)this.deactivationNode.position - firstCharacter.tr.position).sqrMagnitude;
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.Log("distance to deactivate: " + ((this != null) ? this.ToString() : null) + " " + sqrMagnitude.ToString());
|
|
}
|
|
if (sqrMagnitude < 20f)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (Character character in this.characters)
|
|
{
|
|
character.Leave(true);
|
|
string text = "Character fleeing to leave scene ";
|
|
Character character2 = character;
|
|
Debug.Log(text + ((character2 != null) ? character2.ToString() : null));
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x0600057B RID: 1403 RVA: 0x00078AF0 File Offset: 0x00076CF0
|
|
public void CheckVIP()
|
|
{
|
|
if (this.creatures.vipQuest != Creatures.Adventures.None)
|
|
{
|
|
string text = this.creatures.vipQuest.ToString();
|
|
QuestState questState = QuestLog.GetQuestState(text);
|
|
string text2 = this.creatures.vipQuestStartState.ToString();
|
|
QuestState questState2 = Records.x.StringToQuestState(text2);
|
|
string text3 = this.creatures.vipQuestEndState.ToString();
|
|
QuestState questState3 = Records.x.StringToQuestState(text3);
|
|
if (questState == questState2 && this.creatures.vipQuestStartState != Creatures.AdventureStates.NotApplicable)
|
|
{
|
|
this.vipFollow = true;
|
|
if (Links.x.main && this.characters.Count > 0)
|
|
{
|
|
Character character = this.characters[0];
|
|
if (character)
|
|
{
|
|
float sqrMagnitude = (Links.x.main.tr.position - character.tr.position).sqrMagnitude;
|
|
if (Links.x.main.node != null && character.node != null && character.hostility != 2 && sqrMagnitude < 3600f && Links.x.main.node.Area == character.node.Area)
|
|
{
|
|
if (!character.vipFollow)
|
|
{
|
|
character.GetHealthBar();
|
|
}
|
|
character.vipFollow = true;
|
|
GraphNode graphNode = character.NearNode(Vector3.Lerp(character.tr.position, Links.x.main.tr.position, 0.8f), true, 0, -1, 0);
|
|
if (graphNode != null)
|
|
{
|
|
character.running = true;
|
|
character.MoveBackEmpty();
|
|
character.MakePath(graphNode, 200, false, false, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (questState == questState3 && this.creatures.vipQuestEndState != Creatures.AdventureStates.NotApplicable)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"ended vip from from quest: ",
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
text,
|
|
" ",
|
|
Records.x.StringToQuestState(this.creatures.activateQuestState.ToString()).ToString(),
|
|
" ",
|
|
questState.ToString()
|
|
}));
|
|
if (this.vipFollow)
|
|
{
|
|
this.CheckQuestSwap();
|
|
this.vipFollow = false;
|
|
if (this.characters.Count > 0 && this.characters[0])
|
|
{
|
|
this.characters[0].vipFollow = false;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else if (this.characters.Count > 0 && this.characters[0] && this.characters[0].hostility > 1)
|
|
{
|
|
this.characters[0].vipFollow = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600057C RID: 1404 RVA: 0x00078E00 File Offset: 0x00077000
|
|
public void VIPFail()
|
|
{
|
|
this.vipFollow = false;
|
|
if (this.characters.Count > 0)
|
|
{
|
|
Character character = this.characters[0];
|
|
if (character)
|
|
{
|
|
Character character2 = character;
|
|
Debug.Log(((character2 != null) ? character2.ToString() : null) + " vip fail");
|
|
character.vipFollow = false;
|
|
character.ReturnHealthBar();
|
|
if (character.stats.characterRow._SetQuestStateOnDeath != "")
|
|
{
|
|
QuestLog.SetQuestState(character.stats.characterRow._Quest, Records.x.StringToQuestState(character.stats.characterRow._SetQuestStateOnDeath));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600057D RID: 1405 RVA: 0x00078EB0 File Offset: 0x000770B0
|
|
public bool CanActivate()
|
|
{
|
|
if (this.creatures.promptHasSetThisAsMissing)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.creatures.activateFromQuest == Creatures.Adventures.None)
|
|
{
|
|
return true;
|
|
}
|
|
string text = this.creatures.activateFromQuest.ToString();
|
|
QuestState questState = QuestLog.GetQuestState(text);
|
|
string text2 = this.creatures.activateQuestState.ToString();
|
|
QuestState questState2 = Records.x.StringToQuestState(text2);
|
|
string text3 = this.creatures.activateQuestStateComplete.ToString();
|
|
QuestState questState3 = Records.x.StringToQuestState(text3);
|
|
bool flag = false;
|
|
if ((questState == questState2 && this.creatures.activateQuestState != Creatures.AdventureStates.NotApplicable) || (questState == questState3 && this.creatures.activateQuestStateComplete != Creatures.AdventureStates.NotApplicable))
|
|
{
|
|
flag = true;
|
|
}
|
|
if (Links.x.diorama.sceneName.Contains("D5") && this.creatures.characterName.ToString().Contains("RozafirDolki") && questState == QuestState.WaitingForExileIsland)
|
|
{
|
|
flag = true;
|
|
}
|
|
if (flag)
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
"activating creature from quest: ",
|
|
(this != null) ? this.ToString() : null,
|
|
" ",
|
|
text,
|
|
" ",
|
|
Records.x.StringToQuestState(this.creatures.activateQuestState.ToString()).ToString(),
|
|
" ",
|
|
questState.ToString()
|
|
}));
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x0600057E RID: 1406 RVA: 0x00079055 File Offset: 0x00077255
|
|
public Transform GetActivation()
|
|
{
|
|
if (!this.activation)
|
|
{
|
|
return this.walkPointsDay[0];
|
|
}
|
|
if (this.activation.childCount == 0)
|
|
{
|
|
return this.activation;
|
|
}
|
|
return this.activation.GetChild(0);
|
|
}
|
|
|
|
// Token: 0x0600057F RID: 1407 RVA: 0x00079094 File Offset: 0x00077294
|
|
public void GetMorningNightHours()
|
|
{
|
|
if (this.creatures.dayHour == Creatures.hours.Morning1)
|
|
{
|
|
this.morningHour = 22;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Morning2)
|
|
{
|
|
this.morningHour = 23;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Morning3)
|
|
{
|
|
this.morningHour = 0;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Morning4)
|
|
{
|
|
this.morningHour = 1;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Morning5)
|
|
{
|
|
this.morningHour = 2;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Morning6)
|
|
{
|
|
this.morningHour = 3;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon1)
|
|
{
|
|
this.morningHour = 4;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon2)
|
|
{
|
|
this.morningHour = 5;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon3)
|
|
{
|
|
this.morningHour = 6;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon4)
|
|
{
|
|
this.morningHour = 7;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon5)
|
|
{
|
|
this.morningHour = 8;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Afternoon6)
|
|
{
|
|
this.morningHour = 9;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening1)
|
|
{
|
|
this.morningHour = 10;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening2)
|
|
{
|
|
this.morningHour = 11;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening3)
|
|
{
|
|
this.morningHour = 12;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening4)
|
|
{
|
|
this.morningHour = 13;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening5)
|
|
{
|
|
this.morningHour = 14;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Evening6)
|
|
{
|
|
this.morningHour = 15;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night1)
|
|
{
|
|
this.morningHour = 16;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night2)
|
|
{
|
|
this.morningHour = 17;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night3)
|
|
{
|
|
this.morningHour = 18;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night4)
|
|
{
|
|
this.morningHour = 19;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night5)
|
|
{
|
|
this.morningHour = 20;
|
|
}
|
|
if (this.creatures.dayHour == Creatures.hours.Night6)
|
|
{
|
|
this.morningHour = 21;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning1)
|
|
{
|
|
this.nightHour = 22;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning2)
|
|
{
|
|
this.nightHour = 23;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning3)
|
|
{
|
|
this.nightHour = 0;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning4)
|
|
{
|
|
this.nightHour = 1;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning5)
|
|
{
|
|
this.nightHour = 2;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Morning6)
|
|
{
|
|
this.nightHour = 3;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon1)
|
|
{
|
|
this.nightHour = 4;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon2)
|
|
{
|
|
this.nightHour = 5;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon3)
|
|
{
|
|
this.nightHour = 6;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon4)
|
|
{
|
|
this.nightHour = 7;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon5)
|
|
{
|
|
this.nightHour = 8;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Afternoon6)
|
|
{
|
|
this.nightHour = 9;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening1)
|
|
{
|
|
this.nightHour = 10;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening2)
|
|
{
|
|
this.nightHour = 11;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening3)
|
|
{
|
|
this.nightHour = 12;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening4)
|
|
{
|
|
this.nightHour = 13;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening5)
|
|
{
|
|
this.nightHour = 14;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Evening6)
|
|
{
|
|
this.nightHour = 15;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night1)
|
|
{
|
|
this.nightHour = 16;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night2)
|
|
{
|
|
this.nightHour = 17;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night3)
|
|
{
|
|
this.nightHour = 18;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night4)
|
|
{
|
|
this.nightHour = 19;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night5)
|
|
{
|
|
this.nightHour = 20;
|
|
}
|
|
if (this.creatures.nightHour == Creatures.hours.Night6)
|
|
{
|
|
this.nightHour = 21;
|
|
}
|
|
}
|
|
|
|
// Token: 0x04000808 RID: 2056
|
|
[Header("Info")]
|
|
public Creatures creatures;
|
|
|
|
// Token: 0x04000809 RID: 2057
|
|
public string xmlName;
|
|
|
|
// Token: 0x0400080A RID: 2058
|
|
public bool temporary;
|
|
|
|
// Token: 0x0400080B RID: 2059
|
|
public bool onlyTemporary;
|
|
|
|
// Token: 0x0400080C RID: 2060
|
|
public bool hunting;
|
|
|
|
// Token: 0x0400080D RID: 2061
|
|
public bool canJoinParty;
|
|
|
|
// Token: 0x0400080E RID: 2062
|
|
public string originalScene;
|
|
|
|
// Token: 0x0400080F RID: 2063
|
|
public string temporaryState = "";
|
|
|
|
// Token: 0x04000810 RID: 2064
|
|
public Transform creatureHolder;
|
|
|
|
// Token: 0x04000811 RID: 2065
|
|
public List<Character> characters = new List<Character>();
|
|
|
|
// Token: 0x04000812 RID: 2066
|
|
public bool disappearDay;
|
|
|
|
// Token: 0x04000813 RID: 2067
|
|
public bool disappearNight;
|
|
|
|
// Token: 0x04000814 RID: 2068
|
|
public bool hasDayNightCycle;
|
|
|
|
// Token: 0x04000815 RID: 2069
|
|
public bool movesOnWater;
|
|
|
|
// Token: 0x04000816 RID: 2070
|
|
public float waitTime;
|
|
|
|
// Token: 0x04000817 RID: 2071
|
|
private TileEffects tileEffect;
|
|
|
|
// Token: 0x04000818 RID: 2072
|
|
private float startDelayTime;
|
|
|
|
// Token: 0x04000819 RID: 2073
|
|
public bool waitingForDelay;
|
|
|
|
// Token: 0x0400081A RID: 2074
|
|
public GraphNode temporaryStartNode;
|
|
|
|
// Token: 0x0400081B RID: 2075
|
|
public float futureDelay;
|
|
|
|
// Token: 0x0400081C RID: 2076
|
|
public CreatureBoat creatureBoat;
|
|
|
|
// Token: 0x0400081D RID: 2077
|
|
public bool sailing;
|
|
|
|
// Token: 0x0400081E RID: 2078
|
|
public Character groupLeader;
|
|
|
|
// Token: 0x0400081F RID: 2079
|
|
private string thisName;
|
|
|
|
// Token: 0x04000820 RID: 2080
|
|
public int morningHour;
|
|
|
|
// Token: 0x04000821 RID: 2081
|
|
public int nightHour;
|
|
|
|
// Token: 0x04000822 RID: 2082
|
|
public bool isDay = true;
|
|
|
|
// Token: 0x04000823 RID: 2083
|
|
public bool inGroup;
|
|
|
|
// Token: 0x04000824 RID: 2084
|
|
public bool deactivating;
|
|
|
|
// Token: 0x04000825 RID: 2085
|
|
public bool activating;
|
|
|
|
// Token: 0x04000826 RID: 2086
|
|
public bool ambush;
|
|
|
|
// Token: 0x04000827 RID: 2087
|
|
public bool noSleep;
|
|
|
|
// Token: 0x04000828 RID: 2088
|
|
public bool stopPatrolTemporarily;
|
|
|
|
// Token: 0x04000829 RID: 2089
|
|
public bool miniGameCreature;
|
|
|
|
// Token: 0x0400082A RID: 2090
|
|
public bool vipFollow;
|
|
|
|
// Token: 0x0400082B RID: 2091
|
|
[Header("Points")]
|
|
public List<Transform> walkPointsDay = new List<Transform>();
|
|
|
|
// Token: 0x0400082C RID: 2092
|
|
private List<GraphNode> walkNodesDay = new List<GraphNode>();
|
|
|
|
// Token: 0x0400082D RID: 2093
|
|
public List<Transform> vanishPointsDay = new List<Transform>();
|
|
|
|
// Token: 0x0400082E RID: 2094
|
|
private List<GraphNode> vanishNodesDay = new List<GraphNode>();
|
|
|
|
// Token: 0x0400082F RID: 2095
|
|
public List<Transform> walkPointsNight = new List<Transform>();
|
|
|
|
// Token: 0x04000830 RID: 2096
|
|
private List<GraphNode> walkNodesNight = new List<GraphNode>();
|
|
|
|
// Token: 0x04000831 RID: 2097
|
|
public List<Transform> vanishPointsNight = new List<Transform>();
|
|
|
|
// Token: 0x04000832 RID: 2098
|
|
private List<GraphNode> vanishNodesNight = new List<GraphNode>();
|
|
|
|
// Token: 0x04000833 RID: 2099
|
|
private Transform morning1;
|
|
|
|
// Token: 0x04000834 RID: 2100
|
|
private Transform morning2;
|
|
|
|
// Token: 0x04000835 RID: 2101
|
|
private Transform morning3;
|
|
|
|
// Token: 0x04000836 RID: 2102
|
|
private Transform morning4;
|
|
|
|
// Token: 0x04000837 RID: 2103
|
|
private Transform morning5;
|
|
|
|
// Token: 0x04000838 RID: 2104
|
|
private Transform morning6;
|
|
|
|
// Token: 0x04000839 RID: 2105
|
|
private Transform afternoon1;
|
|
|
|
// Token: 0x0400083A RID: 2106
|
|
private Transform afternoon2;
|
|
|
|
// Token: 0x0400083B RID: 2107
|
|
private Transform afternoon3;
|
|
|
|
// Token: 0x0400083C RID: 2108
|
|
private Transform afternoon4;
|
|
|
|
// Token: 0x0400083D RID: 2109
|
|
private Transform afternoon5;
|
|
|
|
// Token: 0x0400083E RID: 2110
|
|
private Transform afternoon6;
|
|
|
|
// Token: 0x0400083F RID: 2111
|
|
private Transform evening1;
|
|
|
|
// Token: 0x04000840 RID: 2112
|
|
private Transform evening2;
|
|
|
|
// Token: 0x04000841 RID: 2113
|
|
private Transform evening3;
|
|
|
|
// Token: 0x04000842 RID: 2114
|
|
private Transform evening4;
|
|
|
|
// Token: 0x04000843 RID: 2115
|
|
private Transform evening5;
|
|
|
|
// Token: 0x04000844 RID: 2116
|
|
private Transform evening6;
|
|
|
|
// Token: 0x04000845 RID: 2117
|
|
private Transform night1;
|
|
|
|
// Token: 0x04000846 RID: 2118
|
|
private Transform night2;
|
|
|
|
// Token: 0x04000847 RID: 2119
|
|
private Transform night3;
|
|
|
|
// Token: 0x04000848 RID: 2120
|
|
private Transform night4;
|
|
|
|
// Token: 0x04000849 RID: 2121
|
|
private Transform night5;
|
|
|
|
// Token: 0x0400084A RID: 2122
|
|
private Transform night6;
|
|
|
|
// Token: 0x0400084B RID: 2123
|
|
private Transform day;
|
|
|
|
// Token: 0x0400084C RID: 2124
|
|
private Transform night;
|
|
|
|
// Token: 0x0400084D RID: 2125
|
|
private Transform dayVanish;
|
|
|
|
// Token: 0x0400084E RID: 2126
|
|
private Transform nightVanish;
|
|
|
|
// Token: 0x0400084F RID: 2127
|
|
private Transform activation;
|
|
|
|
// Token: 0x04000850 RID: 2128
|
|
private Transform deactivation;
|
|
|
|
// Token: 0x04000851 RID: 2129
|
|
public bool daySleep;
|
|
|
|
// Token: 0x04000852 RID: 2130
|
|
public bool nightSleep;
|
|
|
|
// Token: 0x04000853 RID: 2131
|
|
public int hasTimePoint = -1;
|
|
|
|
// Token: 0x04000854 RID: 2132
|
|
private MapExitActions mapExitDay;
|
|
|
|
// Token: 0x04000855 RID: 2133
|
|
private MapExitActions mapExitNight;
|
|
|
|
// Token: 0x04000856 RID: 2134
|
|
public Transform tr;
|
|
|
|
// Token: 0x04000857 RID: 2135
|
|
private NNConstraint nodeConstraint = new NNConstraint();
|
|
|
|
// Token: 0x04000858 RID: 2136
|
|
private GraphNode vanishNode;
|
|
|
|
// Token: 0x04000859 RID: 2137
|
|
private GraphNode deactivationNode;
|
|
|
|
// Token: 0x0400085A RID: 2138
|
|
private bool questPointSwap;
|
|
|
|
// Token: 0x0400085B RID: 2139
|
|
private IEnumerator followerCoroutine;
|
|
|
|
// Token: 0x0400085C RID: 2140
|
|
public GraphNode randomNodeCenter;
|
|
|
|
// Token: 0x0400085D RID: 2141
|
|
public GraphNode timeNode;
|
|
|
|
// Token: 0x0400085E RID: 2142
|
|
private QuestTimePoint questTimePoint;
|
|
|
|
// Token: 0x0400085F RID: 2143
|
|
private Quaternion timeRot;
|
|
|
|
// Token: 0x04000860 RID: 2144
|
|
private float lastCheckTime;
|
|
|
|
// Token: 0x04000861 RID: 2145
|
|
private float repathTime;
|
|
|
|
// Token: 0x04000862 RID: 2146
|
|
[Header("Save Data")]
|
|
private ES3File saveFile;
|
|
|
|
// Token: 0x04000863 RID: 2147
|
|
public List<int> initiateDialogue = new List<int>();
|
|
|
|
// Token: 0x04000864 RID: 2148
|
|
public List<int> health = new List<int>();
|
|
|
|
// Token: 0x04000865 RID: 2149
|
|
public List<string> states = new List<string>();
|
|
|
|
// Token: 0x04000866 RID: 2150
|
|
public List<int> temperaments = new List<int>();
|
|
|
|
// Token: 0x04000867 RID: 2151
|
|
public List<Vector4> positions = new List<Vector4>();
|
|
|
|
// Token: 0x04000868 RID: 2152
|
|
public List<string> maps = new List<string>();
|
|
|
|
// Token: 0x04000869 RID: 2153
|
|
public List<Vector3> data = new List<Vector3>();
|
|
|
|
// Token: 0x0400086A RID: 2154
|
|
public List<string> effects = new List<string>();
|
|
|
|
// Token: 0x0400086B RID: 2155
|
|
public List<string> doorID = new List<string>();
|
|
|
|
// Token: 0x0400086C RID: 2156
|
|
private List<int> items;
|
|
|
|
// Token: 0x0400086D RID: 2157
|
|
public string savedItems;
|
|
|
|
// Token: 0x0400086E RID: 2158
|
|
public string savedBagItems;
|
|
|
|
// Token: 0x0400086F RID: 2159
|
|
private string saveScene;
|
|
|
|
// Token: 0x04000870 RID: 2160
|
|
public float timeSinceWipeOut;
|
|
|
|
// Token: 0x04000871 RID: 2161
|
|
public float standTime;
|
|
|
|
// Token: 0x04000872 RID: 2162
|
|
private bool hasSaveFile;
|
|
|
|
// Token: 0x04000873 RID: 2163
|
|
private bool hasFirstNode;
|
|
|
|
// Token: 0x04000874 RID: 2164
|
|
private string[] rawlines;
|
|
|
|
// Token: 0x04000875 RID: 2165
|
|
private Library.Characters characterRow;
|
|
|
|
// Token: 0x04000876 RID: 2166
|
|
public int temporaryIndex;
|
|
|
|
// Token: 0x04000877 RID: 2167
|
|
private List<float> delays;
|
|
|
|
// Token: 0x04000878 RID: 2168
|
|
private List<string> movingFromMap;
|
|
|
|
// Token: 0x04000879 RID: 2169
|
|
private StringFast str;
|
|
|
|
// Token: 0x0400087A RID: 2170
|
|
[Header("States")]
|
|
public bool waitingForPrompt;
|
|
|
|
// Token: 0x0400087B RID: 2171
|
|
public bool summons;
|
|
|
|
// Token: 0x0400087C RID: 2172
|
|
public bool alliedToParty;
|
|
}
|