Ejemplo n.º 1
0
    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();
    }