Problem mit /free (Anwalt)

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
  • if(strcmp(cmd, "/free", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pJob] != 2)
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist kein Anwalt!");
    return 1;
    }
    /*if(PlayerInfo[playerid][pJailed] != 1 || PlayerInfo[playerid][pArrested] != 1)
    {
    SendClientMessage(playerid, COLOR_GREY,"Du bist im Knast, und kannst dich nicht selber befreien!");
    return 1;
    }
    if(PlayerInfo[playerid][pLawSkill] >= 401)
    {
    ApprovedLawyer[playerid] = 1;
    }*/
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(giveplayerid == playerid) return true;
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID || PlayerInfo[giveplayerid][pJailed] != 2)
    {
    if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber befreien!"); return 1; }
    if(PlayerInfo[giveplayerid][pJailed] ==1 && ApprovedLawyer[playerid] == 1)
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du hast %s aus dem Knast geholt.", giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du wurdest von Anwalt %s aus dem Knast geholt.", sendername);
    SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    ApprovedLawyer[playerid] = 0;
    WantLawyer[giveplayerid] = 0;
    CallLawyer[giveplayerid] = 0;
    JailPrice[giveplayerid] = 0;
    PlayerInfo[giveplayerid][pJailTime] = 1;
    PlayerInfo[playerid][pLawSkill] ++;
    if(PlayerInfo[playerid][pLawSkill] == 50)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 2.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 100)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 3.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 200)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 4.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 400)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 5.Du kannst jetzt schneller und mehr Geld verdienen."); }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Spieler ist nicht im Jail oder braucht keinen Anwalt!");
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist Offline!");
    }
    }
    return 1;
    }



    Hallo ich habe ein Problem wen ich ein Spieler Befreien möchte aus dem Gefängnis funktioniert das nicht :/? warum

  • Ich habe den Code jetzt einmal ordentlicher geschrieben ;) aber nicht getestet, sollte es nicht klappen, dann gebe nochmal bescheid, dann lassen wir jede Zeile printen und schauen wo der Code endet. So sollten wir den Fehler aufjeden Fall finden :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD


  • if(strcmp(cmd, "/free", true) == 0)
    {
    if(!IsPlayerConnected(playerid))return 1;
    if(PlayerInfo[playerid][pJob] != 2)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Anwalt!");
    new idx, tmp[128], sendername[MAX_PLAYER_NAME+5],giveplayer[MAX_PLAYER_NAME+5],string[128]; //19350
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");
    new giveplayerid = ReturnUser(tmp); //19353
    if(giveplayerid == playerid) return true;
    if(!IsPlayerConnected(giveplayerid))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");
    if(giveplayerid != INVALID_PLAYER_ID || PlayerInfo[giveplayerid][pJailed] != 2)
    {
    if(giveplayerid == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber befreien!");
    if(PlayerInfo[giveplayerid][pJailed] ==1 && ApprovedLawyer[playerid] == 1)
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du hast %s aus dem Knast geholt.", giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du wurdest von Anwalt %s aus dem Knast geholt.", sendername);
    SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    ApprovedLawyer[playerid] = 0;
    WantLawyer[giveplayerid] = 0;
    CallLawyer[giveplayerid] = 0;
    JailPrice[giveplayerid] = 0;
    PlayerInfo[giveplayerid][pJailTime] = 1;
    PlayerInfo[playerid][pLawSkill] ++;
    if(PlayerInfo[playerid][pLawSkill] == 50)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 2.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 100)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 3.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 200)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 4.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 400)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 5.Du kannst jetzt schneller und mehr Geld verdienen."); }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Spieler ist nicht im Jail oder braucht keinen Anwalt!");
    }
    return 1;
    }






    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19350) : warning 219: local variable "idx" shadows a variable at a preceding level
    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19350) : warning 219: local variable "tmp" shadows a variable at a preceding level
    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19350) : warning 219: local variable "sendername" shadows a variable at a preceding level
    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19350) : warning 219: local variable "giveplayer" shadows a variable at a preceding level
    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19350) : warning 219: local variable "string" shadows a variable at a preceding level
    C:\Windows\Vss\First Person\German-Next-Era-Life-v2.5-0.3x\German Reallife v1.2\gamemodes\German.pwn(19353) : warning 219: local variable "giveplayerid" shadows a variable at a preceding level

  • Dann versuche es mit meinem nochmals so:



    Mit freundlichen Grüßen
    German_ScripterHD

  • local variable "idx" shadows a variable at a preceding level
    Bedeutet einfach nur, dass deine Variable/n mehrfach deklariert wurden.


    Beispiel:

  • if(strcmp(cmd, "/free", true) == 0)
    {
    if(!IsPlayerConnected(playerid))return 1;
    if(PlayerInfo[playerid][pJob] != 2)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Anwalt!");
    new valueX, tmpX[128], sendernameX[MAX_PLAYER_NAME+5],giveplayerX[MAX_PLAYER_NAME+5],stringX[128];
    tmpX = strtok(cmdtext, valueX);
    if(!strlen(tmpX))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");
    new giveplayeridX = ReturnUser(tmpX);
    if(giveplayeridX == playerid) return true;
    if(!IsPlayerConnected(giveplayeridX))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");
    if(giveplayeridX != INVALID_PLAYER_ID || PlayerInfo[giveplayeridX][pJailed] != 2)
    {
    if(giveplayeridX == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber befreien!");
    if(PlayerInfo[giveplayeridX][pJailed] ==1 && ApprovedLawyer[playerid] == 1)
    {
    GetPlayerName(giveplayeridX, giveplayerX, sizeof(giveplayerX));
    GetPlayerName(playerid, sendernameX, sizeof(sendernameX));
    format(stringX, sizeof(stringX), "* Du hast %s aus dem Knast geholt.", giveplayerX);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, stringX);
    format(stringX, sizeof(stringX), "* Du wurdest von Anwalt %s aus dem Knast geholt.", sendernameX);
    SendClientMessage(giveplayeridX, COLOR_LIGHTBLUE, stringX);
    ApprovedLawyer[playerid] = 0;
    WantLawyer[giveplayeridX] = 0;
    CallLawyer[giveplayeridX] = 0;
    JailPrice[giveplayeridX] = 0;
    PlayerInfo[giveplayeridX][pJailTime] = 1;
    PlayerInfo[playerid][pLawSkill] ++;
    if(PlayerInfo[playerid][pLawSkill] == 50)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 2.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 100)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 3.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 200)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 4.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 400)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 5.Du kannst jetzt schneller und mehr Geld verdienen."); }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Spieler ist nicht im Jail oder braucht keinen Anwalt!");
    }
    return 1;
    }


    @German_ScripterHD


    Wen ich /free eingebe steht da Der Angebene Spieler ist nicht Online warum?

    Einmal editiert, zuletzt von DerFamer ()

  • Wen ich /free eingebe steht da Der Angebene Spieler ist nicht Online warum?

    Die Funktion IsPlayerConnected gibt einen Wert zurück der besagt ob der Spieler online ist oder nicht.
    Ich habe dir lediglich den Code ordentlicher und Übersichtlicher geschrieben...


    Code Beispiel:
    Dein Code vorher:

    C
    if(IsPlayerConnected(giveplayeridX))
    {
         //Code
    }
    else
    {
          SendClientMessage(playerid,-1,"Der Spieler ist nicht online!");
    }


    Mein Code (übersichtlicher):

    C
    if(!IsPlayerConnected(giveplayeridX))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");

    Im Endeffekt genau das gleiche, nur das meinem Code den Befehl beendet lässt wenn der Spieler nicht online ist.
    Aber um nochmal auf deine Frage zurück zukommen, "Wen ich /free eingebe steht da Der Angebene Spieler ist nicht Online warum?"
    Das beedeutet wie der Code es dir auch wieder gibt, das der Spieler nicht Online ist.
    Frage:
    Wenn du /free eintippst, was gibst du als Parameter SpielerID an? (Deine SpielerID oder eine eines anderen Spielers?)


    Edit: Rechtscheibfehler behoben


    Mit freundlichen Grüßen
    German_ScripterHD

  • Kollege halt mal den Ball flach. Es gibt für alles eine Lösung.


    Füge de Code im Spoiler in dein GameMode ein und kompaile das Script einmal neu.
    Danach Server starten Befehl eingeben und dann einmal deinen Serverlog posten.


    [spoiler='Code']


    Mit freundlichen Grüßen
    German_ScripterHD

  • [17:32:07] Step: 0 (Start)
    [17:32:07] Step: 1
    [17:32:42] Step: 0 (Start)
    [17:32:42] Step: 1
    [17:32:42] Step: 2
    [17:32:42] Step: 3
    [17:32:42] Step: 4
    [17:32:42] Step: 5
    [17:32:42] Step: 6
    [17:32:42] Step: 6 - 1 / giveplayeridX = 65535 /playerid = 0
    [17:32:42] Step: 7
    [17:32:42] Step: 7 - 1 / giveplayeridX = 65535 /playerid = 0


    Ist ja nichts gegen dich aber danke für deine Hilfe ist nicht böse gemeint

  • Ist ja nichts gegen dich aber danke für deine Hilfe ist nicht böse gemeint

    Nadann ist gut ;)


    Dank meiner print's kann man jetzt erkennen das es ein Fehler beim zurückgeben der giveplayerid gibt.
    Das lässt darauf schließen, das die Funktion ReturnUser einen falschen Wert zurück gibt.


    Kleiner Tipp, es gibt funktionen mit dem das besser geht, z.B: mit dem sscanf Plugin, aber das nur am Rande :)


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ich empfehle dir noch das ocmd Include, da das ein relativ guter Commandprozessor ist.


    Und dann schreibe den Code mal so:


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:free(playerid,params[])
    {
    if(!IsPlayerConnected(playerid))return 1;
    if(PlayerInfo[playerid][pJob] != 2)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Anwalt!");
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");
    if(pID == playerid) return true;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");
    if(pID != INVALID_PLAYER_ID || PlayerInfo[pID][pJailed] != 2)
    {
    if(pID == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber befreien!");
    if(PlayerInfo[pID][pJailed] ==1 && ApprovedLawyer[playerid] == 1)
    {
    GetPlayerName(pID, nameX[0], 128);
    GetPlayerName(playerid, nameX[1], 128);
    format(stringX, sizeof(stringX), "* Du hast %s aus dem Knast geholt.", nameX[0]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, stringX);
    format(stringX, sizeof(stringX), "* Du wurdest von Anwalt %s aus dem Knast geholt.", nameX[1]);
    SendClientMessage(pID, COLOR_LIGHTBLUE, stringX);
    ApprovedLawyer[playerid] = 0;
    WantLawyer[pID] = 0;
    CallLawyer[pID] = 0;
    JailPrice[pID] = 0;
    PlayerInfo[pID][pJailTime] = 1;
    PlayerInfo[playerid][pLawSkill] ++;
    if(PlayerInfo[playerid][pLawSkill] == 50)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 2.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 100)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 3.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 200)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 4.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 400)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 5.Du kannst jetzt schneller und mehr Geld verdienen."); }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Spieler ist nicht im Jail oder braucht keinen Anwalt!");
    }
    return 1;
    }


    Wie kann ich Kaution hinzufügen also wieviel der Spieler Zahlen muss das er raus kann aus dem Knast?

  • Ändere:

    C
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName]");


    zu:



    C
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID,preisX;
    if(sscanf(params,"ud",pID,preisX))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName][Preis]");


    Du kannst dann nach der Nachricht "* Du wurdest von Anwalt %s aus dem Knast geholt." folgendes einfügen:


    C
    format(stringX, sizeof(stringX), "* Die Befreiung kostete %d$.", preisX);
    SendClientMessage(pID, COLOR_LIGHTBLUE, stringX);
    GivePlayerMoney(pID,-preisX);


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:free(playerid,params[])
    {
    if(!IsPlayerConnected(playerid))return 1;
    if(PlayerInfo[playerid][pJob] != 2)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Anwalt!");
    new nameX[2][MAX_PLAYER_NAME+5],stringX[128],pID,preisX;
    if(sscanf(params,"ud",pID,preisX))return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /free [SpielerID/SpielerName][Kaution]");
    if(pID == playerid) return true;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, "Der angegebene Spieler ist nicht online!");
    if(pID != INVALID_PLAYER_ID || PlayerInfo[pID][pJailed] != 2)
    {
    if(pID == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber befreien!");
    if(PlayerInfo[pID][pJailed] ==1 && ApprovedLawyer[playerid] == 1)
    {
    GetPlayerName(pID, nameX[0], 128);
    GetPlayerName(playerid, nameX[1], 128);
    format(stringX, sizeof(stringX), "* Du hast %s aus dem Knast geholt.", nameX[0]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, stringX);
    format(stringX, sizeof(stringX), "* Du wurdest von Anwalt %s aus dem Knast geholt.", nameX[1]);
    format(stringX, sizeof(stringX), "* Die Befreiung kostete %d$.", preisX);
    SendClientMessage(pID, COLOR_LIGHTBLUE, stringX);
    GivePlayerMoney(pID,-preisX);
    SendClientMessage(pID, COLOR_LIGHTBLUE, stringX);
    ApprovedLawyer[playerid] = 0;
    WantLawyer[pID] = 0;
    CallLawyer[pID] = 0;
    JailPrice[pID] = 0;
    PlayerInfo[pID][pJailTime] = 1;
    PlayerInfo[playerid][pLawSkill] ++;
    if(PlayerInfo[playerid][pLawSkill] == 50)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 2.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 100)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 3.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 200)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 4.Du kannst jetzt schneller und mehr Geld verdienen."); }
    else if(PlayerInfo[playerid][pLawSkill] == 400)
    { SendClientMessage(playerid, COLOR_YELLOW, "* Dein anwalt Skill ist nun auf 5.Du kannst jetzt schneller und mehr Geld verdienen."); }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Spieler ist nicht im Jail oder braucht keinen Anwalt!");
    }
    return 1;
    }



    Habe es mal getestet es Passiert nichts?