[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
  • Du kannst Stocks verwenden ( würde ich auch empfehlen ) aber musst du nicht.


    format(string,sizeof(string),"SELECT * FROM `betacode` WHERE Code=%s",string);mysql_function_query(sqlHandle,string,true,"CheckBetaCode","is",playerid,string);forward CheckBetaCode(playerid,code);public CheckBetaCode(playerid,code)



    Wie kann ich den String übergeben ?
    Damit ich den dann auch im Public verwenden kann ?


    @fishy:
    Wie GodlKiller schon sagte.

  • Beitrag von Anti. ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Verwirrt ().
  • Ich würde die Logik in eine Funktion auslagern, die 1 / true zurück gibt, sofern die vehicle-id zu einer id im genannten Array passt. Ansonsten 0 / false.

    Hab gerade erst wieder angefangen, das überfordert mich. Wie meinst du das?



    und @reaL., wieso packst du den string nicht gleich in die public?



    Und Coldman:


    Gutes adminsystem:
    MySQL Datenbank + AdminLevel bei dem Userdaten + PlayerInfo[playerid][pAdminLevel] und dann kannst du ein System erstellen.


    dann kannst du abfragen if(IsAnAdmin(playerid))
    Sonst fällt mir nicht mehr an was man als stock gebrauchen könnte


    stock IsAnAdmin(playerid);
    public IsAnAdmin(playerid)
    {
    If(PlayerInfo[playerid][pAdminLevel] > 0)
    {
    return 1;
    }
    return 0;
    }

    SA:MP in 2020?

  • @fishy:
    Es wird nur geprüft ob MullCar[1] == GetPlayerVehicleID(playerid) ist danach wird es abgebrochen.


    Code
    for(new i;i<sizeof(MullCar);i++)
        {
            if(GetPlayerVehicleID(playerid) == MullCar[i])
            {
    //Hier ist es ein Müllcar
            }
        }
        return SendClientMessage(playerid, COLOR_ERROR, "* Du bist nicht in einem Müllwagen!");
  • Coldman:


    Gutes adminsystem:
    MySQL Datenbank + AdminLevel bei dem Userdaten + PlayerInfo[playerid][pAdminLevel] und dann kannst du ein System erstellen.


    dann kannst du abfragen if(IsAnAdmin(playerid))
    Sonst fällt mir nicht mehr an was man als stock gebrauchen könnte

    Code
    stock IsAnAdmin(playerid)
    {
    	if(PlayerInfo[playerid][pAdmin] > 0)
    	{
    	    return 1;
    	}
    	return 0;
    }

    Kann ich das so verwenden?

  • Ja kannst du warum nicht ?


    Aber du kannst auch


    Code
    stock IsAnAdmin(playerid,arang)
    {
    	if(PlayerInfo[playerid][pAdmin] => arang)
    	{
    	    return 1;
    	}
    	return 0;
    }


    So verwenden



    Code
    if(IsAnAdmin(playerid,3) return SendClientMessage(playerid,ROT,"Du bist Ein Admin Rang 3 oder Höher");
  • Hey, möchte von einem Array aus Fahrzeuge erstellen. Ich mache irgendwas falsch :>



    new Float:vSpawn[][4] =
    {
    {680.47, -2701.11, 5.63, 84.49},
    {579.42, -2800.48, 5.63, 84.49},
    {589.07, -2617.21, 5.63, 84.49},
    {511.48, -2881.83, 5.63, 84.49},
    {785.75, -2831.08, 5.63, 84.49},
    {758.51, -2624.00, 5.63, 84.49},
    {476.99, -2700.88, 5.63, 84.49}



    };




    public OnFilterScriptInit()
    {



    CreateVehicle(520, vSpawn[0], vSpawn[1], vSpawn[2], vSpawn[3], -1, -1, 120, 1); //error line
    EventStarted = false;
    CreateMapObjects();
    SendClientMessageToAll(-1,"Event System {00FF00}loaded!");
    return 1;
    }


    (123) : error 035: argument type mismatch (argument 2)


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Du brauchst ja auch einen index noch.


    Wenn du alle Fahrzeuge laden willst, dann musst du das z.B. so machen:


    C
    for(new i; i<sizeof(vSpawn); i++)
    {
        CreateVehicle(520, vSpawn[i][0], vSpawn[i][1], vSpawn[i][2], vSpawn[i][3], -1, -1, 120, 1); //error line
    }

    ast2ufdyxkb1.png


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

  • Danke @Kaliber


    Möchte alle Fahrzeuge beim unloaden vom FS löschen, scheint aber nicht zu funktionieren.



    public OnFilterScriptExit()
    {



    DestroyVehicle(eventvehicle);



    SendClientMessageToAll(-1,"Event System {FF0000}unloaded.");
    return 1;
    }


    Mit einer Schleife habe ich es ebenfalls versucht..


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Dankeschön @Jeffry


    Letzte Frage für Heute:


    Möchte per Dialog einstellen wie viel HP ein Spieler bei einem Event gesetzt bekommt, dafür nutze ich ein Dialog.
    Nur weiß ich nicht wie ich Input-Text korrekt verwende, aktuell sieht alles so aus, nur fehlt halt die Inputtext Funktion.



    //Standard kriegt der Spieler 100 HP beim betreten.
    new eventhealth = 100;


    Spieler betretet event:



    SetPlayerHealth(playerid, eventhealth);


    Dialog:



    if(dialogid == D_HEALTHCFG && response == 1)
    {
    eventhealth = inputtext; //wie frage ich hier den Inputtext ab?
    }



    Mit freundlichen Grüßen
    JustMe.77 8)

  • @Kaliber



    if(dialogid == D_HEALTHCFG && response == 1)
    {
    new string[64];
    eventhealth = floatstr(inputtext);
    format(string, sizeof(string),"You've set the Event Health to %f",inputtext);
    SendClientMessage(playerid, -1, string);



    }


    Egal was ich eingebe, es erscheint immer die Nachricht das dass Health auf 0.00000 gesetzt wurde.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Okay, funktioniert perfekt.


    Beim senden von Error Meldungen möchte ich immer das Dialogfeld erneut zeigen, muss ich dafür immer erneut ShowPlayerDialog verwenden oder kann man das auch einfacher lösen?


    Beispiel:



    if(dialogid == D_HEALTHCFG && response == 1)
    {
    if(!IsNumeric(inputtext))
    {
    ShowPlayerDialog(playerid, D_HEALTHCFG, DIALOG_STYLE_INPUT, "Event Health", "Please set the Event Health.", "OK", "");
    return SendClientMessage(playerid, -1,"Only numbers here!");
    }

    if(strval(inputtext) < 1 || strval(inputtext) > 100)
    {
    ShowPlayerDialog(playerid, D_HEALTHCFG, DIALOG_STYLE_INPUT, "Event Health", "Please set the Event Health.", "OK", "");
    SendClientMessage(playerid, -1, "Event Health: Min 1 / Max 100.");
    return 1;
    }



    new string[64];
    eventhealth = floatstr(inputtext);
    format(string, sizeof(string),"You've set the Event Health to {FF0000}%0.2f",eventhealth);
    SendClientMessage(playerid, -1, string);



    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Alles klar, verstehe.


    Noch ne kleine Frage (:D)


    Wie kann ich da wo #EventHealth steht, die aktuelle Nummer der Variable anzeigen lassen?



    CMD:ecfg(playerid,params[])
    {
    ShowPlayerDialog(playerid, D_EVENTCFG, DIALOG_STYLE_TABLIST_HEADERS, "Event Configuration",
    "Name\tStatus\tType\n\
    Max Players\t100\tINPUT\n\
    Health\t"#eventhealth"\tINPUT\n\
    Armour\t100\tINPUT\n\
    Skin\t67\tINPUT\n\
    HP Regain\t25\tINPUT\n\
    Nametags\tOFF\tBOOLEAN\n\
    Vehicles\tON\tBOOLEAN",



    "OK", "");
    return 1;
    }


    Wenn z.B. die Variable so ausschaut new Float:eventhealth = 100.0; soll im Dialog auch die 100 (oder 100.0) angezeigt werden.


    Mit freundlichen Grüßen
    JustMe.77 8)