public static bool Prefix(WeaponManager __instance) { if (PlaneNetworker_Receiver.dontPrefixNextJettison) { PlaneNetworker_Receiver.dontPrefixNextJettison = false; return(true); } List <int> toJettison = new List <int>(); Traverse traverse; Message_JettisonUpdate lastMesage; if (__instance.actor == null) { return(false); } else if (VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.TryGetValue(__instance.actor, out ulong networkUID)) { traverse = Traverse.Create(__instance); for (int i = 0; i < 30; i++) { HPEquippable equip = __instance.GetEquip(i); if (equip != null) { if (equip.markedForJettison) { toJettison.Add(equip.hardpointIdx); } } } if (toJettison.Count == 0) { Debug.Log("Tried to jettison nothing, not doing it"); return(true); } lastMesage = new Message_JettisonUpdate(toJettison.ToArray(), networkUID); if (Networker.isHost) { NetworkSenderThread.Instance.SendPacketAsHostToAllClients(lastMesage, Steamworks.EP2PSend.k_EP2PSendUnreliable); } else { NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, lastMesage, Steamworks.EP2PSend.k_EP2PSendUnreliable); } } else { Debug.LogError($"{networkUID} not found in AIDictionaries for jettison messsage to send."); } return(true); }
private void JettisonUpdate(Packet packet) { Message_JettisonUpdate message = ((PacketSingle)packet).message as Message_JettisonUpdate; if (message.networkUID != networkUID) { return; } if (message.toJettison == null) { Debug.LogError("Why did we get a jettison message that want's to jettison nothing?"); return; } foreach (var idx in message.toJettison) { HPEquippable equip = weaponManager.GetEquip(idx); if (equip != null) { equip.markedForJettison = true; } } dontPrefixNextJettison = true; weaponManager.JettisonMarkedItems(); }