Fraktion im Script automatisch zuweisen

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
  • So habe ich das jetzt gerade:

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_TEAM)
    {
    if(listitem==0) //Blaues Team
    {
    SetPlayerColor(playerid,FBlau);
    SendClientMessage(playerid,FOrange,"Du bist dem blauen Team beigetreten.");
    SetPlayerPos(playerid,1312.5743,1621.1654,10.8203);
    SetPlayerSkin(playerid,287);
    {
    ShowPlayerDialog(playerid,DIALOG_KLASSEN,DIALOG_STYLE_LIST,"TEAM","Sanitäter\nMechaniker\nSturm\nScharfschütze\nSchwerer Soldat","Auswählen","");
    }
    }
    if(listitem==1) //Rotes Team
    {
    SetPlayerColor(playerid,FRot);
    SetPlayerPos(playerid,1690.1427,-2620.3025,13.5469);
    SendClientMessage(playerid,FOrange,"Du bist dem roten Team beigetreten.");
    SetPlayerSkin(playerid,287);
    {
    ShowPlayerDialog(playerid,DIALOG_KLASSEN,DIALOG_STYLE_LIST,"TEAM","Sanitäter\nMechaniker\nSturm\nScharfschütze\nSchwerer Soldat","Auswählen","");
    }
    }
    }


    if(dialogid == DIALOG_KLASSEN)
    {
    if(listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SetPVarInt(playerid,"fraktname1",1);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }
    if(listitem==1) //Klasse Engineer
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,25,200);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,285);
    SetPlayerArmour(playerid,100);
    SetPVarInt(playerid,"fraktname2",2);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Mechaniker) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit dem Befehl /repair andere Fahrzeuge reparieren.");
    }
    if(listitem==2) //Klasse Assault
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    GivePlayerWeapon(playerid,31,1000);
    SetPlayerSkin(playerid,287);
    SetPlayerArmour(playerid,100);
    SetPVarInt(playerid,"fraktname3",3);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sturm) entschieden.");
    }
    if(listitem==3) //Klasse Sniper
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    GivePlayerWeapon(playerid,34,1000);
    SetPlayerSkin(playerid,287);
    SetPVarInt(playerid,"fraktname4",4);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Scharfschütze) entschieden.");
    }
    if(listitem==4) //Klasse Schwerer Soldat
    {
    GivePlayerWeapon(playerid,27,200);
    GivePlayerWeapon(playerid,36,10);
    GivePlayerWeapon(playerid,16,2);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Schwerer Soldat) entschieden.");
    }
    }

    Das sind 2 Dialoge. In den ersten wählt man aus im welchen Team man will und in den 2. wählt man die Klasse.
    Ich möchte ich dass der Medic(Sanitäter) /heal bei anderen machen kann und die anderen nicht.
    Deswegen erstelle ich für jede Klasse eine Fraktion. Wenn man nun auf eine Klasse draufdrückt,
    soll man die die Fraktion joinen.

  • public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_TEAM)
    {
    if(listitem==0) //Blaues Team
    {
    SetPlayerColor(playerid,FBlau);
    SendClientMessage(playerid,FOrange,"Du bist dem blauen Team beigetreten.");
    SetPlayerPos(playerid,1312.5743,1621.1654,10.8203);
    SetPlayerSkin(playerid,287);
    {
    ShowPlayerDialog(playerid,DIALOG_KLASSEN,DIALOG_STYLE_LIST,"TEAM","Sanitäter\nMechaniker\nSturm\nScharfschütze\nSchwerer Soldat","Auswählen","");
    }
    }
    if(listitem==1) //Rotes Team
    {
    SetPlayerColor(playerid,FRot);
    SetPlayerPos(playerid,1690.1427,-2620.3025,13.5469);
    SendClientMessage(playerid,FOrange,"Du bist dem roten Team beigetreten.");
    SetPlayerSkin(playerid,287);
    {
    ShowPlayerDialog(playerid,DIALOG_KLASSEN,DIALOG_STYLE_LIST,"TEAM","Sanitäter\nMechaniker\nSturm\nScharfschütze\nSchwerer Soldat","Auswählen","");
    }
    }
    }


    if(dialogid == DIALOG_KLASSEN)
    {
    if(listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SetPVarInt(playerid,"Medic",1);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }
    if(listitem==1) //Klasse Engineer
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,25,200);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,285);
    SetPlayerArmour(playerid,100);
    SetPVarInt(playerid,"KE2",2);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Mechaniker) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit dem Befehl /repair andere Fahrzeuge reparieren.");
    }
    if(listitem==2) //Klasse Assault
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    GivePlayerWeapon(playerid,31,1000);
    SetPlayerSkin(playerid,287);
    SetPlayerArmour(playerid,100);
    SetPVarInt(playerid,"KA",3);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sturm) entschieden.");
    }
    if(listitem==3) //Klasse Sniper
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    GivePlayerWeapon(playerid,34,1000);
    SetPlayerSkin(playerid,287);
    SetPVarInt(playerid,"KN",4);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Scharfschütze) entschieden.");
    }
    if(listitem==4) //Klasse Schwerer Soldat
    {
    GivePlayerWeapon(playerid,27,200);
    GivePlayerWeapon(playerid,36,10);
    GivePlayerWeapon(playerid,16,2);
    SetPVarInt(playerid,"KSS",4);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Schwerer Soldat) entschieden.");
    }
    }


    Versuch es mal so.
    Jetzt haben alle ihre einge Variable.

  • Geht leider immer noch nicht :(. Dies ist der Befehl, den nur dir Klasse Medics machen dürfen:ocmd:heal(playerid,params[]){ new pID,string[128]; if(isPlayerInFrakt(playerid,1)) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!"); { if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]"); if(GetDistanceBetweenPlayer(playerid,pID) <= 5) { SetPlayerHealth(pID,100); format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID)); SendClientMessage(playerid,FDunkelgruen,string); } } return 1;}

  • Geht leider immer noch nicht :(. Dies ist der Befehl, den nur dir Klasse Medics machen dürfen:ocmd:heal(playerid,params[]){ new pID,string[128]; if(GetPVarInt(playerid,"Medic")==1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!"); { if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]"); if(GetDistanceBetweenPlayer(playerid,pID) <= 5) { SetPlayerHealth(pID,100); format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID)); SendClientMessage(playerid,FDunkelgruen,string); } } return 1;}


    Versuch es ma so..:D

  • Geht leider immer noch nicht:(.
    Nur die Medics dürfen /heal machen. Aber im moment kann noch jeder /heal machen.
    Der Befehl der eigendlich nur von den Medics gemacht werden darf:



    ocmd:heal(playerid,params[])
    {
    if(GetPVarInt(playerid,"Medic")==1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!");
    new pID,string[128];
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]");
    if(GetDistanceBetweenPlayer(playerid,pID) <= 5)
    {
    SetPlayerHealth(pID,100);
    format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID));
    SendClientMessage(playerid,FDunkelgruen,string);
    return 1;
    }
    }
    return 1;
    }

    Und hier ist die Auswahl der klassen:



    if(listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }


  • if(listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SetPVarInt(playerid,"Medic",1);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }


    Füg das mal ein, geht es dann?

  • Ne geht leider nicht. Aber ich habe jetzt Probiert mit der Fraktionsabfrage.
    Wenn ich das so mache: if(!isPlayerInFrakt steht da immer bei jeder Klasse das ich kein Sanitäter bin.
    Und wenn ich dieses ! weglasse kann jeder /heal benutzen. Ich glaube das muss an diesen hier liegen:


    if (listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SetPVarInt(playerid,"Medic",1);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }

  • Ich habe etwas beim befehl falsch gemacht :O:


    ocmd:heal(playerid,params[])
    {
    if(!GetPVarInt(playerid,"Medic")==1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!");
    new pID,string[128];
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]");
    if(GetDistanceBetweenPlayer(playerid,pID) <= 5)
    {
    SetPlayerHealth(pID,100);
    format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID));
    SendClientMessage(playerid,FDunkelgruen,string);
    return 1;
    }
    }
    return 1;
    }


    Verscuh es ma so.


  • ocmd:heal(playerid,params[])
    {
    if(!GetPVarInt(playerid,"Medic")==1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!");
    else
    {
    new pID,string[128];
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]");
    if(GetDistanceBetweenPlayer(playerid,pID) <= 5)
    {
    SetPlayerHealth(pID,100);
    format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID));
    SendClientMessage(playerid,FDunkelgruen,string);
    return 1;
    }
    }
    }
    return 1;
    }

  • Jetzt habe ich das so gemacht wie Arendium das gemacht hat aber nun kann niemand mehr den Befehl /heal benutzen.

    Warningcodes:
    C:\Users\Marlon\Desktop\Games\GTA\Scripten\Script\gamemodes\LuftkampfServer.pwn(126) : warning 213: tag mismatchC:\Users\Marlon\Desktop\Games\GTA\Scripten\Script\gamemodes\LuftkampfServer.pwn(141) : warning 217: loose indentationPawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    2 Warnings.


    /heal Befehl:


    ocmd:heal(playerid,params[])
    {
    if(!GetPVarInt(playerid,"Medic")==1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!");
    else
    {
    new pID,string[128];
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]");
    if(GetDistanceBetweenPlayer(playerid,pID) <= 5)
    {
    SetPlayerHealth(pID,100);
    format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID));
    SendClientMessage(playerid,FDunkelgruen,string);
    return 1;
    }
    }
    }
    return 1;
    }


    und hier ist die Klassenauswahl von Medic und von Mechaniker:

    if(listitem==0) //Klasse Medic
    {
    GivePlayerWeapon(playerid,4,100);
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,274);
    SetPlayerArmour(playerid,50);
    SetPVarInt(playerid,"Fraktion",1);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Sanitäter) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit den Befehl /heal andere Spieler heilen.");
    }
    if(listitem==1) //Klasse Engineer
    {
    GivePlayerWeapon(playerid,24,300);
    GivePlayerWeapon(playerid,25,200);
    GivePlayerWeapon(playerid,29,1000);
    SetPlayerSkin(playerid,285);
    SetPlayerArmour(playerid,100);
    SetPVarInt(playerid,"Fraktion",2);
    SpielerSpeichern(playerid);
    SendClientMessage(playerid,FOrange,"Sie haben sich für die Klasse (Mechaniker) entschieden.");
    SendClientMessage(playerid,FOrange,"Sie können mit dem Befehl /repair andere Fahrzeuge reparieren.");
    }Ich bitte immernoch um hilfe. Ich bin schon am verzweifeln

  • Loose Indendation ist wenn du die Abstände nicht richtig einhältst

    ocmd:heal(playerid,params[])
    {
    if(GetPVarInt(playerid,"Medic") !=1) return SendClientMessage(playerid,FDunkelrot,"Du bist kein Sanitäter!");
    else
    {
    new pID,string[128];
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,FHellblau,"Benutzung: /heal [playerid]");
    if(GetDistanceBetweenPlayer(playerid,pID) <= 5)
    {
    SetPlayerHealth(pID,100);
    format(string,sizeof(string),"Du hast %s Geheilt!!",SpielerName(pID));
    SendClientMessage(playerid,FDunkelgruen,string);
    return 1;
    }
    }
    }
    return 1;
    }