Behörden befehl (strcmp und ocmd)

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 ich habe folgende befehle doch keienr geht wirklich...



    ocmd:tazer(playerid,params[])
    {
    if(!isPlayerBehoerde(playerid))return SendClientMessage(playerid,ROT,"Du bist kein Cop !");
    new pID;
    if(GetDistanceBetweenPlayers(pID,playerid < 5))return SendClientMessage(playerid,ROT,"Kein Spieler ist in deiner Nähe!");
    if(GetDistanceBetweenPlayers(pID,playerid > 5))
    {
    TogglePlayerControllable(pID,0);
    SetTimer("tazerschluss",5000,false);
    SendClientMessage(pID,BLAU,"Du wurdest für 5 Sekunden getazert!");
    SendClientMessage(playerid,BLAU,"Du hast ihn für 5 Sekunden getazert !");
    }
    return 1;
    }
    ocmd:handschellen(playerid,params[])
    {
    if(!isPlayerBehoerde(playerid))return SendClientMessage(playerid,ROT,"Du bist kein Cop !");
    new pID,string[128];
    new vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,GRAU,"/handschellen [ID/Username]");
    if(!IsPlayerInVehicle(pID, 1 <= vehicleid ))return SendClientMessage(playerid,ROT,"Der Spieler ist in keinem Fahrzeug!");
    if(!GetDistanceBetweenPlayers(pID,playerid < 5))return SendClientMessage(playerid,ROT,"Der Spieler sitzt nicht in deinem Auto!");
    if(GetPVarInt(pID,"Handschellen")==1)
    {
    format(string,sizeof(string),"Du hast %s (ID:%i) von den Handschellen befreit!",SpielerName(pID),pID);
    SendClientMessage(playerid,BLAU,string);
    format(string,sizeof(string),"Beamter:%s (ID:%i) hat dich von den Handschellen gelöst!",SpielerName(playerid),playerid);
    SendClientMessage(pID,GELB,string);
    TogglePlayerControllable(pID,1);
    SetPVarInt(pID,"Handschellen",0);
    }
    if(GetPVarInt(pID,"Handschellen")==0)
    {
    format(string,sizeof(string),"Du hast %s (ID:%i) Handschellen angelegt!",SpielerName(pID),pID);
    SendClientMessage(playerid,BLAU,string);
    format(string,sizeof(string),"Beamter:%s (ID:%i) hat dir Handschellen angelegt!",SpielerName(playerid),playerid);
    SendClientMessage(pID,GELB,string);
    TogglePlayerControllable(pID,0);
    SetPVarInt(pID,"Handschellen",1);
    }
    return 1;
    }
    if(strcmp(cmdtext,"/zerren",true)==0)
    {
    new pID;
    new string[128];
    new vehiclebehoerde = GetPlayerVehicleID(playerid);


    if(isPlayerBehoerde(playerid))
    {
    if(GetDistanceBetweenPlayers(pID,playerid < 7))
    {
    format(string,sizeof(string),"Du hast %s (ID:%i) in dein Auto gezerrt!",SpielerName(pID),pID);
    SendClientMessage(playerid,ORANGE,string);
    format(string,sizeof(string),"Du wurdest von %s (ID:%i) in ein Auto gezerrt!",SpielerName(playerid),playerid);
    SendClientMessage(pID,ORANGE,string);
    PutPlayerInVehicle(GetClosestPlayer(pID),vehiclebehoerde,2);
    }


    for (new i; i < MAX_PLAYERS; i++)
    {
    if(isPlayerBehoerde(playerid))
    {
    format(string,sizeof(string),"%s (ID:%i) hat %s (ID:%i) in sein Auto gezerrt!",SpielerName(playerid),playerid,SpielerName(pID),pID);
    SendClientMessage(i,GELB,string);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist in keiner Behörde!");
    }
    return 1;
    }




    7edit: ganz bisschen verschönert :)

    Einmal editiert, zuletzt von _SKY_ ()

  • Beim Tazer und Zerren kann es auch nicht funktionieren, da "pID" an keinen Parameter gebunden wird.
    Heißt "pID" wird keine ID annehmen.
    Ansonsten müsstest du eine Funktion schreiben, die den Spieler, der am nächsten dran ist, herausfiltert.


    Grüße,
    tony

  • @ goldkiller


    bei /zerren


    kommt die meldung:ich wurde von ich ins auto gezerrt , aber ich werde nicht ins auto gezerrt


    bei allen anderen kommt
    nicht in deiner nähe


    edit hab ich doch tony


    if(GetDistanceBetweenPlayers(pID,playerid < 7))

  • Nein, hast du nicht.
    Du willst zwar die Distanz der beiden Spieler herausbekommen, aber du definierst nirgentswo "pID".
    Heißt pID wird keinen anderen Wert annehmen.


    Beim Problem mit den Zerren.
    PutPlayerInVehicle(GetClosestPlayer(pID),vehiclebehoerde,2);


    Sofern die Funktion aus dem GodFather entnommen ist, muss soweit ich weiß bei GetClosestPlayer in diesem Fall "playerid" angegeben werden, da pID halt nicht belegt ist..


    Grüße,
    tony

  • wie meinst du das genau, wie soll ich es nun verwenden :o
    bisher hat alles immer prima geklappt mit pID

  • Ja, wenn "pID" an einen angegeben Parameter im Befehl angepasst wird, klappt so auch alles.
    Die anderen Befehle, wie z.B den Befehl für die Handschellen hast du ja auch mit sscanf gescriptet.
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,GRAU,"/handschellen [ID/Username]");


    Grüße,
    tony

  • so hab jetze so:


    if(sscanf(params,"u",pID))return SendClientMessage(playerid,GRAU,"Nutze: /tazer [ID/Username]");


    würde es funktionieren, kann gerade leider nicht testen?


    und was is an handschellen faul? da kommt auch immer keiner is in deiner nähe

  • "keiner ist in der Nähe", sehe ich allerdings nirgentwo als ClientMessage.
    Was genau kommt nun?


    if(GetDistanceBetweenPlayers(pID,playerid < 5))return SendClientMessage(playerid,ROT,"Kein Spieler ist in deiner Nähe!");


    Macht allerdings auch keinen Sinn, wenn die Entfernung der Spieler weniger als 5 ist?
    Wenn der Spieler in deiner Nähe ist, wird es nicht gehen, andernfalls schon.


    Grüße,
    tony

  • Auf einem der Screenshots versuchst du den Spieler in einen Wagen zu ziehen, obwohl du in keinem Fahrzeug bist, dann kann es ja wohl schlecht gehen.


    PutPlayerInVehicle(GetClosestPlayer(pID),vehiclebehoerde,2);


    Probiere außerdem mal:


    PutPlayerInVehicle(pID,vehiclebehoerde,2);


    Und:


    if(!IsPlayerInVehicle(pID, 1 <= vehicleid ))return SendClientMessage(playerid,ROT,"Der Spieler ist in keinem Fahrzeug!");


    Was soll diese Abfrage denn bewirken?
    Du willst doch abfragen, ob "pID" im Fahrzeug von "playerid" ist.


    Grüße,
    tony

  • jetzt wird immer id 0 , meines achtens ein bot,
    ins auto geworfen
    der in lv und ich in sf bin


    MfG


  • if(strcmp(cmdtext,"/zerren",true)==0)
    {
    new pID;
    new string[128];
    new vehiclebehoerde = GetPlayerVehicleID(playerid);


    if(isPlayerBehoerde(playerid))
    {
    if(GetDistanceBetweenPlayers(pID,playerid < 7))
    {
    format(string,sizeof(string),"Du hast %s (ID:%i) in dein Auto gezerrt!",SpielerName(pID),pID);
    SendClientMessage(playerid,ORANGE,string);
    format(string,sizeof(string),"Du wurdest von %s (ID:%i) in ein Auto gezerrt!",SpielerName(playerid),playerid);
    SendClientMessage(pID,ORANGE,string);
    PutPlayerInVehicle(pID,vehiclebehoerde,2);
    }


    for (new i; i < MAX_PLAYERS; i++)
    {
    if(isPlayerBehoerde(playerid))
    {
    format(string,sizeof(string),"%s (ID:%i) hat %s (ID:%i) in sein Auto gezerrt!",SpielerName(playerid),playerid,SpielerName(pID),pID);
    SendClientMessage(i,GELB,string);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist in keiner Behörde!");
    }
    return 1;
    }


    edit: sry geht net als pawn code einrücken der schiebts immer zurück

  • Mh, ich habe das Gefühl, ich rede an dir vorbei.
    Du weißt "pID" immer noch keinem Wert zu, er bleibt also 0.
    Stichwort: Sscanf.
    Abgesehen davon macht die Schleife auch keinen Sinn, du möchtest was anderes prüfen :P


    Grüße,
    tony

  • ich möchte aber nicht zerren id benützen


    ich möchte nur zerren benützen und der näheste soll ins auto geportet werden
    das zuletzt von mir verwendet wurde.


    MfG

  • wie genau,


    so wie ich es verstehe willst du das
    PutPlayerInVehicle(pID,vehiclebehoerde,2);


    edit
    oderso besser
    PutPlayerInVehicle(GetClosestPlayer(pID),vehiclebehoerde,2);