MX_Master Posted November 1, 2011 Share Posted November 1, 2011 Локальные переменные одного скрипта ресурса не доступны другим скриптам этого же ресурса (поэтому у них в любых скриптах могут быть одинаковые имена). А вот глобальные переменные, созданные любым скриптом ресурса - доступны всем остальным скриптам ресурса. Стессна, серверные переменные не видны клиентским скриптам и наоборот. Link to comment
_Dark_ Posted November 1, 2011 Share Posted November 1, 2011 Итак, если у меня есть один файл ресурса: x = 5 y = 10 то во втором файле, значение переменной x будет равно 5, а y 10. А если я сделаю так: local x = 5 local y = 10 то во втором файле, если я им предварительно не присвою значение, оба будут nil. Я правильно понял? Link to comment
MX_Master Posted November 1, 2011 Share Posted November 1, 2011 Во втором файле, после создания этих локальных переменных, везде будут читаться/изменяться уже не глобальные, а эти локальные значения. Но это не значит, что нельзя прочесть/изменить эти глобальные переменные. Все глобальные переменные хранятся в таблице _G и, чтобы прочесть/изменить глобальную переменную "x", нужно юзать ее имя так _G['x'] -- или _G.x или _G["x"] Link to comment
_Dark_ Posted November 1, 2011 Share Posted November 1, 2011 Все, понял, спасибо большое! Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Я вот тут вот не совсем понял как работать с маркерами. Допустим мне нужно создать 5 маркеров, что бы при входе в них выполнялось одно действие, и еще 5 маркеров, что бы при входе в них выполнялось другое действие. Как это сделать? Не буду же я делать так: local marker1= createMarker( 376.870, -2241.505, 44.539, "corona", 2, 0, 255, 0 ) local marker2= createMarker( 372.126, -2480.029, 45.837, "corona", 2, 0, 255, 0 ) addEventHandler( "onPlayerMarkerHit", marker1, функция) addEventHandler( "onPlayerMarkerHit", marker2, функция) -- Функция одинаковая Link to comment
Nodward_Nichrome Posted November 2, 2011 Share Posted November 2, 2011 1 вариант local mark1= createMarker ( 2, 2, 2, "cylinder", 1.5, 255, 255, 0, 170 ) local mark2= createMarker ( 2, 2, 2, "cylinder", 1.5, 255, 255, 0, 170 ) function MarkerHit ( hitPlayer, matchingDimension ) if source == mark1 then -- действие при входе на 1 маркер elseif source == mark2 then -- действие при входе на 2 маркер end end addEventHandler ( "onClientMarkerHit", getRootElement(), MarkerHit ) 2 вариант local mark1= createMarker ( 2, 2, 2, "cylinder", 1.5, 255, 255, 0, 170 ) local mark2= createMarker ( 2, 2, 2, "cylinder", 1.5, 255, 255, 0, 170 ) function MarkerHit1 ( hitPlayer, matchingDimension ) -- действие при входе на 1 маркер end addEventHandler ( "onClientMarkerHit", mark1, MarkerHit1 ) function MarkerHit2 ( hitPlayer, matchingDimension ) -- действие при входе на 2 маркер end addEventHandler ( "onClientMarkerHit", mark2, MarkerHit2 ) Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 local myMarkers = { createMarker( 0, 0, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 2, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 4, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 6, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 8, 4, 'cylinder', 1, 255, 0, 0, 150 ) } function PlayerMarkerHit( markerHit, matchingDimension ) for k, marker in ipairs(myMarkers) do if marker == markerHit then функция end end end addEventHandler( "onPlayerMarkerHit", root, PlayerMarkerHit ) Это правильно? Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 1 вариант А как тогда сделать, если у меня будет тысяча маркеров? Придется перебирать всю тысячу? Link to comment
Kenix Posted November 2, 2011 Share Posted November 2, 2011 Ты имелл ввиду если в любой маркер зайти ? addEventHandler( "onClientMarkerHit", root, function( ) -- ..... end ) Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Нет, не в любой. Допустим есть 5 маркеров зеленого цвета и 5 маркеров красного. Если я вхожу в любой из 5 маркеров зеленого цвета, должна выполняться одна и та же функция. Если я вхожу в любой из 5 маркеров красного цвета, должна выполняться одна и та же другая функция. Link to comment
Kenix Posted November 2, 2011 Share Posted November 2, 2011 Набросок -- пример local myMarkers = { createMarker( 0, 0, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 2, 4, 'cylinder', 1, 255, 0, 0, 150 ), createMarker( 0, 4, 4, 'cylinder', 1, 0, 255, 0, 150 ), createMarker( 0, 6, 4, 'cylinder', 1, 0, 255, 0, 150 ), createMarker( 0, 8, 4, 'cylinder', 1, 0, 255, 0, 150 ) } local markers = {} addEventHandler( "onPlayerMarkerHit", root, function( markerHit, matchingDimension ) if markerHit == markers.color( myMarkers,255,0,0 ) then -- ... elseif markerHit == markers.color( myMarkers,0,255,0 ) then -- ... end end ) function markers.color( t,colorCheck1,colorCheck2,colorCheck3 ) local colorCheck1,colorCheck2,colorCheck3 if not colorCheck1 then colorCheck1 = 0 end if not colorCheck2 then colorCheck2 = 0 end if not colorCheck3 then colorCheck3 = 0 end for i,v in pairs( t ) do local r,g,b,_ = getMarkerColor ( v ) if r == colorCheck1 then return v elseif g == colorCheck2 then return v elseif b == colorCheck3 then return v end return false end end Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Про цвета я образно сказал Что бы разделить маркеры на группы, но я цвета использовать разные не буду Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Короче, что я хочу. Есть: mymarker[1] = createMarker(bla-bla-bla) mymarker[2] = createMarker(bla-bla-bla) mymarker[3] = createMarker(bla-bla-bla) mymarker[4] = createMarker(bla-bla-bla) Надо чтобы: Если игрок встал в маркер marker[1] или marker[2], то должна выполниться ф-ия function1, а если в marker[3] или marker[4], то function2. Только я не хочу после каждого маркера делать так: addEventHandler( "onPlayerMarkerHit", mymarker[1], function1) addEventHandler( "onPlayerMarkerHit", mymarker[2], function1) addEventHandler( "onPlayerMarkerHit", mymarker[3], function2) addEventHandler( "onPlayerMarkerHit", mymarker[4], function2) Значит надо циклом перебрать и проверить на какой маркер игрок встал. Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Вот есть код: local Markers1 = {} local Markers2 = {} Markers1[1] = createMarker(2120, 928.79, 9.80) Markers2[1] = createMarker(2120.89, 917.79, 9.80) function markerHit(hitPlayer, matchingDimension) for index,markers in pairs(Markers1) do if (source == markers) then --[[Маркер, на который встал игрок из таблицы Markers1 Значит, выполним функцию function1()]] end end for index,markers in pairs(Markers2) do if (source == markers) then --[[Маркер, на который встал игрок из таблицы Markers2 Значит, выполним функцию function2()]] end end --Получается, что нужно создавать несколько циклов! Это правильно или есть более лучший способ? end addEventHandler ( "onClientMarkerHit", getRootElement(), markerHit ) Создаем одну таблицу для одной группы маркеров, а потом когда игрок наступает на маркер, перебираем все маркеры из таблицы и проверяем совпадает ли какой-то с тем, на который игрок наступил. Но тогда, если у меня будет 10 групп маркеров, то нужно делать 10 циклов. Что-то мне подсказывает, что это не совсем правильно. Link to comment
StUNt71 Posted November 2, 2011 Share Posted November 2, 2011 Можно для маркера сделать так: local marker = createMarker(...) setElementData(marker, "mode", 1) marker = createMarker(...) setElementData(marker, "mode", 2) И в событие function functionName(...) if getElementData(source, "mode") == 1 then -- code elseif getElementData(source, "mode") == 2 then -- code end end Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Можно для маркера сделать так: Точно такая же идея пришла. Сделаю так наверно... Link to comment
_Dark_ Posted November 2, 2011 Share Posted November 2, 2011 Вопрос решил без setElementData(...) Я прописал нужную мне информацию маркеров прямо в .map файле, а потом уже вытаскиваю их через getElementData(...) и сравниваю с тем, что мне нужно. Link to comment
_Dark_ Posted November 3, 2011 Share Posted November 3, 2011 (edited) function checkMarkerMode(hitElement, matchingDimension) local markermode = getElementData(source, "mode") if markermode == "gas station" then local element = getElementType(hitElement) if(element == "vehicle") then local player = getVehicleOccupant(element) outputChatBox("Это заправка, епт!!!", player) end end end addEventHandler("onMarkerHit", getRootElement(), checkMarkerMode) Почему пишет WARNING: Bad argument @ 'getVehicleOccupant' если заехать на маркер на автомобиле? И почему пишет всем игрокам? Ведь должно только водителю? Edited November 3, 2011 by Guest Link to comment
MX_Master Posted November 3, 2011 Share Posted November 3, 2011 function checkMarkerMode(hitElement, matchingDimension) local markermode = getElementData(source, "mode") if markermode == "gas station" then local element = getElementType(hitElement) if(element == "vehicle") then local player = getVehicleOccupant(hitElement) outputChatBox("Это заправка, епт!!!", player) end end end addEventHandler("onMarkerHit", getRootElement(), checkMarkerMode) Link to comment
StUNt71 Posted November 4, 2011 Share Posted November 4, 2011 Вот у меня есть gui-window, если я на него прикреплю конпки, а после gui-window удалю через destroyElement, кнопки тоже удалятся? Ну и все что прикреплено было? Link to comment
TEDERIs Posted November 4, 2011 Share Posted November 4, 2011 Вот у меня есть gui-window, если я на него прикреплю конпки, а после gui-window удалю через destroyElement, кнопки тоже удалятся? Ну и все что прикреплено было? Правильно, все дочерние элементы удаляются вместе с родительским. Link to comment
_Dark_ Posted November 4, 2011 Share Posted November 4, 2011 Вот у меня есть gui-window, если я на него прикреплю конпки, а после gui-window удалю через destroyElement, кнопки тоже удалятся? Ну и все что прикреплено было? Точно так же, как если скрыть окно в котором есть другие gui элементы привязанные к нему. Они тоже скроются. Link to comment
_Dark_ Posted November 4, 2011 Share Posted November 4, 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