Samp Rcon API PHP

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,


    Ich suche einen PHP Codeschnippsel, mit dem ich bei eingeben von dem Namen in ein Feld den jeweiligen Spieler kicke und dass es mit mit nem Button (onClick) diesen auch kickt, würde mir sehr weiter helfen, und das wäre echt sehr nett, wenn ihr mir damit für mein Admin-Panel weiter helft

  • Ich mache dir mal ein Beispiel, da ich noch nicht so mit Javascript vertraut bin mache ich es nicht mit "onClick".


    Zuerst einmal erstellst du das Inputfeld mittels HTML.

    PHP
    <form method="post" action="kickPlayer.php">
    	<input type="text" name="pname_k">
    	<button type="submit">Kicken</button>
    </form>


    Dann erstellst oben im Head Bereich eine Verbindung zum Server her.

    PHP
    <?$rcon = new SampRconAPI('ip', port, 'rconpw');?>


    Dann lassen wir den Spieler kicken.

    PHP
    <?
    	if(!empty($_POST["pname_k"])){
    		$rcon->playerKick(strval($_POST["pname_k"]));
    		//andere aktionen
    		break;
    	}
    ?>


    Musst den Code etwas anpassen.


    mfg :thumbup:


  • Danke, aber egal welchen Namen ich nun in das Feld eingebe, es kickt immer ID 0, weist du da weiter?

  • Zitat

    Danke, aber egal welchen Namen ich nun in das Feld eingebe, es kickt immer ID 0, weist du da weiter?


    Ja, du sollst ja auch eine ID dort eingeben, ich habe keine Ahnung wie man das Regeln könnte das auch ein Name akzeptiert wird.
    Ich denke du kannst das geschickt mit einem Filterscript regeln, benutzt du MySQL ?


    mfg :thumbup:

  • Okay, dann orientiere dich mal an meinem Quellcode:


    Pawn


    //Timer aufrufen (OnGameModeInit o.ä)
    SetTimer("@CheckACPKick", 5000, true);


    @CheckACPKick();
    @CheckACPKick(){
    for(new i, kn[MAX_PLAYER_NAME], query[128];i<cache_get_row_count(yourhandle);i++){
    if(cache_get_field_content_int(i, "kicking", yourhandle)){
    cache_get_field_content(i, "kickname", kn);
    if(strlen(kn)>0){
    mysql_format(yourhandle, query, sizeof query, "UPDATE `kickPlayers` SET `kicking`=0 WHERE `kickname`='%e'", kn),
    mysql_pquery(yourhandle, query, "", ""),
    Kick(ReturnID(kn));
    }
    }
    if(i>=cache_get_row_count(yourhandle))break;
    }
    return;
    }
    stock ReturnID(name[])
    {
    new strName[24];
    for(new i; i < MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) {
    GetPlayerName( i, strName, 24);
    if(!strcmp( trName, name, true)) return i;
    }
    }
    return -1;
    }


    PHP

    PHP
    <?
    	$kname=$_POST["pname_k"];
    	$kname=mysql_real_escape_string($kname);
    	$query="INSERT INTO `kickPlayers` (`kicking`,`kickname`) VALUES (1,'$kname')";
    	mysql_query($query);
    ?>


    Kann übrigens auch in den Gamemode, muss kein Filterscript sein.
    Musst eventuell den Code wieder anpassen, sowie MySQL Tabellen etc erstellen.
    Ob das die Beste lösung ist, weis ich nicht.


    mfg :thumbup:

  • Das geht auch anders, denn du kannst mit der SampQueryAPI dir ebenfalls alle Spieler ausgeben lassen in einem Array, dieses kann man anschließend überprüfen ob der Name enthalten ist und falls ja über die
    SpielerID kicken.


  • IPrototypeI:
    Dass das so mit der QAPI funktioniert ist mir klar, habe mich halt an die RQuery gehalten!


    @denni1199:
    Wenn du den einfachen Weg möchtest, dann mach es über die QAPI und nicht RAPI + MySQl Querys.


    mfg :thumbup:

    Einmal editiert, zuletzt von Kasakow () aus folgendem Grund: Fehler meinerseits

  • IPrototypeI:
    Dass das so mit der QAPI funktioniert ist mir klar, habe mich halt an die RQuery gehalten!
    Dir ist dort aber ein kleiner Fehler gekommen.

    PHP
    if($i['nickname'] === $name)


    zu

    PHP
    if($i['nickname'] == $name)


    Wo ist da ein Fehler? Das ist auch ein Operator wie "==".
    Der Unterschied liegt darin, der "==" Operator überprüft ob der Wert gleich ist.
    Der "===" Operator hingegen, ob der Wert identisch zum ersten, bzw. vom gleichen typ ist.

  • Das geht auch anders, denn du kannst mit der SampQueryAPI dir ebenfalls alle Spieler ausgeben lassen in einem Array, dieses kann man anschließend überprüfen ob der Name enthalten ist und falls ja über die
    SpielerID kicken.



    IPrototypeI:
    Dass das so mit der QAPI funktioniert ist mir klar, habe mich halt an die RQuery gehalten!


    @denni1199:
    Wenn du den einfachen Weg möchtest, dann mach es über die QAPI und nicht RAPI + MySQl Querys.


    mfg :thumbup:


    Erhalte den Fehler Code

    Code
    Parse error: syntax error, unexpected T_VARIABLE, expecting '{' in ..... on line 15



  • "Alle namen vom Server hintereinander geschrieben" Nicht Erfolgreich gekickt


    Scheint irgendwas noch nicht ganz zu funktionieren

  • "Alle namen vom Server hintereinander geschrieben" Nicht Erfolgreich gekickt


    Scheint irgendwas noch nicht ganz zu funktionieren


    Zum einen sind das hier meine Verbindungsdaten von meinem Homeserver

    PHP
    $query = new SampQueryAPI('localhost', 7777);
    		$rcon = new SampRconAPI('localhost', 7777, 'changeme1');


    und zum anderen ist das der Beispielname ('Unknown') mit dem ich die Funktion vorher kurz getestet habe


    PHP
    kickPlayerByName('Unknown',$query,$rcon)
  • Zum einen sind das hier meine Verbindungsdaten von meinem Homeserver

    PHP
    $query = new SampQueryAPI('localhost', 7777);
    		$rcon = new SampRconAPI('localhost', 7777, 'changeme1');


    und zum anderen ist das der Beispielname ('Unknown') mit dem ich die Funktion vorher kurz getestet habe


    PHP
    kickPlayerByName('Unknown',$query,$rcon)



    Bewusst ist mir das, dass es deine Verbindungsdaten sind.


    Das mit dem Unknown habe ich auch verstanden, aber wie krieg ich hin, dass ich nicht immer die Namen in das Feld schreiben muss, wo bei dir Unknown steht?,