Änderung Pointsystem und Away - Addon ???

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

      Änderung Pointsystem und Away - Addon ???

      Halli hallo,

      erstmal ein frohes neues Jahr Euch allen wünsche...

      Ich habe diese Frage zwar schon mal in einem anderem Forum gestellt, aber ich
      glaube da konnte man mir nicht so richtig weiter helfen, daher möchte ich diese hier nochmal stellen...

      Und zwar habe ich bei mir im Chat das Pointsystem und dieses Away per Haken eingebaut.

      Ist es möglich das so zu kofigurieren, daß wenn ein user aus away klickt und es dann ist, daß dann KEINE Punkite für diese Zeit mit gezählt werden ?

      Ich habe bei mir im Chat das Problem, daß es ein paar "Schlauberger" gibt, die die ganze Nacht im Chat sind (aber Abwesend, also away) nur um an Punkte zu kommen. Einige andere User finden es verständlicherweise unfair....

      Es wäre toll, wenn mir dabei bitte jemand helfen könnte....
      Schau dir mal die sub logoutPerformed im Pointsystem an. Ich müsste es mir genauer ansehen, aber theoretisch ists nicht ganz so schwer. Ich denke da an eine Variable, in der geregelt wird, wie lange man AFK sein darf, bevor die Punkte nicht mehr gezählt werden. Dürfte nicht allzuschwer sein.

      Die Variable muss dann in dem o.g. Abschnitt initiiert werden und abgefragt werden. Nebenbei muss ein Profilfeld erstellt werden, in welchem der Wert $main->{runtime}{now} gesetzt wird.

      Am Ende wird geprüft, ob $maxafk (beispiel) größer ist als der Wert in dem Profilfeld. Falls ja, wird die Aktion in sub logoutPerformed nicht mehr ausgeführt und der User ausgeloggt.

      Das wäre mein erster Gedanke. Der zweite und bessere wäre, die gesamte AFK zeit während eines Tages bzw. einer Onlinesitzung aufzuzählen und dort einfach dann das Limit zu setzen.
      Hallo zusammen,

      ich bin zwar neu hier, aber befasse mich bereits seit 4-5 Jahren mit dem GT-Chat 0.95. Habe bisher auch schon einige Dinge anpassen, verbessern und erweitern können. Nun stehe ich allerdings vor einem Problem

      gewünschte Änderung:
      Ich habe ebenfalls das Point-Addon eingebaut und in der Forenversion ist das Away-Per-Checkbox schon integriert. Nun sollen bei mir ebenfalls bei Away und nur im Raum Lobby Punkte gezählt und gutgeschrieben werden.

      Meine erster Ansatz:

      Quellcode

      1. sub logoutPerformed
      2. {
      3. my($self,$main) = @_;
      4. my $user = $main->{current_user};
      5. if($user->{group} ne '-1') {
      6. my $onlinetime = $main->{runtime}{now} - $user->{lastlogin};
      7. $user->{onlinetime} += +$onlinetime;
      8. my $timepoints = ($main->{runtime}{now} - $user->{lastlogin}) / 60;
      9. $timepoints -= 10 if(!$user->{points} && $user->{onlinetime} < 600);
      10. $timepoints = 0 if($timepoints < 0);
      11. $user->{points} += $timepoints;
      12. $main->saveUser($user) if($main->{current_user}{name});
      13. }
      14. }

      Dieser Teil ist ja zur Berechnung der Punkte zuständig, wenn ich das richtig sehe. Dort wollte ich nun die Prüfroutinen einsetzen, welche bei mir folgendermaßen aussehen:

      Quellcode

      1. if ($user->{away} eq '1' || $user->{room} eq 'Lobby') {
      2. .....
      3. }


      Aber egal, wo ich die Abfrage einsetze, werden überhaupt keine Punkte mehr gezählt. Sind meine Überlegungen und Ansätze komplett falsch oder stelle ich mir die Angelegenheit zu einfach vor? Mir ist jedoch klar, dass der letzte Teil ($main->saveUser($user) if($main->{current_user}{name});) keinesfalls innerhalb einer weiteren If-Abfrage stehen darf.

      Ich hoffe, Ihr könnt mir einen Tip geben.
      Das ist ein Denkfehler weil...

      wenn du dich ausloggst bist du wahrscheinlich nicht mehr Away daher muss du eigentlich beim Away gehen eine Aktion einsetzen die das zählen stoppt. Ein Einbau einer Abfrage in die logoutPerformed nützt da wirklich wenig.
      Ich habe ja eigentlich gedacht, dass die Abfrage den Zählprozess stoppt, aber das war wohl mal wieder ein Denkfehler. Wäre wahrscheinlich auch zu einfach gewesen. Wie könnte denn ein konkreter Ansatz aussehen?

      Nachtrag:
      Wäre eine solche Abfrage denn nur mit if($user->{room} eq 'Lobby') in meinem Beispiel realisierbar?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DangerLes“ ()

      Nein die Stelle wo du es einsetzen willst ist falsch.
      In logoutPerformed macht das doch kein Sinn weil dort wird halt einfach abgerechnet wenn man sich eben ausloggt. Und dort gilt was aktuell beim logout für ein Status gesetzt ist und nicht was vor vielleicht 10 Minuten war.

      Meine Idee wäre:

      Im Away Handler einfach die Away Zeit in ein Profilfeld speichern und beim Logout von der gesamten Onlinezeit abziehen.
      Hätte den - wie ich finde - praktischen Nebeneffekt das in der Away Zeit auch keine Online Minuten gezählt werden.
      Ich habe nochmal eine Anfängerfrage zu meinem Anliegen:

      Wenn ich nun nur Punkte zählen lassen will, wenn sich jemand im Raum "Lobby" afhält, müsste ich dann nicht auch die Zeit ausrechnen und in ein Profilfeld eintragen lassen, damit diese nachher ebenfalls von der Onlinezeit abgezogen werden kann?

      Oder reicht es, wenn die Berechnung der Punkte in logoutPerformed in eine weitere If-Abfrage gepackt wird?

      Quellcode

      1. sub logoutPerformed {
      2. my($self,$main) = @_;
      3. my $user = $main->{current_user};
      4. if($user->{group} ne '-1') {
      5. if ($$user->{room} eq 'lobby') {
      6. my $onlinetime = $main->{runtime}{now} - $user->{lastlogin};
      7. $user->{onlinetime} += +$onlinetime;
      8. my $timepoints = ($main->{runtime}{now} - $user->{lastlogin}) / 60;
      9. $timepoints -= 10 if(!$user->{points} && $user->{onlinetime} < 600);
      10. $timepoints = 0 if($timepoints < 0);
      11. $user->{points} += $timepoints;
      12. }
      13. $main->saveUser($user) if($main->{current_user}{name});
      14. }
      15. }


      Ich habs zwar noch nicht getestet, denn ich würde vorher gerne wissen, ob das Prinzip funktionieren könnte. Wenn ich auf dem Holzweg bin, kann ich mir ausführliche Tests nämlich sparen :D
      Na ja, so einfach ist der Weg dann wohl doch nicht ;(

      Egal, an welche Stelle ich die If-Abfrage einsetze, bringt es nicht den gewünschten Erfolg. Es werden absolut keine Punkte mehr gezählt.

      Ich habe nun alle Möglichkeiten probiert und getestet, aber nicht ein einziger Punkt wurde bisher berechnet ... auch nicht nach 25 Minuten in der Lobby.
      Original von oOMasterOo
      Ich habs jetzt selber nicht getestet aber ich glaube an der Stelle wo du es versuchst kann das auch nicht gehen das habe ich aber schon 2 mal gesagt.


      Es geht ja auch jetzt "nicht (Nachtrag)" um den Away Modus, sondern daß unterschieden wird, ob sich jemand in der Lobby aufhält oder in einem anderen Raum

      Quellcode

      1. if ($$user->{room} eq 'lobby') {
      2. ... Punkte zählen
      3. }


      Ich will erstmal das funktionstüchtig hinbekommen und mich dann um den away Modus kümmern ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DangerLes“ ()

      Dann probier zum Beispiel:

      Quellcode

      1. if($main->{current_user}{name} eq 'lobby') {
      2. ...
      3. }


      Trotzdem ist der Ansatz an der Stelle falsch wenn du jetzt die ganze Zeit im Channel away bist und danach wieder in den Channel lobby gehst werden die Punkte gezählt. Das nur als Tipp ;)
      Ok, wie ich gerade gesehen habe, hatte ich einen Schreibfehler in meinem letzten Beitrag. Es sollte natürlich heißen "Es geht ja auch jetzt nicht um den Away Modus".

      Ich habe nun einige Tests gemacht mit if($main->{current_user}{room} eq 'lobby') und if($user->{room} eq 'lobby'). Meiner Meinung nach sollte beides funktionieren, weil ja die Variable $user bereits mit my $user = $main->{current_user}; belegt wird. Aber dennoch wird NIEMALS auch nur ein Punkt gezählt ... selbst dann nicht mehr, wenn ich mich ne halbe Stunde in der Lobby aufhalte ;( .

      So langsam blicke ich überhaupt nicht mehr durch.

      Kann mir vielleicht jemand einen Denkanstoß geben?

      NACHTRAG:
      Ich habe heute Abend noch einiges probiert, mit einem Ergebnis, was mich auch nicht gerade befriedigt, denn mit folgendem Code werden ALLE Punkte gezählt ... ob man sich in einem anderen Raum als der Lobby befindet oder die ersten 10 Minuten, die man sich im Chat aufhält.

      Quellcode

      1. sub logoutPerformed
      2. {
      3. my($self,$main) = @_;
      4. my $user = $main->{current_user};
      5. if($user->{group} ne '-1')
      6. {
      7. if($main->{current_user}{room} eq 'lobby')
      8. {
      9. my $onlinetime = $main->{runtime}{now} - $user->{lastlogin};
      10. $user->{onlinetime} += +$onlinetime;
      11. my $timepoints = ($main->{runtime}{now} - $user->{lastlogin}) / 60;
      12. $timepoints -= 10 if(!$user->{points} && $user->{onlinetime} < 600);
      13. $timepoints = 0 if($timepoints < 0);
      14. $user->{points} += $timepoints;
      15. }
      16. $main->saveUser($user) if($main->{current_user}{name});
      17. }
      18. }


      Ich weiß so langsam nicht mehr, wie ich die Sache in Angriff nehmen soll.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DangerLes“ ()