Beiträge von Dadaen

    Du wirst gekickt bevor die Meldung ausgegeben wird. Probiere es mal so:


    public weapons(playerid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new waffen = GetPlayerWeapon(i);
    if(waffen == 38) //
    {
    new string[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "[ANTICHEAT] %s wurde wegen WaffenHack gekickt!", name);
    SendClientMessageToAll(COLOR_RED, string);
    Kick(i);
    }
    }
    return 1;
    }


    Das trifft es genau ^^
    Wenn man mal den Code liest sieht man, dass wenn man sich ein Auto kauft einfach Geld abezogen wird und ein Auto gespawnt wird.
    Wo wird festgelegt, dass er ein Auto hat? Wo steht, dass das auto an seinem respawn punkt spawnt?


    Also viel ist das nicht

    Schau's dir doch mal an:


    Wie Die sicherlich auffällt, prüfe ich als erstes, ob der Spieler den Kaufpreis von 65.000 $ besitzt. Andernfalls wird nämlich eine Meldung ausgeworfen, dass dieser nicht genügend Geld hat!


    Hat der Spieler jedoch den Kaufpreis in bar verfügbar, wird ein Auto mit der ID 541 (Bullet) an den von mir festgelegten Koordinaten gespawnt (-1706.5662,1208.4026,25.1070). Danach wird dem Spieler der Kaufpreis abgezogen und eine Meldung ausgegeben!


    Ich spreche hier keinesfalls davon, dass dem User das Auto überschrieben wird oder er gar einen /savecarspawn erstellen kann, das habe ich aber auch nie angesprochen! Es handelt sich hierbei lediglich um ein Car-Spawn (Buy, whatever) System.

    Wie siehts mit ein paar Screens aus?


    Gibts es das noch für die ganz neuen als FS?

    Screens kann ich jetzt gleich gerne uppen.
    Ich habe es bisher nur direkt in meinem Gamemode integriert, mit Filterscripts habe ich noch nichts gemacht. Kann es aber gerne mal versuchen ;)

    Ja, vollkommen richtig, ich bin neu hier im Board. Und nicht nur das, ich bin auch noch ein totaler Anfänger was das Scripten betrifft. Dennoch möchte ich Euch gerne einmal zeigen, was ich heute Nachmittag gemacht habe. Ich freue mich über jedes Feedback und jeden konstruktiven Gedanken, bewertet das Ganze bitte.


    Zum Thema selber: Ich versuche mich gerade an einem eigenen RL-Server. Neben diversen anderen Comannd's habe ich heute Nachmittag ein simples Script für ein Autohaus geschrieben. Es ist nicht wirklich besonders, man kann ein Auto über ein Menü spawnen, das aufgerufen wird wenn man ein Pickup betritt. Das Auto selbst wird dann an einem im Script festgelegten Ort gespawnt. Sollte man den Kaufpreis nicht in Bar besitzen, reagiert das Script mit einer Meldung - das Auto wird folglich auch nicht gespawnt.


    Das hier müsst Ihr unter den #defines platzieren. Es erzeugt den Platz für Pickup und Menü.
    new OttoPickup;
    new Menu:OttoMenu;


    Jetzt erstellen wir aber das eigentliche Pickup sowie das Menü. Ich habe verschiedene Modelle zur Auswahl eingefügt. Ich gehe hier einmal nicht weiter auf die einzelnen Parameter ein, die sollte man eigentlich kennen.
    OttoPickup = CreatePickup(1274, 1, -1658.2512,1207.5952,7.2500);
    OttoMenu = CreateMenu("Otto's Sportwagen", 2, 200.0, 100.0, 150.0, 150.0);
    AddMenuItem(OttoMenu, 0, "Bullet");
    AddMenuItem(OttoMenu, 0, "Banshee");
    AddMenuItem(OttoMenu, 0, "Infernus");
    AddMenuItem(OttoMenu, 0, "Cheetah");
    AddMenuItem(OttoMenu, 0, "Turismo");
    AddMenuItem(OttoMenu, 0, "Super GT");


    AddMenuItem(OttoMenu, 1, "65.000 $");
    AddMenuItem(OttoMenu, 1, "80.000 $");
    AddMenuItem(OttoMenu, 1, "115.000 $");
    AddMenuItem(OttoMenu, 1, "135.000 $");
    AddMenuItem(OttoMenu, 1, "140.000 $");
    AddMenuItem(OttoMenu, 1, "150.000 $");
    return 1;
    }


    Da ich das Menü nicht über ein Command aufrufe, sondern durch ein Pickup erscheinen lasse, setze ich Folgendes in den Callback OnPlayerPickUpPickup ein, um das Menü aufrufen zu können.
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    ShowMenuForPlayer(OttoMenu, playerid);


    }


    Kommen wir zum eigentlichen Teil des Ganzen. Dem Auswählen der Autos und den daraus resultierenden Aktionen, Rückmeldungen, etc. Dieser Teil des Scriptes wird im Callback OnPlayerSelectedMenuRow eingefügt.
    public OnPlayerSelectedMenuRow(playerid, row)
    {
    new Menu:CurrentMenu = GetPlayerMenu(playerid);

    if(CurrentMenu == OttoMenu)
    {
    switch(row)
    {
    case 0: //Bullet
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 65000)
    {
    CreateVehicle(541,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -65000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    case 1: //Banshee
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 80000)
    {
    CreateVehicle(429,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -80000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    case 2: //Infernur
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 115000)
    {
    CreateVehicle(411,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -115000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    case 3: //Cheetah
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 135000)
    {
    CreateVehicle(415,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -135000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    case 4: //Turismo
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 140000)
    {
    CreateVehicle(451,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -140000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    case 5: //Super GT
    if (IsPlayerConnected(playerid))
    {
    if (GetPlayerMoney(playerid) >= 150000)
    {
    CreateVehicle(506,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
    GivePlayerMoney(playerid, -150000);
    SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
    }
    else
    {
    SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
    }
    }
    }
    }
    }
    Was ich hier gemacht habe lässt sich relativ leicht erklären: Zuerst lasse ich mir vom Server die aktuelle ID des Spielers zurückliefern. Daraufhin prüfe ich, ob der Spieler genug Geld besitzt, um sich den entsprechenden Wagen kaufen zu können. Hier kann man später im Script auch den Kaufpreis festlegen. Nun gibt es zwei Optionen:

    • Der Spieler hat genug Geld. Sein Wagen wird nun am festgelegten Spawnpoint erstellt. Daraufhin verändert das Script sein Geld um den Kaufpreis (natürlich mit - davor). Anschließend lasse ich noch eine einfache Textmeldung ausgeben, dass das Auto erstellt wurde und er es abholen kann.
    • Der Spieler hat nicht genug Geld. Es wird eine Meldung ausgegeben, dass er nicht genug Geld besitzt. Es wird kein Wagen gespawnt!