Работа скрипта в пределах координат

NotFound

Участник
Автор темы
74
22
Версия MoonLoader
.026-beta
Хочу сделать, чтобы какая-либо функция скрипта могла работать в заданной области координатами. К примеру указать две или более координат, внутри которых функция будет выполняться. Есть возможность это реализовать?
 
Решение
Cпасибо. Можешь показать пример с определением в какой из областей игрок находится, чтоб при вводе команды выводило название/номер области?
Я по твоему примеру сделал для 3д области с активацией по команде.

Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local coordinates =
{
  -- {x1, y1, z1, x2, y2, z2, false/true}
  {-1334, 455, 28 , -1482, 340, 36},
}

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end
  wait(0)
  sampRegisterChatCommand('coord', coord_check)
  thread = lua_thread.create_suspended(thread_function)
  while true do wait(0)
  end
end

function checkArea()
  local en = false
  for i = 1, #coordinates do
    if...

SomaGnoma

Известный
442
152
Чета такое:
Lua:
local coordinates =
{
    -- {x1, y1, x2, y2}
    {228, 1337, 123, 321},
    {1337, 228, 123, 456}
}

function checkArea()
    local en = false
    for i = 1, #coordinates do
        if isCharInArea2d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], false) then en = true end
    end
    return en;
end
Как юзать:
Lua:
while true do wait(0)
    if checkArea() then
        -- code if true
        else
        -- code if false
    end
end
 
  • Нравится
Реакции: NotFound

NotFound

Участник
Автор темы
74
22
Чета такое:
Lua:
local coordinates =
{
    -- {x1, y1, x2, y2}
    {228, 1337, 123, 321},
    {1337, 228, 123, 456}
}

function checkArea()
    local en = false
    for i = 1, #coordinates do
        if isCharInArea2d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], false) then en = true end
    end
    return en;
end
Как юзать:
Lua:
while true do wait(0)
    if checkArea() then
        -- code if true
        else
        -- code if false
    end
end
Cпасибо. Можешь показать пример с определением в какой из областей игрок находится, чтоб при вводе команды выводило название/номер области?
Я по твоему примеру сделал для 3д области с активацией по команде.

Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local coordinates =
{
  -- {x1, y1, z1, x2, y2, z2, false/true}
  {-1334, 455, 28 , -1482, 340, 36},
}

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end
  wait(0)
  sampRegisterChatCommand('coord', coord_check)
  thread = lua_thread.create_suspended(thread_function)
  while true do wait(0)
  end
end

function checkArea()
  local en = false
  for i = 1, #coordinates do
    if isCharInArea3d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], coordinates[i][5], coordinates[i][6], false) then en = true end
  end
  return en;
end

function coord_check ()
  if checkArea() then
    sampAddChatMessage('Игрок в зоне', -1)
  else
    sampAddChatMessage('Игрок вне зоны', -1)
  end
end
 

SomaGnoma

Известный
442
152
Cпасибо. Можешь показать пример с определением в какой из областей игрок находится, чтоб при вводе команды выводило название/номер области?
Я по твоему примеру сделал для 3д области с активацией по команде.

Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local coordinates =
{
  -- {x1, y1, z1, x2, y2, z2, false/true}
  {-1334, 455, 28 , -1482, 340, 36},
}

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end
  wait(0)
  sampRegisterChatCommand('coord', coord_check)
  thread = lua_thread.create_suspended(thread_function)
  while true do wait(0)
  end
end

function checkArea()
  local en = false
  for i = 1, #coordinates do
    if isCharInArea3d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], coordinates[i][5], coordinates[i][6], false) then en = true end
  end
  return en;
end

function coord_check ()
  if checkArea() then
    sampAddChatMessage('Игрок в зоне', -1)
  else
    sampAddChatMessage('Игрок вне зоны', -1)
  end
end

Lua:
local coordinates =
{
    {123, 321, 228, 1337, 222, 111, "Зона №1"}
}

function checkArea()
  local en, nameZone = false, nil
  for i = 1, #coordinates do
    if isCharInArea3d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], coordinates[i][5], coordinates[i][6], false) then en = true; nameZone = coordinates[i][7] end
  end
  return en, nameZone;
end

-- Как использовать:

while true do wait(0)
    local result, name = checkArea()
    if result then
        print(name)
    else
        print("Вне зоны")
    end
end
Такое да?
 
  • Нравится
Реакции: NotFound

RedHolms

Известный
Проверенный
617
360
Чета такое:
Lua:
local coordinates =
{
    -- {x1, y1, x2, y2}
    {228, 1337, 123, 321},
    {1337, 228, 123, 456}
}

function checkArea()
    local en = false
    for i = 1, #coordinates do
        if isCharInArea2d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], false) then en = true end
    end
    return en;
end
Как юзать:
Lua:
while true do wait(0)
    if checkArea() then
        -- code if true
        else
        -- code if false
    end
end
к чему тут en?
Lua:
function checkArea()
    for i = 1, #coordinates do
        if isCharInArea2d(PLAYER_PED, coordinates[i][1], coordinates[i][2], coordinates[i][3], coordinates[i][4], false) then return true end
    end
    return false
end
 
  • Нравится
Реакции: SomaGnoma