Szerző Téma: Tuning hang lejátszása [PlaySound3D]  (Megtekintve 1980 alkalommal)

Tuning hang lejátszása [PlaySound3D]
« Dátum: 2017. április 22. - 03:47:31 »
0 Show voters
Sziasztok, naggyából középszinten értek a dolgokhoz eddig eligazodtam, de most eléggé elakadtam. amikor prémium turbó van az autóban azaz hangot is ad ki, azt csak az hallja aki az autóban ül.Én azt szeretném valahogy hogy ne csak az hallja a hangot aki az autóban ül, hanem aki nem ül benne az is.Próbáltam már attachElements()-el, próbáltam kódon kívül hozzáadni, létrehozni egy láthatatlan objectet és ahhoz attach-olni de semmi...
 
Aki tudna ebben segíteni megköszönném!
 

local oldState = 0
local newState = 0
function checkVehiclesGearboxChange()
local vehicle = getPedOccupiedVehicle(localPlayer)
if vehicle and getElementData(vehicle, \"veh:performance_turbo\") == 5 then
   newState = getVehicleCurrentGear(vehicle)
   
   if newState ~= oldState then
      oldState = newState
      
      local x, y, z = getElementPosition(vehicle)
      local sound = playSound3D(\"files/turbo.mp3\", x, y, z, false)
      setSoundMaxDistance(sound, 1000)
      setSoundVolume(sound, 0.7)
   end
end
end
setTimer(checkVehiclesGearboxChange, 500, 0)

 
 

Tuning hang lejátszása [PlaySound3D]
« Válasz #1 Dátum: 2017. április 22. - 09:35:44 »
0 Show voters
Át kell triggerelni a hangot szerver oldalra.

Tuning hang lejátszása [PlaySound3D]
« Válasz #2 Dátum: 2017. április 24. - 16:27:37 »
0 Show voters
Idézetet írta: AlexSwamp date=1492846544


   
      Át kell triggerelni a hangot szerver oldalra.
   


Hogyan triggereljek át server oldalra egy client-only functiont?
Nem értem igazán, próbálkoztam vele, max úgy lehetne amit mondasz hogy TriggerServerEvent(xy) és az xy event triggerel egy clientside eventet de annak semmi értelme mert ugyan ott vagyok csak 1x átvittem szerver oldalra. + nem is tiszta igazából. Tudnál valami példát mutatni hogyan is kéne ?https://wiki.multitheftauto.com/wiki/PlaySound3D

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Tuning hang lejátszása [PlaySound3D]
« Válasz #3 Dátum: 2017. április 24. - 18:02:56 »
+2 Show voters
Kliens oldalról meghívsz triggerServerEventtel egy olyan szerver oldali eventet, ami majd meghív triggerClientEventtel kliens oldali eventet, ami lejátssza a hangokat az adott játékosoknak.

Tuning hang lejátszása [PlaySound3D]
« Válasz #4 Dátum: 2017. április 24. - 18:06:51 »
0 Show voters
Szia, ezeket egy régi ismerősöm segítségével megtettem, de a hangot továbbra is csak azoknak játssza le akik az autóban ülnek.
Kódok:
Kliens:
 

local oldState = 0
local newState = 0
function checkVehiclesGearboxChange(vehicle)
local vehicle = getPedOccupiedVehicle(localPlayer)
if vehicle and getElementData(vehicle, \"veh:performance_turbo\") == 5 then
   newState = getVehicleCurrentGear(vehicle)
   
   if newState ~= oldState then
      oldState = newState
      local x, y, z = getElementPosition(vehicle)
            triggerServerEvent(\"serverturbo\", root, x, y, z)
   end
end
end
setTimer(checkVehiclesGearboxChange, 500, 0)
addEvent(\"turbohang\", true)
addEventHandler(\"turbohang\", getRootElement(), function(x, y, z)
    sound = playSound3D(\"files/turbo.mp3\", x, y, z)
    setSoundVolume(sound, 0.7)
    setSoundMaxDistance (sound, 100)
attachElements (sound, localPlayer)   
end)

 
Server:
 
 

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
    if client then
        triggerClientEvent(client, \"turbohang\", client, x, y, z)     
    end
end)

 
 

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Tuning hang lejátszása [PlaySound3D]
« Válasz #5 Dátum: 2017. április 24. - 18:15:03 »
0 Show voters

triggerClientEvent(client, \"turbohang\", client, x, y, z)     

 
Mert itt, csakis egy játékosnak triggereled az eventet, nem pedig többnek.
 
Az első paraméter helyére rakhatsz egy táblát is, tele játékos elementtel, akiknek elszeretnéd küldeni a hangot.

Tuning hang lejátszása [PlaySound3D]
« Válasz #6 Dátum: 2017. április 25. - 01:14:23 »
0 Show voters
Idézetet írta: DrAkE date=1493050503


   

triggerClientEvent(client, \"turbohang\", client, x, y, z)     

   
      Mert itt, csakis egy játékosnak triggereled az eventet, nem pedig többnek.
   
   
      Az első paraméter helyére rakhatsz egy táblát is, tele játékos elementtel, akiknek elszeretnéd küldeni a hangot.
   


Szia, most erre jutottam outputChatBox-ban kiírja hogy létezik a turbó hang és lekérdezi a 100-as körzetben lévő játékosokat amiket bele is rak, de a hang nem játszódik le valószínűleg a triggerClientEvent rossz....
Most így néz ki a dolog:
 
 

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
   local turboCol = createColSphere( x, y, z, 100 )
        local nearbyPlayers = getElementsWithinColShape( turboCol, \"player\" )
   destroyElement( turboCol )
   for index, nearbyPlayer in ipairs( nearbyPlayers ) do
      if client then
         triggerClientEvent(nearbyPlayer, \"turbohang\", nearbyPlayer, x, y, z)
         outputChatBox(\"Turbo\", nearbyPlayer) --teszt
      end
        end
end)

 
 

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
Tuning hang lejátszása [PlaySound3D]
« Válasz #7 Dátum: 2017. április 25. - 12:29:31 »
0 Show voters
Idézetet írta: PCGamer133 date=1493075663


   
      Szia, most erre jutottam outputChatBox-ban kiírja hogy létezik a turbó hang és lekérdezi a 100-as körzetben lévő játékosokat amiket bele is rak, de a hang nem játszódik le valószínűleg a triggerClientEvent rossz....
      Most így néz ki a dolog:
       
   
   

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
   local turboCol = createColSphere( x, y, z, 100 )
        local nearbyPlayers = getElementsWithinColShape( turboCol, \"player\" )
   destroyElement( turboCol )
   for index, nearbyPlayer in ipairs( nearbyPlayers ) do
      if client then
         triggerClientEvent(nearbyPlayer, \"turbohang\", nearbyPlayer, x, y, z)
         outputChatBox(\"Turbo\", nearbyPlayer) --teszt
      end
        end
end)

   
       
   


ColShapenek van egy olyan rossz szokása, hogy ha azonnal létrehoztad, és leakarod kérdezni mely elementek találhatóak benne, akkor üres halmazt fog visszaadni.
Én ezt csak is timerrel tudtam megoldani.

 
U.I.: Utólag rájöttem, hogy ez csak akkor érvényes, ha előtte attachElementtel hozzácsatoltad valamely elementhez a ColShapet.
 

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
    local turboCol = createColSphere( x, y, z, 100 )
    
    setTimer(function()
        local nearbyPlayers = getElementsWithinColShape( turboCol, \"player\" )
for index, nearbyPlayer in ipairs( nearbyPlayers ) do
            if client then
                triggerClientEvent(nearbyPlayer, \"turbohang\", nearbyPlayer, x, y, z)
                outputChatBox(\"Turbo\", nearbyPlayer) --teszt
            end
        end
    end, 100, 1)
   
    destroyElement( turboCol )
end)

 
Viszont, ha minden igaz, akkor nem kell ciklussal végig lépkedned az egész tömbön, helyette csinálhatod ezt:
 

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
local turboCol = createColSphere( x, y, z, 100 )
local nearbyPlayers = getElementsWithinColShape( turboCol, \"player\" )
triggerClientEvent(nearbyPlayers, \"turbohang\", client, x, y, z)
destroyElement( turboCol )
end)

 
 
« Utoljára szerkesztve: 2017. április 25. - 12:40:05 írta DrAkE »

Tuning hang lejátszása [PlaySound3D]
« Válasz #8 Dátum: 2017. április 25. - 13:14:57 »
0 Show voters
Most beírtam a kódodat, érdekes hibakód jött vissza, természetesen nem működik nincs olyan szerencsém...
 

addEvent(\"serverturbo\", true)
addEventHandler(\"serverturbo\", getRootElement(), function(x, y, z)
local turboCol = createColSphere( x, y, z, 100 )
local nearbyPlayers = getElementsWithinColShape( turboCol, \"player\" )
triggerClientEvent(nearbyPlayers, \"turbohang\", client, x, y, z)
destroyElement( turboCol )
end)

 
Ezt másoltam be és azt a hibakódot adja vissza minden váltásnál (amikor a ClientEvent-et küldi) hogy: WARNING: gearboxS.lua:6: <min_mta_version> section in the meta.xml is incorrect or missing (expected at least server 1.3.0-9.04570 because a send list is being used)

Tuning hang lejátszása [PlaySound3D]
« Válasz #9 Dátum: 2017. április 25. - 13:54:01 »
0 Show voters
Az csak egy figyelmeztetés, hogy ezt a lehetőséget (hogy egy player tömböt adj meg a triggerClientEventnek) csak 1.3.0-9.04570-től elérhető. Írja is a wiki changelog résznél: Link
 
Csak írb bele a metába, hogy 
 
 

<min_mta_version client=\"1.3.1\" server=\"1.3.1\" />

 
Edit:
 
Ja igen és szerintem nézd meg hogy nearbyPlayers hány elemet tartalmaz, mert ahogy @DrAkE írta szokott olyat csinálni a col hogy amíg ki nem mész és megint be addig nem érzékeli a playert. Csak én úgy emlékszem ezt nem csak attachnál csinálja hanem pont az oldja meg ha oda attacholod a playeredhez, akkor frissíti magát és letudod kérni rendesen.
« Utoljára szerkesztve: 2017. április 25. - 13:57:29 írta dugasz1 »

Tuning hang lejátszása [PlaySound3D]
« Válasz #10 Dátum: 2017. április 25. - 13:55:28 »
0 Show voters
Idézetet írta: dugasz1 date=1493121241


   
      Az csak egy figyelmeztetés, hogy ezt a lehetőséget (hogy egy player tömböt adj meg a triggerClientEventnek) csak 1.3.0-9.04570-től elérhető. Írja is a wiki changelog résznél: Link
   
   
      Csak írb bele a metába, hogy 
       
   
   

<min_mta_version client=\"1.3.1\" server=\"1.3.1\" />

   
       
   


Köszi, azóta már megszólalt a turbó, annyit még kérdeznék hogy attachElements()-el server oldalon hogyan kapcsoljam össze a hangot a játékossal? vagy ezt client oldalon is lehet?

Tuning hang lejátszása [PlaySound3D]
« Válasz #11 Dátum: 2017. április 25. - 13:58:00 »
0 Show voters
Megoldottam kliens oldalon, hálás köszönetem minden segítőkész embernek! 
 

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal