N1kS Posted October 19, 2013 Share Posted October 19, 2013 function destroyGUI() if (GUI.window[1]) then destroyElement(GUI.window[1]); showCursor(false); end end Имеется данная функция. Она выполняется в 2 случаях: если игрок жмет guiButton "нет" или покидает маркер. Все работает, но проблема в следующем: когда окно закрыто с помощью кнопки "нет" и игрок покидает маркер, то в дебаг выводиться сообщением, что поинтер функции destroyElement равен нулю. Подскажите пожалуйста, мб проверку неправильную сделал. Работать то все работает, но хотелось бы избежать мусора в дебаге. Link to comment
Kernell Posted October 20, 2013 Share Posted October 20, 2013 После destroyElement переменную надо удалить, иначе толку от твоей проверки на второй строке, если в переменной всё равно остаётся указатель на невалидный userdata Link to comment
N1kS Posted October 20, 2013 Share Posted October 20, 2013 local marker = createMarker(542.09765625, -1292.869140625, 17.2421875); function markerParams(source) setElementVisibleTo(marker, source, false) outputChatBox("ydalen"); end addCommandHandler("qqqqq", markerParams); Не пропадает, хоть убей. Link to comment
N1kS Posted October 20, 2013 Share Posted October 20, 2013 destroyElement Нужно не уничтожить, а сделать невидимым. Link to comment
TheNormalnij Posted October 20, 2013 Share Posted October 20, 2013 уверены, что код серверный? Link to comment
DakiLLa Posted October 20, 2013 Share Posted October 20, 2013 Сначала сделайте его видимым setElementVisibleTo(marker, source, true) а потом скройте: setElementVisibleTo(marker, source, false) Link to comment
N1kS Posted October 20, 2013 Share Posted October 20, 2013 Сначала сделайте его видимым setElementVisibleTo(marker, source, true) а потом скройте: setElementVisibleTo(marker, source, false) Помогло, спасибо. Link to comment
N1kS Posted October 20, 2013 Share Posted October 20, 2013 Еще вопрос: имеется бинд функции под кнопку Enter. Хочу предотвратить попытку сесть в ближайшее авто, после использование кнопки. Скрипт на клиенте выполняется. Делаю, не помогает. addEventHandler("onClientVehicleStartEnter", root, cancelEvent); Link to comment
Jonathan.P Posted October 20, 2013 Share Posted October 20, 2013 А чего ты ещё ожидал получить от set функции?This function sets the camera rotation of a ped.Returns true if the camera rotation was changed, false otherwise. Или тебя смущает, что она возвращает true на локального игрока? (тогда какой смысл понимать панику по этому поводу?) Т.е. на игроке эта функция не работает? Т.е. в МТА камеру никак не повернуть? (setCameraMatrix только фиксирует) Link to comment
Kernell Posted October 20, 2013 Share Posted October 20, 2013 Т.е. на игроке эта функция не работает? Т.е. в МТА камеру никак не повернуть? (setCameraMatrix только фиксирует) Я очень давно писал патч (#0006946), который поворачивает камеру не фиксируя её. Но проблема в том, что команда МТА очень капризная и в то же время ленивая, когда им что-то не нравится, они сами исправлять что либо не хотят (даже самые тривиальные вещи). По этой причине в МТА до сих пор существуют старые баги, типа разсинхрона дверей и прочих мелких, но не приятных вещей. Link to comment
Jonathan.P Posted October 21, 2013 Share Posted October 21, 2013 Синхронизируется ли функция setVehicleAdjustableProperty с сервером?(нет возможности проверить) И вообще, на будущее: если функция клиент онли, то обязательно ли она не синхронизируется? Link to comment
Kenix Posted October 21, 2013 Share Posted October 21, 2013 Есть исключения createProjectile Link to comment
N1kS Posted October 21, 2013 Share Posted October 21, 2013 Подскажите пожалуйста, имеется массив, необходимо создать функцию удаления всех элементов и обнулить их. Все элементы удаляются, но не обнуляются. local GUI = { button = {}, checkbox = {}, window = {}, label = {}, edit = {}, label = {} }; function destroyGUI() for i, v in pairs(GUI) do for i, v in pairs(v) do if(v)then destroyElement(v); v = nil; end end end showCursor(false); end С чего я взял, что они не обнуюятся? Т.к есть эвент: addEvent("destroyQuestionGUI", true); addEventHandler("destroyQuestionGUI", getRootElement(), destroyGUI); Данный эвент тригериться с сервера, когда игрок покидает маркер и после того, как я покидаю маркер получаю в дэбаг ошибку: Bad 'element' pointer @ 'destroyElement'(1) --В нашем случае номер строки с ошибкой: 15. Link to comment
TheNormalnij Posted October 22, 2013 Share Posted October 22, 2013 Вы уничтожаете локальную переменную, а не определенное поле таблицы. Link to comment
Jonathan.P Posted October 24, 2013 Share Posted October 24, 2013 Что за дела?? Это чертовщина какая-то... Прописал в карте одного из ресурсов пикапы: <pickup type="custom" model="1239" posX="0" posY="0" posZ="5" /> Всё, нормально, при заходе на пикап, пикап не берётся, срабатывает евент onClientPickupHit. Всё ОК. Создал пикапы в карте другого ресурса. Код тот же. Так эти пикапы чудным образом подбираются, а onClientPickupHit не срабатывает! Разница лишь в том что в в первом случае я присваиваю уже в скрипте пикапам интерьеры и 2000-е дименшоны. И всё! Почему так вдруг, в одном ресурсе работает нормально, в другом - совсем по другому? Как исправить? Мне до сих пор кажется, что дело в моей невнимательности, но я уже что только не пробывал. P.S.: в карте организованы небольшие ветки, также небольшие EDF. Link to comment
TheNormalnij Posted October 24, 2013 Share Posted October 24, 2013 type="custom" Вот и не берется. Link to comment
Jonathan.P Posted October 25, 2013 Share Posted October 25, 2013 type="custom"Вот и не берется. Ты кажется не читал мой пост. Мне и надо, чтоб не брался, так и должно быть. А почему в другом то ресурсе берется? Евент не срабатывает при взятии, издаётся звук взятия пикапа как в сингле. Пикап отображается нормально - информационной иконкой. Самое интересное, не помогает даже код: setPickupType(pickup, 3, 1239) setElementDimension(pickup, 0) setElementInterior(pickup, 0) который выполняется при запуске ресурса на стороне сервера. Link to comment
TheNormalnij Posted October 25, 2013 Share Posted October 25, 2013 так создавайте скриптом, а то будете угадывать Link to comment
Jonathan.P Posted October 25, 2013 Share Posted October 25, 2013 так создавайте скриптом, а то будете угадывать Как? createPickup(-178, -34, 4, 3, 1239) Всё равно берется. В обоих ресурсах Link to comment
TheNormalnij Posted October 25, 2013 Share Posted October 25, 2013 да, и пригвоздите к этому эвент. Link to comment
nikitafloy Posted October 25, 2013 Share Posted October 25, 2013 Каким способом можно создать одноразовый код для команды? Допустим, /mKey Sqfferq, т.е. можно создавать несколько таких кодов, но, после использования, они теряли актуальность. Link to comment
Kenix Posted October 25, 2013 Share Posted October 25, 2013 setElementData getElementData Link to comment
Jonathan.P Posted October 26, 2013 Share Posted October 26, 2013 Что за дела?? Это чертовщина какая-то...Прописал в карте одного из ресурсов пикапы: <pickup type="custom" model="1239" posX="0" posY="0" posZ="5" /> Всё, нормально, при заходе на пикап, пикап не берётся, срабатывает евент onClientPickupHit. Всё ОК. Создал пикапы в карте другого ресурса. Код тот же. Так эти пикапы чудным образом подбираются, а onClientPickupHit не срабатывает! Разница лишь в том что в в первом случае я присваиваю уже в скрипте пикапам интерьеры и 2000-е дименшоны. И всё! Почему так вдруг, в одном ресурсе работает нормально, в другом - совсем по другому? Как исправить? Мне до сих пор кажется, что дело в моей невнимательности, но я уже что только не пробывал. P.S.: в карте организованы небольшие ветки, также небольшие EDF. Что я понял: 1) Во втором ресурсе пикап НЕ берется, только если я его создам на клиентской стороне. Выходит что карта на этом ресурсе работает как серверная сторона, в то время как в первом ресурсе карта чудным образом работает как клиентская сторона(пикап НЕ берется) 2) Решить проблему, не удаляя пикапы из карты второго ресурса можно только отменив событие onPickupHit на серверной стороне. Пикап - кустомный(!). Сколько неясностей то в MTA. До злости. Link to comment
nikitafloy Posted October 27, 2013 Share Posted October 27, 2013 Некорректный код снизу, который я резал и исправлял по шаблонам. В целом, не получается изменить blip игрока. Дошел только до того, что он изменялся у всех подряд через определенное время. Радар-диско... local theplayerblip = getBlipAttachedTo(source) local blips = getElementsByType ( "blip" ) for blipK, blipV in ipairs ( blips ) do if getElementAttachedTo( blipV ) == thePlayer then if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Admin" ) ) then setPlayerNametagColor (source, 137, 0, 255) setBlipColor (theplayerblip, 137, 0, 255, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "SuperModerator" ) ) then setPlayerNametagColor (source, 255, 96, 0) setBlipColor (theplayerblip, 255, 96, 0, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Helper" ) ) then setPlayerNametagColor (source, 0, 128, 255) setBlipColor (theplayerblip, 0, 128, 255, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Garant" ) ) then setPlayerNametagColor (source, 255, 128, 0) setBlipColor (theplayerblip, 255, 128, 0, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Security" ) ) then setPlayerNametagColor (source, 0, 51, 255) setBlipColor (theplayerblip, 0, 51, 255, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "DT" ) ) then setPlayerNametagColor (source, 255, 0, 0) setBlipColor (theplayerblip, 255, 0, 0, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Donate" ) ) then setPlayerNametagColor (source, 255, 213, 0) setBlipColor (theplayerblip, 255, 213, 0, 255) elseif isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source )), aclGetGroup ( "Everyone" ) ) then setPlayerNametagColor (source, 255, 222, 0) setBlipColor (theplayerblip, 255, 222, 0, 255) end end end 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