Beiträge von Templer

    Sry das ; vergessen ^^


    stock FS_AntiGiveMoney(playerid, moneys)
    return CallRemoteFunction("AntiGiveMoney", "dd", playerid, moneys);
    #define GivePlayerMoney FS_AntiGiveMoney

    Ok Sry, ich bin noch nicht so gut in Präprozessoren ^^ Dann nütze es so:


    Ersetz die Zeile mit:


    stock FS_AntiGiveMoney(playerid, moneys)
    return CallRemoteFunction("AntiGiveMoney", "dd", playerid, moneys)
    #define GivePlayerMoney FS_AntiGiveMoney

    Machs also einfach so:

    new gBusFahrer[MAX_VEHICLES]; //Siehe HIER
    new gBusFare[MAX_PLAYERS]; //Siehe HIER


    public OnGameModeInit()
    {
    for(new vehicles = 0; vehicles < MAX_VEHICLES; vehicles++)
    {
    gBusFahrer[vehicles] = -1; //Siehe HIER
    }
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    gBusFare[playerid] = 0; //Siehe HIER
    return 1;
    }


    dcmd_fare(playerid,params[])
    {
    new name[MAX_PLAYER_NAME], s[128];
    new vehicleid = GetPlayerVehicleID(playerid);
    new preis = strval(strget(params, 0));
    GetPlayerName(playerid,name,sizeof(name));
    format(s,sizeof(s),"acc/%s.ini",name);
    new nj = dini_Int(s, "Nebenjob");
    if(!strlen(params)) return SendClientMessage(playerid,Dunkelgrün,"/fare [Preis]");
    if(preis < 1 || preis > 15) return SendClientMessage(playerid,Rot,"Der Fahrpreis muss zwischen 1$ und 15$ sein!");
    if(nj == 1)
    {
    if(IsBusCar(vehicleid))
    {
    format(s, sizeof(s), "Busfahrer %s ist im dienst Preis: %d$", name, preis);
    SendClientMessageToAll(Hellblau, s);
    gBusFare[playerid] = preis; //Siehe HIER
    gBusFahrer[GetPlayerVehicleID(playerid)] = playerid; //Siehe HIER
    }
    else
    {
    SendClientMessage(playerid, Rot, "Du bist in keinem Bus!");
    }
    }
    else SendClientMessage(playerid, Rot, "Du bist kein Busfahrer!");
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_PASSENGER && gBusFare[gBusFahrer[GetPlayerVehicleID(playerid)]] != 0 && IsBusCar(GetPlayerVehicleID(playerid)))
    {
    GivePlayerMoney(playerid, -gBusFare[gBusFahrer[GetPlayerVehicleID(playerid)]]);
    GivePlayerMoney(gBusFahrer[GetPlayerVehicleID(playerid)], gBusFare[gBusFahrer[GetPlayerVehicleID(playerid)]]);
    new string[128], busname[MAX_PLAYER_NAME];
    GetPlayerName(gBusFahrer[GetPlayerVehicleID(playerid)], busname, sizeof(busname));
    format(string, sizeof(string), "Du hast %s für den Busticket %d$ bezahlt!", busname, gBusFare[gBusFahrer[GetPlayerVehicleID(playerid)]]);
    SendClientMessage(playerid, 0xFFFFFF00, string);
    }
    if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT && gBusFare[playerid] != 0)
    {
    gBusFare[playerid] = 0;
    gBusFahrer[GetPlayerVehicleID(playerid)] = -1;
    }
    return 1;
    }

    Ai, diese billigen TextDraw Editoren gehören auf den Scheiterhaufen ^^.


    Rechne logisch ^^.


    Die Mitte von 600x460 ist ja, 300x230 und am besten noch TextDrawAlignment mittig stellen und dann passt alles, den Rest brauchst du nicht ^^. Außer du es verschönern willst.


    Kurzgefasst: Erstell ein Textdraw mit deinem Stil, ersetz Koordinate und Ausrichtung mit meiner Empfehlung und fertig.


    p.S.: Nebenbei gemerkt, die Koordinaten weichen von der Schriftgröße! Also bitte beachten!

    Alles Klar Chefe, dann machnma bissl mehr Arbeit und dann funzt das wie Sau ^^


    Folgendes irgendwo in dein GameMode einfügen:


    forward AntiGiveMoney(playerid, moneys);
    public AntiGiveMoney(playerid, moneys)
    {
    PlayerMoney[playerid] = PlayerMoney[playerid]+(moneys);
    return 1;
    }
    //Die Klammer ist wichtig, denn wenn der Betrag - ist, wird er natürlich auch abgezogen
    //Mathe Info: ^^
    // Wenn:
    // +(-) = -
    // -(+) = -
    // -(-) = +
    // +(+) = +


    In dein Filterscript oben (unter den Includes) fügst du dann folgendes ein:

    #define GivePlayerMoney(%0, %1) CallRemoteFunction("AntiGiveMoney", "dd", %0, %1)


    Fertig, das wars ^^ Viel Spaß beim testen.

    Ok, aber ich kann mich noch bissl errinnern als ich son ADAC Typ war auf nem Server, dass auch wenn ich ihn angehängt habe er bei mir nicht oben war und komischerweise nach ein paar Meter auf meinem Fahrzeug war. Bedeutet betätige den Befehl und fahr bissl herum, vl hängt er sich an ^^. Nebenbei gemerkt schau ob der Hänger hinten nach oben schaut ^^. Vom Scripting her ist alles in Ordnung.

    Wie man am besten das Geld abrechned? Am besten wenn der Spieler einsteigt und als Passagier drinnen ist es abziehen und natürlich Abfragen vorher ob Busfahrer im Dienst ist. Was du benötigst von Samp her sind folgende Funktionen

    Wenn ich dich falsch verstanden habe bitte genauer erläutern ^^

    Scripting Grundlagen mein Herr.. Wozu haben wir den das format ?


    new zwischenspeicher[32];
    format(zwischenspeicher, sizeof(zwischenspeicher), "%d $", Bizplaces[0][kosten2]);
    AddMenuItem(Boerse2, 1, zwischenspeicher);

    Ich weiß jetzt ned ob du mich mit dem Kann mir vielleicht noch einer helfen? verscheuchen willst, aber wollt halt sagen das sowas als Tastendruck unter OnPlayerKeyStateChange gehören soll, da es manchmal nicht funktioniert und öfter hintereinander versuchen muss. Ansonsten ist deine Funktion GetNearestCar Falsch beim berechnen.

    Nun auch ned die besten Varianten, aber aller Anfang ist scheiße ^^


    //Dieses stock sehr notwendig für beide Versionen
    stock split(const strsrc[], strdest[][], delimiter)
    {
    new i, li,aNum,len;
    while(i <= strlen(strsrc))
    {
    if(strsrc[i]==delimiter || i==strlen(strsrc))
    {
    len = strmid(strdest[aNum], strsrc, li, i, 128);
    strdest[aNum][len] = 0;
    li = i+1;
    aNum++;
    }
    i++;
    }
    return 1;
    }


    //Diese Version geht nur für ein Fahrzeug (dcmd Befehl muss nicht verändert werden)
    public OnGameModeInit()
    {
    new File:auto=fopen("carparks.ini",io_readwrite), str[128], cache[4][64];
    if(auto)
    {
    fread(auto, str);
    fclose(auto);
    split(str, cache, ',');
    //Wie kannst du nur vergessen die Modelid nicht zu speichern, also echt xD
    //Nehme mal den Sultan
    CreateVehicle(560, floatstr(cache[0]), floatstr(cache[1]), floatstr(cache[2]), floatstr(cache[3]), 1, 1, -1); //Von den Farben nicht zu reden..
    }
    return 1;
    }


    //Dynamischere Version (Natürlich mit ModelID (ohne CarFarben FIX)
    //jedoch auch nicht die beste Version ^^
    //Mehrere Fahrzeuge verwaltwar, bzw abspeicherbar


    dcmd_carpark(playerid,params[])
    {
    #pragma unused params
    if(!IsPlayerInAnyVehicle(playerid))
    {
    return SendClientMessage(playerid,COLOR_ROT,"Du musst in einem Auto sein um /carpark zu machen");
    }
    new str[128],File:auto=fopen("carparks.ini",io_append),Float:Spawn[4];
    GetVehiclePos(playerid,Spawn[0], Spawn[1], Spawn[2]); GetVehicleZAngle(playerid, Spawn[4]);
    format(str,128,"%d,%f,%f,%f,%f;\n\r",GetVehicleModel(GetPlayerVehicleID(playerid)),Spawn[0],Spawn[1],Spawn[2],Spawn[3]);
    fwrite(hFile,str);
    fclose(hFile);
    return 1;
    }


    public OnGameModeInit()
    {
    #define MAX_FAHRZEUGE_IN_DATEI (500) //Anzahl an maximalen Fahrzeugen in einer Datei
    new File:auto=fopen("carparks.ini",io_readwrite), str[512], cache[MAX_FAHRZEUGE_IN_DATEI][128], cache2[5][64], fahrzeug = 0;
    if(auto)
    {
    fread(auto, str);
    fclose(auto);
    for(; fahrzeug < (MAX_FAHRZEUGE_IN_DATEI-1); fahrzeug++)
    {
    split(str, cache[fahrzeug], ';');
    split(cache[fahrzeug], cache2, ',');
    CreateVehicle(strval(cache2[0]), floatstr(cache2[1]), floatstr(cache2[2]), floatstr(cache2[3]), floatstr(cache2[4]), 1, 1, -1); //Von den Farben nicht zu reden..
    }
    }
    return 1;
    }


    Sollte also funktionieren ^^

    Also dir fehlt die Funktion DetachTrailerFromVehicle, also:


    if(strcmp(cmd, "/attach", true) == 0)
    {
    if(Meschaniker[playerid] == 1)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
    {
    DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
    AttachTrailerToVehicle(GetNearestCar(playerid, 7), GetPlayerVehicleID(playerid));
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du musst in einen Schlepper!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du musst zuerst in ein Auto!");
    }
    return 1;
    }
    }


    p.S.: Manche Fahrzeuge können nicht abgeschleppt werden wie Anhänger oder Motorräder

    Najo es ist ja eigentlich kein Fehler ^^ Probiers mal halt aus, ansonsten nimm den Boolean Tag weg.. Aber versuchs, manchmal gibt PWN auch fehlerhafte Warnings ab ^^

    Nix verguckt, siehe da ^^


    if(IsNoBs(vehicleid))

    auch wenn ich ein u hinzugefügt habe, meinst eh das gleiche ^^


    Aber ja also der Text kommt halt nur, wenn der Spieler die Nebenjob ID 1 hat is eh klar oder? Also wie vorhin erwähnt ist der Code in Ordnung, auch wenn mir rätselhaft ist, dass jeder auf dini meint und die Variablen sofort abspeichern muss ^^.