/duty Problem

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
  • Hallo liebe Scripter,


    ich habe derzeit ein Problem, weiß nicht, in wie Fern ihr mir helfen könnt. Nun gut, fangen wir mal an, mit dem Problem. Also ich möchte mir einen /duty Befehl erstellen, habe auch sehr vieles gemacht, aber ich habe einen Bug oder einen Problem. Ich möchte /duty für das Onduty und für das Offduty benutzen. Dazu mache ich auch SetPVarInt(playerid,"Duty",1/2); Aber irgendwie passiert beides in einem irgendwie.
    Könnt ihr mir helfen?



    ocmd:duty(playerid, params[])
    {
    #pragma unused params
    new string[128];
    if(!IsPlayerCop(playerid))return SendClientMessage(playerid,Rot,"Du bist kein Cop!");
    if(!IsPlayerInRangeOfPoint(playerid,5.0,217.4148,184.4274,1003.0313))return SendClientMessage(playerid,Grau,"Du bist nicht an der Garderobe.");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,15.0,217.4148,184.4274,1003.0313))
    {
    format(string,sizeof(string),"* Officer %s nimmt seine Marke aus dem Schrank und meldet sich zum Dienst.",SpielerName(playerid));
    SendClientMessage(i,Violett,string);
    GivePlayerWeapon(playerid,24,500);//Deagle
    GivePlayerWeapon(playerid,29,500);//Mp5
    GivePlayerWeapon(playerid,31,500);//M4
    }


    }
    return 1;
    }


    (Das andere habe ich gelöscht, da ich einen Error hatte also für Offduty)

  • Ganz oben:


    new duty[MAX_PLAYERS];


    ocmd:duty(playerid, params[])
    {
    #pragma unused params
    new string[128];
    if(!IsPlayerCop(playerid))return SendClientMessage(playerid,Rot,"Du bist kein Cop!");
    if(!IsPlayerInRangeOfPoint(playerid,5.0,217.4148,184.4274,1003.0313))return SendClientMessage(playerid,Grau,"Du bist nicht an der Garderobe.");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,15.0,217.4148,184.4274,1003.0313))
    {
    if(duty[playerid] == 0)
    {
    format(string,sizeof(string),"* Officer %s nimmt seine Marke aus dem Schrank und meldet sich zum Dienst.",SpielerName(playerid));
    SendClientMessage(i,Violett,string);
    GivePlayerWeapon(playerid,24,500);//Deagle
    GivePlayerWeapon(playerid,29,500);//Mp5
    GivePlayerWeapon(playerid,31,500);//M4
    duty[playerid] = 1;
    return 1;
    }
    if(duty[playerid] == 1)
    {
    //DAS WAS PASSIEREN SOLL, WENN DER SPIELER OFFDUTY GEHT!!
    duty[playerid] = 0;
    return 1;
    }
    }


    }
    return 1;
    }


    Ich hoffe ich konnte dir helfen.


    Grüße

  • Du brauchst eigentlich nur eine Variable z.b
    new IsDuty[MAX_PLAYERS]; Das zu den anderen localen New's
    Dann musst du


    ocmd:duty(playerid, params[])
    {
    #pragma unused params
    new string[128];
    if(!IsPlayerCop(playerid))return SendClientMessage(playerid,Rot,"Du bist kein Cop!");
    if(!IsPlayerInRangeOfPoint(playerid,5.0,217.4148,184.4274,1003.0313))return SendClientMessage(playerid,Grau,"Du bist nicht an der Garderobe.");
    //for(new i=0; i<MAX_PLAYERS; i++) Die Schleife muss weg da diese zu 0% sinn ergibt da ich glaube das nicht jeder Duty gehen soll wenn einer den befehl nutz
    //{
    if(IsDuty[playerid] == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,217.4148,184.4274,1003.0313))
    {
    format(string,sizeof(string),"* Officer %s nimmt seine Marke aus dem Schrank und meldet sich zum Dienst.",SpielerName(playerid));
    ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); //Schau dir diese Function an dann brauchst du nicht immer diese Kommische Schleife die jeden spieler durchgeht
    GivePlayerWeapon(playerid,24,500);//Deagle
    GivePlayerWeapon(playerid,29,500);//Mp5
    GivePlayerWeapon(playerid,31,500);//M4
    IsDuty[playerid] = 1; //Setzt die Variable auf 1
    }


    }
    else //Fragt ab ob die Duty Variable nicht auf 0 ist sprich ob er Duty ist
    {
    DEINE SACHEN DIE BEIM OFF DUTY GEHEN PASSIEREN SOLLEN
    IsDuty[playerid] = 0; //Setz den spieler wieder auf OFF DUTY
    }
    return 1;
    }

  • Ich danke euch beiden zwar, aber wenn ich eure Funktion übernehme, passiert dasselbe, was ich auch für einen Problem hatte:


    Wenn der Spieler /duty eingibt, wird seine Variable Duty auf 1 gesetzt.
    Und ich sehe folgendes oben:


    * Officer FreshKing nimmt seine Marke aus dem Schrank und meldet sich zum Dienst
    * Officer FreshKing legt seine Marke in den Schrank und macht Feierabend.


    Ich sehe beides, obwohl ich ein einziges mal /duty eingebe

  • if(pInfo[playerid][Fraktion]==1) //Durch deine Frakabfrage ersetzen
    {
    if(IsPlayerInRangeOfPoint(playerid,1,233.84, 122.85, 1002.92)) //Durch deinen Punkt ersetzen
    {
    if(GetPVarInt(playerid,"Duty")==0)
    {
    SetPVarInt(playerid,"Duty",1);
    SendClientMessage(playerid,Hellblau,"Du bist in den Dienst gegangen!");
    }
    if(GetPVarInt(playerid,"Duty")==1)
    {
    SetPVarInt(playerid,"Duty",0);
    SendClientMessage(playerid,Hellblau,"Du bist aus dem Dienst gegangen!");
    }
    }
    else return SendClientMessage(playerid,Hellblau,"Du bist nicht am Dutypunkt!");
    Funktioniert bei mir. Natürlich sind da ungeschlossene Klammern, hab dir aber auch nicht den ganzen Command gepostet.

    Greetz