Chatcmds System - /cmdlist usw.

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

    • Chatcmds System - /cmdlist usw.

      Hallöchen Welt und alle die sie bevölkern! Ich hab mir gedacht da ich gerade
      lerne mit der Tw Source rumzucoden, euch einfach mal ein kleines Tutorial
      kredenze.
      Unser Ziel ist es ein Chatcmd System in unsere Mod einzubauen.
      So, was wir brauchen :
      - Ein Schreib Program deiner Wahl, mit dem du am besten arbeiten kannst
      - Und natürlich die gamecontext.cpp ( src \ game \ server \ gamecontext.cpp )

      Wenn du alles hast kanns auch schon losgehen. Gehe in die gamecontext.cpp
      datei hinein und suche ( wenn vorhanden ) mit der Suchfunktion deines Editors
      diese Codestelle :
      [cpp]void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)[/cpp]
      Wenn du sie gefunden hast scroll etwas nachunten bis du diesen abschnitt siehst :
      [cpp]if(Length == 0 || (g_Config.m_SvSpamprotection && pPlayer->m_LastChat && pPlayer->m_LastChat+Server()->TickSpeed()*((15+Length)/16) > Server()->Tick()))[/cpp]
      So gut, jetzt kommt das System. Füge darunter dieß ein :
      [cpp]if(!str_comp(pMsg->m_pMessage, "/***"))
      {
      SendChatTarget(ClientID, "***");
      return;
      }[/cpp]
      Also jetzt erstmal eine kleine erklärung, bei if(!str_comp(pMsg->m_pMessage, "/***"))
      kannst du wo die Sternchen stehen eine beliebige Cmd eingeben.
      Wenn du zb. /cmdlist schreibst musst du auch in Teeworlds dieß im Chat eingeben ( Selbsterklärend ).
      Bei SendChatTarget(ClientID, "***"); gibst du einfach bei den Sternchen ein,
      was der Chat dann für den Spieler ausgeben soll. ( Credits und So. )

      Ok gut. Eigentlich war das jetzt alles was ihr wissen müsst um so ein System
      einbauen zu können. Ich hoffe ich konnte euch helfen.

      Wenn ihr Fehler findet bitte sofort melden! Ich edite sie dann natürlich ^^
      :^^: Lg. Shutey

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shutdown () aus folgendem Grund: Der alte Titel hat gesuckt :D

    • Es wäre schön, wenn du die Bedeutung bzw. die Funktionsweise von Der OnMessage-Funktion sowie von str_comp bzw. allgemein den Rahmen kurz beleuchten könntest.
      So denke ich leider, weiß niemand so recht, was er da in diesem Abschnitt programmiert, wobei es bei Informatik doch eigentlich gerade darum geht, die Sachverhalte zu verstehen und so einen Überblick zu gewinnen.
      Ich habe in letzter Zeit viele Anfragen über Skype erhalten, bei denen es um einfachste Probleme ging, die einfach dadurch entstanden sind, dass der Source Code aus anderen Mods kopiert wurde und derjenige eigentlich keine Ahnung vom Programmieren hatte. Ich möchte an dieser Stelle niemanden verurteilen oder gar vom Programmieren abhalten, jedoch fällt es mir eben auf, dass sich viele eben erst gar nicht die Mühe machen, programmieren zu lernen.
      Aber genau an dieser Stelle passt dann nämlich die Aussage, die man sonst auch immer hört: Lern erst einmal Programmieren, was bei Teeworlds dann auf C++ hinausläuft.

      Mit freundlichen Grüßen,

      Pata
    • Patafix schrieb:

      [...] str_comp [...]
      aber das könte man sich schon denken, wenn man die funktion an sich sieht... std::strcmp(const char* lhs, const char* rhs) -> vergleicht links mit rechts



      Patafix schrieb:

      [...] kopiert wurde und derjenige eigentlich keine Ahnung vom Programmieren hatte. Ich möchte an dieser Stelle niemanden verurteilen oder gar vom Programmieren abhalten, jedoch fällt es mir eben auf, dass sich viele eben erst gar nicht die Mühe machen, programmieren zu lernen.
      Aber genau an dieser Stelle passt dann nämlich die Aussage, die man sonst auch immer hört: Lern erst einmal Programmieren, [...]
      *this


      Patafix schrieb:

      [...] was bei Teeworlds dann auf C++ hinausläuft. [...]
      wenn man modernes c++ (template metaprogrammierung, usw.) lernen will, sollte man sich aber eher nichts von der teeworlds source abschauen, denn die ist eher in veralteten c++/c geschrieben
      ab c++11 ist c++ eine völlig andere sprache geworden (was ich gut finde btw.)
    • Hey, ich bin momentan ein Coder-Anfänger in C++ ^^ Wie würde ich denn einen text auswerten der nach dem command stehen würde?. Meine erste Idee wäre split, aber dazu müsste ich erstma abfragen ob ein Text nach dem Command steht`? ^^
      Mein erster ansatz wäre das hier:
      [cpp]
      else if(str_comp_num(pMsg->m_pMessage, "/ticket", 7) == 0) {
      char msg[256];
      if(!str_comp(pMsg->m_pMessage, "/ticket"))
      SendChatTarget(ClientID, "Write a ticket with: /ticket <Your text>");
      else if(/*Text kommt nach "/ticket "*/)
      SendChatTarget(ClientID, "Ticket sent!");
      }[/cpp]
      Außerdem habe ich bei der lvl|x src aus 0.5 den befehl "sscanf" gefunden, jedoch konnte ich den nicht benutzen! Hoffe auf baldige Antwort, und bitte kein Flame wenn ich die Antwort nicht sofort gesehen hab.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von BlindHero ()

    • BlindHero schrieb:

      Hey, ich bin momentan ein Coder-Anfänger in C++ ^^ Wie würde ich denn einen text auswerten der nach dem command stehen würde?. Meine erste Idee wäre split, aber dazu müsste ich erstma abfragen ob ein Text nach dem Command steht`? ^^
      Mein erster ansatz wäre das hier:
      [cpp]
      else if(str_comp_num(pMsg->m_pMessage, "/ticket", 7) == 0) {
      char msg[256];
      if(!str_comp(pMsg->m_pMessage, "/ticket"))
      SendChatTarget(ClientID, "Write a ticket with: /ticket <Your text>");
      else if(/*Text kommt nach "/ticket "*/)
      SendChatTarget(ClientID, "Ticket sent!");
      }[/cpp]
      Außerdem habe ich bei der lvl|x src aus 0.5 den befehl "sscanf" gefunden, jedoch konnte ich den nicht benutzen! Hoffe auf baldige Antwort, und bitte kein Flame wenn ich die Antwort nicht sofort gesehen hab.


      [cpp]
      else if(str_comp_num(pMsg->m_pMessage, "/ticket", 7) == 0) {
      char msg[256] = str_skip_whitespaces(pMsg->m_pMessage[sizeof("/ticket")-1);
      if(!*msg)
      SendChatTarget(ClientID, "fucktard");
      else
      SendChatTarget(ClientID, "Ticket sent!");
      }[/cpp]