-
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)
-
Át kell triggerelni a hangot szerver oldalra.
-
Á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
-
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.
-
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)
-
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.
-
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)
-
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)
-
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)
-
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.
-
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?
-
Megoldottam kliens oldalon, hálás köszönetem minden segítőkész embernek!