[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

  • Versteh deine Frage nicht ganz einfach mal ins leer gegriffen:



    public OnPlayerConnect(playerid)
    {
    if(gTeam[playerid] == 1)
    {
    SetPlayerColor(playerid, 0x007DFFFF);
    }
    return 1;
    }

  • EDIT//
    Habe es selber geschaft ohne den Zufall Kram usw. :D
    Eine Abfrage war nicht richtig eingestellt wobei ich wieder was anderes machen musste.


    Wie das aber nun bei dir(BloodyEric) ausgesehen hätte würde mich auch interessieren, denn so wüsste ich die Anwendung von while besser.


    Danke für eure Hilfe.


    EDIT2//
    Ok irgendwie will bei mir nie eine for-Schleife.
    Dadurch ich jetzt geschafft habe eine Haus zu erstellen möchte ich sie auch dynamisch löschen.
    Aber das for gibt nur "0" aus und ich finde den Fehler nicht.
    Hier mein Code:

    COMMAND:deletehouse(playerid)
    {
    new HouseDatei[128];
    format(HouseDatei,sizeof(HouseDatei),"Houses/%i",h);
    if(SpielerInfo[playerid][Adminlevel]==3)
    {
    if(aLogin[playerid]==1)
    {
    for(new h;h<100;h++)
    {
    if(dini_Exists(HouseDatei))
    {
    if(IsPlayerInRangeOfPoint(playerid,3,HouseInfo[h][hx],HouseInfo[h][hy],HouseInfo[h][hz]))
    {
    dini_Remove(HouseDatei);
    }
    else return SendClientMessage(playerid,ROT,"Sie sind nicht in der Nähe eines Hauses!");
    }
    }
    }
    else return SendClientMessage(playerid,ROT,"Sie sind nicht als Admin eingeloggt!");
    }
    else return SendClientMessage(playerid,ROT,"Sie haben nicht das benötigte Adminlevel!");
    return 1;
    }
    Wenn ich diesen Befehl eingebe kommt:
    "Sie sind nicht in der Nähe eines Hauses!".
    Ich habe mir nun den Wert von der for-Schleife ausgeben lassen und sie kommt nur bis "0" und dann wird "Sie sind nicht in der Nähe eines Hauses!" versendet und aus der Command.


    Ich hoffe auf Hilfe finde einfach keinen Fehler.


    mfg.
    Opa

  • Mit return beendest du die Schleife. Das return muss daher hinter die Schleife:

    COMMAND:deletehouse(playerid)
    {
    new HouseDatei[128];
    format(HouseDatei,sizeof(HouseDatei),"Houses/%i",h);
    if(SpielerInfo[playerid][Adminlevel]==3)
    {
    if(aLogin[playerid]==1)
    {
    for(new h;h<100;h++)
    {
    if(dini_Exists(HouseDatei))
    {
    if(IsPlayerInRangeOfPoint(playerid,3,HouseInfo[h][hx],HouseInfo[h][hy],HouseInfo[h][hz]))
    {
    dini_Remove(HouseDatei);
    }

    }
    }
    else return SendClientMessage(playerid,ROT,"Sie sind nicht in der Nähe eines Hauses!");
    }
    else return SendClientMessage(playerid,ROT,"Sie sind nicht als Admin eingeloggt!");
    }
    else return SendClientMessage(playerid,ROT,"Sie haben nicht das benötigte Adminlevel!");
    return 1;
    }


    E: PWN Tag editiert

    Einmal editiert, zuletzt von BloodyEric ()

  • Bloody du bist echt super!
    Bei dir ist es leider einwenig verrutscht jetzt kann ich nicht genau erkennen was wo hingehört :D
    Habe es mit else aber das ned optimal deins ist sicher besser :D
    EDIT//
    Ok, nun klappt alles, aber wo gehört jetzt das return usw. genau hin?
    Werde es noch öfters benötigen.


    Danke für deine Hilfe.
    Opa


  • Wie er schon gesagt hat, mit dem "return" beendet man die Schleife. Daher muss das "return" hinter die Schleife, was bedeutet hinter das "}".

    Beispiel:


    PHP
    if(...Bedingungen...)
    {
    //dann soll folgendes geschehen
    } // Ich beende die Schleife
    return // <- return nach dem Ende der Schleife...
  • Ja das mir klar aber wenn ich es so mache:
    klick
    Dann kommen folgende Fehler:
    C:\Program Files (x86)\Rockstar Games\GTA San Andreas\gamemodes\tdm3.pwn(3171) : warning 217: loose indentation
    C:\Program Files (x86)\Rockstar Games\GTA San Andreas\gamemodes\tdm3.pwn(3171) : error 029: invalid expression, assumed zero
    C:\Program Files (x86)\Rockstar Games\GTA San Andreas\gamemodes\tdm3.pwn(3171) : warning 215: expression has no effect
    C:\Program Files (x86)\Rockstar Games\GTA San Andreas\gamemodes\tdm3.pwn(3171) : error 001: expected token: ";", but found "return"
    C:\Program Files (x86)\Rockstar Games\GTA San Andreas\gamemodes\tdm3.pwn(3176) : warning 225: unreachable code


    Danke für die Hilfe!


    mfg.
    Opa

  • Opa_Schlumpf:
    Zeile 3171: Du versuchst bei einer schleife "else return" zu benutzen, was natürlich nicht funktionieren kann.
    Zeile 3176: Doppeltes Return, deshalb der fehler.
    Und schau mal hier vllt hilfts dir ja: http://pawn.pastebin.com/hsbsvnFq


    @patoo:
    Das geht glaube ich nicht. Kannst ja mal versuchen obs hilft wenn du dich in eine andere Virtuelle Welt setzt.


    mfg.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Danke funkt jetzt.
    Jetzt weis auch wie ich solche Abfragen hinbekomme.


    Thx
    mfg.
    Opa


    EDIT//
    Dadurch noch niemand was anderes fragte muss ich wohl editieren.


    Ich habe folgenden Code:

    new aktkonto[128];
    format(aktkonto,sizeof(aktkonto),"Aktueller Kontostand: {0x00CEFF9B}%i",SpielerInfo[playerid][BEuro]);
    SendClientMessage(playerid,WEIS,aktkonto);
    Nur werden hier die Farbcodes abgesendet, obwohl ich den Text aber in Farbe haben will.
    Wie kann ich das hinbekommen?


    mfg.
    Opa

  • Ahm ich habe eine kurze wahrscheinlich sehr dumme Frage. Bisher speichere ich beinahe alles in .ini Dateien mit dini.
    Meine Frage nun ist wie funktioniert das "enum" genau? Kann man da auch Passwörter etc. speichern, die für immer dann auch gespeichert bleiben?


    Hoffe auf eine ausführliche und gute Erklärung :)

  • Ich habe ein komisches Problem.
    Bei mir wird die Variable auf 0 gesetzt obwohl sie -1 sein soll.
    Mein Code:

    else if(SpielerInfo[playerid][spawnstate]==2)//SocialCity (Haus)
    {
    new datei[128];
    format(datei,sizeof(datei),"Houses/%i.txt",SpielerInfo[playerid][hID]);
    if(dini_Exists(datei))
    {
    //Natürlich steht hier bei mir was....
    }
    else
    {
    SpielerInfo[playerid][hID]=-1;
    SendClientMessage(playerid,ROT,"Ihr Haus existiert nicht mehr!");
    new blabla[128];
    format(blabla,sizeof(blabla),"HausID: %i",SpielerInfo[playerid][hID]);
    SendClientMessage(playerid,ORANGE,blabla);//Hiermit habe ich überprift was hID ist, und es wird 0 ausgegeben o.O
    }
    }