private static void ShareKillMoney(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport damageReport) { orig(self, damageReport); if (!GeneralHooks.IsMultiplayer()) { return; } #region Sharedmoney // Collect reward from kill and put it into shared pool SharedMoneyValue += (int)self.goldReward; if (!ShareSuite.MoneyScalarEnabled.Value || !NetworkServer.active) { return; } AddToSharedMoneyValue(self.goldReward); #endregion }
private void MoneyReduction(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport rep) { if (rep.attackerBody && self) { var inventoryCount = GetCount(rep.attackerMaster); if (inventoryCount > 0) { var insuranceSavingsTrackerComponent = rep.attackerMaster.gameObject.GetComponent <InsuranceSavingsTracker>(); if (!insuranceSavingsTrackerComponent) { rep.attackerMaster.gameObject.AddComponent <InsuranceSavingsTracker>(); } uint origGold = self.goldReward; uint reducedGold = (uint)Mathf.FloorToInt(self.goldReward * (1 - ((.5f * inventoryCount) / (inventoryCount + 1)))); uint investedGold = origGold - reducedGold; self.goldReward = reducedGold; //Could you theoretically go over uint.MaxValue here? idk insuranceSavingsTrackerComponent.insuranceSavings += investedGold; Debug.LogError("The money is actually being tracked. Rn you have " + insuranceSavingsTrackerComponent.insuranceSavings); } } orig(self, rep); }
private void On_DROnKilledServer(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport rep) { int icnt = GetCount(rep.attackerBody); self.goldReward = (uint)Mathf.FloorToInt(self.goldReward * (1f + icnt * moneyMult)); orig(self, rep); }
private void DeathRewardsOnOnKilledServer(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport damagereport) { orig(self, damagereport); foreach (var mimic in _chestMimics.ToList()) { if (mimic.BoundReward == self) { PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(mimic.BoundItem), self.transform.position, 5f * Vector3.up); _chestMimics.Remove(mimic); } } }
//private void ConvertPlayerMoneyToExperience_Start(On.RoR2.ConvertPlayerMoneyToExperience.orig_Start orig, ConvertPlayerMoneyToExperience self) //{ // self.burstCount = 1; // //self.burstInterval = 0.05f; // orig(self); //} private void DeathRewards_OnKilledServer(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport damageReport) { if (isTeleporterBossDead) { SaveCurrentPlayerMoney(); } orig(self, damageReport); GiveExpToPlayers(); //experienceCollector = base.gameObject.AddComponent<ConvertPlayerMoneyToExperience>(); //doesn't work because any money added within a certain amount of time just evaporates if (damageReport.victimMaster.isBoss) { GiveMoneyToPlayers(ModConfig.MoneyGrantedPerTeleporterBossClear.Value); } else if (isTeleporterBossDead) { RestoreCurrentPlayerMoney(); } }
private void MoneyReduction(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport rep) { uint inventoryCount = Convert.ToUInt32(GetCount(rep.attackerBody)); if (inventoryCount > 0) { uint reducedGold = (uint)Mathf.FloorToInt(self.goldReward * (1 - ((25 * inventoryCount) / 100 + (25 * (inventoryCount - 1))))); uint investedGold = (uint)Mathf.FloorToInt(self.goldReward - reducedGold + ((self.goldReward - reducedGold) * ((inventoryCount - 1) / 4))); self.goldReward = reducedGold; var insuranceSavingsTrackerComponent = rep.attackerBody.master.gameObject.GetComponent <InsuranceSavingsTracker>(); if (!insuranceSavingsTrackerComponent) { rep.attackerBody.master.gameObject.AddComponent <InsuranceSavingsTracker>(); } //Could you theoretically go over uint.MaxValue here? idk insuranceSavingsTrackerComponent.insuranceSavings += investedGold; } orig(self, rep); }
private void On_DROnKilledServer(On.RoR2.DeathRewards.orig_OnKilledServer orig, DeathRewards self, DamageReport damageReport) { orig(self, damageReport); if (damageReport == null) { return; } CharacterBody victimBody = damageReport.victimBody; if (victimBody == null || victimBody.teamComponent.teamIndex != TeamIndex.Monster || !victimBody.isElite) { return; } int numberOfClovers = 0; if (globalStack) { foreach (CharacterMaster chrm in AliveList()) { if (!inclDeploys && chrm.GetComponent <Deployable>()) { continue; } numberOfClovers += chrm?.inventory?.GetItemCount(catalogIndex) ?? 0; } } else { numberOfClovers += damageReport.attackerMaster?.inventory?.GetItemCount(catalogIndex) ?? 0; } if (numberOfClovers == 0) { return; } float rareChance = Math.Min(baseRare + (numberOfClovers - 1) * stackRare, capRare); float uncommonChance = Math.Min(baseUnc + (numberOfClovers - 1) * stackUnc, capUnc); float anyDropChance = Math.Min(baseChance + (numberOfClovers - 1) * stackChance, capChance); //Base drop chance is multiplicative with tier chances -- tier chances are applied to upgrade the dropped item if (Util.CheckRoll(anyDropChance)) { int tier; if (Util.CheckRoll(rareChance)) { tier = 2; } else if (Util.CheckRoll(uncommonChance)) { tier = 1; } else { if (Util.CheckRoll(baseEqp)) { tier = 4; } else { tier = 0; } } SpawnItemFromBody(victimBody, tier, rng); } }