Beiträge von Jeffry

    Dann kannst du es so machen:
    CMD:garbage(playerid,params[])
    {
    if(IsPlayerConnected(playerid))
    {
    if(istdabei[playerid] == 0)
    {
    if(Spieler[playerid][pJob] == 1)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    for(new i = 0;i<sizeof(Muelllwagen);i++)
    {
    if(veh == Muelllwagen[i])
    {
    new rand = random(sizeof(bmx1));
    new string[145], pID;
    if(sscanf(params,"d",pID))return SendClientMessage(playerid,COLOR_GREY,"[Benutze] /garbage [SpielerID]");
    if(wurdeangefragt[playerid] == 0)
    {
    inviteID[playerid] = pID;
    format(string,sizeof(string),"Du hast %s (ID: %d) erfolgreich eine Anfrage gesendet, bitte warte bis er sie annehmt!",GetName(pID), inviteID[playerid]);
    SendClientMessage(playerid,COLOR_BLUE,string);
    format(string,sizeof(string),"%s hat dich angefragt, benutze /agarbage um die Anfrage anzunehmen",GetName(playerid));
    SendClientMessage(inviteID[playerid],COLOR_BLUE,string);
    wurdeangefragt[pID] = 1;
    wurdeangefragtvon[pID] = playerid;
    pMuellAuto[playerid] = veh;
    new Float:vX,Float:vY,Float:vZ;
    GetPosVorVeh(pMuellAuto[playerid], -10.0, vX, vY, vZ);
    maxkubik[veh] = 15.0;
    kubik[veh] = 0.0;
    istdabei[playerid] = 1;
    checkpointgarbage[playerid] = playerid;
    bmxo[playerid] = SetPlayerCheckpoint(checkpointgarbage[playerid],bmx1[rand][0],bmx1[rand][1],bmx1[rand][2],3);
    return 1;
    }
    }
    }
    SendClientMessage(playerid, COLOR_RED, "Du bist in keinem Müllwagen.");
    return 1;
    }
    }
    else return SendClientMessage(playerid, COLOR_RED, "Du bist kein Müllmann.");
    }
    }
    return 1;
    }


    CMD:agarbage(playerid,params[])
    {
    if(wurdeangefragt[playerid] == 0) return SendClientMessage(playerid, COLOR_RED, "Du wurdest nicht angefragt.");
    if(!IsPlayerConnected(wurdeangefragtvon[playerid]))
    {
    wurdeangefragt[playerid] = 0;
    return SendClientMessage(playerid, COLOR_RED, "Der Anfragende ist nicht mehr online.");
    }
    SendClientMessage(wurdeangefragtvon[playerid], COLOR_GREEN, "Die Anfrage wurde angenommen!");
    new string[145];
    format(string, sizeof(string), "%s (ID: %d) hat deine Anfrage angenommen.", GetName(playerid), playerid);
    SendClientMessage(inviteID[playerid],COLOR_BLUE,string);
    return 1;
    }

    /*CMD:accept garbage(playerid,params[])

    Die Lücke hier zwischen accept und garbage geht nicht.



    wurdeangefragt[pId] = 1; // Dein Code

    pId ist im Befehl nirgends definiert, das dürfte dir also einen Fehler ausgeben.



    Wie sieht denn der Befehl für das Absenden der Frage aus?



    PS:
    Poste deinen PWN Codes bitte mal korrekt eingerückt.
    Entweder über den Quelltext Editor (erster Button oben vor den beiden Pfeilen) oder über den [code=c][/code] Tag.

    Hi, dich gibt's ja auch noch! :good:
    Lange nicht gesehen.


    Das sieht soweit alles gut aus auf den ersten Blick.
    Irgendwas mag er hier aber nicht:
    [17:34:57] [DEBUG] CResultSet::Create(connection=0x91385c8, query_str='SELECT * FROM `accounts` WHERE `Name` = '[AMB]Manyula' LIMIT 1')


    Existiert denn der Datensatz in der Tabelle accounts? Kannst du da eventuell mal einen Screenshot schicken?

    Wenn du einen kurzen Lag hast, dann bringt es dir nicht wirklich was, da du dann trotzdem ins Fahrzeug reingelangst.

    Das stimmt, ist aber der Ausnahmefall.
    Wenn man es wirklich ganz korrekt machen will, dann muss man es so machen (so habe ich es seinerzeit auf meinem Server gehabt, das hat nie zu unerlaubter Nutzung geführt).
    1. OnPlayerEnterVehicle - Methode
    2. Bei OnPlayerStateChange ebenfalls prüfen und dann mit RemovePlayerFromVehicle
    3. Zusätzlich per Timer prüfen, falls nicht erlaubt, das Fahrzeug an die Stelle erneut spawnen



    Lieber bei OnPlayerStateChange irgendwie.

    Alleine würde ich das auch nicht nutzen, das klappt auch nicht immer. Auf Grund dessen habe ich damals mein System auf'm Server wie oben beschrieben umgebaut.


    @Drai
    Du könntest es also zur Sicherheit noch so machen:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(InFahrschule[playerid])
    {
    if(FahrschulCP[playerid]==0)
    {
    //Starten
    SetPlayerCheckpoint(playerid, FahrschulCPs[FahrschulCP[playerid]][cpx], FahrschulCPs[FahrschulCP[playerid]][cpy], FahrschulCPs[FahrschulCP[playerid]][cpz], 4.0);
    JobCar[playerid]=vehicleid;
    PlayerTextDrawShow(playerid, TachoTd[playerid][0]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][1]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][2]);
    ClearPlayerChat(playerid);
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, HBLAU, "* Die Fahrstunde hat begonnen. Bitte achte unten Links auf die Karte, dort wird dein Checkpoint angezeigt.");
    SendClientMessage(playerid, HBLAU, "* Fahre alle Checkpoints ab, und achte das dein Tempomat nicht mehr als 80 km/h anzeigt!");
    SendClientMessage(playerid, HBLAU, "* Du darfst innerhalb der Stadt max. 80 KM/H fahren. Außerhalb begrenzt sich die Geschwindigkeit auf 110 KM/H");
    SendClientMessage(playerid, HBLAU, "* Es ist Pflicht die rechte Fahrspur zu benutzen!");
    spv(playerid,"TachoTimerID",SetTimerEx("TachoUpdate", 200, true, "i", playerid));
    }
    return 1;
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,GRAU,"Du hast keine Schlüssel für dieses Fahrzeug!");
    break;
    }
    }

    Danke Jeffry, es hat geklappt, aber woran hast du gesehen, dass ich mein Plugin aktualisieren muss?

    Wenn sehr oft der Run Time Error 20 (Invalid index parameter (bad entry point)) kommt, dann deutet das in 99% aller Fälle auf ein veraltetes Crashdetect Plugin hin, welches mit der neuen SA-MP Version nicht klar kommt und daher diesen Fehler ausgibt (fälschlicherweise).




    Das kommt entweder durch Jeffry's Erfahrung

    Ich tendiere hierzu ^^

    so?

    So:
    public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
    {
    if(issuerid != INVALID_PLAYER_ID)
    {
    if(Spieler[issuerid][pHitsound] == 1)
    {
    PlayerPlaySound(issuerid, 17802, 0.0, 0.0, 0.0);
    }
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(x > 1392.0396 && x < 1558.8539 && y > -1866.5282 && y < -1727.6683 && z > 0 && z < 100)
    {
    format(string, sizeof(string),"*No-DM Zone* Du wurdest von %s in Commerce angegriffen (%.0f Schaden.)", GetName(playerid), amount);
    SendClientMessage(playerid, COLOR_ANNOUNCE, string);
    }
    }
    return 1;
    }

    Unter was soll man das einfügen wen man Fragen darf.

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



    Wie lasse ich den schaden auslesen?

    Der Parameter "amount" in OnPlayerTakeDamage gibt dir den Schaden mit.



    ==========================================

    Hast du da vielleicht ein kleinen Codeschnippel für mich wegen dem Dialog und den Text setzen.

    Hätte ich auch gern



    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Code dazu:

    OnPlayerStateChange:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(InFahrschule[playerid])
    {
    if(FahrschulCP[playerid]==0)
    {
    //Starten
    SetPlayerCheckpoint(playerid, FahrschulCPs[FahrschulCP[playerid]][cpx], FahrschulCPs[FahrschulCP[playerid]][cpy], FahrschulCPs[FahrschulCP[playerid]][cpz], 4.0);
    JobCar[playerid]=vehicleid;
    PlayerTextDrawShow(playerid, TachoTd[playerid][0]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][1]);
    PlayerTextDrawShow(playerid, TachoTd[playerid][2]);
    ClearPlayerChat(playerid);
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, HBLAU, "* Die Fahrstunde hat begonnen. Bitte achte unten Links auf die Karte, dort wird dein Checkpoint angezeigt.");
    SendClientMessage(playerid, HBLAU, "* Fahre alle Checkpoints ab, und achte das dein Tempomat nicht mehr als 80 km/h anzeigt!");
    SendClientMessage(playerid, HBLAU, "* Du darfst innerhalb der Stadt max. 80 KM/H fahren. Außerhalb begrenzt sich die Geschwindigkeit auf 110 KM/H");
    SendClientMessage(playerid, HBLAU, "* Es ist Pflicht die rechte Fahrspur zu benutzen!");
    spv(playerid,"TachoTimerID",SetTimerEx("TachoUpdate", 200, true, "i", playerid));
    }
    return 1;
    }
    }


    OnPlayerEnterVehicle:
    for(new i=0; i<sizeof(FahrschulCar); i++)
    {
    if(vehicleid!=FahrschulCar[i])continue;
    if(!InFahrschule[playerid])
    {
    SendClientMessage(playerid,GRAU,"Du hast keine Schlüssel für dieses Fahrzeug!");
    TogglePlayerControllable(playerid, false);
    TogglePlayerControllable(playerid, true);
    break;
    }
    }


    So kommt man erst gar nicht in das Fahrzeug, und erst wenn das Einsteigen fertig ist, wird der Checkpoint erstellt.

    Mit der ersten Frage meinte ich eigentlich, das man dauerhaft Sprinten kann, ohne das man Pause machen muss.

    Dazu wäre mir nichts außer Mods bekannt.
    Edit: Ja, per Respawn würde es bedingt gehen, das sieht aber wahrscheinlich nicht so schön aus.
    Das würde ich dann eventuell per Befehl machen, sprich sowas wie /luft.



    Hast du da vielleicht ein kleinen Codeschnippel für mich wegen dem Dialog und den Text setzen.

    Kann ich dir heute Abend geben, wenn ich zu Hause bin.



    Für jeden Spieler einzeln - per Timer?

    Das.
    Zwischen 1 und 5 Minuten ist angebracht.

    Erste Frage: Ist es möglich die Funktion auszuschalten das man nicht mehr Sprinten kann?

    Nur bedingt, schaue dir mal diesen Code als Beispiel an: http://forum.sa-mp.com/showpost.php?p=381304&postcount=11




    Zweite Frage: Wie ist es möglich, das im Textdraw oder Dialog ein Text erscheint als wird er gerade Geschrieben?

    Du musst den Text per Timer aktualisieren.






    wie kann man überprüfen, ob der Spieler sich bewegt? Egal ob er W,A,S,D drückt, oder Sprint, etc...

    Das würde ich über die Geschwindigkeit und die Animation (GetPlayerAnimationIndex) prüfen.