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; } } } } } }
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); }
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); }
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; } } } } }); }; }
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); }
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)); } }
public void Awake() { this.master = base.gameObject.GetComponent <CharacterMaster>(); this.baseAI = base.gameObject.GetComponent <PlayerBotBaseAI>(); this.pinger = base.gameObject.GetComponent <PingerController>(); }
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(); } } }
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))); }
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); } }
public static NetworkUser GetUser(PingerController userPinger) { var player = userPinger?.GetComponent <CharacterMaster>(); return(GetUser(player)); }