onshowdialog for

Tango

Новичок
Автор темы
28
4
Версия MoonLoader
.026-beta
123:
  function sampev.onShowDialog(id, style, title, button1, button2, text)
  if mode == 3 and #myBuyArray > 0 then
    
    for i, data in ipairs(myBuyArray) do
      if mode == 3 and text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
        lua_thread.create(function ()
          wait(tw)
          sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
        end)
      end
    
      if mode == 3 and text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
        lua_thread.create(function ()
          wait(tw)
          sampSendDialogResponse(id, 1, nil, data[1])
        end)
      end

      if mode == 3 and title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
        lua_thread.create(function ()
          wait(tw)
                  local text = text:gsub('{......}', '')
          local text = text:gsub('%d.','')
          sampSendDialogResponse(id, 1, 0, nil)
        end)
      end

      if mode == 3 and text:find('Введите цену за товар') then
        lua_thread.create(function ()
          wait(tw)
          sampSendDialogResponse(id, 1, nil, data[3])
        end)
      end

      if mode == 3 and text:find('Введите количество и цену за один товар') then
        lua_thread.create(function ()
          wait(tw)
          sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
        end)
      end

    end
  end
end
Говнокод конечно, но как можно сделать правильно перебор массива myBuyArray в ивенте onshowdialog, ведь он постоянно обновляется и цикл for сбрасывает все значение, и получается, что одно и тоже делает
 

VRush

https://t.me/vrushscript
2,398
1,149
не понял шо ты хотел, но я немного укоротил код, проверь работает ли

Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
   if mode == 3 and #myBuyArray > 0 then
      lua_thread.create(function()
         for i, data in ipairs(myBuyArray) do
            
            wait(tw)

            if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
            end
        
            if text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, nil, data[1])
            end

            if title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               local text = text:gsub('{......}', '')
               local text = text:gsub('%d.','')
               sampSendDialogResponse(id, 1, 0, nil)
            end

            if text:find('Введите цену за товар') then
               sampSendDialogResponse(id, 1, nil, data[3])
            end

            if text:find('Введите количество и цену за один товар') then
               sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
            end

         end
      end)
   end
end
 
  • Нравится
Реакции: Tango

хуега)

РП игрок
Модератор
2,574
2,278
не понял шо ты хотел, но я немного укоротил код, проверь работает ли

Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
   if mode == 3 and #myBuyArray > 0 then
      lua_thread.create(function()
         for i, data in ipairs(myBuyArray) do
          
            wait(tw)

            if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
            end
      
            if text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, nil, data[1])
            end

            if title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               local text = text:gsub('{......}', '')
               local text = text:gsub('%d.','')
               sampSendDialogResponse(id, 1, 0, nil)
            end

            if text:find('Введите цену за товар') then
               sampSendDialogResponse(id, 1, nil, data[3])
            end

            if text:find('Введите количество и цену за один товар') then
               sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
            end

         end
      end)
   end
end
можно сделать одну общую проверку на длину массива (она оказывается есть, тогда остальные можно вообще убрать) и конструкцию с кучей проверкой на текст, лучше сделать через elseif
 
  • Нравится
Реакции: Sadow и Tango

Tango

Новичок
Автор темы
28
4
не понял шо ты хотел, но я немного укоротил код, проверь работает ли

Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
   if mode == 3 and #myBuyArray > 0 then
      lua_thread.create(function()
         for i, data in ipairs(myBuyArray) do
         
            wait(tw)

            if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
            end
     
            if text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               sampSendDialogResponse(id, 1, nil, data[1])
            end

            if title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
               local text = text:gsub('{......}', '')
               local text = text:gsub('%d.','')
               sampSendDialogResponse(id, 1, 0, nil)
            end

            if text:find('Введите цену за товар') then
               sampSendDialogResponse(id, 1, nil, data[3])
            end

            if text:find('Введите количество и цену за один товар') then
               sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
            end

         end
      end)
   end
end
Код укоротил, спасибо) но проблема осталась тажа, изза цикла for в ивенте onshowdialog - после конца цикла, он забывает значения, которые уже проверял
1677869527239.png
 

wojciech?

Известный
Проверенный
227
136
как-то так, но если ты захочешь его выставить снова тебе надо будет обнулить data[4]
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
   if mode == 3 and #myBuyArray > 0 then
      lua_thread.create(function()
         for i, data in ipairs(myBuyArray) do
            if not data[4] then
                wait(tw)

                if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
                   sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
                elseif text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
                   sampSendDialogResponse(id, 1, nil, data[1])
                elseif title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
                   local text = text:gsub('{......}', '')
                   local text = text:gsub('%d.','')
                   sampSendDialogResponse(id, 1, 0, nil)
                elseif text:find('Введите цену за товар') then
                   sampSendDialogResponse(id, 1, nil, data[3])
                elseif text:find('Введите количество и цену за один товар') then
                   sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
                   data[4] = true
                end
            end
         end
      end)
   end
end
 
  • Нравится
Реакции: Tango

Tango

Новичок
Автор темы
28
4
не пользуюсь им, так код чуть менее читабельный
312:
  if mode == 3 and #myBuyArray > 0 then
    lua_thread.create(function()
      for i, data in ipairs(myBuyArray) do
        if not data[4] then
          wait(tw)
          if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
            wait(tw)
            sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
          elseif text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
            wait(tw)
            sampSendDialogResponse(id, 1, nil, data[1])
          elseif title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
            wait(tw)
            local text = text:gsub('{......}', '')
            local text = text:gsub('%d.','')
            sampSendDialogResponse(id, 1, 0, nil)
          elseif text:find('Введите цену за товар') then
            wait(tw)
            sampSendDialogResponse(id, 1, nil, data[3])
            sampAddChatMessage(data[1], -1)
            data[4] = true
            jsonSave(json_file_mybuyarray,myBuyArray)
          elseif text:find('Введите количество и цену за один товар') then
            wait(tw)
            sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
          end
        end
      end

    end)
  end
После выделенной строки почему-то все елементы массива имеют true и через перебор циклом проходит только первый елемент

Может как-то можно подругому переделать задумку мою в коде??

как-то так, но если ты захочешь его выставить снова тебе надо будет обнулить data[4]
Lua:
function sampev.onShowDialog(id, style, title, button1, button2, text)
   if mode == 3 and #myBuyArray > 0 then
      lua_thread.create(function()
         for i, data in ipairs(myBuyArray) do
            if not data[4] then
                wait(tw)

                if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
                   sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
                elseif text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
                   sampSendDialogResponse(id, 1, nil, data[1])
                elseif title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
                   local text = text:gsub('{......}', '')
                   local text = text:gsub('%d.','')
                   sampSendDialogResponse(id, 1, 0, nil)
                elseif text:find('Введите цену за товар') then
                   sampSendDialogResponse(id, 1, nil, data[3])
                elseif text:find('Введите количество и цену за один товар') then
                   sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
                   data[4] = true
                end
            end
         end
      end)
   end
end
up

up

up
 
Последнее редактирование:

wojciech?

Известный
Проверенный
227
136
попробуй так


Lua:
local current_item = 1

function sampev.onShowDialog(id, style, title, button1, button2, text)
  if mode == 3 and #myBuyArray > 0 then
     lua_thread.create(function()
       local data = myBuyArray[current_item]
       if data and not data[4] then
         wait(tw)
        if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') then
          sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
        elseif text:find('Введите наименование товара, который хотите найти и выставить на скупку.') then
           sampSendDialogResponse(id, 1, nil, data[1])
        elseif title:find('Поиск товара') then
           sampSendDialogResponse(id, 1, 0, nil)
         elseif text:find('Введите цену за товар') then
           sampSendDialogResponse(id, 1, nil, data[3])
         elseif text:find('Введите количество и цену за один товар') then
           sampSendDialogResponse(id, 1, nil, data[2]..','..data[3])
           data[4] = true
           current_item = current_item + 1
         end
       end
     end)
  end
end
 
  • Нравится
Реакции: Tango

Tango

Новичок
Автор темы
28
4
123:
local imyBuyArray = 1
  if mode == 3 and #myBuyArray > 0 then
    lua_thread.create(function()
      if imyBuyArray > #myBuyArray then
        mode = 0
        imyBuyArray = 1
        sampSendDialogResponse(id, 0)
        sms('Выставление товаров на скуп завершен!')
      else
        if text:find('Удалить товар с продажи') and text:find('Прекратить покупку товара') and #myBuyArray > 0 then
          wait(tw)
          sampSendDialogResponse(id, 1, getLineOnTextDialog(text, 'Добавить товар на покупку %(поиск по предметам%)'), nil)
        elseif text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
          wait(tw)
          sampSendDialogResponse(id, 1, nil, myBuyArray[imyBuyArray][1])
        elseif title:find('Поиск товара') and not text:find('Введите наименование товара, который хотите найти и выставить на скупку.') and #myBuyArray > 0 then
          wait(tw)
          local text = text:gsub('{......}', '')
          local text = text:gsub('%d.','')
          sampSendDialogResponse(id, 1, 0, nil)
        elseif text:find('Введите цену за товар') and #myBuyArray > 0 then
          wait(tw)
          sampSendDialogResponse(id, 1, nil, myBuyArray[imyBuyArray][3])
          imyBuyArray = imyBuyArray + 1
        elseif text:find('Введите количество и цену за один товар')and #myBuyArray > 0 then
          wait(tw)
          sampSendDialogResponse(id, 1, nil, myBuyArray[imyBuyArray][2]..','..myBuyArray[imyBuyArray][3])
          imyBuyArray = imyBuyArray + 1
        end
      end
    end)
  end
Сделал так , по такомуже принцепу прям за пару минут до твоего сообщения, спасибо!
 
  • Нравится
Реакции: wojciech?