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.
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.


Nun Zeige ich euch mal wie man sich in eine Mod Klassen wie Sniper, Supporter, Medic usw einbauen kann!
Das Klassensystem ist aus meiner Army Mod.


Was wir brauchen ist ein sdk für MP da ich es bis jetzt nur in einem MP einbauen konnte!
Wir nehmen die Klassen Supporter, Medic und Assaulter
Wer aber doch ein SP benutzt muss dies wahrscheinlich umstrukturieren!


Wir müssen für den MP die hl2mp_player.h/.cpp umbauen aber ihr müsst dann für SP scheinbar die hl2_player.h/.cpp umbauen!


==Daten die gebraucht werden==
Als erstes eine Auflistung was wir brauchen an Codedateien.


==Benötigte Daten und Infos==
Header:
Als erstes müssen wir alle Daten zusammen suchen die wir brauchen!
dlls/player.h


Dazu gehören:
Quellcodedateien
dlls/player.cpp


src/dlls/player.h
Das wars auch schon :)
src/dlls/player.cpp


  src/dlls/hl2mp/hl2mp_player.h
==Der Anfang==
src/dlls/hl2mp/hl2mp_player.cpp
   
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!


Aber nun müssen wir erstmal uns Gedanken machen was für Klassen wir brauchen!
Das Enum machen wir erstmal so:
enum
{
  Unassigned=0,
  Assaulter,
  Supporter,
  Medic
}


Ich werde in diesem Tutorial einen einfach Sniper, einen Supporter und einen Medic bauen!
Später brauchen wir das für die Vergleiche!
'''Der Supporter und Medic haben aber noch keine Eigenschaften wie Ammo/Leben auffüllen!!!'''


In diesem Tutorial werden wir die Klassen nur beim Sterben wechseln und die Klassen werden über Konsole festgelegt!
Jetzt werden wir uns der Klasse CBasePlayer wiedmen.
 
 
==Die hl2mp_player.h==
 
Als erstes öffnen wir die hl2mp_player.h und erstellen alle wichtigen deklarationen!
 
Damit wir die Klassen per interger zuweisen können erstellen wir ein Enum das wir gleich ganz oben erstellen(außerhalb der Klasse CHL2MP_Player)
 
Das wie folgt aussieht:
 
//Das ist für die Einteilung der Klassen!
 
enum //CLASS_
{
    Invalid=-1,
    Unassigned,
    Sniper,
    Supporter,
    Medic
};


Somit haben wir schonmal die Zahlen für die Klassen diese Brauchen wir später um die Klassen festzulegen per ConVar(Konsole!)!
Als erstes Brauchen wir 2 Variablen.
Einmal eine für die Klasse und einmal eine für die Prüfung ob die Klasse später gültig ist.


Dann machen wir am ende der Klasse CHL2MP_Player einen Public und einen Private bereich den wir dann zum schreiben unseres Klassensystems brauchen!
Dazu machen wir am ende der Klasse einfach einen public und einen private bereich:


public:
private:


Jetzt setzen wir die neuen Variablen in den Private bereich


Als erstes müssen wir noch 2 Variablen in der Klasse CHL2MP_Player setzen die unsere Klasse und die Standart Klasse speichern:
public:
private:
  //Variable die unsere Klasse speichert
  int m_iClass;
 
  //Variable zur Prüfung auf gültige Klasse
  int m_iCurrentClass;


int m_iClass;
Jetzt haben wir schonmal die Variablen aber wir setzen noch eine Standatklasse die man beim ersten Spawn bekommen soll.
int m_iDefaultClass;


Nun erstellen wir die Methoden die die eigenschaften der Klasse festelgen:
public:
private:
  int m_iClass;
  int m_iCurrentClass;
  int m_iDefaultClass;


SetClassSniper();
Zum Schluß brauchen wir noch eine Variable die prüft ob wir das erstemal spawnen.
SetClassSupporter();
SetClassMedic();


Diese Methoden sollen später nicht nur Waffen verteilen sondern auch das Leben und die Armor setzen!
public:
Aber dazu müssen wir noch extra Variablen in der Klasse einbauen also einfach 4 weitere Variablen im private bereich adden:
private:
  int m_iClass;
  int m_iCurrentClass;
  int m_iDefaultClass;
  bool m_bFirstSpawn;


//Legt Leben/Maximales Leben fest:
Da jede Klasse unterschiedliches Leben und Rüstung besitzt müssen wir noch Variablen dafür deklarieren.
int m_iHealth;
int m_iMaxHealth;


//Legt Rüstung/Maximale Rüstung fest:
Wir brauchen nur für Rüstung noch Variablen!
int m_iArmor;
Diese setzen wir alle private:
int m_iMaxArmor;


Somit haben wir schon mal die wichtigsten Deklarartionen erstellt aber wir sind noch nicht fertig!
public:
private:
  int m_iClass;
  int m_iCurrentClass;
  int m_iDefaultClass;
  bool m_bFirstSpawn;
  int m_iArmor;
  int m_iMaxArmor;


Nun brauchen wir aber noch Methoden um die Klasse/Standartklasse zuholen:


//Holt den Integer für die Klassen:
Okay das wäre alles an Variablen!
void SetiClassConVar();
int  GetiClassConVar()const;


void SetiDefaultClassConVar();
Jetzt kommen unsere Methodendeklarationen.
int  GetiDefaultClassConVar()const;


Wir brauchen noch Get Methoden um später die Werte für Leben und Armor zuholen die wir aber in den SetClas() Methoden setzen lassen!
Als erstes brauchen wir eine Methode die unsere Klasse wechselt. Diese setzen wir im public bereich.


Dazu nehmen wir:
Wir nennen sie mal void ChangeClass(int iClass):
public:
  void ChangeClass(int iClass);
private:
  int m_iClass;
  int m_iCurrentClass;
  int m_iDefaultClass;
  bool m_bFirstSpawn;
  int m_iArmor;
  int m_iMaxArmor;


//Holt das Leben für unsere klasse fest:
Jetzt brauchen wir noch eine Methode die die gültigkeit deer Klasse prüft.
int  GetClassHealth()const;
Diese nennen wir void CheckClassValue();


//Diese Methoden Holt für jede Klasse das Leben und die Armor
Diese kommt auch in den public bereich.
int GetClassMaxHealth()const;


//Holt die Armor für die Klasse Fest:
Okay jetzt brauchen wir aber noch eine Methode die Prüft ob wir das erste mal Spawnen.
int  GetClassArmor()const;
Diese taufen wir auf den Namen bool IsFirstSpawn();


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


Somit haben wir eigentlich die wichtigsten deklarationen fertig!!!
Jetzt brauchen wir aber noch die Metoden die unsere Klassen verteil und noch Methoden die unsere Klassen setzt!


Zum verteilen nehmen wir mal void SetPlayerClass();
Diese Methode setzen wir public.


==Die hl2mp_player.cpp==
Und die Klassensetzen wir per void SetClassAssaulter(); ,void SetClassSupporter(); und void SetClassMedic();.
Diese kommen wie unsere Variablen Private!


Jetzt kommen wir aber zum wichtigsten Teil des ganzen und zwar die Implementierung!


Als erstes erstellen wir ganz oben einige ConVars für die Konsole!
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.


Hier seht ihr erstmal wie ein ConVar aufgebaut ist:
Diese nennen wir void OnClassChange(); und setzen sie public!


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


Diese Methoden kommen alle public:


//TODO:Weiter machen!
public:
//Leider noch @WIP!
  void ChangeClass(int iClass);
  void CheckClassValue();
  bool IsFirstSpawn();
  void SetPlayerClass();
  void OnClassChange();
  int GetHealth();
  int GetMaxHealth();
  int GetArmor();
  int GetMaxArmor();
private:
  void SetClassAssaulter();
  void SetClassSupporter();
  void SetClassMedic();
  int m_iClass;
  int m_iCurrentClass;
  int m_iDefaultClass;
  bool m_bFirstSpawn;
  int m_iArmor;
  int m_iMaxArmor;

Revision as of 03:05, 25 June 2006

Einleitung

Hi und willkommen zum Coding Tutorial um ein Klassensystem zuerstellen. 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.

Das Klassensystem ist aus meiner Army Mod.

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 wars auch schon :)

Der Anfang

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.

Als erstes Brauchen wir 2 Variablen. Einmal eine für die Klasse und einmal eine für die Prüfung ob die Klasse später gültig ist.

Dazu machen wir am ende der Klasse einfach einen public und einen private bereich:

public:
private:

Jetzt setzen wir die neuen Variablen in den Private bereich

public:
private:
 //Variable die unsere Klasse speichert
 int m_iClass;
 
 //Variable zur Prüfung auf gültige Klasse
 int m_iCurrentClass;

Jetzt haben wir schonmal die Variablen aber wir setzen noch eine Standatklasse die man beim ersten Spawn bekommen soll.

public:
private:
 int m_iClass;
 int m_iCurrentClass;
 int m_iDefaultClass;

Zum Schluß brauchen wir noch eine Variable die prüft ob wir das erstemal spawnen.

public:
private:
 int m_iClass;
 int m_iCurrentClass;
 int m_iDefaultClass;
 bool m_bFirstSpawn;

Da jede Klasse unterschiedliches Leben und Rüstung besitzt müssen wir noch Variablen dafür deklarieren.

Wir brauchen nur für Rüstung noch Variablen! Diese setzen wir alle private:

public:
private:
 int m_iClass;
 int m_iCurrentClass;
 int m_iDefaultClass;
 bool m_bFirstSpawn;
 int m_iArmor;
 int m_iMaxArmor;


Okay das wäre alles an Variablen!

Jetzt kommen unsere Methodendeklarationen.

Als erstes brauchen wir eine Methode die unsere Klasse wechselt. Diese setzen wir im public bereich.

Wir nennen sie mal void ChangeClass(int iClass):

public:
 void ChangeClass(int iClass);
private:
 int m_iClass;
 int m_iCurrentClass;
 int m_iDefaultClass;
 bool m_bFirstSpawn;
 int m_iArmor;
 int m_iMaxArmor;

Jetzt brauchen wir noch eine Methode die die gültigkeit deer Klasse prüft. Diese nennen wir void CheckClassValue();

Diese kommt auch in den public bereich.

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

Diese setzen wir auch public.

Jetzt brauchen wir aber noch die Metoden die unsere Klassen verteil und noch Methoden die unsere Klassen setzt!

Zum verteilen nehmen wir mal void SetPlayerClass(); Diese Methode setzen wir public.

Und die Klassensetzen wir per void SetClassAssaulter(); ,void SetClassSupporter(); und void SetClassMedic();. Diese kommen wie unsere Variablen Private!


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.

Diese nennen wir void OnClassChange(); und setzen sie public!

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

Diese Methoden kommen alle public:

public:
 void ChangeClass(int iClass);
 void CheckClassValue();
 bool IsFirstSpawn();
 void SetPlayerClass();
 void OnClassChange();
 int GetHealth();
 int GetMaxHealth();
 int GetArmor();
 int GetMaxArmor();
private:
 void SetClassAssaulter(); 
 void SetClassSupporter(); 
 void SetClassMedic();
 int m_iClass;
 int m_iCurrentClass;
 int m_iDefaultClass;
 bool m_bFirstSpawn;
 int m_iArmor;
 int m_iMaxArmor;