Beiträge von Jeffry

    Natürlich musst du das für alle machen.


    format(pInfo[playerid][ChNaEins],32, dini_Get(Spielerdatei,"Charaktername1")); //kleines n hier.
    format(pInfo[playerid][ChNaZwei],32, dini_Get(Spielerdatei,"CharacterName2"));
    format(pInfo[playerid][ChNaDrei],32, dini_Get(Spielerdatei,"CharacterName3"));
    format(pInfo[playerid][ChNaVier],32, dini_Get(Spielerdatei,"CharacterName4"));
    format(pInfo[playerid][ChNaFuenf],32, dini_Get(Spielerdatei,"CharacterName5"));


    new string[828];
    kannst du getrost zu 256 runtersetzen, bei 5 Zeilen wirst du keine 828 Zeichen brauchen.

    z.B [32] -> Länge des Strings ist 33 Zeichen 0-32


    Nicht ganz. Es ist ein Array respektive String der Länge 32 Zeichen, das Array kann über die Indexe 0-31 aufgerufen werden.


    Ansonsten ist der Rest natürlich korrekt! :)




    @Jorska: %d zu %s
    d ist Integer
    s ist String

    Was? Jetzt werden die zwei Nachrichten im Befehl auch nicht mehr geprintet? Dann hast du aber etwas mehr gemacht als nur die Zeile hinzugefügt.


    Funktionieren denn die anderen Befehle in deinem GameMode noch?


    Schau Bitte erst mal, dass der Befehl überhaupt aufgerufen wird, und die prints angezeigt werden wenn du den Befehl eingibst. Solange das nicht tut, bringt alles nichts.

    Wie erstellst du die Objekte? (Code)
    Wenn du den Befehl gibst, dass sich das Tor öffnen soll, werden die Checkpoints gesetzt, bzw. Die Nachrichten ausgegeben?

    Ok. Da bei params nichts steht gibt es zwei Möglichkeiten.
    1) Du hast nichts eingegeben
    2) ocmd tut nicht gescheit.


    Was gibst du genau ein?


    Lade dir die neuste Version von ocmd nochmal runter und kompiliere das ganze nochmal durch.


    Füg bei OnPlayerCommandText ganz oben noch dazu:
    printf("%d typed: %s", playerid, cmdtext);


    Dann poste was du eingibst und was im server_log steht.

    Zwar funktioniert deine Version, ich möchte aber aus reinem Interesse wissen, ob es da nicht ne andere Möglichkeit gibt.
    Die auch so funktioniert, dass ich optional das letzte mitgeben kann.


    Nein, meines Wissens nach nicht. Falls doch wäre mir das neu, zudem ist diese Variante relativ einfach, sind ja nur drei Zeilen und keine 100. :)
    Google scheint auch nicht viel darüber zu wissen, ich habe nur von angesprochenem Y_Less etwas gefunden: http://forum.sa-mp.com/showpost.php?p=1103639&postcount=83 Das ist aber fast das selbe wie meins, nur, dass es 4 Warnungen hat, was ja Käse ist.


    Verstehe nicht ganz, was das macht?
    Ich teste mal gleich, ob das geht.


    Ich hatte da einen Code von Y_Less (Englisches Forum), das hatte allerdings 4 Warnungen. Das Makro sah etwas anders aus. Ich hab dann daran so rumgespielt, bis das hier rauskam. Bei mir hatte es das gleiche Ergebnis wie dein Code.



    Aber es müsste da noch ne einfachere Möglichkeit geben.
    So dass alles in einem Makro ist...


    Mir wäre keine bekannt.



    Und zwar möchte ich, dass es automatisch so kompeliert ohne Warnings und viele Makros.


    Das tut es, sonst hätte ich es nicht gepostet.


    Falls es nicht tut, dann prüfe bitte mit deinem Makro ob die selben Parameter ein anderes Ergebnis geben, wenn ja, poste bitte beide, damit ich es selbst vergleichen bzw. testen kann.

    if(dialogid==19)
    {
    if(response)
    {
    new Float:vehX,Float:vehY,Float:vehZ, count = -1;
    GetPlayerPos(playerid,vehX,vehY,vehZ);
    for(new i=0;i<sizeof(cInfo);i++)
    {
    if(cInfo[i][besitzer] == sInfo[playerid][id0]) count++;
    if(count != listitem) continue;
    SetVehiclePos(cInfo[i][id_x],vehX,vehY+2,vehZ);
    break;
    }
    }
    } //fehlte??


    Und pass mit den Klammern auf. Ich hab dir unten noch eine dazu gemacht.

    Poste den gesamten Code bitte, samt dem Teil mit dem du den Timer startest.


    OnPlayerUpdate / Timer-Start / Timer-Callback / Log mit dem print den ich dir vorhin gegeben habe.

    Ah! Mein Fehler. :pinch:
    Ich hatte die beiden Funktionen verwechselt. Hab's im Code oben schon ausgebessert.



    Ändere gettime() zu GetTickCount() beim Timer und OnPlayerUpdate. Dann dürfte es funktionieren.

    Gäbe es da vll ne andere Lösung?


    Ich weiß nicht genau ob das genau das ist was du willst, aber bei mir gibt es beides mal das Gleiche aus, wenn ich dein Makro nehme und das von mir.


    new failme[300];
    #define SendFail_a(%0,%1,%2) format(failme,sizeof(failme),"{BB0000}[SAHG-Fehler]{FFFFFF}: %s",%1,%2),SendClientMessage(%0,0xFFFFFFFF,failme)
    #define SendFail_b(%0,%1) SendFail_a(%0,%1,"")
    #define SendFail SendFail_b


    new failme2[300];
    #define SendFail2(%0,%1,%2) format(failme2,sizeof(failme2),"{BB0000}[SAHG-Fehler]{FFFFFF}: %s",%1,%2),SendClientMessage(%0,0xFFFFFFFF,failme)


    SendFail(1, "Hallo Welt");
    SendFail(1, "Du (playerid %i), hast nen Fehler!", playerid);
    SendFail2(playerid, "Du (playerid %i), hast nen Fehler!", playerid);

    Diese Funktion wurde bereits deklariert.


    Ändere:
    stock OnPlayerLogin(playerid,passwort[])
    zu:
    stock OnPlayerLogin_Ex(playerid,passwort[])


    OnPlayerLogin(playerid,inputtext);
    zu:
    OnPlayerLogin_Ex(playerid,inputtext);

    Du hast nicht ernsthaft einen Timer erstellt, der 3x pro Millisekunde aufgerufen wird, oder?!? Das solltest du aber dringendst ändern.


    Und dann mach es mal so, und poste dann was im server_log steht.
    Und bitte nimm nicht diese doofe Seite, zig tausende Werbungen. Nimm http://www.tinypic.com, oder http://www.pastebin.com für Text.



    public ptimer(playerid) {
    if(!IsPlayerConnectedEx(playerid)) return 1;
    new aimtplayer = GetPlayerTargetPlayer(playerid), msg[109];
    if(aimtplayer != INVALID_PLAYER_ID) {
    if(!IsPlayerNPC(aimtplayer)) return 1;
    if(IsPlayerInRangeOfPoint(playerid,4.0,1373.8241,-1758.2440,13.5481)) Bankrob(playerid);
    if(!strcmp(BotInfo[aimtplayer][botname],"Bankdame2",false)) {
    if(!BotInfo[aimtplayer][inanimation]) ApplyAnimation(aimtplayer,"ped","handsup",4.1,0,1,1,1,0,1), BotInfo[aimtplayer][inanimation] = true, SetTimerEx("ClearAnimation",1000*60,false,"i",aimtplayer);
    if(PlayerInfo[playerid][bankrob] == true) PlayerInfo[playerid][bankrobsecs]++;
    }
    if(!strcmp(BotInfo[aimtplayer][botname],"Bankdame1",false) || !strcmp(BotInfo[aimtplayer][botname],"Bankdame2_Ani",false)) if(!BotInfo[aimtplayer][inanimation] && IsPlayerInRangeOfPoint(playerid,5.0,1375.9094,-1759.5554,13.5504)) ApplyAnimation(aimtplayer,"ped","handsup",4.1,0,1,1,1,0,1), BotInfo[aimtplayer][inanimation] = true, SetTimerEx("ClearAnimation",1000*60,false,"i",aimtplayer);
    } else if(aimtplayer == INVALID_PLAYER_ID) {
    if(PlayerInfo[playerid][bankrob]) PlayerInfo[playerid][btimer]++;
    if(PlayerInfo[playerid][bankrob] && PlayerInfo[playerid][btimer] > 10) GivePlayerMoney(playerid,PlayerInfo[playerid][bankrobsecs]*10), format(msg,sizeof(msg),"Du hast $%i erbeutet!",PlayerInfo[playerid][bankrobsecs]*10), SendClientMessage(playerid,white,msg), PlayerInfo[playerid][bankrob] = false, PlayerInfo[playerid][btimer] = 0, PlayerInfo[playerid][bankrobsecs] = 0, SendCopMsg(lightblue,"[SECURE-SYSTEM]: Der manuelle Alarmschalter in der Bank wurde betätigt!");
    }
    new Float: armourx;
    GetPlayerArmour(playerid,armourx);
    if(armourx == 0) SetPlayerArmourEx(playerid,0);
    new t = GetTickCount();
    if(p_AFK[playerid] == 0 && p_LastUpdate[playerid] < t-1000) p_AFK[playerid] = 1;
    printf("playerid: %d -- pLU: %i || Time: %i, reachedT: %i || State: %d || p_AFK: %d", playerid, p_LastUpdate[playerid], t, t-1000, IsPlayerOnDesktop(playerid), p_AFK[playerid]);
    UpdateNametag(playerid);
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    printf("Called playerid %d @ %d", playerid, GetTickCount());
    p_LastUpdate[playerid] = GetTickCount();
    p_AFK[playerid] = 0;
    return 1;
    }


    Was kommt im Server log?
    Markiere bitte die Stelle, an der du auf den Desktop gegangen bist.