Beiträge von maddin

    1. Ka, kann ich nicht nachvollziehen woher dieser Bug kommt.
    2. die letzten beiden Ziffern bei farbcodes sind die transparenz. Also 0x008080FF ind 0x00808000 ändern und die transparenz ist wieder anders.
    3. CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld) - Einfach bei Virtualworld deine welt ID eintragen^^

    public Tank(playerid)
    {
    new string[12];
    for(new i = 0;i<MAX_VEHICLES;i++)
    {
    if(Menge[i] >= 1)
    {
    Menge[i]--;
    }
    switch(Menge[i])
    {
    case 0: format(string,sizeof string,"Tank: ----");
    case 1 .. 17: format(string,sizeof string,"Tank: I");
    case 18 .. 34: format(string,sizeof string,"Tank: II");
    case 35 .. 51: format(string,sizeof string,"Tank: III");
    case 52 .. 68: format(string,sizeof string,"Tank: IIII");
    case 69 .. 85: format(string,sizeof string,"Tank: IIIII");
    case 86 .. 100: format(string,sizeof string,"Tank: IIIIII");
    }
    TextDrawSetString(td_fuel[i],string);
    }
    }
    100 durch 6 teilen is halt net so einfach, deshalb die komischen case werte ^^

    So z.b
    stock mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128],Float:sqlfloat;
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }

    Geschwindigkeit ist schon drin^^
    ReturnVehicleSpeed(vehicleid,type)
    Type 1 = kmh
    Type 2 = mph


    Mit den Kilometern ist ne nette funktion, werd ich mal bei gelegenheit nachreichen^^


    Und ob ichs jetzt per makro machen, oder so wie es jetzt schon ist macht doch wirklich keinen unterschied^^


    Beschreibung/Vorwort:
    UVL ist eine kleine aber feine Include die, wie der name schon vermuten lässt, fie funktionen für fahrzeuge ein wenig erweiter bzw erleichtert.
    Es ist sicherlich nichts großes, aber meiner meinung nach sehr nützlich und deshalb habe ich mich dazu entschieden es mit der Community zu teilen.
    Damit alle funktionen im vollen umfang genutzt werden können, ist es wichtig das ihr die zur verfügung gestellten Funktionen benutzt. Ich habe extra keine Makros benutzt die die standart funktionen von SA-MP zu denen in dieser Include kompatibel machen. Wer ein bisschen ahnng hat und vor hat diese Include zu verwenden wird das sicherlich auch schnell selbst schaffen.


    CreateVehicleEx muss benutzt werden, da sonst die anderen funktion nicht/nur teilweise funktionieren!
    Funktionen:

    CreateVehicleEx(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay = -1, paintjobid = 0, interiorid = 0, virtualworld = 0, nummernschild[] = "")
    DestroyVehicleEx(vehicleid)
    ResetVehicleStats(vehicleid) // !!! NICHT BENUTZEN !!!
    SetVehicleInterior(vehicleid, interiorid)
    SetVehicleToVirtualWorld(vehicleid, virtualworld)
    GetVehicleVirtualWorldEx(vehicleid)
    GetVehicleInteriorEx(vehicleid)
    GetVehiclePosEx(vehicleid, &Float:x, &Float:y, &Float:z)
    SetVehiclePosEx(vehicleid, Float:x, Float:y, Float:z)
    GetVehicleAngle(vehicleid, &Float:angle)
    SetVehicleAngle(vehicleid, Float:angle)
    SetvehicleArea(vehicleid, Float:x, Float:y, Float:z, Float:angle, interiorid, virtualworld)
    SetVehicleEngine(vehicleid, bool:status)
    GetVehicleEngine(vehicleid)
    SetVehicleLights(vehicleid, bool:status)
    GetVehicleLights(vehicleid)
    SetVehicleAlarm(vehicleid, bool:status, time)
    GetVehicleAlarm(vehicleid)
    SetVehicleDoors(vehicleid, bool:status)
    GetVehicleDoors(vehicleid)
    SetVehicleBonnet(vehicleid, bool:status)
    GetVehicleBonnet(vehicleid)
    SetVehicleBoot(vehicleid, bool:status)
    GetVehicleBoot(vehicleid)
    ChangeVehicleColorEx(vehicleid, color1, color2)
    GetVehicleColor(vehicleid, &color1, &color2)
    ChangeVehiclePaintjobEx(vehicleid, paintjobid)
    GetVehiclePaintJob(vehicleid)
    SetVehicleHealthEx(vehicleid, Float:health)
    GetVehicleHealthEx(vehicleid, &Float:health)
    Float:GetVehicleHealthEx2(vehicleid)
    RepairVehicleEx(vehicleid)
    GetFreeVehicleSeat(vehicleid)
    GetVehicleModelEx(vehicleid)
    SetVehicleNumberPlateEx(vehicleid, numberplate[])
    GetVehicleNumberPlate(vehicleid, numberplate[])
    SetVehicleGodMode(vehicleid, bool:status)
    IsVehicleInGodMode(vehicleid)
    GetVehicleNameByVehicleID(vehicleid)
    GetVehicleNameByModelID(modelid)
    SetVehicleToRespawnEx(vehicleid)
    IsVehicleDrivingBackwards(vehicleid)
    ReturnVehicleSpeed(vehicleid,type)
    GetRandomVehicle()

    Callbacks:

    forward OnVehicleRespawn(vehicleid);
    forward OnVehicleChangeVirtualWorld(vehicleid,newvirtualworld,oldvirtualworld);
    forward OnVehicleChangeInterior(vehicleid,newinteriorid,oldinteriorid);
    forward OnVehicleChangeColor(vehicleid, oldcolor1, oldcolor2, newcolor1, newcolor2);
    forward OnVehicleChangePaintJob(vehicleid, oldpaintjob, newpaintjob);
    forward OnVehicleParamsChange(vehicleid, param_id, toggle, time);

    Hinweis:

    • Bei allen funktionen, wo bool:status vorkommt, kann entweder true(1) oder false(0) eingesetzt werden. true = Aktivieren, false = Deaktivieren.
    • SetVehicleNumberPlateEx benötigt weiterhin einen Respawn des Fahrzeugs nach dem verändern des Nummernschildes.
    • Der GodMode läuft über einen Timer (100 MS). Wem das zu viel ist, der kann diesen auch erhöhen. Dazu einfach im script nach der Zeile "#define GODMODE_TIMER" suchen und die Zahl verändern.
    • Bei OnVehicleParamsChange gibt es folgende Param ID's:

      • VEHICLE_PARAMS_ENGINE (1)
      • VEHICLE_PARAMS_LIGHTS (2)
      • VEHICLE_PARAMS_ALARM (3)
      • VEHICLE_PARAMS_DOORS (4)
      • VEHICLE_PARAMS_BONNET (5)
      • VEHICLE_PARAMS_BOOT (6)
      • VEHICLE_PARAMS_GODMODE (7)


      Der time parameter wird nur bei SetVehicleAlarm benutzt und sagt aus für wie viele MS der Alarm aktiviert wurde.

    • UVL ist foreach kompatibel. Das heisst, wenn ihr UVL & foreach benutzt steht euch ein "Vehicle" parameter zur verfügung, mit dem ihr durch Alle fahrzeuge loopen könnt die erschaffen wurden. Beispiel s.u.


    Beispiele:
    Ich werde nicht zur jeder funktion ein beispiel machen, da ich denke das die meisten klar sein sollten. Auf anfrage werde ich das aber gerne nachholen.

    public OnVehicleParamsChange(vehicleid, param_id, toggle, time)
    {
    if(toggle)
    {
    if(time == -1)
    {
    printf("Vehicle (%d) Params ID '%d' changed ON!",vehicleid, param_id);
    }
    else
    {
    printf("Vehicle (%d) Params ID '%d' changed ON! Time = %d",vehicleid, param_id, time);
    }
    }
    else printf("Vehicle (%d) Params ID '%d' changed OFF!",vehicleid, param_id);
    return 1;
    }


    public OnVehicleChangePaintJob(vehicleid, oldpaintjob, newpaintjob)
    {
    printf("Vehicle (%d) Paintjob Changed! Old: '%d' New: '%d'!",vehicleid, oldpaintjob, newpaintjob);
    return 1;
    }


    public OnVehicleChangeColor(vehicleid, oldcolor1, oldcolor2, newcolor1, newcolor2)
    {
    printf("Vehicle (%d) Color Changed! Old: '%d|%d' New: '%d|%d'!",vehicleid, oldcolor1, oldcolor2, newcolor1, newcolor2);
    return 1;
    }


    public OnVehicleRespawn(vehicleid)
    {
    printf("Vehicle %d respawned!",vehicleid);
    return 1;
    }


    public OnVehicleChangeVirtualWorld(vehicleid,newvirtualworld,oldvirtualworld)
    {
    printf("Vehicle (%d) VW Changed! Old: '%d' New: '%d'!",vehicleid,newvirtualworld,oldvirtualworld);
    return 1;
    }


    public OnVehicleChangeInterior(vehicleid,newinteriorid,oldinteriorid)
    {
    printf("Vehicle (%d) Interior Changed! Old: '%d' New: '%d'!",vehicleid,newinteriorid,oldinteriorid);
    return 1;
    }


    //foreach funktionen:
    Iter_Count(Vehicle); //returnt die Anzahl an erschaffenen Fahrzeugen


    if(strcmp(cmd, "/respawncars", true) == 0)
    {
    foreach (Vehicle, vID)
    {
    SetVehicleToRespawnEx(vID);
    }
    printf("Es wurden %d Fahrzeuge respawnt!",Iter_Count(Vehicle));
    return 1;
    }

    Download:


    Viel Spass damit. Falls ihr Bugs findet oder Verbesserungs vorschläge habt immer her damit.
    Credits werde ich keine dazu schreiben da das alles über einen längeren zeitraum entstanden ist. Wer also irgendwas von sich wiederfindet, und es nicht mit seinem gewissen ausmachen kann das er nicht namentlich erwähnt wurde, kann mir ja eine PN schreiben.


    Mfg.

    Ist es so anspruchsvoll eine ID zu ändern das du das nicht schaffst? Wenn du dir immer alles vor machen lässt wirste nie was gescheites auf die reihe bringen.


    ShowPlayerDialog <- Durchlesen.


    Die Dialog ID in deinem FS ist 1. Suchen wirste wohl selber schaffen. Und daraus machste da einfach irgendeine x beliebeige zahl zwischen 1 und 32767. Sowohl bei ShowPlayerDialog als auch bei OnDialogResponse

    ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])


    Die Dialog ID muss bei jedem Dialog anders sein, weil man ihn darüber anspricht bzw man diese bei OnDialogResponse braucht.

    Das liegt warscheinlich das sich die ID's der Dialoge aus dem Filterscript mit denen aus deinem Gamemode überschneiden. Am besten du änderst die in dem Filterscript.

    if(AktuellerCP[playerid] != INVALID_FARMER_CP)
    {
    SendClientMessage(playerid,0xFF0000FF, "Error: Sie sind bereits in Ihren Job aktiv.");
    }
    Du fragst ab ob der Aktuelle CP vom Spieler nicht gleich INVALID_FARMER_CP ist. Wenn das so ist, gibst du eine Fehlermeldung aus, aber bendest den Befehl nicht. Das heisst es wird zwar die fehlermeldung ausgegeben, aber es geht trotzdem weiter.


    if(!FarmerFahrzeug(fahrzeug))return SendClientMessage(playerid,0xFF0000FF, "Error: Sie befinden sich nicht auf den richtigen Fahrzeug.");
    {
    AktuellerCP[playerid] = +1; // Die zeile mit Error
    }
    Du fragst ab, ob der Spieler nicht in einem FarmerFahrzeug sitzt. Trifft das zu, beedest du den befehl und gibst eine fehlermeldung zurück. Die klammer auf und der code darin kann also garnicht ausgeführt werden.


    So sollte es funktionieren:
    if (strcmp(cmd, "/ernten", true) == 0)
    {
    new fahrzeug = GetPlayerVehicleID(playerid);
    if(AktuellerCP[playerid] != INVALID_FARMER_CP) return SendClientMessage(playerid,0xFF0000FF, "Error: Sie sind bereits in Ihren Job aktiv.");
    if(!FarmerFahrzeug(fahrzeug))return SendClientMessage(playerid,0xFF0000FF, "Error: Sie befinden sich nicht auf den richtigen Fahrzeug.");
    AktuellerCP[playerid] = +1;
    SetPlayerCheckpoint(playerid,FarmerCPS[AktuellerCP[playerid]][0],FarmerCPS[AktuellerCP[playerid]][1],FarmerCPS[AktuellerCP[playerid]][2], 8.0);
    SendClientMessage(playerid,0x00CC00FF, "Fahren sie nun die Checkpoints ab um das Feld abzuernten.");
    return 1;
    }