• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwarka nie reaguje na polskie znaki.

Object Storage Arubacloud
0 głosów
264 wizyt
pytanie zadane 13 maja 2018 w Inne języki przez nowy kazik Nowicjusz (160 p.)
zmienione kategorie 13 maja 2018 przez Patrycjerz

Witam Wszystkich.
Nie wiem czy to dobre miejsce ale...  
Nie jestem programistą natomiast amatorsko zajmuję się drobnymi tłumaczeniami plików script i  xml.
Te pliki wykorzystywane są w modach do gry Stalker.
Obecnie chciałem zrobić tłumaczenie spawnera do nowego moda i praktycznie ze wszystkim poradziłem sobie sam
ale na jednym miejscu utknąłem.
Każdy taki spawner posiada okienko wyszukiwarki. Można w nim wpisać nazwę szukanego przedmiotu i jest 
on automatycznie wybierany z listy dostępnych przedmiotów.
Problem pojawia się przy próbie wpisania nazwy przemiotu zawierającą polskie "ogonki".
W okienku wyszukiwarki pojawiają się tylko podstawowe znaki co zatrzymuje automatyczne wyszukiwanie przedmiotu z listy dostępnych.
Przykładowy plik nazywa się ui_cheat_main.script kodowany jest w ANSI i zmiana na kodowanie UTF-7 
powoduje wylot gry do pulpitu.
Sprawdziłem, że po zmianie układu klawiatury na Polski (214) wyszukiwarka działa poprawnie i wyszukuje przedmioty
których nazwy zawierają ąę itd..
Zawartość pliku ui_cheat_main.script

cheat_list = nil
local ss_ver = script_server_object_version()
local ver_prefix = (ss_ver <= 7 and "soc") or ((ss_ver > 7 and ss_ver < 12) and "cs") or (ss_ver >= 12 and "cop")
local not_copy = true
local file = nil

function start_menu(self)    
    if not_copy then
        tolog("ui_cheat_main: copy ini file")
        local f = getFS()
        local f1, f2
        f1 = f:update_path("$game_scripts$", "spawn_list.ltx")
        f2 = f:update_path("$game_config$", "spawn_list.ltx")
        f:file_copy(f1, f2)
        not_copy = false
    end
    
    if cheat_list == nil then
        tolog("ui_cheat_main: create spawn array")
        cheat_list = {}
        local spawn_ini = ini_file("spawn_list.ltx")
        local sections = {"weapons","ammo","addons","outfits","artefacts","items","quest_items","unique"}
        for k,v in pairs(sections) do
            if spawn_ini:section_exist(v) then
                cheat_list[v] = {}
                local t = cheat_list[v]
                local result, id, value
                for i=0,spawn_ini:line_count(v)-1 do
                    result, id, value = spawn_ini:r_line(v,i,"","")
                    if check_item(id) then table.insert(t,id) end
                end
                table.sort(cheat_list[v], sort_sections)
            end
        end
    end
    
    
    if self.spawn_dlg == nil then
        if file == nil then
            file = "ui_cheat_"..ver_prefix
            if not _G[file] then
                file = nil
                tolog("ui_cheat_main: can't find module '%s' for version %d (%s)", file, ss_ver, ver_prefix)
                return
            end
        end
        self.spawn_dlg = _G[file].cheat_menu()
        self.spawn_dlg.owner = self
    end
    
    if ver_prefix == "cop" then
        self.spawn_dlg:ShowDialog(true)
        self:HideDialog()
        self:Show(false)
    else
        self:GetHolder():start_stop_menu(self.spawn_dlg, true)
        self:GetHolder():start_stop_menu(self, true)
        self:Show(false)
    end
end

-- Ńîđňčđóĺě ďđĺäěĺňű ďî ŕëôŕâčňó: ÷ňîá áűëî ďđîůĺ čńęŕňü íóćíîĺ
local abc = [[1234567890aąbcćdeęfghigklmnoópqrsśtuvwxźyzżŕáâăäĺ¸ćçčéęëěíîďđńňóôőö÷řůúűüýţ˙'"«»[]\|/?!@#*$ą:;.,()_-=+%&^`~<>]]
function sort_sections(s1,s2)
    local n1 = game.translate_string(read_if_exist("str", s1, "inv_name", s1))
    local n2 = game.translate_string(read_if_exist("str", s2, "inv_name", s2))
    local cnt = math.min(#n1, #n2)
    for a=1,cnt do
        local l1 = string_lower(string.sub(n1,a,a))
        local l2 = string_lower(string.sub(n2,a,a))
        local f1 = string.find(abc,l1,1,true) or 0
        local f2 = string.find(abc,l2,1,true) or 0
        if f1~=f2 then
            return f1<f2
        end
    end
    return #n1<#n2
end

function give_icon_params(section)
    local t = {}
    t.width = read_if_exist("u32", section, "inv_grid_width", 1)*50
    t.height = read_if_exist("u32", section, "inv_grid_height", 1)*50
    t.x = read_if_exist("u32", section, "inv_grid_x", 8)*50
    t.y = read_if_exist("u32", section, "inv_grid_y", 13)*50
    return t
end

function spawn_item(section)
    if not section then return end
    if check_game() then
        alife():create(section,vector(),0,0,0)
        local snd = sound_object([[detectors\contact_1]])
        snd:play(db.actor, 0, sound_object.s2d)
    end
end

function check_game()
    return alife()~=nil and db.actor and db.actor:alive()
end

function read_if_exist(what, section, line, def, ini)
    if not ini then ini = system_ini() end
    if section and ini:section_exist(section) and ini:line_exist(section,line) then
        if what == "flt" then
            return ini:r_float(section,line)
        elseif what == "u32" then
            return ini:r_u32(section,line)
        elseif what == "str" then
            return ini:r_string(section,line)
        elseif what == "bln" then
            return ini:r_bool(section,line)
        end
    end
    return def
end

function string_lower(str)
    local low = [[qweęrtyuioópaąsśdfghjklzżxźcćvbnméöóęĺíăřůçőúôűâŕďđîëäćý˙÷ńěčňüáţ¸]]
    local high = [[QWEĘRTYUIOÓPAĄSŚDFGHJKLZŻXŹCĆVBNMÉÖÓĘĹÍĂŘŮÇŐÚÔŰÂŔĎĐÎËÄĆÝß×ŃĚČŇÜÁި]]
    local low_str = ""
    for i = 1, #str do
        local letter = string.sub(str,i,i)
        for a = 1,#high do
            if letter == string.sub(high,a,a) then letter = string.sub(low,a,a) break end
        end
        low_str = low_str..letter
    end
    return low_str
end

function check_item(section)
    if system_ini():section_exist(section) then
        if read_if_exist("bln", section, "can_take", true)==true
            and read_if_exist("str", section, "class", nil)~=nil
            and read_if_exist("str", section, "description", nil)~=nil
            and read_if_exist("str", section, "inv_name", nil)~=nil
            and read_if_exist("str", section, "visual", nil)~=nil then return true
        else tolog("ERROR! Incorrect section for spawn [%s]",section) return false end
    else
        tolog("ERROR! Section not found: [%s]",section)
        return false
    end
end

function tolog(fmt,...)
    if alife()~=nil then
        local con = get_console()
        local msg = string.format(fmt,...)
        con:execute("load ~cheat~ "..msg)
    end
end

Cały plik na moim hoście:
https://my.pcloud.com/publink/show?code=XZCbDh7Z7SP1l1IIUBVBGh6F54ER8XVKQfXk
Nie wiem co mogę jeszcze dodać ale może ktoś się odezwie.

Pozdrawiam

komentarz 13 maja 2018 przez Mariusz08 Maniak (62,300 p.)
Zła kategoria i język bloczka z kodem
komentarz 13 maja 2018 przez nowy kazik Nowicjusz (160 p.)
Problem polega na tym, że nie znam się na tym i proszę o podpowiedź co zmienić.
komentarz 13 maja 2018 przez Mariusz08 Maniak (62,300 p.)

 co zmienić

Kategorię oraz język bloczka z kodem 

komentarz 13 maja 2018 przez nowy kazik Nowicjusz (160 p.)
To już wiem z pierwszej informacji.
To może spytam inaczej na jaką kategorię i jaki język bloczka z kodem?
komentarz 13 maja 2018 przez Mariusz08 Maniak (62,300 p.)
Już nic nie musisz zmieniać, Patrycjerz zrobił to za Ciebie :)
komentarz 13 maja 2018 przez nowy kazik Nowicjusz (160 p.)
:) Dzięki

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 355 wizyt
0 głosów
1 odpowiedź 727 wizyt
0 głosów
2 odpowiedzi 1,400 wizyt
pytanie zadane 26 października 2020 w Python przez Igorek Mądrala (6,290 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...