Как сделать заморозку в samp
Мануал Исправление падений под текстуры в интерьерах
Richie56
Изучающий
Каждый кто ставил интерьеры из динамических объектов в моды, сталкивался с проблемой, когда игрок проваливается под текстуры после телепорта в интерьер.
Многие просто начали ставить заморозку игрока на некоторое время, пока не загрузятся объекты, но такое решение доставляет массу неудобств игрокам, и часто раздражало.
Крупные проекты, и просто смышлёные ребята смекнули что загружаться обычному CreateObject не нужно, он и так загружен с момента коннекта игрока, и просто меняли все объекты пола на CreateObject. Но зачастую этих самых объектов пола достаточно много, от чего, и потом streamer не скажет спасибо.
Этот include будет просто создавать 1 объект (CreateObject) под ногами персонажа в момент телепорта, видно его не будет, именно он не даст проваливаться игроку пока интерьер загружается.
Подключать include после streamer, желательно в конце, пример:
DeIMoS
Заблокирован
Так а для чего тебе весь пол? Для того, чтоб игрок не провалился, в CreateObject достаточно перевести лишь тот объект, над которым игрок и будет спавниться. В итоге получится то же, что и у тебя, только без лишнего объекта.
То же самое, кстати, и для объектов, на которые транспорт спавнится, следует делать (создавать их через CreateObject), ибо как бы вы не заморачивались с дальностью прорисовки или приоритетностью, даже у игроков с хорошим интернетом эти автомобили будут проваливаться под текстуры в 1-ом из 3-х случаев прогрузки.
А твой инклуд будет довольно бессмысленным в случае, если у меня двухэтажный интерьер и я решу заспавнить игрока на втором этаже. С большей вероятностью твой объект для фикса просто закроет проход или уменьшит высоту потолка на первом этаже
Richie56
Изучающий
Так а для чего тебе весь пол? Для того, чтоб игрок не провалился, в CreateObject достаточно перевести лишь тот объект, над которым игрок и будет спавниться. В итоге получится то же, что и у тебя, только без лишнего объекта.
То же самое, кстати, и для объектов, на которые транспорт спавнится, следует делать (создавать их через CreateObject), ибо как бы вы не заморачивались с дальностью прорисовки или приоритетностью, даже у игроков с хорошим интернетом эти автомобили будут проваливаться под текстуры в 1-ом из 3-х случаев прогрузки.
А твой инклуд будет довольно бессмысленным в случае, если у меня двухэтажный интерьер и я решу заспавнить игрока на втором этаже. С большей вероятностью твой объект для фикса просто закроет проход или уменьшит высоту потолка на первом этаже
DeIMoS
Заблокирован
SelectDynamicObject + пара строк в OnPlayerSelectDynamicObject и поиск нужного объекта будет занимать считанные секунды. И весь код можно банально в FS вытащить, дабы подгружать его в любой мод и пользоваться им без проблем.
А можно даже и автоматическую замену реализовать, удаляя динамический объект и создавая поверх обычный. А для пущего эффекта можно данные об объекте сохранять в БД и при старте сервера выгружать данные, так же удаляя динамический объект и создавая статический.
И код маппинга страдать не будет, и не нужно никаких костылей придумывать.
Richie56
Изучающий
SelectDynamicObject + пара строк в OnPlayerSelectDynamicObject и поиск нужного объекта будет занимать считанные секунды. И весь код можно банально в FS вытащить, дабы подгружать его в любой мод и пользоваться им без проблем.
А можно даже и автоматическую замену реализовать, удаляя динамический объект и создавая поверх обычный. А для пущего эффекта можно данные об объекте сохранять в БД и при старте сервера выгружать данные, так же удаляя динамический объект и создавая статический.
И код маппинга страдать не будет, и не нужно никаких костылей придумывать.
DeIMoS
Заблокирован
У меня есть целый инклуд, в котором реализован самопальный редактор серверных объектов, где нечто подобное уже реализовано. Но я его ещё довожу до ума, поэтому пока релизить не хочу.
про это можно почитать.
Сама же MySQL никак не может влиять на эти данные, ибо она, собственно, хранит те данные, что пришли к ней с запросом. Искажения происходили, вероятнее всего, до того, как данные попали в запрос. Хотя может это дело в каком-то конкретном плагине, где была ошибка и я её не застал, но всё же
Richie56
Изучающий
У меня есть целый инклуд, в котором реализован самопальный редактор серверных объектов, где нечто подобное уже реализовано. Но я его ещё довожу до ума, поэтому пока релизить не хочу.
Эмм, что там не так сохранялось? Если ты про то, что тысячные доли сохранялись с искажением, то это дело не в БД, а в самом сервере. Точнее, это особенность вещественных чисел. Вот
про это можно почитать.
Сама же MySQL никак не может влиять на эти данные, ибо она, собственно, хранит те данные, что пришли к ней с запросом. Искажения происходили, вероятнее всего, до того, как данные попали в запрос. Хотя может это дело в каком-то конкретном плагине, где была ошибка и я её не застал, но всё же
Да там была проблема с mysql плагином от BlueG, в кокой то из новых версий фиксанули.
DeIMoS
Заблокирован
Хмм, можно подробнее?
Ну так их много чего раздражает: от читеров и багов, до администрации и обновлений, но какое до этого может быть дело, если адекватной альтернативы нет? От того, что ты дашь им возможность двигаться в непрогрузившемся интерьере, проблем может быть в разы больше, не говоря уже о том, что большое количество объектов самом по себе заставит подтормаживать игру при их прогрузке.
Просто нужно делать более умную заморозку, а не просто замораживать, например, на 3 секунды. В стримере ведь есть функции, которые позволяют узнать количество показанных игроку предметов. Так что же мешает телепортироваться раз в этот интерьер, узнать количество предметов, которое должно быть прогружено и потом, когда происходит телепорт игрока, замораживать его, запуская таймер, например, на 500 мс и проверять, загрузились ли все объекты или нет. Тогда у людей с хорошим интернетом и компьютером заморозка будет минимальная, при том, что и интерьер игрок увидит целиком, а не его кусок.
Richie56
Изучающий
Хмм, можно подробнее?
Ну так их много чего раздражает: от читеров и багов, до администрации и обновлений, но какое до этого может быть дело, если адекватной альтернативы нет? От того, что ты дашь им возможность двигаться в непрогрузившемся интерьере, проблем может быть в разы больше, не говоря уже о том, что большое количество объектов самом по себе заставит подтормаживать игру при их прогрузке.
Просто нужно делать более умную заморозку, а не просто замораживать, например, на 3 секунды. В стримере ведь есть функции, которые позволяют узнать количество показанных игроку предметов. Так что же мешает телепортироваться раз в этот интерьер, узнать количество предметов, которое должно быть прогружено и потом, когда происходит телепорт игрока, замораживать его, запуская таймер, например, на 500 мс и проверять, загрузились ли все объекты или нет. Тогда у людей с хорошим интернетом и компьютером заморозка будет минимальная, при том, что и интерьер игрок увидит целиком, а не его кусок.
Как я уже говорил, заморозка не вариант, заморозка бесит, я сделал фикс без заморозки, твоя идея с выбором объекта и записью его в бд хороша, но будут проблемы когда удаляешь интерьер за ненадобностью, допустим когда заменил на другой.
Для удаления со sqllite вообще отдельную прогу качать нужно, а большинство с трудом даже базу mysql импортирует.
В моем случае можно просто удалить 1 строчку, так же легкость в установке, и маленькая нагрузка, да её вообще нет.
Да это костыль, как всё в samp что не касается стандартных функций, тот же стример сам по себе костыль.
Та же заморозка после тп сама по себе костыль, далеко не всем нравится быть замороженным при входе особенно когда спешишь, или не хочешь тратить время, да и не всегда она спасает, бывали случаи когда замораживало но всё равно проваливался.
Скорее всего это было из за того что сервер не успевал замораживать.
Да и то что я даю им возможность двигаться в непрогрузившемся интерьере, ничего плохого не будет, в 90% случаях стены загрузятся ещё до того как ты до них добежишь.
«В идеале к каждому интерьеру должен быть свой подход со своими настройками», но мы на паблике, тут если ты выкладываешь свою работу, то будь добр сделать её универсальной.