PrototypeX Posted November 22, 2016 Share Posted November 22, 2016 Всем привет, допустим есть элементы, которых не мало и они создаются до входа игроков на сервер. На них я заменяю текстуру (маловесную, около 30 кб). Которая подгружается и генерируется на Web-сервере. Понятное дело что заменять надо на Клиентской стороне, с помощью: dxSetShaderValue() и engineApplyShaderToWorldTexture() И вот, при тесте сервера, при онлайне выше 20 человек и кол-ва элементов около 50-100 с заменнённой текстурой, при входе игроков наблюдаются провисания ФПС и кружок подгрузки у Всех игроков на сервере, потому что при входе нового игрока я заного подгружаю все текстуры на эти элементы, с помощью: for _,v in pairs(getElementsByType("vehicle")) do Как решить эту проблему? Как закрепить текстуры в глобальном мире на серверной строне, если это возможно? Или подскажите аналогию пожалуйста, если знаете как это реализовать без подобных нерациональных нагрузок. Link to comment
obuhhh Posted November 22, 2016 Share Posted November 22, 2016 (edited) Потому что скачивать текстуру надо один раз. И применять её только для входящего игрока, а не каждому наново. Игрок заходит, сервер это узнает, сервер запрашивает картинку у веб-сервиса, и отдает её лишь одному игроку. Я так понял у Вас хендлер повешен на root, что и вызывает повторную подгрузку у всех игроков. -- server addEventHandler('onPlayerJoin', root, function() local tex = getTexFromWebServer() triggerClientEvent('onServerSendTex', source, tex) -- второй аргумент - source - кому дергать этот триггер. -- Т.е. тому игроку, кторый только что зашел на сервер. -- Если указать root, то дернет триггер у всех клиентов. end) -- client addEvent('onServerSendTex', true) addEventHandler('onServerSendTex', root, function( tex ) applyTex...(tex, ...) end) Edited November 22, 2016 by obuhhh Link to comment
TheNormalnij Posted November 22, 2016 Share Posted November 22, 2016 @obuhhh, твой код не будет работать, так как при onPlayerJoin клиент мог не стартовать все ресурсы. При старте ресурса на клиенте слать триггер на сервер( или не слать, если вы кэшируйте ), с сервера уже картинку на клиент. Можно использовать более специализированную функцию для этого triggerLatentClientEvent Link to comment
obuhhh Posted November 22, 2016 Share Posted November 22, 2016 (edited) 8 minutes ago, TheNormalnij said: @obuhhh, твой код не будет работать, так как при onPlayerJoin клиент мог не стартовать все ресурсы. При старте ресурса на клиенте слать триггер на сервер( или не слать, если вы кэшируйте ), с сервера уже картинку на клиент. Можно использовать более специализированную функцию для этого triggerLatentClientEvent Таки да, не учел. Но мой и не должен был работать. Отвечал, дабы указать скорее на ошибку, а не дать готовый код. Еще интересует каким образом можно контактировать с внешним веб-сервером? Или я что-то неверно понял? Edited November 22, 2016 by obuhhh Link to comment
PrototypeX Posted November 23, 2016 Author Share Posted November 23, 2016 Здорово, вы мне очень помогли своим ответом, я попытаюсь реализовать, о результате сообщю позже. Спа-си-бо за наводку, второй день голову ломаю! 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