| using System; |
| using System; |
| using System.Collections.Generic; |
| using System.Collections.Generic; |
| using System.IO; |
| using System.IO; |
| using UnityEngine; |
| using UnityEngine; |
| using UnityEngine.Rendering; |
| using UnityEngine.Rendering; |
| |
| |
| public class RandEventSystem : MonoBehaviour |
| public class RandEventSystem : MonoBehaviour |
| { |
| { |
| public static RandEventSystem instance |
| public static RandEventSystem instance |
| { |
| { |
| get |
| get |
| { |
| { |
| return RandEventSystem.m_instance; |
| return RandEventSystem.m_instance; |
| } |
| } |
| } |
| } |
| |
| |
| private void Awake() |
| private void Awake() |
| { |
| { |
| RandEventSystem.m_instance = this; |
| RandEventSystem.m_instance = this; |
| } |
| } |
| |
| |
| private void OnDestroy() |
| private void OnDestroy() |
| { |
| { |
| RandEventSystem.m_instance = null; |
| RandEventSystem.m_instance = null; |
| } |
| } |
| |
| |
| private void Start() |
| private void Start() |
| { |
| { |
| ZRoutedRpc.instance.Register<string, float, Vector3>("SetEvent", new Action<long, string, float, Vector3>(this.RPC_SetEvent)); |
| ZRoutedRpc.instance.Register<string, float, Vector3>("SetEvent", new Action<long, string, float, Vector3>(this.RPC_SetEvent)); |
| } |
| } |
| |
| |
| private void FixedUpdate() |
| private void FixedUpdate() |
| { |
| { |
| float fixedDeltaTime = Time.fixedDeltaTime; |
| float fixedDeltaTime = Time.fixedDeltaTime; |
| this.UpdateForcedEvents(fixedDeltaTime); |
| this.UpdateForcedEvents(fixedDeltaTime); |
| this.UpdateRandomEvent(fixedDeltaTime); |
| this.UpdateRandomEvent(fixedDeltaTime); |
| if (this.m_forcedEvent != null) |
| if (this.m_forcedEvent != null) |
| { |
| { |
| this.m_forcedEvent.Update(ZNet.instance.IsServer(), this.m_forcedEvent == this.m_activeEvent, true, fixedDeltaTime); |
| this.m_forcedEvent.Update(ZNet.instance.IsServer(), this.m_forcedEvent == this.m_activeEvent, true, fixedDeltaTime); |
| } |
| } |
| if (this.m_randomEvent != null && ZNet.instance.IsServer()) |
| if (this.m_randomEvent != null && ZNet.instance.IsServer()) |
| { |
| { |
| . | bool flag = this.IsAnyPlayerInEventArea(this.m_randomEvent); |
| if (ZNet.instance.IsServer()) |
| if (this.m_randomEvent.Update(true, this.m_randomEvent == this.m_activeEvent, flag, fixedDeltaTime)) |
| |
| { |
| { |
| . | this.SetRandomEvent(null, Vector3.zero); |
| bool flag = this.IsAnyPlayerInEventArea(this.m_randomEvent); |
| |
| if (this.m_randomEvent.Update(true, this.m_randomEvent == this.m_activeEvent, flag, fixedDeltaTime)) |
| |
| { |
| |
| this.SetRandomEvent(null, Vector3.zero); |
| |
| } |
| |
| } |
| |
| else |
| |
| { |
| |
| this.m_randomEvent.Update(ZNet.instance.IsServer(), this.m_randomEvent == this.m_activeEvent, true, fixedDeltaTime); |
| } |
| } |
| } |
| } |
| if (this.m_forcedEvent != null) |
| if (this.m_forcedEvent != null) |
| { |
| { |
| this.SetActiveEvent(this.m_forcedEvent, false); |
| this.SetActiveEvent(this.m_forcedEvent, false); |
| return; |
| return; |
| } |
| } |
| if (this.m_randomEvent == null || !Player.m_localPlayer) |
| if (this.m_randomEvent == null || !Player.m_localPlayer) |
| { |
| { |
| this.SetActiveEvent(null, false); |
| this.SetActiveEvent(null, false); |
| return; |
| return; |
| } |
| } |
| if (this.IsInsideRandomEventArea(this.m_randomEvent, Player.m_localPlayer.transform.position)) |
| if (this.IsInsideRandomEventArea(this.m_randomEvent, Player.m_localPlayer.transform.position)) |
| { |
| { |
| this.SetActiveEvent(this.m_randomEvent, false); |
| this.SetActiveEvent(this.m_randomEvent, false); |
| return; |
| return; |
| } |
| } |
| this.SetActiveEvent(null, false); |
| this.SetActiveEvent(null, false); |
| } |
| } |
| |
| |
| private bool IsInsideRandomEventArea(RandomEvent re, Vector3 position) |
| private bool IsInsideRandomEventArea(RandomEvent re, Vector3 position) |
| { |
| { |
| . | return position.y <= 3000f && Utils.DistanceXZ(position, re.m_pos) < this.m_randomEventRange; |
| return position.y <= 3000f && Utils.DistanceXZ(position, re.m_pos) < re.m_eventRange; |
| } |
| } |
| |
| |
| private void UpdateRandomEvent(float dt) |
| private void UpdateRandomEvent(float dt) |
| { |
| { |
| if (ZNet.instance.IsServer()) |
| if (ZNet.instance.IsServer()) |
| { |
| { |
| this.m_eventTimer += dt; |
| this.m_eventTimer += dt; |
| if (Game.m_eventRate > 0f && this.m_eventTimer > this.m_eventIntervalMin * 60f * Game.m_eventRate) |
| if (Game.m_eventRate > 0f && this.m_eventTimer > this.m_eventIntervalMin * 60f * Game.m_eventRate) |
| { |
| { |
| this.m_eventTimer = 0f; |
| this.m_eventTimer = 0f; |
| if (UnityEngine.Random.Range(0f, 100f) <= this.m_eventChance / Game.m_eventRate) |
| if (UnityEngine.Random.Range(0f, 100f) <= this.m_eventChance / Game.m_eventRate) |
| { |
| { |
| this.StartRandomEvent(); |
| this.StartRandomEvent(); |
| } |
| } |
| } |
| } |
| . | |
| if (RandEventSystem.s_randomEventNeedsRefresh) |
| |
| { |
| |
| RandEventSystem.RefreshPlayerEventData(); |
| |
| } |
| |
| Player.GetAllPlayers(); |
| |
| foreach (RandomEvent randomEvent in this.m_events) |
| |
| { |
| |
| if (randomEvent.m_enabled && randomEvent.m_standaloneInterval > 0f && this.m_activeEvent != randomEvent) |
| |
| { |
| |
| randomEvent.m_time += dt; |
| |
| if (randomEvent.m_time > randomEvent.m_standaloneInterval * Game.m_eventRate) |
| |
| { |
| |
| if (this.HaveGlobalKeys(randomEvent, RandEventSystem.s_playerEventDatas)) |
| |
| { |
| |
| List<Vector3> validEventPoints = this.GetValidEventPoints(randomEvent, RandEventSystem.s_playerEventDatas); |
| |
| if (validEventPoints.Count > 0 && UnityEngine.Random.Range(0f, 100f) <= randomEvent.m_standaloneChance / Game.m_eventRate) |
| |
| { |
| |
| this.SetRandomEvent(randomEvent, validEventPoints[UnityEngine.Random.Range(0, validEventPoints.Count)]); |
| |
| } |
| |
| } |
| |
| randomEvent.m_time = 0f; |
| |
| } |
| |
| } |
| |
| } |
| this.m_sendTimer += dt; |
| this.m_sendTimer += dt; |
| if (this.m_sendTimer > 2f) |
| if (this.m_sendTimer > 2f) |
| { |
| { |
| this.m_sendTimer = 0f; |
| this.m_sendTimer = 0f; |
| this.SendCurrentRandomEvent(); |
| this.SendCurrentRandomEvent(); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| |
| private void UpdateForcedEvents(float dt) |
| private void UpdateForcedEvents(float dt) |
| { |
| { |
| this.m_forcedEventUpdateTimer += dt; |
| this.m_forcedEventUpdateTimer += dt; |
| if (this.m_forcedEventUpdateTimer > 2f) |
| if (this.m_forcedEventUpdateTimer > 2f) |
| { |
| { |
| this.m_forcedEventUpdateTimer = 0f; |
| this.m_forcedEventUpdateTimer = 0f; |
| string forcedEvent = this.GetForcedEvent(); |
| string forcedEvent = this.GetForcedEvent(); |
| this.SetForcedEvent(forcedEvent); |
| this.SetForcedEvent(forcedEvent); |
| } |
| } |
| } |
| } |
| |
| |
| private void SetForcedEvent(string name) |
| private void SetForcedEvent(string name) |
| { |
| { |
| if (this.m_forcedEvent != null && name != null && this.m_forcedEvent.m_name == name) |
| if (this.m_forcedEvent != null && name != null && this.m_forcedEvent.m_name == name) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| if (this.m_forcedEvent != null) |
| if (this.m_forcedEvent != null) |
| { |
| { |
| if (this.m_forcedEvent == this.m_activeEvent) |
| if (this.m_forcedEvent == this.m_activeEvent) |
| { |
| { |
| this.SetActiveEvent(null, true); |
| this.SetActiveEvent(null, true); |
| } |
| } |
| this.m_forcedEvent.OnStop(); |
| this.m_forcedEvent.OnStop(); |
| this.m_forcedEvent = null; |
| this.m_forcedEvent = null; |
| } |
| } |
| RandomEvent @event = this.GetEvent(name); |
| RandomEvent @event = this.GetEvent(name); |
| if (@event != null) |
| if (@event != null) |
| { |
| { |
| this.m_forcedEvent = @event.Clone(); |
| this.m_forcedEvent = @event.Clone(); |
| this.m_forcedEvent.OnStart(); |
| this.m_forcedEvent.OnStart(); |
| } |
| } |
| } |
| } |
| |
| |
| private string GetForcedEvent() |
| private string GetForcedEvent() |
| { |
| { |
| if (EnemyHud.instance != null) |
| if (EnemyHud.instance != null) |
| { |
| { |
| Character activeBoss = EnemyHud.instance.GetActiveBoss(); |
| Character activeBoss = EnemyHud.instance.GetActiveBoss(); |
| if (activeBoss != null && activeBoss.m_bossEvent.Length > 0) |
| if (activeBoss != null && activeBoss.m_bossEvent.Length > 0) |
| { |
| { |
| return activeBoss.m_bossEvent; |
| return activeBoss.m_bossEvent; |
| } |
| } |
| string @event = EventZone.GetEvent(); |
| string @event = EventZone.GetEvent(); |
| if (@event != null) |
| if (@event != null) |
| { |
| { |
| return @event; |
| return @event; |
| } |
| } |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| public string GetBossEvent() |
| public string GetBossEvent() |
| { |
| { |
| if (EnemyHud.instance != null) |
| if (EnemyHud.instance != null) |
| { |
| { |
| Character activeBoss = EnemyHud.instance.GetActiveBoss(); |
| Character activeBoss = EnemyHud.instance.GetActiveBoss(); |
| if (activeBoss != null && activeBoss.m_bossEvent.Length > 0) |
| if (activeBoss != null && activeBoss.m_bossEvent.Length > 0) |
| { |
| { |
| return activeBoss.m_bossEvent; |
| return activeBoss.m_bossEvent; |
| } |
| } |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| private void SendCurrentRandomEvent() |
| private void SendCurrentRandomEvent() |
| { |
| { |
| if (this.m_randomEvent != null) |
| if (this.m_randomEvent != null) |
| { |
| { |
| ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", new object[] |
| ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", new object[] |
| { |
| { |
| this.m_randomEvent.m_name, |
| this.m_randomEvent.m_name, |
| this.m_randomEvent.m_time, |
| this.m_randomEvent.m_time, |
| this.m_randomEvent.m_pos |
| this.m_randomEvent.m_pos |
| }); |
| }); |
| return; |
| return; |
| } |
| } |
| ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", new object[] |
| ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", new object[] |
| { |
| { |
| "", |
| "", |
| 0f, |
| 0f, |
| Vector3.zero |
| Vector3.zero |
| }); |
| }); |
| } |
| } |
| |
| |
| private void RPC_SetEvent(long sender, string eventName, float time, Vector3 pos) |
| private void RPC_SetEvent(long sender, string eventName, float time, Vector3 pos) |
| { |
| { |
| if (ZNet.instance.IsServer()) |
| if (ZNet.instance.IsServer()) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| if (this.m_randomEvent == null || this.m_randomEvent.m_name != eventName) |
| if (this.m_randomEvent == null || this.m_randomEvent.m_name != eventName) |
| { |
| { |
| this.SetRandomEventByName(eventName, pos); |
| this.SetRandomEventByName(eventName, pos); |
| } |
| } |
| if (this.m_randomEvent != null) |
| if (this.m_randomEvent != null) |
| { |
| { |
| this.m_randomEvent.m_time = time; |
| this.m_randomEvent.m_time = time; |
| this.m_randomEvent.m_pos = pos; |
| this.m_randomEvent.m_pos = pos; |
| } |
| } |
| } |
| } |
| |
| |
| public void ConsoleStartRandomEvent() |
| public void ConsoleStartRandomEvent() |
| { |
| { |
| if (ZNet.instance.IsServer()) |
| if (ZNet.instance.IsServer()) |
| { |
| { |
| this.StartRandomEvent(); |
| this.StartRandomEvent(); |
| return; |
| return; |
| } |
| } |
| ZRoutedRpc.instance.InvokeRoutedRPC("startrandomevent", Array.Empty<object>()); |
| ZRoutedRpc.instance.InvokeRoutedRPC("startrandomevent", Array.Empty<object>()); |
| } |
| } |
| |
| |
| private void RPC_ConsoleStartRandomEvent(long sender) |
| private void RPC_ConsoleStartRandomEvent(long sender) |
| { |
| { |
| ZNetPeer peer = ZNet.instance.GetPeer(sender); |
| ZNetPeer peer = ZNet.instance.GetPeer(sender); |
| if (!ZNet.instance.IsAdmin(peer.m_socket.GetHostName())) |
| if (!ZNet.instance.IsAdmin(peer.m_socket.GetHostName())) |
| { |
| { |
| ZNet.instance.RemotePrint(peer.m_rpc, "You are not admin"); |
| ZNet.instance.RemotePrint(peer.m_rpc, "You are not admin"); |
| return; |
| return; |
| } |
| } |
| this.StartRandomEvent(); |
| this.StartRandomEvent(); |
| } |
| } |
| |
| |
| public void ConsoleResetRandomEvent() |
| public void ConsoleResetRandomEvent() |
| { |
| { |
| if (ZNet.instance.IsServer()) |
| if (ZNet.instance.IsServer()) |
| { |
| { |
| this.ResetRandomEvent(); |
| this.ResetRandomEvent(); |
| return; |
| return; |
| } |
| } |
| ZRoutedRpc.instance.InvokeRoutedRPC("resetrandomevent", Array.Empty<object>()); |
| ZRoutedRpc.instance.InvokeRoutedRPC("resetrandomevent", Array.Empty<object>()); |
| } |
| } |
| |
| |
| private void RPC_ConsoleResetRandomEvent(long sender) |
| private void RPC_ConsoleResetRandomEvent(long sender) |
| { |
| { |
| ZNetPeer peer = ZNet.instance.GetPeer(sender); |
| ZNetPeer peer = ZNet.instance.GetPeer(sender); |
| if (!ZNet.instance.IsAdmin(peer.m_socket.GetHostName())) |
| if (!ZNet.instance.IsAdmin(peer.m_socket.GetHostName())) |
| { |
| { |
| ZNet.instance.RemotePrint(peer.m_rpc, "You are not admin"); |
| ZNet.instance.RemotePrint(peer.m_rpc, "You are not admin"); |
| return; |
| return; |
| } |
| } |
| this.ResetRandomEvent(); |
| this.ResetRandomEvent(); |
| } |
| } |
| |
| |
| public void StartRandomEvent() |
| public void StartRandomEvent() |
| { |
| { |
| if (!ZNet.instance.IsServer()) |
| if (!ZNet.instance.IsServer()) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| List<KeyValuePair<RandomEvent, Vector3>> possibleRandomEvents = this.GetPossibleRandomEvents(); |
| List<KeyValuePair<RandomEvent, Vector3>> possibleRandomEvents = this.GetPossibleRandomEvents(); |
| . | Terminal.Log("Possible events:" + possibleRandomEvents.Count.ToString()); |
| Terminal.Log(string.Format("Possible events: {0}", possibleRandomEvents.Count)); |
| if (possibleRandomEvents.Count == 0) |
| if (possibleRandomEvents.Count == 0) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| foreach (KeyValuePair<RandomEvent, Vector3> keyValuePair in possibleRandomEvents) |
| foreach (KeyValuePair<RandomEvent, Vector3> keyValuePair in possibleRandomEvents) |
| { |
| { |
| Terminal.Log(" " + keyValuePair.Key.m_name); |
| Terminal.Log(" " + keyValuePair.Key.m_name); |
| } |
| } |
| KeyValuePair<RandomEvent, Vector3> keyValuePair2 = possibleRandomEvents[UnityEngine.Random.Range(0, possibleRandomEvents.Count)]; |
| KeyValuePair<RandomEvent, Vector3> keyValuePair2 = possibleRandomEvents[UnityEngine.Random.Range(0, possibleRandomEvents.Count)]; |
| this.SetRandomEvent(keyValuePair2.Key, keyValuePair2.Value); |
| this.SetRandomEvent(keyValuePair2.Key, keyValuePair2.Value); |
| Terminal.Log("Starting event: " + keyValuePair2.Key.m_name); |
| Terminal.Log("Starting event: " + keyValuePair2.Key.m_name); |
| } |
| } |
| |
| |
| private RandomEvent GetEvent(string name) |
| private RandomEvent GetEvent(string name) |
| { |
| { |
| if (string.IsNullOrEmpty(name)) |
| if (string.IsNullOrEmpty(name)) |
| { |
| { |
| return null; |
| return null; |
| } |
| } |
| foreach (RandomEvent randomEvent in this.m_events) |
| foreach (RandomEvent randomEvent in this.m_events) |
| { |
| { |
| if (randomEvent.m_name == name && randomEvent.m_enabled) |
| if (randomEvent.m_name == name && randomEvent.m_enabled) |
| { |
| { |
| return randomEvent; |
| return randomEvent; |
| } |
| } |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| public void SetRandomEventByName(string name, Vector3 pos) |
| public void SetRandomEventByName(string name, Vector3 pos) |
| { |
| { |
| RandomEvent @event = this.GetEvent(name); |
| RandomEvent @event = this.GetEvent(name); |
| this.SetRandomEvent(@event, pos); |
| this.SetRandomEvent(@event, pos); |
| } |
| } |
| |
| |
| public void ResetRandomEvent() |
| public void ResetRandomEvent() |
| { |
| { |
| this.SetRandomEvent(null, Vector3.zero); |
| this.SetRandomEvent(null, Vector3.zero); |
| } |
| } |
| |
| |
| public bool HaveEvent(string name) |
| public bool HaveEvent(string name) |
| { |
| { |
| return this.GetEvent(name) != null; |
| return this.GetEvent(name) != null; |
| } |
| } |
| |
| |
| private void SetRandomEvent(RandomEvent ev, Vector3 pos) |
| private void SetRandomEvent(RandomEvent ev, Vector3 pos) |
| { |
| { |
| if (this.m_randomEvent != null) |
| if (this.m_randomEvent != null) |
| { |
| { |
| if (this.m_randomEvent == this.m_activeEvent) |
| if (this.m_randomEvent == this.m_activeEvent) |
| { |
| { |
| this.SetActiveEvent(null, true); |
| this.SetActiveEvent(null, true); |
| } |
| } |
| this.m_randomEvent.OnStop(); |
| this.m_randomEvent.OnStop(); |
| this.m_randomEvent = null; |
| this.m_randomEvent = null; |
| } |
| } |
| if (ev != null) |
| if (ev != null) |
| { |
| { |
| this.m_randomEvent = ev.Clone(); |
| this.m_randomEvent = ev.Clone(); |
| this.m_randomEvent.m_pos = pos; |
| this.m_randomEvent.m_pos = pos; |
| this.m_randomEvent.OnStart(); |
| this.m_randomEvent.OnStart(); |
| ZLog.Log("Random event set:" + ev.m_name); |
| ZLog.Log("Random event set:" + ev.m_name); |
| if (Player.m_localPlayer) |
| if (Player.m_localPlayer) |
| { |
| { |
| Player.m_localPlayer.ShowTutorial("randomevent", false); |
| Player.m_localPlayer.ShowTutorial("randomevent", false); |
| } |
| } |
| } |
| } |
| if (ZNet.instance.IsServer()) |
| if (ZNet.instance.IsServer()) |
| { |
| { |
| this.SendCurrentRandomEvent(); |
| this.SendCurrentRandomEvent(); |
| } |
| } |
| } |
| } |
| |
| |
| private bool IsAnyPlayerInEventArea(RandomEvent re) |
| private bool IsAnyPlayerInEventArea(RandomEvent re) |
| { |
| { |
| foreach (ZDO zdo in ZNet.instance.GetAllCharacterZDOS()) |
| foreach (ZDO zdo in ZNet.instance.GetAllCharacterZDOS()) |
| { |
| { |
| if (this.IsInsideRandomEventArea(re, zdo.GetPosition())) |
| if (this.IsInsideRandomEventArea(re, zdo.GetPosition())) |
| { |
| { |
| return true; |
| return true; |
| } |
| } |
| } |
| } |
| return false; |
| return false; |
| } |
| } |
| |
| |
| private List<KeyValuePair<RandomEvent, Vector3>> GetPossibleRandomEvents() |
| private List<KeyValuePair<RandomEvent, Vector3>> GetPossibleRandomEvents() |
| { |
| { |
| this.m_lastPossibleEvents.Clear(); |
| this.m_lastPossibleEvents.Clear(); |
| RandEventSystem.RefreshPlayerEventData(); |
| RandEventSystem.RefreshPlayerEventData(); |
| foreach (RandomEvent randomEvent in this.m_events) |
| foreach (RandomEvent randomEvent in this.m_events) |
| { |
| { |
| . | if (randomEvent.m_enabled && randomEvent.m_random && this.HaveGlobalKeys(randomEvent, RandEventSystem.playerEventDatas)) |
| if (randomEvent.m_enabled && randomEvent.m_random && this.HaveGlobalKeys(randomEvent, RandEventSystem.s_playerEventDatas)) |
| { |
| { |
| . | List<Vector3> validEventPoints = this.GetValidEventPoints(randomEvent, RandEventSystem.playerEventDatas); |
| List<Vector3> validEventPoints = this.GetValidEventPoints(randomEvent, RandEventSystem.s_playerEventDatas); |
| if (validEventPoints.Count != 0) |
| if (validEventPoints.Count != 0) |
| { |
| { |
| Vector3 vector = validEventPoints[UnityEngine.Random.Range(0, validEventPoints.Count)]; |
| Vector3 vector = validEventPoints[UnityEngine.Random.Range(0, validEventPoints.Count)]; |
| this.m_lastPossibleEvents.Add(new KeyValuePair<RandomEvent, Vector3>(randomEvent, vector)); |
| this.m_lastPossibleEvents.Add(new KeyValuePair<RandomEvent, Vector3>(randomEvent, vector)); |
| } |
| } |
| } |
| } |
| } |
| } |
| return this.m_lastPossibleEvents; |
| return this.m_lastPossibleEvents; |
| } |
| } |
| |
| |
| private List<Vector3> GetValidEventPoints(RandomEvent ev, List<RandEventSystem.PlayerEventData> characters) |
| private List<Vector3> GetValidEventPoints(RandomEvent ev, List<RandEventSystem.PlayerEventData> characters) |
| { |
| { |
| this.points.Clear(); |
| this.points.Clear(); |
| bool globalKey = ZoneSystem.instance.GetGlobalKey(GlobalKeys.PlayerEvents); |
| bool globalKey = ZoneSystem.instance.GetGlobalKey(GlobalKeys.PlayerEvents); |
| foreach (RandEventSystem.PlayerEventData playerEventData in characters) |
| foreach (RandEventSystem.PlayerEventData playerEventData in characters) |
| { |
| { |
| if (this.InValidBiome(ev, playerEventData.position) && this.CheckBase(ev, playerEventData) && playerEventData.position.y <= 3000f && (!globalKey || playerEventData.possibleEvents.Contains(ev.m_name))) |
| if (this.InValidBiome(ev, playerEventData.position) && this.CheckBase(ev, playerEventData) && playerEventData.position.y <= 3000f && (!globalKey || playerEventData.possibleEvents.Contains(ev.m_name))) |
| { |
| { |
| this.points.Add(playerEventData.position); |
| this.points.Add(playerEventData.position); |
| } |
| } |
| } |
| } |
| return this.points; |
| return this.points; |
| } |
| } |
| |
| |
| . | public static List<RandEventSystem.PlayerEventData> RefreshPlayerEventData() |
| private static void RefreshPlayerEventData() |
| { |
| { |
| . | RandEventSystem.playerEventDatas.Clear(); |
| RandEventSystem.s_randomEventNeedsRefresh = false; |
| |
| RandEventSystem.s_playerEventDatas.Clear(); |
| RandEventSystem.PlayerEventData playerEventData; |
| RandEventSystem.PlayerEventData playerEventData; |
| if (SystemInfo.graphicsDeviceType != GraphicsDeviceType.Null && RandEventSystem.RetrievePlayerEventData(ZNet.instance.m_serverSyncedPlayerData, ZNet.instance.GetReferencePosition(), out playerEventData)) |
| if (SystemInfo.graphicsDeviceType != GraphicsDeviceType.Null && RandEventSystem.RetrievePlayerEventData(ZNet.instance.m_serverSyncedPlayerData, ZNet.instance.GetReferencePosition(), out playerEventData)) |
| { |
| { |
| . | RandEventSystem.playerEventDatas.Add(playerEventData); |
| RandEventSystem.s_playerEventDatas.Add(playerEventData); |
| } |
| } |
| foreach (ZNetPeer znetPeer in ZNet.instance.GetPeers()) |
| foreach (ZNetPeer znetPeer in ZNet.instance.GetPeers()) |
| { |
| { |
| RandEventSystem.PlayerEventData playerEventData2; |
| RandEventSystem.PlayerEventData playerEventData2; |
| if (znetPeer.IsReady() && RandEventSystem.RetrievePlayerEventData(znetPeer.m_serverSyncedPlayerData, znetPeer.m_refPos, out playerEventData2)) |
| if (znetPeer.IsReady() && RandEventSystem.RetrievePlayerEventData(znetPeer.m_serverSyncedPlayerData, znetPeer.m_refPos, out playerEventData2)) |
| { |
| { |
| . | RandEventSystem.playerEventDatas.Add(playerEventData2); |
| RandEventSystem.s_playerEventDatas.Add(playerEventData2); |
| } |
| } |
| } |
| } |
| . | return RandEventSystem.playerEventDatas; |
| } |
| |
| |
| |
| public static void SetRandomEventsNeedsRefresh() |
| |
| { |
| |
| RandEventSystem.s_randomEventNeedsRefresh = true; |
| } |
| } |
| |
| |
| private static bool RetrievePlayerEventData(Dictionary<string, string> playerData, Vector3 position, out RandEventSystem.PlayerEventData eventData) |
| private static bool RetrievePlayerEventData(Dictionary<string, string> playerData, Vector3 position, out RandEventSystem.PlayerEventData eventData) |
| { |
| { |
| eventData = default(RandEventSystem.PlayerEventData); |
| eventData = default(RandEventSystem.PlayerEventData); |
| string text; |
| string text; |
| if (!playerData.TryGetValue("possibleEvents", out text)) |
| if (!playerData.TryGetValue("possibleEvents", out text)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| string text2; |
| string text2; |
| if (!playerData.TryGetValue("baseValue", out text2) || !int.TryParse(text2, out eventData.baseValue)) |
| if (!playerData.TryGetValue("baseValue", out text2) || !int.TryParse(text2, out eventData.baseValue)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| eventData.position = position; |
| eventData.position = position; |
| eventData.possibleEvents = new HashSet<string>(); |
| eventData.possibleEvents = new HashSet<string>(); |
| string[] array = text.Split(',', StringSplitOptions.None); |
| string[] array = text.Split(',', StringSplitOptions.None); |
| for (int i = 0; i < array.Length; i++) |
| for (int i = 0; i < array.Length; i++) |
| { |
| { |
| eventData.possibleEvents.Add(array[i]); |
| eventData.possibleEvents.Add(array[i]); |
| } |
| } |
| return true; |
| return true; |
| } |
| } |
| |
| |
| private bool InValidBiome(RandomEvent ev, Vector3 point) |
| private bool InValidBiome(RandomEvent ev, Vector3 point) |
| { |
| { |
| return ev.m_biome == Heightmap.Biome.None || (WorldGenerator.instance.GetBiome(point) & ev.m_biome) != Heightmap.Biome.None; |
| return ev.m_biome == Heightmap.Biome.None || (WorldGenerator.instance.GetBiome(point) & ev.m_biome) != Heightmap.Biome.None; |
| } |
| } |
| |
| |
| private bool CheckBase(RandomEvent ev, RandEventSystem.PlayerEventData player) |
| private bool CheckBase(RandomEvent ev, RandEventSystem.PlayerEventData player) |
| { |
| { |
| return !ev.m_nearBaseOnly || player.baseValue >= 3; |
| return !ev.m_nearBaseOnly || player.baseValue >= 3; |
| } |
| } |
| |
| |
| private bool HaveGlobalKeys(RandomEvent ev, List<RandEventSystem.PlayerEventData> players) |
| private bool HaveGlobalKeys(RandomEvent ev, List<RandEventSystem.PlayerEventData> players) |
| { |
| { |
| if (ZoneSystem.instance.GetGlobalKey(GlobalKeys.PlayerEvents) && (ev.m_altRequiredKnownItems.Count > 0 || ev.m_altRequiredNotKnownItems.Count > 0 || ev.m_altNotRequiredPlayerKeys.Count > 0 || ev.m_altRequiredPlayerKeysAny.Count > 0)) |
| if (ZoneSystem.instance.GetGlobalKey(GlobalKeys.PlayerEvents) && (ev.m_altRequiredKnownItems.Count > 0 || ev.m_altRequiredNotKnownItems.Count > 0 || ev.m_altNotRequiredPlayerKeys.Count > 0 || ev.m_altRequiredPlayerKeysAny.Count > 0)) |
| { |
| { |
| using (List<RandEventSystem.PlayerEventData>.Enumerator enumerator = players.GetEnumerator()) |
| using (List<RandEventSystem.PlayerEventData>.Enumerator enumerator = players.GetEnumerator()) |
| { |
| { |
| while (enumerator.MoveNext()) |
| while (enumerator.MoveNext()) |
| { |
| { |
| if (enumerator.Current.possibleEvents.Contains(ev.m_name)) |
| if (enumerator.Current.possibleEvents.Contains(ev.m_name)) |
| { |
| { |
| return true; |
| return true; |
| } |
| } |
| } |
| } |
| } |
| } |
| return false; |
| return false; |
| } |
| } |
| foreach (string text in ev.m_requiredGlobalKeys) |
| foreach (string text in ev.m_requiredGlobalKeys) |
| { |
| { |
| if (!ZoneSystem.instance.GetGlobalKey(text)) |
| if (!ZoneSystem.instance.GetGlobalKey(text)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| } |
| } |
| foreach (string text2 in ev.m_notRequiredGlobalKeys) |
| foreach (string text2 in ev.m_notRequiredGlobalKeys) |
| { |
| { |
| if (ZoneSystem.instance.GetGlobalKey(text2)) |
| if (ZoneSystem.instance.GetGlobalKey(text2)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| } |
| } |
| return true; |
| return true; |
| } |
| } |
| |
| |
| public bool PlayerIsReadyForEvent(Player player, RandomEvent ev) |
| public bool PlayerIsReadyForEvent(Player player, RandomEvent ev) |
| { |
| { |
| foreach (ItemDrop itemDrop in ev.m_altRequiredNotKnownItems) |
| foreach (ItemDrop itemDrop in ev.m_altRequiredNotKnownItems) |
| { |
| { |
| if (player.IsMaterialKnown(itemDrop.m_itemData.m_shared.m_name)) |
| if (player.IsMaterialKnown(itemDrop.m_itemData.m_shared.m_name)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| } |
| } |
| foreach (string text in ev.m_altNotRequiredPlayerKeys) |
| foreach (string text in ev.m_altNotRequiredPlayerKeys) |
| { |
| { |
| if (player.HaveUniqueKey(text)) |
| if (player.HaveUniqueKey(text)) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| } |
| } |
| foreach (ItemDrop itemDrop2 in ev.m_altRequiredKnownItems) |
| foreach (ItemDrop itemDrop2 in ev.m_altRequiredKnownItems) |
| { |
| { |
| if (player.IsMaterialKnown(itemDrop2.m_itemData.m_shared.m_name)) |
| if (player.IsMaterialKnown(itemDrop2.m_itemData.m_shared.m_name)) |
| { |
| { |
| return true; |
| return true; |
| } |
| } |
| } |
| } |
| foreach (string text2 in ev.m_altRequiredPlayerKeysAny) |
| foreach (string text2 in ev.m_altRequiredPlayerKeysAny) |
| { |
| { |
| if (player.HaveUniqueKey(text2)) |
| if (player.HaveUniqueKey(text2)) |
| { |
| { |
| return true; |
| return true; |
| } |
| } |
| } |
| } |
| return ev.m_altRequiredKnownItems.Count <= 0 && ev.m_altRequiredPlayerKeysAny.Count <= 0; |
| return ev.m_altRequiredKnownItems.Count <= 0 && ev.m_altRequiredPlayerKeysAny.Count <= 0; |
| } |
| } |
| |
| |
| public List<SpawnSystem.SpawnData> GetCurrentSpawners() |
| public List<SpawnSystem.SpawnData> GetCurrentSpawners() |
| { |
| { |
| . | if (this.m_activeEvent != null) |
| if (this.m_activeEvent != null && this.m_activeEvent.m_time > this.m_activeEvent.m_spawnerDelay) |
| { |
| { |
| return this.m_activeEvent.m_spawn; |
| return this.m_activeEvent.m_spawn; |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| public string GetEnvOverride() |
| public string GetEnvOverride() |
| { |
| { |
| if (this.m_activeEvent != null && !string.IsNullOrEmpty(this.m_activeEvent.m_forceEnvironment) && this.m_activeEvent.InEventBiome()) |
| if (this.m_activeEvent != null && !string.IsNullOrEmpty(this.m_activeEvent.m_forceEnvironment) && this.m_activeEvent.InEventBiome()) |
| { |
| { |
| return this.m_activeEvent.m_forceEnvironment; |
| return this.m_activeEvent.m_forceEnvironment; |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| public string GetMusicOverride() |
| public string GetMusicOverride() |
| { |
| { |
| if (this.m_activeEvent != null && !string.IsNullOrEmpty(this.m_activeEvent.m_forceMusic)) |
| if (this.m_activeEvent != null && !string.IsNullOrEmpty(this.m_activeEvent.m_forceMusic)) |
| { |
| { |
| return this.m_activeEvent.m_forceMusic; |
| return this.m_activeEvent.m_forceMusic; |
| } |
| } |
| return null; |
| return null; |
| } |
| } |
| |
| |
| private void SetActiveEvent(RandomEvent ev, bool end = false) |
| private void SetActiveEvent(RandomEvent ev, bool end = false) |
| { |
| { |
| if (ev != null && this.m_activeEvent != null && ev.m_name == this.m_activeEvent.m_name) |
| if (ev != null && this.m_activeEvent != null && ev.m_name == this.m_activeEvent.m_name) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| if (this.m_activeEvent != null) |
| if (this.m_activeEvent != null) |
| { |
| { |
| this.m_activeEvent.OnDeactivate(end); |
| this.m_activeEvent.OnDeactivate(end); |
| this.m_activeEvent = null; |
| this.m_activeEvent = null; |
| } |
| } |
| if (ev != null) |
| if (ev != null) |
| { |
| { |
| this.m_activeEvent = ev; |
| this.m_activeEvent = ev; |
| if (this.m_activeEvent != null) |
| if (this.m_activeEvent != null) |
| { |
| { |
| this.m_activeEvent.OnActivate(); |
| this.m_activeEvent.OnActivate(); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| |
| public static bool InEvent() |
| public static bool InEvent() |
| { |
| { |
| return !(RandEventSystem.m_instance == null) && RandEventSystem.m_instance.m_activeEvent != null; |
| return !(RandEventSystem.m_instance == null) && RandEventSystem.m_instance.m_activeEvent != null; |
| } |
| } |
| |
| |
| public static bool HaveActiveEvent() |
| public static bool HaveActiveEvent() |
| { |
| { |
| return !(RandEventSystem.m_instance == null) && (RandEventSystem.m_instance.m_activeEvent != null || RandEventSystem.m_instance.m_randomEvent != null || RandEventSystem.m_instance.m_activeEvent != null); |
| return !(RandEventSystem.m_instance == null) && (RandEventSystem.m_instance.m_activeEvent != null || RandEventSystem.m_instance.m_randomEvent != null || RandEventSystem.m_instance.m_activeEvent != null); |
| } |
| } |
| |
| |
| public RandomEvent GetCurrentRandomEvent() |
| public RandomEvent GetCurrentRandomEvent() |
| { |
| { |
| return this.m_randomEvent; |
| return this.m_randomEvent; |
| } |
| } |
| |
| |
| public RandomEvent GetActiveEvent() |
| public RandomEvent GetActiveEvent() |
| { |
| { |
| return this.m_activeEvent; |
| return this.m_activeEvent; |
| } |
| } |
| |
| |
| public void PrepareSave() |
| public void PrepareSave() |
| { |
| { |
| this.m_tempSaveEventTimer = this.m_eventTimer; |
| this.m_tempSaveEventTimer = this.m_eventTimer; |
| if (this.m_randomEvent != null) |
| if (this.m_randomEvent != null) |
| { |
| { |
| this.m_tempSaveRandomEvent = this.m_randomEvent.m_name; |
| this.m_tempSaveRandomEvent = this.m_randomEvent.m_name; |
| this.m_tempSaveRandomEventTime = this.m_randomEvent.m_time; |
| this.m_tempSaveRandomEventTime = this.m_randomEvent.m_time; |
| this.m_tempSaveRandomEventPos = this.m_randomEvent.m_pos; |
| this.m_tempSaveRandomEventPos = this.m_randomEvent.m_pos; |
| return; |
| return; |
| } |
| } |
| this.m_tempSaveRandomEvent = ""; |
| this.m_tempSaveRandomEvent = ""; |
| this.m_tempSaveRandomEventTime = 0f; |
| this.m_tempSaveRandomEventTime = 0f; |
| this.m_tempSaveRandomEventPos = Vector3.zero; |
| this.m_tempSaveRandomEventPos = Vector3.zero; |
| } |
| } |
| |
| |
| public void SaveAsync(BinaryWriter writer) |
| public void SaveAsync(BinaryWriter writer) |
| { |
| { |
| writer.Write(this.m_tempSaveEventTimer); |
| writer.Write(this.m_tempSaveEventTimer); |
| writer.Write(this.m_tempSaveRandomEvent); |
| writer.Write(this.m_tempSaveRandomEvent); |
| writer.Write(this.m_tempSaveRandomEventTime); |
| writer.Write(this.m_tempSaveRandomEventTime); |
| writer.Write(this.m_tempSaveRandomEventPos.x); |
| writer.Write(this.m_tempSaveRandomEventPos.x); |
| writer.Write(this.m_tempSaveRandomEventPos.y); |
| writer.Write(this.m_tempSaveRandomEventPos.y); |
| writer.Write(this.m_tempSaveRandomEventPos.z); |
| writer.Write(this.m_tempSaveRandomEventPos.z); |
| } |
| } |
| |
| |
| public void Load(BinaryReader reader, int version) |
| public void Load(BinaryReader reader, int version) |
| { |
| { |
| this.m_eventTimer = reader.ReadSingle(); |
| this.m_eventTimer = reader.ReadSingle(); |
| if (version >= 25) |
| if (version >= 25) |
| { |
| { |
| string text = reader.ReadString(); |
| string text = reader.ReadString(); |
| float num = reader.ReadSingle(); |
| float num = reader.ReadSingle(); |
| Vector3 vector; |
| Vector3 vector; |
| vector.x = reader.ReadSingle(); |
| vector.x = reader.ReadSingle(); |
| vector.y = reader.ReadSingle(); |
| vector.y = reader.ReadSingle(); |
| vector.z = reader.ReadSingle(); |
| vector.z = reader.ReadSingle(); |
| if (!string.IsNullOrEmpty(text)) |
| if (!string.IsNullOrEmpty(text)) |
| { |
| { |
| this.SetRandomEventByName(text, vector); |
| this.SetRandomEventByName(text, vector); |
| if (this.m_randomEvent != null) |
| if (this.m_randomEvent != null) |
| { |
| { |
| this.m_randomEvent.m_time = num; |
| this.m_randomEvent.m_time = num; |
| this.m_randomEvent.m_pos = vector; |
| this.m_randomEvent.m_pos = vector; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| |
| private List<Vector3> points = new List<Vector3>(); |
| private List<Vector3> points = new List<Vector3>(); |
| |
| |
| private static RandEventSystem m_instance; |
| private static RandEventSystem m_instance; |
| |
| |
| private List<KeyValuePair<RandomEvent, Vector3>> m_lastPossibleEvents = new List<KeyValuePair<RandomEvent, Vector3>>(); |
| private List<KeyValuePair<RandomEvent, Vector3>> m_lastPossibleEvents = new List<KeyValuePair<RandomEvent, Vector3>>(); |
| |
| |
| . | private static List<RandEventSystem.PlayerEventData> playerEventDatas = new List<RandEventSystem.PlayerEventData>(); |
| private static List<RandEventSystem.PlayerEventData> s_playerEventDatas = new List<RandEventSystem.PlayerEventData>(); |
| |
| |
| |
| private static bool s_randomEventNeedsRefresh = true; |
| |
| |
| public float m_eventIntervalMin = 1f; |
| public float m_eventIntervalMin = 1f; |
| |
| |
| public float m_eventChance = 25f; |
| public float m_eventChance = 25f; |
| . | |
| |
| public float m_randomEventRange = 200f; |
| |
| |
| |
| private float m_eventTimer; |
| private float m_eventTimer; |
| |
| |
| private float m_sendTimer; |
| private float m_sendTimer; |
| |
| |
| public List<RandomEvent> m_events = new List<RandomEvent>(); |
| public List<RandomEvent> m_events = new List<RandomEvent>(); |
| |
| |
| private RandomEvent m_randomEvent; |
| private RandomEvent m_randomEvent; |
| |
| |
| private float m_forcedEventUpdateTimer; |
| private float m_forcedEventUpdateTimer; |
| |
| |
| private RandomEvent m_forcedEvent; |
| private RandomEvent m_forcedEvent; |
| |
| |
| private RandomEvent m_activeEvent; |
| private RandomEvent m_activeEvent; |
| |
| |
| private float m_tempSaveEventTimer; |
| private float m_tempSaveEventTimer; |
| |
| |
| private string m_tempSaveRandomEvent; |
| private string m_tempSaveRandomEvent; |
| |
| |
| private float m_tempSaveRandomEventTime; |
| private float m_tempSaveRandomEventTime; |
| |
| |
| private Vector3 m_tempSaveRandomEventPos; |
| private Vector3 m_tempSaveRandomEventPos; |
| |
| |
| public const string PossibleEventsKey = "possibleEvents"; |
| public const string PossibleEventsKey = "possibleEvents"; |
| |
| |
| public struct PlayerEventData |
| public struct PlayerEventData |
| { |
| { |
| public Vector3 position; |
| public Vector3 position; |
| |
| |
| public HashSet<string> possibleEvents; |
| public HashSet<string> possibleEvents; |
| |
| |
| public int baseValue; |
| public int baseValue; |
| } |
| } |
| } |
| } |
| |
| |