/auftragskiller

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
  • hi leute ich wollte mal fragen wies geht nen auftragskiller cmd zu amchen bin bisher nur soweit gekommen


    new killer[MAX_PLAYERS];
    new spieler[32][0] = {
    {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16},
    {17}, {18}, {19}, {20}, {21},{22}, {23}, {24}, {25}, {26},{27}, {28}, {29}, {30}, {31}, {32}
    };


    forward AuftragsKiller(playerid);


    if(strcmp(cmd, "/auftragskiller ", true, 16) == 0)
    {
    if(killer[playerid] == 0)
    {
    AuftragsKiller(playerid);
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast bereits einen auftrag!");
    }
    return 1;
    }



    public AuftragsKiller(playerid)
    {
    new typ=random(sizeof(spieler));
    new typ2=spieler[typ][0];
    if(IsPlayerConnected(typ2))
    {


    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    }
    }

  • Ich verstehe den Sinn des Strings spieler nicht.
    Der random reicht doch vollkommen als Auswahl der zufälligen Zielperson.


    Die ausgesuchte Person solltest du global für jeden Spieler speichern. Weiter gehen würde es dann zB. mit:




    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killer[killerid])
    {
    if(playerid == zielperson[killerid])
    {
    killer[killerid] = 0;
    GivePlayerMoney(killerid, KILLER_REWARD);
    SendClientMessage(killerid, 0xFFFFFFFF, "Du hast die Zielperson getötet.");
    }
    }

    return 1;
    }




    public OnPlayerDisconnect(playerid)
    {
    for(new i=0; i
    {
    killer[i] = 0;
    SendClientMessage(i, 0xFFFFFFFF, "Deine Zielperson ist vom Server gegangen. Du kannst einen neuen Auftrag annehmen.");
    }

    return 1;
    }

  • habs nun fast geschaft nur ein prob


    public AuftragsKiller(playerid)
    {
    new typ=random(sizeof(spieler));
    new typ2=spieler[typ][0];
    if(IsPlayerConnected(typ2))
    {


    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    zielperson[playerid] = typ2;
    }
    }
    da wird typ2 definiert
    und bei onplayerdeath hab ichs so gemacht
    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killer[playerid] == killerid)
    {
    if(playerid == zielperson[typ2])
    {
    killer[playerid] = 0;
    GivePlayerMoney(playerid, 5000);
    SendClientMessage(playerid, GREEN, "Du hast die Zielperson ausgeschaltet und hast 5000 $ bekommen!");
    }
    }
    return 1;
    }


    is kla dasn error kommt von wegen undefined symbol "typ2" weil der ja woanders definiert wurde wie kann ich das nun beheben

  • Bei OnPlayerDeath muss es playerid bleiben, die Variable ist ja vom Callback selbst vorgegeben.
    Außerdem machen manche Änderungen keinen Sinn, zB.:


    if(killer[playerid] == killerid)


    killer[] speichert doch nur, ob der Spieler ein Auftragskiller ist oder nicht, also wird boolsch genutzt. Btw könntest du sie auch gleich boolean machen, mit:


    new bool:killer[MAX_PLAYERS];



    Also so ist der OnPlayerDeath Part richtig:



    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killer[killerid])
    {
    if(playerid == zielperson[killerid])
    {
    killer[killerid] = 0;
    GivePlayerMoney(killerid, 5000);
    SendClientMessage(killerid, GREEN, "Du hast die Zielperson ausgeschaltet und hast 5000$ bekommen.");
    }
    }


    return 1;
    }


  • Und was ist, wenn du Zufallsid nicht vergeben ist?
    public AuftragsKiller(playerid)
    {
    new typ=random(sizeof(spieler));
    new typ2=spieler[typ][0];
    if(IsPlayerConnected(typ2))
    {
    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    zielperson[playerid] = typ2;
    }
    else { AuftragsKiller(playerid); }
    }


  • public AuftragsKiller(playerid)
    {
    newrandom:
    new typ=random(sizeof(spieler));
    new typ2=spieler[typ][0];
    if(IsPlayerConnected(typ2))
    {
    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    zielperson[playerid] = typ2;
    }
    else goto newrandom;
    }


    Hab das jetzt mit nem Label gelöst, geht aber auch anders.

  • Spart wieder einiges...^^


    public AuftragsKiller(playerid)
    {
    new typ;
    new typ2;
    while(!IsPlayerConnected(Typ2))
    {
    typ=random(sizeof(spieler));
    typ2=spieler[typ][0];
    }
    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    zielperson[playerid] = typ2;
    return 1;
    }

    Mfg. BlackFoX_UD_ alias [BFX]Explosion