/arrest Befehl -> Zeit wird nicht gesetzt

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
  • Ersetze das
    if(sscanf(params,"u",pID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");


    mal damit:



    if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
    if(!IsNumeric(params)) pID = ReturnPlayerID(params);
    else pID = strval(params);


    Und füge das unten im GM ein:

    Spoiler anzeigen

    stock ReturnPlayerID(PlayerName[]) //©Jeffry
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(!strcmp(pName(i),PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(strfind(pName(i),PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Spoiler anzeigen
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }


    Funktioniert es dann?
    Wenn ja, sscanf :pinch:


    Wenn nein, was gibst du ein?

  • (1423) : error 022: must be lvalue (non-constant)
    (1423) : error 017: undefined symbol "ReturnPlayerID"
    (1424) : error 029: invalid expression, assumed zero
    (1424) : error 022: must be lvalue (non-constant)


    if(!IsNumeric(params)) pID = ReturnPlayerID(params); <-- 1423
    else pID = strval(params); <-- 1424

  • Ich habe alles drinnen.. Sogar gerade ersetzt, aber es kommen immer wieder folgende Errors:


    (1423) : error 022: must be lvalue (non-constant)
    (1424) : error 029: invalid expression, assumed zero
    (1424) : error 022: must be lvalue (non-constant)
    (6062) : error 012: invalid function call, not a valid addressn
    (6062) : warning 215: expression has no effect
    (6062) : error 001: expected token: ";", but found ")"
    (6062) : error 029: invalid expression, assumed zero
    (6062) : fatal error 107: too many error messages on one line


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



    7 Errors.


    Code:


    ocmd:arrest(playerid,params[])
    {
    new pID;
    if(IsPlayerConnected(playerid))
    {
    if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
    {
    if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
    if(!IsNumeric(params)) pID = ReturnPlayerID(params);
    else pID = strval(params);

    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));

    new pstring[512];
    printf("Polizist %s versucht pID: %d einzusperren! Wanted-Level: %d", GetName(playerid), pID, SpielerInfo[pID][pWanted]);

    new string[512];
    if(SpielerInfo[pID][pWanted] > 0)
    {
    new time;
    time = SpielerInfo[pID][pWanted]*ServerSettings[ArrestTime];
    SpielerInfo[pID][pJailTime]=time;
    SpielerInfo[pID][pJailed]=1;
    SetPlayerPos(pID,198.4943,162.0886,1003.0300);
    SetPlayerInterior(pID,3);
    format(string, sizeof(string), "Du wurdest von %s eingesperrt!", GetName(playerid));
    SendClientMessage(pID, COLOR_DARKRED, string);
    SetTimerEx("JailTime", 1000, 0, "d", pID);
    SpielerInfo[pID][pWanted]=0;
    }
    else {
    SendClientMessage(playerid, COLOR_RED, "Der ausgewählte Spieler hat keinen Wanted Level!");
    return 1;
    }

    if(SpielerInfo[playerid][sMember] == 1)
    {
    format(string, sizeof(string), "> LS-Polizeibeamter %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
    SendClientMessageToAll(COLOR_DARKRED, string);
    }
    else if(SpielerInfo[playerid][sMember] == 2)
    {
    format(string, sizeof(string), "> SEK-Agent %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
    SendClientMessageToAll(COLOR_DARKRED, string);
    }
    return 1;
    }
    else {
    SendClientMessage(playerid, COLOR_RED, "Du bist kein LSPD/SEK Beamter!");
    return 1;
    }
    }
    return 1;
    }


    forward JailTime(playerid);
    public JailTime(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    if(SpielerInfo[playerid][pJailed] == 1)
    {
    if(SpielerInfo[playerid][pJailTime] > 0)
    {
    SpielerInfo[playerid][pJailTime]=SpielerInfo[playerid][pJailTime]-1;
    SetTimerEx("JailTime", 1000, 0, "d", playerid);
    SpielerInfo[playerid][pWanted]=0;
    return 1;
    }
    else {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1555.2781, -1675.5569, 16.1953);
    SetPlayerFacingAngle(playerid, 90.6666);
    SetCameraBehindPlayer(playerid);
    SpielerInfo[playerid][pJailed]=0;
    SpielerInfo[playerid][pJailTime]=0;
    new string[512];
    format(string, sizeof(string), "~g~Freiheit!~n~~g~Benimm dich das nächste Mal");
    GameTextForPlayer(playerid, string, 2500, 1);
    return 1;
    }
    }
    }
    return 1;
    }

  • Sofern es nicht an sscanf liegt.. habe mal den Befehl neu angeordnet möglicherweise funktioniert es damit... ( die returns rausgenommmen und umgestellt den Code )
    ocmd:arrest(playerid,params[])
    {
    new pID;
    if(IsPlayerConnected(playerid))
    {
    if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_WHITE,"{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));


    new pstring[512];
    printf("Polizist %s versucht pID: %d einzusperren! Wanted-Level: %d", GetName(playerid), pID, SpielerInfo[pID][pWanted]);


    new string[512];
    if(SpielerInfo[pID][pWanted] > 0)
    {
    new time;
    time = SpielerInfo[pID][pWanted]*ServerSettings[ArrestTime];
    SpielerInfo[pID][pJailTime]=time;
    SpielerInfo[pID][pJailed]=1;
    SetPlayerPos(pID,198.4943,162.0886,1003.0300);
    SetPlayerInterior(pID,3);
    format(string, sizeof(string), "Du wurdest von %s eingesperrt!", GetName(playerid));
    SendClientMessage(pID, COLOR_DARKRED, string);
    SetTimerEx("JailTime", 1000, 0, "d", pID);
    SpielerInfo[pID][pWanted]=0;
    if(SpielerInfo[playerid][sMember] == 1)
    {
    format(string, sizeof(string), "> LS-Polizeibeamter %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
    SendClientMessageToAll(COLOR_DARKRED, string);
    }
    else if(SpielerInfo[playerid][sMember] == 2)
    {
    format(string, sizeof(string), "> SEK-Agent %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
    SendClientMessageToAll(COLOR_DARKRED, string);
    }
    }
    else {
    SendClientMessage(playerid, COLOR_RED, "Der ausgewählte Spieler hat keinen Wanted Level!");
    }
    }
    else {
    SendClientMessage(playerid, COLOR_RED, "Du bist kein LSPD/SEK Beamter!");
    }
    }
    return 1;
    }


    forward JailTime(playerid);
    public JailTime(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    if(SpielerInfo[playerid][pJailed] == 1)
    {
    if(SpielerInfo[playerid][pJailTime] > 0)
    {
    SpielerInfo[playerid][pJailTime]=SpielerInfo[playerid][pJailTime]-1;
    SetTimerEx("JailTime", 1000, 0, "d", playerid);
    SpielerInfo[playerid][pWanted]=0;
    return 1;
    }
    else {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1555.2781, -1675.5569, 16.1953);
    SetPlayerFacingAngle(playerid, 90.6666);
    SetCameraBehindPlayer(playerid);
    SpielerInfo[playerid][pJailed]=0;
    SpielerInfo[playerid][pJailTime]=0;
    new string[512];
    format(string, sizeof(string), "~g~Freiheit!~n~~g~Benimm dich das nächste Mal");
    GameTextForPlayer(playerid, string, 2500, 1);
    return 1;
    }
    }
    }
    return 1;
    }

  • Nee.. Schade.. Es ist immer die gleiche Fehlermeldung da..


    LG lolcooper


    EDIT: Ich selber mache die Befehle hauptsächlich über ocmd + sscanf


    Wie würde dies allerdings mit strcmp gehen? Vielleicht geht das? Hat jemand eine Ahnung, wie der Befehl dann aussehen müsste?

  • lolcooper: Ich habe mir den Code nochmal angeschaut, kann es sein, dass du die "pName" Funktion nicht hast, die ich in ReturnPlayerID genutzt habe? Falls das der Fall ist:


    stock pName(playerid)
    {
    new _name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, _name, MAX_PLAYER_NAME);
    return _name;
    }


    Kommen die Fehler dann noch immer wenn du meinen Teil vom Code einfügst?
    Wenn ja, poste doch bitte den Befehl nochmal, aber diesmal in den [.pwn] [./pwn] Klammern (ohne die .)

  • Dann hast du es bereits vorher definiert, vielleicht global.
    Räume bitte erst mal deine ganzen Warnings auf, die können auch Fehler verursachen. Wenn das Problem dann immer noch besteht, und du keine weitere Definition von sscanf in den includes gefunden hast, dann poste bitte nochmal den Befehl und zwar mit sscanf, so wie du ihn hast und er nicht tut.

  • Nein habe ich nicht ?(


    Jetzt wurde mein Problem anders..... Wenn ich einen Befehl wie /<command> <Spieler> ausführe, dann wird er zwar ausgeführt, aber nicht am jeweiligen Spieler, sondern an mich selber.


    LG lolcooper


    Hier mein /verhaften Befehl als Beispiel:


    ocmd:verhaften(playerid,params[])
    {
    if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
    {
    new ppID;
    if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");

    new string[128];
    if(GetDistanceBetweenPlayers(playerid, ppID) < 4)
    {
    SetPlayerCuffed(ppID, true);
    }
    else {
    format(string, sizeof(string), "%s befindet sich nicht in deiner Nähe!", GetName(ppID));
    return 1;
    }


    for(new i; i < MAX_PLAYERS; i++)
    {
    if(GetDistanceBetweenPlayers(playerid, i) < 4)
    {
    format(string, sizeof(string), "%s wurde von Polizist %s verhaftet!", GetName(ppID), GetName(playerid));
    SendClientMessage(ppID, COLOR_DARKRED, string);
    }
    }
    return 1;
    }
    else {
    SendClientMessage(playerid, COLOR_DARKRED, "Du bist kein LSPD/SEK Mitglied!");
    return 1;
    }
    }

  • Weil du den eigentlichen Player nicht definiert hast, wie z.b Stock ReturnUser.


    Ausserdem solltest du den Param in String definieren :D

    newppID[32];
    if(sscanf(params,"s",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • palwal: Das ist so nicht richtig. ppID ist die Spieler-ID, respektive der playerid. Die playerid ist immer ein Integer und kein String. Der Code stimmt eigentlich, ich bin immer noch der Meinung, dass sscanf das Problem ist.


    Füge mal das ein:
    new ppID;
    printf("1->playerid=%d ppID=%d params=%s", playerid, ppID, params);
    if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
    printf("2->playerid=%d ppID=%d params=%s", playerid, ppID, params);


    Falls du nicht weißt wie:

    Spoiler anzeigen
    ocmd:verhaften(playerid,params[])
    {
    if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
    {
    new ppID;
    printf("1->playerid=%d ppID=%d params=%s", playerid, ppID, params);
    if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
    printf("2->playerid=%d ppID=%d params=%s", playerid, ppID, params);

    new string[128];
    if(GetDistanceBetweenPlayers(playerid, ppID) < 4)
    {
    SetPlayerCuffed(ppID, true);
    }
    else
    {
    format(string, sizeof(string), "%s befindet sich nicht in deiner Nähe!", GetName(ppID));
    return 1;
    }

    Spoiler anzeigen
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(GetDistanceBetweenPlayers(playerid, i) < 4)
    {
    format(string, sizeof(string), "%s wurde von Polizist %s verhaftet!", GetName(ppID), GetName(playerid));
    SendClientMessage(ppID, COLOR_DARKRED, string);
    }
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_DARKRED, "Du bist kein LSPD/SEK Mitglied!");
    return 1;
    }
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Dann bekomme ich in der Konsole folgende Ausgabe:
    [17:13:11] 1->playerid=0 ppID=D params=
    [17:13:11] 2->playerid=0 ppID=D params=


    Und InGame kann ich immer noch nur mich verhaften.


    Die playerid stimmt. Da ich die ID 0 getragen habe.


    LG lolcooper

  • Muss ein kleiner "d" sein, kein großes "D", da hab ich mich vertippt.
    Aber das ist egal, params war ja leer.


    Wie willst du es nun? /arrest [Spieler] oder /arrest und er sucht sich den nächsten Spieler?
    Bzw, was willst du eingeben?

  • Ok. Da bei params nichts steht gibt es zwei Möglichkeiten.
    1) Du hast nichts eingegeben
    2) ocmd tut nicht gescheit.


    Was gibst du genau ein?


    Lade dir die neuste Version von ocmd nochmal runter und kompiliere das ganze nochmal durch.


    Füg bei OnPlayerCommandText ganz oben noch dazu:
    printf("%d typed: %s", playerid, cmdtext);


    Dann poste was du eingibst und was im server_log steht.

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