PAWN Shop Abfrage

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
  • Hallo,


    ich würde gerne alle Shops Abfragen die auf meinen Server vorhanden sind. Hierfür habe ich mir gedacht einen Format zu verwenden und diesen im Dialog wieder auszugeben. Nun werden mir allerdings nicht die Shop Daten angezeigt. Welchen Fehler habe ich eventuell gemacht oder was fehlt mir damit die Anzeige möglich ist ?


    Betreffender Code



    ocmd:shops(playerid)
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new string[128];
    for(new i=0; i<sizeof(Shops); i++)
    {
    format(string,sizeof(string),"Inhaber: %s \t\tShopid \n",Shops[i][s_besitzer],Shops[i][s_id]);
    }
    ShowPlayerDialog(playerid,DIALOG_SHOPS_AUSWAHL,DIALOG_STYLE_LIST,"Shop Übersicht",string,"Auswählen","Abbruch");
    return 1;
    }

  • Was wird dir denn angezeigt? Zeig uns Aich mal bitte das Shop ENUM.

    Es wird leider garnichts angezeigt außer den Standardtext mit Besitzer und Shopid.


    Das Shopenum



    enum ShopEnum{
    Float:s_x,
    Float:s_y,
    Float:s_z,
    Float:is_x,
    Float:is_y,
    Float:is_z,
    h_interior,
    s_besitzer[MAX_PLAYER_NAME],
    s_id,
    s_preis,
    s_pickup,
    Text3D:s_text,
    s_kasse,
    pZollpass_preis
    }




    ocmd:shops(playerid)
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new string[8000];
    for(new i=0; i<sizeof(Shops); i++)
    {
    if(!Shops[i][s_id])continue;
    format(string,sizeof(string),"Inhaber: %s \t\tShopid \n",Shops[i][s_besitzer],Shops[i][s_id]);
    printf(string);
    }
    ShowPlayerDialog(playerid,DIALOG_SHOPS_AUSWAHL,DIALOG_STYLE_LIST,"Shop Übersicht",string,"Auswählen","Abbruch");
    return 1;
    }


    Print gibt mittlerweile etwas aus


    Allerdings bleibt der Dialog noch leer

    2 Mal editiert, zuletzt von BreadScript () aus folgendem Grund: veränderungen

  • Beitrag von BreadScript ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Erledigt ().
  • Hallo, nun möchte ich gerne mich zu den Shops mit dem Dialog hinspawnen können. Das heißt wenn ich Ihn anklicke soll er die Position ermitteln. Wie ist das am besten zu Regeln ? Ich hab mich mal probiert aber das ging in die Hose xD



    if(dialogid == DIALOG_SHOPS_AUSWAHL)
    {
    new count,string[128];
    if(!response) return 1;
    if(count == listitem)
    {
    for(new i=0; i<sizeof(Shops); i++)
    {
    if(!Shops[i][s_id])continue;
    if(Shops[i][is_x]==0.0)continue;
    SetPlayerPos(playerid,Shops[i][is_x],Shops[i][is_y],Shops[i][is_z]);
    SetPVarInt(playerid, "interior", Shops[i][s_id]);
    SetPlayerInterior(playerid,Shops[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    }
    count++;
    }


    Push 7.03

  • Uff, also das ist nicht so leicht alles zu erklären, was du hier falsch machst.


    Aber ich versuch es mal kurz zu zusammenzufassen:


    • Ich denke mal es ist klar, dass deine count Variable schwachsinn ist. Diese ist nämlich immer 0, sprich nur wenn du auf das 1. Element im Dialog klickst, kommst du überhaupt in die Schleife. Und in der Schleife wird genau der erste Shop ausgewählt, wo x != 0.0 ist und die shopid > 0 ist. Aber das ist so gar nicht das, was du willst.
    • Du könntest theoretisch direkt listitem als index nutzen, allerdings kommt es dann zu einem Problem, wenn du einen Shop in der Mitte rauslöschst. Also geht auch diese Variante nicht wirklich schön.
    • Dir bleibt also nichts anderes übrig, da du extra mit s_id arbeitest, anstatt direkt mit dem index zu arbeiten, diesen aus dem string auf den du geklickt hast zu holen und dann den index zu finden, der dieser s_id entspricht :)

    Zeig nochmal jetzt wie du den String formatierst und wie dein Code aussieht :)

    ast2ufdyxkb1.png


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

  • Du könntest zum Beispiel dir nur alle 10 shop einträge anzeigen lassen und dann immer mal die Seiten Zahl-1.
    Also z.b.:
    Seite 3, listitem 3


    ist dann in der DB 2*10+3+1 = 24. Das heißt Shop nummer 24 wird dann geladen.
    2*10 ist für die Seiten die du schon übersprungen hast.(Aber immer die Seitenzahl -1 nehmen weil auf Seite 1 bist du ja nicht schon bei eintrag Nr. 11)
    +3 ist für das listitem.
    +1 ist dazu da um zu Berücksichtigen das listitem bei 0 an fängt zu Zählen.



    Wenn er dann listitem 3 auswählt kannst du z.b. schreiben: SELECT * FROM shops WHERE id='24'
    Im Public kannst du dir dann dir Coords laden und ihn dort mit SetPlayerPos hin bringen.