What this launcher has the options already implemented for?
- Delete Cache Folder(working 100%)
- Install Client Button
- Version button
- Update Checker
- Reload Cache
- Play Button
- Hidden Facebook(or other website) button being the credits on the bottom of the launcher.
- exit button on top right
- ESC key closes the launcher.
- works for enUS, enGB, deDE, frFR, ruRU.
no its probably not the most efficient way to program it but it works for all those out there that don't know how to produce their own launcher.
now i will walk you through customizing this launcher to your server.
1. Download/Install Visual Studios C#(i suggest 2010 but thats just me) here is a link to their download page: Download | Microsoft Visual Studio 2012
- note that it is free after the trial you can register FOR FREE and they give you a activation key for it.
2. Now that you have downloaded VS C# unzip this project in the project folder documents/visual studio/project(yes i know the name is for CWoW but thats not important your users will never see that part) this .rar also has a client .exe inside to extract a entire 4.0.6 client:]rapidshare.com/files/3308484420/Courageous%20Launcher.rar
3: now open Visual Studios C# navigate to the Projects folder if it didn't take you there already then open the Courageous Launcher SLN inside the Courageous Launcher Folder.
4: Ok first we're going to go ahead and edit the visual part of it(i'm just walking through the text and background other than that you're on your own)
4.A: on the right in your Solution Explorer(if its not open press Ctrl+W,S) now open the Form1.cs
4.B: It will bring up what the launcher itself looks like, now first thing we need to do is change the Label for the launcher on the top, click on the label Courageous Launcher in red on the top.
4.C: now you need your properties window open if it is not already open press Ctrl+W,P. now scroll down on the properties window until your see the field "Text" with the text being "Courageous Launcher" just double click the text "Courageous Launcher" and type in what you want it to be then click on the launcher picture off to the left and it should change.
4.D: now you need to change the text on the bottom so as not to advertise my server on your launcher(unless you want to which i would be grateful) so click on the small red text on the bottom of the launcher and do the same thing as in 4.C
5: now to change the hidden link button so it doesn't go to my servers facebook page, again if you want you can keep it as is. double click on the text on the bottom of the launcher where you just edited it should open up a new screen for you called Form1.cs(the one without the [Design].
5.A: now your cursor should be blinking on the front of this line
Code:
string facebook = "https://www.facebook.com/CourageousWoW";
what you need to do is change the url to whatever you want it to be.
6: ok now click on the form1.cs [design] tab towards the top and now you have to think of a few things if you want them or not.
6.1: does your server have custom patches and do you need the reload patch button?
-if not click once on the reload patch button and push your Delete button on your keyboard.
-if you do follow 6.1.A(only supporting MPQ downloads)
6.1.A: double click on the reload patch button and it will put your cursor in front of this line
Code:
string path, enUS, enGB, deDE, frFR, ruRU;
6.1.B: now you need to have all of your MPQ's being hosted off of a website or something that your players can download it from[if you do something like rapidshare or something like that then they will have to deal with the website but if its just in the root folder of your website with full access rights then then they won't need to do anything but click the button.
6.1.C: now you should see this below
Code:
if (Directory.Exists(string.Format(enUS + "\\Data\\enUS")))//this if checks for where the realmlist is
{
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(enGB + "\\Data\\enGB")))//this if checks for where the realmlist is
{
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(deDE + "\\Data\\deDE")))//this if checks for where the realmlist is
{
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(frFR + "\\Data\\frFR")))//this if checks for where the realmlist is
{
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(ruRU + "\\Data\\ruRU")))//this if checks for where the realmlist is
{
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path");//this line is what downloads the patches and puts it in the correct directories
}
you need to change this to
Code:
if (Directory.Exists(string.Format(enUS + "\\Data\\enUS")))//this if checks for where the realmlist is
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe Data"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(enGB + "\\Data\\enGB")))//this if checks for where the realmlist is
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(deDE + "\\Data\\deDE")))//this if checks for where the realmlist is
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"),path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(frFR + "\\Data\\frFR")))//this if checks for where the realmlist is
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
else if (Directory.Exists(string.Format(ruRU + "\\Data\\ruRU")))//this if checks for where the realmlist is
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
}
now you need to replace the placelinkhereforthe patch.txt to the url for the .mpq, if you have multiple MPQ's for them to download then copy and paste this
Code:
webClient.DownloadFileAsync(new Uri("placelinkhereforthe patch.txt"), path + "\\Data\\");//this line is what downloads the patches and puts it in the correct directories
and make sure the url for each MPQ you needed is added in every single if else statement. and now the relaod patch button is done.
7: now for the download client version i will update this at a later time but right now it is not linked to a folder if you wish to link it to a client your providing(which i advise cause you can put the client + patches in a .exe that extracts them all for the player. then go back to the form1.cs [design] tab and double click the download client button.
7.1 this code
Code:
{
string path, url;
url = "fakewebsite.com";
path = Path.GetDirectoryName(Application.ExecutablePath);
MessageBox.Show("Sorry but this button is disabled until a later version. Thanks.");//this is the line that sends the completed message to the user
//WebClient webClient = new WebClient();
//webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Complete);//this requests for a completed message to be sent once file is completed
//webClient.DownloadFileAsync(new Uri(url), path");//this line is what downloads the 4.0.6 folder and puts it in the current directory
}
needs to be changed this this:
Code:
{
string path, url;
url = "fakewebsite.com";
path = Path.GetDirectoryName(Application.ExecutablePath);
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Complete);//this requests for a completed message to be sent once file is completed
webClient.DownloadFileAsync(new Uri(url), path");//this line is what downloads the 4.0.6 folder and puts it in the current directory
}
and you need to change url = "fakewebsite.com"; to be your website instead of fakewebsite.com and wala that is now connected.
7.2: to make your entire client folder into a .exe to be downloaded and then extracted by users download/install 7-zip Download as well as provided wow.exe so you have a base folder already to be used with a cracked wow.exe inside of it(fresh has nothing but addons inside of the folder + cracked wow to read patches(mpqs))
7.3 now that you have both of those double click the wow.exe and extract the folder to a specified place.
7.4 add any mpq's or anything you need your players to have into this folder DO NOTHING ELSE DO NOT RUN THE WOW.EXE THIS IS IMPORTANT.
7.5 right click the wow folder that contains the wow.exe + data folder including your custom mpq's and click 7-zip "add to archive" now name it what you want it to be and off to the right click on the check box for "Create SFX Archive" then click ok
7.6 you now have a client folder.exe that extracts all the needed files. when your user runs wow for the first time it will take awhile to kick in and get to the login screen let them know to just be patient the first few times that they run it because it needs to initialize alot of imformation as well as download extra imformation that is needed.
8: now for the version label on the bottom left. to change it so that it say a different version number off on the right where your solution manager is right click Assemblyinfo.cs and click open.
8.1 scroll to the bottom and you should see this code
Code:
[assembly: AssemblyVersion("1.6")]
[assembly: AssemblyFileVersion("1.6")]
[assembly: NeutralResourcesLanguageAttribute("en-US")]
change the versions to the correct version of your launcher. then you can scroll back up to this code
Code:
[assembly: AssemblyTitle("Courageous Launcher")]
[assembly: AssemblyDescription("Launcher for WoW Private Servers, Open source customizeable for every server.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Courageous WoW")]
[assembly: AssemblyProduct("Courageous Launcher")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
and change it to whatever you want it to be.
9: now that your version button is changed you need to make the update checker work properly. so go back to form1.cs [design] and double click update checker. you will see this
Code:
private void label8_Click(object sender, EventArgs e)
{
MessageBox.Show("Currently Disabled until website is up");
/*
string downloadUrl = "";
Version newVersion = null;
string aboutUpdate = "";
string xmlUrl = "";
XmlTextReader reader = null;
try
{
reader = new XmlTextReader(xmlUrl);
reader.MoveToContent();
string elementName = "";
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "appinfo"))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
elementName = reader.Name;
}
else
{
if ((reader.NodeType == XmlNodeType.Text) && (reader.HasValue))
switch (elementName)
{
case "version":
newVersion = new Version(reader.Value);
break;
case "url":
downloadUrl = reader.Value;
break;
case "about":
aboutUpdate = reader.Value;
break;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Environment.Exit(1);
}
finally
{
if (reader != null)
reader.Close();
}
Version applicationVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
if (applicationVersion.CompareTo(newVersion) < 0)
{
string str = String.Format("New version found!\nYour version: {0}.\nNewest version: {1}. \nAdded in this version: {2}. ", applicationVersion, newVersion, aboutUpdate);
if (DialogResult.No != MessageBox.Show(str + "\nWould you like to download this update?", "Check for updates", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
try
{
Process.Start(downloadUrl);
}
catch { }
return;
}
else
{
;
}
}
else
{
MessageBox.Show("Your version: " + applicationVersion + " is up to date.", "Check for Updates", MessageBoxButtons.OK, MessageBoxIcon.None);
}*/
you need to remove
Code:
MessageBox.Show("Currently Disabled until website is up");
/*
and the */ from the very end of that section of code. then you need to change this
Code:
string downloadUrl = "";
so that it is like this(again from your root directory in your web hosting ftp)
Code:
string downloadUrl = "xmldownloadlinkhere.xml";
9.1 now that the code itself is fixed you need to make sure your xml on your root of your website is formatted corretly this is exactly how it should be
Code:
<?xml version="1.0" encoding="utf-8" ?>
<appinfo>
<version>1.5.0.0</version>
<url>http://www.fiercemodder.com/Fierce%20Modder/v1.5.rar</url>
<about>Remapped UI. Get License file from me</about>
</appinfo>
you need to change the <version>1.5.0.0</version> to the newest version of your launcher, the <about>is what the update is about</about> the <url>is for the updated launcher download url>
10: now you need to edit is the play button. go to form1.cs [design] double click the play button.
10.1: you need to switch yourserveriphere
Code:
serverdomain = "yourserveriphere";
to the correct server ip to connect to the server.
10.2 if your server uses a custom.exe that is distributed to your players and named something other than wow.exe like eternion_13635.exe then you also need to change wow.exe
Code:
wow += "\\wow.exe";
to
Code:
wow += "\\eternion_13635.exe";
11: now to edit the background image of the launcher go to the form1.cs [design] tab and click in the middle of the launcher now on the right where your properties box is scroll up/down until you find the BackgroundImage which should say System.Drawing.Bitmap and click on System.Drawing.Bitmap and then click the small box to the right that appears.
11.1: click import on the new screen and browse and find your new background image.
12: to change the icon of the launcher right click on "Courageous Launcher" in the Solution Explorer and click properties. a tab named Courageous Launcher should appear with a few new tabs on the left.
12.1: click on Applications tab if its not already chosen and then look down to the icon: with favicon.ico in the text box click on the box to the right of this and browse and choose your new icon.(MUST BE A .ICO) but you can find a converter for it online easily.
13: push F5 to debug and compile the launcher and it should change everything then close the launcher that pops up and close visual studios C# and navigate to the projects folder/Courageous Launcher/Courageous Launcher/Bin/Debug and there is your .exe to distribute to your players.
meh that was a ton of typing but there you guys go for those that don't know how to create their own launcher. it's not optimized as best as possible but it works. also first release here, figured i'd stop being a leecher and release something and this is the only thing i have currently thats 100% mine so there you guys go. hope it helps at least some people.