Переменные

James Hawk

Известный
Автор темы
919
218
Уже не впервые сталкиваюсь со случаями, когда необходимо изменить оглашенную глобальную переменную в какой-либо функции и затем в другой функции работать с этим значением.
Но значение воспринимается иначе.

Пример:
Lua:
local a = 0

function main()
   -- code
   print(a)  -- a = 0
end

function smth()
   -- code
   a = 5
end

Кроме того, ознакамливался с разного рода исходниками, где люди подобные вещи делают с переменными (и всё у них без косяков). Какие варианты решения?
 

James Hawk

Известный
Автор темы
919
218
Бывает такое что в условии при сравнивании двух одинаковых цифр, оно тупо не работает или работает через раз
Здесь последнее, что остаётся - неизменность переменной hun
 

FYP

Известный
Администратор
1,763
5,899
Бывает такое что в условии при сравнивании двух одинаковых цифр, оно тупо не работает или работает через раз
есть пример?
Да, есть выведение значения data.hun
ты ведь сказал, что условие не срабатывает. какое ещё выведение data.hun?
 

James Hawk

Известный
Автор темы
919
218
ты ведь сказал, что условие не срабатывает. какое ещё выведение data.hun?
Lua:
function onReceiveRpc(id, bs)
    if id == 134 then
        local td = readBitstream(bs)
        if td.x == textdraw[1][1] and td.y == textdraw[1][2] and td.color == textdraw[1][3] then
            print(td.hun)
            sat = td.hun
        end
    end
end

function readBitstream(bs)
    local data = {}
        data.id = raknetBitStreamReadInt16(bs)
        raknetBitStreamIgnoreBits(bs, 104)
        data.hun = raknetBitStreamReadFloat(bs) - 549.5
        raknetBitStreamIgnoreBits(bs, 32)
        data.color = raknetBitStreamReadInt32(bs)
        raknetBitStreamIgnoreBits(bs, 64)
        data.x = raknetBitStreamReadFloat(bs)
        data.y = raknetBitStreamReadFloat(bs)
    return data
end
SX0ppMN.png


Lua:
sat = 0
-------------
while true do
        wait(0)
        if wasKeyPressed(key.VK_Z) then
            sampAddChatMessage(math.floor(sat/54.5)*100, -1) -- выводит 0
        end
end
 

trefa

Известный
Всефорумный модератор
2,104
1,249
Что получаю от сервера
Lua:
111   number - 547.29998779297   number - 36.200000762939   number - -16777216   number
Сравниваю с
Lua:
 {547.29998779297, 36.200000762939, -16777216}
И оно тупо не работает
При этотом я писал скрипт ночью и все работало, как на следующий день стал проверять, то уже не работало.
EAwDr.png
 

FYP

Известный
Администратор
1,763
5,899
Lua:
function onReceiveRpc(id, bs)
    if id == 134 then
        local td = readBitstream(bs)
        if td.x == textdraw[1][1] and td.y == textdraw[1][2] and td.color == textdraw[1][3] then
            print(td.hun)
            sat = td.hun
        end
    end
end

function readBitstream(bs)
    local data = {}
        data.id = raknetBitStreamReadInt16(bs)
        raknetBitStreamIgnoreBits(bs, 104)
        data.hun = raknetBitStreamReadFloat(bs) - 549.5
        raknetBitStreamIgnoreBits(bs, 32)
        data.color = raknetBitStreamReadInt32(bs)
        raknetBitStreamIgnoreBits(bs, 64)
        data.x = raknetBitStreamReadFloat(bs)
        data.y = raknetBitStreamReadFloat(bs)
    return data
end
SX0ppMN.png


Lua:
sat = 0
-------------
while true do
        wait(0)
        if wasKeyPressed(key.VK_Z) then
            sampAddChatMessage(math.floor(sat/54.5)*100, -1) -- выводит 0
        end
end
ну вот теперь это выглядит действительно странно. попробуй для начала (пере)установить последнюю версию мунлоадера и не использовать ни в одном из скриптов библиотеку lanes.

Что получаю от сервера
Lua:
111   number - 547.29998779297   number - 36.200000762939   number - -16777216   number
Сравниваю с
Lua:
 {547.29998779297, 36.200000762939, -16777216}
И оно тупо не работает
При этотом я писал скрипт ночью и все работало, как на следующий день стал проверять, то уже не работало.
EAwDr.png
скорее всего где-то теряется точность, либо при чтении битстрима (дробное одинарной точности преобразуется в число двойной точности), либо при выводе. сравнивай с применением эпсилона или предварительно округляй.
 
  • Нравится
Реакции: trefa

James Hawk

Известный
Автор темы
919
218
ну вот теперь это выглядит действительно странно. попробуй для начала (пере)установить последнюю версию мунлоадера и не использовать ни в одном из скриптов библиотеку lanes.
Но скрипт трефы то у меня нормально работал с тем же кодом