Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
276
RemoteClient.cs
Normal file
276
RemoteClient.cs
Normal file
|
@ -0,0 +1,276 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.RemoteClient
|
||||
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
||||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||||
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Terraria.Localization;
|
||||
using Terraria.Net.Sockets;
|
||||
|
||||
namespace Terraria
|
||||
{
|
||||
public class RemoteClient
|
||||
{
|
||||
public ISocket Socket;
|
||||
public int Id;
|
||||
public string Name = "Anonymous";
|
||||
public bool IsActive;
|
||||
public bool PendingTermination;
|
||||
public bool PendingTerminationApproved;
|
||||
public bool IsAnnouncementCompleted;
|
||||
public int State;
|
||||
public int TimeOutTimer;
|
||||
public string StatusText = "";
|
||||
public string StatusText2;
|
||||
public int StatusCount;
|
||||
public int StatusMax;
|
||||
public bool[,] TileSections = new bool[Main.maxTilesX / 200 + 1, Main.maxTilesY / 150 + 1];
|
||||
public byte[] ReadBuffer;
|
||||
public float SpamProjectile;
|
||||
public float SpamAddBlock;
|
||||
public float SpamDeleteBlock;
|
||||
public float SpamWater;
|
||||
public float SpamProjectileMax = 100f;
|
||||
public float SpamAddBlockMax = 100f;
|
||||
public float SpamDeleteBlockMax = 500f;
|
||||
public float SpamWaterMax = 50f;
|
||||
private volatile bool _isReading;
|
||||
private static List<Point> _pendingSectionFraming = new List<Point>();
|
||||
|
||||
public bool IsConnected() => this.Socket != null && this.Socket.IsConnected();
|
||||
|
||||
public void SpamUpdate()
|
||||
{
|
||||
if (!Netplay.SpamCheck)
|
||||
{
|
||||
this.SpamProjectile = 0.0f;
|
||||
this.SpamDeleteBlock = 0.0f;
|
||||
this.SpamAddBlock = 0.0f;
|
||||
this.SpamWater = 0.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((double) this.SpamProjectile > (double) this.SpamProjectileMax)
|
||||
NetMessage.BootPlayer(this.Id, NetworkText.FromKey("Net.CheatingProjectileSpam"));
|
||||
if ((double) this.SpamAddBlock > (double) this.SpamAddBlockMax)
|
||||
NetMessage.BootPlayer(this.Id, NetworkText.FromKey("Net.CheatingTileSpam"));
|
||||
if ((double) this.SpamDeleteBlock > (double) this.SpamDeleteBlockMax)
|
||||
NetMessage.BootPlayer(this.Id, NetworkText.FromKey("Net.CheatingTileRemovalSpam"));
|
||||
if ((double) this.SpamWater > (double) this.SpamWaterMax)
|
||||
NetMessage.BootPlayer(this.Id, NetworkText.FromKey("Net.CheatingLiquidSpam"));
|
||||
this.SpamProjectile -= 0.4f;
|
||||
if ((double) this.SpamProjectile < 0.0)
|
||||
this.SpamProjectile = 0.0f;
|
||||
this.SpamAddBlock -= 0.3f;
|
||||
if ((double) this.SpamAddBlock < 0.0)
|
||||
this.SpamAddBlock = 0.0f;
|
||||
this.SpamDeleteBlock -= 5f;
|
||||
if ((double) this.SpamDeleteBlock < 0.0)
|
||||
this.SpamDeleteBlock = 0.0f;
|
||||
this.SpamWater -= 0.2f;
|
||||
if ((double) this.SpamWater >= 0.0)
|
||||
return;
|
||||
this.SpamWater = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public void SpamClear()
|
||||
{
|
||||
this.SpamProjectile = 0.0f;
|
||||
this.SpamAddBlock = 0.0f;
|
||||
this.SpamDeleteBlock = 0.0f;
|
||||
this.SpamWater = 0.0f;
|
||||
}
|
||||
|
||||
public static void CheckSection(int playerIndex, Vector2 position, int fluff = 1)
|
||||
{
|
||||
int index1 = playerIndex;
|
||||
int sectionX = Netplay.GetSectionX((int) ((double) position.X / 16.0));
|
||||
int sectionY = Netplay.GetSectionY((int) ((double) position.Y / 16.0));
|
||||
int num = 0;
|
||||
for (int index2 = sectionX - fluff; index2 < sectionX + fluff + 1; ++index2)
|
||||
{
|
||||
for (int index3 = sectionY - fluff; index3 < sectionY + fluff + 1; ++index3)
|
||||
{
|
||||
if (index2 >= 0 && index2 < Main.maxSectionsX && index3 >= 0 && index3 < Main.maxSectionsY && !Netplay.Clients[index1].TileSections[index2, index3])
|
||||
++num;
|
||||
}
|
||||
}
|
||||
if (num <= 0)
|
||||
return;
|
||||
int number = num;
|
||||
NetMessage.SendData(9, index1, text: Lang.inter[44].ToNetworkText(), number: number);
|
||||
Netplay.Clients[index1].StatusText2 = Language.GetTextValue("Net.IsReceivingTileData");
|
||||
Netplay.Clients[index1].StatusMax += number;
|
||||
RemoteClient._pendingSectionFraming.Clear();
|
||||
for (int index4 = sectionX - fluff; index4 < sectionX + fluff + 1; ++index4)
|
||||
{
|
||||
for (int index5 = sectionY - fluff; index5 < sectionY + fluff + 1; ++index5)
|
||||
{
|
||||
if (index4 >= 0 && index4 < Main.maxSectionsX && index5 >= 0 && index5 < Main.maxSectionsY && !Netplay.Clients[index1].TileSections[index4, index5])
|
||||
{
|
||||
NetMessage.SendSection(index1, index4, index5);
|
||||
RemoteClient._pendingSectionFraming.Add(new Point(index4, index5));
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (Point point in RemoteClient._pendingSectionFraming)
|
||||
NetMessage.SendData(11, index1, number: point.X, number2: ((float) point.Y), number3: ((float) point.X), number4: ((float) point.Y));
|
||||
}
|
||||
|
||||
public bool SectionRange(int size, int firstX, int firstY)
|
||||
{
|
||||
for (int index = 0; index < 4; ++index)
|
||||
{
|
||||
int x = firstX;
|
||||
int y = firstY;
|
||||
if (index == 1)
|
||||
x += size;
|
||||
if (index == 2)
|
||||
y += size;
|
||||
if (index == 3)
|
||||
{
|
||||
x += size;
|
||||
y += size;
|
||||
}
|
||||
if (this.TileSections[Netplay.GetSectionX(x), Netplay.GetSectionY(y)])
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void ResetSections()
|
||||
{
|
||||
for (int index1 = 0; index1 < Main.maxSectionsX; ++index1)
|
||||
{
|
||||
for (int index2 = 0; index2 < Main.maxSectionsY; ++index2)
|
||||
this.TileSections[index1, index2] = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
this.ResetSections();
|
||||
if (this.Id < (int) byte.MaxValue)
|
||||
Main.player[this.Id] = new Player();
|
||||
this.TimeOutTimer = 0;
|
||||
this.StatusCount = 0;
|
||||
this.StatusMax = 0;
|
||||
this.StatusText2 = "";
|
||||
this.StatusText = "";
|
||||
this.State = 0;
|
||||
this._isReading = false;
|
||||
this.PendingTermination = false;
|
||||
this.PendingTerminationApproved = false;
|
||||
this.SpamClear();
|
||||
this.IsActive = false;
|
||||
NetMessage.buffer[this.Id].Reset();
|
||||
if (this.Socket == null)
|
||||
return;
|
||||
this.Socket.Close();
|
||||
}
|
||||
|
||||
public void ServerWriteCallBack(object state)
|
||||
{
|
||||
--NetMessage.buffer[this.Id].spamCount;
|
||||
if (this.StatusMax <= 0)
|
||||
return;
|
||||
++this.StatusCount;
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (!this.IsActive)
|
||||
{
|
||||
this.State = 0;
|
||||
this.IsActive = true;
|
||||
}
|
||||
this.TryRead();
|
||||
this.UpdateStatusText();
|
||||
}
|
||||
|
||||
private void TryRead()
|
||||
{
|
||||
if (this._isReading)
|
||||
return;
|
||||
try
|
||||
{
|
||||
if (!this.Socket.IsDataAvailable())
|
||||
return;
|
||||
this._isReading = true;
|
||||
this.Socket.AsyncReceive(this.ReadBuffer, 0, this.ReadBuffer.Length, new SocketReceiveCallback(this.ServerReadCallBack));
|
||||
}
|
||||
catch
|
||||
{
|
||||
this.PendingTermination = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void ServerReadCallBack(object state, int length)
|
||||
{
|
||||
if (!Netplay.Disconnect)
|
||||
{
|
||||
int streamLength = length;
|
||||
if (streamLength == 0)
|
||||
{
|
||||
this.PendingTermination = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
NetMessage.ReceiveBytes(this.ReadBuffer, streamLength, this.Id);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!Main.ignoreErrors)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
this._isReading = false;
|
||||
}
|
||||
|
||||
private void UpdateStatusText()
|
||||
{
|
||||
if (this.StatusMax > 0 && this.StatusText2 != "")
|
||||
{
|
||||
if (this.StatusCount >= this.StatusMax)
|
||||
{
|
||||
this.StatusText = Language.GetTextValue("Net.ClientStatusComplete", (object) this.Socket.GetRemoteAddress(), (object) this.Name, (object) this.StatusText2);
|
||||
this.StatusText2 = "";
|
||||
this.StatusMax = 0;
|
||||
this.StatusCount = 0;
|
||||
}
|
||||
else
|
||||
this.StatusText = "(" + (object) this.Socket.GetRemoteAddress() + ") " + this.Name + " " + this.StatusText2 + ": " + (object) (int) ((double) this.StatusCount / (double) this.StatusMax * 100.0) + "%";
|
||||
}
|
||||
else if (this.State == 0)
|
||||
this.StatusText = Language.GetTextValue("Net.ClientConnecting", (object) string.Format("({0}) {1}", (object) this.Socket.GetRemoteAddress(), (object) this.Name));
|
||||
else if (this.State == 1)
|
||||
this.StatusText = Language.GetTextValue("Net.ClientSendingData", (object) this.Socket.GetRemoteAddress(), (object) this.Name);
|
||||
else if (this.State == 2)
|
||||
{
|
||||
this.StatusText = Language.GetTextValue("Net.ClientRequestedWorldInfo", (object) this.Socket.GetRemoteAddress(), (object) this.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.State == 3)
|
||||
return;
|
||||
if (this.State != 10)
|
||||
return;
|
||||
try
|
||||
{
|
||||
this.StatusText = Language.GetTextValue("Net.ClientPlaying", (object) this.Socket.GetRemoteAddress(), (object) this.Name);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.PendingTermination = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue