автообновление (хостинг для файла кодировкой CP51)

w99zzl1

Участник
Автор темы
157
18
Версия MoonLoader
.026-beta
По гайду: https://www.blast.hk/threads/30501/
А есть ли какие то другие рабочие хостинги с прямой ссылкой, которые будут хранить мой файл с кодировкой (CP51 - кириллица)?

У меня в коде очень сложные (для меня) функции с input, ffi + imgui , которые мне сложно перевести в кодировку для GutHub'а, (там (всё что я знаю) с помощью u8, но её нужно как то так расставить, и тут то я не понимаю, где нужно оставить, где забрать, если с sampAddChatMessage и imgui интерфейсом всё просто, то тут я хз)

Поэтому я обращаюсь сюда с целью найти тот самый хостинг, который сможет хранить мой код в CP51, грамотно передавать его, хранить и т.д. И чтобы ссылка вообще работала и принималась автообновлением, а то на тех, что я пробовал - ошибка. Есть ли такие?
 

kyrtion

Известный
1,139
410
купи свой вдс за 75 руб на ферстбайте и заливай на него
чтобы по миру работало вдс и поступило запрос, то придется платить подороже.
Например, не русский вдс, а похоже снг, например я раньше брал fornex и у всех работало (позже перестал оплачивать из-за нет необходимости), а насчет санкций не протестировал
 

Tema05

Известный
1,496
456
По гайду: https://www.blast.hk/threads/30501/
А есть ли какие то другие рабочие хостинги с прямой ссылкой, которые будут хранить мой файл с кодировкой (CP51 - кириллица)?

У меня в коде очень сложные (для меня) функции с input, ffi + imgui , которые мне сложно перевести в кодировку для GutHub'а, (там (всё что я знаю) с помощью u8, но её нужно как то так расставить, и тут то я не понимаю, где нужно оставить, где забрать, если с sampAddChatMessage и imgui интерфейсом всё просто, то тут я хз)

Поэтому я обращаюсь сюда с целью найти тот самый хостинг, который сможет хранить мой код в CP51, грамотно передавать его, хранить и т.д. И чтобы ссылка вообще работала и принималась автообновлением, а то на тех, что я пробовал - ошибка. Есть ли такие?
Трабл с кодировкой мне кажется надуманным и ты неправильно понимаешь что это такое. Файлы не хранятся "С" какой-то кодировкой. Нет такого параметра у файлов. Кодировка это грубо говоря вариант представления твоих текстовых символов в байтах. Если твой код закодирован в какой-то кодировке он где угодно будет такой же. Идеально тот же набор данных. Можешь взять с него хеш и он везде совпадёт. Иначе бы это означало, что хостинг изменяет твой файл, но это бред. Возможно он в редакторе на хостинге открывается в другой кодировке из-за чего некоторый текст имеет некорректное представление. Это ничего не значит. Или может быть при загрузке/скачивании изменяется кодировка, что приводит к проблеме. Или суть вообще не в кодировке, а в том что ты неправильно загружаешь его/скачиваешь и тем самым ломаешь символы. Т.е. ошибка не в хостингах, а в коде или подходе.

Там как я понял автообновление с ручной загрузкой обновлений. Поэтому тебе подойдёт буквально что угодно. Любой открывающийся у тебя и твоих пользователей сервис. Везде можно получить прямую ссылку. Гитхаб и на крайняк пастебин вполне с этим справятся. Если ты в браузере попал на этот сайт значит и скрипт может. Иначе ищи проблему на своём ПК.

Расскажи более подробно как ты конкретно реализовал автообновление. Какие хостинг пробовал и какие конкретно с ними возникли проблемы на примерах. Пока что создаётся впечатление, что проблемы с "хостингами" на самом деле не существуют
 

w99zzl1

Участник
Автор темы
157
18
Трабл с кодировкой мне кажется надуманным и ты неправильно понимаешь что это такое. Файлы не хранятся "С" какой-то кодировкой. Нет такого параметра у файлов. Кодировка это грубо говоря вариант представления твоих текстовых символов в байтах. Если твой код закодирован в какой-то кодировке он где угодно будет такой же. Идеально тот же набор данных. Можешь взять с него хеш и он везде совпадёт. Иначе бы это означало, что хостинг изменяет твой файл, но это бред. Возможно он в редакторе на хостинге открывается в другой кодировке из-за чего некоторый текст имеет некорректное представление. Это ничего не значит. Или может быть при загрузке/скачивании изменяется кодировка, что приводит к проблеме. Или суть вообще не в кодировке, а в том что ты неправильно загружаешь его/скачиваешь и тем самым ломаешь символы. Т.е. ошибка не в хостингах, а в коде или подходе.

Там как я понял автообновление с ручной загрузкой обновлений. Поэтому тебе подойдёт буквально что угодно. Любой открывающийся у тебя и твоих пользователей сервис. Везде можно получить прямую ссылку. Гитхаб и на крайняк пастебин вполне с этим справятся. Если ты в браузере попал на этот сайт значит и скрипт может. Иначе ищи проблему на своём ПК.

Расскажи более подробно как ты конкретно реализовал автообновление. Какие хостинг пробовал и какие конкретно с ними возникли проблемы на примерах. Пока что создаётся впечатление, что проблемы с "хостингами" на самом деле не существуют
Смотри, возьму в пример "самую сложную" для меня часть кода:

Код:
imgui.OnFrame(function() return showGnewsWindow[0] end, function()
    local X, Y = getScreenResolution()
    imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(X / 2 - 207, Y / 2 - 139), imgui.Cond.FirstUseEver)

    darkStyle()

    imgui.Begin(u8"Добавление новости", showGnewsWindow)
        imgui.InputTextWithHint(u8'##gnewsInput1', u8'Введите первую новость', inputGnewsText1, 256)
        imgui.InputTextWithHint(u8'##gnewsInput2', u8'Введите вторую новость', inputGnewsText2, 256)
        imgui.InputTextWithHint(u8'##gnewsInput3', u8'Введите третью новость', inputGnewsText3, 256)

        imgui.Checkbox(u8"Отправка по времени", sendAtTime)

        if sendAtTime[0] then
            imgui.SliderInt(u8"Время (в минутах)", timeDelay, 1, 59)
        end

        if sendAtTime[0] then
            local currentTime = os.date("*t")
            local targetMinute = (currentTime.min + timeDelay[0]) % 60
            local targetHour = currentTime.hour

            if currentTime.min + timeDelay[0] >= 60 then
                targetMinute = (currentTime.min + timeDelay[0]) % 60
                targetHour = (currentTime.hour + 1) % 24
            end

            confirmationMessage = string.format("Новость будет отправлена в %02d:%02d", targetHour, targetMinute)
            imgui.Text(u8(confirmationMessage))
        end

        if imgui.Button(u8"Отправить", imgui.ImVec2(-1, 0)) then
            local news1 = u8:decode(ffi.string(inputGnewsText1))
            local news2 = u8:decode(ffi.string(inputGnewsText2))
            local news3 = u8:decode(ffi.string(inputGnewsText3))

            showGnewsWindow[0] = false

            -- Проверка на 2 строки (запрещено)
            if (news1 ~= '' and news2 ~= '') and news3 == '' then
                sampAddChatMessage('Вы не можете отправить 2 строки новости. Только 1 или 3', -2)
                return
            end 

            local newsCount = 0
            if news1 ~= '' then newsCount = newsCount + 1 end
            if news2 ~= '' then newsCount = newsCount + 1 end
            if news3 ~= '' then newsCount = newsCount + 1 end

            local sendMessage = ""
            local sendHour, sendMinute = os.date("*t").hour, os.date("*t").min

            if sendAtTime[0] then
                sendMinute = (sendMinute + timeDelay[0]) % 60
                if os.date("*t").min + timeDelay[0] >= 60 then
                    sendHour = (sendHour + 1) % 24
                end
            end

            if newsCount == 1 then
                sendMessage = sendAtTime[0] and string.format("/l (( в %02d:%02d кину одну ))", sendHour, sendMinute) or "/l (( кину одну ))"
            elseif newsCount == 3 then
                sendMessage = sendAtTime[0] and string.format("/l (( в %02d:%02d кину три ))", sendHour, sendMinute) or "/l (( кину три ))"
            end

            lua_thread.create(function()
                if sendMessage ~= "" then
                    sampSendChat(sendMessage, -1)
                    wait(3000)
                end

                if sendAtTime[0] then
                    local currentTime = os.date("*t")
                    local targetMinute = (currentTime.min + timeDelay[0]) % 60
                    local targetHour = currentTime.hour

                    if currentTime.min + timeDelay[0] >= 60 then
                        targetMinute = (currentTime.min + timeDelay[0]) % 60
                        targetHour = (currentTime.hour + 1) % 24
                    end

                    local targetTime = os.time({year=currentTime.year, month=currentTime.month, day=currentTime.day, hour=targetHour, min=targetMinute, sec=0})
                    local currentTimeInSecs = os.time(currentTime)

                    local waitTime = targetTime - currentTimeInSecs
                    wait(waitTime * 1000)
                end

                if news1 and news1 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news1)
                    wait(900)
                end
                if news2 and news2 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news2)
                    wait(900)
                end
                if news3 and news3 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news3)
                    wait(900)
                end             
            end)
        end

        if imgui.CollapsingHeader(u8'Отправка по шаблонам') then
            if imgui.Button(u8'кнопка1', imgui.ImVec2(400, 0)) then
                inputGnewsText1 = ffi.new("char[?]", #(u8'текст) + 1, u8'текст')
                inputGnewsText2 = ffi.new("char[?]", #(u8'текст') + 1, u8'текст')
                inputGnewsText3 = ffi.new("char[?]", #(u8'текст') + 1, u8'текст')
            end
        end

    imgui.End()
end)
Так как я использую VS Code, "там где надо" у меня стоит u8 для корректного отображения кириллицы в imgui, но когда я загружаю его на GitHub с автообновлением, после самого "обновления" всё ломается вспять. Теперь - чтобы корректно отобразились символы, мне нужно наоборот, убрать u8 оттуда, где он стоит, и наоборот добавить туда, где его нет (тот же sampAddChatMessage с кодировкой CP51 (в редакторе) - он не нуждается в u8, но залив на ГитХаб - нужно поставить). По логике - просто сделать всё зеркально, убрать оттуда, где есть, добавить туда, где нет, но то ли это действительно сложно, то ли я просто не шарю - но вот с этим блоком кода у меня постоянно возникают краши или символы не отображаются кириллицей (вот эти "непонятные символы" вместо русских букв)
 

Tema05

Известный
1,496
456
Смотри, возьму в пример "самую сложную" для меня часть кода:

Код:
imgui.OnFrame(function() return showGnewsWindow[0] end, function()
    local X, Y = getScreenResolution()
    imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(X / 2 - 207, Y / 2 - 139), imgui.Cond.FirstUseEver)

    darkStyle()

    imgui.Begin(u8"Добавление новости", showGnewsWindow)
        imgui.InputTextWithHint(u8'##gnewsInput1', u8'Введите первую новость', inputGnewsText1, 256)
        imgui.InputTextWithHint(u8'##gnewsInput2', u8'Введите вторую новость', inputGnewsText2, 256)
        imgui.InputTextWithHint(u8'##gnewsInput3', u8'Введите третью новость', inputGnewsText3, 256)

        imgui.Checkbox(u8"Отправка по времени", sendAtTime)

        if sendAtTime[0] then
            imgui.SliderInt(u8"Время (в минутах)", timeDelay, 1, 59)
        end

        if sendAtTime[0] then
            local currentTime = os.date("*t")
            local targetMinute = (currentTime.min + timeDelay[0]) % 60
            local targetHour = currentTime.hour

            if currentTime.min + timeDelay[0] >= 60 then
                targetMinute = (currentTime.min + timeDelay[0]) % 60
                targetHour = (currentTime.hour + 1) % 24
            end

            confirmationMessage = string.format("Новость будет отправлена в %02d:%02d", targetHour, targetMinute)
            imgui.Text(u8(confirmationMessage))
        end

        if imgui.Button(u8"Отправить", imgui.ImVec2(-1, 0)) then
            local news1 = u8:decode(ffi.string(inputGnewsText1))
            local news2 = u8:decode(ffi.string(inputGnewsText2))
            local news3 = u8:decode(ffi.string(inputGnewsText3))

            showGnewsWindow[0] = false

            -- Проверка на 2 строки (запрещено)
            if (news1 ~= '' and news2 ~= '') and news3 == '' then
                sampAddChatMessage('Вы не можете отправить 2 строки новости. Только 1 или 3', -2)
                return
            end

            local newsCount = 0
            if news1 ~= '' then newsCount = newsCount + 1 end
            if news2 ~= '' then newsCount = newsCount + 1 end
            if news3 ~= '' then newsCount = newsCount + 1 end

            local sendMessage = ""
            local sendHour, sendMinute = os.date("*t").hour, os.date("*t").min

            if sendAtTime[0] then
                sendMinute = (sendMinute + timeDelay[0]) % 60
                if os.date("*t").min + timeDelay[0] >= 60 then
                    sendHour = (sendHour + 1) % 24
                end
            end

            if newsCount == 1 then
                sendMessage = sendAtTime[0] and string.format("/l (( в %02d:%02d кину одну ))", sendHour, sendMinute) or "/l (( кину одну ))"
            elseif newsCount == 3 then
                sendMessage = sendAtTime[0] and string.format("/l (( в %02d:%02d кину три ))", sendHour, sendMinute) or "/l (( кину три ))"
            end

            lua_thread.create(function()
                if sendMessage ~= "" then
                    sampSendChat(sendMessage, -1)
                    wait(3000)
                end

                if sendAtTime[0] then
                    local currentTime = os.date("*t")
                    local targetMinute = (currentTime.min + timeDelay[0]) % 60
                    local targetHour = currentTime.hour

                    if currentTime.min + timeDelay[0] >= 60 then
                        targetMinute = (currentTime.min + timeDelay[0]) % 60
                        targetHour = (currentTime.hour + 1) % 24
                    end

                    local targetTime = os.time({year=currentTime.year, month=currentTime.month, day=currentTime.day, hour=targetHour, min=targetMinute, sec=0})
                    local currentTimeInSecs = os.time(currentTime)

                    local waitTime = targetTime - currentTimeInSecs
                    wait(waitTime * 1000)
                end

                if news1 and news1 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news1)
                    wait(900)
                end
                if news2 and news2 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news2)
                    wait(900)
                end
                if news3 and news3 ~= '' then
                    sampAddChatMessage("/gnews MoH | " .. news3)
                    wait(900)
                end            
            end)
        end

        if imgui.CollapsingHeader(u8'Отправка по шаблонам') then
            if imgui.Button(u8'кнопка1', imgui.ImVec2(400, 0)) then
                inputGnewsText1 = ffi.new("char[?]", #(u8'текст) + 1, u8'текст')
                inputGnewsText2 = ffi.new("char[?]", #(u8'текст') + 1, u8'текст')
                inputGnewsText3 = ffi.new("char[?]", #(u8'текст') + 1, u8'текст')
            end
        end

    imgui.End()
end)
Так как я использую VS Code, "там где надо" у меня стоит u8 для корректного отображения кириллицы в imgui, но когда я загружаю его на GitHub с автообновлением, после самого "обновления" всё ломается вспять. Теперь - чтобы корректно отобразились символы, мне нужно наоборот, убрать u8 оттуда, где он стоит, и наоборот добавить туда, где его нет (тот же sampAddChatMessage с кодировкой CP51 (в редакторе) - он не нуждается в u8, но залив на ГитХаб - нужно поставить). По логике - просто сделать всё зеркально, убрать оттуда, где есть, добавить туда, где нет, но то ли это действительно сложно, то ли я просто не шарю - но вот с этим блоком кода у меня постоянно возникают краши или символы не отображаются кириллицей (вот эти "непонятные символы" вместо русских букв)
ну значит ты его при загрузке перекодируешь в utf8
 

Dmitriy Makarov

25.05.2021
Проверенный
2,513
1,139
но когда я загружаю его на GitHub с автообновлением, после самого "обновления" всё ломается вспять.
Попробуй использовать DropBox вместо GitHub'а. Я в своё время использовал его как раз по этой причине.
Только учти, что в самом скрипте, который будет скачивать новую версию с DropBox'а, нужно в ссылке изменить в конце цифру "0" на цифру "1".
0 - Это режим предпросмотра
1 - Сразу скачивание
Screenshot_1.png
 

Tema05

Известный
1,496
456
Попробуй использовать DropBox вместо GitHub'а. Я в своё время использовал его как раз по этой причине.
Только учти, что в самом скрипте, который будет скачивать новую версию с DropBox'а, нужно в ссылке изменить в конце цифру "0" на цифру "1".
0 - Это режим предпросмотра
1 - Сразу скачивание
Посмотреть вложение 267141
Извините конечно. Но вы серьёзно с кодировкой все не можете разобраться? Это вообще не проблема гитхаба или любого другого сервиса. По такой логике если вы бинарник заливаете туда то в нём тоже представление определённых символов измениться, что означало бы неработоспособность программы. Я ещё 5 лет назад делал автообновление через гитхаб и всё прекрасно работало, сейчас перепроверил и никаких проблем нет. Если что-то не так с кодировкой это ошибка скриптера или реализации автообновления. На худой конец что мешает прогнать код через u8:decode?
 

w99zzl1

Участник
Автор темы
157
18
Попробуй использовать DropBox вместо GitHub'а. Я в своё время использовал его как раз по этой причине.
Только учти, что в самом скрипте, который будет скачивать новую версию с DropBox'а, нужно в ссылке изменить в конце цифру "0" на цифру "1".
0 - Это режим предпросмотра
1 - Сразу скачивание
Посмотреть вложение 267141
Я кстати пользовался им. Автообновление выдавало ошибку и "Запускаю устаревшую версию"
 

Tema05

Известный
1,496
456
Я кстати пользовался им. Автообновление выдавало ошибку и "Запускаю устаревшую версию"
Всм, какое "автообновление"? Ты сам его пишешь целиком. Его код у тебя в скрипте. Я не понимаю, это же не что-то абстрактное
 

w99zzl1

Участник
Автор темы
157
18
Всм, какое "автообновление"? Ты сам его пишешь целиком. Его код у тебя в скрипте. Я не понимаю, это же не что-то абстрактное
Ну... Есть код автообновления, написанный по этому гайду:

Если я использую GitHub для этого (автообн.), то всё работает, кроме проблемы с кодировкой... Если какой то другой хостинг - в процессе автообновления вызывается ошибка. Так как изменяется только ссылка скачивания, вероятно, проблема в ней...

Консоль:
[ML] (script) Med Helper: Не обновлено!
[ML] (script) Med Helper: https://www.dropbox.com/scl/fi/l4od...lper.lua?rlkey=7um4pn1fzrbzo8gnp55tnb1aw&st=1 -- ссылка (переменная updateurl) работает, просто исходник открыт))
[ML] (script) Med Helper: table: 0x0b488200 -- переменная dlstatus

Код:
Lua:
-- в main() перед while true do
autoupdate("ссылка на json на гитхабе", '['..string.upper(thisScript().name)..']: ', "https://www.dropbox.com/scl/fi/l4od7iuvlwh33v3jvhxk2/MedHelper.lua?rlkey=7um4pn1fzrbzo8gnp55tnb1aw&st=1")


--
--     _   _   _ _____ ___  _   _ ____  ____    _  _____ _____   ______   __   ___  ____  _     _  __
--    / \ | | | |_   _/ _ \| | | |  _ \|  _ \  / \|_   _| ____| | __ ) \ / /  / _ \|  _ \| |   | |/ /
--   / _ \| | | | | || | | | | | | |_) | | | |/ _ \ | | |  _|   |  _ \\ V /  | | | | |_) | |   | ' /
--  / ___ \ |_| | | || |_| | |_| |  __/| |_| / ___ \| | | |___  | |_) || |   | |_| |  _ <| |___| . \
-- /_/   \_\___/  |_| \___/ \___/|_|   |____/_/   \_\_| |_____| |____/ |_|    \__\_\_| \_\_____|_|\_\                                                                                                                                                                                                              
--
-- Author: http://qrlk.me/samp
--
function autoupdate(json_url, prefix, url)
    local dlstatus = require('moonloader').download_status
    local json = getWorkingDirectory() .. '\\'..thisScript().name..'-version.json'
    if doesFileExist(json) then os.remove(json) end
    downloadUrlToFile(json_url, json,
      function(id, status, p1, p2)
        if status == dlstatus.STATUSEX_ENDDOWNLOAD then
          if doesFileExist(json) then
            local f = io.open(json, 'r')
            if f then
              local info = decodeJson(f:read('*a'))
              updatelink = info.updateurl
              updateversion = info.latest
              f:close()
              os.remove(json)
              if updateversion ~= thisScript().version then
                lua_thread.create(function(prefix)
                  local dlstatus = require('moonloader').download_status
                  local color = -1
                  sampAddChatMessage((prefix..'Обнаружено обновление. Пытаюсь обновиться c '..thisScript().version..' на '..updateversion), color)
                  print(updatelink)
                  print(dlstatus)
                  wait(250)
                  downloadUrlToFile(updatelink, thisScript().path,
                    function(id3, status1, p13, p23)
                      if status1 == dlstatus.STATUS_DOWNLOADINGDATA then
                        print(string.format('Загружено %d из %d.', p13, p23))
                      elseif status1 == dlstatus.STATUS_ENDDOWNLOADDATA then
                        print('Загрузка обновления завершена.')
                        sampAddChatMessage((prefix..'Обновление завершено!'), color)
                        goupdatestatus = true
                        lua_thread.create(function() wait(500) thisScript():reload() end)
                      end
                      if status1 == dlstatus.STATUSEX_ENDDOWNLOAD then
                        if goupdatestatus == nil then
                          sampAddChatMessage((prefix..'Обновление прошло неудачно. Запускаю устаревшую версию..'), color)
                          update = false
                        end
                      end
                    end
                  )
                  end, prefix
                )
              else
                update = false
                print('v'..thisScript().version..': Обновление не требуется.')
              end
            end
          else
            print('v'..thisScript().version..': Не могу проверить обновление. Смиритесь или проверьте самостоятельно на '..url)
            update = false
          end
        end
      end
    )
    while update ~= false do wait(100) end
  end
В чат выводится ошибка "Обновление прошло неудачно. Запускаю устаревшую версию.". Но стоит мне вместо дропбокса использовать гитхаб - обновляется нормально, ошибки нет.

c гитхабом то же самое, но без ошибок:

[ML] (script) Med Helper: Не обновлено!
[ML] (script) Med Helper: ссылка на url гитхаб с новой версией указанный в json на том же гитхабе
[ML] (script) Med Helper: table: 0x094481f8
[ML] (script) Med Helper: Загрузка обновления завершена.

Типо, проблема в том, что с ссылкой дропбокса автообновление не работает
 
Последнее редактирование: