Arisu Posted February 8, 2011 Share Posted February 8, 2011 Всем привет, я добрался до форума. Сразу к сабжу) имеется такой несложный клиентсайд код function onStreamIn() if getElementType(source) == "vehicle" then -- проверили, чо загрузилось - машина? if countVehiclePassengers(source) > 0 then -- машинка с пассажирами --addEventHandler("onClientVehicleExit", source, onVehicleExit) else -- машинка без пассажиров local blip = createBlipAttachedTo(source, 0, 2, 160, 160, 160, 255, -1) -- создали иконку function onStreamOut () if blip then destroyElement(blip) end removeEventHandler("onClientElementStreamOut", source, onStreamOut) -- функция отцепляет себя end addEventHandler("onClientElementStreamOut", source, onStreamOut) -- прицепили функцию на событие исчезновения машины end end end addEventHandler("onClientElementStreamIn", theRes, onStreamIn) суть такая (если лень разбирать эту путаницу). при появлении машин, к ним прикрепляется иконка радара; назначается эвент, что при исчезании с нее исчезнет иконка а сам этот эвент открепляется. в принципе, код работает нормально, иконки появляются и исчезают, но destroyElement сыплет варнинги 'bad element pointer @ destroyElement()'. мелочь, а противно, и не могу понять где. даже с проверкой 'if blip'. конкретно происходит так: - спавнюсь в какой-нибудь точке с машинами - иконки создались - телепортируюсь куда-нибудь - иконки исчезли - телепортируюсь обратно к первой точке - иконки снова создались - снова куда-нибудь, иконки исчезли и в дебаг-чат высыпались баги. пс. сильно палками не бейте - только начинаю разбираться в мта Link to comment
MX_Master Posted February 8, 2011 Share Posted February 8, 2011 посмори вот этот уникальный скрипт иконок для транспорта, просмотри код и задай вопросы, твой вариант пока очень сырой Link to comment
Aibo Posted February 8, 2011 Share Posted February 8, 2011 у тебя blip — локальная переменная, и указатель на сам блип нигде не сохраняется после завершения работы функции. ну мне так каатса. Link to comment
Arisu Posted February 8, 2011 Author Share Posted February 8, 2011 МХ_Мастер, я бы поюзал твой скрипт, но мне в данный момент интересно написать свой, в целях самообразования. Попрактиковаться в создании несложных штук. Свой велосипед, велосипед, но свой. Чтобы понять как работает каждая из строчек кода. К тому же, не люблю брать чужой код и расковыривать его на куски. Айбофорзен, вряд ли. Блип хоть и локальная, но в функцию она передается, иначе бы иконки просто не удалялись. Тут баг в чем, иконки удаляются нормально как и задумано, но варнинги непонятно откуда-то лезут. Да кстати, забыл сказать, глобальную таблицу с иконками не хочу делать потому извращаюсь Link to comment
MX_Master Posted February 8, 2011 Share Posted February 8, 2011 в моем скрипте хранятся ваще все иконки от найденного за время путешествия, транспорта. Кто-то может подумать, что это неправильно и надо, как только они выходят из радиуса видимости - их удалить. Это ты и хочешь сделать. Кстати, я не сказал юзать мой скрипт, посмори какие события используются и как. И как ты хочешь потом удалить иконку, если не знаешь ее ИДа ? Глобальную таблицу все таки придется сделать. Хотя я тут вспомнил, что есть функция getAttachedElements. Думаю, с помощью нее, мона узнать о иконке, прилепленной к транспорту и ее удалить. Link to comment
Arisu Posted February 8, 2011 Author Share Posted February 8, 2011 Ну хорошо, посмотрю завтра. Просто сейчас читаю раздел уже с телефона. Если хранить и отображать все иконки, то игра на моем модике с 1800 машинами (украденных из сампа, да), при нажатии на Ф11, начинает "немного" тормозить, превращается в слайдшоу) Link to comment
MX_Master Posted February 8, 2011 Share Posted February 8, 2011 у меня 2800 тачек сейчас по всему СА, все зависит от кучности, все должно быть максимально равномерно, ну ты понял Link to comment
Arisu Posted February 8, 2011 Author Share Posted February 8, 2011 Ладно, черт с ним, хватит со скриптингом на сегодня. Мозг спать хочет. Завтра авось просветление придет с утра. Напоследок еще вопрос, вот такой способ, как я внутри одной функции объявляю другую - не опасно ли чрезмерным потреблением памяти, или рекурсией? Просто всех тонкостей луа не знаю Link to comment
MX_Master Posted February 8, 2011 Share Posted February 8, 2011 канеш опасно, сервер или клиент может взорваться уже на 32-ом рекурсивном вызове Link to comment
Aibo Posted February 8, 2011 Share Posted February 8, 2011 ну и откуда ты знаешь, что именно нужный блип в этой переменной? с 1 блипом это работает без глюков. больше 1-го — начинается путаница и bad argument. может я тупой, но мне не нравится эта система, когда функция вложена в другую функцию, зависит от ее переменных, а вызывается внешним эвентом. если вынести onStreamOut() отдельно, а блипы сохранять, допустим, в element data машины — все нормально удаляется и никаких ошибок. Link to comment
MX_Master Posted February 8, 2011 Share Posted February 8, 2011 пока с кентом резались в бильярд через инет, написал я вот этот срам addEventHandler( "onClientElementStreamIn", getRootElement(), function() if getElementType(source) ~= "vehicle" then return end local attEls = getAttachedElements(source) if type(attEls) ~= "table" then return end for i,e in ipairs(attEls) do if getElementData(e, "vehicleIcon") then return end end local blip = createBlipAttachedTo( source, 0, 1, 255, 255, 255, 50, 0, 200 ) setElementData( blip, "vehicleIcon", true, false ) end ) function vIcons_destroyAttachedIcon ( ) if getElementType(source) ~= "vehicle" then return end local attEls = getAttachedElements(source) if type(attEls) ~= "table" then return end for i,e in ipairs(attEls) do if getElementData(e, "vehicleIcon") then destroyElement(e) end end end addEventHandler( "onClientElementStreamOut", getRootElement(), vIcons_destroyAttachedIcon ) addEventHandler( "onClientElementDestroy", getRootElement(), vIcons_destroyAttachedIcon ) addEventHandler( "onClientResourceStart", getResourceRootElement(), function() local vList = getElementsByType( "vehicle", getRootElement(), true ) local blip for i,v in ipairs(vList) do blip = createBlipAttachedTo( v, 0, 1, 255, 255, 255, 50, 0, 200 ) setElementData( blip, "vehicleIcon", true, false ) end end ) по прежнему считаю, что локальный для скрипта массив будет куда лучше Link to comment
Arisu Posted February 9, 2011 Author Share Posted February 9, 2011 Да, так и решил вынести в массив. Вот еще вопрос, если у меня будет такой код -- player - кто-то из игроков someArray[player] = 'test' -- player выходит из игры -- что станет с someArray[player]? она улетит в сборщик мусора, или станет утечкой памяти? Link to comment
MX_Master Posted February 9, 2011 Share Posted February 9, 2011 риальнЭ, каждый создает тему лично для себя, чтобы там спрашивать только о чем-то своем. Название темы придумывается какое-ньть загадочное и фперет. Так не пойдет. 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