Пример #1
0
        public void closeWrite(string name, CSteamID steamID, ESteamPacket type)
        {
            if (!Provider.isChunk(type))
            {
                Debug.LogError("Failed to stream non chunk.");
                return;
            }
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet);
            if (this.isOwner && steamID == Provider.client)
            {
                this.receive(Provider.client, packet, 0, size);
            }
            else if (Provider.isServer && steamID == Provider.server)
            {
                this.receive(Provider.server, packet, 0, size);
            }
            else
            {
                Provider.send(steamID, type, packet, size, this.id);
            }
        }
Пример #2
0
        public void send(string name, CSteamID steamID, ESteamPacket type, params object[] arguments)
        {
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, arguments);
            if (this.isOwner && steamID == Provider.client)
            {
                this.receive(Provider.client, packet, 0, size);
            }
            else if (Provider.isServer && steamID == Provider.server)
            {
                this.receive(Provider.server, packet, 0, size);
            }
            else
            {
                Provider.send(steamID, type, packet, size, this.id);
            }
        }
Пример #3
0
        // Token: 0x060000B9 RID: 185 RVA: 0x000088B4 File Offset: 0x00006AB4
        public static void Listen(int channel)
        {
            ulong            size;
            ICommunityEntity communityEntity;
            bool             flag  = !Provider.provider.multiplayerService.clientMultiplayerService.read(out communityEntity, PacketThread.PacketBuffer, out size, channel);
            bool             flag2 = !flag;

            if (flag2)
            {
                bool flag3 = size > 1UL || size < 2UL;
                bool flag4 = !flag3;
                if (flag4)
                {
                    CSteamID SteamID = ((SteamworksCommunityEntity)communityEntity).steamID;
                    byte     b       = PacketThread.PacketBuffer[0];
                    bool     flag5   = b > 25;
                    bool     flag6   = !flag5;
                    if (flag6)
                    {
                        ESteamPacket esteamPacket = (ESteamPacket)b;
                        bool         flag7        = SteamID != Provider.server;
                        bool         flag8        = flag7;
                        if (flag8)
                        {
                            bool flag9  = esteamPacket != ESteamPacket.UPDATE_VOICE;
                            bool flag10 = !flag9;
                            if (flag10)
                            {
                                SteamChannel c = PacketThread.Receivers[channel];
                                MainThreadDispatcherComponent.InvokeOnMain(delegate
                                {
                                    c.receive(SteamID, PacketThread.PacketBuffer, 0, (int)size);
                                });
                            }
                        }
                        else
                        {
                            ESteamPacket esteamPacket2 = esteamPacket;
                            bool         flag11        = esteamPacket2 - ESteamPacket.UPDATE_RELIABLE_BUFFER > 7;
                            if (flag11)
                            {
                                MainThreadDispatcherComponent.InvokeOnMain(delegate
                                {
                                    OV_Provider.OV_receiveClient(SteamID, PacketThread.PacketBuffer, 0, (int)size, channel);
                                });
                            }
                            else
                            {
                                SteamChannel c = PacketThread.Receivers.First((SteamChannel r) => r.id == channel);
                                MainThreadDispatcherComponent.InvokeOnMain(delegate
                                {
                                    c.receive(SteamID, PacketThread.PacketBuffer, 0, (int)size);
                                });
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
 public void getPacketVoice(ESteamPacket type, int index, out int size, out byte[] packet, byte[] bytes, int length)
 {
     size      = 5 + length;
     packet    = bytes;
     packet[0] = (byte)type;
     packet[1] = (byte)index;
     byte[] bytes2 = BitConverter.GetBytes((ushort)length);
     packet[2] = bytes2[0];
     packet[3] = bytes2[1];
 }
Пример #5
0
        private void OnPacketSend(ref CSteamID steamID, ref ESteamPacket type, ref byte[] packet, ref int size, ref int channel, ref bool cancel)
        {
            if (type != ESteamPacket.CONNECTED)
            {
                return;
            }

            object[] info = SteamPacker.getObjects(steamID, 0, 0, packet, new Type[]
            {
                Types.BYTE_TYPE,
                Types.STEAM_ID_TYPE,
                Types.BYTE_TYPE,
                Types.STRING_TYPE,
                Types.STRING_TYPE,
                Types.VECTOR3_TYPE,
                Types.BYTE_TYPE,
                Types.BOOLEAN_TYPE,
                Types.BOOLEAN_TYPE,
                Types.INT32_TYPE,
                Types.STEAM_ID_TYPE,
                Types.STRING_TYPE,
                Types.BYTE_TYPE,
                Types.BYTE_TYPE,
                Types.BYTE_TYPE,
                Types.COLOR_TYPE,
                Types.COLOR_TYPE,
                Types.BOOLEAN_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_TYPE,
                Types.INT32_ARRAY_TYPE,
                Types.BYTE_TYPE,
                Types.STRING_TYPE
            });
            UnturnedPlayer player = UnturnedPlayer.Get((CSteamID)info[1]);

            if (player.SteamID != steamID)
            {
                info[3]  = player.PlayerName;
                info[4]  = player.CharacterName;
                info[11] = player.NickName;
            }
            else
            {
                info[3]  = player.PlayerName;
                info[4]  = player.UnturnedCharacterName;
                info[11] = player.UnturnedNickName;
            }

            packet = SteamPacker.getBytes(0, out size, info);
        }
Пример #6
0
        public void receive(CSteamID steamID, byte[] packet, int offset, int size)
        {
            if (SteamChannel.onTriggerReceive != null)
            {
                SteamChannel.onTriggerReceive(this, steamID, packet, offset, size);
            }
            if (size < 2)
            {
                return;
            }
            int num = (int)packet[offset + 1];

            if (num < 0 || num >= this.calls.Length)
            {
                return;
            }
            ESteamPacket esteamPacket = (ESteamPacket)packet[offset];

            if (esteamPacket == ESteamPacket.UPDATE_VOICE && size < 5)
            {
                return;
            }
            if (esteamPacket == ESteamPacket.UPDATE_UNRELIABLE_CHUNK_BUFFER || esteamPacket == ESteamPacket.UPDATE_RELIABLE_CHUNK_BUFFER)
            {
                SteamPacker.openRead(offset + 2, packet);
                this.calls[num].method.Invoke(this.calls[num].component, new object[]
                {
                    steamID
                });
                SteamPacker.closeRead();
            }
            else if (this.calls[num].types.Length > 0)
            {
                if (esteamPacket == ESteamPacket.UPDATE_VOICE)
                {
                    SteamChannel.voice[0] = steamID;
                    SteamChannel.voice[1] = packet;
                    SteamChannel.voice[2] = (int)BitConverter.ToUInt16(packet, offset + 2);
                    this.calls[num].method.Invoke(this.calls[num].component, SteamChannel.voice);
                }
                else
                {
                    object[] objects = SteamPacker.getObjects(steamID, offset, 2, packet, this.calls[num].types);
                    if (objects != null)
                    {
                        this.calls[num].method.Invoke(this.calls[num].component, objects);
                    }
                }
            }
            else
            {
                this.calls[num].method.Invoke(this.calls[num].component, null);
            }
        }
Пример #7
0
        public void send(string name, ESteamCall mode, Vector3 point, float radius, ESteamPacket type, params object[] arguments)
        {
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, arguments);
            this.send(mode, point, radius, type, size, packet);
        }
Пример #8
0
        public void send(string name, ESteamCall mode, byte x, byte y, byte area, ESteamPacket type, params object[] arguments)
        {
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, arguments);
            this.send(mode, x, y, area, type, size, packet);
        }
Пример #9
0
        public void send(string name, ESteamCall mode, ESteamPacket type, byte[] bytes, int length)
        {
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, bytes, length);
            this.send(mode, type, size, packet);
        }
Пример #10
0
        public static void kurwaanyad3(byte[] packet, int offset)
        {
            ESteamPacket packet2 = (ESteamPacket)packet[offset];

            if (Provider.isUpdate(packet2))
            {
                return;
            }
            if (packet2 == ESteamPacket.CONNECT)
            {
                Console.WriteLine("-3 " + Provider.MaxPlayers);
                Provider.MaxPlayers = 100;
                Console.WriteLine("-4 " + Provider.MaxPlayers);
            }
        }
Пример #11
0
        public void OnTriggerSend(SteamPlayer player, string name, ESteamCall mode, ESteamPacket type, params object[] arguments)
        {
            if (name != "tellVehicleLock")
            {
                return;
            }
            var vehicle = VehicleManager.getVehicle((uint)arguments[0]);

            if (vehicle.asset.engine != EEngine.TRAIN || (bool)arguments[3] == false)
            {
                return;
            }
            UnturnedChat.Say((CSteamID)arguments[1], Translate("trainunlocker_undid_lock"), Color.red);
            StartCoroutine(DelayedUnlockVehicle(vehicle, 1f));
        }
Пример #12
0
        public static bool send(SteamChannel __instance, ESteamCall mode, ESteamPacket type, int size, byte[] packet)
        {
            if (type == ESteamPacket.KICKED)
            {
                return(true);                             // ID collision bug
            }
            var caller = GetCaller();

            if (caller != null && !IsInternal(caller))
            {
                lock (Logger)
                    Logger?.TryRegisterCaller(type.ToString(), caller, __instance);
                return(!BlockCalls);
            }
            return(true);
        }
Пример #13
0
        private void OnTriggerSend(SteamPlayer player, string s, ESteamCall mode, ESteamPacket type, object[] arguments)
        {
            if (s != "askToss")
            {
                return;
            }

            UnturnedPlayer pla = UnturnedPlayer.FromSteamPlayer(player);

            if (!Configuration.Instance.WhitelistedIds.Contains(pla.Player.clothing.glasses))
            {
                return;
            }

            playersToIgnore.Add(pla.CSteamID);
        }
Пример #14
0
        public static void send(CSteamID steamID, ESteamPacket type, byte[] packet, int size, int channel)
        {
            object[] cool = { steamID, type, packet, size, channel };

            if (AntiFlashbangPlugin.Instance.playersToIgnore.Contains(steamID))
            {
                AntiFlashbangPlugin.Instance.playersToIgnore.Remove(steamID);
                if (AntiFlashbangPlugin.Instance.Configuration.Instance.TellUnflashedPlayers)
                {
                    UnturnedChat.Say(UnturnedPlayer.FromCSteamID(steamID), "You were able to ignore a flashbang because of your glasses!");
                }
                return;
            }

            AntiFlashbangPlugin.Instance.ov.CallOriginal(cool);
        }
Пример #15
0
        public void send(string name, ESteamCall mode, ESteamPacket type, params object[] arguments)
        {
            if (SteamChannel.onTriggerSend != null)
            {
                SteamChannel.onTriggerSend(this.owner, name, mode, type, arguments);
            }
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, arguments);
            this.send(mode, type, size, packet);
        }
Пример #16
0
        private void OnPacketSent(ref CSteamID steamID, ref ESteamPacket type, ref byte[] packet, ref int size, ref int channel, ref bool cancel)
        {
            if (type == ESteamPacket.CONNECTED)
            {
                object[] info = SteamPacker.getObjects(steamID, 0, 0, packet, new Type[]
                {
                    Typ.BYTE_TYPE,
                    Typ.STEAM_ID_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.STRING_TYPE,
                    Typ.STRING_TYPE,
                    Typ.VECTOR3_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.BOOLEAN_TYPE,
                    Typ.BOOLEAN_TYPE,
                    Typ.INT32_TYPE,
                    Typ.STEAM_ID_TYPE,
                    Typ.STRING_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.COLOR_TYPE,
                    Typ.COLOR_TYPE,
                    Typ.BOOLEAN_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_TYPE,
                    Typ.INT32_ARRAY_TYPE,
                    Typ.BYTE_TYPE,
                    Typ.STRING_TYPE
                });
                UnturnedPlayer player = UnturnedPlayer.Get((CSteamID)info[1]);

                if (player.Metadata.ContainsKey("Vanish"))
                {
                    cancel = true;
                }
            }
        }
Пример #17
0
        public void closeWrite(string name, ESteamCall mode, ESteamPacket type)
        {
            if (!Provider.isChunk(type))
            {
                Debug.LogError("Failed to stream non chunk.");
                return;
            }
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet);
            this.send(mode, type, size, packet);
        }
Пример #18
0
        public static void send(CSteamID steamID, ESteamPacket type, byte[] packet, int size, int channel)
        {
            if (!Provider.isConnected)
            {
                return;
            }
            bool cancel = false;

            ServerEvents.RunPacketSent(ref steamID, ref type, ref packet, ref size, ref channel, ref cancel);
            if (cancel)
            {
                return;
            }
            if (steamID == Provider.server)
            {
                miReceiveServer.Invoke(null, new object[] { Provider.server, packet, 0, size, channel });
                return;
            }
            if (steamID.m_SteamID == 0uL)
            {
                Debug.LogError("Failed to send to invalid steam ID.");
                return;
            }
            if ((bool)miIsUnreliable.Invoke(null, new object[] { type }))
            {
                for (int i = 0; i < 3; i++) // Fix for the queue #1 stuck position
                {
                    if (SteamGameServerNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)miIsInstant.Invoke(null, new object[] { type })) ? EP2PSend.k_EP2PSendUnreliable : EP2PSend.k_EP2PSendUnreliableNoDelay, channel))
                    {
                        break;
                    }
                }
                return;
            }
            for (int i = 0; i < 3; i++) // Fix for the queue #1 stuck position
            {
                if (SteamGameServerNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)miIsInstant.Invoke(null, new object[] { type })) ? EP2PSend.k_EP2PSendReliableWithBuffering : EP2PSend.k_EP2PSendReliable, channel))
                {
                    break;
                }
            }
        }
Пример #19
0
        public void sendAside(string name, CSteamID steamID, ESteamPacket type, params object[] arguments)
        {
            int call = this.getCall(name);

            if (call == -1)
            {
                return;
            }
            int size;

            byte[] packet;
            this.getPacket(type, call, out size, out packet, arguments);
            for (int i = 0; i < Provider.clients.Count; i++)
            {
                if (Provider.clients[i].playerID.steamID != steamID)
                {
                    Provider.send(Provider.clients[i].playerID.steamID, type, packet, size, this.id);
                }
            }
        }
Пример #20
0
        internal static void TriggerSend(SteamPlayer s, string W, ESteamCall X, ESteamPacket l, params object[] R)
        {
            try
            {
                if (s == null || s.player == null || s.playerID.steamID == CSteamID.Nil || s.player.transform == null || R == null)
                {
                    return;
                }
                Player plr = GamemodeLoader.Utilities.Tools.GetPlayer(s);

                if (W == "tellDeath")
                {
                    ServerEvents.PlayerDeath(plr, (EDeathCause)(byte)R[0], (ELimb)(byte)R[1], new CSteamID(ulong.Parse(R[2].ToString())));
                }
            }
            catch (Exception ex)
            {
                GamemodeLoader.Utilities.Tools.SendConsole(ex + "Failed to receive packet \"" + W + "\"", ConsoleColor.Red);
            }
        }
        private void OnTriggerSend(SteamPlayer player, string name, ESteamCall mode, ESteamPacket type, params object[] arguments)
        {
            if (name == "tellGesture")
            {
                var up = UnturnedPlayer.FromSteamPlayer(player);
                var id = int.Parse(arguments[0].ToString());
                if (id == 8)
                {
                    if (!Configuration.Instance.UsePermissions || up.HasPermission("pickpocket"))
                    {
                        Player victimPlayer = RaycastHelper.GetPlayerFromHits(up.Player, Configuration.Instance.MaxDistance);

                        if (victimPlayer != null)
                        {
                            if (Cooldowns.TryGetValue(up.Id.ToString(), out DateTime expireDate) && expireDate > DateTime.Now)
                            {
                                UnturnedChat.Say(up.CSteamID, Translate("COOLDOWN", System.Math.Truncate((expireDate - DateTime.Now).TotalSeconds)), MessageColor);
                            }
                            else
                            {
                                if (expireDate != null)
                                {
                                    Cooldowns.Remove(up.Id);
                                }
                                UnturnedPlayer victim = UnturnedPlayer.FromPlayer(victimPlayer);
                                if (victim.HasPermission("bypass.pickpocket"))
                                {
                                    UnturnedChat.Say(up, Translate("BYPASS"), MessageColor);
                                    return;
                                }
                                PickpocketComponent comp = up.Player.gameObject.AddComponent <PickpocketComponent>();
                                comp.Initialize(up, victim, this);
                                Cooldowns.Add(up.Id, DateTime.Now.AddSeconds(Configuration.Instance.PickpocketCooldown));
                            }
                        }
                    }
                }
            }
        }
Пример #22
0
 public static void TriggerSend(SteamPlayer s, string W, ESteamCall X, ESteamPacket l, params object[] R)
 {
     UnturnedPlayerEvents.TriggerSend(s, W, X, l, R);
 }
Пример #23
0
        internal static void TriggerSend(SteamPlayer s, string W, ESteamCall X, ESteamPacket l, params object[] R)
        {
            try
            {
                if (s == null || s.Player == null || s.Player.transform == null || R == null)
                {
                    return;
                }
                UnturnedPlayerEvents instance = s.Player.transform.GetComponent <UnturnedPlayerEvents>();
                UnturnedPlayer       rp       = UnturnedPlayer.FromSteamPlayer(s);
#if DEBUG
                //string o = "";
                //foreach (object r in R)
                //{
                //    o += r.ToString();
                //}
                //Logger.Log("Send+" + s.SteamPlayerID.CSteamID.ToString() + ": " + W + " - " + o);
#endif
                if (W.StartsWith("tellWear"))
                {
                    OnPlayerWear.TryInvoke(rp, Enum.Parse(typeof(Wearables), W.Replace("tellWear", "")), (ushort)R[0], R.Count() > 1 ? (byte?)R[1] : null);
                }
                switch (W)
                {
                case "tellBleeding":
                    OnPlayerUpdateBleeding.TryInvoke(rp, (bool)R[0]);
                    instance.OnUpdateBleeding.TryInvoke(rp, (bool)R[0]);
                    break;

                case "tellBroken":
                    OnPlayerUpdateBroken.TryInvoke(rp, (bool)R[0]);
                    instance.OnUpdateBroken.TryInvoke(rp, (bool)R[0]);
                    break;

                case "tellLife":
                    OnPlayerUpdateLife.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateLife.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellFood":
                    OnPlayerUpdateFood.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateFood.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellHealth":
                    OnPlayerUpdateHealth.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateHealth.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellVirus":
                    OnPlayerUpdateVirus.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateVirus.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellWater":
                    OnPlayerUpdateWater.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateWater.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellStance":
                    OnPlayerUpdateStance.TryInvoke(rp, (byte)R[0]);
                    instance.OnUpdateStance.TryInvoke(rp, (byte)R[0]);
                    break;

                case "tellGesture":
                    OnPlayerUpdateGesture.TryInvoke(rp, (PlayerGesture)Enum.Parse(typeof(PlayerGesture), R[0].ToString()));
                    instance.OnUpdateGesture.TryInvoke(rp, (PlayerGesture)Enum.Parse(typeof(PlayerGesture), R[0].ToString()));
                    break;

                case "tellStat":
                    OnPlayerUpdateStat.TryInvoke(rp, (EPlayerStat)(byte)R[0]);
                    instance.OnUpdateStat.TryInvoke(rp, (EPlayerStat)(byte)R[0]);
                    break;

                case "tellExperience":
                    OnPlayerUpdateExperience.TryInvoke(rp, (uint)R[0]);
                    instance.OnUpdateExperience.TryInvoke(rp, (uint)R[0]);
                    break;

                case "tellRevive":
                    OnPlayerRevive.TryInvoke(rp, (Vector3)R[0], (byte)R[1]);
                    instance.OnRevive.TryInvoke(rp, (Vector3)R[0], (byte)R[1]);
                    break;

                case "tellDead":
                    OnPlayerDead.TryInvoke(rp, (Vector3)R[0]);
                    instance.OnDead.TryInvoke(rp, (Vector3)R[0]);
                    break;

                case "tellDeath":
                    OnPlayerDeath.TryInvoke(rp, (EDeathCause)(byte)R[0], (ELimb)(byte)R[1], new CSteamID(ulong.Parse(R[2].ToString())));
                    instance.OnDeath.TryInvoke(rp, (EDeathCause)(byte)R[0], (ELimb)(byte)R[1], new CSteamID(ulong.Parse(R[2].ToString())));
                    break;

                default:
#if DEBUG
                    // Logger.Log("Send+" + s.SteamPlayerID.CSteamID.ToString() + ": " + W + " - " + String.Join(",",R.Select(e => e.ToString()).ToArray()));
#endif
                    break;
                }
                return;
            }
            catch (Exception ex)
            {
                Logger.LogException(ex, "Failed to receive packet \"" + W + "\"");
            }
        }
Пример #24
0
 public void getPacket(ESteamPacket type, int index, out int size, out byte[] packet)
 {
     packet    = SteamPacker.closeWrite(out size);
     packet[0] = (byte)type;
     packet[1] = (byte)index;
 }
Пример #25
0
 public static void TriggerSend(SteamPlayer s, string W, ESteamCall X, ESteamPacket l, params object[] R)
 {
     UnturnedPlayerEvents.TriggerSend(s, W, X, l, R);
 }
Пример #26
0
 public void getPacket(ESteamPacket type, int index, out int size, out byte[] packet, params object[] arguments)
 {
     packet    = SteamPacker.getBytes(2, out size, arguments);
     packet[0] = (byte)type;
     packet[1] = (byte)index;
 }
Пример #27
0
        public static bool send(SteamChannel __instance, string name, ESteamCall mode, Vector3 point, float radius, ESteamPacket type, params object[] arguments)
        {
            var caller = GetCaller();

            if (caller != null && !IsInternal(caller))
            {
                lock (Logger)
                    Logger?.TryRegisterCaller(name, caller, __instance);
                return(!BlockCalls);
            }
            return(true);
        }
Пример #28
0
        public static bool sendAside(SteamChannel __instance, string name, CSteamID steamID, ESteamPacket type, params object[] arguments)
        {
            var caller = GetCaller();

            if (caller != null && !IsInternal(caller))
            {
                lock (Logger)
                    Logger?.TryRegisterCaller(name, caller, __instance);
                return(!BlockCalls);
            }
            return(true);
        }
Пример #29
0
 internal static void RunPacketSent(ref CSteamID steamID, ref ESteamPacket type, ref byte[] packet, ref int size, ref int channel, ref bool cancel) => OnPacketSent?.Invoke(ref steamID, ref type, ref packet, ref size, ref channel, ref cancel);
        internal static void TriggerSend(SteamPlayer s, string W, ESteamCall X, ESteamPacket l, params object[] R)
        {
            try
            {
                if (s == null || s.player == null || s.playerID.steamID == CSteamID.Nil || s.player.transform == null || R == null) return;
                UnturnedPlayerEvents instance = s.player.transform.GetComponent<UnturnedPlayerEvents>();
                UnturnedPlayer rp = UnturnedPlayer.FromSteamPlayer(s);
#if DEBUG
                 //string o = "";
                 //foreach (object r in R)
                 //{
                 //    o += r.ToString();
                 //}
                 //Logger.Log("Send+" + s.SteamPlayerID.CSteamID.ToString() + ": " + W + " - " + o);
#endif
                if (W.StartsWith("tellWear")) {
                    OnPlayerWear.TryInvoke(rp, Enum.Parse(typeof(Wearables), W.Replace("tellWear", "")), (ushort)R[0], R.Count() > 1 ? (byte?)R[1] : null);
                }
                switch (W)
                {
                    case "tellBleeding":
                        OnPlayerUpdateBleeding.TryInvoke(rp, (bool)R[0]);
                        instance.OnUpdateBleeding.TryInvoke( rp, (bool)R[0]);
                        break;
                    case "tellBroken":
                        OnPlayerUpdateBroken.TryInvoke(rp, (bool)R[0]);
                        instance.OnUpdateBroken.TryInvoke(rp, (bool)R[0]);
                        break;
                    case "tellLife":
                        OnPlayerUpdateLife.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateLife.TryInvoke(rp, (byte)R[0]);
                        break;
                    case "tellFood":
                        OnPlayerUpdateFood.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateFood.TryInvoke(rp, (byte)R[0]);
                        break;
                    case "tellHealth":
                        OnPlayerUpdateHealth.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateHealth.TryInvoke(rp, (byte)R[0]);
                        break;
                    case "tellVirus":
                        OnPlayerUpdateVirus.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateVirus.TryInvoke(rp, (byte)R[0]);
                        break;
                    case "tellWater":
                        OnPlayerUpdateWater.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateWater.TryInvoke(rp, (byte)R[0]);
                        break;
                    case "tellStance":
                        OnPlayerUpdateStance.TryInvoke(rp, (byte)R[0]);
                        instance.OnUpdateStance.TryInvoke( rp, (byte)R[0]);
                        break;
                    case "tellGesture":
                        OnPlayerUpdateGesture.TryInvoke(rp, (PlayerGesture)Enum.Parse(typeof(PlayerGesture), R[0].ToString()));
                        instance.OnUpdateGesture.TryInvoke( rp, (PlayerGesture)Enum.Parse(typeof(PlayerGesture), R[0].ToString()));
                        break;
                    case "tellStat":
                        OnPlayerUpdateStat.TryInvoke(rp, (EPlayerStat)(byte)R[0]);
                        instance.OnUpdateStat.TryInvoke(rp, (EPlayerStat)(byte)R[0]);
                        break;
                    case "tellExperience":
                        OnPlayerUpdateExperience.TryInvoke(rp, (uint)R[0]);
                        instance.OnUpdateExperience.TryInvoke(rp, (uint)R[0]);
                        break;
                    case "tellRevive":
                        OnPlayerRevive.TryInvoke(rp, (Vector3)R[0], (byte)R[1]);
                        instance.OnRevive.TryInvoke(rp, (Vector3)R[0], (byte)R[1]);
                        break;
                    case "tellDead":
                        OnPlayerDead.TryInvoke(rp, (Vector3)R[0]);
                        instance.OnDead.TryInvoke(rp, (Vector3)R[0]);
                        break;
                    case "tellDeath":
                        OnPlayerDeath.TryInvoke(rp, (EDeathCause)(byte)R[0], (ELimb)(byte)R[1], new CSteamID(ulong.Parse(R[2].ToString())));
                        instance.OnDeath.TryInvoke(rp, (EDeathCause)(byte)R[0], (ELimb)(byte)R[1], new CSteamID(ulong.Parse(R[2].ToString())));
                        break;
                    default:
#if DEBUG
                       // Logger.Log("Send+" + s.SteamPlayerID.CSteamID.ToString() + ": " + W + " - " + String.Join(",",R.Select(e => e.ToString()).ToArray()));
#endif
                        break;
                }
                return;
            }
            catch (Exception ex)
            {
                Core.Logging.Logger.LogException(ex,"Failed to receive packet \""+W+"\"");
            }
        }
        internal void TriggerSend(SteamPlayer player, string method, ESteamCall steamCall, ESteamPacket steamPacket, params object[] data)
        {
            try
            {
                if (player == null ||
                    player.player == null ||
                    player.playerID.steamID == CSteamID.Nil ||
                    player.player.transform == null ||
                    data == null)
                {
                    return;
                }

                UnturnedPlayer unturnedPlayer =
                    (UnturnedPlayer)playerManager.GetPlayer(player.playerID.steamID.ToString());

                if (method.StartsWith("tellWear"))
                {
                    //PlayerWearEvent method.Replace("tellWear", ""), (ushort)data[0], data.Count() > 1 ? (byte?)data[1] : null)
                    return;
                }

                IEvent @event = null;
                switch (method)
                {
                case "tellBleeding":
                    @event = new UnturnedPlayerUpdateBleedingEvent(unturnedPlayer, (bool)data[0]);
                    break;

                case "tellBroken":
                    @event = new UnturnedPlayerUpdateBrokenEvent(unturnedPlayer, (bool)data[0]);
                    break;

                case "tellLife":
                    @event = new UnturnedPlayerUpdateLifeEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellFood":
                    @event = new UnturnedPlayerUpdateFoodEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellHealth":
                    @event = new UnturnedPlayerUpdateHealthEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellVirus":
                    @event = new UnturnedPlayerUpdateVirusEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellWater":
                    @event = new UnturnedPlayerUpdateWaterEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellStance":
                    @event = new UnturnedPlayerUpdateStanceEvent(unturnedPlayer, (EPlayerStance)(byte)data[0]);
                    break;

                case "tellGesture":
                    @event = new UnturnedPlayerUpdateGestureEvent(unturnedPlayer, (EPlayerGesture)(byte)data[0]);
                    break;

                case "tellStat":
                    @event = new UnturnedPlayerUpdateStatEvent(unturnedPlayer, (EPlayerStat)(byte)data[0]);
                    break;

                case "tellExperience":
                    @event = new UnturnedPlayerUpdateExperienceEvent(unturnedPlayer, (uint)data[0]);
                    break;

                case "tellRevive":
                    @event = new PlayerRespawnEvent(unturnedPlayer);
                    break;

                case "tellDead":
                    @event = new UnturnedPlayerDeadEvent(unturnedPlayer, ((global::UnityEngine.Vector3)data[0]).ToSystemVector());
                    break;

                case "tellDeath":
                {
                    var deathCause = (EDeathCause)(byte)data[0];
                    var limb       = (ELimb)(byte)data[1];
                    var killerId   = data[2].ToString();

                    playerManager.TryGetOnlinePlayerById(killerId, out var killer);

                    @event = new UnturnedPlayerDeathEvent(unturnedPlayer, limb, deathCause, (killer as UnturnedPlayer)?.Entity);
                    break;
                }
                }

                if (@event != null)
                {
                    eventManager.Emit(this, @event);
                }
            }
            catch (Exception ex)
            {
                logger.LogError("Failed to receive packet \"" + method + "\"", ex);
            }
        }
Пример #32
0
 public static void send(CSteamID steamID, ESteamPacket type, byte[] packet, int size, int channel) // Override
 {
     if (!Provider.isConnected)
     {
         return;
     }
     changeField("_bytesSent", (uint)getField("_bytesSent") + (uint)size);
     changeField("_packetsSent", (uint)getField("_packetsSent") + 1u);
     if (Provider.isServer)
     {
         if (steamID == Provider.server || (Provider.isClient && steamID == Provider.client))
         {
             runMethod("receiveServer", new object[] {
                 Provider.server,
                 packet,
                 0,
                 size,
                 channel,
             });
             return;
         }
         if (steamID.m_SteamID == 0uL)
         {
             Debug.LogError("Failed to send to invalid steam ID.");
             return;
         }
         if ((bool)runMethod("isUnreliable", new object[] { type }))
         {
             if (!SteamGameServerNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)runMethod("isInstant", new object[] { type })) ? EP2PSend.k_EP2PSendUnreliable : EP2PSend.k_EP2PSendUnreliableNoDelay, channel))
             {
                 Debug.LogError(string.Concat(new object[]
                 {
                     "Failed to send size ",
                     size,
                     " unreliable packet to ",
                     steamID,
                     "!"
                 }));
             }
             return;
         }
         if (!SteamGameServerNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)runMethod("isInstant", new object[] { type })) ? EP2PSend.k_EP2PSendReliableWithBuffering : EP2PSend.k_EP2PSendReliable, channel))
         {
             Debug.LogError(string.Concat(new object[]
             {
                 "Failed to send size ",
                 size,
                 " reliable packet to ",
                 steamID,
                 "!"
             }));
         }
     }
     else
     {
         if (steamID == Provider.client)
         {
             runMethod("receiveClient", new object[] {
                 Provider.client,
                 packet,
                 0,
                 size,
                 channel,
             });
             Provider._connectionFailureInfo = ESteamConnectionFailureInfo.LATE_PENDING;
             Provider.disconnect();
             return;
         }
         if (steamID.m_SteamID == 0uL)
         {
             Debug.LogError("Failed to send to invalid steam ID.");
             Provider._connectionFailureInfo = ESteamConnectionFailureInfo.LATE_PENDING;
             Provider.disconnect();
             return;
         }
         if ((bool)runMethod("isUnreliable", new object[] { type }))
         {
             bool suc = false;
             for (int i = 0; i < maxRetryAmount; i++)
             {
                 if (!SteamNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)runMethod("isInstant", new object[] { type })) ? EP2PSend.k_EP2PSendUnreliable : EP2PSend.k_EP2PSendUnreliableNoDelay, channel))
                 {
                     Debug.LogError(string.Concat(new object[]
                     {
                         "Failed to send size ",
                         size,
                         " unreliable packet to ",
                         steamID,
                         "!"
                     }));
                 }
                 else
                 {
                     suc = true;
                     break;
                 }
             }
             if (!suc)
             {
                 Provider._connectionFailureInfo = ESteamConnectionFailureInfo.LATE_PENDING;
                 Provider.disconnect();
             }
             return;
         }
         bool suc1 = false;
         for (int i = 0; i < maxRetryAmount; i++)
         {
             if (!SteamNetworking.SendP2PPacket(steamID, packet, (uint)size, (!(bool)runMethod("isInstant", new object[] { type })) ? EP2PSend.k_EP2PSendReliableWithBuffering : EP2PSend.k_EP2PSendReliable, channel))
             {
                 Debug.LogError(string.Concat(new object[]
                 {
                     "Failed to send size ",
                     size,
                     " reliable packet to ",
                     steamID,
                     "!"
                 }));
             }
             else
             {
                 suc1 = true;
                 break;
             }
             if (!suc1)
             {
                 Provider._connectionFailureInfo = ESteamConnectionFailureInfo.LATE_PENDING;
                 Provider.disconnect();
             }
         }
     }
 }