Поиск по ид в диалоге

Ricardo_Miloss

Участник
Автор темы
40
3
Версия MoonLoader
.026-beta
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
  
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
  
   "инвайтни",
   "инвайт",
   "инв",
  
   "invite",
   "inv",
  
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped = sampGetCharHandleBySampPlayerId(id)
            if result then
                    local m = {getCharCoordinates(1)}
                    local p = {getCharCoordinates(ped)}
                    if getDistanceBetweenCoords3d(m[1], m[2], m[3], p[1], p[2], p[3]) < 5 then
                        if sampGetPlayerScore(id) < 3 then
                            inviting = true
                            sampSendChat("/faminvite "..id)
                        else
                            sampSendChat("/faminvite "..id)
                        end
                    break
               end
            end
         end
      end
    end
end)
        if text:find('%[Ошибка%] {FFFFFF}Произошла ошибка, игрок состоит в другой семье!') then
            lua_thread.create(function()
            wait(500)
            sampCloseCurrentDialogWithButton(0)
            sampSendChat('/b Выйдите из семьи и повторно напишите "инвайт"')
       end)
    end
end

    
function samp.onShowDialog(id, style, title, button1, button2, text)
    if inviting then
      if id == 156 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 161 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 162 then
         sampSendDialogResponse(id, 1,0,nil)
         inviting = false
         return false
      end
   end
end
Возможно ли как-то реализовать, что если у человека лвл ниже 3 (вообще сейчас скрипт, по фам меню идёт к 162 диалогу и приглашает первого человека в списке), скрипт запоминал его ид, и в диалоге 162 находил именно этого человека? (чаще всего в этом списке, попадается не один человек, а несколько)
 
Решение
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local ids = {}

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
 
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
 
   "инвайтни",
   "инвайт",
   "инв",
 
   "invite",
   "inv",
 
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped =...

Lance_Sterling

Известный
956
336
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local ids = {}

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
 
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
 
   "инвайтни",
   "инвайт",
   "инв",
 
   "invite",
   "inv",
 
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped = sampGetCharHandleBySampPlayerId(id)
            if result then
                    if sampGetPlayerScore(tonumber(id)) < 3 then
                        table.insert(ids, tonumber(id))
                    end
                    local m = {getCharCoordinates(1)}
                    local p = {getCharCoordinates(ped)}
                    if getDistanceBetweenCoords3d(m[1], m[2], m[3], p[1], p[2], p[3]) < 5 then
                        if sampGetPlayerScore(id) < 3 then
                            inviting = true
                            sampSendChat("/faminvite "..id)
                        else
                            sampSendChat("/faminvite "..id)
                        end
                    break
               end
            end
         end
      end
    end
end)
        if text:find('%[Ошибка%] {FFFFFF}Произошла ошибка, игрок состоит в другой семье!') then
            lua_thread.create(function()
            wait(500)
            sampCloseCurrentDialogWithButton(0)
            sampSendChat('/b Выйдите из семьи и повторно напишите "инвайт"')
       end)
    end
end

   
function samp.onShowDialog(id, style, title, button1, button2, text)
    if title:find('Выберите игрока:') then
        local lineID = -1
        for line in text:gmatch('[^\n]+') do
            lineID = lineID + 1
            for k, v in ipairs(ids) do
                if line:find('%[ID: '..v..'%]') then
                    sampAddChatMessage('Line: '..lineID)
                    table.remove(ids, k)
                    break
                end
            end
        end
    end
    if inviting then
      if id == 156 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 161 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 162 then
         sampSendDialogResponse(id, 1,0,nil)
         inviting = false
         return false
      end
   end
end
 

Ricardo_Miloss

Участник
Автор темы
40
3
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local ids = {}

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
 
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
 
   "инвайтни",
   "инвайт",
   "инв",
 
   "invite",
   "inv",
 
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped = sampGetCharHandleBySampPlayerId(id)
            if result then
                    if sampGetPlayerScore(tonumber(id)) < 3 then
                        table.insert(ids, tonumber(id))
                    end
                    local m = {getCharCoordinates(1)}
                    local p = {getCharCoordinates(ped)}
                    if getDistanceBetweenCoords3d(m[1], m[2], m[3], p[1], p[2], p[3]) < 5 then
                        if sampGetPlayerScore(id) < 3 then
                            inviting = true
                            sampSendChat("/faminvite "..id)
                        else
                            sampSendChat("/faminvite "..id)
                        end
                    break
               end
            end
         end
      end
    end
end)
        if text:find('%[Ошибка%] {FFFFFF}Произошла ошибка, игрок состоит в другой семье!') then
            lua_thread.create(function()
            wait(500)
            sampCloseCurrentDialogWithButton(0)
            sampSendChat('/b Выйдите из семьи и повторно напишите "инвайт"')
       end)
    end
end

  
function samp.onShowDialog(id, style, title, button1, button2, text)
    if title:find('Выберите игрока:') then
        local lineID = -1
        for line in text:gmatch('[^\n]+') do
            lineID = lineID + 1
            for k, v in ipairs(ids) do
                if line:find('%[ID: '..v..'%]') then
                    sampAddChatMessage('Line: '..lineID)
                    table.remove(ids, k)
                    break
                end
            end
        end
    end
    if inviting then
      if id == 156 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 161 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 162 then
         sampSendDialogResponse(id, 1,0,nil)
         inviting = false
         return false
      end
   end
end
В диалоге находит правильную строку, но как сделать чтобы оно связывало с идом игрока который сверху детектится? Когда чел пишет инвайт, скрипт берет его ид, и по нему находит строку в диалоге
 

Lance_Sterling

Известный
956
336
В диалоге находит правильную строку, но как сделать чтобы оно связывало с идом игрока который сверху детектится? Когда чел пишет инвайт, скрипт берет его ид, и по нему находит строку в диалоге
это он щас и делает
 

Ricardo_Miloss

Участник
Автор темы
40
3
это он щас и делает
Стоп, я не правильно написал, строку находит правильную, но приглашает не того, тестили с двумя людьми, пригласило чела из первой строки все равно, а не того кого надо
 

Lance_Sterling

Известный
956
336
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local ids = {}

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
 
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
 
   "инвайтни",
   "инвайт",
   "инв",
 
   "invite",
   "inv",
 
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped = sampGetCharHandleBySampPlayerId(id)
            if result then
                    if sampGetPlayerScore(tonumber(id)) < 3 then
                        table.insert(ids, tonumber(id))
                    end
                    local m = {getCharCoordinates(1)}
                    local p = {getCharCoordinates(ped)}
                    if getDistanceBetweenCoords3d(m[1], m[2], m[3], p[1], p[2], p[3]) < 5 then
                        if sampGetPlayerScore(id) < 3 then
                            inviting = true
                            sampSendChat("/faminvite "..id)
                        else
                            sampSendChat("/faminvite "..id)
                        end
                    break
               end
            end
         end
      end
    end
end)
        if text:find('%[Ошибка%] {FFFFFF}Произошла ошибка, игрок состоит в другой семье!') then
            lua_thread.create(function()
            wait(500)
            sampCloseCurrentDialogWithButton(0)
            sampSendChat('/b Выйдите из семьи и повторно напишите "инвайт"')
       end)
    end
end

 
function samp.onShowDialog(id, style, title, button1, button2, text)
    if title:find('Выберите игрока:') then
        local lineID = -1
        for line in text:gmatch('[^\n]+') do
            lineID = lineID + 1
            for k, v in ipairs(ids) do
                if line:find('%[ID: '..v..'%]') then
                    sampSendDialogResponse(id, 1, lineID, nil)
                    table.remove(ids, k)
                    return false
                end
            end
        end
    end
    if inviting then
      if id == 156 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 161 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 162 then
         sampSendDialogResponse(id, 1,0,nil)
         inviting = false
         return false
      end
   end
end
 

Ricardo_Miloss

Участник
Автор темы
40
3
Lua:
local samp = require 'samp.events'
local hookDialog = false
local act = false

local ids = {}

local t = {
   "в фаму",
   "инв в фаму",
   "инвайт в фаму",
   "инвайтни в фаму",
   "прими в фаму",
   "кинь приглос в фаму",
 
   "инв в семью",
   "инвайт в семью",
   "инвайтни в семью",
   "прими в семью",
   "кинь приглос в семью",
 
   "инвайтни",
   "инвайт",
   "инв",
 
   "invite",
   "inv",
 
   "кинь приглос",
}

function samp.onServerMessage(color, text)
   lua_thread.create(function()
   wait(0)
   text = text:gsub("{......}", "")
   for k,v in ipairs(t) do
      if text:find(v) then
         local id, msg = text:match(".+%[(%d+)%] говорит: (.+)")
         if msg == v then
            local result, ped = sampGetCharHandleBySampPlayerId(id)
            if result then
                    if sampGetPlayerScore(tonumber(id)) < 3 then
                        table.insert(ids, tonumber(id))
                    end
                    local m = {getCharCoordinates(1)}
                    local p = {getCharCoordinates(ped)}
                    if getDistanceBetweenCoords3d(m[1], m[2], m[3], p[1], p[2], p[3]) < 5 then
                        if sampGetPlayerScore(id) < 3 then
                            inviting = true
                            sampSendChat("/faminvite "..id)
                        else
                            sampSendChat("/faminvite "..id)
                        end
                    break
               end
            end
         end
      end
    end
end)
        if text:find('%[Ошибка%] {FFFFFF}Произошла ошибка, игрок состоит в другой семье!') then
            lua_thread.create(function()
            wait(500)
            sampCloseCurrentDialogWithButton(0)
            sampSendChat('/b Выйдите из семьи и повторно напишите "инвайт"')
       end)
    end
end

 
function samp.onShowDialog(id, style, title, button1, button2, text)
    if title:find('Выберите игрока:') then
        local lineID = -1
        for line in text:gmatch('[^\n]+') do
            lineID = lineID + 1
            for k, v in ipairs(ids) do
                if line:find('%[ID: '..v..'%]') then
                    sampSendDialogResponse(id, 1, lineID, nil)
                    table.remove(ids, k)
                    return false
                end
            end
        end
    end
    if inviting then
      if id == 156 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 161 then
         sampSendDialogResponse(id, 1,0,nil)
         return false
      end
      if id == 162 then
         sampSendDialogResponse(id, 1,0,nil)
         inviting = false
         return false
      end
   end
end
от души, огроменное спасибо)
 
  • Нравится
Реакции: Lance_Sterling