sir135 Posted November 19, 2011 Share Posted November 19, 2011 Помогите решить эту проблему. Link to comment
Kenix Posted November 19, 2011 Share Posted November 19, 2011 https://wiki.multitheftauto.com/wiki/Resource:Voice Link to comment
Sektor Posted November 19, 2011 Share Posted November 19, 2011 Это мод такой есть в SA-MP называется вроде Role play, вот там вот есть такой чат. Link to comment
sir135 Posted November 19, 2011 Author Share Posted November 19, 2011 Более толковый ответ можете дать? Я не прошу как решить проблему ограничения обычного чата,- прошу помогите мне с голосовой связью! Link to comment
MX_Master Posted November 19, 2011 Share Posted November 19, 2011 -- в клиенте local VOICE_MAX_DISTANCE = 50 -- метров addEventHandler( 'onClientPlayerVoiceStart', root, function() if source == localPlayer then return end local myPos = { getElementPosition(localPlayer) } local voiceStartPos = { getElementPosition(source) } if myPos[3] and voiceStartPos[3] and getDistanceBetweenPoints3D ( myPos[1], myPos[2], myPos[3], voiceStartPos[1], voiceStartPos[2], voiceStartPos[3] ) > VOICE_MAX_DISTANCE then cancelEvent() end end ) при ответе "не работает" все равно код дорабатывать придется автору вопроса Link to comment
sir135 Posted November 19, 2011 Author Share Posted November 19, 2011 а на "серверной" этого никак не сделать? Link to comment
MX_Master Posted November 19, 2011 Share Posted November 19, 2011 Запилите. Функций и событий по работе с голосом всего ничего. сервер isVoiceEnabledsetPlayerVoiceIgnoreFromsetPlayerVoiceBroadcastTo"onPlayerVoiceStart""onPlayerVoiceStop" клиент "onClientPlayerVoiceStart" "onClientPlayerVoiceStop" Link to comment
sir135 Posted November 19, 2011 Author Share Posted November 19, 2011 Мастер, если бы все было так просто, я бы и не обращался на форум, конечно же я несколько вариантов пытался делать. Делал именно на серверной части и результат нулевой. Во первых функции и события в новизну! Так что если можешь напиши пожалуйста как должно быть. Link to comment
MX_Master Posted November 19, 2011 Share Posted November 19, 2011 "делал" же (: Дай посмотреть. Если что - исправим. Link to comment
sir135 Posted November 20, 2011 Author Share Posted November 20, 2011 вот: addEventHandler("onPlayerVoiceStart", root, function() outputChatBox("Внимание;- голосовой чат ограничен!(10м)", source) local posX, posY, posZ = getElementPosition( source ) for i, thePlayer in ipairs( getElementsByType( 'player' ) ) do local tarX, tarY, tarZ = getElementPosition( thePlayer ) if not(source == thePlayer) then local distance = getDistanceBetweenPoints3D ( posX, posY, posZ, tarX, tarY, tarZ ) if (distance > 10) then setPlayerVoiceIgnoreFrom(thePlayer, source) end end end end) Link to comment
MX_Master Posted November 20, 2011 Share Posted November 20, 2011 предположение addEventHandler("onPlayerVoiceStart", root, function() outputChatBox("Внимание;- голосовой чат ограничен!(10м)", source) local posX, posY, posZ = getElementPosition( source ) for i, thePlayer in ipairs( getElementsByType( 'player' ) ) do local tarX, tarY, tarZ = getElementPosition( thePlayer ) if not(source == thePlayer) then local distance = getDistanceBetweenPoints3D ( posX, posY, posZ, tarX, tarY, tarZ ) if (distance > 10) then setPlayerVoiceIgnoreFrom(thePlayer, source) --- добавлено мной -------------------------------------------- else setPlayerVoiceBroadcastTo(source, thePlayer) -------------------------------------------------------------------- end end end end ) Link to comment
sir135 Posted November 21, 2011 Author Share Posted November 21, 2011 Проблема не решена полностью, попытаюсь объяснить что не так. Люди, находящиеся вдали, блокируются функцией "ignore",- после, они вообще теряют возможность говорить,- как будто их мутят по голосу! Link to comment
MX_Master Posted November 21, 2011 Share Posted November 21, 2011 еще один "методотыковый" возможный вариант (: addEventHandler("onPlayerVoiceStart", root, function() outputChatBox("Внимание;- голосовой чат ограничен!(10м)", source) local posX, posY, posZ = getElementPosition( source ) for i, thePlayer in ipairs( getElementsByType( 'player' ) ) do local tarX, tarY, tarZ = getElementPosition( thePlayer ) if not(source == thePlayer) then local distance = getDistanceBetweenPoints3D ( posX, posY, posZ, tarX, tarY, tarZ ) if (distance > 10) then --- ключевой код ----------------------------------------------- setPlayerVoiceIgnoreFrom(thePlayer, source) setPlayerVoiceIgnoreFrom(source, thePlayer) else setPlayerVoiceBroadcastTo(source, thePlayer) setPlayerVoiceBroadcastTo(thePlayer, source) -------------------------------------------------------------------- end end end end ) хотя, честно говоря, это мона делать и в таймере. Ну потому что прямо во время разговора игрок может подойти ближе к кому-то, а его голос станет слышен, рядом стоящему игроку, только, если он снова нажмет кнопку разговора. Хотя это все теория (: Link to comment
sir135 Posted November 22, 2011 Author Share Posted November 22, 2011 Разработчики откликнитесь, похоже нам с мастером не получится разрешить эту проблему. Теперь происходит эффект мута(mute) "игроков-источников"(source players)! Думаю, функция setPlayerVoiceIgnoreFrom() это и делает. Есть ли функция, обратная этой по свойствам? Link to comment
MX_Master Posted November 22, 2011 Share Posted November 22, 2011 ну можно еще попробовать в ней вместо второго параметра указывать - nil, тогда игрок (первый аргумент) будет снова слышать всех Link to comment
sir135 Posted November 22, 2011 Author Share Posted November 22, 2011 Попробую и отпишусь, спасибо за совет. Link to comment
sir135 Posted November 25, 2011 Author Share Posted November 25, 2011 (edited) Эффект тот-же, если можешь напиши разработчикам. Была еще проблема, что передавалось только одному человеку в радиусе, добавил сферу чтоб собрать всех людей в радиусе. Вот смотри что получилось. addEventHandler("onPlayerVoiceStart", root, function() outputChatBox("Внимание;- голосовой чат ограничен!(10м)", source) voice_dist = 10 sourX, sourY, sourZ = getElementPosition( source ) for i, thePlayer in ipairs( getElementsByType( 'player' ) ) do tarX, tarY, tarZ = getElementPosition( thePlayer ) if not(source == thePlayer) then distance = getDistanceBetweenPoints3D ( sourX, sourY, sourZ, tarX, tarY, tarZ ) if (distance > voice_dist) then setPlayerVoiceIgnoreFrom(thePlayer, source) setPlayerVoiceIgnoreFrom(source, thePlayer) else voiceSphere = createColSphere( sourX, sourY, sourZ, voice_dist ) nearbyPlayers = getElementsWithinColShape( voiceSphere, "player" ) destroyElement( voiceSphere ) for index, nearbyPlayer in ipairs( nearbyPlayers ) do setPlayerVoiceIgnoreFrom(thePlayer, nil) setPlayerVoiceIgnoreFrom(source, nil) setPlayerVoiceBroadcastTo(source, nearbyPlayer) setPlayerVoiceBroadcastTo(nearbyPlayer, source) end end end end end ) Или если у тебя есть еще идея,- пиши.... Edited November 25, 2011 by Guest Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now