Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.02.2004, 17:18
-[Phoenix]-



Ja, ich weiss, so ein Thema wurde hier schonmal erstellt. Ich hab mir das auch mal durchgelesen, bin aber nicht wirklich schlau daraus geworden.

Außerdem:

1. Eine neue MonsterKilled - Funktion einzubauen find ich ein bischen heftig
(Hab ich versucht und bin kläglich dran gescheitert.)
2. In der Killed - Funktion von CBaseMonster hab ich auch schon
herumgebastelt, komm aber auch nicht wirklich weiter.

P.S. Ich hab nach dem Tut. von "http://hlpp.cjb.net/" ( Experience Tutorial
Part One) gearbeitet.
Funzt auch alles wunderbar gegen andere Spieler, aber halt nicht gegen
Monster (Frags bekomm ich schon für die Monster).

Habt ihr eventuell ne' Idee ?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
24.02.2004, 17:45
Onkel Dittmeyer



Ja du musst schon mit der CBaseMonster::Killed arbeiten. Hol dir den Class pointer von den pevAttacker entvars und prüf mit IsPlayer ab ob es ein Player ist. Wenn dem so ist mach nen Cast und stopf den Pointer in ein CBasePlayer*
Dann kannste damit weiterarbeiten.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
24.02.2004, 18:47
-[Phoenix]-



Erstmal vielen Dank für deine Hilfe.

Sorry, is für mich bischen schwierig zu verstehen, bin zwar nich mehr so der C++ Noob, aber is doch ein wenig haarig bei mir.

Ich versuchs mal mit deiner Methode ich glaub nämlich ein wenig das verstanden zu haben, mal sehen, was dabei herauskommt.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
24.02.2004, 21:43
-[Phoenix]-



Is zwar sowieso falsch aber das war meine Planung so hab ich mir das gedacht. Bitte nich lachen:

CBaseEntity *pPlayer = CBaseEntity::Instance(pevAttacker);

m_IdealMonsterState = MONSTERSTATE_DEAD;

if( pPlayer && pPlayer->IsPlayer() ) // <- Das sollte die IsPlayer - Prüfung sein.
{
pPlayer->AddPoints( 1, false ); // Monsterkill gibt einen Frag.
pPlayer->exp_level; // ??? Funzt zwar nich war aber meine Planung.
}

Ich versuch ja gerade so den Kramm wieder zu lernen, is ne Ewigkeit her, als ich das letzte Mal mich mit HL - Coding befasst habe. Zur Zeit is bei mir mehr Learning by Doing. Modifiziere ein paar Sachen aus Tuts. und so, damit ich mehr davon verstehe. Klappt auch fast immer.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
25.02.2004, 06:58
Onkel Dittmeyer



Quellcode:CBaseEntity *pPlayer = CBaseEntity::Instance(pevAttacker); Ich weiß nicht genau ob du CBaseEntity::Instance verwenden kannst und bin jetzt auch zu faul nachzugucken =) Aber ganz sicher funktioniert
Quellcode:CBaseEntity* pEnt = GetClassPtr((CBasePlayer*)pevAttacker) Jetzt kommen wir zu pPlayer:
Du hast nen Pointer auf CBaseEntity, jetzt überleg was du brauchst... einen Pointer auf CBasePlayer. CBaseEntity hat ja nicht die gewünschte Member Variable für die Experience. Also:
Quellcode:if (pEnt && pEnt->IsPlayer())
{
    CBasePlayer* pPlayer = (CBasePlayer*)pEnt;
    pPlayer->AddPoints( 1, false );
    pPlayer->exp_level++; //oder wie auch immer du das machen möchtest
}

--

zum Seitenanfang zum Seitenende Profil || Suche
005
25.02.2004, 14:21
-[Phoenix]-



Aha, jetzt versteh ich was du meinst. Wieder etwas dazugelernt. Danke !!!
Funzt auch wunderbar, aber ich bekomm immer noch keine Erfahrung.

Also es kann nur am Aufruf: "pPlayer->exp_level;" liegen, der ist eigentlich
dafür Zuständig mich hochzustufen, so hab ich das dem Tut. entnommen.

Am Rest kann es ja nicht liegen, da ich meine Frags durch den neuen Code
ja trotzdem bekomme.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
25.02.2004, 14:32
Exec



wo testest du,welchen level du hast?
kann ja sein,das die anzeige oder so nur nicht aktualisiert wird ...

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
007
25.02.2004, 14:58
-[Phoenix]-



Also ich bekomme eine Hud - Text - Nachricht, die mich über meinen Levelaufstieg informiert:

ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 1");

Außerdem bekomm ich ja neue Items beim Aufstieg in ein neues Level, daran
könnte ich das ja auch erkennen.

--

zum Seitenanfang zum Seitenende Profil || Suche
008
25.02.2004, 15:05
Exec



und wo regelst du das? also das du items/message bekommst?

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
009
25.02.2004, 16:14
Onkel Dittmeyer



"pPlayer->exp_level;" ist _kein_ Aufruf, das ist gar nichts - es ist ne Variable und keine Funktion. Das ist so als ob du irgendwo in den Code "1337;" schreibst, es tut nichts.
Also kann folglich auch nix mit der Experience passieren...
Guck dir nochmal das Tutorial an.

--

zum Seitenanfang zum Seitenende Profil || Suche
010
25.02.2004, 20:55
-[Phoenix]-



@ Exec:
In der Multiplay_Gamerules.cpp und um genau zu sein in der PlayerSpawn()

if (pPlayer->exp_level == EXP_LEVEL_1)
{
g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 290);
pPlayer->GiveNamedItem( "weapon_crowbar" );
pPlayer->GiveNamedItem( "weapon_9mmhandgun" );
pPlayer->GiveAmmo( _9MM_MAX_CARRY, "9mm",
_9MM_MAX_CARRY );
pPlayer->GiveNamedItem( "item_battery" );
ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level
Is 1");
addDefault = FALSE;
}

und später muss ich noch wat in der PlayerKilled() machen.

@ Onkel Dittmeyer:
Ah ja, hast recht "int exp_level;" hätte eigentlich klar sein müssen.
Ok, dann werd ich das Tutorial nochmal durchforsten, wird ja wohl nicht zu schwer sein den Kram zu finden und einzubauen.

--

zum Seitenanfang zum Seitenende Profil || Suche
011
25.02.2004, 22:19
-[Phoenix]-



Ok, ich hab jetzt des Rätsels Lösung gefunden, der Kram muss so aussehen:

CBaseEntity* pKiller = GetClassPtr((CBasePlayer*)pevAttacker);

m_IdealMonsterState = MONSTERSTATE_DEAD;

if (pKiller && pKiller->IsPlayer())
{
CBasePlayer* pPlayer = (CBasePlayer*)pKiller;
pPlayer->AddPoints( 1, false );

CBasePlayer* peKiller = (CBasePlayer*)pKiller;
if (peKiller->exp_level == EXP_LEVEL_1)
{
peKiller->exp_level = EXP_LEVEL_2;
peKiller->GiveNamedItem( "weapon_shotgun" );
ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 2");
}
else if (peKiller->exp_level == EXP_LEVEL_2)
{
peKiller->exp_level =EXP_LEVEL_3;
peKiller->GiveNamedItem( "weapon_egon" );
ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 3");
}
}

Zuerst hatte ich noch ein paar Probs. weil ich es mit pPlayer->exp_level versucht habe, aber mit peKiller->exp_level ... funzt es wunderbar.

Dann hatte ich ein Problem mit :

peKiller->GiveAmmo( BUCKSHOT_MAX_CARRY, "buckshot", BUCKSHOT_MAX_CARRY );

... da er sich gegen "BUCKSHOT_MAX_CARRY" streubte. Aber dann habe
ich noch schnell am Anfang meine _defines.h includet, wo das definiert war.

Welche Lösung hättet ihr denn so gehabt? :)

--

zum Seitenanfang zum Seitenende Profil || Suche