ok, das erklärt einiges
So, ich hab mir dann auch mal die Freiheit genommen deinen Code mal nach meinem C++ Wissen zu beackert....Ich hoffe, dass der Code auch im Netzwerk funzt, denn ich konnte ihn bis jetzt nur alleine ausprobieren (bin außerdem noch nicht so ganz conform mit dem hl2code)... Das is dabei rausgekommen - hab deinen Code recht stark gekürzt und die DefaultClass rausgenommen :
In die player.h
kommt irgendwo klar das enum :
// c++
enum
{
Unassigned = 0,
Assaulter = 1,
Supporter = 2,
Medic = 3,
};
// c++ end
Das hab ich zum Konstruktor hinzugefügt (dieses kurze Stückchen kommt in die player.cpp zum Konstruktor "CBasePlayer::CBasePlayer"):
// c++
m_iClass = 1;
m_iArmor = 0;
m_iCurrentClass = m_iClass;
// c++ end
dann noch die ganzen definitionen (ganz am ende von CBasePlayer : public CBaseCombatCharacter)
//c++
/* Original bei TVirus / Blackevil2
********************************************
**Klassensystem:
**Hier werden die Klassen verteilt!
**Es wird auch auf die richtigen Klassen geprüft!
********************************************
*/
public:
virtual void ChangeClass(int NewClass);
virtual int GetClass() ;
void OnClassChange();
int GetClassValue()const;
void SetPlayerClass();
private:
int m_iArmor;
int m_iClass;
int m_iCurrentClass;
void SetClassDefault();
void SetClassGroundUnit();
void SetClassSupportUnit();
void SetClassMedic();
//c++ end
Das war alles in der player.h. Jetzt kommt noch die player.cpp
//c++
int CBasePlayer::GetClassValue()const
void CBasePlayer::SetPlayerClass()
{
//Jetzt werden die Klassen verteilt:
switch(m_iClass)
{
case Unassigned:
//Hier setzen wir die Standart-Klasse!
SetClassDefault();
break;
case Assaulter:
SetClassGroundUnit();
break;
case Supporter:
SetClassSupportUnit();
break;
case Medic:
SetClassMedic();
break;
default:
SetClassDefault();
break;
}
}
void CBasePlayer::OnClassChange()
{
if(m_iClass!=m_iCurrentClass)
{
//Spieler killen und punkte um 1 erhöhen(wegen Selbstmord)!
CommitSuicide();
IncrementFragCount(1);
//Setzen damit wir nicht die Selbe Klassen haben!
m_iCurrentClass = m_iClass;
}
}
void CBasePlayer::SetClassDefault() // kann man eigentlich wegnehmen, wird nich gebraucht
//Assault:
void CBasePlayer::SetClassGroundUnit()
{
//Waffen verteilen:
Msg("Du bist jetzt eine Ground Unit!\n");
CBasePlayer::GiveNamedItem( "weapon_357" );
SetHealth(120);
SetArmorValue(120);
CBasePlayer::GiveAmmo( 32, "357" );
}
//Supporter
void CBasePlayer::SetClassSupportUnit()
{
//Waffen verteilen:
Msg("Du bist jetzt eine Support Unit!\n");
SetHealth(100);
CBasePlayer::GiveNamedItem( "weapon_ar2" );
SetArmorValue(80);
CBasePlayer::GiveAmmo( 255, "AR2" );
CBasePlayer::GiveAmmo( 5, "AR2AltFire" );
//Eigenschaft des Supporter's aufrufen:
//GetAmmo();
}
//Medic:
void CBasePlayer::SetClassMedic()
{
//Waffen verteilen:
Msg("Du bist jetzt ein Medic!\n");
SetHealth(85);
SetArmorValue(40);
CBasePlayer::GiveNamedItem( "weapon_smg1" );
CBasePlayer::GiveAmmo( 255, "SMG1");
CBasePlayer::GiveAmmo( 3, "smg1_grenade");
}
//Klasse per ConVar wechsel für Client:
void CBasePlayer::ChangeClass(int NewClass)
//c++ end
Zusätzlich noch OnClassChange() in PostThink() (wie du)
und dann noch die Integration in die console (in ClientCommand) :
//c++
else if ( !stricmp( cmd, "class" ) )
{
//if (engine->Cmd_Argc() < 2) hab ich einfach rausgenommen, macht nix
// return true;
int iClass = atoi( engine->Cmd_Argv(1));
ChangeClass(iClass);
return true;
}
//c++ end
Zu guter Letzt hab ich dann noch was in die 'void CBasePlayer::Spawn( void )'
hinzugefügt, um es zu ermöglichen, dass der Spieler die Waffen erhält:
//c++
SetPlayerClass ();
//c++ end
Wie man sehen kann benutze ich SetPlayerClass(), um den Spielern über die einzelnen Klassen in der switch-Anweisung auszurüsten. Statt SetHealthValue hab ich SetHealth benutzt (SetArmorValue hat aber wiederum gefunzt).
ende meiner kleinen ausführung (puhh, hoffentlich keine rechtschreibfehler oder Programmierfehler )
//edit : doch n paar mehr proggsachen vergessen gehabt ..... puh, *fertigsei*
//edit2 : Nach 1-2 Jahren mal wieder angeschaut und etwaige Fehler herausgelesen (so z.b. die missverständliche Konstruktoranweisung)...