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

idee für neues plugIn
https://www.adminmod.de/viewtopic.php?t=4570
Seite 2 von 3

Autor:  Rinde [ 30.12.2002, 22:53 ]
Betreff des Beitrags: 

von allen, die den text des admins lesen können, sonst wäre es unstylisch
am besten sollten alle alles lesen können was mit dem servergespräch zu tun hat

Autor:  Sir Drink a lot [ 30.12.2002, 23:23 ]
Betreff des Beitrags: 

macht auch noch ein 'Beep'-Sound mit rein, wenn der Server antwortet :-)

Autor:  [-=THH=-]Stillsetzhut [ 30.12.2002, 23:27 ]
Betreff des Beitrags: 

Zitat:
Hehe, nein, Bio, stillsetzhut hat es falsch verstanden, backbone meint das so:

"admin_kick Player" = "say Server kick bitte Player"
Offensichtlich habe ich das ........... aber wenn ihr sowas schon veraenstalten wollt ......... SDal's Playermenu ist da sicher fuer geeignet ....... hmmm, nur muesste man vielleicht noch eine .ini fuer die unsachlichen Bestaetigungen aller LEXX the dark Zone erstellen auf die das Plugin zugreifen kann.

Eine andere Idee vielleicht noch ........... aus oben genannter Serie habe ich irgendwo noch .wav's liegen ......... und da koennte der Server ja dann mit 'Euer Wunsch ist mir Befehl Kommandant' akkustisch bestaetigen .........

greez

[-=THH=-]Stillsetzhut

Autor:  Biohazard1 [ 31.12.2002, 03:11 ]
Betreff des Beitrags: 

Sounds und Stimmen würden wohl ein wenig zu weit führen und ein Menu soll das Plugin ja eben gerade nicht haben, wenn ich Backbone da richtig verstanden habe.

Bio

PS: Die erste BETA ist gleich fertig, sie hat zwar noch recht wenig Funktionen aber ich werde sie trotzdem mal posten. Dann könnt ihr posten was euch bisher gefällt und was nicht.

Autor:  Biohazard1 [ 31.12.2002, 04:23 ]
Betreff des Beitrags: 

Code:
             /**********************************************************************
            **  Biohazards God Plugin                     v 0.1b(50)  *************
           ***    December 29th 2002              (plugin_god.sma)    ************
          ****                                                        ***********
         *****                                                        **********
        ******                                                        *********
       *******                      B E T A                           ********
      ********                                                        *******
     *********                                                        ******
    **********                                                        *****
   ***********                                                        ****
  ************  THANKS to: Backbone, DevilZero, Wipeout, Luke Sankey, ***
 *************   Sir Drink a lot                                      **
**********************************************************************/

//////////////////////////////////////////////////////////////////////
//
// Version 1.0
// ~~~~~~~~~~~~
// - original Version
// - ability to togle ff on/off
// - kick ability
// - ban ability                <- not yet
// - ability to change map      <- not yet
//
//////////////////////////////////////////////////////////////////////

#include <core> 
#include <console> 
#include <string> 
#include <admin> 
#include <adminlib> 

#define ACCESS_CONSOLE 131072
#define MAX_COM_LENGTH 10
#define MAX_REST_LENGTH 20

////////////////////   BEGIN USER SETTINGS   ////////////////////

#define ACCESS_GOD 1024                 // Access level for GOD Plugin
//#define SHOW_TIME 5                   // Duration for showing center-/typesay messages
//#define MAX_WAV_LENGTH 30             // Max. namelength of wavefiles in vault.ini
#define DEBUG 0                         // 1 - Debug mode on, 0 - Debug mode off

////////////////////    END USER SETTINGS    ////////////////////

new STRING_VERSION[MAX_DATA_LENGTH] = "0.1b(50)";
new bEnabled = 1;
new bListenMode = 0;

public HandleSay(HLCommand, HLData, HLUserName, UserIndex)
{
        // If plugin is not enabled don't waste performance here
        if (!bEnabled)
                return PLUGIN_CONTINUE;

        new sSpeech[MAX_DATA_LENGTH];
        new sUser[MAX_NAME_LENGTH];
//      new sText[MAX_TEXT_LENGTH];

        convert_string(HLData, sSpeech, MAX_DATA_LENGTH);
        convert_string(HLUserName, sUser, MAX_NAME_LENGTH);
        strstripquotes(sSpeech);

        if (check_auth(ACCESS_GOD) == 1) {
                
                ///////////////////////////// DEBUG START //////////////////////////////
                #if DEBUG
                        new Text[MAX_TEXT_LENGTH];
                        snprintf(Text, MAX_TEXT_LENGTH, "<Server> %s said: %s", sUser, sSpeech);
                        say (Text);
                #endif
                ////////////////////////////// DEBUG END ///////////////////////////////
                
                if (strcmp(sSpeech, "server?") == 0) {
                        say ("<Server> Yes, my lord ?");
                }
                
                if (bListenMode == 1) {
                        if (strcasestr(sSpeech, "kick") != -1) {
                                new sCommand[MAX_COM_LENGTH];
                                new sRest[MAX_REST_LENGTH];
                                
                                /* native strsep(sSource[], sDelimiters[], ...) */
                                strsep (sSpeech, " ", sCommand, MAX_COM_LENGTH, sRest, MAX_REST_LENGTH);
                                if (check_auth(ACCESS_KICK) == 1) {
                                        if (god_KickHim(sRest) == 1) {
                                                say ("<Server> Your wish is my order.");
                                        } else {
                                                say ("<Server> Unrecognized player.");
                                        }
                                } else {
                                        say ("<Server> Sry, I can't do that for you.");
                                }
                        } else if (strcmp(sSpeech, "make ff on") == 0) {
                                if (check_auth(ACCESS_FRIENDLY_FIRE) == 1) {

                                        ///////////////////////////// DEBUG START //////////////////////////////
                                        #if DEBUG
                                                say ("I'll enable ff 4 u");
                                        #endif
                                        ////////////////////////////// DEBUG END ///////////////////////////////

                                        say ("<Server> Your wish is my order.");
                                        exec ("mp_friendlyfire 1");
                                }
                        } else if (strcmp(sSpeech, "make ff off") == 0) {
                                if (check_auth(ACCESS_FRIENDLY_FIRE) == 1) {

                                        ///////////////////////////// DEBUG START //////////////////////////////
                                        #if DEBUG
                                                say ("I'll disable ff 4 u");
                                        #endif
                                        ////////////////////////////// DEBUG END ///////////////////////////////

                                        say ("<Server> Your wish is my order.");
                                        exec ("mp_friendlyfire 0");
                                }
                        }
                } else {
                        if (strcmp(sSpeech, "listen to me") == 0) {
                                say ("<Server> By your command...");
                                bListenMode = 1;
                        }
                }

        ///////////////////////////// DEBUG START //////////////////////////////
        #if DEBUG

        } else {
                say ("<Server> No authorization !");
        #endif
        ////////////////////////////// DEBUG END ///////////////////////////////
        
        }

        return PLUGIN_CONTINUE;
}

god_KickHim(sPlayer[] = "", iBan = 0)
{
        new maxplayers = maxplayercount();
        new i;
        new sTarget[MAX_NAME_LENGTH];
        new iDummy;
        new sDummy[MAX_AUTHID_LENGTH];

        // Loop each player to see if we have a matching name
        for(i=1; i<=maxplayers; i++) {
                strinit(sTarget);
                if (playerinfo(i, sTarget, MAX_NAME_LENGTH, iDummy, iDummy, iDummy, iDummy, sDummy)) {
                        /* native strcasecmp(sString1[], sString2[]) */
                        if (strcasecmp(sTarget, sPlayer) == 0) {
                                kick (sTarget);
                                if (iBan == 1) {
                                        ban (sTarget, 0);  // Ban permanently
                                }
                                return 1;  // Yes, we got em.
                        }
                }
        }
        return 0;  // Unknown player
}

public plugin_init()
{
        plugin_registerinfo ("God Plugin by Biohazard", "Control your server via chat.", STRING_VERSION);
        plugin_registercmd ("say", "HandleSay", ACCESS_ALL);

        return PLUGIN_CONTINUE;
}
Bisher versteht das Plugin folgende Kommandos:

server? -> Der Server antwortet mir 'Yes, my lord ?' (Dient eigentlich nur der Abfrage ob das Plugin geladen wurde)
listen to me -> Versetzt den Server in den Listenmode in dem er Chateingaben nach folgenden Schlüsselwörtern durchsucht (Server antwortet mit 'By your command...'):

make ff on -> Schaltet ff ein
make ff off -> Schaltet ff aus
kick <Playername> -> kickt den Player sofern ein Spieler mit diesem Namen existiert. Teilnamen werden bisher noch nicht unterstützt.

geplant sind noch Kommandos wie:
map <mapname>
ban <Player>
freezetime
...

Mich nervt ein wenig das die Antwort des Servers vor dem steht was ich als Admin im Chat schreibe. Scheint aber an AdminMod selber zu liegen. Evtl. weiß ja jemand einen Trick um diese unschöne Sache zu beheben.

Bio

Autor:  DarkEyes1 [ 31.12.2002, 10:21 ]
Betreff des Beitrags: 

sehr schön...

teste es gerade... 8)

***edit***
soweit ich merken konnte, keine fehler... vielleicht immer noch ne aussage, was gemacht wurde... wie z.B.: make ff on, ...wish is my order, ff on...

oder so...

das die serverantwort über der frage steht, stört nicht weiter, oder?
vielleicht hilft ein tsay...

das mit kick und dem vollständigen namen is schei....

aber das änderst du ja noch...

erster befehl: server? zweiter befehl: listen to me
dann erst führt er befehle aus... soll so, oder? is mir nur aufgefallen...

so weit, so gut...

der anfang ist gemacht... :wink:

Autor:  Biohazard1 [ 31.12.2002, 12:09 ]
Betreff des Beitrags: 

Den ersten Befehl kann man auch weglassen.

Bio

** edit **

Ich habe dem Plugin vorerst den Namen plugin_god gegeben weil es ziemlich kurz ist und ich mir so ein wenig lästiges Getippe ersparen kann. Den Namen können wir aber jederzeit ändern, da bin ich flexibel :wink:

Autor:  Sir Drink a lot [ 31.12.2002, 12:10 ]
Betreff des Beitrags: 

Bitte was wegen der Code-Struktur überlegen.

Sonst platzt Dir das Ding aus allen Nähten, wenn Du nur If Sätze benutzt.

Mache einen 2-Dim Array
Signalwoerter[MAX_SIGNAL][]={{"awp"},{"chasecam"},{"extend"},{"ff"},{"de_dust"}},usw.
einen 2-Dim Array SignalBefehl[MAX_COMMANDS][]={{"vote"},{ "verbiete die awp","erlaube die awp"}} etc.

zu diesem SignalBefehl Array dann noch passend nach MAX_COMMANDS, die auszuführenden adminmod-Befehle ExecuteCommand[MAX_COMMANDS][]={{"admin_vote_"},{"admin_restrictweapon 4 6"},{"admin_enableallweapons"}}


So. Wenn ein Admin ein Signalwort im Chat eingibt:

1. Reaktion des Servers.
Jetzt steht der Admin[UserIndex]=1. (Also noch ein Array für die Chat-Eingaben der Admins zu überprüfen)

Befehl wird dann im chat eingeben.

2. Reaktion des Servers und führt den admin-Befehl aus.
Admin[UserIndex]=0;

Ui...ich hab das so jetzt einfach aus dem Kopf hingeschrieben. Ich hoffe, man konnte mich einigermaßen verstehen.

Du brauchst also nur jeweils 2 For-next schleifen und jeweils 2 If Sätze in den For-Next Schleifen.

Die erste For-Next-Schleife läuft die Signalwörter durch. Findet er was passendes, wird bei der nächsten Chateingabe des Admins nach dem passenden Befehl mit der zweiten For-Next Schleife durchgelaufen.

Noch fragen?

NACHTRAG:
Wenn dann die Grundstruktur steht, kann sich jeder soviele Signalwörter und passende Befehle ausdenken, wie er will. Es wäre einfach zu erweitern.

Autor:  Biohazard1 [ 31.12.2002, 12:16 ]
Betreff des Beitrags: 

Ok, AdminMod Befehle führt das Plugin zwar im Moment nicht aus aber ich denke ich weiß was du meinst. Hat sich diese Technik denn in den anderen Plugins bewährt ?

Bio

** edit **

Ich denke so 'einfach' ist es aber doch nicht, da das Plugin ja die Eingabe analysiert wie beispielsweise wenn man 'kick' eingibt. Dann wird nämlich der Teil nach 'kick' in eine eigene Variable kopiert und einer neuen Funktion übergeben. Das wäre mit der Array-Lösung nicht möglich, oder irre ich da ?

Autor:  Sir Drink a lot [ 31.12.2002, 12:18 ]
Betreff des Beitrags: 

in meinem plugin_sdal_vfi benutze ich es. (Vote for it)

Da braucht man nur ein paar Sachen zu erweitern, um einen neuen Vote hinzuzufügen.

Autor:  Biohazard1 [ 31.12.2002, 12:23 ]
Betreff des Beitrags: 

Ich schau mal in dein Plugin, evtl. kann ich mir ja was abschauen. Muß leider gestehen das ich bisher keine Zeit hatte es mir anzusehen weil mir der Thread ehrlich gesagt zu lang war um ihn komplett zu lesen *schandeübermich*

Bio

Autor:  Sir Drink a lot [ 31.12.2002, 12:50 ]
Betreff des Beitrags: 

1-Chateingabe:

Admin: Server, ich möchte jemanden bestrafen.

Server: Meister, wie willst Du ihn bestrafen?

2-Chateingabe:

Admin: Server, ich möchte jemanden kicken.

Server: Meister, wen möchtest Du kicken.

3-Chateingabe:

Admin: xyz

Server: Dein Wunsch ist mir Befehl! Ich kicke xyz.


Ok. Erstes Signalwort ist "bestrafen".
Admin[UserIndex]=1;

Jetzt kommt der SignalBefehl "kicken".

Er wird mit der Schleife i = MAX_COMMANDS gesucht. Er findet "kicken" im Array an "Position" i.
Passend zur "Position" i im Array SignalBefehl findet sich an der selben Position i im Array ExecuteCommand der entsprechende Befehl "admin_kick" und Admin[UserIndex]=i;

Jetzt braucht er noch den Namen des Spielers. Also dritte Chateingabe für den Spielernamen.
plugin_exec(ExecuteCommand[Admin[UserIndex]],Chateingabe)


Ok. Das mit den 2-Dim Arrays muss man sich genauer überlegen. Man muss sie eben so anpassen, dass es immer hinhaut.

Autor:  Biohazard1 [ 31.12.2002, 13:48 ]
Betreff des Beitrags: 

Das wäre eine Möglichkeit. Mal sehen was ich machen werde...

Bio

Autor:  [WING] Black Knight [ 31.12.2002, 16:37 ]
Betreff des Beitrags: 

Hmmm, konnte noch keinen Blick in den Code werfen,

ich würde zwei 2-dimensionale Felder vewenden. Eines mit den Signalwörtern und eines mit dem zugehörigen Befehl.
Unabhängig davon ist "Server" der Hauptbefehl, der im Handlesay gecheckt wird.

Bsp. 1:
Player: Server?
Server: Ja, Meister?

Ob nun mit Fragezeichen oder ohne, würde ich das als Funaktion werten. Er gibt nur die automatische Antwort, wenn derjenige Admin ist. Keine weitere Funktion, da keine Signalwörter vorkommen. Außerdem würde ich Server nur als erstes Wort zulassen, da sonst evtl. des öfteren durch normalen Chat die Antwort heraufbeschworen wird.

Bsp. 2:
Player: Server bitte kick Player2
Server: Zu Befehl Meister!

1. Signalwort Server (Da am Anfang des Strings)
2. Signalwort kick
3. Aktion muss der String nach dem letzten Leerzeichen sein.
kick steht im ersten Array. Die Indexnummer wird an das zweite Array weitergeben und dort steht "kick ". Anschließend wird Player2 angehängt. Und der Gesamtbefehl ausgeführt. Eigentlich schön klein und simpel. Mit einer passenden Configdatei sogar einfach erweiterbar.

Mir gefällt's. Sir? Das könnten wir doch auf den Server tun?

Autor:  Rinde [ 31.12.2002, 16:56 ]
Betreff des Beitrags: 

schwierig ist noch, die server antwort nach der chatmessage auszugeben

Autor:  Sir Drink a lot [ 31.12.2002, 18:11 ]
Betreff des Beitrags: 

hier mal, wie ich es machen würde.

benötigte Plugins:

plugin_speech (nicht zwingend notwendig)
plugin_sdal_vfi

die Kommunikation wird mit dem Signalwort "server" eröffnet.

Dann ist man auf der "Hallo" Ebene.

Hier gibts die Signalwörter: fuehl, geht, helf, befehl, tschuess, auf wiedersehen.

Mit helf und befehl kommt man auf die "erste Befehls"-Ebene.

Hier sind dann die Signalwörter: "aender", "vote", "bestrafe" ausschlaggebend.

Mit dem jeweiligen Befehl kommt man dann auf die "zweite Befehls"-Ebene.

Hier muss man jeweils genauer spezifizieren, was man genau fuer einen Befehl machen möchte. Je nachdem was man auf der ersten Befehlsebene gewuenscht hat.

Bei 'aender' kann man jetzt als Signalwörter 'mp_timelimit', 'sv_gravity', 'mp_forcechasecam' und 'mp_friendlyfire' verwenden.

Bei 'vote' kann man die ganzen votes meines plugin_sdal_vfi ansteuern. (Signalwörter: slap, slay, ban, extend, map etc.

Bei 'bestrafe' kann man die Signalwörter: slap, slay etc. verwenden.

Hat man ein enstprechenden passende Befehl gewählt, kommt man zur 'Parameter'-Ebene

Hier muss man die Parameter angeben, die passen. Bei den Bestrafungen muss man jetzt direkt Teile des Namens eintippen. Oder bei den Votes einen Namen oder Zeitangabe oder irgendwas :-)
Oder bei den Änderungen eine Zahl.
Hier muss man also direkt das Richtige eingeben und darf keinen Satz mehr bilden.

Man kommt mit 'Abbruch' jederzeit aus der Kommunikation, egal auf welcher Ebene man sich befindet, raus. Wenn man noch auf der 'Hallo'-Ebene ist, kann man auch "auf Wiedersehen" oder "tschuess" sagen.

Nun ja...Habe es einfach mal so hingecodet :-) und habe mir keinerlei Gedanken über Optimierungen gemacht.

Es wird sicherlich auch einiges noch nicht klappen. Ist ja nur mal so als Idee gedacht.

Happy Testing.

Gruß und guten Rutsch,
SDal

Nachtrag:

Man muss also eine richtige Kommunikation fuehren. Ein Satz ist doch langweilig :-)

Autor:  Sir Drink a lot [ 31.12.2002, 18:32 ]
Betreff des Beitrags: 

Ich gebe mal ein Beispiel, sonst rafft es keiner:

Sir Drink a lot: Ich begruesse Dich mein Server!
Server: Hallo Sir Drink a lot! (communication activated)

Sir Drink a lot: Wie geht es Dir?
Server: Mir geht es gut, Danke der Nachfrage, Sir Drink a lot

Sir Drink a lot: Kannst Du mir helfen?
Server: Wie kann ich Dir helfen, Sir Drink a lot

Sir Drink a lot: Ich braeuchte da eine Aenderung
Server: Was oder wie willst du 'aender', Sir Drink a lot (...hm..deutsch kann er auch nicht..)

Sir Drink a lot: Ich hätte gerne das mp_friendlyfire umgestellt.
Server: mp_friendlyfire steht zur Zeit auf 1. Wie soll ich es aendern?

Sir Drink a lot: 0
Server: Ich habe mp_friendlyfire 0 gesetzt. Kann ich sonst noch was fuer Dich tun? (Sprung zurueck auf die "Hallo"-Ebene)

Sir Drink a lot: Ne...lass mal...auf wiedersehen.
Server: Auf Wiedersehen, Sir Drink a lot. Stehe jederzeit wieder zur Verfügung. (communication deactivated)

Autor:  Rinde [ 31.12.2002, 18:33 ]
Betreff des Beitrags: 

ja, ganz nett...

Autor:  Rinde [ 31.12.2002, 18:37 ]
Betreff des Beitrags: 

im chat wird es aber so aussehen:

Server: Hallo Sir Drink a lot! (communication activated)
Sir Drink a lot: Ich begruesse Dich mein Server!

Server: Mir geht es gut, Danke der Nachfrage, Sir Drink a lot
Sir Drink a lot: Wie geht es Dir?

Server: Wie kann ich Dir helfen, Sir Drink a lot
Sir Drink a lot: Kannst Du mir helfen?

Server: Was oder wie willst du 'aender', Sir Drink a lot (...hm..deutsch kann er auch nicht..)
Sir Drink a lot: Ich braeuchte da eine Aenderung

Server: mp_friendlyfire steht zur Zeit auf 1. Wie soll ich es aendern?
Sir Drink a lot: Ich hätte gerne das mp_friendlyfire umgestellt.

Server: Ich habe mp_friendlyfire 0 gesetzt. Kann ich sonst noch was fuer Dich tun? (Sprung zurueck auf die "Hallo"-Ebene)
Sir Drink a lot: 0

Server: Auf Wiedersehen, Sir Drink a lot. Stehe jederzeit wieder zur Verfügung. (communication deactivated)
Sir Drink a lot: Ne...lass mal...auf wiedersehen.

Autor:  Rinde [ 31.12.2002, 18:50 ]
Betreff des Beitrags: 

was mir grad so auffällt:
Zitat:
ihr seid alle krank :lol:

Keine Freunde mehr...jetzt muss ich mich mit dem Server unterhalten :-)

Aber macht nur mal!
Zitat:
Nun ja...Habe es einfach mal so hingecodet :-)
Gruß und guten Rutsch,
hmm.... :lol:

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