Beiträge von Goldkiller

    DMA,
    stock strmatch(const str1[], const str2[])
    return (!strcmp(str1, str2)&&strlen(str1)==strlen(str2));
    Ist auch ohne '?(true):(false)' noch schneller :P


    @ BlackFoX ,
    üff...Sehr langsam die funktion....

    Die Funktionen funktionieren bestimmt nicht :
    GetPlayerPosEx
    GetPlayerWorld
    GetPlayerEnergie
    GetPlayerTeamEx
    GetPlayerMoneyScore
    GetPlayerInfos
    Hab mir die Anderen jetzt nicht genau angeguckt.
    Wenn die funktioneren sollen wie du es möchtest,musst du auch angeben dass der Wert an eine Variable übergeben werden soll die du als Parameter in der Funktion angibst.
    Dazu brauchst du den '&' Operator im Funktionsheader,hier mal wie GetPlayerPosEx sein müsste.

    native GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z, &Float:a);


    stock GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z, &Float:a)
    {
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    return 1;
    }


    Du solltest vor dem releasen auch die Funktionen testen :0.

    Würde nämlich sagen du brauchst gar keine playerid für so etwas.Denn dieser AllRountTimer (es wird mit d geschrieben,AllRound) soll für alle Spieler gleichzeit etwas aufrufen.CustomPickups(),SteamPickups(), etc. sind bestimmt dazu gedacht für jeden Spieler die Pickups zu streamen,nicht für einen bestimmten.
    Versuch es mal so.
    SetTimer("AllRountTimer",1000,1);


    public AllRountTimer() // Wird Alle 1000 Aufgerufen
    {
    OtherTimer();
    // OnPlayerUpdate(playerid); <-- völliger blödsinn
    CustomPickups();
    StreamPickups();
    SyncUppunkt += 1;
    FoodTimerpunkt +=1;
    if(SyncUppunkt <= 60)
    {
    //SendClientMessage(playerid, COLOR_YELLOW,"Test SyncUp Geht");
    print("Test SynchUp geht");
    SyncUp();
    SyncUppunkt =0;
    }
    if(FoodTimerpunkt <= 6)
    {
    //SendClientMessage(playerid, COLOR_YELLOW," test FoodTimer Geht");
    print("Test FoodTimer geht");
    FoodTimer();
    FoodTimerpunkt = 0;
    }
    }

    if(SyncUppunkt == 60 || SyncUppunkt > 60)

    Das kannst du auch anders schreiben.
    if(SyncUppunkt <= 60)

    Das "else if" kannst du dir auch sparen.Denn es gibt ja den Fall das beide gleichzeit aufgerufen werden sollten.Nämlich jede Minute.


    Zitat

    garnichts davon... jetz habe ich ne Frage ist das überhaupt möglich ? geht es Leichter ?


    Das geht natürlich.Ist auch vom Grundgerüst her richtig wie du es hast.


    //Edit: Kannst mal sagen wieso es AllRountdTimer(playerid) ist,mich interessiert wieso du playerid brauchst.

    OnPLayerCommand Text
    {
    if(PlayerData[playerid][Level] >= 1) //da musste deine definitions von den Adminlvls einfügen
    {
    new name[MAX_PLAYER_NAME], s[180],tag,monat,jahr,std,minuten,sek;
    GetPlayerName(playerid,name,sizeof(name));
    getdate(tag,monat,jahr);
    gettime(std,minuten,sek);
    format(s,sizeof(s),"%s nutzte %s am %d.%d.%d um %d:%d:%dUhr\r\n",name,cmdtext,tag,monat,jahr,std,minuten,sek);
    new File:gla=fopen("admcmds.txt",io_append);
    if(gla) {
    fwrite(gla,s);
    fclose(gla);
    }
    }
    return 1;
    }
    - string s würd ich größer machen
    - gab keinen grund cmdtext[0] zu nehmen,cmdtext ist das Gleiche
    - return 1; am ende solltest du weg lassen je nachdem wo du den Code in OnPlayerCommandText einfügt,lass es lieber weg und alles ist ok.
    - Abfrage ob admcmds.txt erfolgeich geöffnet wurde kann nicht schaden.

    AARRGGHHHH hab ne Zeile vergessen^^ sry
    [...]


    if(strcmp(cmdtext,"/announce",true,9)==0) {
    if(!strlen(cmdtext[10])) return SendClientMessage(playerid,FARBE,"/announce Text");
    GameTextForAll(cmdtext[10],5000,6);
    return 1;
    }
    Variable s ist doch wohl unnötig.

    Das Script ist ja ein richtiges Chaos.
    Hier hast die gefixxte Version. -> Klick mich
    Das Callback von OnPlayerCommandText() war nicht richtig geschlossen weil du an die falsche Stelle dcmd_kick eingefügt hast.


    Nebenbei,das OnPlayerUpdate() - Callback ist nicht dazu gedacht großen Code auszuführen.Es wird ~30x pro Sekunden (Wenn man nicht gerade AFK ist) aufgerufen.Das ist totaler blödsinn hier immer wieder die Spielerstatistik zu speichern.Es reicht völlig wenn man alles speichert beim Verlassen des Servers.
    Das es dabei zu laggs kommt sollte klar sein.Mit jedem Spieler wird es schlimmer auf deinem Server.

    Klugscheißen sollte man nur,wenn man den Fehler auch behebt.Alleine schon vom lesen der Outputs (Fehler) siehst du dass das Problem eine undefinierte Variable ist.Englisch kann manchmal wirklich sehr,sehr schwer sein.


    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);


    Solltet euch das mal merken,dass man immer die Fehlerlog lesen sollte falls es denn Fehler gibt.

    Zitat

    Ich hab im englischen SA-MP Forum gelesen dass jemand ein Timeout System suchte und jemand ihm antwortete dass er mal nach gAdmin suchen solle, da es ein Timeout System enthält...stimmt das?..ich hab bis jetzt noch nichts davon gelesen, vielleicht hab ichs uebersehen :P


    Ist schon richtig was du sagst.Sowas gibt es nicht direkt in gAdmin.
    Was du möchtest ist das die Position gespeichert beim verlassen des Servers (Crash) und wenn man wieder joint,startet man an der Stelle wo man vor dem verlassen (crash) war.


    Zitat

    Ich hab auch schon versuch selbst was zusammen zu puzzlen das hat aber nie geklappt. War immer erfolglos :(...
    Ich krieg zwar keine Warnings/Errors aber es funktioniert trotzdem nicht.


    Zeigst mal :0 ?


    Vielleicht mach ich später eine compile option rein die automatisch X,Y,Z beim verlassen des Servers speichert.

    Hier wieder ein exemplar von Leuten die man nicht ernst nehmen kann in ICQ.
    Schlag euch die Köpfe ein...Wer Lust hat kann auch seine ICQ Gespräche hier posten

    Ich benutzt dcmd + sscanf.Es ist viel besser als die strtok - Variante die leider zu weit verbreitet ist.
    Wenn du dir das Tutorial durchließt wirst du sehen das diese Methode besser ist.Hier wäre auch der Code wie man es damit schreiben könnte.
    dcmd_givemoney(playerid,params[]){
    new
    giveid,
    cash;
    if (sscanf(params, "dd",giveid,cash)) {
    return SendClientMessage(playerid,COLOR_SYSTEM,"USAGE: /givemoney [playerid] [Amount]");
    }
    else if(!IsPlayerConnected(giveid)){
    return SendClientMessage(playerid,COLOR_RED2,"Ungültige Spieler ID");
    }
    else if(playerid==giveid) {
    return SendClientMessage(playerid,COLOR_RED,"Du kannst die selber kein Geld schicken!");
    }
    else if(cash>GetPlayerMoney(playerid) || cash<0){
    return SendClientMessage(playerid,COLOR_GREY,"money1");
    }
    else {
    GivePlayerMoney(playerid,-cash);
    GivePlayerMoney(giveid,cash);
    // Nachricht kannst ja selbst schreiben


    }
    return 1;
    }

    Es geht auch viel einfacher + besser + schneller.
    >> dcmd + sscanf
    dcmd_kick(playerid,params[]) {
    new
    sGrund[128],
    pID;
    if(sscanf(params, "dz",pID,sGrund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] ([grund],optional)");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    new
    ThePlayer[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
    format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund[0] ? sGrund : "<Kein Grund>");
    SendClientMessageToAll(COLOR_YELLOW,string);
    Kick(pID);
    return 1;
    }