Beiträge von BlackFoX

    Ist doch kein Fehler, ein Hinweis auf deine Code Struktur mehr nicht, hängt davon ab wie viel Tabs du zur Code Formation/Reihenfolge verwendest


    Richtig
    code
    {
    code
    {
    code
    }
    }



    Falsch
    code
    {
    code
    {
    code
    }
    }


    #pragma tabsize 0


    sollte auch helfen, einfach Lokal definieren.


    Hat im Direkten Sinne nichts mit dem Streamer zu tun ;)

    Wenn du einen Router benutzt solltest du die Ports freischalten ( 7777 ) auf TCP & UDP sollte sich unter Sicherheit > Regeln einstellen lassen durch
    eine Definition einer Regel dort den Namen der Regel & Port wie gesagt TCP & UDP = 7777 dann speichern & dein PC für den Router freigeben müsste auch unter
    Punkto Sicherheit zu finden sein.

    Such den Treiber mal unter Google ;)
    ansonsten noch ein Tipp, wenn du den Drucker installierst muss er angeklemmt sein so das der Treiber ihn auch erkennt & alle nötigen Komponenten verbinden kann ansonsten
    funktioniert er nachher nicht Ordnungsgemäß

    Kann ich dir nicht sagen, ich hab nen Linux 32 Bit da läuft er jedenfalls ohne Probleme ansonsten müsstest du einfach mal testen & eventuell Berichten wie es verlief

    Achtung, weiteres Update, Streamer läuft nun zum Teil schneller & Stabiler, ein kleiner Fehler bezüglich des Objekt erstellens wurde ebenfalls behoben.


    //é und bevor ihr euch wundert wo der Source Code ist, der ist nun im Archiv dabei ( Hauptarchiv )

    Hallo Leute,


    ich habe gestern eine Map erstellt die über 3k Fahrzeuge enthielt, nun war mein Problem sa-mp unterstützt die ja gar nicht, da hab ich mir einfach einen Fahrzeug Streamer gebaut,
    er beinhaltet alle nötigen Funktionen aber bevor ich euch diese zeige möchte ich euch eine kleine Erklärung zur Installation des Streamers abliefern.


    Installation


    • bfx_vstream.pwn in den Filterscript Ordner & kompilieren, vorher eventuell die Menge der Maximalen Fahrzeuge bestimmen
    • Nun nehmt ihr die die Datei bfx_vStream.inc und packt sie in den Include Ordner damit ihr auch die Verknüpfungen zu den Funktionen habt.
    • packt die bfx_vstream als FS dazu in eure Server Konfiguration
    • Nun könnt ihr euer Skript fügt bfx_vStream als Include File hinzu und nun könnt ihr euer Skript mit folgenden Funktionen schmücken ;)


    Funktionen


    b_CreateVehicle(model,Float:x,Float:y,Float:z,Float:a,Color1,Color2,Interior = 0,virtualworld = 0,Float:StreamDistance = (MAX_STREAM_DIS));

    • Fahrzeug erstellen mit gewünschten Angaben
    • Die Parameter ab Interior sind Optional ( Für die, die nicht wissen was damit gemeint ist sie haben einen Standardwert & müssen nicht extra angegeben werden )

    b_DestroyVehicle(id);

    • Fahrzeug zerstören/löschen

    b_GetVehiclePos(id,&Float:x,&Float:y,&Float:z);

    • Fahrzeug Position ermitteln


    b_GetVehicleZAngle(id,&Float:a);

    • Fahrzeug Ausrichtung ermitteln

    b_SetVehicleToRespawn(id);

    • Fahrzeug erneuern (Respawn)

    b_LinkVehicleToInterior(id,interiorid);

    • Fahrzeug in einen Innenraum setzen


    b_AddVehicleComponent(id,componentid);

    • Fahrzeugkomponenten hinzufügen

    b_RemoveVehicleComponent(id,componentid);

    • Fahrzeugkomponenten löschen

    b_ChangeVehicleColor(id,color1,color2);

    • Fahrzeug Farben setzen

    b_ChangeVehiclePaintjob(id,paintjobid);

    • Fahrzeug Lackierung setzen

    b_SetVehicleHealth(id,Float:health);

    • Fahrzeug Energie setzen

    b_GetVehicleHealth(id,&Float:health);

    • Fahrzeug Energie ermitteln

    b_AttachTrailerToVehicle(id,stream_trailer);

    • Fahrzeuganhänger an ein Fahrzeug hängen ( Hänger muss auch ein Stream Fahrzeug sein )

    b_DetachTrailerFromVehicle(id);

    • Anhänger vom Fahrzeug entfernen

    b_IsTrailerAttachedToVehicle(id);

    • Abfragen ob das Fahrzeug einen Hänger hat

    b_GetVehicleModel(id);

    • Fahrzeug Modell ermitteln

    b_GetVehicleComponentInSlot(id,slot);

    • Fahrzeugkomponenten ermitteln

    b_RepairVehicle(id);

    • Fahrzeug reparieren

    b_GetVehicleStreamID(vehicleid);

    • Fahrzeug Stream ID ermitteln

    b_SetVehicleVirtualWorld(vehicleid,virtualworld);

    • Setzt das Fahrzeug in eine Virtuelle Welt

    b_SetVehiclePos(vehicleid,Float:x,Float:y,Float:z);

    • Fahrzeug Position setzen

    b_SetVehicleZAngle(vehicleid,Float:a);

    • Fahrzeug Ausrichtung setzen


    So das war es zu den Funktionen, der Streamer selber unterstützt soweit so viel Fahrzeug wie ihr möchtet, ich habe ihn Persönlich ja mit 3000 Fahrzeugen getestet,
    er läuft bisher Stabil & Crash Gefahr ist auch gleich 0 sprich der Streamer ist abgesichert.


    So zum Schluss noch die neuen Callbacks & das Hauptskript.


    (( Callbacks Funktionieren wie die Standards nur das sie nur die Stream Fahrzeuge unterstützen sprich normale Fahrzeuge werden nicht beachtet ))
    public OnBFXVehicleStreamerStreamIn(vehicleid)
    public OnBFXVehicleStreamerStreamOut(vehicleid)
    public OnBFXVehicleSpawn(vehicleid)
    public OnBFXPlayerEnterVehicle(playerid,vehicleid,ispassenger)
    public OnBFXPlayerExitVehicle(playerid,vehicleid)
    public OnBFXVehicleMod(playerid,vehicleid,componentid)
    public OnBFXVehiclePaintjob(playerid,vehicleid,paintjobid)
    public OnBFXVehicleRespray(playerid,vehicleid,color1,color2)
    public OnBFXVehicleStreamIn(vehicleid,forplayerid)
    public OnBFXVehicleStreamOut(vehicleid,forplayerid)

    Immer darauf achten das vehicleid != vehicleid sondern die Stream ID benötigt ! dazu verwendet ihr in Kommandos oder so
    wo es nicht vorhanden ist ,,b_GetVehicleStreamID´´ ( !! Die Callbacks geben bereits die StreamID wieder !! )


    So und nun Viel Spaß

    dcmd verwendet ein Makro sprich Makros sind für das ersetzen der Werte da so wird in wirklichkeit der Code dort ausgeführt sprich vom Compiler eingesetzt


    #define foreach(%1) for(new %1 = 0;%1<MAX_PLAYERS;%1++) if(IsPlayerConnected(%1) && !IsPlayerNPC(%1))



    foreach(player)
    {
    // Schleife
    }


    das gleich und ähnlich wird in dcmd übernommen darin wird ebenfalls StringCompare verwendet sprich darin liegt kein großer unterschied

    dcmd soll angeblich schneller sein aber ich sehe darin einfach zu viele unnötige indirekte Zugriffe bzw. immer wieder neu Zugriffe die Zeit kosten

    Pawn wurde nie Up To Date gehalten schon seit der ersten Sa-mp Version nicht mehr zudem ist es egal wenn du noch die alten Funktionen benutzt die aber mit den selben Funktionsadressen Verknüpft sind,
    würden die Verknüpfen der neuen Funktion die nutzen willst nicht in der Inc verfasst sein würde dies Fehler ausschlagen da sie nicht definiert sind.


    Sprich im endeffekt ist es egal mit welchem Pawn Compiler in Sa-mp umgewandelt wurde, es bleibt gleich da die Version sich nie wirklich geändert hat sonst würde Sa-mp nicht mehr kompatibel sein da
    Sa-mp wiederum noch den amx Emulator nutzt.

    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if (IsTrailerAttachedToVehicle(vehicleid))
    {
    AttachTrailerToVehicle(GetVehicleTrailer(nutzbar), Nichtnutzbar);
    }
    else SendClientMessage(playerid, 0xDEEE20FF, "Diese Fahrzeug kann Diese Funktion nicht!");
    }
    else SendClientMessage(playerid, 0xDEEE20FF, "Du hast kein Fahrzeug");
    return 1;
    }