Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Wyszukiwarka w spawnerze nie reaguje na polskie znaki

#1
Wyszukiwarka w spawnerze nie reaguje na polskie znaki
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.. co widać na poniższym zrzucie:

[Obrazek: c01a38d179447da9med.jpg]


Zawartość pliku ui_cheat_main.script

Kod:
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=...ER8XVKQfXk
Nie wiem co mogę jeszcze dodać ale może ktoś się odezwie.

p.s. Otrzymałem informację, że należy użyć zmodyfikowanego keylogera ale jak to zrobić a może inaczej jak zmusić plik
script do reakcji na wciśnięty klawisz alt?
 System operacyjny: windows_ten Przeglądarka: chrome
Programy: Polecane / Nowe / Inne




Podobne wątki (Wyszukiwarka w spawnerze nie reaguje na polskie znaki)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana c++ obiektowe funkcja wstawiajaca znaki w odpowienich miejscach nie działa Mordrak 4 4782 21.01.2015, 00:27
Ostatni post: Mordrak
  [Ruby] Polskie znaki w konsoli Narzew 1 2789 11.02.2014, 21:16
Ostatni post: Dyzajash
  co zrobic aby readkey czytal okreslone znaki [pascal] Mordrak 2 2174 13.12.2013, 02:19
Ostatni post: Mordrak

Skocz do:


Wybrane wątki (Wyszukiwarka w spawnerze nie reaguje na polskie znaki)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C# Problem] Rysowanie histogramu poziomego. Ayumi 4 4319 20.01.2017 03:15
Ostatni post: Ayumi
  VisualBasic - tablicowanie wartości funkcji . samanta19 2 4115 20.01.2017 01:01
Ostatni post: samanta19
  Jak uruchomic plik pod warunkiem, że nie był uruchamiany w batch? toslaw1 5 1335 16.01.2017 17:21
Ostatni post: toslaw1
  [C++]Problem z wyszukiwaniem liczb w tekście i szukaniem słowa w słowie Niyabi 1 4022 15.01.2017 15:53
Ostatni post: Szachista
  Visual Basic - szeregi angelika.m 2 4302 12.01.2017 23:57
Ostatni post: angelika.m
  Baza danych w Accessie - sprawdzenie poprawności Fei 1 3895 12.01.2017 00:40
Ostatni post: Chudy2000
  Tworzenie instalatora modów do gier kubasek2001 5 5527 08.01.2017 17:27
Ostatni post: MrBoombastic
Cry [JS] Sumowanie ciągu liczb Guanabanana 3 4234 05.01.2017 08:54
Ostatni post: koneton
  [Kwerendy] Prośba o pomoc w rozwiązaniu zadań fifa1k 1 3614 04.01.2017 19:50
Ostatni post: Szachista
Ściana Kompilacja programu C# tommig1983 1 3932 27.12.2016 09:29
Ostatni post: aht
  Inkrementacja a pętla while Cixi 2 3903 22.12.2016 21:47
Ostatni post: Cixi
  "pisanie" aplikacji wykorzystująca bazę sql Cixi 2 4473 20.12.2016 17:07
Ostatni post: Cixi
Ściana [C++] Dodawanie char do scieżki pliku Smokolisz 1 3829 16.12.2016 10:30
Ostatni post: Szachista
Ściana [BATCH] Zamykanie konsoli po wykonaniu poleceń Smokolisz 4 3969 14.12.2016 18:54
Ostatni post: Smokolisz
  [C++/BATCH] Kopiowanie do schowka Smokolisz 0 3507 14.12.2016 11:03
Ostatni post: Smokolisz