public NET_ProgressionReplicator(ExtendedPlayerAgent owner) { this.Owner = owner; packets = new List <NET_Packet>(); this.AddPacket(new NET_RequestProgressionDataPacket(this)); this.AddPacket(new NET_ProgressionDataPacket(this)); }
public void SendProgressionData(ExtendedPlayerAgent player) { foreach (var packet in packets) { if (packet is NET_ProgressionDataPacket progressionDataPacket) { progressionDataPacket.Send(player); break; } } }
public void OnReceive(pProgressionDataRequest requestData) { if (requestData.from.TryGet(out Player.PlayerAgent p) && ExtendedPlayerAgent.TryGetOrCreate(p, out ExtendedPlayerAgent player)) { player.ProgressionSynced = requestData.ack; if (NET.IsMaster && !player.ProgressionSynced) { if (ExtendedPlayerAgent.TryGet(NET.SNetMaster.PlayerAgent.TryCast <PlayerAgent>(), out ExtendedPlayerAgent master)) { master.ProgressionReplicator.SendProgressionData(player); } else { Debug.LogError("COULD NOT FIND THE MASTA!!!!"); } } }
public void Send(ExtendedPlayerAgent player) { if (NET.IsMaster) { if (player == null || player.WrappedObj == null) { Debug.LogError("Tried to send progression data to a null player."); return; } pProgressionData data = Replicator.Owner.ProgressionData.ToPacket(); data.to.Set(player.WrappedObj); byte[] bytes = NET.GetBytesFromPacket(data, Replicator.Key, ID); NET.Send(bytes, SNetwork.SNet_ChannelType.GameReceiveCritical, player.Owner); } else { Debug.LogError("Attempting to send progression data when not the master."); } }
public static void Invoke(SNet_Player player, SNet_PlayerEvent playerEvent) { if (playerEvent == SNet_PlayerEvent.PlayerAgentSpawned) { if (ExtendedPlayerAgent.TryGetOrCreate(player.PlayerAgent.TryCast <PlayerAgent>(), out ExtendedPlayerAgent p)) { p.InternalSetup(); if (p.IsLocallyOwned) { p.ProgressionReplicator.RequestProgressionData(); } } } else if (playerEvent == SNet_PlayerEvent.PlayerAgentDeSpawned) { if (ExtendedPlayerAgent.TryGet(player.PlayerAgent.TryCast <PlayerAgent>(), out ExtendedPlayerAgent p)) { ExtendedPlayerAgent.Remove(p.WrappedObj); p.InternalOnDestroyed(); } } }