Beiträge von Goldkiller

    Naja, Team/Fraktionsnachrichten würde ich durch eine extra Funktion schicken lassen. Habe ja geschrieben was in der Schleife keinen Sinn macht:


    Oben bei ocmd:contract solltest du auch mal das Geld als integer machen und nicht als string.

    PHP
    format(string, sizeof(string),"Sie haben auf %s %s$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %s wurde %s$ Kopfgeld Gesetzt!",pID,geld);


    daraus sollte das werden:

    PHP
    format(string, sizeof(string),"Sie haben auf %s %i$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %s wurde %i Kopfgeld Gesetzt!",pID,geld);


    Das ist übrigens auch noch falsch.
    Wir haben auch einen p(a)wn bbcode.
    format(string, sizeof(string),"Sie haben auf %i %i$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %i wurde %i Kopfgeld Gesetzt!",pID,geld);
    Er ließt nie den Namen aus,daher bringt auch nur die ID etwas.



    ocmd:contract(playerid,params[])
    {
    new pID, geld;
    new string[64], string1[64];
    if(!sscanf(params, "ui", pID, geld))
    format(string, sizeof(string),"Sie haben auf %s %s$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %s wurde %s$ Kopfgeld Gesetzt!",pID,geld);
    for(new i=0;i<GetMaxPlayers();i++){
    if(IsPlayerConnected(i)){
    if(PlayerInfo[i][pMember] == 9){
    SendClientMessage(i,GRUEN,string1);
    SendClientMessage(playerid,GRUEN,string);
    PlayerInfo[pID][pKopfgeld] = geld;
    GivePlayerMoney(playerid, -geld);
    SpielerSpeichern(pID);
    }
    }
    }
    return 1;
    }
    Wozu ist dort die Schleife gut ? Zumindest sollten folgende Instruktionen nicht in der Schleife passieren:
    PlayerInfo[pID][pKopfgeld] = geld;
    GivePlayerMoney(playerid, -geld);
    SpielerSpeichern(pID);
    Das Kopfgeld wird eigentlich immer erhöht und nicht fest gesetzt.
    Setzt du auf einen Spieler ein Kopfgeld von 10000$ und ich danach auf 50$,wird dein Kopfgeld überschrieben. Ist sicherlich nicht Sinn der Sache.
    Bevor du bei OnPlayerDeath mit der Variable killerid arbeiten möchtest,solltest du sie auf INVALID_PLAYER_ID überprüfen. Es besteht ja die Möglichkeit,dass es ein Selbstmord war.
    Ich weiss auch nicht was folgendes bewirken soll:
    if(!sscanf(params, "ui", pID, geld))
    Du brichst dort den Befehl nicht mal ab,falls es falsche Eingaben gab. Genau genommen überprüfst du auf nichts.

    Schon mal was von Punktrechnung vor Strichrechnung gehört ?

    Zitat

    ja da es in millisekunden ist du musst es nur imrechnen /60 = sekunde /60/60 sollte Minute sein


    Ja klar :| .
    1000 ms = 16,67s
    Kann ja nur falsch sein.


    format(string,128,"Deine zeit: %d",( GetTickCount() - count[playerid] ) / 1000 ); // Sekunden
    Ich würde daher eher mit Nachkommastellen ausgeben lassen:
    format(string,128,"Deine zeit: %.2f",( GetTickCount() - count[playerid] ) / 1000.0 );

    Dann siehst ja wo der Fehler liegt. PI[playerid][pGebannt] ist nicht das,was du erwartest.


    while(mysql_fetch_row(Data))
    {
    printf("LoadBan(%d) - Data -> '%s'",playerid,Data);
    sscanf(Data, "p<|>ds[128]s[128]",PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]);
    }
    printf("LoadBan(%d) #2 %d %s %s",PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]);


    Kannst ja mal testweise probieren eine Variable dazwischen zu schieben , zwischen dem auslesen von gebannt ( d ) und der Variable PI[playerid][pGebannt].


    d -> temp_gebannt
    temp_gebannt -> PI[playerid][pGebannt]


    Eventuell noch pGebannt mal zeigen.


    Hups,die Zeile war falsch:
    printf("LoadBan(%d) #2 %d %s %s",playerid,PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]); // playerid fehlte :-O

    Wie auch immer,es wird ja in die if() - Bedingung gegangen.
    Was du da hast ist ein SA:MP Fehler. Wird der Spieler gekickt,werden ( warum auch immer ) die SendClientMessages nicht mehr gesendet. Obwohl sie vor dem Kick() gesendet werden.


    //Edit:
    Hier:
    http://forum.sa-mp.com/showthread.php?t=323853

    Ja und weiter ? Du stellst dich sehr ungeschickt an. Mach doch einen vollständigen Test.


    stock LoadBan(playerid)
    {
    printf("LoadBan(%d) #1",playerid);
    new query[128],Data[512];
    format(query, 128,"SELECT `Gebannt`,`Banner`,`BanGrund` FROM `player` WHERE `Name` = '%s'",PlayerName(playerid));
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row(Data))
    {
    sscanf(Data, "p<|>ds[128]s[128]",PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]);
    }
    printf("LoadBan(%d) #2 %d %s %s",PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]);
    if(PI[playerid][pGebannt]==1)
    {
    printf("LoadBan(%d) #3",playerid);
    SendClientMessage(playerid,cRed,"Du bist auf den Server Gebannt!");
    SendClientMessage(playerid,cRed,"banart: {FF8000}Permanent");
    printf("LoadBan(%d) #4",playerid);
    format(query, 128,"Der Ausführende Administrator: {FF8000}%s",PI[playerid][pBanner]);
    printf("LoadBan(%d) #5",playerid);
    SendClientMessage(playerid,cRed,query);
    printf("LoadBan(%d) #6",playerid);
    format(query, 128,"Aus den Grund: {FF8000}%s",PI[playerid][pBanGrund]);
    printf("LoadBan(%d) #7",playerid);
    SendClientMessage(playerid,cRed,query);
    SendClientMessage(playerid,cRed,"Solltest du einwände haben, dann melde dich im TS");
    printf("LoadBan(%d) #8",playerid);
    Kick(playerid);
    printf("LoadBan(%d) #9",playerid);
    }
    printf("LoadBan(%d) #10",playerid);
    mysql_free_result();
    return 1;
    }

    Wieso versuchst du es nicht mit debuggen ? Du bist immerhin schon lang genug im Forum unterwegs um zu wissen wie man das anwendet.


    while(mysql_fetch_row(Data))
    {
    sscanf(Data, "p<|>ds[128]s[128]",PI[playerid][pGebannt],PI[playerid][pBanner],PI[playerid][pBanGrund]);
    }

    Weisst du ob die while-Schleife jemals durchgeführt wird. Was steckt denn danach in pGebannt für ein Wert ? So schwer ist das doch nicht 0o.


    Zitat

    Les mal den Text durch
    da steht ja es kommt keine Message also was bedeutet es?


    Genau was er geschrieben hat. Man erkennt doch gar nicht den Unterschied zwischen "die Funktion wurde aufgerufen" und "die Funktion wurde nicht aufgerufen". Nur weil die Nachricht nicht kommt ... .

    Nein,so wie KingMS geschrieben hat. Die Variable mit dem Namen health für den Skin zu benutzen ist schon etwas verwirrent :wacko: .


    Dir fehlen aber anscheinend die Grundlagen:
    new Float:skin;
    if(skin >= 0 && skin <= 299)
    Wie kommst du dort darauf ein Tag ( Float ) zu verwenden ?! Der Skin ist eine gerade Zahl,keine 254.525.

    Was macht ihr da ?!
    Der Code aus dem Startpost ist doch richtig:
    new vehicleid = GetPlayerVehicleID(playerid);
    AddVehicleComponent(vehicleid, 1010);

    Da ist absolut nichts falsch dran ( man kann natürlich noch prüfen ob vehicleid gültig ist ).Ihr wollt nur GetPlayerVehicleID direkt in AddVehicleComponent packen und kriegt es nicht richtig hin 0o.


    MrMaTriXx,
    gib doch mal per print oder SendClientMessage aus,ob die if() Abfrage überhaupt funktioniert:
    if(pickupid == nitropickup)
    {
    SendClientMessage(playerid,-1,"Tunen ... "); // <--
    new vehicleid = GetPlayerVehicleID(playerid);
    AddVehicleComponent(vehicleid, 1010);
    return 1;
    }


    Was ist mit Usern die gerade nicht Online sind ;) ? Hab mir den Code nicht vollständig angeschaut. Aber in der Schleife die Zufalls-Nummer immer neu anzulegen,nicht so clever^^.

    Wenn die Handynummer nur im Profil steht,eher schwer umsetzbar. Denn du kannst nicht ohne weiteres jede Datei in einem Ordner öffnen ( wäre nur mit Plugin möglich ).
    Du müsstest dann jedes Profil abrufen und schauen,ob der Spieler dort nicht bereits diese Handynummer besitzt.


    Einfacher wäre es,eine Datei anzulegen in der einfach nur alle belegten Handynummern drin stehen. Ob das jetzt mit SQL oder normalen Dateien gemacht wird, ist dir überlassen. Bei den normalen Dateien würde es auch mit Dini funktionieren. Der Schlüssel wäre die Handynummer,der Wert z.B. der Spielername. Du legst die Zufalls-Handynummer an und prüfst ob diese bereits in der Datei ist.
    Falls ja, neue Zufalls-Handynummer anlegen. Falls nicht,ist sie nun belegt und legst sie in der Datei als belegt an.

    Ob erfahren mit der Funktion oder nicht,debuggen hilft immer.


    while(fread(hFile, string))
    {
    printf("string -> '%s' , pName1 -> '%s'",string,pName1);
    if(strcmp(string, pName1, true) == 0)

    Je nachdem ob du auf Windows bzw Linux testest, könnte der Fehler bei string liegen. Natürlich kannst du posten was bei dir dort ausgegeben wird.

    Das sowieso ;). Lösungen posten bringt hier keinem was.
    Übrigens wäre mit eurer Formatierung ( %s\n%s ) erst immer eine Zeile frei. Man nimmt ( bzw Ich ) immer:
    format( ... , ... , "%s%s\n", output, zeile );
    output ist Anfangs sowieso leer,daher egal.Dann kommt zeile und dann erst ein Zeilenumbruch.

    Goldkiller ne frage dazu
    ein \n kann ja nicht ausgelesen werden
    wie macht man dann ein Zeilenumbruch?


    :huh:
    Hab ich doch geschrieben.Ein Zeilenumbruch kann man nicht auslesen,ist ja eine neue Zeile.Daher:

    Zitat

    fread ließt übrigens immer nur eine Zeile aus. Um alle Zeilen auszulesen wäre eine while-Schleife um fread angebracht.


    Ob du es jetzt wieder hinzufügst,dir überlassen.


    ja soweit klar. aber könntest du mir vielleicdht ein kleines beispiel geben? ich weiss selbermachen, macht schlau. aber ich saß gestern den ganzen tag dran und war abends noch immer nicht schlauer. wäre echt dufte von dir. :rolleyes:


    Hast du denn wenigstens versucht es umzusetzen.Die Abfrage die ich als Kommentar geschrieben habe dürfte ja kein Problem sein.
    Wenn du sowieso schon vom Wiki kopierst,dann mach es richtig und schau wie dort while benutzt wird ;).
    http://wiki.sa-mp.com/wiki/Fread

    ocmd:test(playerid,params[])
    {
    new File:BusiBank = fopen("Startup.txt",io_read);
    new read[128];
    fread(BusiBank,read); // Vor dem lesen prüfen ob BusiBank ( die Datei ) überhaupt geöffnet werden konnte. Sonst gib einen Fehlermeldung aus : "Datei nicht gefunden o.Ä".
    ShowPlayerDialog(playerid,DIALOG_BANLIST,DIALOG_STYLE_MSGBOX,"{33AA33}Bannliste",read,"Okay","");
    return 1;
    }
    fread ließt übrigens immer nur eine Zeile aus. Um alle Zeilen auszulesen wäre eine while-Schleife um fread angebracht.