Beiträge von T4125Gamer

    Zitat

    mach noch das man ein zeit lang fahren darf und dann muss man eine pause einlegen


    Der Beschreibung nach zu Urteilen handelt es sich um mein Trucker Script. Und dort ist auch verbaut das man eine Pause einlegen muss. Der schwarze Balken rechts oben ist die Müdigkeitsanzeige.

    Hinter einer if Abfrage macht man kein Semikolon


    if(IsPlayerInArea(playerid, 1811.1436,1980.-1742,1700.1980,-1821.8491) || IsPlayerInArea(playerid, 1691.416, -1677.914, 1759.867, -1583.168) || IsPlayerInArea(playerid, 1159.018, -959.4252, 1292.118, -864.6794) || IsPlayerInArea(playerid, 1181.835, -1417.363, 1269.301, -1283.14) || IsPlayerInArea(playerid, 1514.9786787853213, -1723.902811043877, 1580.9695687206226, -1592.8668024408687))

    Zitat

    error 017: undefined symbol "PlayerToPoint"


    stock PlayerToPoint(Float:radi, playerid, Float, Float:y, Float:z)
    {
    new Floatldposx, Floatldposy, Floatldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    return 0;
    }

    Zitat

    error 017: undefined symbol "name"


    new name[MAX_PLAYER_NAME];

    Zitat

    [21:30:14] Error: Function not registered: 'SSCANF_Init'
    [21:30:14] Error: Function not registered: 'SSCANF_Join'
    [21:30:14] Error: Function not registered: 'SSCANF_Leave'


    Das bedeutet das du das neueste SScanf Include/Plugin benötigst

    Zitat

    1. Befehl Aktivieren.
    Also wenn man /minigame eingibt, sich /exit aktiviert.


    Dazu erstellst du das:
    new InArena[MAX_PLAYERS];
    Das lässt du dann auf 1 setzten wenn der Befehl eingegeben wurde, beispiel:
    if(strcmp(cmdtext,"/minigame",true) == 0)
    {
    //Deine Sachen
    InArena[playerid] = 1;
    return 1;
    }
    Du kannst noch mit einer if Abfrage erfragen ob sich der Spieler schon in einer Arena befindet.
    if(InArena[playerid] == 1)return SendClientMessage(playerid,FARBE,"Du bist schon in einer Arena");
    Beim /exit befehl kannst du dann auch die Abfrage benutzen, jedoch das return weg machen und zwei Klammern drunter setzten
    if(InArena[playerid] == 1)
    {


    } dort musst du dann InArena auf 0 setzten.
    InArena[playerid] = 0;
    Und das mit dem Spawnen so wie es SryP4awn geschrieben hat

    GTA Eastcoast
    Ich benutze ocmd dafür, da ich das gut finde.
    Dafür benötigst du noch sscanf, beides im Anhang.


    Als erstes mache ich die Grundstrucktur des Commands der so aussieht:
    ocmd:givegun(playerid,params[])
    {
    return 1;
    }
    immer return 1; benutze, da sonst Server Unknow Command kommt.
    wenn das erledigt ist, dann folgt nun das:


    new pID /*Eine definition für den Spieler der die Waffe bekommen soll*/,waffe /*das steht für die Waffen ID die eingegeben wird*/,munition /*sollte sich schon klären*/;
    Nun kannst du wenn du das so möchtest auch noch einen Text mit dem Namen, der Waffe und der Munition dem Spieler schicken, dafür machst du folgendes:
    new textA[100], textB[100]; //Wird später gezeigt wofür man das anwendet
    der Command sieht dann jetzt schon so aus:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    return 1;
    }
    Das ist die Variante wo du keine Message an die zwei Spieler schicken lässt.
    Wenn das erledigt ist geht es nun an den eigentlichen Command, des sieht wie folgt aus
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    udd ist dafür da. u steht für den Spieler, d steht für einen Zahlenwert.
    Jetzt ist schon mal gegeben, wenn der Spieler den Befehl nicht richtig eingibt, dass die Meldung kommt wie
    der Befehl richtig genutzt wird. Ist das erledigt geht es nun an die Verteilung der Waffe + Munition.
    Das machst du wie folgt:
    GivePlayerWeapon(pID <-- Dem Spieler der als ID eingetipt wurde,waffe <--- Die Waffen ID die eingetipt wurde,munition <--- Die Munition die mitgegeben wird);
    Jetzt wird bei der Befehleingabe dem Spieler der als Ziel ausgewählt wurde die Waffen ID + die Munition gegeben.
    Aber es gibt ja nicht unendlich viele Waffen IDS. Du kannst mit einer Simplen if Abfrage einstellen
    bis zu welcher Waffen ID es gehen soll, ich nehmen jetzt einfach mal alle.
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    Nun ist gegeben, dass der Spieler nicht eine nicht vorhandene Waffen ID nimmt.
    Der Command sieht dann schonmal so aus:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    GivePlayerWeapon(pID,waffe,munition);
    return 1;
    }


    Jetzt noch wenn du einen Text an die Spieler senden willst.
    Dazu greifen wir das new textA[100], textB[100]; auf
    Jetzt wird folgendes gemacht:
    format(textA,sizeof(textA),"Spieler %s hat dir die Waffen ID %d und %d munition gegeben")
    Jetzt fragt sich natürlich wie wir jetzt den Spielernamen die WaffenID und die Munitionsangabe dort reinbekommen.
    Das geht so. %s steht für einen Text den man dort einfügen kann. %d für eine Zahl die angegeben werden kann.
    Zuerst den Namen, den Namen des Spielers findet man mit GetPlayerName heraus, aber dafür muss erst eine
    neue Definition gemacht werden, und zwar diese:
    new PName[MAX_PLAYER_NAME];
    Jetzt können wir durch dieses new den Namen mit GetPlayerName herausfinden, und das geht so:
    GetPlayerName(playerid,PName,sizeof(PName));
    Nun können wir mit dem Wort PName den Namen in der Message anzeigen lassen, dazu verändern wir das Format wie folgt:
    format(textA,sizeof(textA),"Spieler %s hat dir die Waffen ID %d und %d munition gegeben",PName);
    Nun wird der Name, wenn die Message gesendet wird angezeigt. Das selbe geht auch mit der Waffe und der Munition so.
    Da das schon definiert ist, kann man das gleich einfügen.
    format(textA,sizeof(textA),"Spieler %s hat dir die Waffen ID %d und %d munition gegeben",PName,waffe,munition);
    Nun kann man mit einer SendClientMessage dem gewünschten Spieler diese Information zeigen lassen.
    SendClientMessage(pID,FARBE,textA); //Texta deswegen, da das vorhin oben mit format gemacht wurde
    Fehlt nurnoch die Message für den vergeber, dazu muss ein neues new und GetPlayerName gemacht werden.
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(pID,pName,sizeof(pName));
    Nun muss ein zweites format erstellt werden.
    format(textB,sizeof(textB),"Du hast %s die Waffen ID %d mit %d munition gegeben",pName,waffe,munition);
    Der Command sieht dann so aus:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    GivePlayerWeapon(pID,waffe,munition);
    format(textB,sizeof(textB),"Du hast %s die Waffen ID %d mit %d munition gegeben",pName,waffe,munition);
    format(textA,sizeof(textA),"Spieler %s hat dir die Waffen ID %d und %d munition gegeben",PName);
    SendClientMessage(pID,FARBE,textA);
    SendClientMessage(playerid,FARBE,textB);
    return 1;
    }
    So sieht ein Command im Grunde aus, doch da du ja einem Spieler die Waffe geben willst, die auf deiner Hand liegt, muss man
    ein paar kleinigkeiten ändern.
    wieder der Grundbefehl mit den nötigen Checks:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    return 1;
    }
    Zuerst finden wir mal heraus ob der Spieler die nötige Munition dafür hat. Das machst du wie folgt.
    Eine Schleife und ein New wird hierbei benötigst:
    new weapons[13][2]; //13 = Slots 2 = 2 Angaben (Munition + Waffen ID)
    for (new i = 0; i < 13; i++)//(13 wegen: es gibt 12 slots)
    {
    GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
    }
    Nun wird mit hilfe der Schleife die Daten herausgelesen.
    Nun kannst du folgendes machen:
    if(weapons[i][1] > munition)
    {
    //hier geht es dann weiter
    }
    Hier wird erfragt ob der Spieler eine höhere Munitionsanzahl hat, als er angegeben hatt.
    Nun kann man noch Abfragen ob der Spieler überhaupt die Waffen ID besitzt. Das geht so:
    if(weapons[i][0] == waffe)
    {
    //hier geht es dann weiter.
    }
    Nun wird erfragt, ob der Spieler 1. die Waffe überhaupt hat, und 2. die nötige Munition dazu besitzt.
    Der Command sieht dann so aus:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    new weapons[13][2];
    for (new i = 0; i < 13; i++)
    {
    if(weapons[i][0] == waffe&& weapons[i][1] > munition)
    {


    }
    else
    {
    SendClientMessage(playerid,FARBE,"Sie besitzen entweder die Waffe nicht, oder sie haben nicht genug Munition");
    }
    }
    return 1;
    }
    Nun wird dem Spieler der ausgewählt wurde die Waffe überreicht, und dem Spieler der sie vergibt
    wird diese weggenommen. Wegnehmen geht so, dass man die Munitionsanzahl des Spielers auf 0 setzt.
    Jetzt wird folgendes gemacht:
    GivePlayerWeapon(pID,waffe,munition);
    GivePlayerWeapon(playerid,waffe,0);
    Den Spieler der ausgewählt wurde wird die Waffe übergeben, und dem anderem Spieler weggenommen.
    Dieser Befehl funktioniert jetzt auf jede Distanz, und ich denke das soll so nicht sein.
    Um das zu verhindern kann man nun eine IsPlayerInRangeOfPoint abfrage erstellen. Dazu werden aber
    Koordinanten benötigt, die man nicht hat. Deswegen benutzt man hierbei GetPlayerPos. Das wendet man so an:
    new Float:x, Float:y, Float:z; //Koordinaten sind Floats und werden deswegen so erstellt.
    GetPlayerPos(pID,x,y,z); //Hier werden die Koordinanten herausgefunden
    So nun ist man im Besitzt der Koordinaten. Jetzt wird die IsPlayerInRangeOfPoint Abfrage erstellt:
    if(IsPlayerInRangeOfPoint(playerid,2.0/*distanz anpassen*/,x,y,z))
    {


    }
    Nun wird erfragt ob der Spieler den man auswählt auch an der Position des anderen Spieler ist.
    Der Command sieht dann so aus:
    ocmd:givegun(playerid,params[])
    {
    new pID, waffe, munition;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(pID,x,y,z);
    if(sscanf(params,"udd",pID,waffe,munition))return SendClientMessage(playerid,FARBE,"Benutze: /givegun [playerid][WaffenID][Munition]");
    if(waffe > 46 || waffe < 1)return SendClientMessage(playerid,FARBE,"Error: Max Waffen ID = 46 Min Waffen ID = 1");
    if(IsPlayerInRangeOfPoint(playerid,2.0/*distanz anpassen*/,x,y,z))
    {
    new weapons[13][2];
    for (new i = 0; i < 13; i++)
    {
    if(weapons[i][0] == waffe && weapons[i][1] > munition)
    {
    GivePlayerWeapon(pID,waffe,munition);
    GivePlayerWeapon(playerid,waffe,0);
    }
    else
    {
    SendClientMessage(playerid,FARBE,"Sie besitzen entweder die Waffe nicht, oder sie haben nicht genug Munition");
    }
    }
    }
    else
    {
    SendClientMessage(playerid,FARBE,"Der Spieler ist nicht in Reichtweite
    }
    return 1;
    }
    Und so erstellst du einen /givegun Befehl.
    MfG: T4125Gamer

    if(dialogid==DIALOG_WAFFENMENU)
    {
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    return 1;
    }
    if(listitem == 0)
    {
    GivePlayerWeapon(playerid,24,250);
    GivePlayerMoney(playerid,-27500);
    }
    if(listitem == 1)
    {
    GivePlayerWeapon(playerid,25,100);
    GivePlayerMoney(playerid,-10250);
    SendClientMessage(playerid,ORANGE,"Du hast dir eine Desert Eagle für $10.250 gekauft!");
    }
    if(listitem == 2)
    {
    GivePlayerWeapon(playerid,29,250);
    GivePlayerMoney(playerid,-30250);
    SendClientMessage(playerid,ORANGE,"Du hast dir eine MP5 für $30.250 gekauft!");
    }
    if(listitem == 3)
    {
    GivePlayerWeapon(playerid,31,500);
    GivePlayerMoney(playerid,-31500);
    SendClientMessage(playerid,ORANGE,"Du hast dir eine M4 für $31.500 gekauft!");
    }
    if(listitem == 4)
    {
    GivePlayerWeapon(playerid,30,500);
    GivePlayerMoney(playerid,-31500);
    SendClientMessage(playerid,ORANGE,"Du hast dir eine M4 für $31.500 gekauft!");
    }
    if(listitem == 5)
    {
    ObMaske[playerid]= 1;
    GivePlayerMoney(playerid,-250000);
    SendClientMessage(playerid,ORANGE,"Du hast dir eine Maske für $250.000 gekauft!");
    }
    return 0;
    }

    Dazu benötigst du



    if(response == 0)
    {
    //Button 2 also der wo du nur "" hast
    return 1;
    }
    if(response == 1)
    {
    //Button 1 also der wo du Verlassen hast
    return 1;
    }

    Zitat

    error 001: expected token: ";", but found "if"


    Dein Fehler liegt hier: GetPlayerName(playerid,pName,sizeof pName);
    Das gehört so: GetPlayerName(playerid,pName,sizeof(pName));


    Zitat

    error 017: undefined symbol "TorP"
    error 017: undefined symbol "PTor"


    mach new Torp, PTor; und der Error ist weg


    Zitat von Werner

    expected token: ";"


    Eventuell ein Klammerfehler.


    Nein liegt am GetPlayerName wie oben beschrieben


    Zitat von Werner

    DIe undefined PTor errors musst du bei OnGameModeInit() definieren.


    Können ja, aber es ist ratsam es Global (über OnGameModeInit) zu definieren. Sonst kommen noch Errors beim Befehl.
    Die Tore müssen bei OnGameModeInit erstellt werden (CreateObject).