Mal ein einfaches Levelsystem was leicht zu verstehen ist.
Der Score im Scoreboard soll das aktuelle Level anzeigen.
(Ohne Acc-System)
Als erstes gehen wir in player.h und fügen das hier unter public ein:
[cpp]int m_Exp;[/cpp]
Dort werden die aktuellen Exp des Spielers gespeichert.
Dann gehen wir in character.cpp und erstellen eine neue Methode
[cpp]void CCharacter::LevelSystem(int Killer)
{
GameServer()->m_apPlayers[Killer]->m_Exp++; //Exp wird um 1 erhöht. Bei einem Kill wird also aus einem Exp zwei Exp.
if(GameServer()->m_apPlayers[Killer]->m_Exp >= GameServer()->m_apPlayers[Killer]->m_Score*2) //Abfrage die überprüft ob die aktuelle Exp-Anzahl größer
{ //ist als das aktuelle Level mal 2.
GameServer()->m_apPlayers[Killer]->m_Score++; //Das aktuelle Level wird um 1 erhöht.
GameServer()->m_apPlayers[Killer]->m_Exp = 0; // Exp werden wieder auf 0 gesetzt
char Buf[128];
str_format(Buf, sizeof(Buf), "Level Up! You are now Level %d", GameServer()->m_apPlayers[Killer]->m_Score); //Level Up Nachricht wird ausgegeben
GameServer()->SendChatTarget(Killer, Buf);
return;
}
}[/cpp]
Nun müssen wir das nur noch bei einem Kill ausführen.
Also gehen wir in CCharacter::TakeDamage (immernoch in character.cpp)
Dort fügen wir ein in...
[cpp] if (From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])
{
CCharacter *pChr = GameServer()->m_apPlayers[From]->GetCharacter();
if (pChr)
{
pChr->m_EmoteType = EMOTE_HAPPY;
pChr->m_EmoteStop = Server()->Tick() + Server()->TickSpeed();
}
}[/cpp]
[cpp]
LevelSystem(From); //Sollte es nicht zutreffen wird unser LevelSystem Modulo von oben aufgerufen.
[/cpp]
ein.
Sollte jetzt so aussehen:
[cpp] if (From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])
{
CCharacter *pChr = GameServer()->m_apPlayers[From]->GetCharacter();
if (pChr)
{
pChr->Level(From);
pChr->m_EmoteType = EMOTE_HAPPY;
pChr->m_EmoteStop = Server()->Tick() + Server()->TickSpeed();
}
}[/cpp]
So jetzt in character.h unter public
[cpp]void LevelSystem(int Killer);[/cpp]
das hier einfügen
Das einzige was ihr jetzt noch machen müsst ist rausmachen das man bei einem normalen Kill ein Score+ bekommt.
Das lasse ich euch aber mal als kleine Aufgabe da ;)
Hoffe ihr habts verstanden und es klappt.
Wenn ich was vergessen hab oder ihr Verbesserungsvorschläge habt...
Ich bin offen für alles.
mfg
PeaceAndLove?!
PS: Credit to Tim for Help :love:
Der Score im Scoreboard soll das aktuelle Level anzeigen.
(Ohne Acc-System)
Als erstes gehen wir in player.h und fügen das hier unter public ein:
[cpp]int m_Exp;[/cpp]
Dort werden die aktuellen Exp des Spielers gespeichert.
Dann gehen wir in character.cpp und erstellen eine neue Methode
[cpp]void CCharacter::LevelSystem(int Killer)
{
GameServer()->m_apPlayers[Killer]->m_Exp++; //Exp wird um 1 erhöht. Bei einem Kill wird also aus einem Exp zwei Exp.
if(GameServer()->m_apPlayers[Killer]->m_Exp >= GameServer()->m_apPlayers[Killer]->m_Score*2) //Abfrage die überprüft ob die aktuelle Exp-Anzahl größer
{ //ist als das aktuelle Level mal 2.
GameServer()->m_apPlayers[Killer]->m_Score++; //Das aktuelle Level wird um 1 erhöht.
GameServer()->m_apPlayers[Killer]->m_Exp = 0; // Exp werden wieder auf 0 gesetzt
char Buf[128];
str_format(Buf, sizeof(Buf), "Level Up! You are now Level %d", GameServer()->m_apPlayers[Killer]->m_Score); //Level Up Nachricht wird ausgegeben
GameServer()->SendChatTarget(Killer, Buf);
return;
}
}[/cpp]
Nun müssen wir das nur noch bei einem Kill ausführen.
Also gehen wir in CCharacter::TakeDamage (immernoch in character.cpp)
Dort fügen wir ein in...
[cpp] if (From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])
{
CCharacter *pChr = GameServer()->m_apPlayers[From]->GetCharacter();
if (pChr)
{
pChr->m_EmoteType = EMOTE_HAPPY;
pChr->m_EmoteStop = Server()->Tick() + Server()->TickSpeed();
}
}[/cpp]
[cpp]
LevelSystem(From); //Sollte es nicht zutreffen wird unser LevelSystem Modulo von oben aufgerufen.
[/cpp]
ein.
Sollte jetzt so aussehen:
[cpp] if (From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])
{
CCharacter *pChr = GameServer()->m_apPlayers[From]->GetCharacter();
if (pChr)
{
pChr->Level(From);
pChr->m_EmoteType = EMOTE_HAPPY;
pChr->m_EmoteStop = Server()->Tick() + Server()->TickSpeed();
}
}[/cpp]
So jetzt in character.h unter public
[cpp]void LevelSystem(int Killer);[/cpp]
das hier einfügen
Das einzige was ihr jetzt noch machen müsst ist rausmachen das man bei einem normalen Kill ein Score+ bekommt.
Das lasse ich euch aber mal als kleine Aufgabe da ;)
Hoffe ihr habts verstanden und es klappt.
Wenn ich was vergessen hab oder ihr Verbesserungsvorschläge habt...
Ich bin offen für alles.
mfg
PeaceAndLove?!
PS: Credit to Tim for Help :love:
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von PeaceAndLove?! ()