[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Ja das habe ich schon immer drinne gehabt geht immer noch nicht

    Brauchst du an der Stelle auch nicht. Der Fehler hat damit nichts zu tun.


    Liegt der MySQL Server auf dem gleichen Server, wie der SA-MP Server? Sprich, haben diese die gleiche IP?
    Wenn ja, dann kannst du localhost bzw. 127.0.0.1 nutzen, entweder mit dem dafür angelegten User, oder dem root User, das kommt drauf an, ob du den MySQL Server selbst eingerichtet hast (eigene VM) oder ob es über einen Hoster läuft.
    Wenn nein, dann ist die Remote-Verbindung eventuell blockiert. Siehe hierzu: https://www.tecmint.com/fix-er…-server-on-127-0-0-1-111/

    sigsmall_winter.png

  • Ich habe gerade gemerkt, dass GetPlayerCameraTargetObject existiert, sehr sehr geil!
    Es ist ein Hinweis beigelegt, dieser weißt darauf hin dass die Funktion standardmäßig deaktiviert ist.
    Sie sei deaktiviert um Bandbreite zu sparen, wie sehr macht es sich denn bemerkbar, wenn ich sie benötige für eine Funktion und sie auch dauerhaft anlasse? Hat jemand damit Erfahrung gemacht?

    Мозг = выключен :sleeping:

  • Das ist immer im Einzelfall zu betrachten, die Bandbreite liegt ja sowohl am einzelnen Spieler als auch am jeweiligen Server.
    Ich gehe nicht davon aus, dass es große Probleme erzeugt. Am besten wird es aber sein, es auszuprobieren.

    sigsmall_winter.png

  • Hi, wieder mal eine Frage...


    Gibt es beim Scripten eine bestimmte Reihenfolge die man einhalten muss? Z.B. wenn ich über OnPlayerConnect selber eine Funktion erstelle, könnte dass anschliessend irgendwelche Auswirkungen haben?

  • Gibt es beim Scripten eine bestimmte Reihenfolge die man einhalten muss? Z.B. wenn ich über OnPlayerConnect selber eine Funktion erstelle, könnte dass anschliessend irgendwelche Auswirkungen haben?

    Prinzipiell nein.


    Ausnahmen gibt es, z.B. Funktionen mit Tags, wie Float oder bool, da müsste man ein forward verwenden, aber das sagt dir schon der Compiler, ansonsten, nein.
    Oder Markos (also diese Dinge mit #define) oder auch #include.


    (Innerhalb einer Funktion hingegen ist es natürlich sehr wichtig, dass du erst eine Variable deklarierst, bevor du sie nutzt).

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hallo Zusammen,
    Was ist bei der Funktion fehlerhaft?

    getRangName(fraktionsID, rangID)
    {
    if(PlayerInfo[playerid][pFraktion] == 1) // COPS
    {
    switch(PlayerInfo[playerid][pFraktionrang])
    {
    case 0:{rang="Anwärter";}
    case 1:{rang="Anwärter";}
    case 2: return "Chief of Police";
    }
    }
    if(PlayerInfo[playerid][pFraktion] == 2)
    {
    switch(PlayerInfo[playerid][pFraktionrang])
    {
    case 0: return "Anwärter";
    case 1: return "Artz";
    case 2: return "Chefartz";
    }
    }
    return rang;
    }


    Fehler: Run time Error 17: "Invalid/unsupported P-Code file Format"


    Aber der Compiler gibt keinen Error beim Compilen, sondern braucht nur ziemlich lange um das Skript zu Compilen

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Meine Zeitrechnung spinnt irgendwie.
    Sie rechnet richtig, solange der Minuten Wert nicht höher als 59 Minuten ist.
    Gehen wir davon aus, das man 180 Minuten im "Knast" ist, dann rechnet er aus, 3 Stunden, 180 Minuten & 0 Sekunden.


    Wobei er dann mir 3 Stunden, 0 Minuten & 0 Sekunden ausgeben sollte.
    Bei einem Timestamp der 59 beträgt, rechnet er auch richtig.


    Quellcode:

    //Funktionen
    stock MathTime(atime, &days, &hours, &mins)
    {
    new restzeit= atime -gettime();
    days = floatround(restzeit / 86400,floatround_floor),
    hours = restzeit - (days * 86400),
    hours = floatround(hours / 3600,floatround_floor),
    mins = restzeit - ( (days * 86400) + (hours * 3600) ),
    mins = floatround(mins / 60,floatround_floor);
    return 1;
    }
    stock MathTimeSeconds(atime, &mins, &secs)
    {
    mins = (atime-gettime())/60;
    secs = atime-gettime() - (mins*60);
    return 1;
    }


    //Anwendung
    if(pInfo[playerid][pMute])
    {
    new day, hour, mins, secs, mutetime = pInfo[playerid][pMutetime];
    MathTime(mutetime, day, hour, mins),
    MathTimeSeconds(mutetime, mins, secs);
    SCMF(playerid, COLOR_LESSRED, "Du bist noch für %02d:%02d:%02d Stunden gemuted.", hour, mins, secs);
    return 0;
    }

    Мозг = выключен :sleeping:

  • Du kannst es so machen:
    if(pInfo[playerid][pMute])
    {
    new hour, mins, secs, mutetime = pInfo[playerid][pMutetime] - gettime();
    hour = mutetime/3600;
    mutetime -= hour*3600;
    mins = mutetime/60;
    mutetime -= mins*60;
    secs = mutetime;
    SCMF(playerid, COLOR_LESSRED, "Du bist noch für %02d:%02d:%02d Stunden gemuted.", hour, mins, secs);
    return 0;
    }

    sigsmall_winter.png

  • Ich habe mehrere Actors und wollte fragen, wie ich diese in einem Timer Sync.


    So werden diese erstellt:

    C
    1. Actor[0] = CreateActor(11, 1614.0878,-15.2610,1200.9219, 3.6);

    Ich habe da nichts gefunden, gibt es eine Funktionen die den Actor "Respawnen"?
    Oder muss man wirklich SetActorPos und SetActorFacingAngle bei jedem Actor benutzten, das ist doch richtig umständlich jedes mal

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Hallo ich habe gerade mein script auf Linux laufen lassen es funkt alles.
    nur auf linux bekomme ich in dem mysql logs die Fehler zu sehen.
    Fehler:

    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name_float: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name_float: no active cache
    [20:35:10] [plugins/mysql] cache_get_value_name_float: no active cache


    Code:

    stock SaveServerInfo()
    {
    print("MYSQL: Server Infomationen werden Gespeichert.");
    new query[600];
    mysql_format(handle, query, sizeof(query), "UPDATE server_info SET servername = '%s',servertag = '%s',slogan = '%s',serverversion = '%s',scripter = '%s',inhaber = '%s',mapname = '%s',weburl = '%s',ucpurl = '%s',tsip = '%s',noobX = '%f',noobY = '%f',noobZ = '%f'",
    ServerInfo[servername],
    ServerInfo[servertag],
    ServerInfo[slogan],
    ServerInfo[serverversion],
    ServerInfo[scripter],
    ServerInfo[inhaber],
    ServerInfo[mapname],
    ServerInfo[weburl],
    ServerInfo[ucpurl],
    ServerInfo[tsip],
    ServerInfo[noobX],
    ServerInfo[noobY],
    ServerInfo[noobZ]);
    mysql_pquery(handle, query);
    print("MYSQL: Server Infomationen wurden Gespeichert.");
    return query;
    }

  • So mal ein Tipp am Rande.
    Wenn du schon mysql_format nutzt, dann nutze statt %s, %e.
    In der Funktion mysql_format kannst du mit %e, den String gleich Escapen. (SQL Injection Shield)
    Wieso returnst du query? Welchen zweck hat das.
    Und die String Größe kannst du auch kleiner ansetzen, so viel brauchst du für den Query nicht.


    Zeig mal die du deine Verbindung aufbaust.

    Мозг = выключен :sleeping:

  • In der Funktion mysql_format kannst du mit %e, den String gleich Escapen. (SQL Injection Shield)

    Danke für den Tipp.


    Wieso returnst du query? Welchen zweck hat das.

    Das mache ich immer so hatte es in einem Tutorial gelernt.



    Und die String Größe kannst du auch kleiner ansetzen, so viel brauchst du für den Query nicht.

    Ja war mir nicht sicher wie lang es wird deshalb hatte ich es so habs vergessen zu ändern Danke.



    Zeig mal die du deine Verbindung aufbaust.


    stock MySQL_SetupConnection(ttl = 3)
    {
    print("[MySQL] Verbindungsaufbau...");
    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
    if(mysql_errno(handle) != 0)
    {
    if(ttl > 1)
    {
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
    return MySQL_SetupConnection(ttl-1);
    }
    else
    {
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
    print("[MySQL] Der Server wird heruntergefahren.");
    return SendRconCommand("exit");
    }
    }
    printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
    return 1;
    }
    Bei der Verbindung gibts kein Problem beim Registieren klapp auch alles wird auch in die Datenbank eingetragen.

  • Das mache ich immer so hatte es in einem Tutorial gelernt.

    Das macht nur Sinn, wenn du es dann auch verwendest, ansonsten kannst du das lassen.


    Im Log ist die Rede von den cache Funktionen, diese werden hier allerdings gar nicht aufgerufen...


    Rufst du irgendwo denn noch diese auf in einem Callback?

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen