OnPlayerDeath Frage mit Scores

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    ich habe eine Frage, wenn ich das hier mache:
    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid,playerid,reason);// Zeigt die Todesnachricht rechts im Label an..

    if(killerid != INVALID_PLAYER_ID) SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    SendClientMessage(killerid,ROT,"Glückwunsch, du hast %s gekillt.");
    GivePlayerMoney(killerid,1000);
    return 1;
    }


    Was bedeutet dann %s
    und wie mache ich das eigentlich mit %s ist verstehe das mit dem %s & %d nicht wirklich, bitte um eine erklärung

  • Der gestorbene ist playerid, also musst du dir den namen von playerid mit GetPlayerName in einen string speichern lassen.
    Den string musst du dann zusammen mit dem restlichen Text den du haben willst in einen weiteren string formatieren.
    Den kannst du dann ausgeben.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Sicher, dauert einen moment ich editiere dann den Beitrag hier.


    //Edit
    ======================================================================
    Okay du willst also dem "Killer" eine Nachricht zukommen lassen wen er grade getötet hat.


    Im richtigen public bist du schonmal, OnPlayerDeath.
    OnPlayerDeath gibt dir einige Parameter an die Hand, die du bei unsicherheit immer in der Wiki nachlesen kannst:
    http://wiki.sa-mp.com/wiki/OnPlayerDeath
    Folgende sind gegeben:
    playerid - Die ID des Spielers der gestorben ist (Der Grund dafür das dieses public aufgerufen wird)
    killerid - Die ID des Spielers der playerid getötet hat
    reason - Ein vordefinierter Grund der mitgeliefert wird, enthält z.B. die Mordwaffe bzw. Todesart, spielt hier aber erstmal keine Rolle


    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid,playerid,reason);// Zeigt die Todesnachricht rechts im Label an..
    //Die Death Message ist so in Ordnung und die folgende if-Abfrage auch
    if(killerid != INVALID_PLAYER_ID) SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    //Sie fragt ob die killerid ungleich der Standard ID für Ungültig ist, wenn ja , wenn also ein Connecteter Spieler playerid gekillt hat, bekommt der killer Score plus
    //Es kann ja auch sein das playerid durch einen Sturz stirbt, dann ist killerid gleich der Ungültigen ID und die if-Abfrage wird nicht ausgeführt.
    GivePlayerMoney(killerid,1000);
    //Auch in Ordnung


    //nun kommt es
    SendClientMessage(killerid,ROT,"Glückwunsch, du hast %s gekillt.");
    //und Dafür spring ich mal aus dem pwn bereich raus

    Wenn du einen Namen in einen String (String = Zeichenkette/Zeichenfolge) einbauen willst musst du diese formatieren.
    Dazu gibt es die format Funktion.
    Dort musst du nun Parameter angeben,
    output[] - Der String, welcher ausgegeben werden soll
    len - Die maximale Länge, welche ausgegeben werden soll
    format[] - Der formatierte String
    {Float,_}:... - Argumente jeder Art
    Anhand der [] weiß man das es sich bei dem Parameter um strings handelt und anhand des eingeklammerten Floats um eine Aufzählung.
    Wir brauchen also einen neuen string, da es in Pawn streng genommen keinen Datentyp string gibt bauen wir uns selbst einen indem wir einer Variable einfach ein Array geben.


    new playername[MAX_PLAYER_NAME];
    In dem string der 24 Zeichen groß ist (weil MAX_PLAYER_NAME mit 24 definiert ist) können wir nun den Namen speichern.


    Dazu brauchen wir die GetPlayerName Funktion


    GetPlayerName(playerid,playername,sizeof(playername));
    Wir speichern den namen von playerid in den playername string.


    Jetzt haben wir schonmal den namen, nun brauchen wir noch einen string indem wir die Nachricht packen.
    new dstring[128];
    diesen formatieren wir jetzt, dazu geben wir format folgende dinge an:
    ersteinmal worein er speichern soll,wie lang das maximal sein soll, dann unser Text mit den %'ten als Platzhalter für die einzusetzenden Variabeln und schließlich unsere Variabeln.


    format(dstring,sizeof(dstring),"Glückwunsch, du hast %s gekillt.",playername);


    Das wars, den dstring können wir nun versenden:
    SendClientMessage(killerid,ROT,dstring);


    Fertig sieht das dann so aus:

    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid,playerid,reason);// Zeigt die Todesnachricht rechts im Label an..


    if(killerid != INVALID_PLAYER_ID)
    {
    new playername[MAX_PLAYER_NAME];
    new dstring[128];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(dstring,sizeof(dstring),"Glückwunsch, du hast %s gekillt.",playername);
    SendClientMessage(killerid,ROT,dstring);
    SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    GivePlayerMoney(killerid,1000);
    }
    return 1;
    }


  • public OnPlayerDeath(playerid, killerid, reason)
    {
    new name[MAX_PLAYER_NAME];
    new string[128];
    GetPlayerName(playerid,name,sizeof(name));
    SendDeathMessage(killerid,playerid,reason);// Zeigt die Todesnachricht rechts im Label an..
    if(killerid != INVALID_PLAYER_ID) SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    format(string,sizeof(string),"Glückwunsch, du hast %s gekillt!",name);
    SendClientMessage(killerid,ROT,string);
    GivePlayerMoney(killerid,1000);
    return 1;
    }

    Mit unfreundlichen Grüßen
    Buschmensch