Exemplo n.º 1
0
        public static bool Prefix(SearchCoordinator __instance)
        {
            try
            {
                if (__instance.Completor.ValidateUpdate())
                {
                    if (!(NetworkTime.time >= __instance.SessionPipe.Session.FinishTime))
                    {
                        return(false);
                    }
                    var allow = true;

                    Events.InvokePickupItemEvent(__instance.GetPlayer(), __instance.Completor.TargetPickup, ref allow);

                    if (!allow)
                    {
                        return(false);
                    }
                    __instance.Completor.Complete();
                    return(false);
                }
                else
                {
                    __instance.SessionPipe.Invalidate();
                }

                return(false);
            }
            catch (Exception e)
            {
                Log.Error($"PickupItem Event Error: {e}");
                return(false);
            }
        }
Exemplo n.º 2
0
        private static bool Prefix(SearchCoordinator __instance, ref bool __result, out SearchSession?session, out SearchCompletor completor)
        {
            try
            {
                SearchRequest request = __instance.SessionPipe.Request;

                SearchingPickupEventArgs ev = new(Player.Get(__instance.Hub), request.Target, request.Body, SearchCompletor.FromPickup(__instance, request.Target, __instance.ServerMaxRayDistanceSqr), request.Target.SearchTimeForPlayer(__instance.Hub));
                Handlers.Player.OnSearchPickupRequest(ev);

                completor = ev.SearchCompletor;
                if (!ev.IsAllowed)
                {
                    session   = null;
                    completor = null;
                    __result  = true;
                    return(false);
                }

                SearchSession body = ev.SearchSession;
                if (!__instance.isLocalPlayer)
                {
                    double num        = NetworkTime.time - request.InitialTime;
                    double num2       = LiteNetLib4MirrorServer.Peers[__instance.connectionToClient.connectionId].Ping * 0.001 * __instance.serverDelayThreshold;
                    float  searchTime = ev.SearchTime;
                    if (num < 0.0 || num2 < num)
                    {
                        body.InitialTime = NetworkTime.time - num2;
                        body.FinishTime  = body.InitialTime + searchTime;
                    }
                    else if (Math.Abs(body.FinishTime - body.InitialTime - searchTime) > 0.001)
                    {
                        body.FinishTime = body.InitialTime + searchTime;
                    }
                }

                session  = body;
                __result = true;
                return(false);
            }
            catch (Exception exception)
            {
                Log.Error($"{typeof(SearchingPickupEvent).FullName}.{nameof(Prefix)}:\n{exception}");
                session   = null;
                completor = null;
                return(true);
            }
        }
Exemplo n.º 3
0
        private static bool Prefix(SearchCoordinator __instance)
        {
            var item = __instance.Completor.TargetPickup?.GetSynapseItem();

            if (item == null)
            {
                return(true);
            }

            if (__instance.Completor.ValidateUpdate())
            {
                if (!(NetworkTime.time >= __instance.SessionPipe.Session.FinishTime))
                {
                    return(false);
                }
                var player = __instance.GetPlayer();

                var allow = true;
                try
                {
                    Server.Get.Events.Player.InvokePlayerPickUpEvent(player, item, out allow);
                }
                catch (Exception e)
                {
                    Logger.Get.Error($"Synapse-Event: PlayerPickUp failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                }

                if (!allow)
                {
                    __instance.SessionPipe.Invalidate();
                    return(false);
                }

                if (item.ItemType == ItemType.Ammo556 || item.ItemType == ItemType.Ammo762 || item.ItemType == ItemType.Ammo9mm)
                {
                    __instance.Completor.Complete();
                    item.Destroy();
                    return(false);
                }
                item.PickUp(player);
            }

            return(false);
        }
Exemplo n.º 4
0
        private static bool OnPickup(SearchCoordinator __instance)
        {
            try
            {
                var item      = __instance.Completor.TargetPickup?.GetSynapseItem();
                var schematic = item.PickupBase?.GetComponent <SynapseObjectScript>();
                var def       = schematic?.Object as DefaultSynapseObject;

                if (item == null)
                {
                    return(true);
                }

                if (!item.CanBePickedUp && (def == null || def.Parent.ItemParent == null))
                {
                    __instance.SessionPipe.Invalidate();
                    return(false);
                }

                if (__instance.Completor.ValidateUpdate())
                {
                    if (NetworkTime.time < __instance.SessionPipe.Session.FinishTime)
                    {
                        return(false);
                    }

                    var player = __instance.GetPlayer();
                    var allow  = true;

                    var change = def?.Parent?.ItemParent != null;
                    if (change)
                    {
                        item = def.Parent.ItemParent;
                    }

                    try
                    {
                        if (schematic != null)
                        {
                            var ev = new SOPickupEventArgs
                            {
                                Object = schematic.Object as SynapseItemObject,
                                Player = player
                            };
                            Server.Get.Events.SynapseObject.InvokePickup(ev);
                            if (!ev.Allow)
                            {
                                __instance.SessionPipe.Invalidate();
                                return(false);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Get.Error($"Synapse-Event: SynapseObject Pickup failed!!\n{ex}");
                    }

                    try
                    {
                        Server.Get.Events.Player.InvokePlayerPickUpEvent(player, item, out allow);
                    }
                    catch (Exception e)
                    {
                        Logger.Get.Error($"Synapse-Event: PlayerPickUp failed!!\n{e}");
                    }

                    if (!allow)
                    {
                        __instance.SessionPipe.Invalidate();
                        return(false);
                    }

                    if (change)
                    {
                        __instance.SessionPipe.Invalidate();
                        player.Inventory.AddItem(def.Parent.ItemParent);
                        return(false);
                    }

                    __instance.Completor.Complete();
                }
                else
                {
                    __instance.SessionPipe.Invalidate();
                }

                return(false);
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: PlayerPickUp Patch failed!!\n{e}");
                return(true);
            }
        }
Exemplo n.º 5
0
        private static bool OnPickup(SearchCoordinator __instance)
        {
            try
            {
                var item = __instance.Completor.TargetPickup?.GetSynapseItem();

                if (item == null)
                {
                    return(true);
                }

                if (item.CanBePickedUp && __instance.Completor.ValidateUpdate())
                {
                    if (NetworkTime.time < __instance.SessionPipe.Session.FinishTime)
                    {
                        return(false);
                    }

                    var player = __instance.GetPlayer();
                    var allow  = true;

                    try
                    {
                        if (item.PickupBase.gameObject.TryGetComponent <SynapseObjectScript>(out var obj))
                        {
                            var ev = new SOPickupEventArgs
                            {
                                Object = obj.Object as SynapseItemObject,
                                Player = player
                            };
                            Server.Get.Events.SynapseObject.InvokePickup(ev);
                            if (!ev.Allow)
                            {
                                __instance.SessionPipe.Invalidate();
                                return(false);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Get.Error($"Synapse-Event: SynapseObject Pickup failed!!\n{ex}");
                    }

                    try
                    {
                        Server.Get.Events.Player.InvokePlayerPickUpEvent(player, item, out allow);
                    }
                    catch (Exception e)
                    {
                        Logger.Get.Error($"Synapse-Event: PlayerPickUp failed!!\n{e}");
                    }

                    if (!allow)
                    {
                        __instance.SessionPipe.Invalidate();
                        return(false);
                    }

                    __instance.Completor.Complete();
                }
                else
                {
                    __instance.SessionPipe.Invalidate();
                }

                return(false);
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: PlayerPickUp Patch failed!!\n{e}");
                return(true);
            }
        }