public void HandleTeleportRequest(TeleportPylonInfo info, int playerIndex) { Player player = Main.player[playerIndex]; string key = null; bool flag = true; if (flag) { flag &= IsPlayerNearAPylon(player); if (!flag) { key = "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon"; } } if (flag) { int necessaryNPCCount = HowManyNPCsDoesPylonNeed(info, player); flag &= DoesPylonHaveEnoughNPCsAroundIt(info, necessaryNPCCount); if (!flag) { key = "Net.CannotTeleportToPylonBecauseNotEnoughNPCs"; } } if (flag) { flag &= !NPC.AnyDanger(); if (!flag) { key = "Net.CannotTeleportToPylonBecauseThereIsDanger"; } } if (flag) { if (!NPC.downedPlantBoss && (double)info.PositionInTiles.Y > Main.worldSurface && Framing.GetTileSafely(info.PositionInTiles.X, info.PositionInTiles.Y).wall == 87) { flag = false; } if (!flag) { key = "Net.CannotTeleportToPylonBecauseAccessingLihzahrdTempleEarly"; } } SceneMetricsScanSettings settings; if (flag) { SceneMetrics sceneMetrics = _sceneMetrics; settings = new SceneMetricsScanSettings { VisualScanArea = null, BiomeScanCenterPositionInWorld = info.PositionInTiles.ToWorldCoordinates(), ScanOreFinderData = false }; sceneMetrics.ScanAndExportToMain(settings); flag = DoesPylonAcceptTeleportation(info, player); if (!flag) { key = "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements"; } } if (flag) { bool flag2 = false; int num = 0; for (int i = 0; i < _pylons.Count; i++) { TeleportPylonInfo info2 = _pylons[i]; if (!player.InInteractionRange(info2.PositionInTiles.X, info2.PositionInTiles.Y)) { continue; } if (num < 1) { num = 1; } int necessaryNPCCount2 = HowManyNPCsDoesPylonNeed(info2, player); if (DoesPylonHaveEnoughNPCsAroundIt(info2, necessaryNPCCount2)) { if (num < 2) { num = 2; } SceneMetrics sceneMetrics2 = _sceneMetrics; settings = new SceneMetricsScanSettings { VisualScanArea = null, BiomeScanCenterPositionInWorld = info2.PositionInTiles.ToWorldCoordinates(), ScanOreFinderData = false }; sceneMetrics2.ScanAndExportToMain(settings); if (DoesPylonAcceptTeleportation(info2, player)) { flag2 = true; break; } } } if (!flag2) { flag = false; switch (num) { default: key = "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon"; break; case 1: key = "Net.CannotTeleportToPylonBecauseNotEnoughNPCsAtCurrentPylon"; break; case 2: key = "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements"; break; } } } if (flag) { Vector2 newPos = info.PositionInTiles.ToWorldCoordinates() - new Vector2(0f, player.HeightOffsetBoost); int num2 = 9; int typeOfPylon = (int)info.TypeOfPylon; int number = 0; player.Teleport(newPos, num2, typeOfPylon); player.velocity = Vector2.Zero; if (Main.netMode == 2) { RemoteClient.CheckSection(player.whoAmI, player.position); NetMessage.SendData(65, -1, -1, null, 0, player.whoAmI, newPos.X, newPos.Y, num2, number, typeOfPylon); } } else { ChatHelper.SendChatMessageToClient(NetworkText.FromKey(key), new Color(255, 240, 20), playerIndex); } }
public void HandleTeleportRequest(TeleportPylonInfo info, int playerIndex) { Player player = Main.player[playerIndex]; string key = (string)null; bool flag1 = true; if (flag1) { flag1 &= TeleportPylonsSystem.IsPlayerNearAPylon(player); if (!flag1) { key = "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon"; } } if (flag1) { int necessaryNPCCount = this.HowManyNPCsDoesPylonNeed(info, player); flag1 &= this.DoesPylonHaveEnoughNPCsAroundIt(info, necessaryNPCCount); if (!flag1) { key = "Net.CannotTeleportToPylonBecauseNotEnoughNPCs"; } } if (flag1) { flag1 &= !NPC.AnyDanger(false); if (!flag1) { key = "Net.CannotTeleportToPylonBecauseThereIsDanger"; } } if (flag1) { if (!NPC.downedPlantBoss && (double)info.PositionInTiles.Y > Main.worldSurface && Framing.GetTileSafely((int)info.PositionInTiles.X, (int)info.PositionInTiles.Y).wall == (ushort)87) { flag1 = false; } if (!flag1) { key = "Net.CannotTeleportToPylonBecauseAccessingLihzahrdTempleEarly"; } } SceneMetricsScanSettings metricsScanSettings; if (flag1) { SceneMetrics sceneMetrics = this._sceneMetrics; metricsScanSettings = new SceneMetricsScanSettings(); metricsScanSettings.VisualScanArea = new Rectangle?(); metricsScanSettings.BiomeScanCenterPositionInWorld = new Vector2?(info.PositionInTiles.ToWorldCoordinates(8f, 8f)); metricsScanSettings.ScanOreFinderData = false; SceneMetricsScanSettings settings = metricsScanSettings; sceneMetrics.ScanAndExportToMain(settings); flag1 = this.DoesPylonAcceptTeleportation(info, player); if (!flag1) { key = "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements"; } } if (flag1) { bool flag2 = false; int num = 0; for (int index = 0; index < this._pylons.Count; ++index) { TeleportPylonInfo pylon = this._pylons[index]; if (player.InInteractionRange((int)pylon.PositionInTiles.X, (int)pylon.PositionInTiles.Y)) { if (num < 1) { num = 1; } int necessaryNPCCount = this.HowManyNPCsDoesPylonNeed(pylon, player); if (this.DoesPylonHaveEnoughNPCsAroundIt(pylon, necessaryNPCCount)) { if (num < 2) { num = 2; } SceneMetrics sceneMetrics = this._sceneMetrics; metricsScanSettings = new SceneMetricsScanSettings(); metricsScanSettings.VisualScanArea = new Rectangle?(); metricsScanSettings.BiomeScanCenterPositionInWorld = new Vector2?(pylon.PositionInTiles.ToWorldCoordinates(8f, 8f)); metricsScanSettings.ScanOreFinderData = false; SceneMetricsScanSettings settings = metricsScanSettings; sceneMetrics.ScanAndExportToMain(settings); if (this.DoesPylonAcceptTeleportation(pylon, player)) { flag2 = true; break; } } } } if (!flag2) { flag1 = false; switch (num) { case 1: key = "Net.CannotTeleportToPylonBecauseNotEnoughNPCsAtCurrentPylon"; break; case 2: key = "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements"; break; default: key = "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon"; break; } } } if (flag1) { Vector2 newPos = info.PositionInTiles.ToWorldCoordinates(8f, 8f) - new Vector2(0.0f, (float)player.HeightOffsetBoost); int num = 9; int typeOfPylon = (int)info.TypeOfPylon; int number6 = 0; player.Teleport(newPos, num, typeOfPylon); player.velocity = Vector2.Zero; if (Main.netMode != 2) { return; } RemoteClient.CheckSection(player.whoAmI, player.position, 1); NetMessage.SendData(65, -1, -1, (NetworkText)null, 0, (float)player.whoAmI, newPos.X, newPos.Y, num, number6, typeOfPylon); } else { ChatHelper.SendChatMessageToClient(NetworkText.FromKey(key), new Color((int)byte.MaxValue, 240, 20), playerIndex); } }