Beiträge von Jeffry

    Meine Glaskugel ist leider gerade kaputt. 8|
    Könntest du auch schildern, was genau nicht tut, bzw. was passiert wenn du was machst. Wird der Countdown angezeigt, kommt sonst irgendwas? Einfach alles was du weißt.


    Wenn gar nichts passiert: Wird der Timer überhaupt aufgerufen?

    if(sInfo[playerid][Fraktion] == 1)
    {
    new string[200],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"%s funkt: %s",name,text);
    scm(i,c_pd,string);
    return 1;
    }
    zu
    if(sInfo[i][Fraktion] == 1) //hier i
    {
    new string[200],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"%s funkt: %s",name,text);
    scm(i,c_pd,string);
    }
    return 0;


    Die null sagt hier, dass keine Chat Nachricht gesendet werden soll.
    Außerdem muss sie aus der schleife raus, sonst zeigt es deinen funkspruch nur für eine Person an.


    Und in der schleife musst du natürlich abfragen, ob i in der Fraktion ist, damit er die Nachricht bekommt, sonst bekommt sie jeder, da playerid ja zwangsläufig drinnen ist.

    if(!GetPlayerMoney(playerid) < strval(inputtext))// Zeile 347
    zu:


    if(GetPlayerMoney(playerid) >= strval(inputtext))// Zeile 347
    oder:
    if(!(GetPlayerMoney(playerid) < strval(inputtext)))// Zeile 347


    Beides geht.

    Alle "inputtext" zu "strval(inputtext)"


    if(!GetPlayerMoney(playerid) < strval(inputtext))// Zeile 347
    {
    new string[128];
    new text[128];
    format(string, sizeof string,"/Accounts/%s.ini",name(playerid));
    dini_IntSet(string,"Bank",strval(inputtext)); // Zeile 352
    format(text,sizeof text,"Sie haben erfolgreich %i$ eingezahlt !",strval(inputtext));
    ShowPlayerDialog(playerid,ABHEBEN,DIALOG_STYLE_MSGBOX,"Einzahlung erfolgreich !",text,"Auf","Wiedersehen");
    }


    strval = der Zahlenwert eines Strings.

    Das wird ja immer schlimmer. :thumbdown:


    Der Grund für den Fehler ist, dass in einem enum dürfen keine Zahlen stehen, dort müssen "Variablen" (Definitionen) stehen.
    Das kannst du so nicht machen.


    Wenn du abfragen willst, ob der Spieler in einem Auto mit einer der obigen IDs ist, musst du ein Array erstellen:
    new carIDs[] = {
    400, 409, 415, 422, 434, 442, 459, 475, 482, 492,
    401, 410, 418, 423, 436, 444, 466, 477, 483, 494,
    402, 411, 419, 424, 438, 445, 467, 478, 489, 495,
    404, 413, 420, 426, 439, 451, 470, 479, 490, 496,
    405, 414, 421, 429, 440, 458, 474, 480, 491, 500,
    502, 503, 504, 505, 506, 507, 516, 517, 518, 525,
    526, 527, 528, 529, 532, 533, 534, 535, 536, 540,
    541, 542, 543, 545, 546, 547, 549, 550, 551, 552,
    554, 555, 556, 557, 558, 559, 560, 561, 562, 565,
    566, 567, 568, 575, 576, 579, 580, 582, 585, 587,
    589, 596, 597, 598, 599, 600, 601, 602, 603, 604,
    605
    };


    Edit:
    Noch die Abfrage gratis dazu:
    stock IstInAuto(playerid)
    {
    new id = GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i = 0; i<sizeof(carIDs); i++) if(id == carIDs[i]) return 1;
    return 0;
    }



    Im Post unter mir:
    @NeonReflexe: Man lernt, indem man liest. Du lernst ja in der Schule auch, indem du zuhörst, und nicht indem der Lehrer dir zuhört. ;) (PS: Bester Song ever, Wise Guys :thumbup: ).

    Der rechnet meine ich das ganze mit Variablen und gettime aus. Ganz so übertrieben wird das bei den Timern nicht... du musst Timer bei manchen sachen benutzen und das würde heißen, dass jeder Server laggen wurde?! :D


    Wer auch immer dir das erzählt hat, der wollte dich wohl auf den Arm nehmen und zwar gehörig. :wacko:


    Hier mal ein debug für dein "wait" stock:
    stock wait(seconds)
    {
    new _newTime[4], _oldTime[4], i;
    gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
    _oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
    while(_newTime[3] != (_oldTime[3] + seconds))
    {
    gettime(_newTime[0], _newTime[1], _newTime[2]);
    _newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
    printf("Aufruf Nummer: %d", i);
    i++;
    }
    }


    wait(30);


    Probiers bitte mal aus. Bei mir kam i bis zu 587723, bei 30 Sekunden, das heißt die Schleife wiederholt sich in 30 Sekunden 587724 mal (hat bei 0 angefangen zu zählen). In dieser Zeit geht gar nichts am Server, die CPU Leistung schießt auf 100% hoch. Wenn irgendein Server die Funktion verwendet, dann kann ich dir garantieren, dass dort keiner spielt.


    Spoiler anzeigen
    PS: Ungelogen: Es war wirklich Zufall, dass ich den Code um genau 00:00:00 gestartet habe. 8|


    In diesem Fall ist ein Timer angebracht.

    Da geht warscheinlich kein Weg an einem Timer vorbei :o Ich benutze bei so etwas gerne die funktion "wait".


    Bloß nicht!!!!
    Da kannste ja schonmal Gute Nach zu deinem Server sagen. Diese Funktion hängt den Server für X Skunden einfach auf, die CPU Leistung rast auf 100% hoch. Da ist so ziemlich das falscheste was man nur machen kann.
    Das ist absolut falsch das hier zu verwenden.


    ------------------


    Ganz einfach:
    new pCar[MAX_PLAYERS] = {-1,...};
    new pTimer[MAX_PLAYERS] = {-1,...};


    OnPlayerStateChange
    if(newstate == PLAYER_STATE_DRIVER) KillTimer(pTimer[playerid]), pTimer[playerid] = -1, pCar[playerid] = GetPlayerVehicleID(playerid);
    if(oldstate == PLAYER_STATE_DRIVER && IsATutorialVehicle(pCar[playerid])) pTimer[playerid] = SetTimerEx("RemoveCar", 30000, 0, "dd", pCar[playerid],playerid), pCar[playerid] = -1;


    forward RemoveCar(id,playerid);
    public RemoveCar(id,playerid)
    {
    pTimer[playerid] = -1;
    for(new i=0; i<MAX_PLAYERS; i++) if(GetPlayerVehicleID(i) == id && IsPlayerInAnyVehicle(i)) return 1; //Spieler im Auto
    return SetVehicleToRespawn(id);
    }


    stock IsATutorialVehicle(id) //TutCar entsprechend der Variable für die Tutorial Autos.
    {
    for(new i=0; i<MAX_VEHICLES; i++) for(new t=0; t<MAX_TUT_CARS; t++) if(i == TutCar[t]) return 1;
    return 0;
    }


    Einige teile werden bestimmt an deinen Code angepasst werden müssen, je nach dem wie dein Code aussieht.

    Hast du denn kein Statistiken System mit dem dein Server die Spieler-Statistiken speichert?
    Wenn doch, dann solltest du dir dort abschauen wie es dort gemacht wurde. Am besten wäre es natürlich, wenn du die Sache selbst gemacht hättest.


    Einfach mal nachschauen wie z.B. Geld gespeichert wird. Das machst du dann genauso mit den beiden Variablen, jeweils.

    Ach ja, das auch noch. Hatte ich gar nicht gesehen. Mensch != Kompiler ;(


    new fid[46];
    fid = GetPVarInt(playerid,"Fraktion")
    format(FrakDatei,sizeof(FrakDatei),"/Fraktionen/%s.txt",fid);


    zu:
    new fid;
    fid = GetPVarInt(playerid,"Fraktion")
    format(FrakDatei,sizeof(FrakDatei),"/Fraktionen/%i.txt",fid);


    Das Gleiche hier, fid ist ein Interger.

    Die Anzahl ist eine Zahl (Integer) und muss auch als solches deklariert und verwendet werden:
    ocmd:storedrugs(playerid,params[])
    {
    new anzahl;
    if(GetPVarInt(playerid,"Fraktion")==3)
    {
    if(sscanf(params,"i",anzahl))return SendClientMessage(playerid,blau,"Tippe: /storedrugs [Anzahl]");
    if(IsPlayerInRangeOfPoint(playerid,6.0,-2714.7249, -314.5928, 6.6404))
    {
    if(GetPVarInt(playerid,"Drogen") < anzahl) return SendClientMessage(playerid,rot,"** Du hast nicht so viel Drogen bei dir.");
    {
    new FrakDatei[128];
    new fid[46];
    fid = GetPVarInt(playerid,"Fraktion")
    format(FrakDatei,sizeof(FrakDatei),"/Fraktionen/%s.txt",fid);
    dini_IntSet(FrakDatei,"Drogen",anzahl);
    SetPVarInt(playerid,"Drogen",GetPVarInt(playerid,"Drogen")-anzahl);
    }
    }
    }
    }

    Die rufst die Funktion nirgends auf.
    Entweder löschen, an entsprechender Stelle hinzufügen ODER:


    stock resetPlayer(playerid){ sInfo[playerid][level]=0; sInfo[playerid][eingeloggt]=0; sInfo[playerid][id]=0; return 1;}
    Steht "stock" davor, so wird der Schnipsel so lange vom Compiler ignoriert, bis du ihn benutzt.

    Ist doch schon gemacht. ;)


    Siehe hier:
    format(string,sizeof(string),"Respektpunkte: %i/%i",GetPVarInt(i,"Respektpunkte"), GetPlayerScore(i)*8);


    Da du dem Spieler 1 Score gibst wenn er ein neues Level erreicht, habe ich einfach GetPlayerScore genommen, und das mal 8 um das 8,16,24,... zu erreichen. Einfache Mathematik.

    Nach resetPlayer suchen und weg machen.


    Oder, wenn du es nicht findest, warum auch immer, oben im Code hinzufügen:
    #pragma unused resetPlayer


    Das heißt einfach, dass etwas definiert wurde, aber nie benutzt wird.