// 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; } }
// 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 }); } }
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); }