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.015.400 Visits   ›› 18.316 registrierte User   ›› 19 Besucher online (0 auf dieser Seite)
23.789 Themen, 325.181 Beiträge  
    FORUM 

Thema-Ansicht


Forum > Editing > Coding > [Tutorials] Waffen coding+Klassensystem
Status: Sticky
36 Beiträge
Letzter Beitrag Seiten (3):  [1] 2 3 »


Autor Beitrag
# 1
Nachricht offline
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
[Tutorials] Waffen coding+Klassensystem
Da ich ja schon etwas gut im Coden bin hab ich im Valvewiki mal ein paar tuts geschrieben ;)

Hier mal die Links:
Waffencoding:
http://developer.valvesoftware.com/wiki/Waffen_umcoden:de

Klassensystem:
http://developer.valvesoftware.com/wiki/Klassensystem:de

Viel Spaß mit den Tuts :)
25.06.2006, 13:52 Uhr Anzeigen
# 2
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
Nich übel... das wird vielen Codern helfen (auch mir :D ) Vor allem das Klassensystem ist echt ne dolle Sache (und vor allem, dass du deinen mühevoll zusammengecodeten Code der breiten Masse nach Code lechtzender Coder vorwirfst :meute: )
So Codernoobs wie ich können sowas echt gebrauchen, also in diesem Sinne - Thx ^^
25.06.2006, 15:38 Uhr Anzeigen
# 3
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Jopp aber ich werd das Tut nochmal überarbeiten da ich den Code auch nicht getestet hab :p aber sonst kann mans ja mal testen ;)
25.06.2006, 17:55 Uhr Anzeigen
# 4
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
hmmmm
ok, ich habs mal versucht... es gibt leider ein paar Probleme. Ich hoffe, dass das nicht an meiner Inkompetenz liegt :D ...
Teilweise solltest du aber auch mal genau beschreiben, wo du den Quellcode genau hinstellen willst. Ich hatte zuerst Probleme, OnClientCommand zu finden. Du meintest wohl ClientCommand :confused: .... hab aber auch ein paar andere Probleme in meinem Code.... (zum Beispiel hat er m_iHealth nicht erkannt.... :eek:
ich setzt mich mal wieder dran, sobald ich wieder Zeit hab.... ich hoffe, die Probleme liegen an meinem Code (und etwaigen Fehlern), denn wenn du ihn selbst noch nicht getestet hast, dann ist da vielleicht ein Fehler drin :confused:
03.07.2006, 21:18 Uhr Anzeigen
# 5
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Okay das mit der Methode werd ich ändern :)
Aber normalerweise muss er m_iHealth kennen!
Den damit wird das Spielerleben kontrolierte und diese Variable wird auch vererbt von CBaseCombatCharacter soweit ich weiß

Aber ich geh mal auf nummer sicher und werd das in der nächsten Zeit testen ;)
03.07.2006, 21:50 Uhr Anzeigen
# 6
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
So, ich hab das ganze mal getestet, um dir mal n bissl Arbeit abzunehmen (hoff ich mal).... (jetzt kurzerhand mit copy+paste ^^) Mein C++ erkennt die SetHealthValue-und SetMaxHealthValue-Funcs nicht an. Ich geb dir mal kurz nen groben Überblick
(Das is also wirklich nur Copy+Paste, nix verändert..... (kann sein, dass ich irgendwo nen copy/paste-Fehler gemacht hab ??? Wenns bei dir irgendwie gefunzt hatte, dann muss es das doch sein o.O)) :

alles in player.cpp:

error C2065: 'default_class': nichtdeklarierter Bezeichner
error C2228: Der linke Teil von '.GetInt' muss eine Klasse/Struktur/Union sein
Typ ist ''unknown-type''
error C2228: Der linke Teil von '.GetInt' muss eine Klasse/Struktur/Union sein
Typ ist ''unknown-type''
error C3861: 'default_class': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C2065: 'Invalid': nichtdeklarierter Bezeichner
error C2051: case-Ausdruck ist keine Konstante
error C2065: 'Magazin_357': nichtdeklarierter Bezeichner
error C2065: 'Magazin_SMG1': nichtdeklarierter Bezeichner
error C2065: 'Magazin_SMG1_Granates': nichtdeklarierter Bezeichner
error C2065: 'Magazin_Frag': nichtdeklarierter Bezeichner
error C2065: 'Magazin_AR2': nichtdeklarierter Bezeichner
error C2065: 'Magazin_AR2AltFire': nichtdeklarierter Bezeichner
error C3861: 'Magazin_Frag': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'Magazin_357': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'Magazin_357': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'Magazin_SMG1': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'Magazin_SMG1_Granates': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'SetHealthValue': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
error C3861: 'SetMaxHealthValue': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

Das is nurn Feedback, brauchst jetzt nicht aufzuspringen und anzufangen wie wild nach dem Fehler zu suchen - bin selber auf Fehlerjagt :heavygear: :falle:
04.07.2006, 18:10 Uhr Anzeigen
# 7
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Ups :p
Zu den Magazin_ dazu hab ich eine Header mit den Definies gemacht :p
Die kannst du durch eine Anzahl deiner Magazingröße ersetzten ;)

Zu default_class:
Du musst folgendes oben in der player.cpp schreiben:


//Der Server hat für alle die selbe Standartklasse!
//Der Admin kann die Standartklasse ändern!
ConVar default_class("default_class", "3", FCVAR_ARCHIVE, "Variable für Standartklasse!");



Steht ganz unten im Tutorial :)

Hier die Header makros:


#ifndef _Magazin_H
#define _Magazin_H

//Nur verändern wenn man die Munition der Waffenmagazine im script/code ändert!
//Legt die Magazine fest(Magazin und dann größe in Kugeln)!
#define Magazin_None 0
#define Magazin_Pistole 20
#define Magazin_357 6
#define Magazin_SMG1 50
#define Magazin_SMG1_Granates 1
#define Magazin_AR2 100
#define Magazin_AR2AltFire 1
#define Magazin_RPG 1
#define Magazin_Slam 1
#define Magazin_Frag 1
#define Magazin_Shotgun 8
#define Magazin_Crossbow 1


//Legt die Mazimale Muntion/Magazine fest:
#define Max_Magazin_None Magazin_None*0
#define Max_Magazin_Pistole Magazin_Pistole*16
#define Max_Magazin_357 Magazin_357*6
#define Max_Magazin_SMG1 Magazin_SMG1*8
#define Max_Magazin_SMG1_Granates Magazin_SMG1_Granates*7
#define Max_Magazin_AR2 Magazin_AR2*3
#define Max_Magazin_AR2AltFire Magazin_AR2AltFire*2
#define Max_Magazin_RPG Magazin_RPG*25
#define Max_Magazin_Slam Magazin_Slam*10
#define Max_Magazin_Frag Magazin_Frag*10
#define Max_Magazin_Shotgun Magazin_Shotgun*13
#define Max_Magazin_Crossbow Magazin_Crossbow*50

#endif //_Magazin_H



Die Header musst du an deine Mod anpassen :)
04.07.2006, 19:54 Uhr Anzeigen
# 8
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 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
# 9
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Jo sieht gut aus :) hoffe das ich den code richtig gelesen hab :p den heute war Barrickade an unserer Schule da ich abgänger war und ich schon 7 Bier intus hab ;D aber soweit ich das sehe ist alles IO :)
Ich kann dir ja noch zeigen wie man die Spielergeschwindigkeit ändert :) hab mir da noch was gestern zusammen gebaut :) und es klappt super :)

Wird also mit in den Wiki eingehen ;)
05.07.2006, 12:51 Uhr Anzeigen
# 10
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
nich so viel saufen, wenn noch nacher anständiger code rauskommen soll :D
denn : :zuviel: = Spagetticode ;)
Ich habs halt noch nicht im Netzwerk ausprobieren können. (trifft sich eigentlich, denn das hier wird wohl meine erstmal letzte Handlung im hlportal sein, bis ich meinen neuen Router zum laufen gebracht hab :pc-hauen: ) Trotzdem hoffe ich, dass du was damit anfangen kannst :redface:
jetzt muss ich nur noch den Router richtig zum laufen bringen...
also dann, ran an die waffen - laden und schießen :akimbo2:
05.07.2006, 19:40 Uhr Anzeigen
# 11
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Zitat:
Original von moc

nich so viel saufen, wenn noch nacher anständiger code rauskommen soll :D
denn : :zuviel: = Spagetticode ;)
Ich habs halt noch nicht im Netzwerk ausprobieren können. (trifft sich eigentlich, denn das hier wird wohl meine erstmal letzte Handlung im hlportal sein, bis ich meinen neuen Router zum laufen gebracht hab :pc-hauen: ) Trotzdem hoffe ich, dass du was damit anfangen kannst :redface:
jetzt muss ich nur noch den Router richtig zum laufen bringen...
also dann, ran an die waffen - laden und schießen :akimbo2:


h3h3 hab jetzt wieder mal 2 Stunden gepennt und kann wenigstens mit den Fingern bis 3 zählen ;D *joke*

Okay dein Code sie soweit korrekt aus :)

Falls du dir ein Menu coden will kann ich dir ja bald helfen :)
Ich werde in nächster Zeit mal mit dem VGUI rumspielen ;D und mal ein paar Menus coden wenn möglich :p
05.07.2006, 20:33 Uhr Anzeigen
# 12
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
das triftt sich ja gut ;).... da bin ich auch grade dran :tippen:
wenn du was drüber hast, dass nützlich is, dann mach halt mal im wiki nen crashcurs oder poste mal hier was und wenn das nicht geht, dann gibts ja immer noch icq (ich könnt schwören, dass ich dich in meiner liste hab :D ... das prüf ich mal bei gelegenheit nach.... )

/edit : dank dem e-freak geht mein router jetzt tadellos :cool:
[Beitrag wurde 1x editiert, zuletzt von moc am 05.07.2006, 22:17]
05.07.2006, 22:16 Uhr Anzeigen
# 13
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Okay :)
Aber mal ne Frage->Wie gut bist du den in C++?
vllt könnten wir mal was zusammen basteln :)
05.07.2006, 22:18 Uhr Anzeigen
# 14
moc
HLP - Ehrenmember
Nachricht offline Moderator
Bullsquid
2.662 Punkte
Dabei seit: 22.06.2006
882 Beiträge
Das is ne echt übele Frage... :D...Ich weiß halt nich so genau im Zusammenhang mim HL2Code, denn da hab ich halt noch nicht sooo viel gemacht.
Ich hab zwar mehrere Bücher zu C++ durchgearbeitet und verfüge auch über das relative C++Grundwissen (also Variablen, Funktionen, Klasse, Pointer, usw.), aber als ich dann recht gut vorbereitet an den Hl2-Code gekommen bin, da hab ich aber geschaut.... :eek: .... nix mit blasser Theorie....
Aber grundsätzlich versteh ichs schon und wäre auch dabei, wenn du was basteln willst (probieren geht über studieren :redface: )
(ach ja: ich hatte c++ schon zu hl1 Zeiten mit der Autorenedition versucht.... hat sich dann aber irgendwie mit der Zeit verlaufen.... das darf nicht nochmal passieren :D)

/edit : hab gerade den mod mit nem Freund im INet gezoggt und es funzt tadellos :D
[Beitrag wurde 1x editiert, zuletzt von moc am 06.07.2006, 17:36]
05.07.2006, 23:08 Uhr Anzeigen
# 15
Nachricht offline
Thread-Starter
Alien Grunt
4.777 Punkte
Dabei seit: 04.10.2004
289 Beiträge
Klingt sowie bei mir ;D nur hatte ich schon viel prxis :) sogar mit der WinAPI um Progs zuschreiben ;)
Hab auch schin einige kleine dlls gecodet :p und eins meiner Progs damit verbunden :)
06.07.2006, 08:57 Uhr Anzeigen
nach oben
36 Beiträge

Seiten (3):  [1] 2 3 »


Gehe zu:  feed_mini Beiträge: RSS, RSS2, ATOM

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 19 Benutzer online. Davon sind 0 registriert:
    SITE OPTIONS 
- Zu Favoriten hinzufügen
- Als Startseite festlegen (IE only)
- Fehler auf dieser Seite?