Archief - [ALG] Het maken van een game launcher

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

agent #2

Legacy Member
Hallo,

Ik kwam vanmorgen op het idee om een gamelauncher te maken voor Call of Duty 2. Ik weet dat dit al bestaat, maar ik zou het ook zelf eens willen maken. :)

Voor de mensen die geen gamelauncher kennen, het is heel simpel. Je geeft het IP adres en het paswoord in een textbox en daarna klik je op een knop waarna CoD2 start en connect met dat IP adres. Een ping mogelijkheid zou ook handig zijn.

Ik heb daarstraks al wat zitten googlen naar dit onderwerp maar ik heb zelf bitterweinig gevonden. Als taal zou ik java of c# nemen omdat ik ervaring heb met deze 2.

Het concept lijkt misschien simpel, maar ik vraag me af of de uitwerking ervan haalbaar is.
Iemand enige hits of tips?

Groeten

Tyfius

Legacy Member
Tuurlijk dat.
Ge kunt normaal aan de shortcut ook parameters meegeven (denk maar aan 't geen da ge moet adden om cheats te enablen bvb). Een van die parameters zal connect zijn. Dus gewoon uw .exe oproepen en die parameter meegeven should do the trick.

.Acku.

Legacy Member
Inderdaad, niet meer dan dat. Als je wilt dat het snel opstart zou ik C# nemen, Java's JVM weegt te zwaar voor zo een kleine app.

agent #2

Legacy Member
Bon ik ben al wat bezig geweest om CoD2 al gewoon te launchen (zonder parameters.
Ik heb deze code gebruikt:
Code:
string launchPad = "E:\\Program Files\\Activision\\Call of Duty 2\\CoD2MP_s.exe";
Process myProcess = new Process();
ProcessStartInfo myStartInfo = new ProcessStartInfo(launchPad);
myProcess.StartInfo = myStartInfo;
myProcess.Start();

Als ik dit stukje uitvoer krijg ik een win_error die als volgt gaat:
"Error during initialisation: couldn't load default_localize_mp.cfg. Make sure Call of Duty is run from the correct folder.

Daarna verschijnt het consolevenster van cod2:
Code:
CoD2 MP 1.2 build win-x86 Mar 30 2006
----- FS_Startup -----
Current language: english
Current search path:
c:\My Documents\Visual Studio 2005\Projects\Gamelauncher\Gamelauncher\bin\Debug/main
c:\My Documents\Visual Studio 2005\Projects\Gamelauncher\Gamelauncher\bin\Debug/raw
c:\My Documents\Visual Studio 2005\Projects\Gamelauncher\Gamelauncher\bin\Debug/raw_shared
c:\My Documents\Visual Studio 2005\Projects\Gamelauncher\Gamelauncher\bin\Debug/devraw
c:\My Documents\Visual Studio 2005\Projects\Gamelauncher\Gamelauncher\bin\Debug/devraw_shared

File Handles:
----------------------
0 files in iwd files
ERROR: No languages available because no localized assets were found
Error during initialization:
Couldn't load default_localize_mp.cfg.  Make sure Call of Duty is run from the correct folder.

De configfile vindt hij niet. Ik heb dit ook getest met CoD1 en Mohaa telkens met dezelfde fout. Iemand enig idee hoe ik dit kan oplossen?

Tyfius

Legacy Member
In dat pad naar die .exe, moeten daar telkens \\ staan ?
Ik heb atm geen windows in de buurt om iets gelijkaardigs te testen.

agent #2

Legacy Member
Ja, want in een string hetgeen na een "\" staat geeft hij letterlijk weer.

Ik werk in Visual studio met c# voor de duidelijkheid ;).

.Acku.

Legacy Member
Ge gaat uw working directory moeten veranderen naar daar, iets als PWD

Tyfius

Legacy Member
Code:
Process myProcess = new Process();
Directory.SetCurrentDirectory("F:\\Games\\Wolfenstein - Enemy Territory");
ProcessStartInfo startInfo = new ProcessStartInfo("ET.exe");
myProcess.StartInfo = startInfo;
myProcess.Start();

Werkt zonder probleem. Je kan in het directory pad ook forward slashes gebruiken. Eigen voorkeur, maar werken hier toch.

Tyfius

Legacy Member
StartInfo(string filename, string args) is mogelijk, of appenden aan uwe string van uwe filename, ma 'k weet niet of dat gaat werken, 't zou wel moeten.

@Acku: ja, maar waar ziede gij ergens rare code en ne setter nodig ?

C# werkt ook op de volgende manier:
Code:
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; } // value is een keyword, bevat dus de meegeleverde parameter.
}

Object.Name = "mekker";
Console.WriteLine("Name: {0}", Object.Name);

.Acku.

Legacy Member
PHP:
public void locateBrain(String name) {
locator = null;
locator.locate(name);
}

gniffel

agent #2

Legacy Member
Tyfius zei:
StartInfo(string filename, string args) is mogelijk, of appenden aan uwe string van uwe filename, ma 'k weet niet of dat gaat werken, 't zou wel moeten.

@Acku: ja, maar waar ziede gij ergens rare code en ne setter nodig ?

Hij bedoelt waarschijnlijk die SetCurrentDirectory.

Voor die Directory.SetCurrentDirectory moet je daar een speciale 'import' voor doen want dat herkent hij niet hier.

agent #2

Legacy Member
Oké, ik kan al connecten met een server.

Nu zit ik met het volgende probleem. Die directorystring kan verschillend zijn van pc tot pc. Ik zou het als volgt willen oplossen. De eerste keer dat de gebruiker het programma opent, zet hij via een DirectorySearcher zijn directory goed, maar telkens als hij het programma afsluit is dat dan weg. Iemand een idee hoe ik die string zou kunnen opslaan?

killgore

Legacy Member
dat staat in het registry :).

Ik heb zelf ooit een game-launcher voor mohaa gemaakt en heb dat zo opgelost.

Tyfius

Legacy Member
Gewoon een xml bestand gebruiken, lijkt mij de beste oplossing.
Kan je ook extra opties bijhouden eventueel, bvb het laden van een config file.
.NET biedt verschillende mogelijkheiden om XML files uit te lezen en weg te schrijven.

killgore

Legacy Member
Registry is met de Registry class (System.Object) even simpel aanspreekbaar hoor :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan