Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ HandleTeleportRequest()

void Terraria.GameContent.TeleportPylonsSystem.HandleTeleportRequest ( TeleportPylonInfo info,
int playerIndex )
inline

Definition at line 99 of file TeleportPylonsSystem.cs.

100 {
101 Player player = Main.player[playerIndex];
102 string key = null;
103 bool flag = true;
104 if (flag)
105 {
106 flag &= IsPlayerNearAPylon(player);
107 if (!flag)
108 {
109 key = "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon";
110 }
111 }
112 if (flag)
113 {
116 if (!flag)
117 {
118 key = "Net.CannotTeleportToPylonBecauseNotEnoughNPCs";
119 }
120 }
121 if (flag)
122 {
124 if (!flag)
125 {
126 key = "Net.CannotTeleportToPylonBecauseThereIsDanger";
127 }
128 }
129 if (flag)
130 {
131 if (!NPC.downedPlantBoss && (double)info.PositionInTiles.Y > Main.worldSurface && Framing.GetTileSafely(info.PositionInTiles.X, info.PositionInTiles.Y).wall == 87)
132 {
133 flag = false;
134 }
135 if (!flag)
136 {
137 key = "Net.CannotTeleportToPylonBecauseAccessingLihzahrdTempleEarly";
138 }
139 }
140 if (flag)
141 {
142 _sceneMetrics.ScanAndExportToMain(new SceneMetricsScanSettings
143 {
144 VisualScanArea = null,
145 BiomeScanCenterPositionInWorld = info.PositionInTiles.ToWorldCoordinates(),
146 ScanOreFinderData = false
147 });
148 flag = DoesPylonAcceptTeleportation(info, player);
149 if (!flag)
150 {
151 key = "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements";
152 }
153 }
154 if (flag)
155 {
156 bool flag2 = false;
157 int num = 0;
158 for (int i = 0; i < _pylons.Count; i++)
159 {
160 TeleportPylonInfo info2 = _pylons[i];
161 if (!player.InInteractionRange(info2.PositionInTiles.X, info2.PositionInTiles.Y, TileReachCheckSettings.Pylons))
162 {
163 continue;
164 }
165 if (num < 1)
166 {
167 num = 1;
168 }
171 {
172 if (num < 2)
173 {
174 num = 2;
175 }
176 _sceneMetrics.ScanAndExportToMain(new SceneMetricsScanSettings
177 {
178 VisualScanArea = null,
179 BiomeScanCenterPositionInWorld = info2.PositionInTiles.ToWorldCoordinates(),
180 ScanOreFinderData = false
181 });
183 {
184 flag2 = true;
185 break;
186 }
187 }
188 }
189 if (!flag2)
190 {
191 flag = false;
192 key = num switch
193 {
194 1 => "Net.CannotTeleportToPylonBecauseNotEnoughNPCsAtCurrentPylon",
195 2 => "Net.CannotTeleportToPylonBecauseNotMeetingBiomeRequirements",
196 _ => "Net.CannotTeleportToPylonBecausePlayerIsNotNearAPylon",
197 };
198 }
199 }
200 if (flag)
201 {
202 Vector2 newPos = info.PositionInTiles.ToWorldCoordinates() - new Vector2(0f, player.HeightOffsetBoost);
203 int num2 = 9;
204 int typeOfPylon = (int)info.TypeOfPylon;
205 int number = 0;
206 player.Teleport(newPos, num2, typeOfPylon);
207 player.velocity = Vector2.Zero;
208 if (Main.netMode == 2)
209 {
210 RemoteClient.CheckSection(player.whoAmI, player.position);
211 NetMessage.SendData(65, -1, -1, null, 0, player.whoAmI, newPos.X, newPos.Y, num2, number, typeOfPylon);
212 }
213 }
214 else
215 {
217 }
218 }
static void SendChatMessageToClient(NetworkText text, Color color, int playerId)
Definition ChatHelper.cs:28
int HowManyNPCsDoesPylonNeed(TeleportPylonInfo info, Player player)
bool DoesPylonAcceptTeleportation(TeleportPylonInfo info, Player player)
bool DoesPylonHaveEnoughNPCsAroundIt(TeleportPylonInfo info, int necessaryNPCCount)
static NetworkText FromKey(string key, params object[] substitutions)
void ScanAndExportToMain(SceneMetricsScanSettings settings)

References Terraria.GameContent.TeleportPylonsSystem._pylons, Terraria.GameContent.TeleportPylonsSystem._sceneMetrics, Terraria.NPC.AnyDanger(), Terraria.RemoteClient.CheckSection(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, Terraria.GameContent.TeleportPylonsSystem.DoesPylonAcceptTeleportation(), Terraria.GameContent.TeleportPylonsSystem.DoesPylonHaveEnoughNPCsAroundIt(), Terraria.NPC.downedPlantBoss, Terraria.Localization.NetworkText.FromKey(), Terraria.Framing.GetTileSafely(), Terraria.Player.HeightOffsetBoost, Terraria.GameContent.TeleportPylonsSystem.HowManyNPCsDoesPylonNeed(), Terraria.Player.InInteractionRange(), Terraria.GameContent.TeleportPylonsSystem.IsPlayerNearAPylon(), Terraria.Main.netMode, Terraria.Main.player, Terraria.Entity.position, Terraria.DataStructures.TileReachCheckSettings.Pylons, Terraria.SceneMetrics.ScanAndExportToMain(), Terraria.Chat.ChatHelper.SendChatMessageToClient(), Terraria.NetMessage.SendData(), Terraria.Player.Teleport(), Terraria.Entity.whoAmI, and Microsoft.Xna.Framework.Vector2.Zero.