[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
  • Wie kann ich eine if Abfrage bei OnDialogResponse einbauen ohne dass es zu Fehlern kommt?


    Beispiel: case 0: if(isAdmin(playerid,5)) return SendClientMessage...
    GivePlayerWeapon(playerid,WEAPON_MP5);



    Habe etwas nach diesem Schema, beim Übersetzen bekomme ich aber einen Batzen an Fehlern..

  • Habe das Problem, dass dem Compiler die Line zu lang ist.



    Code
    savePlayer(playerid)
    {
    	if(sInfo[playerid][eingeloggt] ==0)return 1;
    	new query[128];
    	format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',banned='%i',bangrund='%s',wanteds='%i',knast='%i',knastzeit='%i',skin='%i',bank='%i' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][banned],sInfo[playerid][bangrund],GetPlayerWantedLevel(playerid),sInfo[playerid][knast],sInfo[playerid][knastzeit],GetPlayerSkin(playerid),sInfo[playerid][bank],sInfo[playerid][id]);
    	mysql_function_query(dbhandle,query,false,"","");
    	return 1;
    }

    Selbst im Quellcode sieht es schrecklich aus. Der Error lautet: error 075: input line too long (after substitutions)
    Was genau muss ich hier machen, um die Line zu trennen damit der Compiler nicht meckert?

  • Beitrag von Marschl ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Guten Abend,
    ich möchte gern einen TTT Server für SA:MP schreiben.
    Ich möchte das wenn es 4 Spieler sind 2 Traitor und 2 Innocent sin. Spielen nur 2 soll einer Inno sein und der andere Traitor. Spielen 6 soll es 3 Traitor geben und 3 Innos usw. so das alles gleich aufgeteilt ist.
    Wie kann ich nun den Spielern die verschiedenen (random) Werte zuweisen. Wir nehmen mal an " IsPlayerTraitor = 1 " wenn er Traitor ist und "IsPlayerTraitor = 0" wenn er keiner ist.
    @Jeffry
    Vielen Dank im Voraus!

    Einmal editiert, zuletzt von CaIaze ()

  • new variable;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i)) //Abfrage ob Spieler online ist, hier könnte man auch per Variable oder so überprüfen ob er gespawnt ist und im Spiel ist
    {
    if(variable==0)
    {
    variable = 1;
    IsPlayerTraitor{i]=1;
    }
    else
    {
    variable=0;
    IsPlayerTraitor[i]=0;
    }
    }
    }


    So werden im Wechsel die Spieler in die Teams beim Rundenbeginn gesetzt. Traitor, Innocent, Traitor, Innocent etc.

  • Eher eine Schlechte methode. Jede Runde werden die gleichen Spieler Traitor da es weder Random noch sonst eine Methode gibt. Jeder mit einer ungeraden Geraden Spieler ID wird Traitor, jeder mit einer Ungeraden Inno.
    Na dann musst nicht mehr lange herausfinden ^^
    Zudem ist MAX_Players weniger Performant als GetPlayerPoolSize();


    Schlauer wäre zum Beispiel folgendes:


    Wenn du das gerecht Aufteilen willst, musst du halt die Traitors zählen und die Schleife entweder solange ausführen bis genug Traitors gewählt wurden, oder die Chance nach jedem gewählten Traitor erhöhen.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Eher eine Schlechte methode. Jede Runde werden die gleichen Spieler Traitor da es weder Random noch sonst eine Methode gibt. Jeder mit einer ungeraden Geraden Spieler ID wird Traitor, jeder mit einer Ungeraden Inno.Na dann musst nicht mehr lange herausfinden ^^
    Zudem ist MAX_Players weniger Performant als GetPlayerPoolSize();


    Schlauer wäre zum Beispiel folgendes:


    Wenn du das gerecht Aufteilen willst, musst du halt die Traitors zählen und die Schleife entweder solange ausführen bis genug Traitors gewählt wurden, oder die Chance nach jedem gewählten Traitor erhöhen.

    Kleiner einwand:
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    (Wichtig ist das <=)


    GetPlayerPoolSize gibt die höchste Spieler ID zurück, wenn du < benutzt wird der letzte Spieler (der mit der höchsten ID) nie ausgewählt.

  • Kleiner einwand:for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    (Wichtig ist das <=)


    GetPlayerPoolSize gibt die höchste Spieler ID zurück, wenn du < benutzt wird der letzte Spieler (der mit der höchsten ID) nie ausgewählt.

    Danke euch. Werde es heute mal testen.

  • Wie kann ich das MapAndreas Include nutzen?
    Mich stoert bei der Funktion das Ampersand Symbol



    C
    stock TeleportPlayerToRandomPosition(playerid)
    {
    	new Float:Z;
    	//MapAndreas_FindZ_For2DCoord(GlobalZones[0][1], GlobalZones[0][3], &Float:Z);
    	SetPlayerPos(playerid,frandom(GlobalZones[0][1]),frandom(GlobalZones[0][3]),Float:Z);
    }

    Das ganze hier haut ja irgendwie nicht hin, warum nicht? Bitte um Rat


    Weiterhin eine andere Frage: Was fuer einen Return Wert hat sscanf?

  • Warum bringt das hier Errors?




    test.c(36) : error 008: must be a constant expression; assumed zero
    test.c(70-71) : error 008: must be a constant expression; assumed zero


    Wird genutzt fuer


    C
    new rand = random(sizeof(Colors));
    SetPlayerColor(playerid,Color[rand]);
  • Wie kann ich das MapAndreas Include nutzen?

    new Float:z;
    MapAndreas_FindZ_For2DCoord(xCoord, yCoord, z);
    SetPlayerPos(playerid, xCoord, yCoord, z);




    Weiterhin eine andere Frage: Was fuer einen Return Wert hat sscanf?

    0 wenn alle Parameter korrekt eingegeben werden.
    Du kannst es dir auch per print ausgeben lassen.
    printf("sscanf: %d", sscanf(params, "d", id));





    Warum bringt das hier Errors?

    Versuche
    { COLOR_GREY },
    zu:
    COLOR_GREY ,


    Für alle natürlich.

  • @Jeffry


    Vielen Dank schonmal, das mit dem return value war mir jetzt am wichtigsten.
    Also das heisst wenn ich das richtig verstehe, kann ich strcmp bei OnPlayerCommandText auch fuer jeden Command durch sscanf ersetzen?