コード例 #1
0
    public HPInfo[] GenerateHPInfo()
    {
        if (!Networker.isHost)
        {
            Debug.LogError("Generate HPInfo was ran from a player which isn't the host.");
            return(null);
        }

        List <HPInfo> hpInfos        = new List <HPInfo>();
        HPEquippable  lastEquippable = null;

        for (int i = 0; i < weaponManager.equipCount; i++)
        {
            lastEquippable = weaponManager.GetEquip(i);
            List <ulong> missileUIDS = new List <ulong>();
            if (lastEquippable.weaponType != HPEquippable.WeaponTypes.Gun &&
                lastEquippable.weaponType != HPEquippable.WeaponTypes.Rocket)
            {
                HPEquipMissileLauncher HPml = lastEquippable as HPEquipMissileLauncher;
                if (HPml.ml == null) //I think this could be null.
                {
                    break;
                }
                for (int j = 0; j < HPml.ml.missiles.Length; j++)
                {
                    //If they are null, they have been shot.
                    if (HPml.ml.missiles[i] == null)
                    {
                        missileUIDS.Add(0);
                        continue;
                    }

                    MissileNetworker_Receiver reciever = HPml.ml.missiles[i].gameObject.GetComponent <MissileNetworker_Receiver>();
                    if (reciever != null)
                    {
                        missileUIDS.Add(reciever.networkUID);
                    }
                    else
                    {
                        Debug.LogError($"Failed to get NetworkUID for missile ({HPml.ml.missiles[i].gameObject.name})");
                    }
                }
            }

            hpInfos.Add(new HPInfo(
                            lastEquippable.gameObject.name.Replace("(Clone)", ""),
                            lastEquippable.weaponType,
                            missileUIDS.ToArray()));
        }
        return(hpInfos.ToArray());
    }
コード例 #2
0
    private void SamUpdate(Packet packet)
    {
        if (samLauncher.lockingRadars == null)
        {
            List <LockingRadar> lockingRadars = new List <LockingRadar>();
            Actor lastActor;
            foreach (var uID in radarUIDS)
            {
                Debug.Log($"Try adding uID {uID} to SAM's radars.");
                if (VTOLVR_Multiplayer.AIDictionaries.allActors.TryGetValue(uID, out lastActor))
                {
                    Debug.Log("Got the actor.");
                    foreach (var radar in lastActor.gameObject.GetComponentsInChildren <LockingRadar>())
                    {
                        lockingRadars.Add(radar);
                        Debug.Log("Added radar to a sam launcher!");
                    }
                }
                else
                {
                    Debug.LogError($"Could not resolve actor from uID {uID}.");
                }
            }
            samLauncher.lockingRadars = lockingRadars.ToArray();
        }
        lastMessage = (Message_SamUpdate)((PacketSingle)packet).message;
        if (lastMessage.senderUID != networkUID)
        {
            return;
        }
        Debug.Log("Got a sam update message.");
        if (VTOLVR_Multiplayer.AIDictionaries.allActors.TryGetValue(lastMessage.actorUID, out lastActor))
        {
            foreach (var radar in samLauncher.lockingRadars)
            {
                Debug.Log("Found a suitable radar for this sam.");
                radar.ForceLock(lastActor, out lastData);
                if (lastData.locked)
                {
                    Debug.Log("Beginning sam launch routine for reciever.");
                    int       j        = 0;
                    Missile[] missiles = (Missile[])Traverse.Create(samLauncher).Field("missiles").GetValue();
                    for (int i = 0; i < missiles.Length; i++)
                    {
                        if (missiles[i] != null)
                        {
                            Debug.Log("Found a suitable missile to attach a reciever to.");
                            MissileNetworker_Receiver missileReciever = missiles[i].gameObject.AddComponent <MissileNetworker_Receiver>();
                            missileReciever.networkUID = lastMessage.missileUID;
                            Debug.Log($"Made new missile receiver with uID {missileReciever.networkUID}");
                            break;
                        }
                    }
                    Debug.Log("Firing sam.");
                    samLauncher.FireMissile(lastData);

                    /*Missile missile = (Missile)Traverse.Create(samLauncher).Field("firedMissile").GetValue();
                     * MissileNetworker_Receiver reciever = missile.gameObject.AddComponent<MissileNetworker_Receiver>();
                     * reciever.networkUID = lastMessage.missileUID;*/
                    return;
                }
                else
                {
                    Debug.Log("Couldn't force a lock, trying with another radar.");
                }
            }
        }
        else
        {
            Debug.Log($"Could not resolve lock for sam {networkUID}.");
        }
    }
コード例 #3
0
    public static List <HPInfo> generateHpInfoListFromWeaponManager(WeaponManager weaponManager, HPInfoListGenerateNetworkType networkType, ulong networkID = 0)
    {
        List <HPInfo> hpInfos = new List <HPInfo>();
        HPEquippable  lastEquippable;

        bool playerFlag = weaponManager.actor.isPlayer;

        for (int i = 0; i < weaponManager.equipCount; i++)
        {
            //Debug.Log("Weapon Manager, Equip " + i);
            lastEquippable = weaponManager.GetEquip(i);
            if (lastEquippable == null) //If this is null, it means there isn't any weapon in that slot.
            {
                continue;
            }
            //Debug.Log("Last Equippable = " + lastEquippable.fullName);
            List <ulong> missileUIDS = new List <ulong>();
            if (lastEquippable is HPEquipMissileLauncher HPml)
            {
                //Debug.Log("This last equip is a missile launcher");
                if (HPml.ml == null)
                {
                    Debug.LogError("The Missile Launcher was null on this Missile Launcher");
                    Debug.LogError("Type was = " + lastEquippable.weaponType);
                    continue;
                }
                if (HPml.ml.missiles == null)
                {
                    Debug.LogError("The missile list is null");
                    continue;
                }
                //Debug.Log($"This has {HPml.ml.missiles.Length} missiles");
                for (int j = 0; j < HPml.ml.missiles.Length; j++)
                {
                    //There shouldn't be any shot missiles, but if so this skips them as they are null.
                    if (HPml.ml.missiles[j] == null)
                    {
                        missileUIDS.Add(0);
                        //Debug.LogError("It seems there was a missile shot as it was null");
                        continue;
                    }
                    //Debug.Log("Adding Missle Networker to missile");
                    switch (networkType)
                    {
                    case HPInfoListGenerateNetworkType.generate:
                        MissileNetworker_Sender mnSender = HPml.ml.missiles[j].gameObject.AddComponent <MissileNetworker_Sender>();
                        mnSender.networkUID = Networker.GenerateNetworkUID();
                        missileUIDS.Add(mnSender.networkUID);
                        if (playerFlag)
                        {
                            HPml.ml.missiles[j].gameObject.name = Steamworks.SteamFriends.GetPersonaName() + "'s " + HPml.ml.missiles[j].gameObject.name;
                        }
                        break;

                    case HPInfoListGenerateNetworkType.sender:
                        MissileNetworker_Sender sender = HPml.ml.missiles[j].gameObject.GetComponent <MissileNetworker_Sender>();
                        if (playerFlag)
                        {
                            HPml.ml.missiles[j].gameObject.name = Steamworks.SteamFriends.GetPersonaName() + "'s " + HPml.ml.missiles[j].gameObject.name;
                        }
                        if (sender != null)
                        {
                            missileUIDS.Add(sender.networkUID);
                        }
                        else
                        {
                            Debug.LogError($"Failed to get NetworkUID for missile ({HPml.ml.missiles[j].gameObject.name})");
                        }
                        break;

                    case HPInfoListGenerateNetworkType.receiver:
                        MissileNetworker_Receiver reciever = HPml.ml.missiles[j].gameObject.GetComponent <MissileNetworker_Receiver>();
                        if (reciever != null)
                        {
                            missileUIDS.Add(reciever.networkUID);
                        }
                        else
                        {
                            Debug.LogError($"Receiver null, Failed to get NetworkUID for missile ({HPml.ml.missiles[j].gameObject.name})");
                        }
                        break;
                    }
                }
            }
            else if (lastEquippable is HPEquipGunTurret HPm230 && networkID != 0)
            {
                switch (networkType)
                {
                case HPInfoListGenerateNetworkType.generate:
                    Debug.Log("Added m230 turret sender");
                    TurretNetworker_Sender sender = HPm230.gameObject.AddComponent <TurretNetworker_Sender>();
                    sender.networkUID = networkID;
                    sender.turret     = HPm230.GetComponent <ModuleTurret>();
                    break;

                default:
                    break;
                }
            }

            hpInfos.Add(new HPInfo(
                            lastEquippable.gameObject.name.Replace("(Clone)", ""),
                            lastEquippable.hardpointIdx,
                            lastEquippable.weaponType,
                            missileUIDS.ToArray()));
        }

        return(hpInfos);
    }