[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
  • Was bedeutet es eigentlich, wenn man continue verwendet?


    beispielsweise if(SpielerInfo[playerid][pAdmin]) continue;


    Was bedeutet es dann? Und muss man beim verwenden was beachten?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • if (strcmp("/maehen", cmdtext, true, 10) == 0)
    {
    if(IsPlayerInVehicle(playerid, 572))
    {
    new rand = random(sizeof(CheckpointInfo));
    SetPlayerCheckpoint(playerid, CheckpointInfo[rand][X], CheckpointInfo[rand][Y], CheckpointInfo[rand][Z], 3.0);
    }
    else
    {
    SendClientMessage(playerid, rot, "Du bist nicht in einem Rasenmaeher!");
    }
    return 1;
    }


    Kann mir jemand sagen was ich falsch gemachte?
    Ich bekomme die Meldung "Du bist nicht in einem Rasenmaeher!" obwohl ich in einem bin.

  • Guten Nachmittag.


    Da ich seit gestern mit den 3DLabels Krieg habe und das Problem nicht lösen kann, wende ich mich mal an euch.


    Weiß jemand, warum die ganzen 3DTexte nicht erstellt werden?

    if(step){
    for(new i=0; i<cache_get_row_count(); i++){
    if(MarkerData[i][Label] != Text3D:INVALID_3DTEXT_ID){
    Delete3DTextLabel(Text3D:MarkerData[i][Label]);
    MarkerData[i][Label] = Text3D:INVALID_3DTEXT_ID;
    }
    MarkerData[i][ID] = cache_get_field_content_int(i,"ID",db_H);
    MarkerData[i][MX] = cache_get_field_content_float(i,"X",db_H);
    MarkerData[i][MY] = cache_get_field_content_float(i,"Y",db_H);
    MarkerData[i][MZ] = cache_get_field_content_float(i,"Z",db_H);
    cache_get_field_content(i, "fwort", MarkerData[i][Wort],db_H,20);
    cache_get_field_content(i, "solution", MarkerData[i][Loesung],db_H,20);
    MarkerData[i][Gewinn] = cache_get_field_content_int(i,"cash",db_H);
    MarkerData[i][status] = cache_get_field_content_int(i,"state",db_H);
    new string[55];format(string,sizeof(string),"{0087FF}[Event]\n{FFFFFF}Gesucht:\n%s",MarkerData[i][Wort]);
    MarkerData[i][Label] = Create3DTextLabel(string,0xFFFFFFFF,MarkerData[i][MX],MarkerData[i][MY],MarkerData[i][MZ],45.0,0,1);
    MarkerData[i][timestamp] = tsp;
    printf("%d",i);
    m_count++;
    }

    Es hängt auf jeden Fall mit dem Löschen zusammen, sonnst gäbe es das Problem nicht. Zudem überschreiben sich die ganzen IDs auch. ._.
    E: Änderung im code




    E: Keine Hilfe mehr benötigt, gerade einen Lösungsweg gefunden nach Stunden...

    Einmal editiert, zuletzt von Andosius ()

  • Ja aber dies hier ist doch wohl kein Enum:

    if(step){
    for(new i=0; i<cache_get_row_count(); i++){
    if(MarkerData[i][Label] != Text3D:INVALID_3DTEXT_ID){
    Delete3DTextLabel(Text3D:MarkerData[i][Label]);
    MarkerData[i][Label] = Text3D:INVALID_3DTEXT_ID;
    }
    MarkerData[i][ID] = cache_get_field_content_int(i,"ID",db_H);
    MarkerData[i][MX] = cache_get_field_content_float(i,"X",db_H);
    MarkerData[i][MY] = cache_get_field_content_float(i,"Y",db_H);
    MarkerData[i][MZ] = cache_get_field_content_float(i,"Z",db_H);
    cache_get_field_content(i, "fwort", MarkerData[i][Wort],db_H,20);
    cache_get_field_content(i, "solution", MarkerData[i][Loesung],db_H,20);
    MarkerData[i][Gewinn] = cache_get_field_content_int(i,"cash",db_H);
    MarkerData[i][status] = cache_get_field_content_int(i,"state",db_H);
    new string[55];format(string,sizeof(string),"{0087FF}[Event]\n{FFFFFF}Gesucht:\n%s",MarkerData[i][Wort]);
    MarkerData[i][Label] = Create3DTextLabel(string,0xFFFFFFFF,MarkerData[i][MX],MarkerData[i][MY],MarkerData[i][MZ],45.0,0,1);
    MarkerData[i][timestamp] = tsp;
    printf("%d",i);
    m_count++;
    }


    Schreibe es so:

    if(step){
    for(new i=0; i<cache_get_row_count(); i++){
    if(MarkerData[i][Label] != INVALID_3DTEXT_ID){
    Delete3DTextLabel(MarkerData[i][Label]);
    MarkerData[i][Label] = INVALID_3DTEXT_ID;
    }
    MarkerData[i][ID] = cache_get_field_content_int(i,"ID",db_H);
    MarkerData[i][MX] = cache_get_field_content_float(i,"X",db_H);
    MarkerData[i][MY] = cache_get_field_content_float(i,"Y",db_H);
    MarkerData[i][MZ] = cache_get_field_content_float(i,"Z",db_H);
    cache_get_field_content(i, "fwort", MarkerData[i][Wort],db_H,20);
    cache_get_field_content(i, "solution", MarkerData[i][Loesung],db_H,20);
    MarkerData[i][Gewinn] = cache_get_field_content_int(i,"cash",db_H);
    MarkerData[i][status] = cache_get_field_content_int(i,"state",db_H);
    new string[55];format(string,sizeof(string),"{0087FF}[Event]\n{FFFFFF}Gesucht:\n%s",MarkerData[i][Wort]);
    MarkerData[i][Label] = Create3DTextLabel(string,0xFFFFFFFF,MarkerData[i][MX],MarkerData[i][MY],MarkerData[i][MZ],45.0,0,1);
    MarkerData[i][timestamp] = tsp;
    printf("%d",i);
    m_count++;
    }

  • Hey, ich bin gerade dabei ein Wahlsystem für Parteien zu machen.
    Leider ist mir ein Fehler unterlaufen:
    Im Dialog, wenn ich eine Partei wählen möchte, kann ich immer nur die Partei mit der ID 1 wählen. Und das ist egal, welches ich anklicke.
    Jeffry: :love:
    Befehl:



    COMMAND:wahl(playerid,params[])
    {
    #pragma unused params
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    if(Spieler[playerid][pInPrison] == 1)return SendClientMessage(playerid,GRAU,"Du bist im Prison.");
    if(Spieler[playerid][pFriedhof] == 1)return SendClientMessage(playerid,GRAU,"Du bist Tot.");
    if(Spieler[playerid][pDeath] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
    if(Spieler[playerid][pJailed] != 0)return SendClientMessage(playerid,GRAU,"Du bist im Gefängnis.");
    if(Spieler[playerid][pTazerd] == 1)return SendClientMessage(playerid,GRAU,"Du bist K.O/getazert.");
    if(Spieler[playerid][pCuffed] == 1)return SendClientMessage(playerid,GRAU,"Du bist gefesselt.");
    if(WahlenOffen == 0)return SendClientMessage(playerid, GRAU, "Es sind keine Wahlen offen.");
    new string[612],count;
    for(new p=1;p<MAX_PARTEI;p++)
    {
    if(PartInfo[p][ParteiCreatet] != 0 && PartInfo[p][ParteiAusgeschlossen] == 0)
    {
    format(string,sizeof(string),"Partei: %s | Gründer: %s\n%s",PartInfo[p][ParteiName],PartInfo[p][ParteiOwner],string);
    ShowPlayerDialog(playerid,DIALOG_PARTEIWAEHLEN,DIALOG_STYLE_LIST,""#SERVERFARBE""#SERVERNAME"{FFFFFF}: Parteien",string,"Verlassen","");
    count++;
    }
    }
    if(count == 0)return SendClientMessage(playerid, GRAU, "Es existieren keine Parteien zum wählen.");
    return 1;
    }



    Dialog:

    case DIALOG_PARTEIWAEHLEN:
    {
    new string[128], query[128];
    if(response == 0)
    {
    return 1;
    }
    else
    {
    for(new p=1;p<MAX_PARTEI;p++)
    {
    if(Spieler[playerid][pParteiGewaehlt] == 1)return SendClientMessage(playerid, GRAU, "Du hast bereits eine Partei gewählt.");
    Spieler[playerid][pParteiGewaehlt] = 1;
    PartInfo[p][ParteiStimmen]++;
    format(string,sizeof(string),"Du hast für die Partei '%s' gewählt.",PartInfo[p][ParteiName]);
    SendClientMessage(playerid,WEISS,string);
    format(query,sizeof(query),"UPDATE "#SQL_TAG"_partei SET ParteiStimmen = %d WHERE ParteiName= '%s'",PartInfo[p][ParteiStimmen],PartInfo[p][ParteiName]);
    mysql_function_query(MySqlConnection,query,false,"","");
    return 1;
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von aytef ()

  • Hey in der Zeile SendClientMessage kommen 2 Warnings...

    Code
    C:\Users\Patrick\Desktop\IRP-City\gamemodes\T2R.pwn(43836) : warning 202: number of arguments does not match definition
    C:\Users\Patrick\Desktop\IRP-City\gamemodes\T2R.pwn(43836) : warning 202: number of arguments does not match definition


    if(strcmp(cmd,"/contracts",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pMember] == 8)
    {
    SendClientMessage(playerid, 0xCDB221FF, "Contracts");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pContractSumme] > 1)
    SendClientMessage(playerid, COLOR_GOLD, "Name: %s Premie: %d$",i,PlayerInfo[i][pContractSumme]);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist kein Hitman !");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt !");
    }
    }

  • SendClientMessage(playerid, COLOR_GOLD, "Name: %s Premie: %d$",i,PlayerInfo[i][pContractSumme]);
    zu:
    new str[145];
    format(str, sizeof(str), "Name: %s Premie: %d$",SpielerName(i),PlayerInfo[i][pContractSumme]);
    SendClientMessage(playerid, COLOR_GOLD, str);



    @Voxa:
    @iEnerqie:
    Macht doch bitte einen Thread auf wenn ihr gescheite Hilfe haben wollt. Ihr seht doch selbst wie unübersichtlich das hier ist, wenn 3 Probleme ineinander gepostet werden. Danke.

  • Nachrichten sollte man formatieren können aber egal


    if(strcmp(cmd,"/contracts",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pMember] == 8)
    {
    SendClientMessage(playerid, 0xCDB221FF, "Contracts");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    new string[128];
    if(PlayerInfo[i][pContractSumme] > 1)
    format(string,sizeof(string),"Name: %s Premie: %d$",SpielerName(i),PlayerInfo[i][pContractSumme]);
    SendClientMessage(playerid, COLOR_GOLD,string);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist kein Hitman !");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt !");
    }
    }


    Jeffry:
    darauf habe ich nicht geachtet :D

  • @xCurry:
    Wenn du es so machst wirst du einen Haufen an falschen bzw. leeren Nachrichten bekommen, da nur der format zum if zählt.


    So:
    if(strcmp(cmd,"/contracts",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    new str[145];
    if(PlayerInfo[playerid][pMember] == 8)
    {
    SendClientMessage(playerid, 0xCDB221FF, "Contracts");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pContractSumme] > 1)
    {
    format(str, sizeof(str), "Name: %s Premie: %d$",SpielerName(i),PlayerInfo[i][pContractSumme]);
    SendClientMessage(playerid, COLOR_GOLD, str);
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist kein Hitman !");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt !");
    }
    }

  • Jeffry:
    Danke das /contracts system Funktioniert.
    Aber jetzt habe ich ein Fehler bei OnPlayerDeath wenn er eig. Das Geld übergeben sollte.
    if(PlayerInfo[playerid][pContracted] == 1)
    {
    if(PlayerInfo[killerid][pMember] == 8 || PlayerInfo[killerid][pLeader] == 8)
    {
    new killer[MAX_PLAYER_NAME];
    GetPlayerName(killerid, killer, sizeof(killer));
    GivePlayerMoney(killerid, PlayerInfo[playerid][pContractSumme]);
    format(string,128,"<< Hitman %s hat den Auftrag an %s erfüllt und bekommt: $%d >>",killer,name,PlayerInfo[playerid][pContractSumme]);
    SendFamilyMessage(8, COLOR_YELLOW, string);
    PlayerInfo[playerid][pContracted] = 0;
    PlayerInfo[playerid][pContractSumme] =0;
    }
    }


    Keine Fehler.
    Aber er sendet die Nachricht nicht <<Hitman %s hat den Auftrag an %s erfüllt und bekommt: %d>>
    und er gibt kein Geld und Contracted wird nicht auf 0 Gesetzt.

  • if(PlayerInfo[playerid][pContracted] == 1 && killerid != INVALID_PLAYER_ID)
    {
    if(PlayerInfo[killerid][pMember] == 8 || PlayerInfo[killerid][pLeader] == 8)
    {
    new killer[MAX_PLAYER_NAME];
    GetPlayerName(killerid, killer, sizeof(killer));
    GivePlayerMoney(killerid, PlayerInfo[playerid][pContractSumme]);
    format(string,128,"<< Hitman %s hat den Auftrag an %s erfüllt und bekommt: $%d >>",killer,name,PlayerInfo[playerid][pContractSumme]);
    SendFamilyMessage(8, COLOR_YELLOW, string);
    PlayerInfo[playerid][pContracted] = 0;
    PlayerInfo[playerid][pContractSumme] =0;
    }
    }


    Schreibe es so mal ganz als erstes unter OnPlayerDeath hin.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen