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); } }
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); } }
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); }
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); } }
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); } }