De/Creating A Class System: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
==Einleitung==
==Einleitung==
Hi und willkommen zum Coding Tutorial um ein Klassensystem zuerstellen.
Hi und willkommen zum Coding Tutorial um ein Klassensystem zuerstellen.
Das Klassensystem ist aus meiner [http://moonlight-interactive.sponsored.by.clanserver4u.de/armymod/ Army Mod].
Das Klassensystem ist aus meiner [url=http://moonlight-interactive.sponsored.by.clanserver4u.de/armymod/ Army Mod].
Dass ist eine abgeschwächte Version mit nur 3 Klassen aber am ende könnt ihr das erweitern!
Dass ist eine abgeschwächte Version mit nur 3 Klassen aber am ende könnt ihr das erweitern!
Damit es nicht alzu schwer wird werden wir nur 3 Klassen erstellen.
Damit es nicht alzu schwer wird werden wir nur 3 Klassen erstellen.
Line 51: Line 51:




Nun werde ich euch alle Variablen die wir brauchen auflisten:
Hier nun alles was wir an Methoden deklarieren müssen und natürlich auch die Variablen:


/*
********************************************
**Klassensystem:
**Hier werden die Klassen verteilt!
**Es wird auch auf die richtigen Klassen geprüft!
********************************************
*/
public:
//Methode zum Klassenwechseln
virtual void ChangeClass(int NewClass);
virtual int GetClass();
//Initalisierung des Klassensystems!
void InitClassSystem();
//Überprüft ob wir keinen ungültigen wert setzen für die Klassenvariablen:
void CheckAllClassConVars();
//Hier wird geprüft ob wir die Klasse gewechselt haben:
void OnClassChange();
//Setzt Leben und Armor für den Spieler!
void SetClassStuff();
//Setzt den neuen wert für die Check Variable:
void SetCurrentClassValue();
//Die Klasse holen:
int GetClassValue()const;
//Die Standartklasse holen:
int GetDefaultClassValue()const;
//Schaltmethode die Klassen verteilt:
void SetPlayerClass();
//Legt das Leben für unsere klasse fest:
int  GetClassHealth()const;
//Diese Methoden setzen für jede Klasse das Leben und die Armor
int GetClassMaxHealth()const;
//Legt die Armor für die Klasse Fest:
int  GetClassArmor()const;
//Diese Methoden holen für jede Klasse das Leben und die Armor
int GetClassMaxArmor()const;
private: 
//Wichtige Prüfung auf ersten Spawn:
bool m_bFirstSpawn;
bool IsFirstSpawn();
//Welche Klasse haben wir(enum):
int m_iClass;
//Prüft ob wir die Klasse gewechselt haben:
int m_iCurrentClass;
//Hier setzen wir die Standartklasse!
int m_iDefaultClass;
//Waffen, Leben und Armor der Klassen verteilen:
void SetClassDefault();
void SetClassGroundUnit();
void SetClassSupportUnit();
void SetClassMedic();
/*
********************************************
**Spielereigenschaften:
**Hier werden Eigenschaften wie Speed, Condition
**und maximale Klassen festgelegt!
********************************************
*/
//Integer für Rüstung:
int m_iArmor;
int m_iMaxArmor;
Nun kommen wir zur Erklärung wofür wir das alles brauchen.
Wir fangen oben an und arbeiten uns runter.
==public==
//Methode zum Klassenwechseln
virtual void ChangeClass(int NewClass);
Diese Methode brauchen wir damit der Client(Spieler) per Menu/Konsole seine Klasse wechselt.
virtual int GetClass();
Brauchen wir wenn wir noch sachen wie Ammo, Leben und Rüstungsincrementierung für den Supporter/Medic einbauen wollen.
//Initalisierung des Klassensystems!
void InitClassSystem();
Diese Methode soll das Klassensystem aus der Spawn Methode von CBasePlayer starten.
Damir werden die Methoden für die Klassenverteilung usw aufgerufen.
Bei der Implementierung seit ihr dann schlauer.
//Überprüft ob wir keinen ungültigen wert setzen für die Klassenvariablen:
void CheckAllClassConVars();
Diese Methode prüft ob wir einen gültigen Wert eingegeben haben!
Falls wir das nicht Prüfen würden dann würde eure Mod crashen.
Falls der Wert nicht stim dann müsst ihr einen Wert für die Klasse setzen!
//Hier wird geprüft ob wir die Klasse gewechselt haben:
void OnClassChange();
Diese Methode wird in der Thinkmethode gebraucht.
Falls ihr die Klasse wechselt werdet ihr gekillt und einen Punkt sonst würdet ihr Punktabzug bekommen.
//Setzt Leben und Armor für den Spieler!
void SetClassStuff();
Diese Methode setzt für jede Klasse den Wert für das Leben, Maximal Leben und Rüstung.
Leider wird die Rüstung über den Code der Recharger festgelegt den müsst ihr ändern.
//Setzt den neuen wert für die Check Variable:
void SetCurrentClassValue();
Diese Methode ändert den Wert der CheckVariable für die Klassen sonst würde man immer wieder sterben!
//Die Klasse holen:
int GetClassValue()const;
Diese Methode holt uns den Wert der Klasse die wir haben.
//Die Standartklasse holen:
int GetDefaultClassValue()const;
Diese Methode holt Vom Server die Standartklasse damit man im Falle einer ungültigen Klasse diese bekommt.
//Schaltmethode die Klassen verteilt:
void SetPlayerClass();
Diese Methode ist die Steuerzentrale unseres Klassensystems.
Dort wird mit dem Wert der Klassenvariable alles gelenkt. Von der Waffen und Lebensverteilung bis zum setzen des Spielermodels(das müsst ihr leider noch machen!)
//Legt das Leben für unsere klasse fest:
int  GetClassHealth()const;
Diese Methode holt das Leben das ihr im Moment habt.
//Diese Methoden setzen für jede Klasse das Leben und die Armor
int GetClassMaxHealth()const;
Die Methode holt das Maximale Leben das eure Klasse haben kann.
//Legt die Armor für die Klasse Fest:
int  GetClassArmor()const;
Diese Methode holt euch die Rüstung die ihr im Momen habt.
//Diese Methoden holen für jede Klasse das Leben und die Armor
int GetClassMaxArmor()const;


Diese Methode holt die Maximale Rüstung eurer Klasse(Ist leider noch unbrauchbar wegen dem Recharger Code!)


Okay das wäre alles an Variablen!
==private==


Jetzt kommen unsere Methodendeklarationen.
//Wichtige Prüfung auf ersten Spawn:
bool m_bFirstSpawn;


Als erstes brauchen wir eine Methode die unsere Klasse wechselt. Diese setzen wir im public bereich.
Diese Variable ist für die Abfrag für den ersten Spawn nötig.


Wir nennen sie mal void ChangeClass(int iClass):
bool IsFirstSpawn();


Jetzt brauchen wir noch eine Methode die die gültigkeit deer Klasse prüft.
Diese Methode gibt uns auskunft ob wir das erstemal gespawnt sind.
Diese nennen wir void CheckClassValue();


Diese kommt auch in den public bereich.
//Welche Klasse haben wir(enum):
int m_iClass;


Okay jetzt brauchen wir aber noch eine Methode die Prüft ob wir das erste mal Spawnen.
Diese Variable speichert den Wert unserer Klasse:
Diese taufen wir auf den Namen bool IsFirstSpawn();


Diese setzen wir auch public.
//Prüft ob wir die Klasse gewechselt haben:
int m_iCurrentClass;


Jetzt brauchen wir aber noch die Metoden die unsere Klassen verteil und noch Methoden die unsere Klassen setzt!
Das ist die Prüfungsvariable die den Wert unserer Momentanen Klasse enthält.
Der Wert wird dann geändert wqenn wie die Klasse wechseln.


Zum verteilen nehmen wir mal void SetPlayerClass();
//Hier setzen wir die Standartklasse!
Diese Methode setzen wir public.
int m_iDefaultClass;
Diese Variable holt die Klasse des Servers und ist gleichzeitig die erste Klasse die man beim ersten spawn
bekommt


Und die Klassensetzen wir per void SetClassAssaulter(); ,void SetClassSupporter(); und void SetClassMedic();.
//Waffen, Leben und Armor der Klassen verteilen:
Diese kommen wie unsere Variablen Private!
void SetClassDefault();
void SetClassGroundUnit();
void SetClassSupportUnit();
void SetClassMedic();


Das sind unsere Methoden zum verteilen alle wichtigen Sachen einer Klasse.
Also Leben, Maximalleben, Rüstung, Maximalrüstung, Waffen usw.


Jetzt brauchen wir noch eine Methode die uns beim Wechsel der Klasse tötet und uns einen Punkt gibt da wir sonst als Spieler einen Minuspunkt bekommen.
//Integer für Rüstung:
int m_iArmor;
int m_iMaxArmor;


Diese nennen wir void OnClassChange(); und setzen sie public!
Das sind unsere Variablen für Rüstung und Maximalrüstung.


Da jede Klasse unterschiedliche Rüstung und Leben hat müssen wir noch Funktionen zum holen des Lebens und der Armor machen!
Jetzt wisst ihr was wir alles brauchen und wieso.
Dazu nehmen wir int GetHealth(), int GetMaxHealth(), int GetArmor(), int GetMaxArmor();


Diese Methoden kommen alle public.
Nun kommen wir zum Teil in dem wir alles Einbauen.


Nun sollte eure Deklaration am ende der Klasse so aussehen:
==Die Implementation==
//@WIP

Revision as of 03:43, 25 June 2006

Einleitung

Hi und willkommen zum Coding Tutorial um ein Klassensystem zuerstellen. Das Klassensystem ist aus meiner [url=http://moonlight-interactive.sponsored.by.clanserver4u.de/armymod/ Army Mod]. Dass ist eine abgeschwächte Version mit nur 3 Klassen aber am ende könnt ihr das erweitern! Damit es nicht alzu schwer wird werden wir nur 3 Klassen erstellen. Sollten wir aber eine Klasse wechseln dann werden wir getötet und bekommen beim Spawn unsere Klasse. Aber der Server bekommt eine Standartklasse die jeder beim ersten Spawnen bekommt :)

Wir nehmen die Klassen Supporter, Medic und Assaulter


Daten die gebraucht werden

Als erstes eine Auflistung was wir brauchen an Codedateien.

Header:

dlls/player.h

Quellcodedateien

dlls/player.cpp


Das Klassensystem wird zu 100% Serverseitig sein aber der Client kann die Klassenwechseln ;)

Das wars auch schon :)

Die Deklarationen

Als erstes müssen wir uns an die Deklarationen machen. Was wir brauchen sind einige Variablen und einige Funktionen. Aber als erstes werden wir ein Enum erstellen das die Werte unserer Klassen enthält!

Das Enum machen wir erstmal so:

enum
{
 Unassigned=0,
 Assaulter,
 Supporter,
 Medic
}

Später brauchen wir das für die Vergleiche!

Jetzt werden wir uns der Klasse CBasePlayer wiedmen.

Zum beginn werden wir einen neuen public und einen neuen Private bereich am ende von CBasePlayer adden. Dort schreiben wir den gesamten Code für das Klassensystem rein!

//Die neuen Bereiche für das Klassensystem!
public:
private:


Hier nun alles was wir an Methoden deklarieren müssen und natürlich auch die Variablen:

/*
********************************************
**Klassensystem:
**Hier werden die Klassen verteilt!
**Es wird auch auf die richtigen Klassen geprüft!
********************************************
*/
public:
//Methode zum Klassenwechseln
virtual void ChangeClass(int NewClass); 
virtual int GetClass();
//Initalisierung des Klassensystems!
void InitClassSystem();
//Überprüft ob wir keinen ungültigen wert setzen für die Klassenvariablen:
void CheckAllClassConVars();
//Hier wird geprüft ob wir die Klasse gewechselt haben:
void OnClassChange();
//Setzt Leben und Armor für den Spieler!
void SetClassStuff();
//Setzt den neuen wert für die Check Variable:
void SetCurrentClassValue();
//Die Klasse holen:
int GetClassValue()const;
//Die Standartklasse holen:
int GetDefaultClassValue()const;
//Schaltmethode die Klassen verteilt:
void SetPlayerClass();
//Legt das Leben für unsere klasse fest:
int  GetClassHealth()const;
//Diese Methoden setzen für jede Klasse das Leben und die Armor
int GetClassMaxHealth()const;
//Legt die Armor für die Klasse Fest:
int  GetClassArmor()const;
//Diese Methoden holen für jede Klasse das Leben und die Armor
int GetClassMaxArmor()const;
private:  
//Wichtige Prüfung auf ersten Spawn:
bool m_bFirstSpawn;
bool IsFirstSpawn();
//Welche Klasse haben wir(enum):
int m_iClass;
//Prüft ob wir die Klasse gewechselt haben:
int m_iCurrentClass;
//Hier setzen wir die Standartklasse!
int m_iDefaultClass;
//Waffen, Leben und Armor der Klassen verteilen:
void SetClassDefault();
void SetClassGroundUnit();
void SetClassSupportUnit();
void SetClassMedic();
/*
********************************************
**Spielereigenschaften:
**Hier werden Eigenschaften wie Speed, Condition
**und maximale Klassen festgelegt!
********************************************
*/
//Integer für Rüstung:
int m_iArmor;
int m_iMaxArmor;


Nun kommen wir zur Erklärung wofür wir das alles brauchen. Wir fangen oben an und arbeiten uns runter.

public

//Methode zum Klassenwechseln
virtual void ChangeClass(int NewClass); 

Diese Methode brauchen wir damit der Client(Spieler) per Menu/Konsole seine Klasse wechselt.

virtual int GetClass();

Brauchen wir wenn wir noch sachen wie Ammo, Leben und Rüstungsincrementierung für den Supporter/Medic einbauen wollen.

//Initalisierung des Klassensystems!
void InitClassSystem();

Diese Methode soll das Klassensystem aus der Spawn Methode von CBasePlayer starten. Damir werden die Methoden für die Klassenverteilung usw aufgerufen. Bei der Implementierung seit ihr dann schlauer.

//Überprüft ob wir keinen ungültigen wert setzen für die Klassenvariablen:
void CheckAllClassConVars();

Diese Methode prüft ob wir einen gültigen Wert eingegeben haben! Falls wir das nicht Prüfen würden dann würde eure Mod crashen. Falls der Wert nicht stim dann müsst ihr einen Wert für die Klasse setzen!

//Hier wird geprüft ob wir die Klasse gewechselt haben:
void OnClassChange();

Diese Methode wird in der Thinkmethode gebraucht. Falls ihr die Klasse wechselt werdet ihr gekillt und einen Punkt sonst würdet ihr Punktabzug bekommen.

//Setzt Leben und Armor für den Spieler!
void SetClassStuff();

Diese Methode setzt für jede Klasse den Wert für das Leben, Maximal Leben und Rüstung. Leider wird die Rüstung über den Code der Recharger festgelegt den müsst ihr ändern.

//Setzt den neuen wert für die Check Variable:
void SetCurrentClassValue();

Diese Methode ändert den Wert der CheckVariable für die Klassen sonst würde man immer wieder sterben!

//Die Klasse holen:
int GetClassValue()const;

Diese Methode holt uns den Wert der Klasse die wir haben.

//Die Standartklasse holen:
int GetDefaultClassValue()const;

Diese Methode holt Vom Server die Standartklasse damit man im Falle einer ungültigen Klasse diese bekommt.

//Schaltmethode die Klassen verteilt:
void SetPlayerClass();

Diese Methode ist die Steuerzentrale unseres Klassensystems. Dort wird mit dem Wert der Klassenvariable alles gelenkt. Von der Waffen und Lebensverteilung bis zum setzen des Spielermodels(das müsst ihr leider noch machen!)


//Legt das Leben für unsere klasse fest:
int  GetClassHealth()const;

Diese Methode holt das Leben das ihr im Moment habt.

//Diese Methoden setzen für jede Klasse das Leben und die Armor
int GetClassMaxHealth()const;

Die Methode holt das Maximale Leben das eure Klasse haben kann.

//Legt die Armor für die Klasse Fest:
int  GetClassArmor()const;

Diese Methode holt euch die Rüstung die ihr im Momen habt.

//Diese Methoden holen für jede Klasse das Leben und die Armor
int GetClassMaxArmor()const;

Diese Methode holt die Maximale Rüstung eurer Klasse(Ist leider noch unbrauchbar wegen dem Recharger Code!)

private

//Wichtige Prüfung auf ersten Spawn:
bool m_bFirstSpawn;

Diese Variable ist für die Abfrag für den ersten Spawn nötig.

bool IsFirstSpawn();

Diese Methode gibt uns auskunft ob wir das erstemal gespawnt sind.

//Welche Klasse haben wir(enum):
int m_iClass;

Diese Variable speichert den Wert unserer Klasse:

//Prüft ob wir die Klasse gewechselt haben:
int m_iCurrentClass;

Das ist die Prüfungsvariable die den Wert unserer Momentanen Klasse enthält. Der Wert wird dann geändert wqenn wie die Klasse wechseln.

//Hier setzen wir die Standartklasse!
int m_iDefaultClass;

Diese Variable holt die Klasse des Servers und ist gleichzeitig die erste Klasse die man beim ersten spawn bekommt

//Waffen, Leben und Armor der Klassen verteilen:
void SetClassDefault();
void SetClassGroundUnit();
void SetClassSupportUnit();
void SetClassMedic();

Das sind unsere Methoden zum verteilen alle wichtigen Sachen einer Klasse. Also Leben, Maximalleben, Rüstung, Maximalrüstung, Waffen usw.

//Integer für Rüstung:
int m_iArmor;
int m_iMaxArmor;

Das sind unsere Variablen für Rüstung und Maximalrüstung.

Jetzt wisst ihr was wir alles brauchen und wieso.

Nun kommen wir zum Teil in dem wir alles Einbauen.

Die Implementation

//@WIP