AdminMod.de
https://www.adminmod.de/

nickname changes mit adminmod registrieren?
https://www.adminmod.de/viewtopic.php?t=4988
Seite 1 von 1

Autor:  MrClone [ 24.05.2003, 21:58 ]
Betreff des Beitrags:  nickname changes mit adminmod registrieren?

Ist es möglich mit einem AdminMod plugin zu registrieren ob jemand seinen nickname geändert hat, und das nur mit AdminMod, also ohne logd usw?

edit: ach und zudem, so resourcen sparend wie möglich ;)

Autor:  [WING] Black Knight [ 24.05.2003, 23:14 ]
Betreff des Beitrags: 

Sicher, dazu verwendet man plugin_info().

Autor:  MrClone [ 25.05.2003, 07:11 ]
Betreff des Beitrags: 

ach danke, dazu hab ich jetzt genau das passende gefunden :D
http://www.ravenousbugblatterbeast.pwp. ... ech-1.html

Autor:  MrClone [ 25.05.2003, 15:46 ]
Betreff des Beitrags: 

hab da ein problem,
ich erstelle eine datei mit writefile(....) unter windows dedicated und listenserver geht das, aber unter linux erstellt der keine datei, woran kann das liegen?

Autor:  MrClone [ 25.05.2003, 17:47 ]
Betreff des Beitrags: 

...hat sich erledigt!! :wink:

Autor:  aM-H|Lessie [ 30.05.2003, 14:07 ]
Betreff des Beitrags: 

spammer :)

Autor:  Wookie [ 05.06.2003, 10:41 ]
Betreff des Beitrags: 

hehe
unser progger
ich sehe da nur ne menge farben :)

Autor:  Rinde [ 05.06.2003, 10:43 ]
Betreff des Beitrags: 

wo sind farben?

Autor:  Wookie [ 05.06.2003, 10:53 ]
Betreff des Beitrags: 

auf dem link :)

Autor:  Rinde [ 05.06.2003, 11:40 ]
Betreff des Beitrags: 

achso.

Autor:  MrClone [ 05.06.2003, 13:19 ]
Betreff des Beitrags: 

falls ihr wissen wollt wozu ich das brauchte:

hab ein plugin gebastelt das sich die wonid von jedem spieler speichert der auf den serer kommt, sammt nickname, wenn dieser sein nickname wechselt wird auch der neue nickname gespeichert, dadurch kann man (mit dem befehl admin_db, oder admin_db PLAYER) alle nicks einer oder mehrerer player anzeigelassen, sowas ähnliches wie fake check :D , sehr interessant wird es auf einem durchschnittlich besuchten public server bei 2 wochen laufzeit des plugins, so 1200 wonids kommen bis dahin zusammen ;).
hinzu kommen wird noch "admin_db_del PLAYER/WONID PLAYER" um einen nickname aus der wonid db zu entfernen, außerdem noch "admin_db_wonid wonid" um sich die namen eines spielers anzeigen zu lassen auch wenn dieser gerade nicht auf dem server ist.

Autor:  Wookie [ 05.06.2003, 13:50 ]
Betreff des Beitrags: 

darum wolltest du die wonids von mir haben :)

Autor:  Rinde [ 05.06.2003, 13:51 ]
Betreff des Beitrags: 

poste mal den code

btw plane ich etwas ähnliches, bloss nicht so speicherfressend wie du

Autor:  MrClone [ 05.06.2003, 14:16 ]
Betreff des Beitrags: 

Code:
#include <core>
#include <console>
#include <string>
#include <plugin>
#include <admin>
#include <adminlib>

#define DB_ACCESS 512
new g_Version[]="1.0";

public admin_db(HLCommand,HLData,HLUserName,UserIndex)
{
  new User[MAX_NAME_LENGTH];
  new Data[MAX_TEXT_LENGTH];
  new Command[MAX_TEXT_LENGTH];
  convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
  convert_string(HLUserName,User,MAX_NAME_LENGTH);
  convert_string(HLData,Data,MAX_DATA_LENGTH);

  new sName[MAX_NAME_LENGTH];
  new sTargetWDB[200];

  new iUserWONID = 0;
  new sUserWONID[20];

  new SessionID;
  new Team;

  new iLines = 0;
  new sLine[MAX_DATA_LENGTH];
  new directory[] = "woniddb";
  new path[MAX_DATA_LENGTH];

  if(strlen(Data) > 0)
  {
    if(check_user(Data) == 1) {
      get_username(Data,sName,MAX_NAME_LENGTH);
      get_userWONID(sName,iUserWONID);
      if (iUserWONID >-2 && iUserWONID<4000000 && strlen(sName) > 0) {
        snprintf(sUserWONID,MAX_TEXT_LENGTH,"%i",iUserWONID);
        snprintf(path,MAX_TEXT_LENGTH,"%s/%s",directory,sUserWONID);
        if (fileexists(path) == 1) {
          iLines = filesize(path, 1);
          snprintf(sTargetWDB,MAX_TEXT_LENGTH,">> %s <%s>",sName,sUserWONID);
          new j = 0;
          for ( j = 1; j <= iLines ; j++ )
            if(readfile(path,sLine,j,100) != 0)
              if ((strlen(sTargetWDB) + strlen(sLine)) + 6 >= 100 ) {
                selfmessage(sTargetWDB);
                sTargetWDB = "";
                snprintf(sTargetWDB,200,"%s ^"%s^"",sTargetWDB,sLine);
              } else
                snprintf(sTargetWDB,200,"%s ^"%s^"",sTargetWDB,sLine);
          selfmessage(sTargetWDB);
        }
      }
    }
  }
  else
  {
    new MaxPlayers = maxplayercount();
    new i = 0;
    for(i=1;i<=MaxPlayers;i++) {
      if(playerinfo(i,sName,MAX_NAME_LENGTH,SessionID,iUserWONID,Team) == 1)
      {
        get_userWONID(sName,iUserWONID);
        if (iUserWONID >-2 && iUserWONID<4000000 && strlen(sName) > 0) {
          snprintf(sUserWONID,MAX_TEXT_LENGTH,"%i",iUserWONID);
          snprintf(path,MAX_TEXT_LENGTH,"%s/%s",directory,sUserWONID);
          if (fileexists(path) == 1) {
            iLines = filesize(path, 1);
            snprintf(sTargetWDB,MAX_TEXT_LENGTH,">> %s <%s>",sName,sUserWONID);
            new j = 0;
            for ( j = 1; j <= iLines ; j++ )
              if(readfile(path,sLine,j,100) != 0)
                if ((strlen(sTargetWDB) + strlen(sLine)) + 6 >= 100 ) {
                  selfmessage(sTargetWDB);
                  sTargetWDB = "";
                  snprintf(sTargetWDB,200,"%s ^"%s^"",sTargetWDB,sLine);
                } else
                  snprintf(sTargetWDB,200,"%s ^"%s^"",sTargetWDB,sLine);
            selfmessage(sTargetWDB);
          }
        }
      }
    }
  }
  return PLUGIN_HANDLED;
}

WonidDB(wonid[],name[]){
  new iLines = 0;
  new sLine[MAX_DATA_LENGTH];
  new directory[] = "woniddb";
  new path[MAX_DATA_LENGTH];

  snprintf(path,MAX_TEXT_LENGTH,"%s/%s",directory,wonid);
  if (fileexists(path) == 1)
  {
    iLines = filesize(path, 1);
    new i = 0;
    for ( i = 1; i <= iLines ; i++ )
      if(readfile(path,sLine,i,100) != 0)
        if(streq(sLine,name) == 1)
          break;

    if(i > iLines)
      writefile(path,name,iLines+60);
  }
  else
    writefile(path,name,1);

  return 1;
}

public plugin_info(HLOldName, HLNewName, UserIndex) {
  new iUserWONID = 0;
  new sUserWONID[20];
  new NewName[MAX_NAME_LENGTH];
  new SessionID;
  new Team;

  if (playerinfo(UserIndex,NewName,MAX_NAME_LENGTH,SessionID,iUserWONID,Team)==1)
    if ( strlen(NewName) > 0) {
      get_userWONID(NewName,iUserWONID);
      if (iUserWONID >-2 && iUserWONID<4000000) {
        snprintf(sUserWONID,MAX_TEXT_LENGTH,"%i",iUserWONID);
        WonidDB(sUserWONID,NewName);
      }
    }
  return PLUGIN_CONTINUE;
}

public plugin_init() {
  plugin_registerinfo("WONID DATABASE Plugin","Saves all wonids connecting to server",g_Version);
  plugin_registercmd("admin_db","admin_db",DB_ACCESS,"admin_db <WONID/NAME/NICHTS>: Listet die Wonid Datenbank auf.");
  return PLUGIN_CONTINUE;
}

Autor:  MrClone [ 05.06.2003, 14:55 ]
Betreff des Beitrags: 

Zitat:
poste mal den code

btw plane ich etwas ähnliches, bloss nicht so speicherfressend wie du
also ich hatte die Wahl zwischen viel speicher und hoche geschwindigkeit, und wenig speicher und ziehmlich langsam, hab mich fürs erstere entschieden.

Autor:  Rinde [ 05.06.2003, 15:15 ]
Betreff des Beitrags: 

ich glaube dass man beides einigermaßen hinkriegen kann

Autor:  Sir Drink a lot [ 05.06.2003, 16:09 ]
Betreff des Beitrags: 

aber das über files zu machen, ist doch schon mal eine sehr feine Sache :)

Es braucht doch nicht viel Speicher?

Meins braucht viel Speicher :) Ist aber auch dann das schnellste.

Rinde, mach mir die Baumstruktur und zeige dann mal, wie es aussieht :)

Autor:  Rinde [ 05.06.2003, 16:14 ]
Betreff des Beitrags: 

ich meine nciht arbeitsspeicher, sondern festplattenspeicher. jede datei belegt einen block auf der festplatte. ziemliche verschwendung, da dieser wohl in den seltensten fällen auch nur annähernd ausgenutzt ist. und das bei mehreren tausend dateien.

Autor:  [WING] Black Knight [ 05.06.2003, 17:50 ]
Betreff des Beitrags: 

Na ja, in der Regel mangelt es ja nicht am Festplattenplatz sondern am statischen Speicher bzw. dem durchsuchen einer Datei. Ich möchte daran erinnern, dass readfile() jedesmal die Datei öffnet bzw. schließt. Bei 1000 Zeilen und einem kompletten Durchlauf sind das 1000 mal öffnen und schließen. DAS nenne ich ineffizient.
Jetzt gibt es verschiedene Ansätze:
1. Die einfachste Methode ist die Daten statisch im Speicher abzulegen. Aber statisch sagt schon alles; es ist schnell aber begrenzt und sollte daher nur bei überschaubaren Datenmenegen eingesetzt werden.
2. Für jeden Eintrag eine Datei anlegen. file_exists() ist wesentlich einfacher abzufragen und zum anhängen von Daten muss die Datei nur einmal geöffnet werden. Das kostet Platz, aber die Festplatten von heute sind nun wirklich nicht mehr klein.
3. Hat man nun noch mehr Dateien so bietet sich eine Baumstruktur an. Z.B. die WONIDs in Einzelziffern zerteilen und aus den Ziffern Verzeichnisse machen. file_exists muss also nicht mehr durch tausende Dateien wühlen bis es etwas findet, sondern findet an Ort und Stelle gerade mal eine Datei. Ob das allerdings einen wirklichen Mehrwert hat, bezweifle ich doch ein wenig. Gebt mal in einem Verzeichnis dir oder ls <spezielle Datei> ein. Die Antwort kommt prompt.

Ich denke, dass Punkt 2 bezüglich Geschwindigkeit und Flexiblität der günstigste ist. Es mag zwar Festplattenplatzprobleme unter Filesystemen wie FAT geben, aber das dürfte wohl nicht besonders ins Gewicht fallen.

Seite 1 von 1 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/