AdminMod.de https://www.adminmod.de/ |
|
Autogag erweitern https://www.adminmod.de/viewtopic.php?t=9833 |
Seite 1 von 1 |
Autor: | Belzebub [ 17.06.2006, 15:28 ] |
Betreff des Beitrags: | Autogag erweitern |
Hi, ich bins mal wieder ! Zum Problem : Wir haben auf unserem Server in letzter Zeit vermehrt Spezis, die sich mehrfach in ihrer Ausdrucksweise vergreifen ... da ich aber nicht alle bannen möchte die sich in der Wortwahl vergreifen (jeder kann mal ein schlechten Tag haben), hatte ich die Idee, Rindys Autogag um 1 Funktion zu erweitern! Kann mir einer von euch eine Funktion einbauen, wo eine Datei mit Steam_IDs erstellt wird, wo die Leute drin stehen, die den Chat nicht mehr benutzen dürfen und das Plugin dann bei connect vergleicht und dementsprechend handelt ? So nach dem Motto : admin_pergag (Permanent-Gag) Ich hau Rindys Quellcode hier nochmal kurz rein Code: #include <adminlib> #include <plugin> #define MAX_TIME 30 new g_Version[] = "0.8"; new g_LastTime[MAX_PLAYERS]; new g_NumSaid[MAX_PLAYERS][MAX_TIME]; new g_GagTime[MAX_PLAYERS]; new g_LIMIT = 3; new g_TIME = 3; new g_LIMIT2 = 10; new g_TIME2 = 15; new g_war; public plugin_init() { plugin_registerinfo("Rinde's Autogag Plugin","Auto gags flooders",g_Version); plugin_registercmd("say","HandleSay",ACCESS_ALL,""); plugin_registercmd("say_team","HandleSay",ACCESS_ALL,""); if(!get_vaultnumdata("AF_LIMIT",g_LIMIT)) { set_vaultnumdata("AF_LIMIT",g_LIMIT); } if(!get_vaultnumdata("AF_TIME",g_TIME)) { set_vaultnumdata("AF_TIME",g_TIME); } if(!get_vaultnumdata("AF_LIMIT2",g_LIMIT2)) { set_vaultnumdata("AF_LIMIT2",g_LIMIT2); } if(!get_vaultnumdata("AF_TIME2",g_TIME2)) { set_vaultnumdata("AF_TIME2",g_TIME2); } g_TIME = min(MAX_TIME,g_TIME); g_TIME2 = min(MAX_TIME,g_TIME2); return PLUGIN_CONTINUE; } public plugin_connect(HLUserName,HLIP,UserIndex) { updatewar(); g_LastTime[UserIndex] = 0; g_GagTime[UserIndex] = 0; return PLUGIN_CONTINUE; } public HandleSay(HLCommand,HLData,HLUserName,UserIndex) { if(g_war) return PLUGIN_CONTINUE; if(access(ACCESS_IMMUNITY,"")) return PLUGIN_CONTINUE; new CurTime = systemtime(); if(g_LastTime[UserIndex] + g_GagTime[UserIndex] > CurTime) { g_GagTime[UserIndex] += 2; new UserName[MAX_NAME_LENGTH]; new Text[80]; convert_string(HLUserName,UserName,MAX_NAME_LENGTH); snprintf(Text,80,"You are still flooding the server and can't chat the next %i seconds.",g_LastTime[UserIndex] - CurTime + g_GagTime[UserIndex]); messageex(UserName,Text,print_chat); selfmessage(Text); return PLUGIN_HANDLED; } new SecsAgo = CurTime - g_LastTime[UserIndex]; new i,j; new Total; g_LastTime[UserIndex] = CurTime; g_GagTime[UserIndex] = 0; j = max(SecsAgo,g_TIME); for(i=g_TIME2-1;i>=j;i--) { g_NumSaid[UserIndex][i] = g_NumSaid[UserIndex][i-SecsAgo]; Total += g_NumSaid[UserIndex][i]; } i = Total; for(j=j-1;j>=SecsAgo;j--) { g_NumSaid[UserIndex][j] = g_NumSaid[UserIndex][j-SecsAgo]; Total += g_NumSaid[UserIndex][j]; } Total += 1; if(Total - i >= g_LIMIT) g_GagTime[UserIndex] = g_TIME; if(Total >= g_LIMIT2) g_GagTime[UserIndex] += g_TIME2; for(i=min(SecsAgo,g_TIME2)-1;i>=0;i--) { g_NumSaid[UserIndex][i] = 0; } g_NumSaid[UserIndex][0] += 1; if(!g_GagTime[UserIndex]) return PLUGIN_CONTINUE; new UserName[MAX_NAME_LENGTH]; new Text[80]; convert_string(HLUserName,UserName,MAX_NAME_LENGTH); snprintf(Text,80,"You are flooding the server and can't chat the next %i seconds.",g_GagTime[UserIndex]); messageex(UserName,Text,print_chat); return PLUGIN_HANDLED; } updatewar() { static value[10]; get_serverinfo("war",value,10); g_war = check_param(value); }Wäre echt nett, wenn das einer einbauen könnte ! CU, Belzebub |
Autor: | [WING] Black Knight [ 17.06.2006, 20:26 ] |
Betreff des Beitrags: | |
Hmmm, das könnte etwas schwieriger werden, wenn die gewünschte Datei größer wird. Für wieviele Spieler ist es denn gedacht? |
Autor: | Belzebub [ 17.06.2006, 23:58 ] |
Betreff des Beitrags: | |
Die Datei sollte schon mehrere hundert IDs fassen können |
Autor: | [WING] Black Knight [ 18.06.2006, 00:07 ] |
Betreff des Beitrags: | |
Tja, da liegt halt der Hund begraben. Es ist nicht performant. Jedesmal, wenn jemand auf den Server kommt, wird diese Datei durchsucht. Und das auslesen von Dateien ist nicht gerade schnell. Bei großen Dateien kann das schon mal zu Lags führen. Die Alternative wären Dateien für einzelne Personen. Dadurch würde viele kleine Dateien entstehen, die sehr viel Platz wegnehmen (bei einer normalen Partionierung bis zu 16 kB pro Datei, obwohl sie eigentlich nur 1 Byte groß ist). Also ich wäre da konsequenter. Wer sich nicht benehmen kann, fliegt! Bei mir setzt es auch bei verbalen Ausuferungen sofort einen permanenten Bann. |
Autor: | Belzebub [ 18.06.2006, 00:15 ] |
Betreff des Beitrags: | |
Nunja, stimmt schon ... Ich hab z.B. in HLGuard über 4500 SteamIDs als gebannt markiert ... wenn jemand den Server joint, wird diese Datei also auch jedesmal durchgeforstet ... genau wie bei Antifake ... die DB Datei umfasst über 1 MB ... von lags wenn jemand connectet oder rausgeht keine Spur ... Ich würde das aber doch gerne testen, weil mir viel dran liegt ! Ist es viel Aufwand das zu scripten ? Ich würde das gerne selber machen, nur fehlen mir bei der Sache einfach die Programmier Kenntnisse ... Würde mich freuen, wenn du das trotzdem einbauen könntest pls ! |
Autor: | [WING] Black Knight [ 18.06.2006, 11:49 ] |
Betreff des Beitrags: | |
HLGuard dürfte seine Bans an HLDS weitergeben. Dort liegen die Bans dann im Speicher und das Plugin braucht sich um nichts mehr zu kümmern. Das Antifakeplugin benutzt die Variante mit mehreren Dateien. Das, was Du meinst ist die Indexdatei. Wäre mal Zeit für ein Purge. Momentan habe ich keine Zeit für sowas. Ganz trivial ist es leider nicht. Vielleicht kann ja Sir Drink a lot oder Rinde etwas Zeit erübrigen. |
Autor: | Belzebub [ 15.07.2006, 02:33 ] |
Betreff des Beitrags: | |
Ich habs übrigens inzwischen zusammen gebastelt ... mithilfe der Vault.ini! CU, Belzebub |
Seite 1 von 1 | Alle Zeiten sind UTC+01:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |