[RELEASE] Car-Radio

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [RELEASE] Car-Radio

      Hab mal ein Car-Radio geschrieben, wer es braucht kann sich das runterladen und verwenden.

      p.s ist außerhalb des Autos auch hörbar.

      EDIT :

      • Alle Fahrzeuge wo ein Radio läuft (nicht "Radio aus") erhalten eine ColSphere. Beim betreten dieser ColSphere wird dem Clienten die Radio URL und das Fahrzeug gesendet, dadurch wird der 3D Sound erstellt. Beim einsteigen ins Auto wird der 3D Sound entfernt und durch einen Sound ersetzt.
      • Den Radio-Wechsel erhalten nurnoch die Spieler in der ColSphere (Spieler im Fahrzeug nur Sound, Spieler außerhalb des Fahrzeugs 3D).
      • Beim Destroyen/Explodieren wird der Sound entfernt und die ColSphere aufgelöst.
      • Einige Funktionen wurden als Local gesetzt um Komplikationen zu vermeiden.
      • ipairs wurde durch pairs ersetzt.
      • Fahrer-Abfrage wurde verkürzt.



      Vielen Dank nochmal an @Bonus (hoffe du meintest das so in der Art ^^)

      NEUER LINK : mediafire.com/file/8uqw13fv5c2znsc/radio.rar/file

      Wenn irgendwelche Fehler auftauchen einfach melden.

      Geplant : Spieler können eigene Radios einbinden

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Shufflespace () aus folgendem Grund: Ultimate-Script hatte KeyBind immer entfernt, ist nun abgefangen.

    • Sieht gut aus.

      Nur paar Tipps meinerseits:

      1. Mausrad-Bewegung -> viel zu viel Arbeit
      Bei jeder Mausrad Bewegung wird dem Server das Event addSyncRadio mit Radio-Name, Radio-URL und Fahrzeug gesendet.
      Serverseitig wird dann jedem Spieler die selben Daten (außer Radio-Name) übergeben.
      Das ist für die Performance nicht so toll (Verbesserungsvorschläge folgen).


      2. newRadioName
      newRadioName bei addSyncRadio wird Serverseitig nie benutzt.


      3. Änderung der Sync
      Du lässt das Radio bei jeder kleinen Änderung an alle senden, was nicht so schön ist.
      Je mehr Spieler da sind, desto schlechter wird es für die Performance.
      Stattdessen solltest du es so machen, dass du einmal bei Radio-Erstellung und Radio-Zerstörung allen Clients das Fahrzeug schickst.
      Die Fahrzeuge werden dann in einer Tabelle gespeichert und bekommen das Event "onClientElementStreamIn" angehangen (bei Radio-Zerstörung natürlich entfernt).
      Wenn also eines dieser Fahrzeuge gestreamt wird, sollte der Client den Server per triggerServerEvent mitteilen, dass er in der Nähe ist und das Radio hören kann.
      Der Client sollte dann die URL für das Fahrzeug bekommen (nutze am besten das Fahrzeug als source bei triggerClientEvent) und abspielen.
      Serverseitig sollte der Client in einer Tabelle gespeichert werden, wo alle Clients hinkommen sollen, die in der Nähe des jeweiligen Fahrzeuges sind.
      Dann bei URL Änderung sollten alle diese Clients in der Tabelle die neue URL empfangen.
      Zudem solltest du noch beachten beim triggerClientEvent bei Radio-Erstellung clientseitig "isElementStreamedIn" abzufragen, da onClientElementStreamIn nur getriggert wird, wenn das Fahrzeug neu gestreamt wird, nicht aber, wenn es schon gestreamt war. Wenn es schon war, sollte eben triggerServerEvent ausgeführt werden, damit der Client in die Tabelle im Server aufgenommen wird und die neueste URL bekommt.

      Vorteil dabei ist halt, dass nicht bei jeder kleinen Änderung jeder Spieler auf dem Server die ganzen Infos neu bekommt und die Sounds dauerhaft abspielt, obwohl der Spieler vllt. 2000 Kilometer vom Fahrzeug entfernt ist.


      4. ipairs
      ipairs ist das selbe wie pairs, nur dass die Tabelle davor sortiert wird.
      Wenn du keine Sortierung benötigt, nutze lieber pairs.
      Nicht nur ist pairs schneller, sondern man erkennt auch auf dem ersten Blick, dass hierbei die Sortierung keinen Unterschied macht.


      5. Fahrer-Abfrage kürzen
      Statt

      LUA-Quellcode

      1. isPedInVehicle(lp) and getVehicleOccupant(getPedOccupiedVehicle(lp)) == lp
      nutze lieber einfach

      LUA-Quellcode

      1. getPedOccupiedVehicleSeat(lp) == 0


      6. Lokale Funktionen
      Du benutzt lokale Variablen, aber kaum lokale Funktionen.
      Versuch das auch zu lernen.
      Besonders bei solchen leichten Namen wie "removeRadio", die sehr leicht woanders benutzt werden könnten, sodass eines der Funktionen dann überschrieben wird.


      Ansonsten ist das Script gut, hast vieles gut bedacht.
      Wer auch immer sagt du könntest nicht gut scripten, hat keine Ahnung wovon er labert.


      Edit:

      Am Ende ist vllt. noch erwähnenswert, dass du mit dem Script auf Vio-Servern die Möglichkeit zerstörst, eigene Radio-Links einfügen zu können.
      Wäre etwas, was du reinmachen könntest.
    • Bonus schrieb:

      Sieht gut aus.

      Nur paar Tipps meinerseits:

      1. Mausrad-Bewegung -> viel zu viel Arbeit
      Bei jeder Mausrad Bewegung wird dem Server das Event addSyncRadio mit Radio-Name, Radio-URL und Fahrzeug gesendet.
      Serverseitig wird dann jedem Spieler die selben Daten (außer Radio-Name) übergeben.
      Das ist für die Performance nicht so toll (Verbesserungsvorschläge folgen).


      2. newRadioName
      newRadioName bei addSyncRadio wird Serverseitig nie benutzt.


      3. Änderung der Sync
      Du lässt das Radio bei jeder kleinen Änderung an alle senden, was nicht so schön ist.
      Je mehr Spieler da sind, desto schlechter wird es für die Performance.
      Stattdessen solltest du es so machen, dass du einmal bei Radio-Erstellung und Radio-Zerstörung allen Clients das Fahrzeug schickst.
      Die Fahrzeuge werden dann in einer Tabelle gespeichert und bekommen das Event "onClientElementStreamIn" angehangen (bei Radio-Zerstörung natürlich entfernt).
      Wenn also eines dieser Fahrzeuge gestreamt wird, sollte der Client den Server per triggerServerEvent mitteilen, dass er in der Nähe ist und das Radio hören kann.
      Der Client sollte dann die URL für das Fahrzeug bekommen (nutze am besten das Fahrzeug als source bei triggerClientEvent) und abspielen.
      Serverseitig sollte der Client in einer Tabelle gespeichert werden, wo alle Clients hinkommen sollen, die in der Nähe des jeweiligen Fahrzeuges sind.
      Dann bei URL Änderung sollten alle diese Clients in der Tabelle die neue URL empfangen.
      Zudem solltest du noch beachten beim triggerClientEvent bei Radio-Erstellung clientseitig "isElementStreamedIn" abzufragen, da onClientElementStreamIn nur getriggert wird, wenn das Fahrzeug neu gestreamt wird, nicht aber, wenn es schon gestreamt war. Wenn es schon war, sollte eben triggerServerEvent ausgeführt werden, damit der Client in die Tabelle im Server aufgenommen wird und die neueste URL bekommt.

      Vorteil dabei ist halt, dass nicht bei jeder kleinen Änderung jeder Spieler auf dem Server die ganzen Infos neu bekommt und die Sounds dauerhaft abspielt, obwohl der Spieler vllt. 2000 Kilometer vom Fahrzeug entfernt ist.


      4. ipairs
      ipairs ist das selbe wie pairs, nur dass die Tabelle davor sortiert wird.
      Wenn du keine Sortierung benötigt, nutze lieber pairs.
      Nicht nur ist pairs schneller, sondern man erkennt auch auf dem ersten Blick, dass hierbei die Sortierung keinen Unterschied macht.


      5. Fahrer-Abfrage kürzen
      Statt

      LUA-Quellcode

      1. isPedInVehicle(lp) and getVehicleOccupant(getPedOccupiedVehicle(lp)) == lp
      nutze lieber einfach

      LUA-Quellcode

      1. getPedOccupiedVehicleSeat(lp) == 0


      6. Lokale Funktionen
      Du benutzt lokale Variablen, aber kaum lokale Funktionen.
      Versuch das auch zu lernen.
      Besonders bei solchen leichten Namen wie "removeRadio", die sehr leicht woanders benutzt werden könnten, sodass eines der Funktionen dann überschrieben wird.


      Ansonsten ist das Script gut, hast vieles gut bedacht.
      Wer auch immer sagt du könntest nicht gut scripten, hat keine Ahnung wovon er labert.


      Edit:

      Am Ende ist vllt. noch erwähnenswert, dass du mit dem Script auf Vio-Servern die Möglichkeit zerstörst, eigene Radio-Links einfügen zu können.
      Wäre etwas, was du reinmachen könntest.

      Danke für die Tipps :), werde die aufgelisteten Dinge ins Script einarbeiten.