HALF-LIFE PORTAL
Your Gate To Valve's Games www.hl-forum.de
PORTAL
FORUM
LOGIN
User oder E-mail:


Passwort:


oder
Registrieren
Passwort vergessen?
OpenID-Login
MISC
PARTNER

TF2 Crafting

Special Artworks by
Hayungs

Link us:
HL PORTAL

Support us:


HLPortal
auf Facebook

›› Willkommen!   ›› 95.294.182 Visits   ›› 18.316 registrierte User   ›› 26 Besucher online (0 auf dieser Seite)
23.789 Themen, 325.181 Beiträge  
    FORUM 

Beitrag anzeigen

Hier kannst du einen Beitrag einzeln betrachten

Thread


Autor Beitrag
# 1
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.659 Punkte
Dabei seit: 22.06.2006
882 Beiträge
ok, das erklärt einiges :D
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 :D (puhh, hoffentlich keine rechtschreibfehler oder Programmierfehler ;))

//edit : doch n paar mehr proggsachen vergessen gehabt ..... puh, *fertigsei* :tippen:
//edit2 : Nach 1-2 Jahren mal wieder angeschaut und etwaige Fehler herausgelesen (so z.b. die missverständliche Konstruktoranweisung)...
[Beitrag wurde 7x editiert, zuletzt von moc am 27.11.2007, 21:15]
04.07.2006, 20:57 Uhr Anzeigen

Sections:  HLP  Board  Mods  Steam      Games:  HL  Op4  HLBS  HL2  HL2:Ep1  HL2:Ep2  Prtl  TF2  TFC  CS  DoD  L4D  Gunman
    USER ONLINE 
Insgesamt sind 26 Benutzer online. Davon sind 0 registriert:
    SITE OPTIONS 
- Zu Favoriten hinzufügen
- Als Startseite festlegen (IE only)
- Fehler auf dieser Seite?