Jump to content

Возможен ли поиск по массиву?


Recommended Posts

Возможно ли реализовать поиск по массиву?

Примерно что я хочу сделать:

При заходе на маркер пишет определенное сообщение, которое записанно в таблице.

Вот код таблицы:

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
Вот код таблицы:
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

А можно ли сделать, что бы текст разный был?

Ну тоесть подпункты какие нибудь, с разными выражениями, а оттуда рандомно выбирается текст...

Может как-то так?

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

Хоть это и не моя стихия, но что-то я тут порандомил и вывел

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
Хоть это и не моя стихия, но что-то я тут порандомил и вывел
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

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
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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...