Beiträge von d0ma

    Wie einfügen ?


    Du lädst es hoch und führst es aus :)


    Natürlich müssen die Dateiberechtigungen stimmen (ausführbar 7) und das .sh Script sollte mit dem UNIX Zeichensatz gespeichert sein


    Code
    cd /gehe/zum/dateipfad
    ./dateiname.sh


    Es gibt zahlreiche Feuerwehr Systeme in dem dies vorkommt.
    Wo man nur anhand eines Feuerlöschers erstellte "Feuer" löschen kann. Nur die Frage lautet hier, wie!? :thumbup:


    GetPlayerPos
    GetPlayerFacingAngle
    GetPlayerCameraUpVector


    Mathematik und Vektorrechnung :)


    100% genau kann man das in SA-MP bisher nicht machen ^^

    Weißt du was concat tut ? oder einfach so verwendet ?


    concat verbindet alle angegebenen Werte/Strings ;)


    Beispiel:

    SQL
    concat('hallo','DU','da')


    ergibt:
    "halloDUda"


    also wenn du, wie in deinem Code, folgendes verwendest:

    SQL
    concat(salt, sha1(...))


    dann wird die Spalte "salt" und das Ergebnis von sha1 verbunden :D


    Ich vermute mal stark, dass es gar keine "salt" Spalte bei dir gibt

    Hat mal wer ne pawn Funktion für mich, die eine "zufällige" 16 Cells Zeichenkette erzeugt?
    Oder weiß jemand, obs ne Funktion gibt, mit der man eine Zahl (Decimal) in ein Zeichen umwandeln kann ? (A là ASCII)


    http://www.asciitable.com/


    0+48 = '0'
    1+48 = '1'
    2+48 = '2'
    3+48 = '3'
    ...
    9+48 = '9'


    die Zahl + 48 ergibt den ASCII wert!


    Funktion ? ganz einfach gesehen geht es auch so:
    format(string, sizeof(string), "%d", 1746254); // 1746254 in Zeichenkette einfügen (ASCII Werte dann)


    Threads Threads und nochmal Threads :cursing:


    Du verwendest das ganze bestimmt in solch einer Art:
    variable[playerid] = GetUserID(playerid);
    bzw.
    if( GetUserID(playerid) .... )


    Falls die Vermutung stimmt:

    • GetUserID( ... ) return't nichts, Folge: immer 1


    Das ganze HTTP(...) läuft threaded ab (wie bei den neusten MySQL Plugins)
    Kurz gesagt: Du erhältst das Ergebnis deines HTTP( ... ) Aufrufes nicht sofort, sondern erst zu einem späteren Zeitung (deswegen bringt auch dein "return" in "UserIDGet" nichts mehr)


    Ablauf von unterhalb stehendem Code(genaue Erklärung)

    • variable[playerid] = GetUserID(playerid);
    • GetUserID(playerid) wird aufgerufen
    • Die HTTP(...) Anfrage wird gesendet und rutscht in den Hintergrund
    • GetUserID(playerid) wird beendet
    • Hier der Fehler: "variable[playerid]" erhält den Wert 1, da GetUserID keinen return Wert besitzt
    • Nun scheint alles geschehen zu sein... aber die HTTP(...) Anfrage wurde bis jetzt noch gar nicht vom Server fertig gestellt.
    • Alle Funktionen des Servers laufen nun weiter bis die HTTP(...) Anfrage fertig gestellt wurde (Neue Spieler können connecten, disconnecten, alles mögliche eben)
    • (Ein paar Augenblicke später) Sofern die HTTP(...) Anfrage nun fertig ist wird dein UserIDGet ausgeführt
    • Leider landet dein "return strval(data);", wie du schon vermuten wirst, im nirgendwo (der ganze Rest wurde ja leider oberhalb schon (falsch) getan :whistling: )


    Der rot markierte Teil:

    • Beschreibt den eigentlichen Sinn des Aufbaus von HTTP(...), der Server kann weiterarbeiten während die HTTP-Anfrage ausgeführt wird (wie bei den neusten MySQL Plugins)
    • Zum anderen ganz wichtig: Der Server arbeitet weiter während die HTTP Anfrage im Hintergrund ist..... hm folgende Situation in meinem Kopf:

      • Spieler A(id 0) will sich Registrieren
      • Die HTTP Anfrage wird angefordert
      • Spieler A(id 0) verlässt den Server
      • Spieler B(id 0) betritt den Server
      • Die HTTP Anfrage wird fertig gestellt und ruft "UserIDGet" für ID 0 auf
      • KONFLIKT! Dein UserIDGet wird für einen ANDEREN User ausgeführt... so können möglicherweiße Accounts geklaut werden(?)



    Da denkt man doch nur noch, was ein Misst dieses Threading... :wacko:
    :D


    Hier mein Vorschlag: (ABER nur wenn du das oberhalb auch gut inspiziert hast! :D )

    new USERid[MAX_PLAYERS];
    stock GetUserID(playerid) // LoadUserID währe im dem Sinne vll ein besserer Name :p
    {
    new query[128],GetName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,GetName,MAX_PLAYER_NAME);
    format(query, sizeof query, "page=id&name=%s", GetName);
    HTTP(playerid, HTTP_POST, "dt-rp.de/server/register.php", query, "UserIDGet");
    }
    public UserIDGet(playerid, response_code, data[])
    {
    if(response_code != 200)
    {
    SendClientMessage(playerid, cRed, "Fehler im System! Versuche deine Registeriung später erneut!");
    Kick(playerid);
    }
    else
    {
    if(!strcmp(data,"Error",true))
    {
    SendClientMessage(playerid, cRed, "Fehler im System! Versuche deine Registeriung später erneut!");
    Kick(playerid);
    return 1;
    }
    else
    {
    USERid[playerid] = strval(data);
    return 1;
    }
    }
    return 1;
    }


    ACHTUNG!: Das eliminiert NICHT mein oben als "KONFLIKT!" markiertes Problem ;) Vll. fällt dir dazu selber was ein... der Beitrag wird mir allmählich zu lange

    danke wie kann ich mir NUR die 7. Stelle printen lassen ?
    mit print("%s string",str[7]); bekomm ich 7 stellen. Und wenn ich ein String mit "format" fülle werden doch standartmäßig stellen 0-15 verwendet für meine Zahl.


    str[7] ist die 8te Stelle! [0] gibt es auch...


    zum Problem: du musst %c (einzelnes Zeichen) verwenden, mit %s wird der ganze Rest ausgegeben :wacko:


    Hier Beispiele zur Verwendung:

    if(str[6] == '1') //überprüft ob an SIEBTER stelle eine 1 steht
    if(str[6] == '0') //überprüft ob an SIEBTER stelle eine 0 steht
    printf("7te stelle: %c", str[6]);

    Das kann keiner genau sagen wo auf einmal die Tausend russischen Spieler herkommen... ;) Vll. lief da drüben was in den Medien oder durch irgendein anderes Spiel kamen viele auf SA-MP und das in kürzester Zeit.(wird wohl der Hauptgrund sein)


    Ich dachte ich schreibe mal etwas dazu, weil ich eure Theorien(bzw. Heulereien) so nicht ansehen kann :p

    Server-Monitor
    http://gta-sa-mp.de/monitor/


    Beschreibung:
    Mit dieser kleinen Seite könnt ihr schnell & einfach den Status eures (Lieblings-) Servers in Form eines Bildes darstellen lassen. Diese Bilder könnt ihr problemlos in eurer Signatur(wie auch in meiner eigenen Signatur zu sehen ist) bzw. in euren Beiträgen unterbringen. Viel mehr gibt es dazu nicht zu sagen, Anleitung findet ihr am Ende des Beitrags :whistling:


    Vorschau:






    So geht es:


    du verstehst meinen Beitrag nicht, da steht nicht die Lösung.... sondern dein Fehler beschrieben :D


    Du musst in Spielderdatei[64] den Pfad zur Spielerdatei speichern... ohne dem wird gar nichts passieren

    hier erstellst du die Spielerdatei variable:
    new Spielerdate[64];



    und hier verwendest du die Spielerdatei variable:
    dini_IntSet(Spielerdatei,"Banned",1);
    dini_IntSet(Spielerdatei,"TBan",gettime() + zeit);


    ABER WO setzt du die Spielerdatei variable ? In der variable steht zu keinem Zeitpunkt der Pfad zur Spielerdatei, da dieser Pfad nirgends in Spielerdatei gespeichert wird...