Beiträge von Key

    Warum textdrawt[playerid]++;?


    //edit:
    new textdrawt[MAX_PLAYERS], counter[MAX_PLAYERS];
    textdrawt[playerid] = SetTimerEx("TextdrawTimer",200,1,"%i",playerid);
    public TextdrawTimer(playerid)
    {
    //textdrawt[playerid]++;
    counter[playerid]++;
    if(counter[playerid] == 1)
    {
    TextDrawColor(WosTextMenu0,0xFFFFFFFF);
    return 1;
    }
    return 1;
    }

    Guten Tag liebe Community,
    da mein altes Tutorial im Archiv gelandet ist und die Variante, die ich damals genutzt habe nicht wirklich die beste war, erstelle ich nun ein neues Tutorial.


    Ihr benötigt:
    - Grundkenntnisse
    - mindestens SA:MP 0.3d


    Um den Schusstazer zu verwenden müsst ihr eine Deagle in der Hand haben und die mittlere Maustaste drücken, während ihr jemanden anvisiert, fangen wir mal an:


    Zuallererst suchen wir den Callback OnPlayerKeyStateChange in unserem Script.
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }


    Jetzt wollen wir überprüfen, ob der Spieler die mittlere Maustaste drückt, wenn ja wollen wir wissen, ob der Spieler eine Deagle in der Hand hat, wenn ja überprüfen wir, ob der Spieler jemanden anvisiert, wenn nicht soll die Nachricht "Du hast daneben geschossen" zurückgegeben werden.


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_LOOK_BEHIND)//Überprüft ob der Spieler "KEY_LOOK_BEHIND" ( mittlere Maustaste ) gedrückt hat.
    {
    if(GetPlayerWeapon(playerid) == 24)//Überprüft ob die von des Spielers, welche er in der Hand trägt, die ID 24 ( Deagle ) hat.
    {
    if(GetPlayerTargetPlayer(playerid) != INVALID_PLAYER_ID)//Überprüft ob GetPlayerTargetPlayer NICHT INVALID_PLAYER_ID zurück gibt, das wird zurückgegeben, wenn man niemanden anvisiert
    {
    //Alles was hier steht wird aufgerufen, wenn ich die mittlere Maustaste drücke, eine Deagle in der Hand hab und jemanden anvisiere
    }
    else return SendClientMessage(playerid,0xFF000000,"Du hast daneben geschossen.");//Wenn doch INVALID_PLAYER_ID zurückgegeben wird, wird eine Nachricht mit "Du hast daneben geschossen." zurückgegeben
    }
    }
    return 1;
    }


    Gut, die ganzen Abfragen sind nun fertig, jetzt müssen wir nur noch bestimmen, was überhaupt passieren soll.


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_LOOK_BEHIND)
    {
    if(GetPlayerWeapon(playerid) == 24)
    {
    if(GetPlayerTargetPlayer(playerid) != INVALID_PLAYER_ID)
    {
    new string[64],name[MAX_PLAYER_NAME+1],rnddmg;//Erstellt eine String names string mit der Größe 64, einen String namens name mit der Größe von MAX_PLAYER_NAME ( 24 ) + 1 ( 25 ) und einen Integer namens rnddmg.
    new target = GetPlayerTargetPlayer(playerid); //Erstellt die Variable target und schreibt die ID des anvisierten Spielers hinein.
    rnddmg = random(10); //Ändert den Inhalt von rnddmg zu einem zufälligen Wert zwischen 0 und 10
    GetPlayerName(target,name,sizeof(name));//Speichert den Spielernamen der ID target in den String "name".
    format(string,sizeof(string),"Du hast %s mit deiner Tazerpistole getroffen und ihm %d Schaden hinzugefügt.",name,rnddmg);//Formatiert einen Text
    GameTextForPlayer(target,"~r~Tazed",2000,0);//Gibt einen GameText für target aus
    SendClientMessage(playerid,0xFF000000,string);//Sende eine Nachricht mit dem Inhalt aus dem String "string"
    TogglePlayerControllable(target,0);//freezt target
    new Float:health;//erstellt die Variable "health"
    GetPlayerHealth(target,health);//gibt die aktuelle Health des Spielers aus und schreibt sie in die Variable health
    SetPlayerHealth(target,health-rnddmg);//Setzt die Health des Spielers auf health(vorherige Leben des Spielers)-rnddmg(zufälliger Wert zwischen 0 und 10)
    SetTimerEx("tazer",5000,0,"i",target);//Startet einen 5 Sekunden langen Timer
    }
    else return SendClientMessage(playerid,0xFF000000,"Du hast daneben geschossen.");
    }
    }
    return 1;
    }


    Jetzt müssen wir nur noch den Callback "tazer" schreiben und forwarden, denn dieser wird aufgerufen, wenn der Timer von oben abgelaufen ist. Also schreiben wir über den bisherigen Code:



    forward tazer(target); //Das kommt nach oben ins Script, aber die Includes
    public tazer(target)//Das kommt über den bisherigen Code
    {
    TogglePlayerControllable(target,1);//Entfreezt den Spieler
    return 1;
    }


    Das war's erstmal.
    Wenn ihr Fehler findet sagt Bescheid.


    Mit freundlichen Grüßen
    Key

    Möchte dir nicht dein Geschäft vermiesen oder ähnliches, aber es gibt schon durchaus professionelle WBB Design - Gestalter, die dir ein einzigartiges & gecodetes Design für ein weitaus günstigeren Preis anbieten. Also mehr als 100€, nie im Leben. Bei 50€ würde ich drüber nachdenken.

    Danke für den Auszug, da stehts:

    Zitat

    Verboten sind im gesamten Board (Beiträge, Signatur, Avatar und Benutzertitel) insbesondere
    Spam jeder Art (sinn- oder nutzlose Äußerungen),

    Siehst du einen Sinn in diesem Thread oder kann man gar einen Nutzen davon ziehen? Denke eher weniger.