Ultima modifica da un moderatore:
Intro
Non c'è un motivo preciso per cui l'ho postata (creata adesso in 5min), forse perché ho visto tanti aborti di quest che utilizzavano millemilaif e, nell'ultimo caso, addirittura un game.set_event_flag("language"..pc.get_name()). Roba dell'altro mondo.
Come inserirla
Createvi languagesystem.quest con questo contenuto:
Aggiungete ora le func della quest sul quest_functions: (anche se ./qc vi va in core dump per via delle func mancanti, la quest viene ugualmente compilata eh! dork della ymir)
Ora compilate:
Come utilizzarla su una quest normale
È semplice, potete servirvi di essa sfruttandovi questlib.lua & locale.lua
Altrimenti, eccovi un esempio:
Non c'è un motivo preciso per cui l'ho postata (creata adesso in 5min), forse perché ho visto tanti aborti di quest che utilizzavano millemilaif e, nell'ultimo caso, addirittura un game.set_event_flag("language"..pc.get_name()). Roba dell'altro mondo.
Le differenze maggiori fra un game.g/set_event_flag e un pc.g/setq/f sono le seguenti:
-la prima invia una query al db ogni volta e, se usata per questa cosa, ti "sporca" il server (basta fare /get in game) (too bad)
-la seconda si limita a guardare i valori presenti in memoria (tutte le quest flag del pg vengono salvate in memoria al login sul CHARACTER* intorno agli space 8000/9000) e printarli (too soft), esse si aggiornano sul db ogni 5min(non ho guardato esattamente) circa e/o durante il logout
-la prima invia una query al db ogni volta e, se usata per questa cosa, ti "sporca" il server (basta fare /get in game) (too bad)
-la seconda si limita a guardare i valori presenti in memoria (tutte le quest flag del pg vengono salvate in memoria al login sul CHARACTER* intorno agli space 8000/9000) e printarli (too soft), esse si aggiornano sul db ogni 5min(non ho guardato esattamente) circa e/o durante il logout
Come inserirla
Createvi languagesystem.quest con questo contenuto:
Codice:
quest languagesystem begin
state start begin
function GetMyLan()
--check lingua
local mylan=pc.getf("game_option", "language")
if(mylan==0)then
mylan=1--already local, not global!
end
return mylan
end
function GetMyString(lanid, strid)
--lan-array
local mystrings={
{"Language panel", "No language selected","Which language do you prefer?","Back","Language successfully changed.","","","","","","",""},
{"Pannello lingua", "Nessuna lingua selezionata","Quale lingua preferisci?","Indietro","Lingua correttamente cambiata.","","","","","","",""},
{"stringaincruccolese1","stringaincruccolese2","","","","","","","","","",""},
{"stringainfrancese1","stringainfrancese2","","","","","","","","","",""},
{"stringainspagnolo1","stringainspagnolo2","","","","","","","","","",""},
{"stringaincinese1","stringaincinese2","","","","","","","","","",""},
{"stringaingiapponese1","stringaingiapponese2","","","","","","","","","",""},
}
return mystrings[lanid][strid]
end
when letter begin
send_letter(languagesystem.GetMyString(languagesystem.GetMyLan(), 1))
end
when info or button begin
local mylan=languagesystem.GetMyLan()
local resend_letter=function(title) makequestbutton(title) q.set_title(title) q.start() end
--select language
say_title(languagesystem.GetMyString(mylan, 1))
say(languagesystem.GetMyString(mylan, 3))
local myarsel={"English", "Italiano", "Cruccolese", "Francais", "Cinese", "Giapponese"}
table.insert(myarsel,languagesystem.GetMyString(mylan, 4))
local mysel=select_table(myarsel)
--process language
if(mysel~=table.getn(myarsel))then --no back
mylan=mysel--already local, not global!
pc.setf("game_option", "language", mysel)
end
say_reward(languagesystem.GetMyString(mylan, 5))
--letter remake
resend_letter(languagesystem.GetMyString(mylan, 1))
end
end
end
Codice:
cd /path/to/quest
echo "resend_letter" >> quest_functions
echo "languagesystem.GetMyLan" >> quest_functions
echo "languagesystem.GetMyString" >> quest_functions
Codice:
./qc languagesystem.quest
Come utilizzarla su una quest normale
È semplice, potete servirvi di essa sfruttandovi questlib.lua & locale.lua
Altrimenti, eccovi un esempio:
Codice:
quest examplelan begin
state start begin
when login begin
local mylan=languagesystem.GetMyLan()
local myarr={
{["mex1"]="Welcome!",["mex2"]="blablabla1"},
{["mex1"]="Benvenuto!",["mex2"]="blablabla2"},
{["mex1"]="Willkommen!",["mex2"]="blablabla3"},
{["mex1"]="Bienvenue!",["mex2"]="blablabla4"},
{["mex1"]="Huan Ying!",["mex2"]="blablabla5"},
{["mex1"]="Youkoso!",["mex2"]="blablabla5"},
}
syschat(myarr[mylan].mex1)
--mex2 qua e' inusata i know, potete anche rimuoverla dall'array
end
end
end
Per quanto riguarda l'uso dell'array a mo' di dict (vedesi examplelan) o a mo' di list (vedesi languagesystem) spetta a voi. Ovviamente, a seconda della scelta fatta, l'indicizzazione della quest (e l'iterazione dell'array coi loops come foreach) cambia leggermente.
(anche se sul lua un array lo si definisce con l'appellativo di "table")
(anche se sul lua un array lo si definisce con l'appellativo di "table")