Beiträge von Kaliber

    Man kann auch strcmp dafür nutzen ohne sscanf & strtok :D


    Sieht dann so aus:


    if(strcmp("/heilen", cmdtext , true) == 0)
    {
    if(strlen(cmdtext) < 9) return SendClientMessage(playerid,-1,"Verwendung: /heilen [spielerid]");
    new pID = strval(cmdtext[8]);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Ein Spieler mit dieser ID ist nicht online!");
    SetPlayerHealth(pID,100.0);
    return 1;
    }


    mfg. :thumbup:

    Kaliber liegt da schon richtig denke ich.


    Ja...das tue ich ;)


    stock kann man nicht nur bei Funktionen anwenden, auch z.B. bei globalen Variablen:


    new stock Var1;


    /*
    Wenn man diese nicht nutzt, kommt ja meistens ein Warning, so von wegen, Variable never used.
    Aber durch stock, wird sie vom Compiler automatisch ignoriert.
    So kann man unnötige Speicherverschwendung verhindern.
    */


    mfg. :thumbup:

    Guten Nachmittag liebe Brotfische,


    ich stelle euch nun ein System vor, was äußerst praktisch ist bei z.B. einem Tutorial oder einer Erklärung.


    Es geht um Dialoge die man erst nach einer bestimmten Zeit wegklicken kann.


    Funktionen:


    //Funktionen
    native ShowPlayerTimeDialog(playerid,time,header[],body[],const button[]); //returnt dialogid
    native RestartTimeDialog(playerid,id,time=0);


    //Callback
    OnTimeDialogResponse(playerid, dialogid);


    Beispiele:
    Im folgenden Beispiel erstelle ich nun einen Dialog, der für 15 Sekunden angezeigt wird.


    new id; //Oben im Skript


    //Da wo der Dialog angezeigt werden soll
    id = ShowPlayerTimeDialog(playerid,15,"{FF0000}Timer Dialog","{FFFFFF}Sie müssen diese Nachricht leider {FF0000}15 Sekunden{FFFFFF} lesen!","Bestätigen");


    /*
    Zur Information...da steht ja "Bestätigen", dieser Button-Text wird dann nach 15 Sekunden angezeigt!
    */


    //Und dann der Callback irgendwo im Skript:
    public OnTimeDialogResponse(playerid, dialogid)
    {
    if(dialogid == id)
    {
    SendClientMessage(playerid,-1,"uuuund Bestätigt! :)"); //Das wird erst aufgerufen, sobald Bestätigen als Button angezeigt wurde (also nach 15sek)
    }
    return 1;
    }


    Falls ihr jetzt diesen Dialog nochmal anzeigen lassen wollt, könnt ihr einfach folgendes machen:


    RestartTimeDialog(playerid,id);


    Ihr könnt aber auch eine neue Zeit einstellen, z.B. nur 10 Sekunden:


    RestartTimeDialog(playerid,id,10);


    Ihr bekommt einen Error?

    Spoiler anzeigen
    Es kann sein, dass ihr folgenden Fehler bekommt:

    Code
    error 004: function "t_OnDialogResponse" is not implemented

    Spoiler anzeigen
    Dann einfach folgendes in euren Gamemode einfügen:

    Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    return 1;
    }


    Screenshots:



    Download:
    Source-Code: PasteBin
    Direkter-Download: MediaFire


    Schlusswort:
    So das wars auch schon mit der kleinen Vorstellung :)


    Falls ihr Fragen oder Probleme habt, einfach in den Thread damit ;)


    mfg. :thumbup:

    Also...er redet nicht von konstanten "Variablen" (ich lass das einfach mal so stehen) an sich, sondern er redet von der Konstanen MAX_PLAYER_NAME.


    Aber da sizeof ein unärer Operator ist, macht das nicht direkt einen Unterschied ob man das eine oder das andere nimmt.


    Der Fehler, wieso es wahrscheinlich nicht funktioniert ist der, dass du die Variable Name schon irgendwo verwendest (evtl in einem Enum(erator)?) :)


    mfg. :thumbup:

    Schreib das mal so:


    ocmd:sms(playerid, params[])
    {
    if(sInfo[playerid][handyguthaben]<50)return SendClientMessage(playerid,COLOR_RED,"Dein Handyguthaben reichtnicht aus");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new text[128], pID, string[128];
    if(sscanf(params,"us",pID,text)) return SendClientMessage(playerid, COLOR_RED,"/sms [Spieler] [Text]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_RED,"Ein Spieler mit dieser ID ist nicht online!");
    format(string, sizeof(string), "[Sms von %s] %s",name, text);
    SendClientMessage(pID,COLOR_YELLOW,string);
    GetPlayerName(pID, name, MAX_PLAYER_NAME);
    format(string,sizeof string,"Sms an: %s mit dem Inahlt:%s",name,string);
    SendClientMessage(playerid,COLOR_YELLOW,string);
    sInfo[playerid][handyguthaben]=-50;
    return 1;
    }


    mfg. :thumbup:

    Damit ist es möglich die Vehicle Seats abzufragen.


    Besser wäre folgendes:


    stock GetVehicleSeatCount(model) {
    static const scMaxPassengers[] = {
    0x10331113, 0x11311131, 0x11331313, 0x80133301, 0x1381F110, 0x10311103, 0x10001F10, 0x11113311, 0x13113311,
    0x31101100, 0x30001301, 0x11031311, 0x11111331, 0x10013111, 0x01131100, 0x11111110, 0x11100031, 0x11130221,
    0x33113311, 0x11111101, 0x33101133, 0x101001F0, 0x03133111, 0xFF11113F, 0x13330111, 0xFF131111, 0x0000FF3F
    };
    if (model < 400 || model > 611) return -1;
    model -= 400,model = (scMaxPassengers[model >>> 3] >>> ((model & 7) << 2)) & 0xF;
    return (model == 0xF) ? -1 : model;
    }


    stock GetVehicleFreeSeat(veh) {
    new m = GetVehicleModel(veh);
    if(!m) return -1;
    new c = GetVehicleSeatCount(m)+1,bool:seat[0xF],x;
    for(new i; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    if(GetPlayerVehicleID(i) == veh) seat[GetPlayerVehicleSeat(i)] = true,x++;
    }
    if(x >= c) return -1;
    for(new i; i<sizeof seat; i++) if(!seat[i]) return i;
    return -1;
    }


    mfg. :thumbup:


    //Edit: Code editiert

    1. Dein Code wird nicht funktionieren, schreibe das mal so:



    2. Du musst die Klasse auch inkludieren. Sprich: require_once('name.class');


    mfg. :thumbup:

    Zu dem mit den Filterscript habe alle Removes in OnplayerConnect eingefügt.


    Dann musst du auch das Filterscript laden, bevor du auf den Server joinst ;)


    Also zu deinem Mann kann nicht zu viel haben. Bei mir war es so das ich alle Ampeln entfernt hatte und diese eingefügt habe. Dann konnte ich mich nicht mehr anmelden also beim Login.


    Dann hast du da irgendeinen Fehler gemacht mit klammern oder returns oder was weiß ich...


    Aufjedenfall funktioniert das auch wenn du da 1000 Zeilen davon reinpackst :D


    mfg. :thumbup:

    Also ich habe es mit einem Filterscript versucht.


    Aber dort werden die RemoveBuildings nicht geladen.


    Doch auch in einem Filterscript werden removeBuildings geladen. (wenn man es richtig macht)


    Und zwar habe ich gemerkt das ich zu viele RemoveBuildingsForPlayer habe.


    Man kann nicht zu viele RemoveBuildings haben :)


    Den ich wollte gerne Alle Ampeln Entfernen und dachte jemand weiss vielleicht rat.


    Füge diesen Code ein:


    RemoveBuildingForPlayer(playerid, 1315, 2228.0859, -2506.7734, 15.8125, 60000.25);
    RemoveBuildingForPlayer(playerid, 1315, 2213.9297, -2498.3984, 15.8125, 60000.25);
    RemoveBuildingForPlayer(playerid, 3855, -2534.5781, 330.8672, 18.8203, 60000.25);
    RemoveBuildingForPlayer(playerid, 3855, -2549.3047, 336.2109, 18.6172, 60000.25);
    RemoveBuildingForPlayer(playerid, 1350, -2365.4609, 513.1719, 28.2109, 60000.25);
    RemoveBuildingForPlayer(playerid, 1350, -2363.9063, 496.9844, 29.3594, 60000.25);
    RemoveBuildingForPlayer(playerid, 1284, -1886.6250, 931.7031, 37.3047, 60000.25);
    RemoveBuildingForPlayer(playerid, 1284, -1912.0625, 932.0156, 37.3047, 60000.25);
    RemoveBuildingForPlayer(playerid, 1283, -1902.8828, 906.5313, 37.2422, 60000.25);
    RemoveBuildingForPlayer(playerid, 1283, -1902.8516, 945.3125, 37.2422, 60000.25);
    RemoveBuildingForPlayer(playerid, 1350, 1717.7813, 1265.4766, 9.7891, 60000.25);
    RemoveBuildingForPlayer(playerid, 1350, 1737.2969, 1282.8281, 9.9688, 60000.25);


    mfg. :thumbup: