[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Kannst es auch ohne das Include machen.
    SetTimerEx("KickPublic", 600, false, "d", playerid);forward KickPublic(playerid);public KickPublic(playerid){Kick(playerid);return 1;}
    Dann kannst du das Kick(playerid) im PlayerLoginTimer löschen
    ---------------------
    Wie kann ich hier noch die Befehle loggen die ich per OCMD erstellt habe?
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new String[512], logtext[256];
    format(String, sizeof(String), ""SERVER_HTML"Server: "HTML_WEIS"Der Befehl ( %s ) existiert nicht. Benutze /help", cmdtext);
    new FileName[64];
    format(FileName, sizeof(FileName), "/ServerLogs/SpielerCommandLog/%s.txt", Spieler[playerid][pName]);
    new File:SpielerCommandLog = fopen(FileName, io_append);
    format(logtext, sizeof(logtext), "[%d.%d.%d][%d:%d:%d Uhr] Befehl: %s \r\n", Tag, Monat, Jahr, Stunde, Minute, Sekunde, cmdtext);
    fwrite(SpielerCommandLog, logtext);
    fclose(SpielerCommandLog);
    return SendClientMessage(playerid, -1, String);
    }

    2 Mal editiert, zuletzt von Marschl ()

  • Moinsen,


    wollte bei einem Feuer System gerne mit einbinden das auch der Feuerwehr Wagen (Fahrzeug ID 407) auch löschen kann und nicht nur Feuerlöscher. Kriegs aber irgendwie nicht geschissen.



    Code
    if(GetPlayerWeapon(playerid) == 42)

    Das ist die Zeile wo die Waffe ausgezahlt wird. Krieg aber es nicht geschissen: " IsPlayerInVehicle(playerid, 407)" mit einzubinden.

  • atmInfo[id][Object3D] = Create3DTextLabel("{F3FF02}Du kannst den Geldautomaten\nmit der Entertaste verwenden.", COLOR_WHITE, atmInfo[id][aPickupX], atmInfo[id][aPickupY], atmInfo[id][aPickupZ]+0.15, 10.0, 0, 0);


    Destroy3DTextLabel(atmInfo[atmid][Object3D]);



    C:\Users\Patrick\Desktop\- (17.09.2018)\gamemodes\German.pwn(17431) : error 017: undefined symbol "Destroy3DTextLabel"



    Geht das ganze nur mit Dynamic oder sehe ich das falsch?

  • Such doch mal selber... das ist nicht schwer.


    Die Funktion heißt Delete3DTextLabel.

  • In der Include:#define ResetMetersTraveled(%0) E@_R[%0] = 0;
    zu:
    #define ResetMetersTraveled(%0) E@_R[%0] = 0

    Vielen Dank :)


    Ich habe jetzt folgendes "Problem" ... Ich komme gerade nicht auf die Lösung ...


    Sobald ich den Motor anschalte (/motor) startet ein Timer ... das dazugehörige Callback sieht wie folgt aus:

    Das Problem ist jetzt, dass der Float wert der raus kommt (cInfo[vID][kmstand]) ... wie folgt aussieht: 1316049920.00


    Was mir noch aufgefallen ist: Ich sitze im Spiel im Fahrzeug mit der ID: 5 ... Ich lasse ja cInfo[vID][id_x] printen und vID ... cInfo[vID][id_x] gibt in der Konsole eine 5 aus ... vID jedoch gibt eine 3 aus... Woran liegt das ?


    GetCarID:


    Code
    stock getCarID(playerid){
    	for(new i = 0; i < sizeof(cInfo); i++){
         new vID = GetPlayerVehicleID(playerid);
         if(cInfo[i][id_x] == vID) return i;
    	}
    	return INVALID_VEHICLE_ID;
    }


    Ich hoffe das ist eine "kleine" Scripting frage :?:

  • Float wert

    Die Include arbeitet nicht mit Floats, nur mit ganzen Zahlen.
    Lass dir mal mit %i den Wert von GetKilometers direkt printen.


    Was mir noch aufgefallen ist: Ich sitze im Spiel im Fahrzeug mit der ID: 5 ... Ich lasse ja cInfo[vID][id_x] printen und vID ... cInfo[vID][id_x] gibt in der Konsole eine 5 aus ... vID jedoch gibt eine 3 aus... Woran liegt das ?

    Das ist richtig so. Dein vID ist in dem Fall ja der Index, mit dem auf cInfo zugegriffen wird, um auf die richtige vehicleid zu kommen.

  • Die Include arbeitet nicht mit Floats, nur mit ganzen Zahlen.Lass dir mal mit %i den Wert von GetKilometers direkt printen.


    Das ist richtig so. Dein vID ist in dem Fall ja der Index, mit dem auf cInfo zugegriffen wird, um auf die richtige vehicleid zu kommen


    Also leider gehts auch nicht mit %i ... da kommt halt in der Console folgendes raus: 1318926965


    Ich hab folgenden callback nun:


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%i", cInfo[vID][kmstand]);
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }
  • Printe bitte das GetKilometers direkt, nicht das Array.

    Das ergebnis: 1012202996


    Das ist komisch irgendwie ... Das Callback wird jede Sekunde aufgerufen.


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%i", GetKilometers(GetPlayerVehicleID(playerid)));
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }
  • Dann gibt die Funktion das falsch zurück. Was hast du denn in der Include noch angepasst? Nicht, dass dadurch ein falscher Wert zustande kommt.

    Ich habe nix angepasst, habe nur bei den Zeilen die als "Loose Identation" angegeben wurden, eingerückt. Allerdings nix entfernt oder bearbeitet. Ansonsten nur das was du sagtest mit dem ResetMetersTraveled... Das lustige ist ja: wenn ich es als %0.2f mache ... dann kommen Werte wie: 0.01, 0.02, 0.03 usw. raus.


    Code
    public setKiloMeter(playerid){
    	new vID = getCarID(playerid), string[256];
    	if(vID == INVALID_VEHICLE_ID)return 0;
    	cInfo[vID][kmstand] += GetKilometers(GetPlayerVehicleID(playerid));
    	format(string, sizeof(string), "%i km", cInfo[vID][kmstand]);
    	TextDrawSetString(Tacho_TD[6], string);
    	printf("%0.2f", GetKilometers(GetPlayerVehicleID(playerid)));
    	ResetMetersTraveled(GetPlayerVehicleID(playerid));
    	return 1;
    }

    //EDIT ich habe das Problem gelöst... Lösung:


    Ich habe in meinem Enum für cInfo bei kmstand ein Float: vor geschrieben. Nun lasse ich die Werte auch als Float in die Datenbank speichern und nun funktioniert auch das Addieren.


    MfG
    XonarZ

    Einmal editiert, zuletzt von XonarZ ()

  • Ich habe in meinem Enum für cInfo bei kmstand ein Float: vor geschrieben. Nun lasse ich die Werte auch als Float in die Datenbank speichern und nun funktioniert auch das Addieren.

    Ok, gut dass du es selbst lösen konntest! Meine Annahme, dass es ein Integer ist, war falsch, sorry dafür. Das ist allerdings in der Include auch schlecht bzw. falsch gemacht, denn die Variable ist ein Integer, die Funktion wird ebenfalls im native als Integer angegeben, im Makro allerdings wird der Wert *0.001 genommen, was es ein Float macht.


    Am besten du schreibst der Vollständigkeit halber in der Include, bei den natives (im Kommentar ganz oben) GetKilometers und GetMiles noch "Float:" davor. Dann ist es klar.


    Dass in der Include aber aus einem Float erst ein Integer gemacht wird, und anschließend wieder in ein Float umgewandelt wird, ist ungeschickt. Funktioniert zwar, ist aber nicht schön (kannst du aber natürlich nichts dafür).