other-roblox-projects-src/RBX2007/Origins07_Launcher/RBX2007_Launcher/HelperFuncs.cs

723 lines
20 KiB
C#

/*
* Created by SharpDevelop.
* User: BITL
* Date: 6/6/2017
* Time: 11:12 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Reflection;
namespace RBX2007_Launcher
{
public static class GlobalVars
{
public static string SharedArgs;
public static string Name = "Player";
public static string HatName = "NoHat.rbxm";
public static int HeadColor = 24;
public static int TorsoColor = 23;
public static int LeftArmColor = 24;
public static int RightArmColor = 24;
public static int LeftLegColor = 119;
public static int RightLegColor = 119;
public static string ColorMenu_HeadColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_TorsoColor = "Color [A=255, R=13, G=105, B=172]";
public static string ColorMenu_LeftArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_RightArmColor = "Color [A=255, R=245, G=205, B=47]";
public static string ColorMenu_LeftLegColor = "Color [A=255, R=164, G=189, B=71]";
public static string ColorMenu_RightLegColor = "Color [A=255, R=164, G=189, B=71]";
public static string ScriptLuaFile = "\\game.rbx";
public static string Config = "config.rbx";
public static int UserID = 0;
public static int AASamples = 0;
public static bool Shadows = false;
public static bool AnimatedCharacter = true;
public static bool UseRandomColors = false;
public static int PlayerColorPreset = 1;
public static string EXEName = "RobloxDefault.exe";
}
public class SecurityFuncs
{
public SecurityFuncs()
{
}
public static void WriteConfigValues()
{
string[] lines = {
GlobalVars.Name.ToString(),
GlobalVars.UserID.ToString(),
GlobalVars.HatName.ToString(),
GlobalVars.HeadColor.ToString(),
GlobalVars.TorsoColor.ToString(),
GlobalVars.LeftArmColor.ToString(),
GlobalVars.RightArmColor.ToString(),
GlobalVars.LeftLegColor.ToString(),
GlobalVars.RightLegColor.ToString(),
GlobalVars.ColorMenu_HeadColor.ToString(),
GlobalVars.ColorMenu_TorsoColor.ToString(),
GlobalVars.ColorMenu_LeftArmColor.ToString(),
GlobalVars.ColorMenu_RightArmColor.ToString(),
GlobalVars.ColorMenu_LeftLegColor.ToString(),
GlobalVars.ColorMenu_RightLegColor.ToString(),
GlobalVars.EXEName.ToString(),
GlobalVars.AASamples.ToString(),
GlobalVars.Shadows.ToString(),
GlobalVars.AnimatedCharacter.ToString(),
GlobalVars.UseRandomColors.ToString(),
GlobalVars.PlayerColorPreset.ToString()
};
File.WriteAllText(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + GlobalVars.Config, Base64Encode(string.Join("|",lines)));
}
public static void ReadConfigValues()
{
string line1;
using(StreamReader reader = new StreamReader(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + GlobalVars.Config))
{
line1 = reader.ReadLine();
}
string ConvertedLine = Base64Decode(line1);
string[] result = ConvertedLine.Split('|');
GlobalVars.Name = result[0];
GlobalVars.UserID = Convert.ToInt32(result[1]);
GlobalVars.HatName = result[2];
GlobalVars.HeadColor = Convert.ToInt32(result[3]);
GlobalVars.TorsoColor = Convert.ToInt32(result[4]);
GlobalVars.LeftArmColor = Convert.ToInt32(result[5]);
GlobalVars.RightArmColor = Convert.ToInt32(result[6]);
GlobalVars.LeftLegColor = Convert.ToInt32(result[7]);
GlobalVars.RightLegColor = Convert.ToInt32(result[8]);
GlobalVars.ColorMenu_HeadColor = result[9];
GlobalVars.ColorMenu_TorsoColor = result[10];
GlobalVars.ColorMenu_LeftArmColor = result[11];
GlobalVars.ColorMenu_RightArmColor = result[12];
GlobalVars.ColorMenu_LeftLegColor = result[13];
GlobalVars.ColorMenu_RightLegColor = result[14];
GlobalVars.EXEName = result[15];
GlobalVars.AASamples = Convert.ToInt32(result[16]);
GlobalVars.Shadows = Convert.ToBoolean(result[17]);
GlobalVars.AnimatedCharacter = Convert.ToBoolean(result[18]);
GlobalVars.UseRandomColors = Convert.ToBoolean(result[19]);
GlobalVars.PlayerColorPreset = Convert.ToInt32(result[20]);
if (GlobalVars.UserID == 0)
{
GeneratePlayerID();
WriteConfigValues();
}
}
public static void GeneratePlayerID()
{
CryptoRandom random = new CryptoRandom();
int randomID = 0;
int randIDmode = random.Next(0,7);
if (randIDmode == 0)
{
randomID = random.Next(0, 99);
}
else if (randIDmode == 1)
{
randomID = random.Next(0, 999);
}
else if (randIDmode == 2)
{
randomID = random.Next(0, 9999);
}
else if (randIDmode == 3)
{
randomID = random.Next(0, 99999);
}
else if (randIDmode == 4)
{
randomID = random.Next(0, 999999);
}
else if (randIDmode == 5)
{
randomID = random.Next(0, 9999999);
}
else if (randIDmode == 6)
{
randomID = random.Next(0, 99999999);
}
else if (randIDmode == 7)
{
randomID = random.Next();
}
//2147483647 is max id.
GlobalVars.UserID = randomID;
}
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
}
public class ScriptGenerator
{
public ScriptGenerator()
{
}
public static void GenerateScriptForClient()
{
//next, generate the header functions.
SecurityFuncs.ReadConfigValues();
int aasamples = GlobalVars.AASamples.Equals(0) ? 1 : GlobalVars.AASamples.Equals(1) ? 4 : GlobalVars.AASamples.Equals(2) ? 8 : 1;
string header = MultiLine(
"--Header",
"function newWaitForChild(newParent,name)",
"local returnable = nil",
"if newParent:FindFirstChild(name) then",
"returnable = newParent:FindFirstChild(name)",
"else",
"repeat wait() returnable = newParent:FindFirstChild(name) until returnable ~= nil",
"end",
"return returnable",
"end",
"settings().Rendering.Shadows = " + GlobalVars.Shadows.ToString().ToLower(),
"settings().Rendering.AASamples = " + aasamples,
"AnimatedCharacter = " + GlobalVars.AnimatedCharacter.ToString().ToLower()
);
string playersettings = MultiLine(
"--Player Settings",
"UserID = " + GlobalVars.UserID,
"PlayerName = '" + GlobalVars.Name + "'"
);
string customizationsettings = "";
if (GlobalVars.AnimatedCharacter == false)
{
customizationsettings = MultiLine(
"--Customization Settings",
"Hat1ID = 'NoHat.rbxm'"
);
}
else
{
customizationsettings = MultiLine(
"--Customization Settings",
"Hat1ID = '" + GlobalVars.HatName + "'"
);
}
string colorsettings = "";
if (GlobalVars.AnimatedCharacter == false)
{
if (GlobalVars.UseRandomColors)
{
colorsettings = GeneratePlayerColorString();
}
else
{
colorsettings = GeneratePlayerColorPresetString(GlobalVars.PlayerColorPreset);
}
}
else
{
colorsettings = MultiLine(
"--Color Settings",
"HeadColorID = " + GlobalVars.HeadColor,
"TorsoColorID = " + GlobalVars.TorsoColor,
"LeftArmColorID = " + GlobalVars.LeftArmColor,
"RightArmColorID = " + GlobalVars.RightArmColor,
"LeftLegColorID = " + GlobalVars.LeftLegColor,
"RightLegColorID = " + GlobalVars.RightLegColor
);
}
//add customization funcs
string customizationgen = MultiLine(
"--Customization Code",
"function InitalizeClientAppearance(Player,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,HatID)",
"local newCharApp = Instance.new('IntValue',Player)",
"newCharApp.Name = 'Appearance'",
"for i=1,6,1 do",
"local BodyColor = Instance.new('BrickColorValue',newCharApp)",
"if (i == 1) then",
"if (HeadColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(HeadColorID)",
"BodyColor.Name = 'HeadColor (ID: '..HeadColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'HeadColor (ID: 1)'",
"end",
"elseif (i == 2) then",
"if (TorsoColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(TorsoColorID)",
"BodyColor.Name = 'TorsoColor (ID: '..TorsoColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'TorsoColor (ID: 1)'",
"end",
"elseif (i == 3) then",
"if (LeftArmColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(LeftArmColorID)",
"BodyColor.Name = 'LeftArmColor (ID: '..LeftArmColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'LeftArmColor (ID: 1)'",
"end",
"elseif (i == 4) then",
"if (RightArmColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(RightArmColorID)",
"BodyColor.Name = 'RightArmColor (ID: '..RightArmColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'RightArmColor (ID: 1)'",
"end",
"elseif (i == 5) then",
"if (LeftLegColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(LeftLegColorID)",
"BodyColor.Name = 'LeftLegColor (ID: '..LeftLegColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'LeftLegColor (ID: 1)'",
"end",
"elseif (i == 6) then",
"if (RightLegColorID ~= nil) then",
"BodyColor.Value = BrickColor.new(RightLegColorID)",
"BodyColor.Name = 'RightLegColor (ID: '..RightLegColorID..')'",
"else",
"BodyColor.Value = BrickColor.new(1)",
"BodyColor.Name = 'RightLegColor (ID: 1)'",
"end",
"end",
"local typeValue = Instance.new('NumberValue')",
"typeValue.Name = 'CustomizationType'",
"typeValue.Parent = BodyColor",
"typeValue.Value = 1",
"local indexValue = Instance.new('NumberValue')",
"indexValue.Name = 'ColorIndex'",
"indexValue.Parent = BodyColor",
"indexValue.Value = i",
"end",
"local newHat = Instance.new('StringValue',newCharApp)",
"if (HatID ~= nil) then",
"newHat.Value = HatID",
"newHat.Name = HatID",
"else",
"newHat.Value = 'NoHat.rbxm'",
"newHat.Name = 'NoHat.rbxm'",
"end",
"local typeValue = Instance.new('NumberValue')",
"typeValue.Name = 'CustomizationType'",
"typeValue.Parent = newHat",
"typeValue.Value = 2",
"end",
"function LoadCharacterNew(playerApp,newChar)",
"local charparts = {[1] = newWaitForChild(newChar,'Head'),[2] = newWaitForChild(newChar,'Torso'),[3] = newWaitForChild(newChar,'Left Arm'),[4] = newWaitForChild(newChar,'Right Arm'),[5] = newWaitForChild(newChar,'Left Leg'),[6] = newWaitForChild(newChar,'Right Leg')}",
"for _,newVal in pairs(playerApp:GetChildren()) do",
"newWaitForChild(newVal,'CustomizationType')",
"local customtype = newVal:FindFirstChild('CustomizationType')",
"if (customtype.Value == 1) then ",
"pcall(function()",
"newWaitForChild(newVal,'ColorIndex')",
"local colorindex = newVal:FindFirstChild('ColorIndex')",
"charparts[colorindex.Value].BrickColor = newVal.Value ",
"end)",
"elseif (customtype.Value == 2) then",
"pcall(function()",
"local newHat = game.Workspace:InsertContent('rbxasset://hats/'..newVal.Value)",
"if newHat[1] then ",
"if newHat[1].className == 'Hat' then",
"newHat[1].Parent = newChar",
"else",
"newHat[1]:remove()",
"end",
"end",
"end)",
"end",
"end",
"end"
);
//finally, we generate the actual script code.
string code = MultiLine(
"--Game Code",
"game:GetService('RunService'):run()",
"local plr = game.Players:CreateLocalPlayer(UserID)",
"plr.Name = PlayerName",
"plr:LoadCharacter()",
"pcall(function() plr:SetUnder13(false) end)",
"pcall(function() plr:SetAccountAge(365) end)",
"if (AnimatedCharacter == false) then",
"if plr.Character:FindFirstChild('Animate') then",
"plr.Character.Animate:Remove()",
"end",
"end",
"InitalizeClientAppearance(plr,HeadColorID,TorsoColorID,LeftArmColorID,RightArmColorID,LeftLegColorID,RightLegColorID,Hat1ID)",
"LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character)",
"game:GetService('Visit')",
"while true do",
"wait(0.001)",
"if (plr.Character ~= nil) then",
"if (plr.Character.Humanoid.Health == 0) then",
"wait(5)",
"plr:LoadCharacter()",
"LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character,plr.Backpack)",
"if (AnimatedCharacter == false) then",
"if plr.Character:FindFirstChild('Animate') then",
"plr.Character.Animate:Remove()",
"end",
"end",
"elseif (plr.Character.Parent == nil) then",
"wait(5)",
"plr:LoadCharacter()",
"LoadCharacterNew(newWaitForChild(plr,'Appearance'),plr.Character,plr.Backpack)",
"if (AnimatedCharacter == false) then",
"if plr.Character:FindFirstChild('Animate') then",
"plr.Character.Animate:Remove()",
"end",
"end",
"end",
"end",
"end"
);
string scriptfile = MultiLine(
header,
playersettings,
customizationsettings,
colorsettings,
customizationgen,
code
);
List<string> list = new List<string>(Regex.Split(scriptfile, Environment.NewLine));
string[] convertedList = list.ToArray();
File.WriteAllLines(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + GlobalVars.ScriptLuaFile, convertedList);
}
public static string GeneratePlayerColorString()
{
CryptoRandom random = new CryptoRandom();
int SkinPattern = random.Next(1,7);
int LegsPattern = random.Next(1,5);
int TorsoPattern = random.Next(1,8);
int HeadColor = 0;
int TorsoColor= 0;
int LArmColor = 0;
int RArmColor = 0;
int LLegColor = 0;
int RLegColor = 0;
if (SkinPattern == 1)
{
HeadColor = 24;
LArmColor = 24;
RArmColor = 24;
}
else if (SkinPattern == 2)
{
HeadColor = 226;
LArmColor = 226;
RArmColor = 226;
}
else if (SkinPattern == 3)
{
HeadColor = 101;
LArmColor = 101;
RArmColor = 101;
}
else if (SkinPattern == 4)
{
HeadColor = 9;
LArmColor = 9;
RArmColor = 9;
}
else if (SkinPattern == 5)
{
HeadColor = 38;
LArmColor = 38;
RArmColor = 38;
}
else if (SkinPattern == 6)
{
HeadColor = 18;
LArmColor = 18;
RArmColor = 18;
}
else if (SkinPattern == 7)
{
HeadColor = 128;
LArmColor = 128;
RArmColor = 128;
}
if (LegsPattern == 1)
{
RLegColor = 119;
LLegColor = 119;
}
else if (LegsPattern == 2)
{
LLegColor = 11;
RLegColor = 11;
}
else if (LegsPattern == 3)
{
LLegColor = 23;
RLegColor = 23;
}
else if (LegsPattern == 4)
{
LLegColor = 1;
RLegColor = 1;
}
else if (LegsPattern == 5)
{
LLegColor = 45;
RLegColor = 45;
}
if (TorsoPattern == 1)
{
TorsoColor = 194;
}
else if (TorsoPattern == 2)
{
TorsoColor = 199;
}
else if (TorsoPattern == 3)
{
TorsoColor = 1;
}
else if (TorsoPattern == 4)
{
TorsoColor = 21;
}
else if (TorsoPattern == 5)
{
TorsoColor = 37;
}
else if (TorsoPattern == 6)
{
TorsoColor = 23;
}
else if (TorsoPattern == 7)
{
TorsoColor = 45;
}
else if (TorsoPattern == 8)
{
TorsoColor = 11;
}
string output = MultiLine(
"--Color Settings",
"HeadColorID = " + HeadColor,
"TorsoColorID = " + TorsoColor,
"LeftArmColorID = " + LArmColor,
"RightArmColorID = " + RArmColor,
"LeftLegColorID = " + LLegColor,
"RightLegColorID = " + RLegColor
);
return output;
}
public static string GeneratePlayerColorPresetString(int preset)
{
int HeadColor = 0;
int TorsoColor = 0;
int LArmColor = 0;
int RArmColor = 0;
int LLegColor = 0;
int RLegColor = 0;
if (preset == 1)
{
HeadColor = 24;
TorsoColor = 194;
LArmColor = 24;
RArmColor = 24;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 2)
{
HeadColor = 24;
TorsoColor = 22;
LArmColor = 24;
RArmColor = 24;
LLegColor = 9;
RLegColor = 9;
}
else if (preset == 3)
{
HeadColor = 24;
TorsoColor = 23;
LArmColor = 24;
RArmColor = 24;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 4)
{
HeadColor = 24;
TorsoColor = 22;
LArmColor = 24;
RArmColor = 24;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 5)
{
HeadColor = 24;
TorsoColor = 11;
LArmColor = 24;
RArmColor = 24;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 6)
{
HeadColor = 38;
TorsoColor = 194;
LArmColor = 38;
RArmColor = 38;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 7)
{
HeadColor = 128;
TorsoColor = 119;
LArmColor = 128;
RArmColor = 128;
LLegColor = 119;
RLegColor = 119;
}
else if (preset == 8)
{
HeadColor = 9;
TorsoColor = 194;
LArmColor = 9;
RArmColor = 9;
LLegColor = 119;
RLegColor = 119;
}
string output = MultiLine(
"--Color Settings",
"HeadColorID = " + HeadColor,
"TorsoColorID = " + TorsoColor,
"LeftArmColorID = " + LArmColor,
"RightArmColorID = " + RArmColor,
"LeftLegColorID = " + LLegColor,
"RightLegColorID = " + RLegColor
);
return output;
}
public static string MultiLine(params string[] args)
{
return string.Join(Environment.NewLine, args);
}
}
///<summary>
/// Represents a pseudo-random number generator, a device that produces random data.
///</summary>
class CryptoRandom : RandomNumberGenerator
{
private static RandomNumberGenerator r;
///<summary>
/// Creates an instance of the default implementation of a cryptographic random number generator that can be used to generate random data.
///</summary>
public CryptoRandom()
{
r = RandomNumberGenerator.Create();
}
///<summary>
/// Fills the elements of a specified array of bytes with random numbers.
///</summary>
///<param name=”buffer”>An array of bytes to contain random numbers.</param>
public override void GetBytes(byte[] buffer)
{
r.GetBytes(buffer);
}
///
/// Fills an array of bytes with a cryptographically strong random sequence of nonzero values.
///
/// The array to fill with cryptographically strong random nonzero bytes
public override void GetNonZeroBytes(byte[] data)
{
r.GetNonZeroBytes(data);
}
///<summary>
/// Returns a random number between 0.0 and 1.0.
///</summary>
public double NextDouble()
{
byte[] b = new byte[4];
r.GetBytes(b);
return (double)BitConverter.ToUInt32(b, 0) / UInt32.MaxValue;
}
///<summary>
/// Returns a random number within the specified range.
///</summary>
///<param name=”minValue”>The inclusive lower bound of the random number returned.</param>
///<param name=”maxValue”>The exclusive upper bound of the random number returned. maxValue must be greater than or equal to minValue.</param>
public int Next(int minValue, int maxValue)
{
return (int)Math.Round(NextDouble() * (maxValue - minValue - 1)) + minValue;
}
///<summary>
/// Returns a nonnegative random number.
///</summary>
public int Next()
{
return Next(0, Int32.MaxValue);
}
///<summary>
/// Returns a nonnegative random number less than the specified maximum
///</summary>
///<param name=”maxValue”>The inclusive upper bound of the random number returned. maxValue must be greater than or equal 0</param>
public int Next(int maxValue)
{
return Next(0, maxValue);
}
}
}