Unmantained Quest [RELEASE]Caratteri latini con accenti nelle quest

Una guida contrassegnata come Unmantained contiene informazioni su un argomento obsoleto, non più utile o files non aggiornati da parte del creatore.
Stato
Discussione chiusa ad ulteriori risposte.

Skhiroth

Utente Electrum
23 Novembre 2013
390
12
245
198
Ultima modifica da un moderatore:
Salve gente,
vi mostro questa funzione utile alla conversione/codifica dei caratteri UTF-8 in unicode/ASCII.

Codice:
--[[
    Devilkyroth's small library for encode utf8 characters to ASCII/unicode.
]]--

_say                = say
_chat                = chat
_syschat            = syschat
_cmdchat            = cmdchat
_notice                = notice
_notice_all            = notice_all

say = function(text)
    return _say(utf8_decode(text))
end

chat = function(text)
    return _chat(utf8_decode(text))
end

syschat = function(text)
    return _syschat(utf8_decode(text))
end

cmdchat = function(text)
    return _cmdchat(utf8_decode(text))
end

notice = function(text)
    return _notice(utf8_decode(text))
end

notice_all = function(text)
    return _notice_all(utf8_decode(text))
end

function utf8_decode(utf8)
    local unicode = ""
    local mod = math.mod
         
    local pos = 1
    while pos < string.len(utf8)+1 do
         
        local v = 1
        local c = string.byte(utf8,pos)
        local n = 0
         
        if c < 128 then
            v = c
        elseif c < 192 then
            v = c
        elseif c < 224 then
            v = mod(c, 32) n = 2
        elseif c < 240 then
            v = mod(c, 16) n = 3
        elseif c < 248 then
            v = mod(c,  8) n = 4
        elseif c < 252 then
            v = mod(c,  4) n = 5
        elseif c < 254 then
            v = mod(c,  2) n = 6
        else
            v = c 
        end
            
        for i = 2, n do
            pos = pos + 1
            c = string.byte(utf8,pos)
            v = v * 64 + mod(c, 64)
        end
         
        pos = pos + 1
        if v < 255 then
            unicode = unicode..string.char(v) 
        end
    end
    return unicode
 end

Guida all'utilizzo:
Copiare il codice riportato sopra in un file separato dal questlib.lua (per comodità..) ed includerlo col comando "dofile" all'inizio del questlib.lua, oppure, copiare direttamente il codice all'interno del questlib.lua nelle prime righe.
Riavviate oppure fatte un bel "reload q" in game e aprire una delle vostre quest con accenti in game. (Non è più necessario il sayf.)
Godetevi le vostre quest accentate. :rulz:

Per chi non ha capito di cosa sto parlando, guardi quest'immagine:
KNQgFUL.png
 
Scomoda, semplicemente no.

Non si può utilizzare una funzione totalmente nuova per una simile inerzia, esiste già il charset.txt
 
Ultima modifica:
Scomoda, semplicemente no.

Non si può utilizzare una funzione totalmente nuova per una simile inerzia, esiste già il charset.txt

Ci feci la release, o meglio una test-release, sul charset.txt, che a quanto pare a molti non funzionava e quindi l'ho lasciato per non funzionante anche sé a me funzionava. Ovviamente, ognuno di noi può trovare un metodo più comodo che un altro, per esempio io, di solito, utilizzo il locale.lua e/o settings.lua.

Potete anche cambiare il charset nel db in latin1, database common, tabella locale :omfg:
Già impostato così.. (l'avevo già latin1 quando ho fatto lo screen.) ma niente da fare.
 
Potete anche cambiare il charset nel db in latin1, database common, tabella locale :omfg:

- - - Updated - - -

Già impostato così.. (l'avevo già latin1 quando ho fatto lo screen.) ma niente da fare.

Allora direi che manca qualcos'altro, io gli accenti li usavo senza nessun tipo di problema.
In ogni caso la tua funzioncina è comoda perchè di norma le quest, al termine di una stringa, non accettano accenti in quanto blocca tutta l'esecuzione della quest (conoscere perchè nn sarebbe male lol).
Se la tua funzione viene integrata nel questlib, e riscrivi la funzione say, risolvi praticamente tutti i problemi :D
 
Ultima modifica:
forse il collation?

In genere utilizzo "_general_ci", ma ne ho testati anche alcuni degli altri.
Ho, inoltre, cercato di impostarlo UTF-8, ma con esito negativo.

Potete anche cambiare il charset nel db in latin1, database common, tabella locale :omfg:

- - - Updated - - -



Allora direi che manca qualcos'altro, io gli accenti li usavo senza nessun tipo di problema.
In ogni caso la tua funzioncina è comoda perchè di norma le quest, al termine di una stringa, non accettano accenti in quanto blocca tutta l'esecuzione della quest (conoscere perchè nn sarebbe male lol).
Se la tua funzione viene integrata nel questlib, e riscrivi la funzione say, risolvi praticamente tutti i problemi :D
Allora sono io sfortunato, lol.
PS: A breve aggiornerò col say già encodato (oltre i notice e blabla).

- - - Updated - - -

Discussione aggiornata.
 
In genere utilizzo "_general_ci", ma ne ho testati anche alcuni degli altri.
Ho, inoltre, cercato di impostarlo UTF-8, ma con esito negativo.


Allora sono io sfortunato, lol.
PS: A breve aggiornerò col say già encodato (oltre i notice e blabla).

- - - Updated - - -

Discussione aggiornata.

Ottimo.
 
Uppo la discussione dicendo che nel caso non funzioni, cioè dopo aver messo lo script, non apre più le finestre con gli accenti, è perché già vi si vedevano, o almeno questo è successo da un amico!
 
Stato
Discussione chiusa ad ulteriori risposte.