Skip to content

Commit a59bf43

Browse files
authored
RustOptimizer 1.0 Initial Commit
0 parents  commit a59bf43

20 files changed

Lines changed: 11570 additions & 0 deletions

About.Designer.cs

Lines changed: 82 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

About.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
4+
using System.Data;
5+
using System.Diagnostics;
6+
using System.Drawing;
7+
using System.Linq;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
using System.Windows.Forms;
11+
12+
namespace RustOptimizer
13+
{
14+
public partial class About : Form
15+
{
16+
public static About Instance { get; private set; }
17+
public About(string rtfText)
18+
{
19+
InitializeComponent();
20+
this.infoText.DetectUrls = true;
21+
this.infoText.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.RichTextBox_LinkClicked);
22+
this.infoText.Rtf = rtfText;
23+
}
24+
private void RichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
25+
{
26+
try
27+
{
28+
Process.Start(new ProcessStartInfo(e.LinkText)
29+
{
30+
UseShellExecute = true
31+
});
32+
}
33+
catch (Exception ex)
34+
{
35+
MessageBox.Show($"Could not open link: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
36+
}
37+
}
38+
private void About_Load(object sender, EventArgs e)
39+
{
40+
41+
}
42+
}
43+
}

About.resx

Lines changed: 1677 additions & 0 deletions
Large diffs are not rendered by default.

Core/Optimizer.cs

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace RustOptimizer.Core
8+
{
9+
public static class Optimizer
10+
{
11+
/// <summary>
12+
/// This method gets the right settings for a specific profile, like Competitive or Ultra.
13+
/// It's the main logic for applying all the tweaks.
14+
/// </summary>
15+
public static Dictionary<string, string> GetOptimalSettings(string profile)
16+
{
17+
var settings = new Dictionary<string, string>();
18+
19+
// Universal Settings for all profiles
20+
settings.Add("graphics.vsync", "False");
21+
settings.Add("client.headbob", "False");
22+
settings.Add("effects.sharpen", "False");
23+
settings.Add("effects.motionblur", "False");
24+
settings.Add("effects.antialiasing", "0");
25+
settings.Add("effects.maxgibs", "0");
26+
settings.Add("global.showblood", "True");
27+
settings.Add("gc.buffer", "4096");
28+
settings.Add("client.clampscreenshake", "True");
29+
settings.Add("effects.showoutlines", "False");
30+
settings.Add("graphics.impostorshadows", "False");
31+
settings.Add("console.erroroverlay", "False");
32+
settings.Add("accessibility.treemarkercolor", "0");
33+
settings.Add("audio.musicvolume", "0");
34+
settings.Add("audio.musicvolumemenu", "0");
35+
36+
switch (profile)
37+
{
38+
case "Competitive (Max FPS)":
39+
// Pure performance focus based on the latest video
40+
settings.Add("graphics.drawdistance", "500");
41+
settings.Add("graphics.lodbias", "1");
42+
settings.Add("graphics.af", "1");
43+
settings.Add("graphics.shadowquality", "0");
44+
settings.Add("graphicssettings.shadowcascades", "0");
45+
settings.Add("tree.meshes", "0");
46+
settings.Add("effects.ao", "False");
47+
settings.Add("graphics.dof", "False");
48+
settings.Add("effects.bloom", "False");
49+
settings.Add("effects.shafts", "False");
50+
settings.Add("effects.vignet", "False");
51+
settings.Add("grass.quality", "0");
52+
settings.Add("particle.quality", "0");
53+
settings.Add("sss.enabled", "False");
54+
settings.Add("water.quality", "0");
55+
settings.Add("water.reflections", "0");
56+
break;
57+
58+
case "Recommended (Optimized)":
59+
// Balances performance with visual fidelity to reduce pop-in.
60+
settings.Add("graphics.drawdistance", "1500");
61+
settings.Add("graphics.lodbias", "2.0");
62+
settings.Add("graphics.af", "4");
63+
settings.Add("graphics.shadowquality", "1");
64+
settings.Add("graphicssettings.shadowcascades", "1");
65+
settings.Add("tree.meshes", "50");
66+
settings.Add("effects.ao", "True");
67+
settings.Add("graphics.dof", "False");
68+
settings.Add("effects.bloom", "True");
69+
settings.Add("effects.shafts", "True");
70+
settings.Add("effects.vignet", "False");
71+
settings.Add("grass.quality", "50");
72+
settings.Add("particle.quality", "50");
73+
settings.Add("sss.enabled", "True");
74+
settings.Add("water.quality", "1");
75+
settings.Add("water.reflections", "1");
76+
break;
77+
78+
case "Balanced (Good-looking & Fast)":
79+
// A middle ground that provides a good experience on most systems.
80+
settings.Add("graphics.drawdistance", "1000");
81+
settings.Add("graphics.lodbias", "1.5");
82+
settings.Add("graphics.af", "2");
83+
settings.Add("graphics.shadowquality", "1");
84+
settings.Add("graphicssettings.shadowcascades", "1");
85+
settings.Add("tree.meshes", "30");
86+
settings.Add("effects.ao", "True");
87+
settings.Add("graphics.dof", "False");
88+
settings.Add("effects.bloom", "True");
89+
settings.Add("effects.shafts", "True");
90+
settings.Add("effects.vignet", "False");
91+
settings.Add("grass.quality", "25");
92+
settings.Add("particle.quality", "25");
93+
settings.Add("sss.enabled", "True");
94+
settings.Add("water.quality", "1");
95+
settings.Add("water.reflections", "1");
96+
break;
97+
98+
case "Ultra (Maximum Visuals)":
99+
// High-quality settings based on the provided client.cfg
100+
settings.Add("graphics.drawdistance", "2500");
101+
settings.Add("graphics.lodbias", "5");
102+
settings.Add("graphics.af", "16");
103+
settings.Add("graphics.shadowquality", "0");
104+
settings.Add("graphicssettings.shadowcascades", "1");
105+
settings.Add("tree.meshes", "100");
106+
settings.Add("effects.ao", "False");
107+
settings.Add("graphics.dof", "False");
108+
settings.Add("effects.bloom", "False");
109+
settings.Add("effects.shafts", "True");
110+
settings.Add("effects.vignet", "False");
111+
settings.Add("grass.quality", "0");
112+
settings.Add("particle.quality", "0");
113+
settings.Add("sss.enabled", "True");
114+
settings.Add("water.quality", "0");
115+
settings.Add("water.reflections", "0");
116+
break;
117+
118+
default:
119+
// Fallback to Recommended (Optimized) as the default
120+
goto case "Recommended (Optimized)";
121+
}
122+
return settings;
123+
}
124+
}
125+
}

Core/RustConfig.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace RustOptimizer.Core
8+
{
9+
/// <summary>
10+
/// This class handles reading and writing the game's client.cfg file,
11+
/// making it easier to load and save settings without messing up the file format.
12+
/// </summary>
13+
public class RustConfig
14+
{
15+
private Dictionary<string, string> settings = new Dictionary<string, string>();
16+
/// <summary>
17+
/// Loads the settings from the client.cfg file into the app's memory.
18+
/// It's smart enough to skip blank lines and comments.
19+
/// </summary>
20+
public void LoadSettings(string filePath)
21+
{
22+
if (File.Exists(filePath))
23+
{
24+
foreach (string line in File.ReadAllLines(filePath))
25+
{
26+
if (string.IsNullOrWhiteSpace(line) || line.StartsWith("//"))
27+
{
28+
continue;
29+
}
30+
31+
string[] parts = line.Split(new char[] { ' ' }, 2);
32+
if (parts.Length == 2)
33+
{
34+
string key = parts[0].Trim();
35+
string value = parts[1].Trim().Trim('"');
36+
settings[key] = value;
37+
}
38+
}
39+
}
40+
}
41+
/// <summary>
42+
/// Saves all the settings currently in the app's memory back to the client.cfg file.
43+
/// It also makes a quick backup of the old file just in case.
44+
/// </summary>
45+
public void SaveSettings(string filePath)
46+
{
47+
if (File.Exists(filePath))
48+
{
49+
File.Copy(filePath, filePath + ".bak", true);
50+
}
51+
52+
using (StreamWriter writer = new StreamWriter(filePath))
53+
{
54+
foreach (var kvp in settings)
55+
{
56+
writer.WriteLine($"{kvp.Key} \"{kvp.Value}\"");
57+
}
58+
}
59+
}
60+
/// <summary>
61+
/// Tries to get a specific setting from the loaded settings.
62+
/// </summary>
63+
public bool GetSetting(string key, out string value)
64+
{
65+
return settings.TryGetValue(key, out value);
66+
}
67+
/// <summary>
68+
/// Updates a setting with a new value. If the setting doesn't exist, it adds it.
69+
/// </summary>
70+
public void SetSetting(string key, string value)
71+
{
72+
settings[key] = value;
73+
}
74+
}
75+
}

0 commit comments

Comments
 (0)