Exemplo n.º 1
0
        // Token: 0x06000DB9 RID: 3513 RVA: 0x000435A4 File Offset: 0x000417A4
        private void GenerateAmbush(Vector3 victimPosition)
        {
            NodeGraph groundNodes = SceneInfo.instance.groundNodes;

            NodeGraph.NodeIndex nodeIndex       = groundNodes.FindClosestNode(victimPosition, HullClassification.Human);
            NodeGraphSpider     nodeGraphSpider = new NodeGraphSpider(groundNodes, HullMask.Human);

            nodeGraphSpider.AddNodeForNextStep(nodeIndex);
            List <NodeGraphSpider.StepInfo> list = new List <NodeGraphSpider.StepInfo>();
            int num = 0;
            List <NodeGraphSpider.StepInfo> collectedSteps = nodeGraphSpider.collectedSteps;

            while (nodeGraphSpider.PerformStep() && num < 8)
            {
                num++;
                for (int i = 0; i < collectedSteps.Count; i++)
                {
                    if (CombatDirector.IsAcceptableAmbushSpiderStep(groundNodes, nodeIndex, collectedSteps[i]))
                    {
                        list.Add(collectedSteps[i]);
                    }
                }
                collectedSteps.Clear();
            }
            for (int j = 0; j < list.Count; j++)
            {
                Vector3 position;
                groundNodes.GetNodePosition(list[j].node, out position);
                Resources.Load <SpawnCard>("SpawnCards/scLemurian").DoSpawn(position, Quaternion.identity);
            }
        }
 private void InitCombatDirectors()
 {
     if (!NetworkServer.active)
     {
         Debug.LogWarning("[Server] function 'System.Void RoR2.ArenaMissionController::InitCombatDirectors()' called on client");
         return;
     }
     for (int i = 0; i < this.combatDirectors.Length; i++)
     {
         CombatDirector combatDirector = this.combatDirectors[i];
         combatDirector.maximumNumberToSpawnBeforeSkipping = this.maximumNumberToSpawnBeforeSkipping;
         combatDirector.onSpawnedServer.AddListener(new UnityAction <GameObject>(this.ModifySpawnedMasters));
         combatDirector.spawnDistanceMultiplier = this.spawnDistanceMultiplier;
         combatDirector.eliteBias = this.eliteBias;
     }
 }
Exemplo n.º 3
0
 // Token: 0x06000DB8 RID: 3512 RVA: 0x000434EC File Offset: 0x000416EC
 private void OnDisable()
 {
     CombatDirector.instancesList.Remove(this);
     if (NetworkServer.active && CombatDirector.instancesList.Count > 0)
     {
         float          num            = 0.4f;
         CombatDirector combatDirector = CombatDirector.instancesList[this.rng.RangeInt(0, CombatDirector.instancesList.Count)];
         this.monsterCredit           *= num;
         combatDirector.monsterCredit += this.monsterCredit;
         Debug.LogFormat("Transfered {0} monster credits from {1} to {2}", new object[]
         {
             this.monsterCredit,
             base.gameObject,
             combatDirector.gameObject
         });
         this.monsterCredit = 0f;
     }
 }
        public void EndRound()
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.ArenaMissionController::EndRound()' called on client");
                return;
            }
            int clearedRounds = this.clearedRounds;

            this.clearedRounds = clearedRounds + 1;
            if (this.currentRound < this.totalRoundsMax)
            {
                this.ReadyNextNullWard();
            }
            else
            {
                Action action = ArenaMissionController.onBeatArena;
                if (action != null)
                {
                    action();
                }
                this.mainStateMachine.SetNextState(new ArenaMissionController.MissionCompleted());
                Chat.SendBroadcastChat(new Chat.SimpleChatMessage
                {
                    baseToken = "ARENA_END"
                });
            }
            for (int i = 0; i < this.combatDirectors.Length; i++)
            {
                CombatDirector combatDirector = this.combatDirectors[i];
                combatDirector.enabled       = false;
                combatDirector.monsterCredit = 0f;
            }
            ReadOnlyCollection <TeamComponent> teamMembers = TeamComponent.GetTeamMembers(TeamIndex.Monster);

            for (int j = teamMembers.Count - 1; j >= 0; j--)
            {
                teamMembers[j].body.healthComponent.Suicide(base.gameObject, base.gameObject, DamageType.VoidDeath);
            }
            int participatingPlayerCount = Run.instance.participatingPlayerCount;

            if (participatingPlayerCount != 0 && this.rewardSpawnPosition)
            {
                List <PickupIndex> list = Run.instance.availableTier1DropList;
                if (this.currentRound > 4)
                {
                    list = Run.instance.availableTier2DropList;
                }
                if (this.currentRound == this.totalRoundsMax)
                {
                    list = Run.instance.availableTier3DropList;
                }
                ItemIndex  itemIndex = this.rng.NextElementUniform <PickupIndex>(list).itemIndex;
                int        num       = participatingPlayerCount;
                float      angle     = 360f / (float)num;
                Vector3    vector    = Quaternion.AngleAxis((float)UnityEngine.Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f);
                Quaternion rotation  = Quaternion.AngleAxis(angle, Vector3.up);
                int        k         = 0;
                while (k < num)
                {
                    PickupDropletController.CreatePickupDroplet(new PickupIndex(itemIndex), this.rewardSpawnPosition.transform.position, vector);
                    k++;
                    vector = rotation * vector;
                }
            }
        }
        public void BeginRound()
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.ArenaMissionController::BeginRound()' called on client");
                return;
            }
            int currentRound = this.currentRound;

            this.currentRound = currentRound + 1;
            switch (this.currentRound)
            {
            case 1:
                this.AddMonsterType();
                break;

            case 2:
                this.AddItemType(ItemTier.Tier1);
                break;

            case 3:
                this.AddMonsterType();
                break;

            case 4:
                this.AddItemType(ItemTier.Tier1);
                break;

            case 5:
                this.AddMonsterType();
                break;

            case 6:
                this.AddItemType(ItemTier.Tier2);
                break;

            case 7:
                this.AddMonsterType();
                break;

            case 8:
                this.AddItemType(ItemTier.Tier2);
                break;

            case 9:
                this.AddItemType(ItemTier.Tier3);
                break;
            }
            UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/Encounters/ArenaRoundEncounter"));
            for (int i = 0; i < this.activeMonsterCards.Count; i++)
            {
                DirectorCard directorCard     = this.activeMonsterCards[i];
                float        num              = this.creditsThisRound / (float)this.activeMonsterCards.Count;
                float        creditMultiplier = this.creditMultiplierPerRound * (float)this.currentRound / (float)this.activeMonsterCards.Count;
                if (i > this.combatDirectors.Length)
                {
                    Debug.LogError("Trying to activate more combat directors than available. Aborting.");
                    return;
                }
                CombatDirector combatDirector = this.combatDirectors[i];
                combatDirector.monsterCredit     += num;
                combatDirector.creditMultiplier   = creditMultiplier;
                combatDirector.currentSpawnTarget = this.monsterSpawnPosition;
                combatDirector.OverrideCurrentMonsterCard(directorCard);
                combatDirector.monsterSpawnTimer = 0f;
                combatDirector.enabled           = true;
                Debug.LogFormat("Enabling director {0} with {1} credits to spawn {2}", new object[]
                {
                    i,
                    num,
                    directorCard.spawnCard.name
                });
            }
        }
Exemplo n.º 6
0
 private void CombatDirector_SpendAllCreditsOnMapSpawns(On.RoR2.CombatDirector.orig_SpendAllCreditsOnMapSpawns orig, RoR2.CombatDirector self)
 {
     if (Run.instance && (applyToAll.Value || Run.instance.stageClearCount == 0))
     {
         self.monsterCredit *= scaling.Value;
     }
     orig(self);
 }