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(); } } }
public static bool Prefix(ItemContainer __instance, Item _item, ref bool __result) { var self = __instance; if (PhotonNetwork.isNonMasterClientInRoom) { return(true); } if (BattleRoyale.Instance.IsGameplayStarting || PvP.Instance.CurrentGame == PvP.GameModes.BattleRoyale) { if (_item is Skill && self.OwnerCharacter != null && !self.OwnerCharacter.IsAI) { if (!self.OwnerCharacter.Inventory.SkillKnowledge.IsItemLearned(_item.ItemID)) { _item.ChangeParent(self.OwnerCharacter.Inventory.SkillKnowledge.transform); } __result = true; return(false); } if (_item is Weapon && self.OwnerCharacter != null) { if (Templates.Weapon_Skills.ContainsKey((int)(_item as Weapon).Type)) { int id = Templates.Weapon_Skills[(int)(_item as Weapon).Type]; if (self.OwnerCharacter.Inventory.SkillKnowledge is CharacterSkillKnowledge skills && !skills.IsItemLearned(id)) { var skill = ItemManager.Instance.GenerateItemNetwork(id); skill.ChangeParent(skills.transform); var learnedItems = At.GetField(skills as CharacterKnowledge, "m_learnedItems") as List <Item>; learnedItems.Add(skill); } } } } return(true); }
public static bool Prefix(InteractionRevive __instance) { var self = __instance; if (Instance.CurrentGame == GameModes.NONE) { return(true); } else { if (At.GetField(self as InteractionBase, "m_lastCharacter") is Character m_lastCharacter && m_lastCharacter.IsLocalPlayer) { RPCManager.Instance.SendUIMessageLocal(m_lastCharacter, "You cannot revive players during a game!"); Instance.StartCoroutine(Instance.FixReviveInteraction(self, self.OnActivationEvent)); self.OnActivationEvent = null; } return(false); } }
public static bool Prefix(ref bool __result, RaycastProjectile __instance, Vector3 _startRaycast, float _dist, ref RaycastHit _hit, ref Vector3 ___m_shootDir, float ___m_radiusAdd, float ___m_capsuleAdd, LockingPoint ___m_homingTarget, List <Character> ___m_hitCharList) { var self = __instance; if (!PvP.Instance.FriendlyFireEnabled || self.OwnerCharacter || self.OwnerCharacter.IsAI) { return(true); } _hit = default; RaycastHit[] array; int hitMask = RaycastHitLayerMask(self); if (self.Radius == 0f) { array = Physics.RaycastAll(_startRaycast, ___m_shootDir, _dist, hitMask); } else if (self.Capsule != 0f) { array = Physics.SphereCastAll(_startRaycast, self.Radius + ___m_radiusAdd, ___m_shootDir, _dist, hitMask); } else { array = Physics.CapsuleCastAll( _startRaycast - self.transform.right * (self.Capsule + ___m_capsuleAdd), _startRaycast + self.transform.right * (self.Capsule + ___m_capsuleAdd), self.Radius + ___m_radiusAdd, ___m_shootDir, _dist, hitMask ); } if (array.Length != 0) { var ignoredChar = (Character)At.GetField(__instance as Projectile, "m_ignoredCharacter"); int num = -1; for (int i = 0; i < array.Length; i++) { Character hitChar = array[i].collider.GetCharacterOwner(); // Added: check that we are not hitting ourselves if (self.OwnerCharacter.UID != hitChar.UID) { // This is the same check that the game does, just broken up so it's actually readable. bool valid = hitChar == null && !self.HitTargetOnly; if (!valid) { valid = !self.HitTargetOnly || (___m_homingTarget && hitChar == ___m_homingTarget.OwnerChar); valid &= hitChar != ignoredChar; valid &= !___m_hitCharList.Contains(hitChar) || (!self.MultiTarget && self.EndMode == Projectile.EndLifeMode.Normal); // removed: targetable check } if (valid) { if (array[i].point == Vector3.zero) { array[i].point = self.transform.position; } if (num == -1 || (_startRaycast - array[i].point).sqrMagnitude < (_startRaycast - array[num].point).sqrMagnitude) { if (hitChar) { ___m_hitCharList.Add(hitChar); } num = i; } } } } if (num != -1) { _hit = array[num]; __result = true; return(false); } } __result = false; return(false); }
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>(); } }