[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
  • In sSpieler[playerid][BusLinie] würde dann das ausgewählte Listitem stehen. Sprich sSpieler[playerid][BusLinie] ist 0, wenn du die erste Linie ausgewählt hast und 1 wenn du die zweite Linie ausgewählt hast.


    Du kannst auch
    sSpieler[playerid][BusLinie] = listitem + 1;
    machen, wenn das verständlicher ist.




    EDIT: (Post unten)
    SarahCool565: Gerne :) Sollten weitere Fragen auftauchen kannst du gerne fragen!

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • In sSpieler[playerid][BusLinie] würde dann das ausgewählte Listitem stehen. Sprich sSpieler[playerid][BusLinie] ist 0, wenn du die erste Linie ausgewählt hast und 1 wenn du die zweite Linie ausgewählt hast.
    machen, wenn das verständlicher ist.


    Danke das du dir die Zeit in Anspruch genommen hast.
    Immer gute Antworten parat.
    Ich werde jetzt erstmal die Linie 1 fertig machen und schauen obs klappt.
    Danke schön.


    So ich habe es jetzt probiert. Reintheoretisch funktioniert es nur.. 1. man muss linie 2 anstatt 1 auswählen und 2.
    wenn ich es bei "EnterCheckpoint" blabla tue dann weiß er nicht was Listitem ist und wenn ich es unter den "DialogResponse"
    tue dann dann kann ich nur den 1. Checkpoint abfahren und danach geht es nicht mehr weiter.


    Ganzer Code: (OnDialogResponse)

    if(dialogid == LINIE)
    {
    if(response == 0)
    {
    return 1;
    }
    else
    {
    new BusLinie;
    sSpieler[playerid][BusLinie] = listitem;
    if(sSpieler[playerid][Beruf] == 1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 431)
    {
    DisablePlayerCheckpoint(playerid);
    if(sSpieler[playerid][BusLinie] == 1)
    {
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Stadthalle");
    SetPlayerCheckpoint(playerid,1456.0122,-1735.9861,13.0879,5.0);
    GivePlayerMoney(playerid,300);
    }
    else if(sSpieler[playerid][BusLinie] == 2)
    {
    SendClientMessage(playerid,gelb,"Nächste Haltestelle: Los Santos Police Department (LSPD)");
    SetPlayerCheckpoint(playerid,1533.0491,-1690.4596,13.0872,5.0);
    GivePlayerMoney(playerid,300);
    }
    }
    }
    }
    }

  • new BusLinie;
    sSpieler[playerid][BusLinie] = listitem;


    Du sollst das ja auch in deinem Enum deklarieren, und nicht immer lokal.
    Falls du nicht weißt, wie, dann schicke uns mal dein Enum her (das Enum von sSpieler).


  • Du sollst das ja auch in deinem Enum deklarieren, und nicht immer lokal.
    Falls du nicht weißt, wie, dann schicke uns mal dein Enum her (das Enum von sSpieler).


    Also mein Enum heißt "SpielerDaten"
    enum SpielerDaten{
    Adminlevel,
    Level,
    Fraktion,
    Team,
    sLogin,
    Geld,
    Beruf
    };


    new sSpieler[MAX_PLAYERS][SpielerDaten];


    Wenn ich anstatt sSpieler SpielerDaten einsetze dann funktioniert das nicht. Spieler funktioniert ebenfalls nicht.

  • sSpieler kannst du auch so lassen, da ist kein Fehler mit. Das Enum solltest du aber in das ändern:
    enum SpielerDaten{
    Adminlevel,
    Level,
    Fraktion,
    Team,
    sLogin,
    Geld,
    Beruf,
    BusLinie
    };
    So, nun kannst du ganz einfach "BusLinie" so verwenden:
    sSpieler[playerid][BusLinie]
    ohne das noch extra zu deklarieren (mit "new" usw.) :D

  • sSpieler funktioniert nicht.


    Zitat

    error 017: undefined symbol "playerid"
    error 021: symbol already defined: "sSpieler"


    Kann man da nicht einfach anstatt sSpieler z.B. SSpieler machen?


    Gut. Also wenn ich SSpieler nehme kommt der "already" Error nicht mehr.
    Aber eben "undefined symbol "playerid""

  • Was hast du gemacht? ^^
    sSpieler hast du doch bereits definiert, da kann eins von weg.
    Bestimmt hast du das so, oder?
    new sSpieler[playerid][BusLinie];
    Dann kannst du das so löschen.

  • Was hast du gemacht? ^^
    sSpieler hast du doch bereits definiert, da kann eins von weg.
    Dann kannst du das so löschen.


    Also wie soll ich das jetzt machen?



    new Spieler[playerid][BusLinie];

    klappt nicht wegen "playerid."


    Ich könnte höchstens

    new bSpieler[MAX_PLAYERS][BusLinie];

    probieren aber ob das klappen würde ist fraglich.


    Also gehen tut es auch nicht.
    Da sagt er mir: "array index out of bounds (variable "bSpieler")"

  • Beitrag von Heav3n ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von [KoSoVa] ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Die Objekte brauchen ihre Zeit bis Sie dem Spieler angezeigt werden.


    if(newkeys == KEY_SECONDARY_ATTACK)
    {
    new HausID = GetNearHausID(playerid);
    new Float:hx, Float:hy, Float:hz, Float:ix, Float:iy, Float:iz;
    hx = Haus[HausID][hX],hy = Haus[HausID][hY],hz = Haus[HausID][hZ];
    ix = Haus[HausID][iX], iy = Haus[HausID][iY], iz = Haus[HausID][iZ];
    if(IsPlayerInRangeOfPoint(playerid, 2.0, hx, hy, hz))
    {
    SetPlayerInterior(playerid,Haus[HausID][hInteriorID]);
    SetPlayerPos(playerid, ix, iy, iz);
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("Unfreeze", 2000, false, "i", playerid);
    SendClientMessage(playerid,0xFF0000FF,"[H-INFO]{FFFFFF} Haus wurde betreten.");
    }
    }
    forward Unfreeze(playerid);
    public Unfreeze(playerid)
    {
    TogglePlayerControllable(playerid, 1);
    return 1;
    }

  • Kleine Verständnisfrage zu threaded queries: hab ich es richtig verstanden, dass nach dem Gebrauch von mysql_tquery IMMER im zweiten Thread weitergeschrieben wird, sprich, dass nie Code unter mysql_tquery soll?

    Du kannst schon unter den mysql_tquery Aufruf Code schreiben, nur eben nichts was mit der abgeschickten Query zu tun hat. Du kannst nicht mysql_tquery aufrufen, und direkt darunter die Werte verwenden, da diese Werte erst bereit stehen wenn der Callback aufgerufen wird.

  • Warum wird das ganze 10 mal erstellt?
    for(new gfirma = 0; gfirma < MAX_FIRMENGR; gfirma++)
    {
    if(GFirmaInfo[gfirma][firmengrcreate] == 0)
    {
    format(querygfr,sizeof(querygfr),"INSERT INTO "#DATENBANK"_firmagrundstuck (`firmenname`,`firmengrid`,`create`,`firmenid`,`igekauft`,`posx`,`posy`,`posx2`,`posy2`,`iposx`,`iposy`,`iposz`,`preis`) VALUES ('Niemand','%d','1','-1','0','%f','%f','%f','%f','%f','%f','%f','%d')",
    gfirma,gfirmapos[playerid][0],gfirmapos[playerid][1],gfirmapos[playerid][2],gfirmapos[playerid][3],gfirmapos[playerid][4],gfirmapos[playerid][5],gfirmapos[playerid][6],cmd);
    mysql_function_query(MYSQLVerbindung,querygfr,false,"","");
    GFirmaInfo[gfirma][firmengrcreate] = 1;
    GFirmaInfo[gfirma][firmengrid] = gfirma;
    }
    }