Ein neues Thema erstellen  Auf das Thema antworten  [ 19 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 24.05.2003, 21:58 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
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 ;)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 24.05.2003, 23:14 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Sicher, dazu verwendet man plugin_info().

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.05.2003, 07:11 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
ach danke, dazu hab ich jetzt genau das passende gefunden :D
http://www.ravenousbugblatterbeast.pwp. ... ech-1.html


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.05.2003, 15:46 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.05.2003, 17:47 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
...hat sich erledigt!! :wink:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 30.05.2003, 14:07 
HLDS Team
Benutzeravatar

Registriert: 21.10.2002, 14:08
Beiträge: 1205
spammer :)

_________________
Die Expansion der Knolle verhält sich reziprok proportional zur intellektuellen Kapazität der kultivierenden Agrar-Ökonomen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 10:41 
HLDS Team
Benutzeravatar

Registriert: 21.10.2002, 12:15
Beiträge: 830
Wohnort: Hannover
hehe
unser progger
ich sehe da nur ne menge farben :)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 10:43 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
wo sind farben?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 10:53 
HLDS Team
Benutzeravatar

Registriert: 21.10.2002, 12:15
Beiträge: 830
Wohnort: Hannover
auf dem link :)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 11:40 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
achso.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 13:19 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 13:50 
HLDS Team
Benutzeravatar

Registriert: 21.10.2002, 12:15
Beiträge: 830
Wohnort: Hannover
darum wolltest du die wonids von mir haben :)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 13:51 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
poste mal den code

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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 14:16 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
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;
}


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 14:55 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 15:15 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
ich glaube dass man beides einigermaßen hinkriegen kann


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 16:09 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
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 :)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 16:14 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05.06.2003, 17:50 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 19 Beiträge ] 


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de
Original Design von "[ Half-Life Admin Mod © Alfred Reynolds 2000-2003 ] - [ site design by Jägermeister ]"