[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
  • GetPlayerName(playerid)


    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(INFO,sizeof(INFO),"Name: %s\nIP: %s", name, GetIP(playerid));
    ShowPlayerDialog(playerid, D_SOBEITDETECTED, DIALOG_STYLE_MSGBOX, "Sobeit Detected", INFO, "Bye", "");

    ast2ufdyxkb1.png


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

  • warum wird keine Kralle gesetzt?
    Da Kralle nicht gesetzt ist funktioniert auch bei EnterVehicle nicht das man rausgeworfen wird...



    Habe ich einen Denkfehler gemacht?

  • Hallo, habe eine kleine Funktion erstellt womit ein Report zu den Admins gesendet wird, nur scheint sie leider nicht zu funktionieren.
    Jemand ne Idee woran es liegt?



    if(SobeitReports == true)
    {
    SobeitAutoBan = false;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new string[144];
    format(string, sizeof(string), "{FF0000}Report: {FFFFFF}%s {FF0000}(Sobeit)",name);
    SendSobeitReportToAdmins(-1, string);
    return 1;
    }



    SendSobeitReportToAdmins(color, message[])
    {
    LOOP_PLAYERS(i)
    {
    if(IsPlayerAdmin(i) || CheckAdminName(i))
    {
    SendClientMessage(i, color, message);
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hai,
    also mein Stock wird ausgeführt und auch in der Tabelle eingetragen, aber ich erhalter komischerweiße immer diesen "Fehler" in der mysql_log,


    Die Log:



    [03:50:23] [WARNING] cache_get_row_count - no active cache
    [03:50:23] [WARNING] cache_get_query_exec_time - no active cache
    [03:50:23] [WARNING] cache_get_row_count - no active cache
    [03:50:23] [WARNING] cache_get_row_count - no active cache
    [03:50:23] [WARNING] cache_get_query_exec_time - no active cache
    [03:50:23] [WARNING] cache_get_row_count - no active cache


    Der Stock der ausgeführt wird:



    stock CreateATM(playerid, name[])
    {
    new query[512];
    for(new i; i < MAX_ATMS; i++)
    {
    if(ATMInfo[i][set] == false)
    {
    GetPlayerPos(playerid, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ]);
    GetPlayerFacingAngle(playerid, ATMInfo[i][aA]);
    format(ATMInfo[i][aName], 40, "%s", name);
    TeleInfo[i][set] = true;
    format(query, 512, "INSERT INTO `atms` (`aX`, `aY`, `aZ`, `aA`, `aName`) VALUES ('%f', '%f', '%f', '%f', '%s')", ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ], ATMInfo[i][aA], name);
    mysql_tquery(Handle, query);
    SendClientMessage(playerid, FARBE_WEISS, "[{00FF00}INFO{FFFFFF}]: Du hast ein ATM erstellt.");
    CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
    break;
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Im Zusammenhang mit dem was du an Code gepostet hast werden die Funktion dort nicht aufgerufen. Dort scheint der Fehler also nicht zu liegen.


    Grundsätzlich kommt der Fehler auf, da du versuchst einen Cache auszulesen, wo es keinen gibt. An welcher Stelle das ist, ist aus dem Log nicht erkennbar.

  • Wie sieht denn dein LOOP_PLAYERS aus?


    Und, bist du auch sicher admin? :D


    und wird das auch aufgerufen? :P


    So sieht LOOP_PLAYERS aus



    #define LOOP_PLAYERS(%0) \
    for(new %0 = 0, _%0 = GetPlayerPoolSize(); %0 <= _%0, IsPlayerConnected(%0); %0++)


    Ja, bin Admin :)


    Habe eben einige Prints eingesetzt und gemerkt das nur dieser Block nicht aufgerufen wird. Ich schaue mal weiter und versuche den Fehler zu finden.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Deine Schleife ist falsch :D


    Sobald ein Spieler nicht connected ist, bricht die ab...


    Entwender du nutzt einfach foreach oder du machst es so:


    #define LOOP_PLAYERS(%0) for(new %0=GetPlayerPoolSize(); %0!=-1; %0--) if(IsPlayerConnected(%0))

    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
  • @Jeffry Ich habe schon einmal herraus gefunden, das es an dem Public hier liegen muss,
    sobald ich den Sever Starte, kommt die Meldung wie oben Geschrieben,
    und es wird nur dieser Public ausgeführt.



    public LoadATMs()
    {
    for(new i = 0; i < cache_num_rows(); i++)
    {
    ATMInfo[i][dbid] = cache_get_field_content_int(i, "ID");
    ATMInfo[i][aX] = cache_get_field_content_float(i, "aX");
    ATMInfo[i][aY] = cache_get_field_content_float(i, "aY");
    ATMInfo[i][aZ] = cache_get_field_content_float(i, "aZ");
    ATMInfo[i][aA] = cache_get_field_content_float(i, "aA");
    ATMInfo[i][set] = true;
    cache_get_field_content(i, "aName", ATMInfo[i][aName], 1, 40);
    CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
    }
    printf("Aktuelle Bankautomaten: %i/%i in %dms geladen.", cache_num_rows(), MAX_ATMS, cache_get_query_exec_time());
    return 1;
    }

    Mit freundlichen Grüßen, BlvckAir :thumbup:


  • public LoadATMs()
    {
    for(new i = 0; i < cache_num_rows(); i++)
    {
    ATMInfo[i][dbid] = cache_get_field_content_int(i, "ID");
    ATMInfo[i][aX] = cache_get_field_content_float(i, "aX");
    ATMInfo[i][aY] = cache_get_field_content_float(i, "aY");
    ATMInfo[i][aZ] = cache_get_field_content_float(i, "aZ");
    ATMInfo[i][aA] = cache_get_field_content_float(i, "aA");
    ATMInfo[i][set] = true;
    cache_get_field_content(i, "aName", ATMInfo[i][aName], 1, 40);
    CreateObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
    }
    printf("Aktuelle Bankautomaten: %i/%i in %dms geladen.", cache_num_rows(), MAX_ATMS, cache_get_query_exec_time());
    return 1;
    }


    enum ATMEnum
    {
    dbid,
    Float:aX,
    Float:aY,
    Float:aZ,
    Float:aA,
    bool:set,
    aName[40]
    };
    new ATMInfo[MAX_ATMS][ATMEnum];


    LoadATMs(); //<- So stehts bei OnGameModeInit


    query? Wie meinst? :D

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Perfekt! Ich danke dir. :)
    Habe es nun Umgeschrieben und es klappt Problemlos.


    Kannst du mir zeigen wie es eine Funktion schreibe, womit ich meine ATM's aufrufen kann? Sprich,
    ob Spieler X in der Nähe vom Bankautomaten Y ist?

    Mit freundlichen Grüßen, BlvckAir :thumbup:

  • Dazu kannst du folgende Funktion nutzen:
    stock GetClosestATM(playerid, Float:dist = 10000.0)
    {
    new Float:tmp, Float:x, Float:y, Float:z, id = -1;
    for(new i = 0; i < sizeof(ATMInfo); i++)
    {
    if(ATMInfo[i][set])
    {
    tmp = GetPlayerDistanceFromPoint(playerid, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ]);
    if(tmp <= dist)
    {
    dist = tmp;
    id = i;
    }
    }
    }
    return id;
    }

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