public void SendSpawnEnemyRPC(string uid, float x, float y, float z) { if (BattleRoyale.Instance.EnemyCharacters.Find(w => w.UID == uid) is Character c) { c.gameObject.SetActive(true); c.Teleport(new Vector3(x, y, z), c.transform.rotation); // HIGHLY SPECIFIC TO MONSOON int value = 50; if (c.Name.ToLower().Contains("butcher")) { value = 200; } else if (c.name.ToLower().Contains("illuminator")) { value = 20; } At.SetField(c.Stats, "m_maxHealthStat", new Stat(value)); //BattleRoyale.Instance..FixEnemyStats(c.Stats); //foreach (PlayerSystem ps in Global.Lobby.PlayersInLobby.Where(w => w.IsLocalPlayer)) //{ // SendUIMessageLocal(ps.ControlledCharacter, c.Name + " has spawned!"); //} //BattleRoyale.Instance..EnemyCharacters.Remove(c); } }
private void ReleaseTarget() { hasTarget = false; m_target = null; At.SetField(VideoCamera.Instance, "m_targetTrans", null); At.SetField(VideoCamera.Instance, "m_state", VideoCamera.VideoCamState.NORMAL); }
private void SetFreeCam(bool active) { At.Invoke(VideoCamera.Instance, "SetCameraActive", active); if (active) { At.SetField(VideoCamera.Instance, "m_flyMode", true); Global.LockCursor(true); } }
private void SetTarget(Character target) { hasTarget = true; m_target = target; Global.LockCursor(true); RPCManager.Instance.SendUIMessageLocal(m_ownerCharacter, "Spectating " + target.Name); At.SetField(VideoCamera.Instance, "m_targetTrans", target.transform); At.SetField(VideoCamera.Instance, "m_state", VideoCamera.VideoCamState.FOLLOW_POS); }
private void CustomPlayerSetup(Character _char) { // wipe character var save = SaveManager.Instance.CreateNewCharacterSave(); save.PSave.NewSave = true; save.PSave.ManaPoint = 0; save.PSave.UID = _char.UID; save.PSave.Name = _char.Name; save.PSave.VisualData = _char.VisualData; save.PSave.Food = 1000f; save.PSave.Drink = 1000f; save.PSave.HardcoreMode = false; save.ApplyLoadedSaveToChar(_char); // ========= set custom stats ========== At.SetField(_char.Stats, "m_maxHealthStat", new Stat(500f)); At.SetField(_char.Stats, "m_maxStamina", new Stat(200f)); At.SetField(_char.Stats, "m_maxManaStat", new Stat(75f)); _char.Stats.GiveManaPoint(1); // ========= finalize ========== // disable character cheats _char.Cheats.Invincible = false; _char.Cheats.IndestructibleEquipment = false; _char.Cheats.NotAffectedByWeightPenalties = false; _char.Cheats.NeedsEnabled = true; // refresh stats At.Invoke(_char.Stats, "UpdateVitalStats"); _char.Stats.Reset(); _char.Stats.RestoreAllVitals(); if (At.GetField(_char.QuickSlotMngr, "m_quickSlots") is QuickSlot[] m_quickSlots) { for (int i = 0; i < m_quickSlots.Count(); i++) { _char.QuickSlotMngr.GetQuickSlot(i).Clear(); } } }
private IEnumerator GenerateSupplyDrops() { //OLogger.Warning("generating supply drops!"); if (ActiveItemContainers.Count() > 0) { if (PhotonNetwork.offlineMode) { RPCManager.Instance.RPCSendCleanup(); } else { RPCManager.Instance.photonView.RPC("RPCSendCleanup", PhotonTargets.All, new object[0]); } yield return(new WaitForSeconds(2f)); // wait 2 seconds after destroying the active objects, so we dont start destroying the new ones! } if (SupplyDropCounter == 1) { // first drop. generate initial supply caches for all players foreach (PlayerSystem ps in Global.Lobby.PlayersInLobby) { Character _char = ps.ControlledCharacter; TreasureChest stash = ItemManager.Instance.GenerateItemNetwork(1000110).GetComponent <TreasureChest>(); stash.transform.position = _char.transform.position + new Vector3(1.5f, 0, 1.5f); ActiveItemContainers.Add(stash.gameObject); if (!PhotonNetwork.offlineMode) { RPCManager.Instance.photonView.RPC("RPCGenerateStash", PhotonTargets.Others, new object[] { stash.ItemID, stash.UID, stash.transform.position.x, stash.transform.position.y, stash.transform.position.z }); } At.Invoke(stash, "InitDrops"); for (int i = 0; i < 5; i++) { At.SetField(stash, "m_hasGeneratedContent", false); stash.GenerateContents(); } } } else { RPCManager.SendMessageToAll("Supply Chests are spawning!"); // generate chest or ornate chest List <Vector3> locations = Templates.BR_Templates.SupplyDropLocations[SceneManagerHelper.ActiveSceneName].ToList(); // 1 supply drop per 2 players. minimum of 2 drops. int numOfDrops = (int)Math.Ceiling(PlayerManager.Instance.GetRemainingPlayers().Count() * 0.5f); numOfDrops = (int)Mathf.Clamp(numOfDrops, 2, locations.Count()); //Debug.Log("Generating " + numOfDrops + " supply drops from a locations list size of " + locations.Count()); for (int i = 0; i < numOfDrops; i++) { if (locations.Count == 0) { break; } int random = UnityEngine.Random.Range(0, locations.Count()); //Debug.Log("Rolled location index " + random); GenerateChestSingle(locations[random]); locations.RemoveAt(random); } } }
private void LocalSceneSetup() { // set TOD EnvironmentConditions.Instance.SetTimeOfDay(Templates.BR_Templates.TimeOfDayStarts[SceneManagerHelper.ActiveSceneName]); // DEACTIVATE OBJECTS if (Templates.BR_Templates.ObjectsToDeactivate.ContainsKey(SceneManagerHelper.ActiveSceneName)) { foreach (string s in Templates.BR_Templates.ObjectsToDeactivate[SceneManagerHelper.ActiveSceneName]) { if (GameObject.Find(s) is GameObject obj) { if (s == "JesusBeam") { beamObject = obj; } // hold onto the jesusbeam obj.SetActive(false); } } } // ACTIVATE OBJECTS if (Templates.BR_Templates.ObjectsToActivate.ContainsKey(SceneManagerHelper.ActiveSceneName)) { foreach (string s in Templates.BR_Templates.ObjectsToActivate[SceneManagerHelper.ActiveSceneName]) { if (GameObject.Find(s) is GameObject obj) { obj.SetActive(true); } else if (FindInactiveObjectByName(s) is GameObject obj2) { obj2.SetActive(true); } } } // get enemy list for RPC setactive calls EnemyCharacters.Clear(); foreach (Character c in CharacterManager.Instance.Characters.Values.Where(x => x.IsAI && x.Faction != Character.Factions.Player)) { //Debug.Log("adding " + c.Name + " to enemycharacters dict!"); EnemyCharacters.Add(c); c.gameObject.SetActive(false); } //// ====== setup local characters ======= foreach (PlayerSystem ps in Global.Lobby.PlayersInLobby.Where(x => x.IsLocalPlayer)) { Character c = ps.ControlledCharacter; var pouchUID = "Pouch_" + c.UID; if (ItemManager.Instance.GetItem(pouchUID)) { ItemManager.Instance.DestroyItem(pouchUID); } // fix inventory/pouch ItemContainer pouchContainer = null; if (c.Inventory.PouchPrefab) { var transform = Instantiate(c.Inventory.PouchPrefab); transform.SetParent(base.transform, false); pouchContainer = transform.GetComponent <ItemContainer>(); pouchContainer.SetKeepAlive(); pouchContainer.UID = "CustomPouch_" + c.UID; pouchContainer.ProcessInit(); At.SetField(c.Inventory, "m_inventoryPouch", pouchContainer); if (PhotonNetwork.isNonMasterClientInRoom) { pouchContainer.ForceUpdateParentChange(); } } if (c.Inventory.MapKnowledge == null) { var mk = new CharacterMapKnowledge(); mk.Init(); At.SetField(c.Inventory, "m_mapKnowledge", mk); } c.Inventory.Equipment.ProcessStart(); // give starter items SetupStarterPack(c); // DOUBLE PURGE c.StatusEffectMngr.Purge(); } // ==== disable compass ==== foreach (UICompass compass in Resources.FindObjectsOfTypeAll <UICompass>()) { compass.Hide(); } }
public static void Prefix(Character __instance) { var self = __instance; if (PvP.Instance.CurrentGame != PvP.GameModes.BattleRoyale) { return; } if (!self.IsAI) { //Debug.Log("Dropping player stuff!"); // custom player death (drop items) if (!PhotonNetwork.isNonMasterClientInRoom && At.GetField(self, "m_lastDealers") is List <Pair <UID, float> > lastDealers) { float lowest = Time.time; string uid = ""; foreach (var entry in lastDealers) { if (entry.Value < lowest) { lowest = entry.Value; uid = entry.Key; } } if (uid != "" && CharacterManager.Instance.GetCharacter(uid) is Character lastDealer) { lastDealers.Clear(); At.SetField(self, "m_lastDealers", lastDealer); RPCManager.SendMessageToAll(lastDealer.Name + " has defeated " + self.Name); } } foreach (EquipmentSlot equipslot in self.Inventory.Equipment.EquipmentSlots.Where(x => x != null && x.HasItemEquipped)) { self.Inventory.DropItem(equipslot.EquippedItem.UID); } } else { if (self.Inventory == null || self.GetComponent <LootableOnDeath>() == null) { return; } if (!self.Inventory.Pouch || !self.Inventory.Pouch.FullyInitialized) { self.Inventory.ProcessStart(); } // SPECIFIC TO MONSOON MAP if (!PhotonNetwork.isNonMasterClientInRoom) { if (self.Name.ToLower().Contains("butcher")) { BattleRoyale.Instance.AddItemsToContainer(Templates.BR_Templates.Skills_High, 3, self.Inventory.Pouch.transform); BattleRoyale.Instance.AddItemsToContainer(Templates.BR_Templates.Weapons_High, 1, self.Inventory.Pouch.transform); } else if (self.Name == "Immaculate" || self.name == "Shell Horror") { BattleRoyale.Instance.AddItemsToContainer(Templates.BR_Templates.Skills_High, 1, self.Inventory.Pouch.transform); BattleRoyale.Instance.AddItemsToContainer(Templates.BR_Templates.Skills_Low, 2, self.Inventory.Pouch.transform); } else { BattleRoyale.Instance.AddItemsToContainer(Templates.BR_Templates.Skills_Low, 3, self.Inventory.Pouch.transform); } } } if (__instance.IsLocalPlayer) { // begin spectate __instance.OwnerPlayerSys.gameObject.AddComponent <Spectate>(); } }