patch baby dragon exploit

This commit is contained in:
Spirtix 2023-09-11 18:51:34 +02:00
parent 30cbc54eca
commit 912a022476
4 changed files with 83 additions and 2 deletions

View File

@ -18,6 +18,7 @@ class SetPositionVariablesHandler : ICommandHandler {
this.client = client; this.client = client;
spvData = receivedObject; spvData = receivedObject;
UpdatePositionVariables(); UpdatePositionVariables();
if (Utils.VariablesValid(client))
SendSPVCommand(); SendSPVCommand();
} }

View File

@ -45,6 +45,10 @@ class SetUserVariablesHandler : ICommandHandler {
client.PlayerData.J = suvData.Get<string>("J"); client.PlayerData.J = suvData.Get<string>("J");
client.PlayerData.Bu = suvData.Get<string>("BU"); client.PlayerData.Bu = suvData.Get<string>("BU");
client.PlayerData.Fp = suvData.Get<string>("FP"); client.PlayerData.Fp = suvData.Get<string>("FP");
if (!Utils.VariablesValid(client))
return;
Console.WriteLine($"SUV {client.Room.Name} IID: {client.ClientID}"); Console.WriteLine($"SUV {client.Room.Name} IID: {client.ClientID}");
client.Room.AddClient(client); client.Room.AddClient(client);
UpdatePlayersInRoom(); UpdatePlayersInRoom();
@ -78,6 +82,10 @@ class SetUserVariablesHandler : ICommandHandler {
data2.Add("L", client.PlayerData.L); data2.Add("L", client.PlayerData.L);
vl.Add(NetworkArray.StringParam("L", client.PlayerData.L)); vl.Add(NetworkArray.StringParam("L", client.PlayerData.L));
} }
if (!Utils.VariablesValid(client))
return;
data.Add("vl", vl); data.Add("vl", vl);
NetworkPacket packet = NetworkObject.WrapObject(0, 12, data).Serialize(); NetworkPacket packet = NetworkObject.WrapObject(0, 12, data).Serialize();

23
src/Core/Utils.cs Normal file
View File

@ -0,0 +1,23 @@
using sodoffmmo.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sodoffmmo.Core;
internal static class Utils {
public static bool VariablesValid(Client client) {
if (client.PlayerData.Fp != "" && (client.PlayerData.Mbf & 8) == 8
&& (client.PlayerData.GeometryType == PetGeometryType.Default && client.PlayerData.PetAge < PetAge.Adult
|| client.PlayerData.GeometryType == PetGeometryType.NightLight && client.PlayerData.PetAge < PetAge.Teen
|| client.PlayerData.GeometryType == PetGeometryType.Terror && client.PlayerData.PetAge < PetAge.Titan)) {
NetworkObject obj = new NetworkObject();
obj.Add("dr", (byte)1);
client.Send(NetworkObject.WrapObject(0, 1005, obj).Serialize());
client.SheduleDisconnect();
return false;
}
return true;
}
}

View File

@ -6,7 +6,6 @@ public class PlayerData {
public double R1 { get; set; } public double R1 { get; set; }
public double R2 { get; set; } public double R2 { get; set; }
public double R3 { get; set; } public double R3 { get; set; }
public string Fp { get; set; } = "";
public double Mx { get; set; } = 6; public double Mx { get; set; } = 6;
public string Udt { get; set; } = ""; public string Udt { get; set; } = "";
public double P1 { get; set; } public double P1 { get; set; }
@ -27,6 +26,42 @@ public class PlayerData {
public string M { get; set; } = "False"; public string M { get; set; } = "False";
public string L { get; set; } = ""; public string L { get; set; } = "";
public string UNToken { get; set; } = ""; public string UNToken { get; set; } = "";
public PetGeometryType GeometryType { get; set; } = PetGeometryType.Default;
public PetAge PetAge { get; set; } = PetAge.Adult;
public string Fp {
get {
return fp;
}
set {
fp = value;
string[] array = fp.Split('*');
Dictionary<string, string> keyValPairs = new();
foreach (string str in array) {
string[] keyValPair = str.Split('$');
if (keyValPair.Length == 2)
keyValPairs[keyValPair[0]] = keyValPair[1];
}
GeometryType = PetGeometryType.Default;
PetAge = PetAge.Adult;
if (keyValPairs.TryGetValue("G", out string geometry)) {
if (geometry.ToLower().Contains("nightlight"))
GeometryType = PetGeometryType.NightLight;
else if (geometry.ToLower().Contains("terribleterror"))
GeometryType = PetGeometryType.Terror;
}
if (keyValPairs.TryGetValue("A", out string age)) {
switch (age) {
case "E": PetAge = PetAge.EggInHand; break;
case "B": PetAge = PetAge.Baby; break;
case "C": PetAge = PetAge.Child; break;
case "T": PetAge = PetAge.Teen; break;
case "A": PetAge = PetAge.Adult; break;
case "Ti": PetAge = PetAge.Titan; break;
}
}
}
}
private string fp = "";
public NetworkArray GetNetworkData(int clientID) { public NetworkArray GetNetworkData(int clientID) {
NetworkArray arr = new(); NetworkArray arr = new();
@ -64,3 +99,17 @@ public class PlayerData {
return arr; return arr;
} }
} }
public enum PetGeometryType {
Default,
NightLight,
Terror
}
public enum PetAge {
EggInHand = 0,
Baby = 1,
Child = 2,
Teen = 3,
Adult = 4,
Titan = 5
}