De/Creating A Class System: Difference between revisions
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: | ||
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: | |||
Diese | |||
//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! | |||
Diese | 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 |
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