Death und Kill score!

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
  • Hallo^^


    Kann mir mal bitte jemand ein Kills / Deaths zähler erstellen?
    Er soll am besten direkt unter der Lebensleiste und dem Geld angezeigt werden!
    Bei /dm soll er angezeigt werden!
    Und dazu vileicht noch /free um den zähler wieder auszumachen!


    Kills: Deaths:


    Ok danke schonmal im voraus!

    Einmal editiert, zuletzt von SkaterDenis ()

  • //ganz nach oben:
    new sstats[3], Text:stats;
    ///dm:
    sstats[2]++;
    new s[100];
    format(s,sizeof(s),"Tode: %d, Kills: %d, Im DM: %d",sstats[0], sstats[1], sstats[2]);
    TextDrawSetString(stats,s);
    ///leavedm:
    sstats[2]--;
    //OnPlayerDisconnect:
    if(IsSpielerInDM[playerid]) {
    sstats[2]--;
    new s[100];
    format(s,sizeof(s),"Tode: %d, Kills: %d, Im DM: %d",sstats[0], sstats[1], sstats[2]);
    TextDrawSetString(stats,s); }
    //OnPlayerDeath:
    sstats[0]++;
    if(killerid!=INVALID_PLAYER_ID) {
    sstats[1]++;
    new s[100];
    format(s,sizeof(s),"Tode: %d, Kills: %d, Im DM: %d",sstats[0], sstats[1], sstats[2]);
    TextDrawSetString(stats,s); }
    //OnPlayerConnect:
    TextDrawShowForPlayer(playerid,stats);
    //OnGameModeInit:
    stats=TextDrawCreate(x,y,"Tode: 0, Kills: 0, im DM: 0");

  • Alles Funktioniert super bis auf zwei Sachen: ...


    1.Der Teil ist falsch...

    //OnPlayerConnect:
    TextDrawShowForPlayer(playerid,stats);

    Der Text soll nicht gleich beim connecten angezeigt werden, sondern nur bei /dm und wenn ich dm verlasse, soll er wieder ausgehen!
    Das müsste in etwa dann so aussehen (berichtigt mich bitte, wenn ich falsch liege)!



    //OnPlayerConnect:
    //Hier kommt jetzt gar nichts hin!


    ///dm:
    sstats[2]++;
    new s[100];
    format(s,sizeof(s),"Tode: %d, Kills: %d, Im DM: %d",sstats[0], sstats[1], sstats[2]);
    TextDrawSetString(stats,s);
    TextDrawShowForPlayer(playerid,stats);


    ///leavedm:
    sstats[2]--;
    TextDrawDestroy(stats);


    2.Wenn ich ins DM gehe, wird z.B. dann "im DM: 1" angezeigt, wenn ichs aber wieder verlasse, ist es immer noch auf 1, auch wenn dann niemand in dm ist...



    Also, ich schätze, "1." habe ich richtig gelöst aber bei "2." brauch ich Hilfe :D

  • //Edit
    Achso da hat was gefehlt!^^



    ///leavedm:
    sstats[2]--; //DM Leute in DM -1
    new s[100];
    format(s,sizeof(s),"Tode: %d, Kills: %d, Im DM: %d",sstats[0], sstats[1], sstats[2]);
    TextDrawSetString(stats,s);
    TextDrawHideForPlayer(playerid,stats); //DM Score Schliesen

    So klapps schonmal ich guck nochmal schnell nach obs jetzt geht!

  • mach bei leave noch dazu:
    TextDrawSetString(stats,s)

  • Habe ich schon und bei //OnPlayerDeath zu sstats[0]++; auch, jetzt geht auf jedenfall alles nur noch einwas!


    Es wär schön wen jemand noch schnell ein /dmstats command erstellt! Da soll nur eine Auflistung von allen Spieler die in der DM welt sind sein und dazu ihre deaths/kills!
    Wäre echt schön wen ihr mir dabei noch helft!


    ps.
    if (GetPlayerVirtualWorld(playerid) == 2)
    ist bei mir die DM Welt wenn das hilft?!?!

  • Also sowas in der Art:


    Player DM Score:
    SkaterDenis Kills: 5 Deaths: 3
    BLabla Kills 3 Deaths: 5


    also
    Einfach ne aulistung von allen spielern und ihren kills und deaths...
    Es muss nicht unbedinngt der Spieler mit dem meisten Kills oben stehen. Wär besser muss aber nicht^^


    UND NOCHWAS!
    Das soll doch für jeden player einzeln angezeigt werden aber:


    Bei allen playern in dm wird selber kills deaths scorce angezeigt... z.b. einer stirbt dann haben alle ein extra death nicht nur der der gestorben ist...


    Wie macht man das das für jeden spieler einzeln angezeigt wird?

    3 Mal editiert, zuletzt von SkaterDenis ()

  • Wird dan aber nicht bei in dm bei allen immer nur 1 gezeigt und zwar du selber?


    und noch ein error bei...

    //OnGameModeInit:
    stats[playerid]=TextDrawCreate(392,100,"Tode: 0, Kills: 0, im DM: 0"); //DM stats


    error 017: undefined symbol "playerid"


    die anderen gehen alle...

    Einmal editiert, zuletzt von SkaterDenis ()

  • Ich habe es mal komplett bearbeitet und jetzt geht fast alles einwandfei!



    //Ganz Oben
    new sstats0[MAX_PLAYERS],sstats1[MAX_PLAYERS],sstats2;//, Text:stats;
    new Text:stats[MAX_PLAYERS];


    //DM
    sstats2++;
    new s[100];
    format(s,sizeof(s),"Deaths: %d, Kills: %d, in DM: %d",sstats0[playerid], sstats1[playerid], sstats2);
    for (new i = 0; i < MAX_PLAYERS; i++) TextDrawSetString(stats[i],s);
    TextDrawSetString(stats[playerid],s);
    TextDrawShowForPlayer(playerid,stats[playerid]);


    //LeaveDM
    sstats2--; //DM Score -1 in Leute in DM
    new s[100];
    format(s,sizeof(s),"Deaths: %d, Kills: %d, in DM: %d",sstats0[playerid], sstats1[playerid], sstats2);
    for (new i = 0; i < MAX_PLAYERS; i++) TextDrawSetString(stats[i],s);
    TextDrawSetString(stats[playerid],s);
    TextDrawHideForPlayer(playerid,stats[playerid]);


    //OnPlayerConnect
    stats[playerid]=TextDrawCreate(392,103,"Deaths: 0, Kills: 0, in DM: 0"); //DM stats
    sstats0[playerid] = 0;
    sstats1[playerid] = 0;


    //OnPlayerDisconnect
    TextDrawDestroy(stats[playerid]);
    sstats2--;
    new s[100];
    for (new i = 0; i < MAX_PLAYERS; i++) format(s,sizeof(s),"Deaths: %d, Kills: %d, in DM: %d",sstats0[i], sstats1[i], sstats2);
    for (new i = 0; i < MAX_PLAYERS; i++) TextDrawSetString(stats[i],s);
    TextDrawSetString(stats[playerid],s);


    //OnPlayerDeath
    if SpielerInDM...
    {
    if(killerid == INVALID_PLAYER_ID)
    {
    sstats0[playerid]++;
    new s[100];
    format(s,sizeof(s),"Deaths: %d, Kills: %d, in DM: %d",sstats0[playerid], sstats1[playerid], sstats2);
    TextDrawSetString(stats[playerid],s);
    SendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
    }
    else
    {
    sstats0[playerid]++;
    new s0[100];
    format(s0,sizeof(s0),"Deaths: %d, Kills: %d, in DM: %d",sstats0[playerid], sstats1[playerid], sstats2);
    TextDrawSetString(stats[playerid],s0);
    sstats1[killerid]++;
    new s1[100];
    format(s1,sizeof(s1),"Deaths: %d, Kills: %d, in DM: %d",sstats0[killerid], sstats1[killerid], sstats2);
    TextDrawSetString(stats[killerid],s1);
    SendDeathMessage(killerid,playerid,reason);


    //OnGameModeExit
    for (new i = 0; i < MAX_PLAYERS; i++) sstats0[i] = 0;
    for (new i = 0; i < MAX_PLAYERS; i++) sstats1[i] = 0;
    sstats2 = 0;


    Doch da ist ein bug!


    Wenn ich z.b. in dm bin(alleine) und mach /free dan wird ja "in dm" -1 gerechnet also komm ich auf 0 das ist richtig! Funktioniert auch!
    Aber wenn ich in dm bin und mich jaile und somit auch aus dm komme dan weis ich nicht was passiert denn wen ich wieder in DM reingehe steht dann bei "In DM" -198 obwohl es eig 0 sein müsste... Woran liegt das=?
    Hier mein Jail Befehl:



    /*if (!strcmp(cmd, "/jail", true)) {
    new tmp[128];
    tmp = strtok(cmdtext, index);
    if (!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GREEN, "USAGE: /jail [playerid]");
    return 1;
    }
    if (!IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid,COLOR_RED,"You aren't Admin!");
    return 1;
    }
    new id = strval(tmp);
    if (!(IsPlayerConnected(id)))
    {
    SendClientMessage(playerid,COLOR_RED,"That player doesn't exist!");
    return 1;
    }
    if (GetPlayerVirtualWorld(id) == 4)
    {
    SendClientMessage(playerid,COLOR_RED,"This player is already jailed!");
    return 1;
    }*/
    if (GetPlayerVirtualWorld(id) == 2) { //Ist bei mir DM
    for (new i = 0; i < MAX_PLAYERS; i++) {
    sstats2--; //DM Score -1 in Leute in DM
    new s[100];
    format(s,sizeof(s),"Deaths: %d, Kills: %d, in DM: %d",sstats0[playerid], sstats1[playerid], sstats2);
    TextDrawSetString(stats[i],s);
    TextDrawSetString(stats[id],s);
    TextDrawSetString(stats[playerid],s);
    TextDrawHideForPlayer(id,stats[id]); } //DM Score Schliesen
    /*GetPlayerName(id, IDName, sizeof(IDName));
    format(tmp, sizeof(tmp), "You have jailed %s (ID:%d)",IDName,id);
    SendClientMessage(playerid, 0xAA3333AA, tmp);
    SetPlayerInterior(id,0);
    SetPlayerVirtualWorld(id, 4);
    SetVehicleVirtualWorld(GetPlayerVehicleID(id), 4);
    SetPlayerPos(id,2384.0,-1451.6,3.5);
    SetPlayerFacingAngle(id, 220.0);
    SetCameraBehindPlayer(id);
    SetPlayerArmour(id,0);
    ResetPlayerWeapons(id);
    GetPlayerName(playerid, AdminName, sizeof(AdminName));
    format(tmp, sizeof(tmp), "jailed by %s",AdminName);
    GameTextForPlayer(id, tmp, 1000,1);
    SetPlayerHealth(id,100.0);
    SetVehicleHealth(GetPlayerVehicleID(id), 1000.0);
    KillTimer(GTimer);
    Knast = CreatePlayerObject(id, 5700, 2386.8, -1452.7, 4.1802, 0.0, 0.0, 180.0);
    }
    return 1;
    }*/

  • Die Schleife läuft dem Wert von MAX_PLAYERS entsprechend oft. Heißt, jeder Code der zwischen den Klammern steht wird MAX_PLAYERS Mal ausgeführt. Heißt, "sstats2" wird MAX_PLAYERS Mal verringert.


    Daran liegts. :>

  • Einfach die Berechnung außerhalb der Schleife ausführen lassen. Solltest doch wohl selbst schaffen, oder? ;P

  • Achso ok THX Und sonst in dem DM score alles richtig?


    Jetzt Gehts
    Habes es so:

    for (new i = 0; i < MAX_PLAYERS; i++) TextDrawSetString(stats[i],s);


    //Edit ups da war noch ein kleiner Fehler oben habe gefixt jetzt is oben alles richtig (der dm score^^)


    Und hier die DM stats^^

    if(strcmp(cmdtext, "/dmstats", true) == 0)
    {
    if (GetPlayerVirtualWorld(playerid) == 2)
    {
    new strtmp[100];
    SendClientMessage(playerid,0x0096FFFF,"Player DM Stats:");
    for(new i = 0; i <MAX_PLAYERS; i++)
    {
    if (GetPlayerVirtualWorld(i) == 2)
    {
    GetPlayerName(i,strtmp,sizeof(strtmp));
    format(strtmp,sizeof(strtmp),"%s Deaths: %d, Kills: %d",strtmp,sstats0[i], sstats1[i]);
    SendClientMessage(playerid,0x00FFFFFF,strtmp);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command here!");
    }
    return 1;
    }

  • Vom einrücken und von vernünftiger Variablen benennung haste auch nochnie was gehört hm? xD



    if(strcmp(cmdtext, "/dmstats", true) == 0)
    {
    if (GetPlayerVirtualWorld(playerid) == 2)
    {
    new nachricht[100],spielername[20];
    SendClientMessage(playerid,0x0096FFFF,"Player DM Stats:");
    for(new i = 0; i <MAX_PLAYERS; i++)
    {
    if (GetPlayerVirtualWorld(i) == 2)
    {
    GetPlayerName(i,spielername,sizeof(spielername));
    format(nachricht,sizeof(nachricht),"%s Deaths: %d, Kills: %d",spielername,sstats0[i], sstats1[i]);
    SendClientMessage(playerid,0x00FFFFFF,nachricht);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command here!");
    }
    return 1;
    }

  • Je em also viel hat sich da grade ja nicht verändert...^^ Das sind ehe nur Namen naja egal...


    //Edit
    Habe noch nen kleinen bug gefunden... Bei leave DM ist noch irwas falsch den wenn ein spieler dm verlässt kriegen alle spieler seinen score... Wen sie dan nochmal sterben oder jemand killen kriegen die wieder iren eigenen wieder... was ist falsch?