Помощь с обозначением квадратом

DrileX

Новичок
Автор темы
26
4
Видел скрипт, который выводит на экран текст, находится ли игрок в квадрате (Мигающая территория для капта). Как я помню, там нужно вручную выводить координаты квадрата.
Можете ли вы найти скрипт с похожим функционалом ? (А так же помочь, как находить координаты)
 
Решение
Пытался попробовать на монсере. Пока не получилось. Есть ли объяснение как работает сам скрипт ? [Нужно ли что-то вписывать, например]
При создании гангзон добавляет в таблицу данные о зоне. При удалении - удаляет. При обновлении статуса "мигания" соответственно обновляет данные для зоны в таблице.
Если игрок входит в мигающую зону(кстати я там не добавил проверку на мигание, только сейчас заметил... просто в любую гангзону) - выведет текст.

Вернулся домой, сейчас на локальном серваке накидаю гангзону мигающую и потестирую.

Рабочий вариант.
Все настройки в таблице text_data, можешь там под себя редактировать положение текста, сам текст, шрифт, размер шрифта, цвет текста.
Когда закончишь настройку под себя -...

Andrinall

Известный
701
518
Пример нечитаемого кода конечно, но сделано на коленке за пару минут.
В теории должно показывать текст при нахождении в мигающей гангзоне.

Lua:
local ev = require 'samp.events'

local zones, font = {}, nil
local text_position = { x = 25, y = 240 } -- тут можно поменять позицию текста

local function isZoneExist(zoneId) return zones[zoneID] ~= nil end
local function isCharInFlashingZone(char) for zoneID, data in pairs(zones) do if isCharInArea2d(char, data.start.x, data.start.y, data.end_.x, data.end_.y, false) then return true end end return false end
function ev.onCreateGangZone(zoneID, squareStart, squareEnd, color) table.insert(zones, zoneID, { start = squareStart, end_ = squareEnd, main_color = color, flash_color = 0, flashing = false }) end
function ev.onGangZoneFlash(zoneID, color) if isZoneExist(zoneID) then zones[zoneID].flashing = true; zones[zoneID].flash_color = color end end
function ev.onGangZoneStopFlash(zoneID) if isZoneExist(zoneID) then zones[zoneID].flashing = false; zones[zoneID].flash_color = 0 end end
function ev.onGangZoneDestroy(zoneID) if isZoneExist(zoneID) then zones[zoneID] = nil end end
function onD3DLost() if font then renderReleaseFont(font); font = nil end end
function onScriptTerminate(s, q) if s == thisScript() then if font then renderReleaseFont(font); font = nil end end

function onD3DPresent()
    if isCharDead(PLAYER_PED) then return end
    if not isCharInFlashingZone(PLAYER_PED) then return end
    
    if not font then font = renderCreateFont("Tahoma", 14, 0x5); return end
    renderFontDrawText(font, "Вы находитесь в мигающей зоне", text_position.x, text_position.y, 0xFFFFFFFF)
end
 

DrileX

Новичок
Автор темы
26
4
Пример нечитаемого кода конечно, но сделано на коленке за пару минут.
В теории должно показывать текст при нахождении в мигающей гангзоне.

Lua:
local ev = require 'samp.events'

local zones, font = {}, nil
local text_position = { x = 25, y = 240 } -- тут можно поменять позицию текста

local function isZoneExist(zoneId) return zones[zoneID] ~= nil end
local function isCharInFlashingZone(char) for zoneID, data in pairs(zones) do if isCharInArea2d(char, data.start.x, data.start.y, data.end_.x, data.end_.y, false) then return true end end return false end
function ev.onCreateGangZone(zoneID, squareStart, squareEnd, color) table.insert(zones, zoneID, { start = squareStart, end_ = squareEnd, main_color = color, flash_color = 0, flashing = false }) end
function ev.onGangZoneFlash(zoneID, color) if isZoneExist(zoneID) then zones[zoneID].flashing = true; zones[zoneID].flash_color = color end end
function ev.onGangZoneStopFlash(zoneID) if isZoneExist(zoneID) then zones[zoneID].flashing = false; zones[zoneID].flash_color = 0 end end
function ev.onGangZoneDestroy(zoneID) if isZoneExist(zoneID) then zones[zoneID] = nil end end
function onD3DLost() if font then renderReleaseFont(font); font = nil end end
function onScriptTerminate(s, q) if s == thisScript() then if font then renderReleaseFont(font); font = nil end end

function onD3DPresent()
    if isCharDead(PLAYER_PED) then return end
    if not isCharInFlashingZone(PLAYER_PED) then return end
   
    if not font then font = renderCreateFont("Tahoma", 14, 0x5); return end
    renderFontDrawText(font, "Вы находитесь в мигающей зоне", text_position.x, text_position.y, 0xFFFFFFFF)
end
Пытался попробовать на монсере. Пока не получилось. Есть ли объяснение как работает сам скрипт ? [Нужно ли что-то вписывать, например]
 

Andrinall

Известный
701
518
Пытался попробовать на монсере. Пока не получилось. Есть ли объяснение как работает сам скрипт ? [Нужно ли что-то вписывать, например]
При создании гангзон добавляет в таблицу данные о зоне. При удалении - удаляет. При обновлении статуса "мигания" соответственно обновляет данные для зоны в таблице.
Если игрок входит в мигающую зону(кстати я там не добавил проверку на мигание, только сейчас заметил... просто в любую гангзону) - выведет текст.

Вернулся домой, сейчас на локальном серваке накидаю гангзону мигающую и потестирую.

Рабочий вариант.
Все настройки в таблице text_data, можешь там под себя редактировать положение текста, сам текст, шрифт, размер шрифта, цвет текста.
Когда закончишь настройку под себя - поставь поле test в значение false, чтобы текст не отображался на постоянке, а только при нахождении в мигающей зоне.
Lua:
local ev = require 'samp.events'

local font
local zones = {}
local text_data = {
    text = "Вы находитесь в мигающей зоне",
    font_name = "Tahoma",
    height = 14,
    x = 25,
    y = 480,
    color = 0xFFFFFFFF,
    test = true
}

local function isZoneExist(zoneID) return zones[zoneID] ~= nil end
local function isCharInFlashingZone(char)
    for _, data in pairs(zones) do
        if isCharInArea2d(char, data.start.x, data.start.y, data.end_.x, data.end_.y) and data.flashing then
            return true
        end
    end
    return false
end

function ev.onCreateGangZone(zoneID, squareStart, squareEnd, color) table.insert(zones, zoneID, { start = squareStart, end_ = squareEnd, flashing = false }) end
function ev.onGangZoneFlash(zoneID, color) if isZoneExist(zoneID) then zones[zoneID].flashing = true end end
function ev.onGangZoneStopFlash(zoneID) if isZoneExist(zoneID) then zones[zoneID].flashing = false end end
function ev.onGangZoneDestroy(zoneID) if isZoneExist(zoneID) then zones[zoneID] = nil end end

function onD3DPresent()
    if not isCharInFlashingZone(PLAYER_PED) and not text_data.test then return end
    if not font then font = renderCreateFont(text_data.font_name, text_data.height, 0x5) return end
    renderFontDrawText(font, text_data.text, text_data.x, text_data.y, text_data.color)
end

function onD3DLost()
    if font then
        renderReleaseFont(font)
        font = nil
    end
end

function onScriptTerminate(s, q)
    if s == thisScript() then
        if font then
            renderReleaseFont(font)
            font = nil
        end
    end
end
 
Последнее редактирование: