Beiträge von Goldkiller

    Nen unperformanteren Code habe ich schon lange nichtmehr gesehen.
    Du hast im Enum den Beistrich nach carid vergessen.


    Ja genau,welchen Beistrich?


    Mach mal über dem Code
    #include <a_samp>


    #define Maxcars 100


    //Edit:
    enum PlayerCarInfo
    {
    carid
    }
    und
    enum PlayerCarInfo
    {
    carid
    };

    Das ist Beides möglich.Man muss nicht unbedingt ein Semikolon machen,falls er das meinte :-O.

    Ich würde dir einfach empfehlen sscanf zu benutzen,damit wäre das leicht gelößt.


    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    new
    iRank,
    sRankname[32];
    if(sscanf(cmdtext[13],"ds",iRank,sRankname)) {
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    }
    if( strlen(sRankname) > 20 ){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){strmid(GangInfo[PlayerGangID][RankN1], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==2){strmid(GangInfo[PlayerGangID][RankN2], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==3){strmid(GangInfo[PlayerGangID][RankN3], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==4){strmid(GangInfo[PlayerGangID][RankN4], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==5){strmid(GangInfo[PlayerGangID][RankN5], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==6){strmid(GangInfo[PlayerGangID][RankN6], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==7){strmid(GangInfo[PlayerGangID][RankNL], sRankname, 0, strlen(sRankname), 32);}
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    format(string,sizeof(string),"Du hast den Namen von Rang %d auf '%s' geändert!",iRank,sRankname);
    SendClientMessage(playerid,LIGHTBLUE,string);
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    Möglich dass es mit
    strget(cmdtext,2)
    auch funktioniert.Das müsstest du dann anstatt result beim kopieren benutzen.


    Übrigens ist
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}

    völiger Mist.Das überprüft nur ob an der Stellen von idx ein Wert höher als 21 gespeichert ist. Die Länge müsstest du schon mit strlen prüfen oder ob idx größer als 32 ist.

    Dann erklär mal genauer was du willst. Hab dich immernoch nicht 100% verstanden.
    Wenn du die Buchstaben einzelnt speichern willst,aus welchem Grund auch immer, dann kannst du sie als Integer speichern.
    new iASCII;
    iASCII = cmd[i];
    dini_IntSet("Datei.endung","Buchstabe",iASCII);

    Wozu zählt ihr denn überhaupt wieviele Einträge es sind.
    new JoinPed[][1] = {
    {280}, // LSPD 0
    {281}, // LSPD 1
    {282}, // LSPD 2
    {283}, // LSPD 3
    {284}, // LSPD 4
    {288}, // LSPD 5
    {71}, // LSPD 6
    {166}, // LSPD 7
    {148}, // LSPD 8
    {283}, // SFPD 10
    {280}, // SFPD 11
    {281}, // SFPD 12
    {148}, // SFPD 13
    {287}, // ARMY 14
    {148}, // ARMY 16
    {70}, // MEDIC 17
    {274}, // MEDIC 18
    {276}, // MEDIC 19
    {127}, // LCN 20
    {126}, // LCN 21
    {125}, // LCN 22
    {124}, // LCN 23
    {113}, // LCN 24 nein können sie nich
    {111}, // LCN 25
    {98}, // LCN 26
    {93}, // LCN 27
    {120}, // YAKI 28
    {121}, // YAKI 29
    {122}, // YAKI 30
    {123}, // YAKI 31
    {186}, // YAKI 32
    {228}, // YAKI 33
    {169}, // YAKI 34
    {155}, // PRÄSI 35
    {193}, // PRÄSI 36
    {127}, // HITMAN 37
    {165}, // HITMAN 38
    {186}, // HITMAN 39
    {141}, // HITMAN 40
    {93}, // HITMAN 41
    {187}, // CNN 42
    {188}, // CNN 43
    {93}, // CNN 44
    {255}, // TAXI 45
    {253}, // TAXI 46
    {76}, // TAXI 47
    {59}, // FAHRSCHULE 48
    {60}, // FAHRSCHULE 49
    {150}, // FAHRSCHULE 50
    {76}, // FAHRSCHULE 51
    {100}, // BIKER 52
    {247}, // BIKER 53
    {248}, // BIKER 54
    {254}, // BIKER 55
    {248}, // BIKER 56
    {131}, // BIKER 57
    {105}, // GROVE 58
    {106}, // GROVE 59
    {107}, // GROVE 60
    {269}, // GROVE 61
    {270}, // GROVE 62
    {271}, // GROVE 63
    {191}, // GROVE 64
    {102}, // BALLAS 65
    {195}, // BALLAS 66
    {104}, // BALLAS 67
    {193}, // BALLAS 68
    {185}, // FaF 69
    {23}, // FaF 70
    {50}, // FaF 71
    {193}, // FaF 72
    {192}, // FaF 73
    {108}, // VAGOS 74
    {109}, // VAGOS 75
    {110}, // VAGOS 76
    {226}, // VAGOS 77
    {114}, // AZTECAS 78
    {115}, // AZTECAS 79
    {116}, // AZTECAS 80
    {298}, // AZTECAS 81
    {173}, // RIFA 82
    {174}, // RIFA 83
    {175}, // RIFA 84
    {214}, // RIFA 85
    {223}, // WCC 86
    {234}, // WCC 87
    {250}, // WCC 88
    {7}, // WCC 89
    {93}, // WCC 90
    {280}, // FBI 91
    {284}, // FBI 92
    {286}, // FBI 94
    {148}, // FBI 95
    {277}, // FEUERWEHR 96
    {278}, // FEUERWEHR 97
    {279}, // FEUERWEHR 98
    {272}, // RM 99
    {125}, // RM 100
    {126}, // RM 101
    {255}, // OAMT 102
    {261}, // OAMT 103
    {76}
    }; //Hier soll der Fehler sein
    Zum Zugriff machst du hier
    JoinPed[index][0]
    Besser ab wäre noch:
    new JoinPed[] = {
    280, // LSPD 0
    281, // LSPD 1
    282, // LSPD 2
    283, // LSPD 3
    284, // LSPD 4
    288, // LSPD 5
    71, // LSPD 6
    166, // LSPD 7
    148, // LSPD 8
    283, // SFPD 10
    280, // SFPD 11
    281, // SFPD 12
    148, // SFPD 13
    287, // ARMY 14
    148, // ARMY 16
    70, // MEDIC 17
    274, // MEDIC 18
    276, // MEDIC 19
    127, // LCN 20
    126, // LCN 21
    125, // LCN 22
    124, // LCN 23
    113, // LCN 24 nein können sie nich
    111, // LCN 25
    98, // LCN 26
    93, // LCN 27
    120, // YAKI 28
    121, // YAKI 29
    122, // YAKI 30
    123, // YAKI 31
    186, // YAKI 32
    228, // YAKI 33
    169, // YAKI 34
    155, // PRÄSI 35
    193, // PRÄSI 36
    127, // HITMAN 37
    165, // HITMAN 38
    186, // HITMAN 39
    141, // HITMAN 40
    93, // HITMAN 41
    187, // CNN 42
    188, // CNN 43
    93, // CNN 44
    255, // TAXI 45
    253, // TAXI 46
    76, // TAXI 47
    59, // FAHRSCHULE 48
    60, // FAHRSCHULE 49
    150, // FAHRSCHULE 50
    76, // FAHRSCHULE 51
    100, // BIKER 52
    247, // BIKER 53
    248, // BIKER 54
    254, // BIKER 55
    248, // BIKER 56
    131, // BIKER 57
    105, // GROVE 58
    106, // GROVE 59
    107, // GROVE 60
    269, // GROVE 61
    270, // GROVE 62
    271, // GROVE 63
    191, // GROVE 64
    102, // BALLAS 65
    195, // BALLAS 66
    104, // BALLAS 67
    193, // BALLAS 68
    185, // FaF 69
    23, // FaF 70
    50, // FaF 71
    193, // FaF 72
    192, // FaF 73
    108, // VAGOS 74
    109, // VAGOS 75
    110, // VAGOS 76
    226, // VAGOS 77
    114, // AZTECAS 78
    115, // AZTECAS 79
    116, // AZTECAS 80
    298, // AZTECAS 81
    173, // RIFA 82
    174, // RIFA 83
    175, // RIFA 84
    214, // RIFA 85
    223, // WCC 86
    234, // WCC 87
    250, // WCC 88
    7, // WCC 89
    93, // WCC 90
    280, // FBI 91
    284, // FBI 92
    286, // FBI 94
    148, // FBI 95
    277, // FEUERWEHR 96
    278, // FEUERWEHR 97
    279, // FEUERWEHR 98
    272, // RM 99
    125, // RM 100
    126, // RM 101
    255, // OAMT 102
    261, // OAMT 103
    76
    }; //Hier soll der Fehler sein
    Zum Zugriff machst du hier
    JoinPed[index]

    Verstehe was du meinst,natürlich kannst du das so machen.Etwas umständlich aber möglich.


    Wie würdest du es aber machen, wenn man optional hinter fAngel noch iInterior und iVirtualWorld hätte? Da würde das glaube Ich nicht so leicht funktionieren.Denn dann müsstest du erst schauen ob für fAngel etwas angegeben wurde,danach iInterior und zum Schluss iVirtualWorld.
    Ist dir natürlich überlassen ob du v1 oder v2 von SSCANF nutzt, ich bleib beim Plugin.

    if(!IsPlayerConnected(playerid))
    {
    return SendClientMessage(playerid,HELLROT,"Du bist nicht online!");
    }

    Und wen interessiert das bzw wer soll das jemal lesen :P ?



    if( zahl == 1 && wert < 1)
    {
    return SendClientMessage(playerid,HELLROT,"Du kannst das Level des Spielers nicht auf 0 setzen!");
    }
    else if( zahl == 2 && ( wert < 0 || wert > 2) )
    {
    return SendClientMessage(playerid,HELLROT,"Es gibt nur 3 Premiumränge. (0=Garkeiner|1=Donator|2=Elite Donator)");
    }
    else if( zahl == 3 && wert < 0)
    {
    return SendClientMessage(playerid,HELLROT,"Die Premiumpunkte eines Spielers können nicht auf weniger als 0 gesetzt werden!");
    }
    else if( zahl == 4 && wert < 1)
    {
    return SendClientMessage(playerid,HELLROT,"Du kannst das Alter eines Spielers nicht auf weniger als 1 setzen!");
    }
    else if(zahl == 5 && ( wert < 1 || wert > 2 ) )
    {
    return SendClientMessage(playerid,HELLROT,"Es gibt nur 2 Geschlechter. (1=Männlich|2=Weiblich)");
    }

    Bei Zahl == 5 und Zahl == 2 musst du aufpassen,wenn du && mit einem || verknüpfen willst.So wie du es vorher hattest, würde es klappen wenn ( Jetzt bei Zahl == 5 ) die zahl == 5 und wert kleiner als 1 ODER wert größer als 2. Deshalb müsstest du das || in Klammern setzen, damit das als eigener Ausdruck gilt.

    Was hälst du eigentlich von deinem Threadtitel ?
    Frage zu einem Derby system, womit man spieler in einem Auto zum Zufall aus verschieden eingeteilten Spawn Coordinaten spawnt, ohne dass sie Doppelt sind & variablen überprüfen kann


    Du könntest eine extra Variable zu jedem Spawnplatz erstellen,die angibt ob es zur Zeit belegt ist oder nicht.Ist der Platz belegt,wird ein neuer gesucht ( Stichwort do {} whike(); ).Dabei muss man aber vorsichtig sein,dass es nicht zu einer unendlichen Schleife wird.

    Hat sich zwar erledigt,hättest aber den Text stehen lassen sollen.Egal, Ich weiss ja noch was dort stand :).


    Optinale Parameter funktioeren in der v1 von sscanf ( PAWN Code ) nicht so gut, lediglich ein optionaler String war leicht möglich.
    Mit der Plugin-Version kannst du alles als Optionale Parameter benutzen. Ich empfehle dir wirklich die Plugin Version, Ich nutze sie auch nur noch ausschließlich für mich.Damit hättest einfach machen können:
    if(sscanf(text,"sD(500)",sString,iInteger)) {}
    Damit würde iInteger 500 sein,falls man keinen Wert angibt.

    Was er da vor hat ist schon sinnvoll, nur nicht ganz ausgereift :P.


    Die Schleife wie du sie benutzt brauch man nicht mal.Das kann man anders machen.Hier mal n' kurze Skizze wie Ich das gemacht hätte.
    new
    g_Highest = 0;
    stock Connect_SetHighestID(playerid) {
    // Hat der neue Spieler eine höhere ID als die zZt noch höchste ?
    if( playerid > g_Highest ) g_Highest = playerid;
    return g_Highest;
    }
    stock Disconnect_SetHighestID(playerid) {
    if( playerid == g_Highest ) {
    // Nur wenn der Spieler die höchste ID hatte neue suchen
    for(new i = ( g_Highest - 1) ; i >= 0 ; i--) {
    if( IsPlayerConnected(i) ) {
    g_Highest = i;
    break;
    }
    }
    }
    return g_Highest;
    }


    Das von The Boondock Saints reicht aber auch völlig aus :-O

    ... :-O


    http://pastebin.com/JhNUHqbW


    So müsstes es auch funktionieren, habe es auch nicht probiert zu kompilieren.Geht ja eigentlich nur um das Prinzip dahinter.


    Zum Thema FarmerCheckpoints . Finde Ich jetzt auch nicht so gut gelöst.Hättest es auch mit sizeof(FarmerCPS) lösen können . Den DummyCP hätte man sich auch sparen können, indem man einfach das nicht-teilnehmen an dem FarmerJob durch
    AktuellerCP[playerid] = -1;
    Besser noch, so mach Ich es immer
    #define INVALID_FARMER_CP -1
    AktuellerCP[playerid] = INVALID_FARMER_CP;
    if( AktuellerCP[playerid] != INVALID_FARMER_CP ) { }

    Naja :huh:

    Er könnte an einem anderem Checkpoint sein,ja, aber das weiss man doch danach durch
    if(AktuellerCP[playerid] != 0 && FarmerFahrzeug(fahrzeug))
    dass er in der Farmer Routine ist. Ist AktuellerCP 0 , dann fährt er durch irgendeinen Checkpoint der nicht zur Farmerroute gehört, ist AktuellerCP != 0 , dann ist er in der Farmerroute.
    Ich bleib dabei, die Position zu überprüfen ist unnötig o0.