Wanteds

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
  • public OnPlayerDeath(playerid, killerid, reason)
    {
    SendClientMessage(killerid, 0xC11D91B5, "Du hast jemand gekillt und bekommst 10000$!");
    SendClientMessage(playerid, 0xC11D91B5, "Du wurdest gekillt, dir werden 5000$ abgezogen!");
    SendClientMessage(killerid, 0xFFFF00AA, "Du hast einen Mord begangen.Du bekommst 1 Wanteds!");
    SetPlayerWantedLevel(killerid,1);
    GivePlayerMoney(playerid,-5000);
    GivePlayerMoney(killerid,10000);
    return 1;
    }


    guten tag. sobald jemand einne killt, bekommt er 1wanted. er kann 20 leute killen behälrt aber 1 wanted. könnte mir vllt eine rhelfen das die wanteds sich addieren?

  • Denk doch mal ein bisschen logisch.
    SETplayerWantedlevel


    SET = setzen --> man setzt das Wantedlevel für einen Spieler.
    Wenn man jemanden tötet, wird OnPlayerDeath aufgerufen.
    D.h. er wird bei jedem Mord auf 1 gesetzt.



    Lösung :



    SetPlayerWantedLevel(killerid, GetPlayerWantedLevel(killerid)+1);


    Edit : Playerid durch killerid ersetzt, da es ja bei OnPlayerDeath ist :)


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

    Einmal editiert, zuletzt von Snail ()

  • @ snail: das weiß ich das das gesetzt wird! ich wollte nun aber das das eben nicht so ist und da ich das nicht wusste habe ich gefragt.


    irgentwie klappt das nicht:


    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\simon.pwn(29) : error 001: expected token: ";", but found "-identifier-"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    und bei snaiL: die wanteds werden trotzdem geseztz und nicht addiert.


    edit: sry snail geht doch, und jez wäre noch ein timer der die wanteds löscht geil. wenn das nicht zuviel arbeit ist natürlich.

    2 Mal editiert, zuletzt von Simon ()

  • Verwende SetTimerEx :



    // oben im Script :
    forward Wantedsweg(playerid);


    //Außerhalb eines Publics :
    public Wantedsweg(playerid)
    {
    if(GetPlayerWantedLevel(playerid) != 0)
    {
    SetPlayerWantedLevel(playerid, GetPlayerWantedLevel(playerid)-1);
    SetTimerEx("Wantedsweg", 300000, false, "i", playerid);
    }
    }


    // So und bei OnPlayerDeath kommt das hier hin :
    SetTimerEx("Wantedsweg", 300000, false, "i", killerid);


    Damit wird nach einer bestimmten Zeit immer ein Wanted gelöscht
    Du musst nur die 300000 durch deine gewünschte Zeit ersetzten (in Millisekunden)


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Es wird immer eins abgezogen.
    Im Moment ist der Timer auf 5 Minuten gestellt, kannst du aber ändern, indem du die 300000 durch deine Zeitspanne (in Millisekunden) änderst.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • ja das weiß ich die umrechnung.
    geht alles sehr gut. ich habe aber folgende warnung die wohl nicht sehr von bedeutung ist:


    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\simon.pwn(795) : warning 235: public function lacks forward declaration (symbol "Wantedsweg")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    könnte mir jemand dieses warning erklären und vllt dieses problem lösen?

  • habe fehler gefunden ^^ groß und klein schreibung
    und: ja habe ich gemacht mit playerid


    und wenn ich befehl /clearwanteds id oder /wantedsweg id oder ähnliches mache sollen alle wanteds weg gehen von denjenigen den man ausgewählt hat.
    dazu wäre es günstigs wenn die cops sehen könnten wer wanteds hat. dies ist verscheinlich ne zu große aufvorderung denn es sollte in msgbox sein. wenn einer trotzdem so nett wäre, könnte er es machen.


    if (strcmp(cmdtext, "/BEFEHL", true)==0)
    {
    if(s == 0 || s == 105 || s == 106 || s == 107 || s == 269 || s == 270 || s == 271)//die skins ersetzten
    {
    SetPlayerWantedLevel(playerid,0)
    }
    return 1;
    }


    außerdem muss will ich die wanteds wegmachen von anderen deswegen reicht alleine /befehl nicht. könnte mir da jemand helfen?

    2 Mal editiert, zuletzt von Simon ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • if (strcmp(cmdtext, "/wanteds", true)==0)
    {
    new name[MAX_PLAYER_NAME];
    new string[1024];
    format(string, sizeof(string), "");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i)
    {
    if(GetPlayerWantedLevel(playerid) =! 0)
    {
    GetPlayerName(i, name, sizeof(name));
    format(string, sizeof(string), "%s\n%s - Wantedlevel %d", string, name, GetPlayerWantedLevel(i));
    }
    }
    }
    ShowPlayerDialog(playerid, ID, DIALOG_STYLE_MSGBOX, "Verbrecherliste", string, "OK", "OK");
    // Für ID musst du eine Dialog-ID einsetzten
    return 1;
    }


    DIe Abfrage ob man Cop ist oder nicht musst du machen, weil ich nicht weiß wie deine Variablen heißen.
    Was den Befehl /clearwanteds angeht, empfehle ich DCMD :



    // oben Im Script :
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    // Dann bei OnPlayerCommandText :


    dcmd(clearwanteds,13,cmdtext);


    // dann außerhalb eines Publics :


    dcmd_clearwanteds(playerid, params[])
    {
    new pid;
    if(sscanf(params, "i", pid))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /clearwanteds [playerid]");
    }
    if(!IsPlayerConnected(pid))
    {
    return SendClientMessage(playerid,COLOR_RED,"Ungültige ID - Benutzung: /clearwanteds [playerid]");
    }
    SetPlayerWantedLevel(pid, 0);
    return 1;
    }



    Bevor das geht, musst du allerdings noch ganz unten in deinem Script das hier einfügen :



    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {


    new changestr[16], changepos = 0, strpos = stringPos;
    while(changepos < 16 && string[strpos] && string[strpos] != delim)
    {
    changestr[changepos++] = string[strpos++];
    }
    changestr[changepos] = '\0';
    setarg(paramPos,0,_:floatstr(changestr));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }


    PS : ist jetzt alles aus dem Stegreif geschrieben, also es könnte sein, dass da was nicht geht ;)


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • wow...!!
    ja okay werde ich mich später mit verfassen, bin zu müde


    edit:


    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : warning 211: possibly unintended assignment
    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : error 022: must be lvalue (non-constant)
    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : warning 215: expression has no effect
    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : error 001: expected token: ";", but found ")"
    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : error 029: invalid expression, assumed zero
    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(726) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    das ist diese Zeile:


    if(GetPlayerWantedLevel(playerid) =! 0)

    2 Mal editiert, zuletzt von Simon ()

  • War ein Tippfehler von mir
    =! muss zu != werden
    Außerdem fällt mir gerade auf, dass ich einen Denkfehler drin habe (playerid muss durch i ersetzt werden) ;)
    So müsste das behoben sein :

    if(GetPlayerWantedLevel(i) != 0)


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • jo alles kla.
    könntest du mir nur noch 1 erklären dann bin ich fertig:


    ShowPlayerDialog(playerid, ID, DIALOG_STYLE_MSGBOX, "Verbrecherliste", string, "OK", "OK");


    C:\Users\Simon Siggelkow\Desktop\Pawno\gamemodes\test.pwn(733) : error 017: undefined symbol "ID"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.