more changes

This commit is contained in:
Bitl 2019-02-06 19:55:22 -07:00
parent ea49872a1c
commit ca92fdb3d2
20 changed files with 19736 additions and 58063 deletions

View File

@ -1,3 +1,36 @@
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -24,8 +24,6 @@ using System.Linq;
using System.ComponentModel;
using System.Net.Sockets;
using System.Net;
using System.Xml.Linq;
using NAudio.Wave;
using Mono.Nat;
namespace NovetusLauncher
@ -280,6 +278,9 @@ namespace NovetusLauncher
public static void ReloadLoadtextValue()
{
//Temporarily removed until i can figure out a way to better integrate this.
/*
if (GlobalVars.IsWebServerOn == true)
{
string extra = GlobalVars.Custom_Extra_SelectionIsHat == true ? GlobalVars.WebServer_HatDir + GlobalVars.Custom_Extra : GlobalVars.WebServer_ExtraDir + GlobalVars.Custom_Extra;
@ -300,6 +301,7 @@ namespace NovetusLauncher
}
else
{
*/
GlobalVars.loadtext = "'" + GlobalVars.Custom_Hat1ID_Offline + "','" +
GlobalVars.Custom_Hat2ID_Offline + "','" +
GlobalVars.Custom_Hat3ID_Offline + "'," +
@ -318,7 +320,7 @@ namespace NovetusLauncher
GlobalVars.Custom_Extra + "', false";
GlobalVars.sololoadtext = GlobalVars.loadtext;
}
//}
}
public static void ReadClientValues(string clientpath)
@ -2005,77 +2007,6 @@ namespace NovetusLauncher
}
}
/// <summary>
/// Stream for looping playback
/// </summary>
public class LoopStream : WaveStream
{
WaveStream sourceStream;
/// <summary>
/// Creates a new Loop stream
/// </summary>
/// <param name="sourceStream">The stream to read from. Note: the Read method of this stream should return 0 when it reaches the end
/// or else we will not loop to the start again.</param>
public LoopStream(WaveStream sourceStream)
{
this.sourceStream = sourceStream;
this.EnableLooping = true;
}
/// <summary>
/// Use this to turn looping on or off
/// </summary>
public bool EnableLooping { get; set; }
/// <summary>
/// Return source stream's wave format
/// </summary>
public override WaveFormat WaveFormat
{
get { return sourceStream.WaveFormat; }
}
/// <summary>
/// LoopStream simply returns
/// </summary>
public override long Length
{
get { return sourceStream.Length; }
}
/// <summary>
/// LoopStream simply passes on positioning to source stream
/// </summary>
public override long Position
{
get { return sourceStream.Position; }
set { sourceStream.Position = value; }
}
public override int Read(byte[] buffer, int offset, int count)
{
int totalBytesRead = 0;
while (totalBytesRead < count)
{
int bytesRead = sourceStream.Read(buffer, offset + totalBytesRead, count - totalBytesRead);
if (bytesRead == 0 || sourceStream.Position > sourceStream.Length)
{
if (sourceStream.Position == 0 || !EnableLooping)
{
// something wrong with the source stream
break;
}
// loop
sourceStream.Position = 0;
}
totalBytesRead += bytesRead;
}
return totalBytesRead;
}
}
public static class GlobalVars
{
public static string RootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

View File

@ -117,7 +117,6 @@ namespace NovetusLauncher
this.label11 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.label16 = new System.Windows.Forms.Label();
this.button24 = new System.Windows.Forms.Button();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
@ -204,7 +203,7 @@ namespace NovetusLauncher
// label31
//
this.label31.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
| System.Windows.Forms.AnchorStyles.Right)));
this.label31.Location = new System.Drawing.Point(267, 5);
this.label31.Name = "label31";
this.label31.Size = new System.Drawing.Size(120, 13);
@ -226,23 +225,23 @@ namespace NovetusLauncher
//
this.numericUpDown1.Location = new System.Drawing.Point(267, 21);
this.numericUpDown1.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
65535,
0,
0,
0});
this.numericUpDown1.Minimum = new decimal(new int[] {
1,
0,
0,
0});
1,
0,
0,
0});
this.numericUpDown1.Name = "numericUpDown1";
this.numericUpDown1.Size = new System.Drawing.Size(120, 20);
this.numericUpDown1.TabIndex = 18;
this.numericUpDown1.Value = new decimal(new int[] {
53640,
0,
0,
0});
53640,
0,
0,
0});
this.numericUpDown1.ValueChanged += new System.EventHandler(this.NumericUpDown1ValueChanged);
//
// button19
@ -289,7 +288,7 @@ namespace NovetusLauncher
// label3
//
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
| System.Windows.Forms.AnchorStyles.Right)));
this.label3.Location = new System.Drawing.Point(16, 5);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(241, 13);
@ -342,7 +341,7 @@ namespace NovetusLauncher
this.label17.Size = new System.Drawing.Size(382, 36);
this.label17.TabIndex = 58;
this.label17.Text = "NOTE: If you changed the server port, go to the CONSOLE and type \"webserver resta" +
"rt\" or \"restart\" to restart the web server or restart the launcher.";
"rt\" or \"restart\" to restart the web server or restart the launcher.";
this.label17.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// checkBox4
@ -418,46 +417,46 @@ namespace NovetusLauncher
//
this.numericUpDown3.Location = new System.Drawing.Point(217, 161);
this.numericUpDown3.Maximum = new decimal(new int[] {
256,
0,
0,
0});
256,
0,
0,
0});
this.numericUpDown3.Minimum = new decimal(new int[] {
1,
0,
0,
0});
1,
0,
0,
0});
this.numericUpDown3.Name = "numericUpDown3";
this.numericUpDown3.Size = new System.Drawing.Size(49, 20);
this.numericUpDown3.TabIndex = 49;
this.numericUpDown3.Value = new decimal(new int[] {
12,
0,
0,
0});
12,
0,
0,
0});
this.numericUpDown3.ValueChanged += new System.EventHandler(this.NumericUpDown3ValueChanged);
//
// numericUpDown2
//
this.numericUpDown2.Location = new System.Drawing.Point(81, 161);
this.numericUpDown2.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
65535,
0,
0,
0});
this.numericUpDown2.Minimum = new decimal(new int[] {
1,
0,
0,
0});
1,
0,
0,
0});
this.numericUpDown2.Name = "numericUpDown2";
this.numericUpDown2.Size = new System.Drawing.Size(63, 20);
this.numericUpDown2.TabIndex = 48;
this.numericUpDown2.Value = new decimal(new int[] {
53640,
0,
0,
0});
53640,
0,
0,
0});
this.numericUpDown2.ValueChanged += new System.EventHandler(this.NumericUpDown2ValueChanged);
//
// label29
@ -716,8 +715,8 @@ namespace NovetusLauncher
// richTextBox1
//
this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.richTextBox1.BackColor = System.Drawing.SystemColors.ControlText;
this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.richTextBox1.ForeColor = System.Drawing.Color.White;
@ -742,8 +741,8 @@ namespace NovetusLauncher
// richTextBox2
//
this.richTextBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.richTextBox2.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.richTextBox2.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.richTextBox2.Location = new System.Drawing.Point(3, 3);
@ -1019,17 +1018,6 @@ namespace NovetusLauncher
this.label16.Size = new System.Drawing.Size(2, 65);
this.label16.TabIndex = 51;
//
// button24
//
this.button24.Font = new System.Drawing.Font("Segoe UI Symbol", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button24.Location = new System.Drawing.Point(390, 75);
this.button24.Name = "button24";
this.button24.Size = new System.Drawing.Size(22, 22);
this.button24.TabIndex = 52;
this.button24.Text = "⬛";
this.button24.UseVisualStyleBackColor = true;
this.button24.Click += new System.EventHandler(this.Button24Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1037,7 +1025,6 @@ namespace NovetusLauncher
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.ClientSize = new System.Drawing.Size(417, 366);
this.Controls.Add(this.button24);
this.Controls.Add(this.label16);
this.Controls.Add(this.label12);
this.Controls.Add(this.label28);
@ -1079,9 +1066,9 @@ namespace NovetusLauncher
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Button button24;
private System.Windows.Forms.CheckBox checkBox4;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.TextBox textBox3;

View File

@ -12,11 +12,8 @@ using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.ComponentModel;
using System.Reflection;
using NAudio.Wave;
using NAudio.Wave.SampleProviders;
using Mono.Nat;
namespace NovetusLauncher
@ -27,9 +24,7 @@ namespace NovetusLauncher
public partial class MainForm : Form
{
DiscordRpc.EventHandlers handlers;
private WaveOutEvent outputDevice;
private AudioFileReader audioFile;
public MainForm()
{
_fieldsTreeCache = new TreeView();
@ -210,47 +205,6 @@ namespace NovetusLauncher
ConsolePrint("WebServer: Failed to stop WebServer. Some features may not function. (Did not run as Administrator)", 2);
}
}
void StartMusic()
{
try
{
string file = GlobalVars.DataPath + "\\music\\music.mp3";
if (File.Exists(file))
{
if (outputDevice == null)
{
outputDevice = new WaveOutEvent();
}
if (audioFile == null)
{
audioFile = new AudioFileReader(file);
LoopStream loop = new LoopStream(audioFile);
outputDevice.Init(loop);
}
outputDevice.Play();
}
else
{
button24.Visible = false;
button24.Enabled = false;
}
}
catch (Exception ex)
{
ConsolePrint("NAudio: Failed to play music. (" + ex.Message + ")", 2);
}
}
void EndMusic()
{
outputDevice.Stop();
outputDevice.Dispose();
outputDevice = null;
audioFile.Dispose();
audioFile = null;
}
void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
@ -390,7 +344,6 @@ namespace NovetusLauncher
InitUPnP();
StartDiscord();
StartWebServer();
StartMusic();
}
void MainFormClose(object sender, CancelEventArgs e)
@ -1499,19 +1452,5 @@ namespace NovetusLauncher
{
MessageBox.Show("Please restart the Novetus launcher for UPnP to take effect.","Novetus - UPnP", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
void Button24Click(object sender, EventArgs e)
{
if (outputDevice.PlaybackState == PlaybackState.Playing)
{
outputDevice.Pause();
button24.Text = "▶";
}
else if (outputDevice.PlaybackState == PlaybackState.Paused)
{
outputDevice.Play();
button24.Text = "⬛";
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>WinExe</OutputType>
<RootNamespace>NovetusLauncher</RootNamespace>
<AssemblyName>NovetusLauncher</AssemblyName>
<AssemblyName>Novetus</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
@ -47,9 +47,6 @@
<Reference Include="Mono.Nat">
<HintPath>..\packages\Mono.Nat.1.2.24.0\lib\net40\Mono.Nat.dll</HintPath>
</Reference>
<Reference Include="NAudio">
<HintPath>..\packages\NAudio.1.8.5\lib\net35\NAudio.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Mono.Nat" version="1.2.24.0" targetFramework="net40" />
<package id="NAudio" version="1.8.5" targetFramework="net40" />
</packages>

View File

@ -1,14 +0,0 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>NAudio</id>
<version>1.8.5</version>
<authors>Mark Heath</authors>
<owners>Mark Heath</owners>
<licenseUrl>https://github.com/naudio/NAudio/blob/master/license.txt</licenseUrl>
<projectUrl>https://github.com/naudio/NAudio</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>NAudio, an audio library for .NET</description>
<tags>C# .NET audio sound</tags>
</metadata>
</package>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,8 +29,8 @@ Name: "desktopicon"; Description: "Create a icon on your Desktop"; GroupDescript
Name: "quicklaunchicon"; Description: "Create a icon on your Quick Launch Menu"; GroupDescription: "Icons"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
Source: "Novetus\NovetusLauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\NovetusLauncher.exe.config"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\Novetus.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\Novetus.exe.config"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\README.TXT"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\changelog.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "Novetus\info.txt"; DestDir: "{app}"; Flags: ignoreversion
@ -42,18 +42,18 @@ Source: "Novetus\shareddata\*"; DestDir: "{app}\shareddata"; Flags: ignoreversio
Source: "Novetus\_redist\*"; DestDir: "{app}\_redist"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Novetus {#AppVer}"; Filename: "{app}\NovetusLauncher.exe"
Name: "{group}\Utilities\Novetus Client SDK"; Filename: "{app}\NovetusLauncher.exe" Parameters: "-clientinfo"
Name: "{group}\Utilities\Novetus Item SDK"; Filename: "{app}\NovetusLauncher.exe" Parameters: "-itemmaker"
Name: "{group}\Utilities\Quick Configure"; Filename: "{app}\NovetusLauncher.exe" Parameters: "-quickconfigure"
Name: "{group}\Utilities\ClientScript Documentation"; Filename: "{app}\NovetusLauncher.exe" Parameters: "-documentation"
Name: "{group}\Novetus {#AppVer}"; Filename: "{app}\Novetus.exe"
Name: "{group}\Utilities\Novetus Client SDK"; Filename: "{app}\Novetus.exe" Parameters: "-clientinfo"
Name: "{group}\Utilities\Novetus Item SDK"; Filename: "{app}\Novetus.exe" Parameters: "-itemmaker"
Name: "{group}\Utilities\Quick Configure"; Filename: "{app}\Novetus.exe" Parameters: "-quickconfigure"
Name: "{group}\Utilities\ClientScript Documentation"; Filename: "{app}\Novetus.exe" Parameters: "-documentation"
Name: "{group}\Uninstall Novetus {#AppVer}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Novetus {#AppVer}"; Filename: "{app}\NovetusLauncher.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Novetus {#AppVer}"; Filename: "{app}\NovetusLauncher.exe"; Tasks: quicklaunchicon
Name: "{commondesktop}\Novetus {#AppVer}"; Filename: "{app}\Novetus.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Novetus {#AppVer}"; Filename: "{app}\Novetus.exe"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\_redist\netframework40install.exe"; Description: "Install .NET Framework 4.0"; Flags: nowait postinstall skipifsilent
Filename: "{app}\_redist\vcredist2005install32.exe"; Description: "Install Visual C++ 2005 Redistributable (32-bit)"; Flags: nowait postinstall skipifsilent
Filename: "{app}\NovetusLauncher.exe"; Description: "Play Novetus"; Flags: nowait postinstall skipifsilent unchecked
Filename: "{app}\Novetus.exe"; Description: "Play Novetus"; Flags: nowait postinstall skipifsilent unchecked
Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent unchecked
Filename: "{app}\changelog.txt"; Description: "View the changelog"; Flags: postinstall shellexec skipifsilent unchecked

View File

@ -5,6 +5,39 @@ settings().Network.PhysicsReplicationUpdateRate = 1000000
settings().Network.SendRate = 1000000
settings().Network.PhysicsSend = 1 -- 1==RoundRobin
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -1,6 +1,39 @@
settings().Network.maxDataModelSendBuffer = 1000000
settings().Network.sendRate = 1000000
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -5,6 +5,39 @@ settings().Network.PhysicsReplicationUpdateRate = 1000000
settings().Network.SendRate = 1000000
settings().Network.PhysicsSend = 1 -- 1==RoundRobin
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -5,6 +5,39 @@ settings().Network.PhysicsSend = 1
settings().Network.NetworkOwnerRate = 30
settings().Network.PhysicsSendRate = 30
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -5,6 +5,39 @@ settings().Network.ReceiveRate = 60
settings().Network.NetworkOwnerRate = 30
pcall(function() game:GetService("ScriptContext").ScriptsDisabled = false end)
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil

View File

@ -21,6 +21,39 @@ end))
pcall(function() game:GetService("ScriptContext").ScriptsDisabled = false end)
_G.rawset=nil
function readonlytable(table)
return setmetatable({}, {
__index = table,
__newindex = function(table, key, value)
error("Attempt to modify read-only table")
end,
__metatable = false
});
end
function readonlytablechildren(table)
for i,v in pairs(table) do
if type(v)=="table" and table[i]~=_G._G then
readonlytablechildren(table[i])
table[i] = readonlytable(table[i])
end
if type(v)=="userdata" then
local mt = getmetatable(table[i])
if mt~=nil and mt~=false then
mt.__metatable=false
end
end
end
end
readonlytablechildren(_G)
_G._G = readonlytable(_G)
mt = getmetatable(game.Changed)
mt.__metatable=false
mt = getmetatable("curse you roblox")
mt.__metatable=false
--function made by rbxbanland
function newWaitForChild(newParent,name)
local returnable = nil