Da ich für mein Spiel "Planets - Unification" (ein einfaches RTS) einen Script brauchte, mit dem ich rel. einfach
und unabhängig einen Technologiebaum auslesen und auswerten kann, hab ich mir den kurzerhand selbst geschrieben.

Er ist noch nicht ganz fertig, z.Z. ist es mehr eine Art InGame Hilfe oder sowas.

Naja aufjedenfall wollte ich das Ding mit euch teilen, weil ich denke, dass nicht nur ich sowas brauchen kann.

Ich wollte den Script möglichst modular haben, damit ich ihn auch in späteren Programmen wieder einsetzen kann.
Das ist mir recht gut gelungen denke ich.

Code:
 

/*
* Techtree.wdl - Version 0.2
*
* Modul zum auslesen von Techtreeinformationen oder InGame-Tooltiphilfen aus einer Textdatei
*
* Vorgehensweise zum Einbinden:
* 1. Einbinden per include ( include<techtree.wdl>; )
* 2. über setTechFilename("DATEINAME") den Dateinamen des Techtrees einstellen (default:techtree.txt)
* 3. per initTechtree("TRENNUNGSOPERATOR"); den techtree initialisieren ( empfohlen: ";")
* 4. einfach über die get* Funktionen die Informationen als Strings auslesen und weiterverarbeiten
*
* Beispiel für eine techtree.txt mit 2 einträgen :
* Bergbau;300;1000;2000;3000;Erlaubt den Bau von:;Erzmine,Deuteriummine,;Kristallmine
* Laser;300;150;1111;3333;Wird benötigt um;Laserwaffen und lasergesteuerte;Raketen herzustellen.
*
* Syntax einer Zeile (hinter der letzen Info NUR Enter drücken,kein SEMIKOLON!):
* NAME;BAUZEIT;KOSTEN_ERZ;KOSTEN_KRISTALL;KOSTEN_DEUTERIUM;BESCHREIBUNG1;BESCHREIBUNG2;BESCHREIBUNG3
*
* Für die Benutzung und Veränderung sind keine Credits erforderlich. Viel Spaß damit !
*
*/

var techtreefile; //Handle für die Techtreedatei
string techfilename = "techtree.txt"; //Name der Datei in dem die Techinformationen gespeichert sind

var zaehler=1; //Zeilenzähler

// Deklaration der benötigten Strings
string techName;
string techKostenErz;
string techKostenKristall;
string techKostenDeuterium;
string techZeit;
string techBeschreibung;

function initTechtree(seperator) //setzt z.Z. nur das Trennungszeichen neu
{
str_cpy(delimit_str,seperator);
}

function setTechFilename(newname) //erlaubt das setzen eines neuen Dateinamens für die Technologiedatei
{
str_cpy(techfilename,newname);
}

function getTechName(Stelle) //holt den Namen der Technologie
{
Stelle = 1+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techName);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techName);
}

function getTechZeit(Stelle) //holt die Bau-/Forschungszeit der Technologie
{
Stelle = 2+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techZeit);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techZeit);
}

// Die folgenden 3 Funktionen holen den jeweiligen Rohstoffbedarf (Erz,Kristall,Deuterium) zum Bauen/Forschen

function getTechKostenErz(Stelle)
{
Stelle = 3+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenErz);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenErz);
}

function getTechKostenKristall(Stelle)
{

Stelle = 4+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenKristall);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenKristall);
}

function getTechKostenDeuterium(Stelle)
{
Stelle = 5+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techKostenDeuterium);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techKostenDeuterium);
}

// Holt die jeweilige Zeile (von bis zu 3), die Informationen über die Technologie enthalten kann.

function getTechBeschreibung(Stelle,Zeile)
{
if((Zeile>=4)||(Zeile<=0))
{return ("");
}
else
{
Stelle = (Zeile+5)+((Stelle-1)*8);
techtreefile = file_open_read(techFileName);
while(zaehler<=Stelle)
{
file_str_read(techtreefile, techBeschreibung);
zaehler+=1;
}
file_close(techtreefile);
zaehler=1;
return(techBeschreibung);
}
}




In einer späteren Version werden auch Funktionen kommen, mit denen man direkt überprüfen kann ob man
eine bestimmte Technologie erforschen kann oder nicht. Also sozusagen eine Prüfung der Abhängigkeiten
zwischen den Technologien.

Falls es eine neue Version gibt, wird die selbstverständlich auch contributed.

Für C&C bin ich immer offen

Last edited by Aron; 11/20/05 21:28.

Hast du von Durchblick keine Spur,zeichne eine Hilfsfigur!