Beiträge von Tion

    Wenn einem da mehr geholfen wird bzw man schneller eine Antwort bekommt, wieso sollte man dass dann nicht in Anspruch nehmen?

    ... warum soll ich auf Toilette gehen, wenn ich genau so gut an jede Ecke pinkeln kann ? Geht doch schneller ?


    ... vielleicht weil das der falsche Bereich ist ? Auch in meinem Beispiel ?

    Vielleicht auch die Distanz zum Punkt betrachten, um mehr/weniger Damage zu geben ? Float damage = 100.0 - ((bombex - playerx)^2.0 + (bombey - playery)^2.0)^0.5; Wenn die Bombe auf einem platzt, verliert man 100 leben, je weiter weg man ist, desto mehr ;)


    e: Code correction

    Warum nutzt du noch extra "v" zum Zählen, wo i doch sowieso gezählt wird ? :O
    new string[12];


    for(new i=0; i<sizeof(Polizeiauto); i++)
    {
    format(string,sizeof(string),"PD %d",(i + 1)) ;
    SetVehicleNumberPlate(Polizeiauto[i],string);
    }
    Frisst doch nur mehr Resourcen - wenn auch nur kurz, aber trotzdem :D

    Bei OnPlayerSpawn: RemoveBuildingForPlayer(playerid, MODELLID, X DES MODELLES, Y DES MODELLES, Z DES MODELLES, RADIUS);Dann entfernt er die Modelle mit der ID MIDELLID in einem Radius von RADIUS um den Punkt X/Y/Z

    Ein paar mal nachgefragt, ein paar Ankündigungen & ich bin erster :P


    Vorab: Das hier sind nur die Basics - um Sachen wie Shops etc. müsst ihr euch selber kümmern ;)
    Ich werde hier auch nur die Funktionen vorstellen, also werde ihr hier nichts OOP sehen - nicht mal selbstgeschriebene Funktionen :whistling:


    Fangen wir direkt an, indem wir eine Session initialisieren.
    Wichtig: Die Session muss initialisiert werden, bevor das erste Zeichen ausgegeben wird - das liegt damit zusammen, dass die Session ein Cookie erstellt, was der Webserver im Header sendet - also muss es vor der ersten Ausgabe kommen ;)


    Den Anfang legt das HTML-Grundgerüst ( HTML5 ), was wir sicher alle kennen :thumbup:

    PHP
    <?php session_start(); ?><html lang="de">  <head>    <meta charset="utf-8" />    <title>Mein UCP</title>  </head>  <body>    [ Webseiteninhalt hier rein ]  </body></html>


    Fangen wir mit unserer ersten Abfrage ab, ob der Benutzer eingeloggt ist:

    PHP
    <?php  if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true)  {    // Hier ist der Benutzer eingeloggt  }  else  {    // Hier nicht  }?>


    Wenn er nicht eingeloggt ist, unterscheiden wir noch mal, ob er das Formular abgesendet hat, oder nicht:

    PHP
    <?php  if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true)  {    // Hier ist der Benutzer eingeloggt  }  else  {    // Der Benutzer ist nicht eingeloggt    if(isset($_POST['username']) && isset($_POST['password']))    {      // Das Formular ist abgesendet worden -> verarbeiten    }    else    {      // Das Formular ist nicht abgesendet      echo <<<FORMULAR        <form action="index.php" method="post">          Benutzername:<br />          <input type="text" name="username" /><br />          Passwort:<br />          <input type="password" name="password" /><br />          <input type="submit" value="Absenden" />        </form>FORMULAR;    }  }?>


    Wenn wir die Seite jetzt in einem Browser aufrufen, werden wir das Formular sehen, und beim Absenden, nichts.
    Was wir jetzt machen, wir verbinden uns auf den FTP-Server und downloaden die Benutzerdatei. Dann prüfen wir, ob sie erfolgreich gedownloaded wurde - falls ja, prüfen wir das Passwort. Ist auch das richtig, loggen wir den Benutzer ein:

    PHP
    <?php  if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true)  {    // Hier ist der Benutzer eingeloggt  }  else  {    // Der Benutzer ist nicht eingeloggt    if(isset($_POST['username']) && isset($_POST['password']))    {      // Das Formular ist abgesendet worden -> verarbeiten      // Verbinden zu dem FTP-Server "127.0.0.1" auf Port 21      $ftp = ftp_connect("127.0.0.1", 21);      // Einloggen mit dem Benutzer "bla" und dem Passwort "blub"      ftp_login($ftp, "bla", "blub");      // Wechseln in das Verzeichnis "scriptfiles/Accounts"      ftp_chdir($ftp, "scriptfiles/Accounts");      // Versuche, die Datei "benutzername.ini" zu downloaden.      // Der zweite Parameter gibt den Namen auf dem Webspace an, der dritte auf dem FTP-Server. Mit dem viertem sagen wir, dass wir die Datei in dem ASCII-Modus haben wollen.      ftp_get($ftp, 'cache/'. $_POST['username'] .'.ini.cache', $_POST['username'] .'.ini', FTP_ASCII);      // Prüfen, ob die Datei existiert. Wenn ja, download erfolgreich      if(file_exists('cache/'. $_POST['username'] .'.ini.cache'))      {        // Der Benutzer existiert - wir lesen seine Datei aus ( die wir gedownloaded haben )        // Dazu nutzen wir parse_ini_file - das geht die Datei zeilenweise durch und macht aus einer Zeile "Key=xxx" folgendes: $array['Key'] = "xxx"        $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache');        // Jetzt prüfen wir, ob das Passwort stimmt. WICHTIG: Bei einem GF müsst ihr das PW evtl. verschlüsseln !        if($player['Key'] == $_POST['password'])        {          // Der Benutzer hat sich erfolgreich eingeloggt          echo 'Du hast dich erfolgrecih eingeloggt.';          // Jetzt setzen wir die Session-werte:          $_SESSION['logedin'] = true;          $_SESSION['user'] = $_POST['username'];        }        else        {          // Die Passwörter stimme nicht überein          echo 'Das Passwort ist falsch !';        }      }      else      {        // Der Benutzer existiert nicht        echo 'Der Loginist falsch !';      }    }    else    {      // Das Formular ist nicht abgesendet      echo <<<FORMULAR        <form action="index.php" method="post">          Benutzername:<br />          <input type="text" name="username" /><br />          Passwort:<br />          <input type="password" name="password" /><br />          <input type="submit" value="Absenden" />        </form>FORMULAR;    }  }?>


    Aus Übersichtsgründen kommt jetzt nur noch der obere Teil ;)

    PHP
    <?php  if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true)  {    // Hier ist der Benutzer eingeloggt    $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache');    echo'Wilkommen im Controlpanel, '. $_SESSION['username'] .'<br />'; // <- erinnert ihr euch ? Die haben wir bei dem Login gesetzt ;)    echo'Du bist Level '. $player['Level'] .'<br />';  // In der Datei steht "Level=5", dann steht hier "Du bist Level 5"    if($player['ALevel'] >= 1) // Wenn das ALevel ( Godfatherisch für AdminLevel ) größer als 1 ist, das auch ausgeben      echo'Du bist Admin Level '. $player['ALevel'] .'<br />';  }  else  {    [...]


    Und hier noch mal alles zusammen:

    PHP
    <?php   session_start();  // Eine neue Session-ID bei jedem Aufruf generieren - nur beim Login geht schlecht,  //  da vorher Text ausgegeben wird und ich euch nicht mit OutputStream-Bufferring belästigen möchte  //  „false“ bedeutet, alle Variablen nicht löschen.  session_regenerate_id(false);?><html lang="de">  <head>    <meta charset="utf-8" />    <title>Mein UCP</title>  </head>  <body><?php  // Einrücken müsst ihr selber :P  if(isset($_SESSION['logedin']) && $_SESSION['logedin'] == true)  {    // Hier ist der Benutzer eingeloggt    $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache');    echo'Wilkommen im Controlpanel, '. $_SESSION['username'] .'<br />'; // <- erinnert ihr euch ? Die haben wir bei dem Login gesetzt ;)    echo'Du bist Level '. $player['Level'] .'<br />';  // In der Datei steht "Level=5", dann steht hier "Du bist Level 5"    if($player['ALevel'] >= 1) // Wenn das ALevel ( Godfatherisch für AdminLevel ) größer als 1 ist, das auch ausgeben      echo'Du bist Admin Level '. $player['ALevel'] .'<br />';  }  else  {    // Der Benutzer ist nicht eingeloggt    if(isset($_POST['username']) && isset($_POST['password']))    {      // Das Formular ist abgesendet worden -> verarbeiten      // Verbinden zu dem FTP-Server "127.0.0.1" auf Port 21      $ftp = ftp_connect("127.0.0.1", 21);      // Einloggen mit dem Benutzer "bla" und dem Passwort "blub"      ftp_login($ftp, "bla", "blub");      // Wechseln in das Verzeichnis "scriptfiles/Accounts"      ftp_chdir($ftp, "scriptfiles/Accounts");      // Versuche, die Datei "benutzername.ini" zu downloaden.      // Der zweite Parameter gibt den Namen auf dem Webspace an, der dritte auf dem FTP-Server. Mit dem viertem sagen wir, dass wir die Datei in dem ASCII-Modus haben wollen.      ftp_get($ftp, 'cache/'. $_POST['username'] .'.ini.cache', $_POST['username'] .'.ini', FTP_ASCII);      // Prüfen, ob die Datei existiert. Wenn ja, download erfolgreich      if(file_exists('cache/'. $_POST['username'] .'.ini.cache'))      {        // Der Benutzer existiert - wir lesen seine Datei aus ( die wir gedownloaded haben )        // Dazu nutzen wir parse_ini_file - das geht die Datei zeilenweise durch und macht aus einer Zeile "Key=xxx" folgendes: $array['Key'] = "xxx"        $player = parse_ini_file('cache/'. $_POST['username'] .'.ini.cache');        // Jetzt prüfen wir, ob das Passwort stimmt. WICHTIG: Bei einem GF müsst ihr das PW evtl. verschlüsseln !        if($player['Key'] == $_POST['password'])        {          // Der Benutzer hat sich erfolgreich eingeloggt          echo 'Du hast dich erfolgrecih eingeloggt.';          // Jetzt setzen wir die Session-werte:          $_SESSION['logedin'] = true;          $_SESSION['user'] = $_POST['username'];        }        else        {          // Die Passwörter stimme nicht überein          echo 'Das Passwort ist falsch !';        }      }      else      {        // Der Benutzer existiert nicht        echo 'Der Loginist falsch !';      }    }    else    {      // Das Formular ist nicht abgesendet      echo <<<FORMULAR        <form action="index.php" method="post">          Benutzername:<br />          <input type="text" name="username" /><br />          Passwort:<br />          <input type="password" name="password" /><br />          <input type="submit" value="Absenden" />        </form>FORMULAR;    }  }?>  </body></html>


    Werde das später noch um das Updaten der Benutzerdatei erweitern :thumbup:
    Fragen und Feedback drüft ihr gerne posten, solange es sachlich + begründet(Fragen braucht ihr nicht begründen) ist und keine Beleidigungen enthält ( muss man in diesem Board leider sagen :/ )


    Neu: SFTP-Version - benötigt ssh2-lib, einfach Packet ssh2-php nachinstallieren, wenn noch nicht getan :thumbup:


    Liebe Grüße :love:


    Tion


    e1: Session regenerate id
    e2: SFTP Versiob

    Jetzt weiss ich was ich vergessen hab komisch dass es keine errors gab

    Er kann die bei SetTimerEx keine Errors geben, weil Pawn beim compilieren ja nicht weiß, was SetTimerEx ist ;)
    Es muss übrigens als public sein ;)

    Auf der Seite war ich auch schon, das Problem ist, dass ich unter JAVA arbeite und somit sehr beschränkt bin :D
    Und es können ja durchaus mehrere Prozesse mit dem Namen "samp-server.exe" sein - deswegen darf ich den nicht einfach abknallen :/
    Ich arbeite auch aktuell unter 7 - habe keinen Windows-Server - ich bin jedoch am überlegen, ob ich den Server einfach unter Linux betreibe :D

    Ich greife von extern auf Windows zu, habe eine Clientanwendung die per Sockets angesteuert wird - das wird alles per Java exec gesteuert :/


    "Screen" kennt Windows nicht, und laut "help cmd" kann ich der CMD-Konsole keinen Identifier geben :/


    e: Stichwort Abbildname, man kann Prozesse per abbildname abschießen - nur wie setzt man den Abbildnamen :?:
    Ich bin noch googlen, wenn jemand weiß, wie, ich würde mich freuen :love:

    Hey Leute,


    Unter Linux gibt es ein supertolles Tool, was sich screen nennt.
    Für die, die es nicht kennen, damit kann man verschiedene Terminals starten und denen "Namen" ( "Session" ) geben, mit denen man die dann ansteuern kann.


    Zum Beispiel Session "server1", in der "samp-03csvr" läuft und "server2" in der "samp-03bsvr" läuft.
    Die lassen sich dann per "screen -x server1 -X quit" abschießen, und dann sind sie abgeschossen ;)


    Gibt es das auch bei Windows ? Also etwa so:

    Code
    cmd /name "server1" /c C:\Bla\Bli\Blub\
    cmd /quit "server1"


    e: Plötzlich abgesendet :O


    Ich würde mich freuen, wenn mir jemand helfen kann :thumbup:


    Tion

    ... oder sie am besten echt bannen :P


    Nein, es gab mal einen Code, mit denen konnte man die Spieler neu connecten lassen... Wenn man den vor den GMX macht... ?

    forward CarSurfing();
    public Carsurfing()
    {
    new Float:x, Float:y, Float:z;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerPos(i, x, y, z);
    if(!(GetPlayerSurfingVehicleID(i) == INVALID_VEHICLE_ID))
    {
    SetPlayerPos(i, x+2, y+2, z);
    }
    }
    }
    }


    e: /pwn