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
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
                }
            }
        }
Beispiel #5
0
        //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);
        }
Beispiel #7
0
        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);
            }
        }