Beiträge von Jeffry

    Da haben wir doch den Fehler.

    Zitat

    [14:46:32] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")


    Du hast in deiner Tabelle keine Spalte die "id" heißt. Sprich, diese Spalte kann nicht ausgelesen werden. Und mit ziemlicher Wahrscheinlichkeit speicherst du die ID gar nicht beim speichern der Gutscheine.


    Füge eine Spalte id zu deiner Tabelle hinzu und füge das Speichern der ID zu speichern der Gutscheine hinzu.
    Dann sollte es klappen.

    Keine, die wirklich schön aussieht.
    Man könnte vielleicht unter OnPlayerUpdate immer wieder SetPlayerPos machen, wenn er gefreezet ist, zu der Position die er hatte als er die Handschellen bekommen hat (in Spielervariable speichern).


    Oder du setzt unsichtbare Objekte um den Spieler herum, das würde vielleicht auch noch gehen.


    Inwiefern das aber toll aussieht, und ob es tatsächlich klappt, musst du ausprobieren.

    Wenn ein Spieler gefreezet wird, werden die Animationen beendet.
    Du kannst ihm nicht gleichzeitig die Handschellen geben und ihn freezen.


    Gewöhne dir bitte in Zukunft auch an, nicht den ganzen Post mit allen Codes zu zitieren, das macht den Thread sehr unübersichtlich.

    Du hattest die Cache Funktionen nicht richtig verwendet (erster Parameter bei den Get Funktionen ist die Zeile, also i der Schleife), und die Schleife war die falsche.
    Außerdem hat beim string am Anfang der Platzhalter zur Übergabe des vorherigen Strings gefehlt.


    Kannst dir ja auch beide Codes mal nebeneinander anschauen, dann werden die Änderungen deutlicher. ;)

    public ShowFMember(playerid)
    {
    new member_string[1024];
    print("0");
    new rows = cache_get_row_count();
    new member_name[MAX_PLAYER_NAME];
    for(new i=0; i<rows; i++)
    {
    print("1");
    cache_get_field_content(i,"Name",member_name,mycon);
    new member_rang = cache_get_field_content_int(i,"Rang",mycon);
    format(member_string, sizeof(member_string), "%sName: %s - Rang: %d\n",member_string,member_name, member_rang);
    printf(member_string);
    print("2");
    }
    ShowPlayerDialog(playerid,DIALOG_4ETC, DIALOG_STYLE_MSGBOX, "{FCD888}Fraktionsverwaltung{ffffff} - Member", member_string, "Ok", "Abbrechen");
    print("3");
    return 1;
    }


    So sollte es passen.

    Dann poste mal den MySQL Log der kommt, wenn du mysql_log auf LOG_ALL machst und dann die Fahrzeuge lädst.
    Steht das Fahrzeug richtig in der Datenbank?

    Warum so umständlich?
    CMD:anticheat(playerid, params[])
    {
    if(!IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid, BELA, "Du musst im RCON eingeloggt sein!");
    return 1;
    }
    new string[1600];
    format(string,sizeof(string),"1. Turn ON/OFF: Too High Ping [%s]\n2. Turn ON/OFF: Anti JetPack-a [%s]\n3. Turn ON/OFF: Anti Speed Hack [%s]\n4. Turn ON/OFF: Bad Weapons [%s]\n5. Turn ON/OFF: Anti RCON Hack [%s]\n",StatusVP(),StatusPJP(),StatusPB(),StatusZO(),StatusRCONZ());
    format(string,sizeof(string),"%s6. Turn ON/OFF: Anti Swear [%s]\n7. Turn ON/OFF: Anti Drive By [%s]\n8. Turn ON/OFF: Anti Bunny Hop [%s]\n9. Turn ON/OFF: Anti AirBrake [%s]\n10. Turn ON/OFF: Anti Money Hack [%s]",string,StatusZR(),StatusDBP(),StatusBHP(),StatusPAB(),StatusNN());
    format(string,sizeof(string),"%s\n11. Turn ON/OFF: Anti Health Hack [%s]\n12. Turn ON/OFF: Anti Armour Hack [%s]\n13. Turn ON/OFF: Anti Interior Hack [%s]\n14. Turn ON/OFF: Anti Fly Hack [%s]\n15. Turn ON/OFF: Anti Teleport[1] [%s]\n16. Turn ON/OFF: Anti Teleport[2] [%s]\n",string,StatusNH(),StatusNA(),StatusNT(),StatusFP(),StatusANT());
    format(string,sizeof(string),"%s16. Turn ON/OFF: Anti Teleport[2] [%s]\n17. Turn ON/OFF: Anti Vehicle Repair [%s]\n18. Turn ON/OFF: Anti Spam [%s]\n19. Turn ON/OFF: Anti AFK [%s]",string,StatusANT2(),StatusAVR(),StatusAS(),StatusAAFK());
    ShowPlayerDialog(playerid, 19999, DIALOG_STYLE_LIST, "[Setting AntiCheat]",string, "Ok", "Cancle");
    return 1;
    }
    ;)

    Möglicherweise weil die Zeile dann zu lang ist.
    Ein define macht ja nichts anderes als eine Textersetzung vorzunehmen. Wenn die Zeile nach der Ersetzung zu lang ist, kann es zu dem Absturz kommen.

    Das liegt daran, dass du die Schleife so oft ausführst, wie es Fraktionen gibt.
    Du musst zuerst die Gegnerfraktion herausfinden (ich weiß ja nicht, wie das System bei dir ist), und dann:
    new on[2];
    on[0] = 0;
    on[1] = 0;
    for(new p=0;p<MAX_PLAYERS;p++)
    {
    if(GetPlayerFaction(p) == HIER_DIE_GEGNER_FRAKTION) {
    on[0]++;
    }
    if(GetPlayerFaction(p) == GetPlayerFaction(playerid))
    {
    on[1]++;
    }
    }
    if(testphase == 0)
    {
    if(on[0] <= 2) return SendClientMessage(playerid, COLOR_WHITE, "Es sind nicht genügend Spieler aus der Gegner Fraktion Online (mindestens 2)");
    if(on[1] <= 2) return SendClientMessage(playerid, COLOR_WHITE, "Es sind nicht genügend Fraktions-Mitglieder Online (mindestens 2)");
    }



    Pr0x: Du hast es falsch verstanden. Er kann alleine angreifen, und das soll nicht gehen. Laut Code ist das ja auch so, nur durch die Schleife wird er eben X mal gezählt, sprich der Fehler entsteht.

    Schreibe es so:
    if(strcmp("/carkey", cmd, true) == 0)
    {
    if(MaxVeh[playerid] > 1)
    {
    CarKey[playerid] += 1;
    if(CarKey[playerid] == MaxVeh[playerid])
    {
    CarKey[playerid] = 0;
    }
    if(Carlist[playerid][CarKey[playerid]][Typ] != -1)
    {
    new index = -1;
    for(new i=0; i<sizeof(Kaufliste); i++)
    {
    if(Kaufliste[i][Modelid] == Carlist[playerid][CarKey[playerid]][Typ])
    {
    index = i;
    break;
    }
    }
    if(index == -1) format(string, sizeof(string), "Du nimmst deinen %dten Auto-Schlüssel, für deinen <unbekannt> !", CarKey[playerid]+1);
    else format(string, sizeof(string), "Du nimmst deinen %dten Auto-Schlüssel, für deinen %s !", CarKey[playerid]+1, Kaufliste[index][Name]);
    }
    else
    {
    format(string, sizeof(string), "Du nimmst deinen %dten Auto-Schlüssel !",CarKey[playerid]+1);
    }
    SendClientMessage(playerid,COLOR_YELLOW,string);
    }
    return 1;
    }

    Du musst es nach diesem Prinzip machen:
    #define StatusAAFK() (!AAFK)?("AUS"):("AN")


    Das () nach dem StatusAAFK kannst du dir auch sparen, das bringt nichts.

    Würdest du bitte nicht meinen ganzen Post mit allen Codes zitieren? Das macht den Thread sehr unübersichtlich. Danke! :)


    Du hast ein return vergessen:
    ocmd:uncuff(playerid, params[])
    {
    if(sInfo[playerid][fraktion]==1)
    {
    new pID;
    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, -1, "[USAGE]: /uncuff [Part of Name/Player ID]");
    if(IsPlayerConnected(pID))
    {
    SetPlayerSpecialAction(pID,SPECIAL_ACTION_NONE);
    TogglePlayerControllable(pID,1);
    new str[512];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new target[MAX_PLAYER_NAME];
    GetPlayerName(pID, target, sizeof(target));
    format(str, sizeof(str), "INFO: Du hast %s entcufft!",target);
    SendClientMessage(playerid, COLOR_WHITE, str);
    format(str, sizeof(str), "WARNING: Du wurdest von %s entcufft!",name);
    SendClientMessage(pID, COLOR_WHITE, str);
    return 1;
    }
    }
    return 1; //Das hier.
    }

    So sollte es zu deinem /cuff passen:
    ocmd:uncuff(playerid, params[])
    {
    new pID;
    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, -1, "[USAGE]: /uncuff [Part of Name/Player ID]");
    if(IsPlayerConnected(pID))
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(IsPlayerInRangeOfPoint(pID, 5.0, x, y, z))
    {
    SetPlayerSpecialAction(pID,SPECIAL_ACTION_NONE);
    TogglePlayerControllable(pID,1);
    new str[512];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new target[MAX_PLAYER_NAME];
    GetPlayerName(pID, target, sizeof(target));
    format(str, sizeof(str), "INFO: You have uncuffed %s!",target);
    SendClientMessage(playerid, 0xE01B1B, str);
    format(str, sizeof(str), "WARNING: You have been uncuffed by %s!",name);
    SendClientMessage(pID, 0xE01B1B, str);
    return 1;
    }

    }
    return 1;
    }

    Strings müssen in Anführungszeichen übergeben werden.


    format(query, sizeof(query), "UPDATE samp_players SET lastlogin = '%s' WHERE SpielerName = '%s'", FormatString, GetName(playerid));


    DeaN Hunter: Gewöhne dir auch gleich eine ungeschriebene Programmiererregel an: Variablen werden am Anfang immer klein geschrieben.