аналог функции

g305noobo

Известный
Автор темы
Модератор
328
568
Версия MoonLoader
.026-beta
подскажите, как можно сделать аналог функции changeBlipColour, только для всех блипов(та функция изменяет только квадратный блип с ид 0)?
 

Tema05

Известный
1,515
481
подскажите, как можно сделать аналог функции changeBlipColour, только для всех блипов(та функция изменяет только квадратный блип с ид 0)?
Просто применить функцию к каждому блипу? Не? И у них нет id, а только "Marker скриптовый хэндл маркера". Это не самповская фигня.

А вот как получить все маркеры уже другая задача. Наверное проще всего сохранять хендлы всех созданных тобой блипов. Но уревен на бх где-то лежит готовая функция на получение всех маркеров. По крайней мере в moonloader нет ни этой функции, ни функции возвращающей указатель на структуру объекта.
 

Andrinall

Известный
700
519
И у них нет id, а только "Marker скриптовый хэндл маркера". Это не самповская фигня.
Под "id" в его тексте подразумевается иконка блипа, это не "самповская фигня". (enum eRadarSprite)
только для всех блипов
Наверное только хуками, ибо напрямую изменять цвет так же не работает для других блипов.
Lua:
local ffi = require 'ffi'
local eBlipType = {
    BLIP_NONE = 0,
    BLIP_CAR = 1,
    BLIP_CHAR = 2,
    BLIP_OBJECT = 3,
    BLIP_COORD = 4, -- Checkpoint.
    BLIP_CONTACTPOINT = 5, -- Sphere.
    BLIP_SPOTLIGHT = 6,
    BLIP_PICKUP = 7,
    BLIP_AIRSTRIP = 8
}

local eBlipDisplay = {
    BLIP_DISPLAY_NEITHER = 0,
    BLIP_DISPLAY_MARKER_ONLY = 1,
    BLIP_DISPLAY_BLIP_ONLY = 2,
    BLIP_DISPLAY_BOTH = 3
};

local eRadarSprite = {
    RADAR_SPRITE_NONE = 0,
    RADAR_SPRITE_WHITE = 1,
    RADAR_SPRITE_CENTRE = 2,
    RADAR_SPRITE_MAP_HERE = 3,
    RADAR_SPRITE_NORTH = 4,
    RADAR_SPRITE_AMMUGUN = 6,
    RADAR_SPRITE_BIGSMOKE = 8,
    RADAR_SPRITE_BURGERSHOT = 10,
    RADAR_SPRITE_CATALINAPINK = 12,
    RADAR_SPRITE_CHICKEN = 14,
    RADAR_SPRITE_CRASH1 = 16,
    RADAR_SPRITE_EMMETGUN = 18,
    RADAR_SPRITE_FIRE = 20,
    RADAR_SPRITE_HOSTPITAL = 22,
    RADAR_SPRITE_LOGOSYNDICATE = 23,
    RADAR_SPRITE_MAFIACASINO = 25,
    RADAR_SPRITE_MODGARAGE = 27,
    RADAR_SPRITE_PIZZA = 29,
    RADAR_SPRITE_PROPERTYG = 31,
    RADAR_SPRITE_RACE = 33,
    RADAR_SPRITE_SAVEGAME = 35,
    RADAR_SPRITE_QMARK = 37,
    RADAR_SPRITE_TATTOO = 39,
    RADAR_SPRITE_WAYPOINT = 41,
    RADAR_SPRITE_TRIADS = 43,
    RADAR_SPRITE_TSHIRT = 45,
    RADAR_SPRITE_ZERO = 47,
    RADAR_SPRITE_DATEDRINK = 49,
    RADAR_SPRITE_TRUCK = 51,
    RADAR_SPRITE_FLAG = 53,
    RADAR_SPRITE_IMPOUND = 55,
    RADAR_SPRITE_RUNWAY = 57,
    RADAR_SPRITE_GANGP = 59,
    RADAR_SPRITE_GANGN = 61,
    RADAR_SPRITE_SPRAY = 63,
    --RADAR_SPRITE_TORENO = 64,
    RADAR_SPRITE_COUNT = 64
};

ffi.cdef[[
typedef struct { float x, y, z; } CVector;
typedef struct {
    uint32_t m_nColour; // see eBlipColour
    uint32_t m_nEntityHandle;
    CVector  m_vecPos;
    uint16_t m_nCounter;
    float    m_fSphereRadius;
    uint16_t m_nBlipSize;
    struct CEntryExit *m_pEntryExit;
    uint8_t m_nRadarSprite; // see eRadarSprite
    uint8_t m_bBright : 1; // It makes use of bright colors. Always set.
    uint8_t m_bInUse : 1; // It is available.
    uint8_t m_bShortRange : 1; // It doesn't show permanently on the radar.
    uint8_t m_bFriendly : 1; // It is affected by BLIP_COLOUR_THREAT.   
    uint8_t m_bBlipRemain : 1; // It has the priority over the entity (it will still appear after the entity's deletion).
    uint8_t m_bBlipFade : 1; // Possibly a leftover. Always unset (unused).
    uint8_t m_nCoordBlipAppearance : 2; // see eBlipAppearance
    uint8_t m_nBlipDisplay : 2; // see eBlipDisplay
    uint8_t m_nBlipType : 4; // see eBlipType
} tRadarTrace;
]]
CRadar__ms_RadarTrace = ffi.cast('tRadarTrace *', 0xBA86F0);
local function getName(data, idx) for k, v in pairs(data) do if v == idx then return k end end return "" end

function main()
    repeat wait(100) until isSampAvailable()
    while true do wait(1000)
        if sampIsLocalPlayerSpawned() then
            for i = 0, 174 do
                local trace = CRadar__ms_RadarTrace[i]
                if trace ~= ffi.NULL and trace.m_bInUse ~= 0 then
                    print("===================")
                    print(("Pos: {%.2f, %.2f, %.2f}; Sprite: %s; Display: %s; Type: %s; Color: %08X"):format(
                        trace.m_vecPos.x, trace.m_vecPos.y, trace.m_vecPos.z,
                        getName(eRadarSprite, trace.m_nRadarSprite),
                        getName(eBlipDisplay, trace.m_nBlipDisplay),
                        getName(eBlipType, trace.m_nBlipType),
                        trace.m_nColour
                    ))
                    trace.m_nColour = 2 -- BLIP_COLOUR_BLUE
                    trace.m_nBlipType = eBlipType.BLIP_COORD
                    trace.m_nBlipDisplay = eBlipDisplay.BLIP_DISPLAY_BLIP_ONLY
                    trace.m_nRadarSprite = eRadarSprite.RADAR_SPRITE_MAP_HERE
                    print("===================")
                end
            end
        end
    end
end
Тут должен быть маркер (RADAR_SPRITE_RACE)... я поменял и маркер и цвет, но цвет не применился.

1699940417061.png
 
  • Нравится
Реакции: g305noobo

Tema05

Известный
1,515
481
Под "id" в его тексте подразумевается иконка блипа, это не "самповская фигня". (enum eRadarSprite)

Наверное только хуками, ибо напрямую изменять цвет так же не работает для других блипов.
Lua:
local ffi = require 'ffi'
local eBlipType = {
    BLIP_NONE = 0,
    BLIP_CAR = 1,
    BLIP_CHAR = 2,
    BLIP_OBJECT = 3,
    BLIP_COORD = 4, -- Checkpoint.
    BLIP_CONTACTPOINT = 5, -- Sphere.
    BLIP_SPOTLIGHT = 6,
    BLIP_PICKUP = 7,
    BLIP_AIRSTRIP = 8
}

local eBlipDisplay = {
    BLIP_DISPLAY_NEITHER = 0,
    BLIP_DISPLAY_MARKER_ONLY = 1,
    BLIP_DISPLAY_BLIP_ONLY = 2,
    BLIP_DISPLAY_BOTH = 3
};

local eRadarSprite = {
    RADAR_SPRITE_NONE = 0,
    RADAR_SPRITE_WHITE = 1,
    RADAR_SPRITE_CENTRE = 2,
    RADAR_SPRITE_MAP_HERE = 3,
    RADAR_SPRITE_NORTH = 4,
    RADAR_SPRITE_AMMUGUN = 6,
    RADAR_SPRITE_BIGSMOKE = 8,
    RADAR_SPRITE_BURGERSHOT = 10,
    RADAR_SPRITE_CATALINAPINK = 12,
    RADAR_SPRITE_CHICKEN = 14,
    RADAR_SPRITE_CRASH1 = 16,
    RADAR_SPRITE_EMMETGUN = 18,
    RADAR_SPRITE_FIRE = 20,
    RADAR_SPRITE_HOSTPITAL = 22,
    RADAR_SPRITE_LOGOSYNDICATE = 23,
    RADAR_SPRITE_MAFIACASINO = 25,
    RADAR_SPRITE_MODGARAGE = 27,
    RADAR_SPRITE_PIZZA = 29,
    RADAR_SPRITE_PROPERTYG = 31,
    RADAR_SPRITE_RACE = 33,
    RADAR_SPRITE_SAVEGAME = 35,
    RADAR_SPRITE_QMARK = 37,
    RADAR_SPRITE_TATTOO = 39,
    RADAR_SPRITE_WAYPOINT = 41,
    RADAR_SPRITE_TRIADS = 43,
    RADAR_SPRITE_TSHIRT = 45,
    RADAR_SPRITE_ZERO = 47,
    RADAR_SPRITE_DATEDRINK = 49,
    RADAR_SPRITE_TRUCK = 51,
    RADAR_SPRITE_FLAG = 53,
    RADAR_SPRITE_IMPOUND = 55,
    RADAR_SPRITE_RUNWAY = 57,
    RADAR_SPRITE_GANGP = 59,
    RADAR_SPRITE_GANGN = 61,
    RADAR_SPRITE_SPRAY = 63,
    --RADAR_SPRITE_TORENO = 64,
    RADAR_SPRITE_COUNT = 64
};

ffi.cdef[[
typedef struct { float x, y, z; } CVector;
typedef struct {
    uint32_t m_nColour; // see eBlipColour
    uint32_t m_nEntityHandle;
    CVector  m_vecPos;
    uint16_t m_nCounter;
    float    m_fSphereRadius;
    uint16_t m_nBlipSize;
    struct CEntryExit *m_pEntryExit;
    uint8_t m_nRadarSprite; // see eRadarSprite
    uint8_t m_bBright : 1; // It makes use of bright colors. Always set.
    uint8_t m_bInUse : 1; // It is available.
    uint8_t m_bShortRange : 1; // It doesn't show permanently on the radar.
    uint8_t m_bFriendly : 1; // It is affected by BLIP_COLOUR_THREAT.  
    uint8_t m_bBlipRemain : 1; // It has the priority over the entity (it will still appear after the entity's deletion).
    uint8_t m_bBlipFade : 1; // Possibly a leftover. Always unset (unused).
    uint8_t m_nCoordBlipAppearance : 2; // see eBlipAppearance
    uint8_t m_nBlipDisplay : 2; // see eBlipDisplay
    uint8_t m_nBlipType : 4; // see eBlipType
} tRadarTrace;
]]
CRadar__ms_RadarTrace = ffi.cast('tRadarTrace *', 0xBA86F0);
local function getName(data, idx) for k, v in pairs(data) do if v == idx then return k end end return "" end

function main()
    repeat wait(100) until isSampAvailable()
    while true do wait(1000)
        if sampIsLocalPlayerSpawned() then
            for i = 0, 174 do
                local trace = CRadar__ms_RadarTrace[i]
                if trace ~= ffi.NULL and trace.m_bInUse ~= 0 then
                    print("===================")
                    print(("Pos: {%.2f, %.2f, %.2f}; Sprite: %s; Display: %s; Type: %s; Color: %08X"):format(
                        trace.m_vecPos.x, trace.m_vecPos.y, trace.m_vecPos.z,
                        getName(eRadarSprite, trace.m_nRadarSprite),
                        getName(eBlipDisplay, trace.m_nBlipDisplay),
                        getName(eBlipType, trace.m_nBlipType),
                        trace.m_nColour
                    ))
                    trace.m_nColour = 2 -- BLIP_COLOUR_BLUE
                    trace.m_nBlipType = eBlipType.BLIP_COORD
                    trace.m_nBlipDisplay = eBlipDisplay.BLIP_DISPLAY_BLIP_ONLY
                    trace.m_nRadarSprite = eRadarSprite.RADAR_SPRITE_MAP_HERE
                    print("===================")
                end
            end
        end
    end
end
Тут должен быть маркер (RADAR_SPRITE_RACE)... я поменял и маркер и цвет, но цвет не применился.

Посмотреть вложение 221210
Мне кажется он не про метки на радаре, а про эти маркеры стрелочки в самом мире. Но могу ошибаться
 

g305noobo

Известный
Автор темы
Модератор
328
568
Мне кажется он не про метки на радаре, а про эти маркеры стрелочки в самом мире. Но могу ошибаться
как раз про метки на радаре, сверху правильно написали