Flaker Posted May 7, 2012 Share Posted May 7, 2012 Возможно ли реализовать поиск по массиву? Примерно что я хочу сделать: При заходе на маркер пишет определенное сообщение, которое записанно в таблице. Вот код таблицы: markers = { {"Marker1", 1212.222, -1932.142,1242.963,"TEXT"} {"Marker2", 1212.222, -1932.142,1242.963,"TEXT2"} } Ну маркеры создаются по координатам в таблице. Так вот, как сделать что бы при входе на маркер, определялось на какой маркер вошел игрок, и в зависимости от маркера выводило сообщение из массива? Вобщем, как определить в массиве столбец маркера, на который зашел игрок? P.S. Только не надо предлагать: if source == Marker2 then markers[2][2] Link to comment
Kenix Posted May 7, 2012 Share Posted May 7, 2012 Вот код таблицы: markers = { {"Marker1", 1212.222, -1932.142,1242.963,"TEXT"} {"Marker2", 1212.222, -1932.142,1242.963,"TEXT2"} } Это не верный код. После таблиц должно быть ',' или ';' local aMarkers = { { 1212.222, -1932.142, 1242.963, 'TEXT' }; { 1212.222, -1932.142, 1242.963, 'TEXT2' }; } function GetTextFromMarkerData( pMarker ) if isElement( pMarker ) and getElementType( pMarker ) == 'marker' then local nData = getElementData( pMarker, 'Marker:ID' ) if type( nData ) == 'number' then return aMarkers[ nData ][ 4 ] -- получаем текст из массива aMarkers. aMarkers[ номер индекса который вернёт дата Marker:ID ][ 4 ] end return false end return false end function OnMarkerHit( pElement ) if isElement( pElement ) and getElementType( pElement ) == 'player' and not isPedInVehicle( pElement ) then outputChatBox( 'ID) ' .. tostring( getElementData( source, 'Marker:ID' ) ) .. ' ,Text = ' .. tostring( GetTextFromMarkerData( source ) ) ) end end for n, a in ipairs( aMarkers ) do -- лупим массив aMarkers local pMarker = createMarker( a[1], a[2], a[3] ) -- создаём маркер setElementData( pMarker, 'Marker:ID', n ) -- задаём дату ида маркера ( из цикла получаем номер индекса ) addEventHandler( 'onMarkerHit', pMarker, OnMarkerHit ) -- добавляем обработчик end ? Link to comment
Flaker Posted May 7, 2012 Author Share Posted May 7, 2012 Воо, вроде то, что надо! Спасибо огромное) Link to comment
Flaker Posted May 7, 2012 Author Share Posted May 7, 2012 А можно ли сделать, что бы текст разный был? Ну тоесть подпункты какие нибудь, с разными выражениями, а оттуда рандомно выбирается текст... Может как-то так? markers = { {1212.222, -1932.142,1242.963,("TEXT1", "LOOL", "GL&HF")} {1212.222, -1932.142,1242.963,("TEXT2", "LOL", "GLHF")} } И еще, могу ли я создать маркер вот так: local markers = { {"first_marker",1212.222, -1932.142,1242.963,("TEXT1", "LOOL", "GL&HF")}; {"second_marker", 1212.222, -1932.142,1242.963,("TEXT2", "LOL", "GLHF")}; } markers[1][1] = createMarker( 123, 213, 321 ) markers[2][1] = createMarker( 123, 213, 321 ) или вот как: marker_[markers[1][1] ] = createMarker( 123, 213, 321 ) Можно так создавать? Link to comment
Flaker Posted May 10, 2012 Author Share Posted May 10, 2012 Народ, подскажите пожалуйста... Link to comment
_Vincent_ Posted May 10, 2012 Share Posted May 10, 2012 Хоть это и не моя стихия, но что-то я тут порандомил и вывел markers = { {1212.222, -1932.142,1242.963,{"TEXT1", "LOOL", "GL&HF","trolol","zzz"}}, {1212.222, -1932.142,1242.963,{"TEXT2", "LOL", "GLHF"}} } rn = math.random(#markers[1][4]) print(#markers[1][4]) print(markers[1][4][rn]) Рандом странный, вполне возможно, что кривой. Мб из кода выше вынесешь что-то, мне, лично, было проблемно уловить, как вытащить именно нужный элемент из вложенных таблиц. Все же надеюсь на помощь скриптеров, ибо у меня знаний синтаксиса ноль)) Link to comment
Flaker Posted May 10, 2012 Author Share Posted May 10, 2012 Хоть это и не моя стихия, но что-то я тут порандомил и вывел markers = { {1212.222, -1932.142,1242.963,{"TEXT1", "LOOL", "GL&HF","trolol","zzz"}}, {1212.222, -1932.142,1242.963,{"TEXT2", "LOL", "GLHF"}} } rn = math.random(#markers[1][4]) print(#markers[1][4]) print(markers[1][4][rn]) Рандом странный, вполне возможно, что кривой. Мб из кода выше вынесешь что-то, мне, лично, было проблемно уловить, как вытащить именно нужный элемент из вложенных таблиц. Все же надеюсь на помощь скриптеров, ибо у меня знаний синтаксиса ноль)) А почему ты задаешь math.random странно как-то, тут же только цифра нужна вроде. Тоесть если print(markers[1][4][1]) будет работать, то можно math.random задать так: rn = math.random(1,4) Link to comment
Kenix Posted May 10, 2012 Share Posted May 10, 2012 Vincent правильный код написал. local aMarkers = { [1] = { [1] = 1212.222, [2] = -1932.142, [3] = 1242.963, [4] = { [1] = "TEXT1", [2] = "LOOL", [3] = "GL&HF", [4] = "trolol", [5] = "zzz" } }; [2] = { [1] = 1212.222, [2] = -1932.142, [3] = 1242.963, [4] = { [1] = "TEXT2", [2] = "LOL", [3] = "GLHF" } }; } local nIndex = math.random( #aMarkers[1][4] -- Получаем кол-во индексов в массиве. В данном случае это 5 ) -- берём случайное число с 1 до кол-ва индексов в массиве. В данном случае это 5 print( aMarkers[1][4][ nIndex ] ) Добавил индексы. ( чтобы понятнее было ) Link to comment
Flaker Posted May 10, 2012 Author Share Posted May 10, 2012 Vincent правильный код написал. local aMarkers = { { 1212.222, -1932.142, 1242.963, { "TEXT1", "LOOL", "GL&HF","trolol","zzz" } }; { 1212.222, -1932.142, 1242.963, { "TEXT2", "LOL", "GLHF" } }; } local nIndex = math.random( #aMarkers[1][4] -- Получаем кол-во индексов в массиве. В данном случае это 5 ) -- берём случайное число с 1 до кол-ва индексов в массиве. В данном случае это 5 print( aMarkers[1][4][ nIndex ] ) 1) А как вывести не рандомный текст? Так?: print(aMarkers[1][4][3]) 2) Как можно сделать проверку на наличие какого-то определенно текста? Link to comment
Kenix Posted May 10, 2012 Share Posted May 10, 2012 1) А как вывести не рандомный текст? Так?: print(aMarkers[1][4][3]) Да. 2) Как можно сделать проверку на наличие какого-то определенно текста? Через цикл прошарь массив. local aMarkers = { [1] = { [1] = 1212.222, [2] = -1932.142, [3] = 1242.963, [4] = { [1] = "TEXT1", [2] = "LOOL", [3] = "GL&HF", [4] = "trolol", [5] = "zzz" } }; [2] = { [1] = 1212.222, [2] = -1932.142, [3] = 1242.963, [4] = { [1] = "TEXT2", [2] = "LOL", [3] = "GLHF" } }; } for n, s in ipairs( aMarkers[1][4] ) do if s == 'zzz' then print( 'found = ', n, ' (index)' ) -- found = 5 (index) 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