Beiträge von Goldkiller

    Dafür habe Ich StripNewLine genommen.


    Könnte zB so aussehen:
    while( fread(fFile,sTmp,sizeof(sTmp)) )
    {
    StripNewLine( sTmp );
    if(!sTmp[0]) continue;
    if(!strcmp( sTmp, text ) ) {
    // eintrag gefunden!
    }
    }


    Warum benutzt du aber nicht direkt fexist um zu prüfen, ob es den User bereits gibt ?

    Das ist sehr umständlich eine Zeile aus einer Datei zu löschen.
    Man muss sich zuerst eine TEMP - Datei erstellen, in der man alles rein schreib, was man möchte.
    In deinem Fall alle Namen, außer den, den du löschen möchtest. Dann schließt man beide Datein wieder.
    Löscht die Ausgangsdatei und erstellt sie neu. Jetzt schreibt man den kompletten Inhalt aus der TEMP - Dateiin die Ausgangsdatei , die wir gerade neu erstellt haben.
    Hab es hier schon mal beschrieben.


    Es gab dafür auch mal eine Funktion , fremoveline. Die findet man aber nicht mehr :-0 .

    Dann mach das es richtig angezeigt wird.


    if(strcmp(cmdtext,"/start",true) == 0)
    {
    if(IsPlayerInJob(playerid,2))
    {
    if(IsPlayerInVehicle(playerid, 408))
    {
    new gPlayerCheckpointStatus[MAX_PLAYERS];
    gPlayerCheckpointStatus[playerid] = check1;
    SetPlayerCheckpoint(playerid, 2070.1125,-1986.1920,14.0974, 5.0);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist nicht in einem Müllwagen!");
    }


    }
    return 1;
    }

    Die Variable gPlayerCheckpointStatus in dem Command zu erstellen ist sinnlos. Die muss als erstes einmal Global sein.
    Zu deiner Sache,dass immer angezeigt wird, du sitzt nicht im Müllwagen. Das ist auch richtig so, dass es dir so angezeigt wird.
    Denn

    Zitat

    IsPlayerInVehicle(playerid, vehicleid)


    vehicleid ist nicht die ID des Fahrzeugmodells
    http://wiki.sa-mp.com/wiki/Function:IsPlayerInVehicle


    new gPlayerCheckpointStatus[MAX_PLAYERS]; // Global


    if(strcmp(cmdtext,"/start",true) == 0)
    {
    if(IsPlayerInJob(playerid,2))
    {
    new
    modelid,
    vehicleid;
    vehicleid = GetPlayerVehicleID( playerid );
    if( !vehicleid ) {
    SendClientMessage(playerid,ROT,"Du bist in keinem Fahrzeug!");
    return 1;
    }
    modelid = GetVehicleModel( vehicleid );
    if( modelid == 408)
    {
    gPlayerCheckpointStatus[playerid] = check1;
    SetPlayerCheckpoint(playerid, 2070.1125,-1986.1920,14.0974, 5.0);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist nicht in einem Müllwagen!");
    }


    }
    return 1;
    }

    Da ist so einiges falsch gewesen. Eine Funktion , die überprüft, ob man überhaupt ein Fahrzeug mit dem Kriterium findet würde es um einiges erleichtern.


    new cv = CreateVehicle(vID, x, y, z, 0, 117, 117, -1);
    Würde zB. bei der Suche nach Namen immer crashen , weil vID nie einen Wert zugewiesen bekommt.


    Ich hab das mal neu geschrieben :
    static const pAllVehicleNames[][] =
    {
    "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster",
    "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
    "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer",
    "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach",
    "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo", "Seasparrow",
    "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair",
    "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic",
    "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton",
    "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
    "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick",
    "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher",
    "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain",
    "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck",
    "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan",
    "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder",
    "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster", "Monster",
    "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
    "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30",
    "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
    "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car", "Police Car", "Police Car",
    "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs",
    "Boxville", "Tiller", "Utility Trailer"
    };
    enum {
    e_Not_Found = -1,
    e_Multi_Match = -2
    };


    stock GetVehicleModelIDByName( vehiclename[] , &treffer) {
    new
    iModelID = 0;
    treffer = 0;
    for(new i ; i < sizeof( pAllVehicleNames ) ; i++) {
    if(!strfind( pAllVehicleNames[i],vehiclename,true)) {
    treffer++;
    iModelID = 400 + i;
    }
    }
    if( treffer == 0 ) {
    return e_Not_Found;
    }
    else if( treffer > 1 ) {
    return e_Multi_Match;
    }
    else {
    return iModelID;
    }
    }
    COMMAND:v(playerid,params[]) {
    new
    modelid;
    if( sscanf(params,"d",modelid ) ) {
    // keine Zahl, also suchen durchsuchen wir namen!
    if( isnull(params) ) {
    return SendClientMessage(playerid,0xFF0000FF,"USAGE: /v ( FahrzeugID / Name )");
    }
    new
    iTreffer = 0,
    string[128];
    modelid = GetVehicleModelIDByName( params , iTreffer);
    if( modelid == e_Multi_Match ) {
    format(string,sizeof(string),"ERROR - Es wurden %d Fahrzeuge gefunden nach dem Suchkriterium '%s'.Bitte genauer suchen!",iTreffer, params);
    SendClientMessage(playerid,0xFF0000FF,string);
    return 1;
    }
    else if ( modelid == e_Not_Found ) {
    format(string,sizeof(string),"ERROR - Es wurden kein Fahrzeug gefunden mit dem Suchkriterium '%s'.",params);
    SendClientMessage(playerid,0xFF0000FF,string);
    return 1;
    }
    // Wir haben die modelid gefunden!
    // Rufen wir uns selber nochmal auf, dann brauch man den Code nicht kopieren!
    // uns selber = /V
    string[0] = '\0';
    format(string,sizeof(string),"%d",modelid);
    CallLocalFunction("cmd_v","ds",playerid,string);
    }
    else {
    // Zahl eingegeben
    // überprüfen
    if( modelid < 400 || modelid > 611) return SendClientMessage(playerid,0xFF0000FF,"Nur Model-ID's von 400-611 benutzen!");
    new
    name[MAX_PLAYER_NAME],
    string[128],
    vehicleid,
    Float:fX,
    Float:fY,
    Float:fZ;
    GetPlayerPos( playerid, fX , fY , fZ);
    GetPlayerName( playerid, name , sizeof(name) );
    vehicleid = CreateVehicle( modelid, fX , fY , fZ , 0.0 , -1 , -1 , -1);
    Adminauto[vehicleid] = 1;
    SetVehicleNumberPlate( vehicleid ,"Admin Car"); // Erst sichtbar nach respawn!
    SetVehicleHealth( vehicleid ,1000.0); // 1000.0 ist sowieso Standart - Sinn ???
    PutPlayerInVehicle(playerid,vehicleid,0);
    format(string, sizeof(string), "AdmCmd: %s hat eine(n) %s gespawnt.",name, pAllVehicleNames[ modelid - 400 ] );
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(Spieler[i][Admin] >= 1) SendClientMessage(i, 0xFF6347FF, string);
    }
    }
    return 1;
    }

    Ihr macht es euch viel zu umständlich.


    SetTimerEx("housese",3000,0,"ii",bes, idd);


    public housese(besitzer , houseid)
    {
    new
    Text3D:text3dlabel;
    text3dlabel = Hauser[houseid][dreid];
    // usw
    return 1;
    }
    Nehmt doch einfach die houseid als Referenz. Dann brauch man schon mal gar nicht mit Tags arbeiten ( Text3D: ) Mit der houseid kann man bestimmt auch auf den Besitzer schließen.
    Müsste aber auch funktionieren wie Martez es gezeigt hat.

    Definier mal "bevor der Spieler drinsitzt.".


    Du kannst die Fahrzeuge natürlich auch tunen lassen,wenn sie spawnen.
    public OnVehicleSpawn(vehicleid) {
    if( vehicleid == TUNEDIESESFAHRZEUGE ) { ... }
    return 1;
    }
    Dann musst du aber vorher wissen, welches Fahrzeug du tunen willst.
    Besorgst dir einfach bei OnGameModeInit ( oder dort,wo du das Fahrzeug erstellst ) die vehicleid und überprüfst bei OnVehicleSpawn, ob es gerade dein Fahrzeug spawnt und tunst es dann.

    Nicht gerade übersichtlich dein Code.


    Schau dir den Kommentar im Code an. Da wird beschrieben, was wir wieso machen. Sollte so funktionieren , testen kann Ich es ja schlecht :p.
    CMD:support(playerid,params[])
    {
    new
    string[128],
    stringd[128];
    text[128];
    // text brauchen wir nicht unbedingt. Wir könnten auch params verwenden.
    // Dann müssten wir aber folgenden check machen anstatt sscanf :
    // if( isnull(params) )
    if(sscanf(params,"s",text))
    {
    return ClientLanguageText(playerid,COLOR_RED,"Verwendung: /support [Text]","USAGE: /support [message]");
    }
    if(TicketGeschrieben[playerid] == 1)
    {
    return ClientLanguageText(playerid,COLOR_RED,"Du hast bereits ein Ticket geschrieben","You already have written a ticket!");
    }
    // Prüfen ob es überhaupt einen ADuty Spieler gibt!
    // Denn nur dann , senden wir die Nachricht, dass es keinen Supporter gibt
    new
    bool:bOnDuty = false;
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(ADuty[i] >= 1) {
    bOnDuty = true;
    }
    }
    }
    if(!bOnDuty) { // Kein ADuty Spieler gefunden!
    ClientLanguageText(playerid,COLOR_RED,"Im Moment ist kein Supporter zu erreichen!","At the moment there is no supporter online!");
    return 1;
    }
    // Wir formatieren 1x den String!
    // Das reicht völlig aus,da sowieso jeder die Gleiche Nachricht bekommt in diesem Fall
    format(string,sizeof(string),"%s(ID:%d) has written a ticket: %s",oPlayerName[playerid],playerid,text);
    format(stringd,sizeof(stringd),"%s(ID:%d) schrieb folgendes Ticket: %s",oPlayerName[playerid],playerid,text);
    // Wir wissen auch,dass es ADuty Spieler gibt! Daher setzen wir die Variable auf true / wahr / 1
    TicketGeschrieben[playerid] = 1;
    // Jetzt die ADuty Spieler erneut suchen.
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(ADuty[i] >= 1)
    {
    ClientLanguageText(i,COLOR_YELLOW,stringd,string);
    }
    }
    }
    return 1;
    }

    Das kann so gar nicht funktionieren,wenn du nur eine Variable als zwischenspeicher ( lizenzen ) nutzt.



    ocmd:zeigelizenzes(playerid,params[])
    {
    if(GetPVarInt(playerid,"Lizenzen",0))return SendClientMessage(playerid,ROT,"** Du hast Keine Lizenzen");
    new
    pID,
    sFSchein[6],
    sWSchein[6],
    string[60];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,HBLAU2,"Benutze: /zeigelizenzen [ID]");
    // Führerschein
    if(GetPVarInt(playerid,"Fuhrerschein") == 1) {
    sFSchein = "Ja";
    }
    else {
    sFSchein = "Nein";
    }
    if(GetPVarInt(playerid,"Waffenschein") == 1) {
    sWSchein = "Ja";
    }
    else {
    sWSchein = "Nein";
    }


    format(string,sizeof(string),"Waffenschein: %s\nFührerschein:%s",sFSchein,sWSchein);
    // später musst du hier aber noch playerid in pID ändern.
    ShowPlayerDialog(playerid,DIALOG_LIZEN,DIALOG_STYLE_MSGBOX,"Lizenzen",string,"Ok","");
    return 1;
    }

    Verstehe zwar nicht ganz, wieso du über /REPAIR von Jedem Spieler das Fahrzeug reparieren willst, aber gut.
    for(new i = i; i < MAX_PLAYERS; i++)
    {
    new vehicleid = (GetPlayerVehicleID(playerid)); // <-- Hier müsste i hin.
    new Float:VehHealth;
    GetVehicleHealth(vehicleid,VehHealth);
    if(VehHealth <1000.0)
    {
    SetVehicleHealth(vehicleid,1000.0);
    RepairVehicle(vehicleid);
    }
    }


    Die Variablen würde Ich nicht immer neu in der Schleif erstellen:
    if(strcmp(cmdtext,"/repair",true)==0)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetPVarInt(playerid,"Vehrepair")==0)
    {
    new
    vehicleid,
    Float:VehHealth;
    SetPVarInt(playerid,"Vehrepair",1);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun repariert wenn es Schaden nimmt.");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    vehicleid = GetPlayerVehicleID(i);
    GetVehicleHealth(vehicleid,VehHealth);
    if(VehHealth < 1000.0)
    {
    SetVehicleHealth(vehicleid,1000.0);
    RepairVehicle(vehicleid);
    }
    }
    }
    else
    {
    SetPVarInt(playerid,"Vehrepair",0);
    SendClientMessage(playerid,BLAU,"Dein Fahrzeug wird nun nicht mehr repariert.");
    }
    }
    else
    {
    SendClientMessage(playerid, ROT, "Du bist in keinem Fahrzeug.");
    }
    return 1;
    }
    Hast i mit playerid vertauscht.

    Hast recht, hab es falsch aus meinem Code kopiert:
    // gAdmin.pwn
    #define foreach(%1) \
    for(new %1;%1<g_Max_Players;%1++) if(IsPlayerConnected(%1) && !IsPlayerNPC(%1) )

    Hab es nämlich bei mir so, wohl falsch umgeschrieben :pinch: .


    Es fehlte hinten die Klammer ) , die die Bedingung schliet.


    #define foreach(%1) \
    for(new %1 = 0; %1 < MAX_PLAYERS ; %1++) if( IsPlayerConnected(%1) )

    Kommt auf den Zusammenhang an, wie du es erstellt hattest.
    Sagt eigentlich,dass der Compiler nicht weiss, mit welchem Index der Variable er arbeiten soll ( da es ja ein Array ist ).
    Funktioniert es denn jetzt wenigstens ?

    Was du dort hast,sieht nämlich so aus:

    for(new i = 0 ; i < MAX_PLAYERS && IsPlayerConnected(i) ; i++) {
    // Code
    }
    // ==
    for(new i = 0 ; i < MAX_PLAYERS ; i++) {
    if( !IsPlayerConnected(i) ) break;
    // Code
    }
    Das es mit diesem break nicht sinnvoll ist,sollte klar sein :p.




    Um nochmal auf den Sinn des Threads zu kommen.
    for(new i = 0 ; i < MAX_PLAYERS ; i++) if(IsPlayerConnected(i) ) {


    }


    #define foreach(%1) \
    for(new %1 = 0; %1 < MAX_PLAYERS ; %1++) if( IsPlayerConnected(%1) )
    // Nutzung:
    foreach(i) {
    printf("ID's Online: %d",i);
    }

    Kannst also mit diesem define arbeiten.Das ist nicht das foreach, von dem hier gesprochen wurde!
    Sie meinten nämlich folgendes : http://forum.sa-mp.com/showthread.php?t=92679


    //Edit: Fehler :-0

    Ne, gibt es nicht.Hättest du auch einfach nachschauen können, sieht aber eher nach Postcount erhöhen aus.

    // File functions
    native ffind(const pattern[], filename[], len, &idx);
    native frename(const oldname[], const newname[]);


    // Directory functions
    native dfind(const pattern[], filename[], len, &idx);
    native dcreate(const name[]);
    native drename(const oldname[], const newname[]);
    Für dich,Headpuster.

    Noch kürzer:


    for(new i;i<MAX_PLAYERS&&IsPlayerConnected(i);i++)


    so sehn bei mir quasi alle Schleifen aus


    Dann funktionieren quasi alle deine Schleifen nicht richtig.


    Nehmen wir an,wir haben Spieler mit den IDs:

    Zitat

    0, 1 , 5 , 6


    Deine Schleife beginnt.
    0 < MAX_PLAYERS && IsPlayerConnected(0) - wahr / true
    1 < MAX_PLAYERS && IsPlayerConnected(1) - wahr / true
    2 < MAX_PLAYERS && IsPlayerConnected(2) - falsch / false
    Schleife wird beendet.
    ID 5 und 6 werden niemals erreicht.
    Denn die Schleife läuft nur so lange,wie die Bedingung wahr ist.Sobald eine ID unbenutzte haben, wird die Schleife beendet. Egal ob danach noch irgendeine belegte pielerID kommt oder nicht.
    Von daher,keine Gute Idee so die Schleifen zu machen.

    Hab mich eigentlich schon gefragt wo du grund definierst, es aber nicht gesehen. Wollte es gerade bei mir selber testen da hab Ich es erst gesehen.
    Deswegen mach ich auch immer bei Variablen folgende Übersicht:
    new
    pID,
    money,
    text[256],
    text2[256],
    name[128],
    grund[128];

    Wie auch immer ... ,
    new pID, money, text[256], text2[256], name[128], grund;
    grund ist kein Array.
    new pID, money, text[256], text2[256], name[128], grund[128];


    Sollte es jetzt immernoch nicht gehen, mach noch zusätzlich folgendes rein
    printf("cmdtext-> '%s'",cmdtext);