Beiträge von Austrianer

    Hast du eigentlich irgendeine Ahnung von Scripten? 8| Wen nicht such dir einen Script-Lehrer oder lass es gleich. Denn es macht sich nicht so gut, alles nachzufragen und das gleich bei so etwas leichtem.


    Wenn es Werte speichern soll, sollte man es in die SpeicherSpieler-Methode schreiben.


    Wenn man Werte laden möchte, sollte man es in die LoadAccount-Methode schreiben.


    Wenn man den Spieler dort spawnen möchte wo man die Werte hat dann unter die Methode OnPlayerSpawn.

    Hast du eine stock oder public Methode die alle Daten wenn man sich ausloggt speichert. Wie eine SpielerSpeichern-Methode und eine LoadAccount-Methode?

    Falls du eine SpielerSpeichern-Methode hast schreibst du dies hinein.


    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    dini_FloatSet(Spielerdatei,"X",x);
    dini_FloatSet(Spielerdatei,"Y",y);
    dini_FloatSet(Spielerdatei,"Z",z);


    Dann ladest du die Daten aus und zwar so. Ich verwende immer PVar. Deswegen schreibe ich es auch hier. Falls du enum verwendest, kann ich dir das auch mit enum schreiben.


    new Float:x, Float:y, Float:z;


    SetPVarFloat(playerid, "X", dini_Float(Spielerdatei,"X"));


    SetPVarFloat(playerid, "Y", dini_Float(Spielerdatei,"Y"));
    SetPVarFloat(playerid, "Z", dini_Float(Spielerdatei,"Z"));


    So setzt du die Position deines Spielers.


    SetPlayerPos(playerid, GetPVarFloat(playerid, "X"), GetPVarFloat(playerid, "Y"), GetPVarFloat(playerid, "Z"));



    Ich bin mir jetzt nicht sicher ob alles stimmt, denke aber schon.

    Am besten du speicherst die Float-Werte wo der Spieler zuletzt gewesen ist, falls du es mit Dini machst in die Datei mit oder was du halt hast.
    Dann wenn er sich wieder einloggt wird er dort gespawnt wo er sich ausgeloggt hat. Einfach wieder die Werte auslesen, falls du Dini hast.


    Mit GetPlayerPos bekommst du die Float-Werte seiner Position.


    Mit SetPlayerPos setzt du die Position wieder wo der Spieler hin soll.

    dini_IntSet(Spielerdatei,"HatNavigation",GetPVarInt(playerid,"HatNavigation"));


    Das ist keine Abfrage sondern du speicherst den Wert in die Dini-Datei ein. Egal welcher Wert da drinnen ist wird gespeichert.
    Am besten du machst eine Abfrage mit einer If-Bedingung. Mit 0 hat er noch keine Navigation und mit einer 1 hat er ein Navi.

    ocmd:kick(playerid,params[])
    {
    new otherid;
    sscanf(params, "u", otherid) return SendClientMessage(playerid,FARBE,"Benutzung: /kick [ID]");
    if(IsPlayerConnected(otherid))return SendClientMessage(playerid,FARBE,"Dieser Spieler ist nicht Online.");
    Kick(otherid);
    return 1;
    }


    So musst du es machen, weil sonst funktioniert es nicht. Weil ja sonst otherid keinen Wert bekommt.

    Am besten du machst es mit einer Schleife und testest ob jeder Spieler IsPlayerInRangeOfPoint ist. Also da brauchst du nur die Koordinaten vom Spieler speichern und schon bekommts jeder der in der Nähe des Spielers ist. Limit musst du auch setzen.

    Sieht richtig nice aus, aber ich habe eine Frage.


    Ich möchte sowas ähnliches machen mit den Adminbefehlen.


    Jedoch wie setzt man den ganzen String in den Dialog. Das wird ja eine endlose Linie, dann regt sich der Compiler auf das die Line zu lang ist.


    Könnte mir das einer bitte erklären, wie man das leicht gemacht hat, einfach nur.


    Befehl lauter Leerzeichen ~ Erklärung \n(Nächste Zeile)
    Und das mit mehr als 20 Befehlen als sind mehr als 1024 Zeichen.

    Das mit dem Where = 0 hab ich jetzt nur zum Testen gemacht. Wird eh verändert :D


    stock Fahrzeuge() {
    new result[200], id[128], typ[128];
    new id2, name[128], typ2;
    mysql_query("SELECT * FROM fahrzeuge WHERE ID=0");
    mysql_store_result();
    while(mysql_fetch_row(result)) {
    mysql_fetch_field("ID", id);
    id2 = strval(id);
    mysql_fetch_field("Name", name);
    mysql_fetch_field("Typ", typ);
    typ2 = strval(typ);
    printf("%i - %s - %i", id2, name, typ2); // Ausgabe: 0 - LSPD - 598 ~~~ Genau wie ich es wollte :D
    }
    mysql_free_result();
    }


    Habs jetzt so getestet. Und JUHU es hat endlich geklappt. Ich hab das von strickenkid ausprobiert. Jedoch leider ohne Erfolg. Die split()-Methode hat nicht funktioniert :S


    Egal jetzt hab ich es so.


    Jetzt muss ich nur noch herausfinden, wie ich die Anzahl der Einträge in einer Tabelle herausfinden. Aber ich denke das geht schon mit mysql_num_rows.


    Aber danke dir für deine große Hilfe :)


    Mfg

    Ja stimmt, wirklich dummer Fehler :wacko: Danke


    So habs jetzt mal so probiert.


    EDIT: Das vorige was in dem Post stand war ja völliger Blödsinn :D


    So nun hab ich es richtig.


    stock Fahrzeuge() {
    mysql_query("SELECT * FROM fahrzeuge WHERE ID=0");
    new result[200];
    new id, name[128], typ, x[128], y[128], z[128], r[128], f1, f2;
    mysql_store_result();
    while(mysql_fetch_row(result)) {
    sscanf(result,"p<|>isiffffii",id, name, typ, floatstr(x), floatstr(y), floatstr(z), floatstr(r), f1, f2);
    printf("%f - %f", floatstr(x), floatstr(y));
    printf("DEBUG: AddStaticVehicleEx = %i", AddStaticVehicleEx(typ,floatstr(x),floatstr(y),floatstr(z),floatstr(r),f1,f2,-1) );
    AddStaticVehicleEx(typ,floatstr(x),floatstr(y),floatstr(z),floatstr(r),f1,f2,-1);
    }
    }


    Ich hab mir jetzt jeden einzelnen Wert ausgeben lassen. Lustigerweise gibt jeder Wert der übernommen wird 0 aus. Wenn es die richtigen Daten auslesen würde, würde es gehen. Denn ich habe unten statt typ mal 598 eingesetzt und es wurde gespawned :D


    Wieso werden alle Werte als 0-Wert übernommen. :wacko:

    Speicherst du auch die Daten wenn ein Spieler den Server verlässt oder du den Server neustartest?


    Mach einfach mal einen Befehl mit /saveall der alle Daten von jedem Spieler während der Server online ist in die Dateien speichert. Dann kannst du kurz offline gehen dann sollte es funktionieren.


    Um aus einer Datei die Daten auszulesen musst du das eingeben.
    Also diesen Befehl unter LoadAccount oder wie das bei dir heißt.


    SetPVarInt(playerid, "rank", dini_Int(Spielerdatei, "rank"));


    Sonst setzt du ja nichts in die PVariable "rank". Dann ist es klar das es nicht funktioniert :)

    muss aber glaube ich so sein und wie du das sagst checke ich das nicht


    Ok dann versuche ich es dir genauer zu erklären. Gehen wir mal die Schleife durch.


    Ein Integer namens i wird mit dem Wert 0 gesetzt. Wenn i größer ist als die Anzahl der ATMs die es gibt, geht die Schleife weiter zu den If-Bedingungen.
    Wir haben 7 ATMs.


    if ( 0 > 7) {
    TEST
    } else {
    ERROR
    }


    So sieht es bei dir aus. Also das Vergleichzeichen anders machen. Dann kommt es zu den If-Bedingungen. Weil ich glaube nicht das 0 größer ist als 7.


    EDIT:


    Mein Vorposter hat die richtige Lösung gepostet. Sowas peinliches, das ich darauf nicht gekommen bin :wacko: