Einfaches Level System mit Exp

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Einfaches Level System mit Exp

      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:

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von PeaceAndLove?! ()

    • Wenn ich das richtig in Erinnerung hab war das tut von MAP für lua oder?
      Dachte es wäre für manche hilfreich so etwas auch in C++ zu sehen ;)

      Ich editiers mal

      //edit vom 16.August 2013:
      Sorrrrryyyy Leutte.
      Da war ein fetter Bug drin ^^
      Man konnte dadurch nicht mehr durch sich selbst sterben.
      Also man hat mir 0 Herzen weitergelebt und DeathTeile hatten keinen Effekt. Ich editiere jetzt das Tut.

      Danke an Tim für die Hilfe ;)
    • Das ist ja alles toll und so aber der funktioniert nicht bei meinem mod :( alles nach und nach gemacht aber das funktioniert nicht bei einem Kill :/ und woher soll die Mod das eigentlich wiessen wann der Player ein Rang up ist bzw wann ? Wäre cool wenn du das auch für MoneyTiles machen könntest ;3
      MFG Leon