Beiträge von FACE

    Nein ;)
    Du kannst die Funktion umdefinieren, bzw. redefinieren, aber das ist vollkommen sinnfrei =)
    Lass die lieber so, damit kann dann auch noch jeder umgehen, wenn du mal probleme haben solltest.

    Naja, SetPlayerPos setzt sich aus 4 Komponenten zusammen: playerid, X,Y,Z.
    playerid haben wir ja gegeben, also lesen wir X,Y,Z aus.
    Du hattest gleich 5 Sachen mit reingepackt, das kann ja garnicht funktionieren ;)

    SetPlayerPos(playerid,DM1Spawns[DM1Spawn][0],DM1Spawns[DM1Spawn][1],DM1Spawns[DM1Spawn][2],DM1Spawns[DM1Spawn][3],DM1Spawns[DM1Spawn][4]);
    Woher kommt denn auch die vierte Koordinate ?? :P
    Wenn du die DrehRichtung des Spieler mit einfließen lassen möchtest (Angle/Rotation), dann muss du die erstens oben im Array mit angeben und zweitens mit einer zweiten Funktion den Spieler drehen:


    new Float:DM1Spawns[5][4] =
    {
    {-2126.9319,342.7235,67.1692,0.0},//Spawn1
    {-2124.2603,374.1755,67.1692,0.0},//Spawn2
    {-2082.9463,367.9211,67.1692,0.0},//Spawn3
    {-2028.3717,341.5887,67.1692,0.0},//Spawn4
    {-2027.4733,373.9023,67.1692,0.0}//spawn5
    //Setze für 0.0 die Rotations-Koordinate ein.
    };



    if(DM1[playerid]==1)
    {
    new DM1Spawn;
    DM1Spawn = random(sizeof(DM1Spawns));
    SetPlayerPos(playerid,DM1Spawns[DM1Spawn][0],DM1Spawns[DM1Spawn][1],DM1Spawns[DM1Spawn][2]);
    SetPlayerFacingAngle(playerid, DM1Spawns[DM1Spawn][3]);
    }


    Nebenbei hast du versucht sogar ganze 5 Koordinaten reinzupacken. ;) (0,1,2 ,3,4)

    Bitte?
    Frag mal die Hunderten Leute, denen er das Leben gerettet hat, die sehen das wohl ein wenig anders.
    (Anbei sollte bemerkt sein, dass das kein gehaltloser Actionfilm ist.)

    Was hälst du denn von Oskar Schindler,dem damaligen Chef der "Deutschen Emaillefabrik".
    Gibts auch einen guten Film zu: Schindlers Liste.
    Selbst NS-Parteimitglied, rettete Schindler vielen Juden das leben, was sein eigenen kompletten Ruin bedeutete.

    machs doch etwas kompakter bitte ;)
    Außerdem ist der Chat glaube 100 Zeilen lang ^^


    for(new i=0; i<100; i++){SendClientMessage(playerid, 0xFFFFFF,"");}


    für alle spieler sähe es dann so aus:


    for(new i=0; i<100; i++){SendClientMessageForAll(0xFFFFFF,"");}

    Guter Einwand, lässt sich aber in der GetPlayerMoney -Abfrage auch anders beheben.
    if(GetPlayerMoney(playerid)<betrag){return SendClientMessage(playerid, Weiß, "Soviel Geld hast du nicht!");}

    new gTAXI;

    public OnGameModeInit()
    {
    gTAXI = AddStaticVehicle(420, -2482.4937, 2242.3936, 4.6225, 179.3656, 6, 1); // Taxi
    return 1;
    }

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if (newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
    {
    if (GetPlayerVehicleID(playerid) == gTAXI)
    {
    AddVehicleComponent(gTAXI, 1010); // Nitro
    SendClientMessage(playerid, 0xFFFFFFAA, "Nitro added to the Taxi.");
    }
    }
    return 1;
    }


    Entnommen aus dem Sa-mp Wiki.
    http://wiki.sa-mp.com/wiki/AddVehicleComponent

    Klar, du brauchst dann halt den Integer "Points" nichtmehr, weil du einfach ein Random setzen würdest.


    Sähe dann insgesamt so aus:


    public OnPlayerEnterCheckpoint(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    DisablePlayerCheckpoint(playerid);
    TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    return 1;



    public Wiederfahren(playerid)
    {
    TogglePlayerControllable(playerid,1);//Spieler entfreezen
    new rand=random(sizeof(CheckPointsMüll));
    SetPlayerCheckpoint(playerid,CheckPointsMüll[rand][0],CheckPointsMüll[rand][1],CheckPointsMüll[rand][2],3);
    return 1;
    }

    Mit einer simplen if-Abfrage, ob das Spieler Geld größer als null ist:

    ocmd:pay(playerid,params[])
    {
    if(GetPlayerMoney(playerid)>=0){return SendClientMessage(playerid, Weiß, "Du hast kein Geld was du versenden könntest!");}
    new pID,betrag;
    new Float:X, Float:Y, Float:Z;
    if(sscanf(params,"ui",pID,betrag)) return SendClientMessage(playerid,Weiß,"Benutze /pay ID Betrag");
    GetPlayerPos(playerid,X,Y,Z);
    if(IsPlayerInRangeOfPoint(pID,5,X , Y, Z))
    {
    GivePlayerMoney(playerid,-betrag);
    GivePlayerMoney(pID, betrag);
    }
    return 1;
    }

    array.
    Ich helf dir mal ein wenig:


    new Points[MAX_PLAYERS];


    Hier die Definition des Arrays:
    new CheckPointsMüll[/*Hier die Anzahl der Checkpoints rein, der erste liegt auf Platz 0*/][3] = {
    {192.5336,-1774.9198,4.3294},
    {208.3698,-1774.6583,4.3892} // Beim Letzten kommt "KEIN" Komma hin!


    };


    Dann folgt die Abfrage:

    public OnPlayerEnterCheckpoint(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new i=0; i<11; i++)
    if(vehicleid == trash[i])
    SendClientMessage(playerid,Orange,"Müll abgeholt. Gehalt pro Checkpoint '25$'");
    DisablePlayerCheckpoint(playerid);
    if(Points[playerid]<sizeof(CheckPointsMüll)){Points[playerid]++;}else{Points[playerid]=0;}//Wir setzen die Variable neu, prüfen nebenbei, ob er schon alle CPs durch hat.
    TogglePlayerControllable(playerid, 0);//Timer setzen. In der Timer Funktion wird dann der neue CP gesetzt.
    SendClientMessage(playerid,Weiß,"Müll wird abgeholt...");
    GivePlayerMoney(playerid,25);
    SetTimerEx("Wiederfahren", 1000*3, 0, "i", playerid);
    return 1;
    }


    Jetzt nurnoch die Timer Funktion:
    (vorher bitte forwarden!)



    public Wiederfahren(playerid)
    {
    TogglePlayerControllable(playerid,1);//Spieler entfreezen
    SetPlayerCheckpoint(playerid,CheckPointsMüll[Points[playerid]][0],CheckPointsMüll[Points[playerid]][1],CheckPointsMüll[Points[playerid]][2],3);
    return 1;
    }


    Sollte in etwa passen ;)

    Bau einfach ein Array mit den Checkpoint Koordinaten und erhöhe jedesmal den Wert von "Points[playerid]" um +1 und lese die nächsten Daten aus dem Array aus ;)
    Damit brauchst du auch den Text und das übrige Gerammel nur ein einziges Mal =)

    public OnPlayerRequestClass(playerid,classid)
    {
    if(classid == 3 && !IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid,COLOR_GREEN,"This skin is only for admins!");
    return 0;
    }
    return 1;
    }


    http://wiki.sa-mp.com/wiki/OnPlayerRequestClass


    Returning 0 in this callback will prevent the player from spawning. The player can be forced to spawn when SpawnPlayer is used however the player will re-enter class selection the next time they die.


    Setze halt einfach für classid die zu sperrende Klasse ein ;)
    Und ändere natürlich die Parameter. Hier geht es momentan um einen Admin-Skin (wie auch ersichtlich).