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

◆ UpdateLiquid()

static void Terraria.Liquid.UpdateLiquid ( )
inlinestatic

Definition at line 983 of file Liquid.cs.

984 {
985 int num = 8;
987 if (Main.netMode == 2)
988 {
989 int num2 = 0;
990 for (int i = 0; i < 15; i++)
991 {
992 if (Main.player[i].active)
993 {
994 num2++;
995 }
996 }
997 cycles = 10 + num2 / 3;
998 curMaxLiquid = maxLiquid - num2 * 250;
999 num = 10 + num2 / 3;
1000 if (Main.Setting_UseReducedMaxLiquids)
1001 {
1002 curMaxLiquid = 5000;
1003 }
1004 }
1005 if (!WorldGen.gen)
1006 {
1007 if (!panicMode)
1008 {
1009 if ((double)LiquidBuffer.numLiquidBuffer >= 45000.0)
1010 {
1011 panicCounter++;
1012 if (panicCounter > 3600)
1013 {
1014 StartPanic();
1015 }
1016 }
1017 else
1018 {
1019 panicCounter = 0;
1020 }
1021 }
1022 if (panicMode)
1023 {
1024 int num3 = 0;
1025 while (panicY >= 3 && num3 < 5)
1026 {
1027 num3++;
1029 panicY--;
1030 if (panicY >= 3)
1031 {
1032 continue;
1033 }
1034 Console.WriteLine(Language.GetTextValue("Misc.WaterSettled"));
1035 panicCounter = 0;
1036 panicMode = false;
1037 WorldGen.WaterCheck();
1038 if (Main.netMode != 2)
1039 {
1040 continue;
1041 }
1042 for (int j = 0; j < 255; j++)
1043 {
1044 for (int k = 0; k < Main.maxSectionsX; k++)
1045 {
1046 for (int l = 0; l < Main.maxSectionsY; l++)
1047 {
1048 Netplay.Clients[j].TileSections[k, l] = false;
1049 }
1050 }
1051 }
1052 }
1053 return;
1054 }
1055 }
1056 bool flag = quickSettle;
1057 if (Main.Setting_UseReducedMaxLiquids)
1058 {
1059 flag |= numLiquid > 2000;
1060 }
1061 if (flag)
1062 {
1063 quickFall = true;
1064 }
1065 else
1066 {
1067 quickFall = false;
1068 }
1069 wetCounter++;
1070 int num4 = curMaxLiquid / cycles;
1071 int num5 = num4 * (wetCounter - 1);
1072 int num6 = num4 * wetCounter;
1073 if (wetCounter == cycles)
1074 {
1075 num6 = numLiquid;
1076 }
1077 if (num6 > numLiquid)
1078 {
1079 num6 = numLiquid;
1080 _ = Main.netMode;
1082 }
1083 if (quickFall)
1084 {
1085 for (int m = num5; m < num6; m++)
1086 {
1087 Main.liquid[m].delay = 10;
1088 Main.liquid[m].Update();
1089 Main.tile[Main.liquid[m].x, Main.liquid[m].y].skipLiquid(skipLiquid: false);
1090 }
1091 }
1092 else
1093 {
1094 for (int n = num5; n < num6; n++)
1095 {
1096 if (!Main.tile[Main.liquid[n].x, Main.liquid[n].y].skipLiquid())
1097 {
1098 Main.liquid[n].Update();
1099 }
1100 else
1101 {
1102 Main.tile[Main.liquid[n].x, Main.liquid[n].y].skipLiquid(skipLiquid: false);
1103 }
1104 }
1105 }
1106 if (wetCounter >= cycles)
1107 {
1108 wetCounter = 0;
1109 for (int num7 = numLiquid - 1; num7 >= 0; num7--)
1110 {
1111 if (Main.liquid[num7].kill >= num)
1112 {
1113 if (Main.tile[Main.liquid[num7].x, Main.liquid[num7].y].liquid == 254)
1114 {
1115 Main.tile[Main.liquid[num7].x, Main.liquid[num7].y].liquid = byte.MaxValue;
1116 }
1117 DelWater(num7);
1118 }
1119 }
1121 if (num8 > LiquidBuffer.numLiquidBuffer)
1122 {
1123 num8 = LiquidBuffer.numLiquidBuffer;
1124 }
1125 for (int num9 = 0; num9 < num8; num9++)
1126 {
1127 Main.tile[Main.liquidBuffer[0].x, Main.liquidBuffer[0].y].checkingLiquid(checkingLiquid: false);
1128 AddWater(Main.liquidBuffer[0].x, Main.liquidBuffer[0].y);
1129 LiquidBuffer.DelBuffer(0);
1130 }
1131 if (numLiquid > 0 && numLiquid > stuckAmount - 50 && numLiquid < stuckAmount + 50)
1132 {
1133 stuckCount++;
1134 if (stuckCount >= 10000)
1135 {
1136 stuck = true;
1137 for (int num10 = numLiquid - 1; num10 >= 0; num10--)
1138 {
1139 DelWater(num10);
1140 }
1141 stuck = false;
1142 stuckCount = 0;
1143 }
1144 }
1145 else
1146 {
1147 stuckCount = 0;
1149 }
1150 }
1151 if (!WorldGen.gen && Main.netMode == 2 && _netChangeSet.Count > 0)
1152 {
1155 _swapNetChangeSet.Clear();
1156 }
1158 }
static void WriteLine()
Definition Console.cs:733
static void CreateAndBroadcastByChunk(HashSet< int > dirtiedPackedTileCoords)
static int curMaxLiquid
Definition Liquid.cs:25
static int panicCounter
Definition Liquid.cs:37
static int panicY
Definition Liquid.cs:41
static bool quickFall
Definition Liquid.cs:31
static void tilesIgnoreWater(bool ignoreSolids)
Definition Liquid.cs:67
static int wetCounter
Definition Liquid.cs:35
static int maxLiquid
Definition Liquid.cs:15
static bool stuck
Definition Liquid.cs:29
static void StartPanic()
Definition Liquid.cs:966
static HashSet< int > _netChangeSet
Definition Liquid.cs:51
static void AddWater(int x, int y)
Definition Liquid.cs:1160
static HashSet< int > _swapNetChangeSet
Definition Liquid.cs:53
static bool panicMode
Definition Liquid.cs:39
static int numLiquid
Definition Liquid.cs:27
static int stuckAmount
Definition Liquid.cs:21
static int cycles
Definition Liquid.cs:23
static int stuckCount
Definition Liquid.cs:19
static void DelWater(int l)
Definition Liquid.cs:1472
static void QuickWater(int verbose=0, int minY=-1, int maxY=-1)
Definition Liquid.cs:103
static bool quickSettle
Definition Liquid.cs:33
static string GetTextValue(string key)
Definition Language.cs:15

References Terraria.Liquid._netChangeSet, Terraria.Liquid._swapNetChangeSet, Terraria.Liquid.AddWater(), Terraria.Netplay.Clients, Terraria.GameContent.NetModules.NetLiquidModule.CreateAndBroadcastByChunk(), Terraria.Liquid.curMaxLiquid, Terraria.Liquid.cycles, Terraria.LiquidBuffer.DelBuffer(), Terraria.Liquid.DelWater(), Terraria.WorldGen.gen, Terraria.Localization.Language.GetTextValue(), Terraria.Main.liquid, Terraria.Main.liquidBuffer, Terraria.Liquid.maxLiquid, Terraria.Main.maxSectionsX, Terraria.Main.maxSectionsY, Terraria.Main.netMode, Terraria.Liquid.numLiquid, Terraria.LiquidBuffer.numLiquidBuffer, Terraria.Liquid.panicCounter, Terraria.Liquid.panicMode, Terraria.Liquid.panicY, Terraria.Main.player, Terraria.Liquid.quickFall, Terraria.Liquid.quickSettle, Terraria.Liquid.QuickWater(), Terraria.Main.Setting_UseReducedMaxLiquids, Terraria.Liquid.StartPanic(), Terraria.Liquid.stuck, Terraria.Liquid.stuckAmount, Terraria.Liquid.stuckCount, Terraria.Main.tile, Terraria.Liquid.tilesIgnoreWater(), Terraria.WorldGen.WaterCheck(), Terraria.Liquid.wetCounter, and System.Console.WriteLine().

Referenced by Terraria.IO.WorldFile.LoadWorld(), and Terraria.WorldGen.UpdateWorld().