Ejemplo n.º 1
0
        public void killCharacter(CharacterInstance target, CharacterInstance killer, bool critted, bool instantDestruction, [Optional, DefaultParameterValue(0)] SkillType fromSkill)
        {
            ActiveDungeon activeDungeon = GameLogic.Binder.GameState.ActiveDungeon;

            if (this.m_characterDestructionQueue.Contains(target))
            {
                if (instantDestruction)
                {
                    this.m_characterDestructionTimers[target] = 0f;
                }
            }
            else
            {
                CmdKillCharacter.ExecuteStatic(target, killer, critted, instantDestruction, fromSkill);
                if ((target == activeDungeon.PrimaryPlayerCharacter) && !instantDestruction)
                {
                    for (int i = 0; i < GameLogic.Binder.GameState.PersistentCharacters.Count; i++)
                    {
                        CharacterInstance instance = GameLogic.Binder.GameState.PersistentCharacters[i];
                        if (instance != target)
                        {
                            this.killCharacter(instance, null, false, false, SkillType.NONE);
                        }
                    }
                }
                if (!target.IsPersistent)
                {
                    this.m_characterDestructionQueue.Add(target);
                    if (instantDestruction)
                    {
                        this.m_characterDestructionTimers.Add(target, 0f);
                    }
                    else
                    {
                        float num2 = (ConfigGameplay.DEATH_ENTRY_DURATION + ConfigGameplay.DEATH_REMAIN_DURATION) + UnityEngine.Random.Range((float)0f, (float)1f);
                        if (Time.timeScale > 1f)
                        {
                            num2 *= Time.timeScale;
                        }
                        this.m_characterDestructionTimers.Add(target, num2);
                    }
                }
                if ((!target.IsPlayerCharacter && activeDungeon.hasDungeonModifier(DungeonModifierType.MonsterExploding)) && (UnityEngine.Random.Range((float)0f, (float)1f) <= ConfigDungeonModifiers.MonsterExploding.ProcChance))
                {
                    ExplosionSkill.ExecuteStatic(null, target.PositionAtTimeOfDeath, null, ConfigDungeonModifiers.MonsterExploding.DamagePct);
                }
            }
        }
Ejemplo n.º 2
0
 private void onDungeonBoostActivated(DungeonBoost dungeonBoost, SkillType fromSkill)
 {
     if (dungeonBoost.Properties.Type == DungeonBoostType.EmptyBox)
     {
         ActiveDungeon activeDungeon  = GameLogic.Binder.GameState.ActiveDungeon;
         Player        player         = GameLogic.Binder.GameState.Player;
         double        baseCoinReward = App.Binder.ConfigMeta.MinionCoinDropCurve(activeDungeon.Floor);
         double        v = player.calculateStandardCoinRoll(baseCoinReward, GameLogic.CharacterType.UNSPECIFIED, 1) * App.Binder.ConfigMeta.DUNGEON_BOOST_EMPTY_BOX_COIN_GAIN_CONTROLLER;
         if (activeDungeon.hasDungeonModifier(DungeonModifierType.DungeonBoostBoxBonusCoins))
         {
             v *= ConfigDungeonModifiers.DungeonBoostBoxBonusCoins.CoinMultiplier;
         }
         v = MathUtil.Clamp(v, 1.0, double.MaxValue);
         CmdGainResources.ExecuteStatic(player, ResourceType.Coin, v, true, "TRACKING_ID_GAMEPLAY_LOOT_GAIN", new Vector3?(dungeonBoost.Transform.position));
     }
 }
        protected void FixedUpdate()
        {
            ActiveDungeon activeDungeon = GameLogic.Binder.GameState.ActiveDungeon;

            if (((activeDungeon != null) && (activeDungeon.ActiveRoom != null)) && ((!activeDungeon.ActiveRoom.MainBossSummoned && !activeDungeon.ActiveRoom.CompletionTriggered) && (!activeDungeon.isTutorialDungeon() && (activeDungeon.CurrentGameplayState == GameplayState.ACTION))))
            {
                Player player = GameLogic.Binder.GameState.Player;
                bool   flag   = true;
                for (int i = 0; i < activeDungeon.ActiveRoom.ActiveCharacters.Count; i++)
                {
                    CharacterInstance instance = activeDungeon.ActiveRoom.ActiveCharacters[i];
                    if (!instance.IsPlayerCharacter && !instance.IsDead)
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag)
                {
                    int num3;
                    int num2 = activeDungeon.ActiveRoom.getNextCharacterSpawnpointIndex(this.m_prevMobSpawnpointIndex);
                    if (activeDungeon.hasDungeonModifier(DungeonModifierType.HordeMaxSize))
                    {
                        num3 = App.Binder.ConfigMeta.FRENZY_MOB_SPAWNCOUNT_PER_SPAWNPOINT_MAX;
                    }
                    else if (GameLogic.Binder.FrenzySystem.isFrenzyActive())
                    {
                        num3 = Mathf.FloorToInt(Mathf.Lerp((float)App.Binder.ConfigMeta.FRENZY_MOB_SPAWNCOUNT_PER_SPAWNPOINT_MIN, (float)App.Binder.ConfigMeta.FRENZY_MOB_SPAWNCOUNT_PER_SPAWNPOINT_MAX, player.ActiveCharacter.getSpurtBuffStrength()));
                    }
                    else
                    {
                        num3 = Mathf.FloorToInt(Mathf.Lerp((float)ConfigGameplay.MOB_SPAWNCOUNT_PER_SPAWNPOINT_MIN_RANGE.getRandom(), (float)ConfigGameplay.MOB_SPAWNCOUNT_PER_SPAWNPOINT_MAX_RANGE.getRandom(), player.ActiveCharacter.getSpurtBuffStrength()));
                    }
                    int num4 = player.getRemainingMinionKillsUntilFloorCompletion(activeDungeon.Floor, activeDungeon.isTutorialDungeon(), player.getLastBossEncounterFailed(false));
                    if (!activeDungeon.isBossFloor() && (num4 < num3))
                    {
                        num3 = num4;
                    }
                    this.spawnRoomMinionHordeAtSpawnpoint(activeDungeon.ActiveRoom, activeDungeon.ActiveRoom.CharacterSpawnpoints[num2], num3, null);
                    this.m_prevMobSpawnpointIndex = num2;
                }
                if (this.m_pendingWildBossSpawn)
                {
                    this.trySummonWildBoss();
                }
            }
        }
Ejemplo n.º 4
0
        private void onPrimaryHeroDealtDamage(CharacterInstance sourceCharacter, CharacterInstance targetCharacter, Vector3 worldPos, double amount, bool critted, bool damageReduced, DamageType damageType, SkillType fromSkill)
        {
            Buff          buff3;
            ActiveDungeon activeDungeon = GameLogic.Binder.GameState.ActiveDungeon;
            List <KeyValuePair <PerkInstance, BuffSource> > perkInstancesOfType = CharacterStatModifierUtil.GetPerkInstancesOfType(targetCharacter, PerkType.WoundedArmor);

            for (int i = 0; i < perkInstancesOfType.Count; i++)
            {
                KeyValuePair <PerkInstance, BuffSource> pair  = perkInstancesOfType[i];
                KeyValuePair <PerkInstance, BuffSource> pair2 = perkInstancesOfType[i];
                GameLogic.Binder.BuffSystem.startBuffFromPerk(targetCharacter, PerkType.WoundedArmor, ConfigPerks.SHARED_DATA[PerkType.WoundedArmor].DurationSeconds, (double)pair.Key.Modifier, pair2.Value, null);
            }
            perkInstancesOfType = CharacterStatModifierUtil.GetPerkInstancesOfType(targetCharacter, PerkType.WoundedAttackSpeed);
            for (int j = 0; j < perkInstancesOfType.Count; j++)
            {
                KeyValuePair <PerkInstance, BuffSource> pair3 = perkInstancesOfType[j];
                KeyValuePair <PerkInstance, BuffSource> pair4 = perkInstancesOfType[j];
                GameLogic.Binder.BuffSystem.startBuffFromPerk(targetCharacter, PerkType.WoundedAttackSpeed, ConfigPerks.SHARED_DATA[PerkType.WoundedAttackSpeed].DurationSeconds, (double)pair3.Key.Modifier, pair4.Value, null);
            }
            perkInstancesOfType = CharacterStatModifierUtil.GetPerkInstancesOfType(targetCharacter, PerkType.WoundedDamage);
            for (int k = 0; k < perkInstancesOfType.Count; k++)
            {
                KeyValuePair <PerkInstance, BuffSource> pair5 = perkInstancesOfType[k];
                KeyValuePair <PerkInstance, BuffSource> pair6 = perkInstancesOfType[k];
                GameLogic.Binder.BuffSystem.startBuffFromPerk(targetCharacter, PerkType.WoundedDamage, ConfigPerks.SHARED_DATA[PerkType.WoundedDamage].DurationSeconds, (double)pair5.Key.Modifier, pair6.Value, null);
            }
            if ((sourceCharacter != null) && (damageType == DamageType.Ranged))
            {
                float num4 = targetCharacter.getGenericModifierForPerkType(PerkType.RangedDamageDeflection);
                if (num4 > 0f)
                {
                    double baseAmount = MathUtil.Clamp(Math.Round((double)(amount * num4)), 0.0, double.MaxValue);
                    if (baseAmount > 0.0)
                    {
                        CmdDealDamageToCharacter.ExecuteStatic(targetCharacter, sourceCharacter, baseAmount, false, damageType, SkillType.NONE);
                    }
                }
            }
            if (sourceCharacter != null)
            {
                float num6 = targetCharacter.getGenericModifierForPerkType(PerkType.DamageDeflection);
                if (num6 > 0f)
                {
                    double num7 = MathUtil.Clamp(Math.Round((double)(amount * num6)), 0.0, double.MaxValue);
                    if (num7 > 0.0)
                    {
                        CmdDealDamageToCharacter.ExecuteStatic(targetCharacter, sourceCharacter, num7, false, damageType, SkillType.NONE);
                    }
                }
            }
            float num8 = targetCharacter.getGenericModifierForPerkType(PerkType.MassDamageDeflection);

            if (num8 > 0f)
            {
                double num9 = MathUtil.Clamp(Math.Round((double)(amount * num8)), 0.0, double.MaxValue);
                if (num9 > 0.0)
                {
                    List <CharacterInstance> list2 = activeDungeon.ActiveRoom.getEnemyCharactersWithinRadius(targetCharacter.PhysicsBody.Transform.position, ConfigPerks.MassDamageDeflection.Radius, targetCharacter);
                    for (int m = 0; m < list2.Count; m++)
                    {
                        CmdDealDamageToCharacter.ExecuteStatic(targetCharacter, list2[m], num9, false, damageType, SkillType.NONE);
                    }
                }
            }
            if ((sourceCharacter != null) && activeDungeon.hasDungeonModifier(DungeonModifierType.MonsterStun))
            {
                float num11 = !sourceCharacter.IsBoss ? ConfigDungeonModifiers.MonsterStun.MinionProcChance : ConfigDungeonModifiers.MonsterStun.BossProcChance;
                if (UnityEngine.Random.Range((float)0f, (float)1f) <= num11)
                {
                    float num12 = !sourceCharacter.IsBoss ? ConfigDungeonModifiers.MonsterStun.MinionBuffDurationSeconds : ConfigDungeonModifiers.MonsterStun.BossBuffDurationSeconds;
                    buff3                 = new Buff();
                    buff3.Stuns           = true;
                    buff3.DurationSeconds = num12;
                    Buff buff = buff3;
                    GameLogic.Binder.BuffSystem.startBuff(targetCharacter, buff);
                }
            }
            if ((sourceCharacter != null) && activeDungeon.hasDungeonModifier(DungeonModifierType.MonsterFreeze))
            {
                float num13 = !sourceCharacter.IsBoss ? ConfigDungeonModifiers.MonsterFreeze.MinionProcChance : ConfigDungeonModifiers.MonsterFreeze.BossProcChance;
                if (UnityEngine.Random.Range((float)0f, (float)1f) <= num13)
                {
                    float num14 = !sourceCharacter.IsBoss ? ConfigDungeonModifiers.MonsterFreeze.MinionBuffDurationSeconds : ConfigDungeonModifiers.MonsterFreeze.BossBuffDurationSeconds;
                    buff3 = new Buff();
                    BuffSource source = new BuffSource();
                    source.Object         = ConfigDungeonModifiers.MODIFIERS[DungeonModifierType.MonsterFreeze];
                    buff3.Source          = source;
                    buff3.BaseStat1       = BaseStatProperty.AttacksPerSecond;
                    buff3.BaseStat2       = BaseStatProperty.MovementSpeed;
                    buff3.Modifier        = ConfigPerks.GlobalFrostEffect.SpeedModifier;
                    buff3.DurationSeconds = num14;
                    Buff buff2 = buff3;
                    GameLogic.Binder.BuffSystem.startBuff(targetCharacter, buff2);
                }
            }
        }
Ejemplo n.º 5
0
        public void awardBossRewards(ActiveDungeon ad, GameLogic.CharacterType killedBossType, bool wildBoss)
        {
            ad.VisualizableBossRewards = new ActiveDungeon.BossRewards();
            CharacterInstance primaryPlayerCharacter = ad.PrimaryPlayerCharacter;
            Player            owningPlayer           = primaryPlayerCharacter.OwningPlayer;
            int    floor          = ad.Floor;
            double baseCoinReward = App.Binder.ConfigMeta.BossCoinDropCurve(floor, owningPlayer.BossTrain.Active);
            double num3           = owningPlayer.calculateStandardCoinRoll(baseCoinReward, killedBossType, 1);

            ad.VisualizableBossRewards.CoinDropCount = UnityEngine.Random.Range(3, 7);
            ad.VisualizableBossRewards.CoinsPerDrop  = num3 / ((double)ad.VisualizableBossRewards.CoinDropCount);
            bool   isHighestFloor = ad.Floor == owningPlayer.getHighestFloorReached();
            double num4           = App.Binder.ConfigMeta.XpFromBossKill(ad.Floor, isHighestFloor) / ((double)ad.VisualizableBossRewards.CoinDropCount);
            float  num5           = primaryPlayerCharacter.getCharacterTypeXpModifier(killedBossType) + primaryPlayerCharacter.UniversalXpBonus(true);

            num4 += num4 * num5;
            ad.VisualizableBossRewards.XpPerDrop = num4;
            bool flag2 = !ad.hasDungeonModifier(DungeonModifierType.MonsterNoCoins);

            for (int i = 0; i < ad.VisualizableBossRewards.CoinDropCount; i++)
            {
                if (flag2)
                {
                    Vector3?nullable = null;
                    CmdGainResources.ExecuteStatic(owningPlayer, ResourceType.Coin, ad.VisualizableBossRewards.CoinsPerDrop, true, "TRACKING_ID_GAMEPLAY_LOOT_GAIN", nullable);
                }
                Vector3?worldPt = null;
                CmdGainResources.ExecuteStatic(owningPlayer, ResourceType.Xp, ad.VisualizableBossRewards.XpPerDrop, true, string.Empty, worldPt);
            }
            bool flag3 = false;

            if (!wildBoss)
            {
                flag3 = this.grantRetirementTriggerChestIfAllowed();
            }
            if (!wildBoss && owningPlayer.canRetire())
            {
                Reward reward = owningPlayer.getFirstUnclaimedRetirementTriggerChest();
                ad.VisualizableBossRewards.Tokens = App.Binder.ConfigMeta.RetirementTokenReward(primaryPlayerCharacter, ad.Floor);
                reward.TokenDrops.Add(ad.VisualizableBossRewards.Tokens);
                if (App.Binder.ConfigMeta.BossShouldDropFrenzyPotionAtFloor(ad.Floor))
                {
                    ad.VisualizableBossRewards.FrenzyPotions = 1;
                    reward.FrenzyPotions += ad.VisualizableBossRewards.FrenzyPotions;
                }
            }
            if ((wildBoss || owningPlayer.hasRetired()) || !flag3)
            {
                ad.VisualizableBossRewards.MainDrops.Add(CmdRollDropLootTable.ExecuteStatic(App.Binder.ConfigLootTables.BossDropLootTable, owningPlayer, Vector3.zero, killedBossType, null, ChestType.NONE));
                int num7 = owningPlayer.CumulativeRetiredHeroStats.BossesBeat + owningPlayer.ActiveCharacter.HeroStats.BossesBeat;
                if ((owningPlayer.getPerkInstanceCount(PerkType.ChesterChestDrop) > 0) && ((((float)num7) % Mathf.Floor(ConfigPerks.GetBestModifier(PerkType.ChesterChestDrop))) == 0f))
                {
                    ad.VisualizableBossRewards.MainDrops.Add(CmdRollDropLootTable.ExecuteStatic(App.Binder.ConfigLootTables.BossDropLootTable, owningPlayer, Vector3.zero, killedBossType, null, ChestType.ChesterChest));
                }
            }
            if ((!wildBoss && owningPlayer.canRetire()) && ConfigMeta.BOSS_ADDITIONAL_DROPS_ENABLED)
            {
                if (flag3 && !owningPlayer.hasRetired())
                {
                    Reward item = CmdRollDropLootTable.ExecuteStatic(App.Binder.ConfigLootTables.BossAdditionalDropLootTable, owningPlayer, Vector3.zero, killedBossType, ChestType.RewardBoxCommon.ToString(), ChestType.NONE);
                    item.clearContent();
                    item.ShopEntryId = "CoinBundleSmall";
                    double num8 = App.Binder.ConfigMeta.CoinBundleSize(owningPlayer, item.ShopEntryId, 0.0);
                    item.CoinDrops.Add(num8);
                    ad.VisualizableBossRewards.RiggedRewards.Add(item);
                }
                else if (App.Binder.ConfigMeta.BossShouldDropRewardBoxAtFloor(ad.Floor))
                {
                    ad.VisualizableBossRewards.AdditionalDrop = CmdRollDropLootTable.ExecuteStatic(App.Binder.ConfigLootTables.BossAdditionalDropLootTable, owningPlayer, Vector3.zero, killedBossType, null, ChestType.NONE);
                }
            }
        }