[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
  • Also, ich möchte die Häuser Laden und wenn es ein haus mit der nicht gibt soll es Übersprungen werden und das nächste geladen werden.
    Hier der Code:

    stock LoadHaus()
    {
    new string[400],idx=0;
    for(new i; i<MAX_HAUS; i++)
    {
    mysql_fetch_row_format(data, "|"); // Ansonsten werden die Daten in "data" gespeichert
    mysql_free_result();
    sscanf(data, "p<|>ifffffffiis[24]iiii", // Die Daten werden den Variablen zugewiesen
    Haus[i][h_id],
    Haus[i][h_posx],
    Haus[i][h_posy],
    Haus[i][h_posz],
    Haus[i][h_intx],
    Haus[i][h_inty],
    Haus[i][h_intz],
    Haus[i][h_inta],
    Haus[i][h_vw],
    Haus[i][h_int],
    Haus[i][h_besitzer],
    Haus[i][h_kosten],
    Haus[i][h_verkauf],
    Haus[i][h_isbiz],
    Haus[i][h_hid]);


    // Jetzt muss noch überprüft werden, ob das Haus ein Biz sein soll oder ein Haus UND ob es zum Verkauf steht
    if(Haus[i][h_isbiz] == 1)
    {
    if(Haus[i][h_verkauf] == 0)
    {
    Haus[i][h_id] = CreatePickup(1273, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Haus: %d\nBesitzer: %s", i, Haus[i][h_besitzer]);
    Haus[i][label] = Create3DTextLabel(string, Grün, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    else
    {
    Haus[i][h_id] = CreatePickup(1273, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Haus: %d\nZum Verkauf\nKosten: %d$", i, Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, ROT, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    }
    else
    {
    if(Haus[i][h_verkauf] == 0)
    {
    Haus[i][h_id] = CreatePickup(1239, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Biz: %s (%d)\nBesitzer: %s\nKosten: %d$", BizName[Haus[i][h_hid]], i, Haus[i][h_besitzer], Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, Grün, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    else
    {
    Haus[i][h_id] = CreatePickup(1239, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Biz: %s (%d)\nZum Verkauf\nKosten: %d$", BizName[Haus[i][h_hid]], i, Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, ROT, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    }
    idx++;
    }
    printf("Es wurden %i Häuser geladen",idx);
    mysql_free_result();
    return 1;
    }

  • Nach dem was du willst, dürfte es so aussehen:
    stock LoadHaus()
    {
    new string[400],idx=0;
    for(new i; i<MAX_HAUS; i++)
    {
    format(string, sizeof(string), "SELECT * FROM haus_tabelle WHERE id = '%d'", i); //"haus_tabelle" bitte anpassen, wie die Tabelle bei dir heißt!!
    mysql_query(string);
    mysql_store_result();
    if(!mysql_num_rows())
    {
    mysql_free_result();
    continue;
    }
    mysql_fetch_row_format(string, "|"); // Ansonsten werden die Daten in "data" gespeichert
    mysql_free_result();
    sscanf(string, "p<|>ifffffffiis[24]iiii", // Die Daten werden den Variablen zugewiesen
    Haus[i][h_id],
    Haus[i][h_posx],
    Haus[i][h_posy],
    Haus[i][h_posz],
    Haus[i][h_intx],
    Haus[i][h_inty],
    Haus[i][h_intz],
    Haus[i][h_inta],
    Haus[i][h_vw],
    Haus[i][h_int],
    Haus[i][h_besitzer],
    Haus[i][h_kosten],
    Haus[i][h_verkauf],
    Haus[i][h_isbiz],
    Haus[i][h_hid]);


    // Jetzt muss noch überprüft werden, ob das Haus ein Biz sein soll oder ein Haus UND ob es zum Verkauf steht
    if(Haus[i][h_isbiz] == 1)
    {
    if(Haus[i][h_verkauf] == 0)
    {
    Haus[i][h_id] = CreatePickup(1273, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Haus: %d\nBesitzer: %s", i, Haus[i][h_besitzer]);
    Haus[i][label] = Create3DTextLabel(string, Grün, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    else
    {
    Haus[i][h_id] = CreatePickup(1273, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Haus: %d\nZum Verkauf\nKosten: %d$", i, Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, ROT, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    }
    else
    {
    if(Haus[i][h_verkauf] == 0)
    {
    Haus[i][h_id] = CreatePickup(1239, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Biz: %s (%d)\nBesitzer: %s\nKosten: %d$", BizName[Haus[i][h_hid]], i, Haus[i][h_besitzer], Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, Grün, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    else
    {
    Haus[i][h_id] = CreatePickup(1239, 1, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 0);
    format(string, sizeof string, "Biz: %s (%d)\nZum Verkauf\nKosten: %d$", BizName[Haus[i][h_hid]], i, Haus[i][h_kosten]);
    Haus[i][label] = Create3DTextLabel(string, ROT, Haus[i][h_posx], Haus[i][h_posy], Haus[i][h_posz], 15.0, 0);
    }
    }
    idx++;
    }
    printf("Es wurden %i Häuser geladen",idx);
    return 1;
    }
    Das "haus_tabelle" bitte entsprechend deiner Tabelle anpassen.

  • Danke habe jetzt noch ein Problem mit meinem /Leader Befehl. Wenn man /Leader eingibt sollen alle Leader Aufgelistet sein aber es kommt kein Dialog,
    Hier der Code:

    CMD:leader(playerid,params[])
    {
    mysql_query("SELECT "#Tabelle_Spieler", Leader FROM Name WHERE Rang = 10;");
    mysql_store_result();
    new rows = mysql_num_rows();
    if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
    new str[512], row[64], name[32], frak, fname[32];
    while(mysql_fetch_row(row))
    {
    sscanf(row, "p<|>sd", name, frak);
    switch(frak)
    {
    case 1:{fname = "Regierung";}
    case 2:{fname = "SAPD";}
    }
    if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {00FF00}Online\n", str, name, fname);
    else format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {FF0000}Offline\n", str, name, fname);
    ShowPlayerDialog(playerid,DIALOG_SONSTIGES,DIALOG_STYLE_MSGBOX,"Leader",str,"Schliessen","");
    }
    return 1;
    }

  • if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {00FF00}Online\n", str, name, fname);
    else format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {FF0000}Offline\n", str, name, fname);
    Zu
    if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {00FF00}Online\n", str, name, fname);
    else format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {FF0000}Offline\n", str, name, fname);

  • Moin Moin,
    habe eine kleine Frage bzgl. eines Warnings ^^


    Hab oben in meinem Array "SpielerInfo" mein leben Gespeichert sprich "Float:pHealth"
    Jetzt wollte ich halt mit einer Funktion den wert von meinem Leben in dieser Variable Speichern.


    SpielerInfo[playerid][pHealth] = GetPlayerHealth(playerid);


    Jetzt bekomme ich jedoch folgenden Warning Code:
    warning 202: number of arguments does not match definition


    Ich find den Fehler nicht so richtig oder muss ich da auch noch irgendwie deklarieren nochmal das es sich um einen Float handelt ?
    Oder kann ich das Health auch ganz normal in einem Integer ausgeben lassen und ist der Float somit irrelevant ?


    Danke & lg.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hi, ich speichere die Wetter & die Time ID vom Spieler und setze die bei jedem Login zum alten Wert zurück, aber es scheint nicht zu funktionieren.
    In der Datenbank werden die Werte problemslos eingetragen & gespeichert, aber die Werte werden Ingame nicht gesetzt bzw. sind nach dem Login wieder standard.



    Hier mein Wetter Befehl:



    CMD:weather(playerid, params[]) {
    new w[128], wID = strval(params);



    if(isnull(params))
    return SendClientMessage(playerid, COLOR_RED, "Use: /weather <id>.");



    if(!IsNumeric(params))
    return SendClientMessage(playerid, COLOR_RED, "You need to put a number for weather id.");



    if(wID < 0 || wID > 500)
    return SendClientMessage(playerid, COLOR_RED, "Invalid Weather.");



    SetPlayerWeather(playerid, wID);
    pData[playerid][P_Weather] = wID;




    format(w, sizeof(w), "Weather changed to %d", wID);
    SendClientMessage(playerid, COLOR_ORANGE, w);



    format(w, sizeof(w), "UPDATE `players` SET Weather = %d WHERE Name = '%s'", wID, GetName(playerid));
    mysql_query(MySQL, w);
    mysql_store_result();
    return 1;
    }


    So lade ich das (bei OnPlayerConnect testweise hinzugefügt, hilft nicht)


    OnPlayerConnect:



    SetPlayerWeather(playerid, pData[playerid][P_Weather]);
    SetPlayerTime(playerid, pData[playerid][P_Time], 0);


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Eigentlich nicht, hier ein Teil von meinem LoadAccount Public



    Mit freundlichen Grüßen
    JustMe.77 8)

  • Habe ich voll verpeilt ^^


    Habe noch ein kleines Problem, wenn ich lange Befehle eingebe (die gar nicht existieren) werden mir immer Errors in der Server Log ausgegeben.
    Kann ich das irgendwie verhindern?


    [debug] Run time error 4: "Array index out of bounds"
    [debug] Accessing element at index 32 past array upper bound 31
    [debug] AMX backtrace:
    [debug] #0 0003153c in public OnPlayerCommandText (playerid=0, cmdtext[]=@00c91104 "/4578tz5r4785r474t7t4747334837u45893z45378z53785z347853") at C:\Users\David\Desktop\LnD\pawno\include\zcmd.inc:94


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Mach mal n print-debug...und printe dir mal den cmdtext, dann weißte, was aufgerufen wird :)


    Und wenn das der Befehl ist der da steht..muss ja nicht vom Gamemode aus aufgerufen werden..vielleicht ist der iwo in einer Include?

    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