Ejemplo n.º 1
0
        public override void OnEnter()
        {
            base.OnEnter();

            Debug.Log("Called allyping");

            MinionOwnership[] array;



            foreach (MinionOwnership.MinionGroup minionGroup in instancesList)
            {
                if (minionGroup.ownerId == base.characterBody.master.netId)
                {
                    if (AllyPing.GetMinionMembers(minionGroup, out array))
                    {
                        foreach (PlayerCharacterMasterController playerNetworkUser in PlayerCharacterMasterController.instances)
                        {
                            if (playerNetworkUser.netId == base.characterBody.master.netId)
                            {
                                PingerController pingerController = playerNetworkUser.GetComponent <PingerController>();
                                minions = array;
                                target  = pingerController.currentPing.targetGameObject;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private bool FetchPingControllers(out PingerController[] pingerControllers)
        {
            if (NetworkUser.readOnlyInstancesList.Count <= 0)
            {
                pingerControllers = null;
                return(false);
            }

            List <PingerController> listPingerControllers = new List <PingerController>();

            foreach (NetworkUser nu in NetworkUser.readOnlyInstancesList)
            {
                if (nu.masterController)
                {
                    PingerController foundPc = nu.masterController.GetComponent <PingerController>();

                    if (foundPc)
                    {
                        listPingerControllers.Add(foundPc);
                    }
                }
            }

            if (listPingerControllers.Count <= 0)
            {
                pingerControllers = null;
                return(false);
            }

            pingerControllers = listPingerControllers.ToArray();
            return(true);
        }
Ejemplo n.º 3
0
 public bool TryUpdatePingInfo()
 {
     if (!owner.body || !owner.bodyInputs)
     {
         return(false);
     }
     PingerController.GeneratePingInfo(new Ray(owner.bodyInputs.aimOrigin, owner.bodyInputs.aimDirection), owner.body.gameObject, out lastPingInfo);
     return(true);
 }
Ejemplo n.º 4
0
        private void Awake()
        {
            IL.RoR2.CharacterBody.HandleConstructTurret += (il) => {
                var c = new ILCursor(il);

                c.GotoNext(x => x.MatchStloc(4));
                c.Emit(OpCodes.Ldloc_2);
                c.EmitDelegate <Func <CharacterMaster, CharacterMaster, CharacterMaster> >((turret, master) => {
                    turret.gameObject.AddComponent <AIOwnership>().ownerMaster = master;

                    return(turret);
                });
            };


            IL.RoR2.CharacterAI.BaseAI.FixedUpdate += (il2) => {
                var c2 = new ILCursor(il2);
                c2.Emit(OpCodes.Ldarg_0);

                c2.EmitDelegate <Action <BaseAI> >((ai) => {
                    if (ai.leader.characterBody != null)
                    {
                        BaseAI.Target leader = ai.leader;


                        if (leader.characterBody.isPlayerControlled)
                        {
                            PingerController p = null; //leader.characterBody.master.GetComponent<PingerController>();
                            foreach (PlayerCharacterMasterController item in PlayerCharacterMasterController.instances)
                            {
                                if (item.master.alive)
                                {
                                    if (item.master.GetBody().GetUserName() == leader.characterBody.GetUserName())
                                    {
                                        p = (PingerController)pingerController.GetValue(item);
                                    }
                                }
                            }
                            if (p != null)
                            {
                                if (p.currentPing.targetGameObject != null)
                                {
                                    ((BaseAI.Target)currentEnemy.GetValue(ai)).gameObject = p.currentPing.targetGameObject;
                                }
                            }
                        }
                    }
                });
            };
        }
Ejemplo n.º 5
0
        private static PingIndicator CreatePingIndicator(PingerController self, PingerController.PingInfo pingInfo, bool neverExpire = true)
        {
            var pingIndicator = ((GameObject)UnityEngine.Object.Instantiate(Resources.Load("Prefabs/PingIndicator"))).GetComponent <PingIndicator>();

            pingIndicator.pingOwner  = self.gameObject;
            pingIndicator.pingOrigin = pingInfo.origin;
            pingIndicator.pingNormal = pingInfo.normal;
            pingIndicator.pingTarget = pingInfo.targetGameObject;
            pingIndicator.RebuildPing();
            // Never expire plz.
            if (neverExpire)
            {
                var field = typeof(PingIndicator).GetField("fixedTimer", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | System.Reflection.BindingFlags.Instance);
                field.SetValue(pingIndicator, float.MaxValue);
            }
            return(pingIndicator);
        }
Ejemplo n.º 6
0
 private void TogglePing(GameObject body, PingerController self, PingerController.PingInfo pingInfo)
 {
     if (pings.ContainsKey(body) && pings[body])
     {
         UnityEngine.Object.Destroy((UnityEngine.Object)pings[body].gameObject);
         pings.Remove(body);
     }
     else if (pings.ContainsKey(body))
     {
         // If the PI is destroyed somewhere else in the game, it suddenly turns into a null reference? WTF?
         // In this case, the PI is not really visible. Let's remove the old (null) one, and create a new one.
         pings.Remove(body);
         pings.Add(body, CreatePingIndicator(self, pingInfo));
     }
     else
     {
         // Create a new ping indicator.
         pings.Add(body, CreatePingIndicator(self, pingInfo));
     }
 }
Ejemplo n.º 7
0
 public void Awake()
 {
     this.master = base.gameObject.GetComponent <CharacterMaster>();
     this.baseAI = base.gameObject.GetComponent <PlayerBotBaseAI>();
     this.pinger = base.gameObject.GetComponent <PingerController>();
 }
Ejemplo n.º 8
0
        private void PingerController_RebuildPing(On.RoR2.PingerController.orig_RebuildPing orig, PingerController self, PingerController.PingInfo pingInfo)
        {
            Type[] types = { typeof(ShopTerminalBehavior) /* MultiShops */, typeof(ShrineChanceBehavior), typeof(ChestBehavior), typeof(TeleporterInteraction) };
            Type   ty    = null;

            try
            {
                // TODO: Find a FirstOr method...
                ty = types.First((t) => pingInfo.targetGameObject?.GetComponent(t) != null);
            }
            catch (InvalidOperationException e) { /* Do nothing */ }

            if (ty != null)
            {
                TogglePing(pingInfo.targetGameObject?.GetComponent(ty).gameObject, self, pingInfo);
            }
            else
            {
                // TODO: Broken.
                //orig(self, pingInfo);

                // Since calling orig is broken, let's just copy pasta the game's code, with some small adjustments to take into account the fact that there's only a single behavior
                // (instead of one per player)
                if (!this.ownedPings.ContainsKey(self.gameObject))
                {
                    this.ownedPings[self.gameObject] = null;
                }

                if (!pingInfo.active && this.ownedPings[self.gameObject] != null)
                {
                    UnityEngine.Object.Destroy((UnityEngine.Object) this.ownedPings[self.gameObject].gameObject);
                    this.ownedPings[self.gameObject] = (PingIndicator)null;
                }
                else
                {
                    if (!(bool)((UnityEngine.Object) this.ownedPings[self.gameObject]))
                    {
                        this.ownedPings[self.gameObject]           = ((GameObject)UnityEngine.Object.Instantiate(Resources.Load("Prefabs/PingIndicator"))).GetComponent <PingIndicator>();
                        this.ownedPings[self.gameObject].pingOwner = ((Component)self).gameObject;
                    }
                    this.ownedPings[self.gameObject].pingOrigin = pingInfo.origin;
                    this.ownedPings[self.gameObject].pingNormal = pingInfo.normal;
                    this.ownedPings[self.gameObject].pingTarget = pingInfo.targetGameObject;
                    this.ownedPings[self.gameObject].RebuildPing();
                }
            }
        }
Ejemplo n.º 9
0
 private void On_CmdPing(On.RoR2.PingerController.orig_CmdPing orig, PingerController self, PingerController.PingInfo incomingPing)
 {
     orig(self, incomingPing);
     FrogtownShared.SendChat(string.Format("Origin: {0}", FormatVector3String(incomingPing.origin)));
     FrogtownShared.SendChat(string.Format("Normal: {0}", FormatVector3String(incomingPing.normal)));
 }
Ejemplo n.º 10
0
        private void PingerController_SetCurrentPing(On.RoR2.PingerController.orig_SetCurrentPing orig, PingerController self, PingerController.PingInfo newPingInfo)
        {
            orig(self, newPingInfo);

            var user = UsersHelper.GetUser(self);
            var item = newPingInfo.targetGameObject?.GetComponent <GenericPickupController>();

            if (item && user)
            {
                watchedPingedItems[user.id] = item.GetInstanceID();
            }
            else if (user)
            {
                watchedPingedItems.Remove(user.id);
            }
        }
Ejemplo n.º 11
0
        public static NetworkUser GetUser(PingerController userPinger)
        {
            var player = userPinger?.GetComponent <CharacterMaster>();

            return(GetUser(player));
        }