Hey Com.,
wie kann ich die "killerid" beim "public OnPlayerDeath" in einem Textzusammenhang erfolgreich nutzen?
Beispiel: "Du wurdest von [killerid] getötet!"
Danke!
Hey Com.,
wie kann ich die "killerid" beim "public OnPlayerDeath" in einem Textzusammenhang erfolgreich nutzen?
Beispiel: "Du wurdest von [killerid] getötet!"
Danke!
Im o.g. Callback killerid auf ungleich INVALID_PLAYER_ID abfragen, danach einen String formatieren und an die playerid senden.
LG
Um ehrlich zu sein habe ich nicht wirklich etwas verstanden, da ich erst seit ~einer Stunde an einem Deathmatch-Script arbeite..
Unter OnPlayerDeath...
SendClientMessage(playerid, Farbe,"Du wurdest von %s getötet.",killerid);
SendClientMessage(playerid, Farbe,"Du wurdest von %s getötet.",killerid);
danke, so etwas habe ich gesucht. Klingt komplett logisch!
danke, so etwas habe ich gesucht. Klingt komplett logisch!
Musst halt bei 'Farbe' eine Farbe eintragen, die du im Script definiert hast.
Musst halt bei 'Farbe' eine Farbe eintragen, die du im Script definiert hast.
Das ist mir bewusst, danke.
Unter OnPlayerDeath...
SendClientMessage(playerid, Farbe,"Du wurdest von %s getötet.",killerid);
Killerid gibt aber einen Integer aus, somit ist %s das falsche.
%d
man muss das in nen string einfügen!
Musst halt bei 'Farbe' eine Farbe eintragen, die du im Script definiert hast.
Und genau dein Codeschnipsel wird nicht immer ausgeführt, wenn z.B sich der Spieler selbst umbringt.
Dann mach das so..
new toter[MAX_PLAYER_NAME],killer[MAX_PLAYER_NAME];
new string[128],string1[128];
GetPlayerName(playerid,toter,sizeof(toter));
GetPlayerName(killerid,killer,sizeof(killer));
format(string,sizeof(string),"Kill: Du hast %s getötet.",toter);
format(string1,sizeof(string1),"Tod: Du wurdest von %s getötet.",killer);
SendClientMessage(playerid,FARBE,string1);
SendClientMessage(killerid,FARBE,string);
Alles anzeigenDann mach das so..
new toter[MAX_PLAYER_NAME],killer[MAX_PLAYER_NAME];
new string[128],string1[128];
GetPlayerName(playerid,toter,sizeof(toter));
GetPlayerName(killerid,killer,sizeof(killer));
format(string,sizeof(string),"Kill: Du hast %s getötet.",toter);
format(string1,sizeof(string1),"Tod: Du wurdest von %s getötet.",killer);
SendClientMessage(playerid,FARBE,string1);
SendClientMessage(killerid,FARBE,string);
Ich hab dir doch bereits gesagt, du musst noch abfragen, ob killerid gleich INVALID_PLAYER_ID ist, und das dann abfangen,
da sonst der Code nicht ausgeführt wird (Laufzeitfehler: Array index out ouf bounds)
Eh, langsam blicke ich kaum mehr durch.. :o
Ich glaube ich belasse es zum Anfang bei:
SendClientMessage(playerid,ROT,"Du wurdest getötet!");
Pablo.
Wofür 2 Strings?
Zudem kann man für die GetPlayerName-Sache direkt eine Funktion einbauen.
Hier meine Empfehlung für das ganze:
stock getName(playerid)
{
new name[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new string[128];
if(killerid != INVALID_PLAYER_ID)
{
format(string, sizeof(string), "- Du hast %s getötet.", getName(playerid));
SendClientMessage(killerid, 0xFFFFFFFF, string);
format(string, sizeof(string), "- Du wurdest von %s getötet.", getName(killerid));
SendClientMessage(playerid, 0xFFFFFFFF, string);
}
return 1;
}
Eh, langsam blicke ich kaum mehr durch.. :o
Ich glaube ich belasse es zum Anfang bei:
SendClientMessage(playerid,ROT,"Du wurdest getötet!");
Dein Nickname passt wirklich perfekt zu deinem Verhalten hier.
Du musst nur noch ein paar Kleinigkeiten anpassen, die dir sogar hier erklärt wurden, macht es jedoch nicht, weil du keinen fertigen Code hingeklatscht bekommst
Wenn du z.B. stirbst, ohne dass ein Spieler dich umgebracht hat (Fall, Ertrinken,...) ist killerid INVALID_PLAYER_ID. Deshalb solltest du abfragen, ob du von einem Spieler getötet wurdest und nur dann die Nachricht ausgeben:
if(killerid != INVALID_PLAYER_ID) // Überprüfen ob Tod durch Spieler verursacht wurde
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(killerid, pName, MAX_PLAYER_NAME); //Name des Killers herausfinden
new msg[25+MAX_PLAYER_NAME];
format(msg,25+MAX_PLAYER_NAME,"Du wurdest von %s getötet.",pName); //Nachricht formatieren
SendClientMessage(playerid, 0xFF0000FF, msg); //Nachricht an "Opfer" schicken
}
Dein Nickname passt wirklich perfekt zu deinem Verhalten hier.
Du musst nur noch ein paar Kleinigkeiten anpassen, die dir sogar hier erklärt wurden, macht es jedoch nicht, weil du keinen fertigen Code hingeklatscht bekommst
Danke dir für deinen aufschlussreichen Beitrag.
Haxler, danke für deine beigefügten Kommentare, haben mir einige Fragen geklärt.
Liege ich richtig, in dem ich sage, dass diese Funktionen unter "OnPlayerDeath" gehören?