Beiträge von Hagi

    Für mehrere Parameter kannst du (wenn du dcmd schon benutzt) sscanf nutzen.

    sscanf


    Diese Erweiterung zu dcmd erlaubt dir die einfache benutzung mehrerer Parameter.


    Wird genau so wie dcmd definiert, die Funktion an sich sieht aber so aus


    dcmd_weapon(playerid,params[])
    {
    new zielid;
    new waffe,munni;

    if(sscanf(params, "udd",zielid,waffe,munni))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /weapon [ID] [Waffen] [Munition]");
    }
    }

    Du kannst doch in einer nicht vorhandenen datei keinen Key löschen


    else
    {
    dini_Unset("/hallo/koordinaten.ini", "Koordinaten");
    if(dini_Isset("/hallo/koordinaten.ini", "Koordinaten"))


    Vorher musst du sie doch erstellen


    dini_Create("/hallo/koordinaten.ini");

    Wie kann ich Badwords aus einer Textdatei auslesen (mit dini.inc) ohne aber im Script eine feste Anzahl anzugeben


    D.h. wenn es ausgelesen wird, soll das Script schaun ob die nächste Zeile noch ein Badword enthält oder nicht.

    if (strcmp("/0", cmdtext, true) == 0)
    {
    language[playerid] = 0;
    dini_IntSet(datei, "language", (language[playerid]));
    LSendClientMessage(playerid,gelb,"deutsch.","german.");
    return 1;
    }


    if (strcmp("/1", cmdtext, true) == 0)
    {
    language[playerid] = 1;
    dini_IntSet(datei, "language", (language[playerid]));
    LSendClientMessage(playerid,gelb,"englisch.","english");
    return 1;
    }

    Ich denke du musst als Wert für die Datei die Variable nehmen

    Hier fehlte eine Klammer


    case 7:
    {
    PlayerInfo[playerid][pSpLic] = 1;
    SendClientMessage(playerid, COLOR_WHITE,"Dein Sportwagen-Pass Kostet 8000 $! Viel Spass");
    GivePlayerMoney(playerid, -8000);
    return 1;
    } // schließt den case ab // die fehlte
    }// schließt den switsch ab

    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid, playerid, reason);
    new name[MAX_PLAYER_NAME];
    new string[256];
    new playercash;
    new victimteam;
    new Float:px,Float:py,Float:pz;
    new killerteam;


    victimteam = gTeam[playerid];
    killerteam = gTeam[killerid];
    gPlayerSpawned[playerid] = 0;
    GetPlayerName(playerid, name, sizeof(name));
    PlayerInfo[playerid][pLocal] = 255;
    GetPlayerPos(playerid, px, py, pz);
    if(killerid != 255)
    {
    if(GetPlayerState(killerid) == 2)
    {
    SendClientMessage(killerid, COLOR_ROT, " Driveby Mord");
    return 1;
    }
    }}


    Kannst du direkt oben rein machen


    @dit: Jetzt war ich zu langsam ^^

    Ja hier das ist das


    SendDeathMessage(killerid, playerid, reason);


    Da kommt


    Killername |Waffe |Opfername


    Und die Farben der Namen entsprechen den Farben der Spieler

    Ganz nach oben unter #include <a_samp>
    kommt new countdown = 0;


    also


    #include <a_samp>
    new countdown = 0;





    Du hast den Callback


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    return 1;
    }


    Den änderst du in


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(countdown,9,cmdtext);
    return 1;
    }


    Dann außerhalb dieses Callback also praktisch direkt darunter kommt das hier


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(countdown,9,cmdtext);
    return 1;
    }
    // hier drunter *runterschaun*


    dcmd_countdown(playerid,params[])
    {
    new sekunden;


    if(sscanf(params, "d",sekunden))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /countdown [sekunden]");
    }
    countdown = sekunden;
    SetTimer("checkcountdown",1000,0);
    }


    Dann irgentwo im Script, außerhalb eines Callbacks, am besten ganz nach unten



    forward checkcountdown();
    public checkcountdown()
    {
    if(countdown >= 1)
    {
    new string[128];
    format(string,sizeof(string),"~r~%d",countdown);
    GameTextForAll(string,1000,3);
    countdown --;
    SetTimer("checkcountdown",1000,0);
    }
    else
    {
    GameTextForAll("~g~ GO GO GO",1000,3);
    }
    }

    Hier in sscanf.


    Nimm oben den link und füg das ganz lange stock am ende deines scripts ein.
    Definiert wird sscanf genau so wie dcmd in OnPlayerCommandtext{
    dcmd(setpos,6,cmdtext);
    }


    dcmd_setpos(playerid,params[])
    {
    new zielid,Float:x,Float:y,Float:z,interior;


    if(PlayerInfo[playerid][Level] >= 6)
    {
    if(sscanf(params, "ufffd",zielid,x,y,z,interior))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /setpos [ID] [x] [y] [z] [Int]");
    }
    SetPlayerPos(zielid,x,y,z);
    SetPlayerInterior(zielid,interior);
    SendClientMessage(playerid,yellow,".:[PORT PLAYER TO POS]Erfolgreich!");
    }
    }

    Wie ohne befehl ?
    Irgentwie muss das doch aufgerufen werden sonst bringt dir das doch nix.


    Du kannst das natürlich so machen


    forward checkpos(playerid);
    public checkpos(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,1377.6541,-1661.2123,13.5343))
    {
    SetPlayerInterior(playerid,4);
    SetPlayerPos(playerid,-27.9978,-29.7559,1003.5573);
    SendClientMessage(playerid,COLOR_WHITE,".:[Tankstelle]:Du befindest dich jetzt in der Tankstelle.");
    return 0;
    }
    if(IsPlayerInRangeOfPoint(playerid,3.0,-27.9978,-29.7559,1003.5573))
    {
    SetPlayerInterior(playerid,4);
    SetPlayerPos(playerid,1377.6541,-1661.2123,13.5343);
    SendClientMessage(playerid,COLOR_WHITE,".:[Tankstelle]:Du befindest dich jetzt vor der Tankstelle.");
    return 0;
    }
    }


    Dann z.b in einem Befehl


    if(strcmp(cmdtext,"/biap",true))
    {
    checkpos(playerid);
    }

    Wolverin, mit Wegpunkt meinst du wohl einen marker.


    Du kannst ja, wenn der Spieler in einen Marker fährt und den Job Autodieb hat, mit IPIROP (IsPlayerInRangeOfPoint) überprüfen ob er sich am abgabepunkt befindet .
    Sollte dies nicht der Fall sein kann ja einfach nix passieren. Sollte es der fall sein wird das Auto abgegeben.


    Killerkarter, benutz doch lieber IsPlayerInRangeOfPoint da es schon von samp gegeben ist und nicht erst definiert werden muss.
    Willst du dennoch PlayerToPoint nutzen so definierst du es am besten am Ende des Scriptes, das wahrt ein bisschen Ordnung

    Hast du Im Callback OnPlayerCommandText


    dcmd(countdown,9,cmdtext);


    und das was ich oben gepostet hab also das

    Spoiler anzeigen
    dcmd_countdown(playerid,params[])
    {
    new sekunden;

    Spoiler anzeigen
    if(sscanf(params, "d",sekunden))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /countdown [sekunden]");
    }
    countdown = sekunden;
    SetTimer("checkcountdown",1000,0);
    }

    außerhalb des callbacks ?


    Und das Makro für dcmd und sscanf im Script ?


    Das Hier am besten nach ganz unten


    Und das unter die anderen defines oder includes ob ins Script

    Spoiler anzeigen
    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

    Okai.


    1. Du erstellt den Textdraw: new text:testdraw;
    2. Du weist ihn zu: testdraw = TextDrawCreate(x,y,"Dein Text"); // x und y sind die koordinaten auf dem Bildschirm
    3. Du zeigst ihn den Spielern: TextDrawShowForAll(testdraw);

    1. Klick


    2. new year,month,day,hour,minute,second;
    getdate(year,month,day);
    gettime(hour,minute,second);
    new string[128];
    format(string,sizeof(string),"Y: %d,M: %d,D: %d,H: %d,M: %d,S: %d",year,month,day,hour,minute,second);
    SendClientMessage(playerid,farbe,string);


    speziell für dich dann


    format(string,sizeof(string),"Day: %d,Year: %d,Month: %d",day,month,year);