diff --git a/Zframework/file.lua b/Zframework/file.lua index 1dd65180..9a167c40 100644 --- a/Zframework/file.lua +++ b/Zframework/file.lua @@ -1,176 +1,51 @@ local fs=love.filesystem - -local files={ - data= fs.newFile("data.dat"), - setting=fs.newFile("settings.dat"), - network=fs.newFile("network.dat"), - VK= fs.newFile("virtualkey.dat"), - keyMap= fs.newFile("key.dat"), - unlock= fs.newFile("unlock.dat"), -} - local FILE={} -function FILE.loadRecord(N) - local F=fs.newFile(N..".dat") +function FILE.load(name) + name=name..".dat" + local F=fs.newFile(name) if F:open("r")then - local s=loadstring(F:read()) + local s=F:read() F:close() - if s then - setfenv(s,{}) - return s() + if s:sub(1,6)=="return"then + s=loadstring(s) + if s then + setfenv(s,{}) + return s() + end else - return{} + local _,res=json.decode(s) + if _ then + return res + else + LOG.print(name.." "..text.loadError..(mes or"unknown error"),COLOR.red) + end end end end -function FILE.saveRecord(N,L) - local F=fs.newFile(N..".dat") - F:open("w") - local _,mes=F:write(dumpTable(L)) - F:flush()F:close() - if not _ then - LOG.print(text.recSavingError..(mes or"unknown error"),COLOR.red) +function FILE.save(data,name,mode,luacode) + if not mode then mode="m"end + name=name..".dat" + local _,mes + if not luacode then + _,data=json.encode(data) + if not _ then + LOG.print(name.." "..text.saveError..(mes or"json error"),"error") + return + end + else + data=dumpTable(data) end -end -function FILE.delRecord(N) - fs.remove(N..".dat") -end -function FILE.loadUnlock() - local F=files.unlock - if F:open("r")then - local s=F:read() - if s:sub(1,6)~="return"then s="return{"..s.."}"end - s=loadstring(s) - F:close() - if s then - setfenv(s,{}) - RANKS=s() - end - end -end -function FILE.saveUnlock() - local F=files.unlock + local F=fs.newFile(name) F:open("w") - local _,mes=F:write(dumpTable(RANKS)) + _,mes=F:write(data) F:flush()F:close() - if not _ then - LOG.print(text.unlockSavingError..(mes or"unknown error"),COLOR.red) - end -end - -function FILE.loadData() - local F=files.data - if F:open("r")then - local s=F:read() - if s:sub(1,6)~="return"then - s="return{"..s:gsub("\n",",").."}" + if _ then + if mode:find("m")then + LOG.print(text.saveDone,COLOR.green) end - s=loadstring(s) - F:close() - if s then - setfenv(s,{}) - local S=s() - addToTable(S,STAT) - end - end -end -function FILE.saveData() - local F=files.data - F:open("w") - local _,mes=F:write(dumpTable(STAT)) - F:flush()F:close() - if not _ then - LOG.print(text.statSavingError..(mes or"unknown error"),COLOR.red) - end -end - -function FILE.loadSetting() - local F=files.setting - if F:open("r")then - local s=F:read() - if s:sub(1,6)~="return"then - s="return{"..s:gsub("\n",",").."}" - end - s=loadstring(s) - F:close() - if s then - setfenv(s,{}) - addToTable(s(),SETTING) - end - end -end -function FILE.saveSetting() - local F=files.setting - F:open("w") - local _,mes=F:write(dumpTable(SETTING)) - F:flush()F:close() - if _ then LOG.print(text.settingSaved,COLOR.green) - else LOG.print(text.settingSavingError..(mes or"unknown error"),COLOR.red) - end -end - -function FILE.loadAccount() - local F=files.setting - if F:open("r")then - local s=F:read() - if s:sub(1,6)~="return"then - s="return{"..s:gsub("\n",",").."}" - end - s=loadstring(s) - F:close() - if s then - setfenv(s,{}) - addToTable(s(),ACCOUNT) - end - end -end -function FILE.saveAccount() - local F=files.setting - F:open("w") - F:write(dumpTable(ACCOUNT)) - F:flush()F:close() -end - -function FILE.loadKeyMap() - local F=files.keyMap - if F:open("r")then - local s=loadstring(F:read()) - F:close() - if s then - setfenv(s,{}) - addToTable(s(),keyMap) - end - end -end -function FILE.saveKeyMap() - local F=files.keyMap - F:open("w") - local _,mes=F:write(dumpTable(keyMap)) - F:flush()F:close() - if _ then LOG.print(text.keyMapSaved,COLOR.green) - else LOG.print(text.keyMapSavingError..(mes or"unknown error"),COLOR.red) - end -end - -function FILE.loadVK() - local F=files.VK - if F:open("r")then - local s=loadstring(F:read()) - F:close() - if s then - setfenv(s,{}) - addToTable(s(),VK_org) - end - end -end -function FILE.saveVK() - local F=files.VK - F:open("w") - local _,mes=F:write(dumpTable(VK_org)) - F:flush()F:close() - if _ then LOG.print(text.VKSaved,COLOR.green) - else LOG.print(text.VKSavingError..(mes or"unknown error"),COLOR.red) + else + LOG.print(text.saveError..(mes or"unknown error"),"error") end end return FILE \ No newline at end of file diff --git a/main.lua b/main.lua index 137757f2..17cb43b6 100644 --- a/main.lua +++ b/main.lua @@ -17,13 +17,13 @@ SYSTEM=love.system.getOS() MOBILE=SYSTEM=="Android"or SYSTEM=="iOS" SAVEDIR=fs.getSaveDirectory() +--Global Vars & Settings MARKING=true LOADED=false NOGAME=false LOGIN=false EDITING="" ---Global Setting & Vars math.randomseed(os.time()*626) love.keyboard.setKeyRepeat(true) love.keyboard.setTextInput(false) @@ -140,7 +140,7 @@ end --Load files & settings if fs.getInfo("settings.dat")then - FILE.loadSetting() + SETTING=FILE.load("settings") else if MOBILE then SETTING.VKSwitch=true @@ -155,10 +155,11 @@ end LANG.set(SETTING.lang) if SETTING.fullscreen then love.window.setFullscreen(true)end -if fs.getInfo("unlock.dat")then FILE.loadUnlock()end -if fs.getInfo("data.dat")then FILE.loadData()end -if fs.getInfo("key.dat")then FILE.loadKeyMap()end -if fs.getInfo("virtualkey.dat")then FILE.loadVK()end +if fs.getInfo("unlock.dat")then RANKS=FILE.load("unlock")end +if fs.getInfo("data.dat")then STAT=FILE.load("data")end +print(STAT.version) +if fs.getInfo("key.dat")then keyMap=FILE.load("key")end +if fs.getInfo("virtualkey.dat")then VK_org=FILE.load("virtualkey")end if fs.getInfo("tech_ultimate.dat")then fs.remove("tech_ultimate.dat")end if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end @@ -197,22 +198,9 @@ do if S.extraRate then S.finesseRate=5*(S.piece-S.extraRate) end - if S.version~=VERSION_NAME then - S.version=VERSION_NAME + if S.version~=VERSION_CODE then newVersionLaunch=true - if not VERSION_NAME:find("0.12")or VERSION_NAME:find("0.12.0")then - local function delRecord(n) - if R[n]then - R[n]=0 - fs.remove(n..".dat") - end - end - delRecord("solo_1")delRecord("solo_2")delRecord("solo_3")delRecord("solo_4")delRecord("solo_5") - delRecord("dig_10")delRecord("dig_40")delRecord("dig_100")delRecord("dig_400") - delRecord("classic_fast") - end - --Try unlock modes which should be unlocked for name,rank in next,RANKS do if rank and rank>0 then @@ -227,8 +215,10 @@ do end end end - FILE.saveUnlock() - FILE.saveData() + + S.version=VERSION_CODE + FILE.save(RANKS,"unlock","") + FILE.save(STAT,"data","") end if MOBILE and not SETTING.fullscreen then LOG.print("如果手机上方状态栏不消失,请到设置界面开启全屏",300,COLOR.yellow) diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 5345d7a6..8334c85e 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -45,15 +45,9 @@ return{ ai_fixed="The AI is incompatible with fixed sequences.", ai_prebag="The AI is incompatible with custom sequences.", ai_mission="The AI is incompatible with custom missions.", - settingSaved="Settings Saved", - settingSavingError="Failed to save settings:", - keyMapSaved="Key settings saved", - keyMapSavingError="Failed to save key settings:", - VKSaved="Virtual keys saved", - VKSavingError="Failed to save virtual key configuration:", - statSavingError="Failed to save statistics:", - unlockSavingError="Failed to save unlocked content:", - recSavingError="Failed to save record:", + saveDone="Data Saved", + saveError="Failed to save:", + loadError="Failed to read:", switchSpawnSFX="Switch on spawn SFX to play", ranks={"D","C","B","A","S"}, diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 6229db4c..8c526da1 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -48,15 +48,9 @@ return{ ai_fixed="L'IA est incompatible avec les séquences fixes.", ai_prebag="L'IA est incompatible avec les séquences personnalisées.", ai_mission="L'IA est incompatible avec les missions personnalisées.", - settingSaved="Paramètres sauvegardés", - settingSavingError="Erreur de sauvegarde des paramètres :", - keyMapSaved="Touches sauvegardées.", - keyMapSavingError="Erreur de sauvegarde des touches :", - VKSaved="Touches virtuelles sauvegardées", - VKSavingError="Erreur de sauvegarde des touches virtuelles :", - statSavingError="Erreur de sauvegarde des statistiques :", - unlockSavingError="Erreur de sauvegarde du contenu débloqué :", - recSavingError="Erreur de sauvegarde des records :", + -- saveDone="Data Saved", + -- saveError="Failed to save:", + -- loadError="Failed to read:", switchSpawnSFX="Activez les effets sonores d'apparition des pièces pour jouer", getRank="Rang: ", diff --git a/parts/language/lang_sp.lua b/parts/language/lang_sp.lua index 60474bbd..bfe3cc87 100644 --- a/parts/language/lang_sp.lua +++ b/parts/language/lang_sp.lua @@ -48,14 +48,9 @@ return{ ai_prebag="La IA no es compatible con secuencias de piezas personalizadas.", ai_mission="La IA no es compatible con misiones personalizadas.", settingSaved="Cambios guardados", - settingSavingError="Error al guardar los cambios:", - keyMapSaved="Configuración de controles guardada", - keyMapSavingError="Error al guardar la configración de controles:", - VKSaved="Configuración de botones en pantalla guardada", - VKSavingError="Error al guardar la configuración de botones en pantalla:", - statSavingError="Error al guardar las estadísticas:", - unlockSavingError="Error al guardar el contenido desbloqueado:", - recSavingError="Error al guardar la grabación:", + -- saveDone="Data Saved", + -- saveError="Failed to save:", + -- loadError="Failed to read:", switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)", getRank="Rango obtenido:", diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index 2d782b4a..351890cb 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -38,15 +38,9 @@ return{ ai_fixed="X!!!", ai_prebag="X!!!", ai_mission="X!!!", - settingSaved="~~~", - settingSavingError="x!:", - keyMapSaved="~~~", - keyMapSavingError="x!:", - VKSaved="~~~", - VKSavingError="x!:", - statSavingError="x!:", - unlockSavingError="x!:", - recSavingError="x!:", + saveDone="~~~", + saveError="x!:", + loadError="x!:", needRestart="!!*#R#*!!", exportSuccess="~Out~", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 2583f1d3..4a7ce5fb 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -46,15 +46,9 @@ return{ ai_fixed="不能同时开启AI和固定序列", ai_prebag="不能同时开启AI和自定义序列", ai_mission="不能同时开启AI和自定义任务", - settingSaved="设置已保存", - settingSavingError="设置保存失败:", - keyMapSaved="键位设置已保存", - keyMapSavingError="键位保存失败:", - VKSaved="虚拟按键设置已保存", - VKSavingError="虚拟按键保存失败:", - statSavingError="统计保存失败:", - unlockSavingError="解锁保存失败:", - recSavingError="纪录保存失败:", + saveDone="保存成功!", + saveError="保存失败:", + loadError="读取失败:", switchSpawnSFX="请开启方块出生音效", ranks={"D","C","B","A","S"}, diff --git a/parts/player/player.lua b/parts/player/player.lua index 7d97800b..521f5db1 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -1358,7 +1358,7 @@ end ---------------------------------------------------- local function gameOver()--Save record if GAME.replaying then return end - FILE.saveData() + FILE.save(STAT,"data") local M=GAME.curMode local R=M.getRank if R then @@ -1388,7 +1388,7 @@ local function gameOver()--Save record end end if needSave then - FILE.saveUnlock() + FILE.save(RANKS,"unlock") end local D=M.score(P) local L=M.records @@ -1406,7 +1406,7 @@ local function gameOver()--Save record D.date=os.date("%Y/%m/%d %H:%M") ins(L,p+1,D) if L[11]then L[11]=nil end - FILE.saveRecord(M.name,L) + FILE.save(L,M.name,"",true) end end end diff --git a/parts/scenes/calculator.lua b/parts/scenes/calculator.lua index b4a4188a..74bee75f 100644 --- a/parts/scenes/calculator.lua +++ b/parts/scenes/calculator.lua @@ -82,7 +82,7 @@ function keyDown.calculator(k) RANKS[name]=M.score and 0 or 6 end end - FILE.saveUnlock() + FILE.save(RANKS,"unlock") LOG.print("\68\69\86\58\85\78\76\79\67\75\65\76\76","message") SFX.play("clear_2") elseif v==1379e8+2626e4+1379 then diff --git a/parts/scenes/lang.lua b/parts/scenes/lang.lua index 0d1c0cdc..8bd34568 100644 --- a/parts/scenes/lang.lua +++ b/parts/scenes/lang.lua @@ -1,5 +1,5 @@ function sceneBack.lang() - FILE.saveSetting() + FILE.save(SETTING,"settings") end local function setLang(n)return function()SETTING.lang=n LANG.set(n)end end diff --git a/parts/scenes/load.lua b/parts/scenes/load.lua index 9a6dbc89..fd6efa41 100644 --- a/parts/scenes/load.lua +++ b/parts/scenes/load.lua @@ -70,7 +70,7 @@ function Tmr.load() for k,v in next,m do M[k]=v end - M.records=FILE.loadRecord(m.name)or M.score and{} + M.records=FILE.load(m.name)or M.score and{} if M.score then if RANKS[M.name]==6 then RANKS[M.name]=0 diff --git a/parts/scenes/pause.lua b/parts/scenes/pause.lua index eb92032b..32f2a9ff 100644 --- a/parts/scenes/pause.lua +++ b/parts/scenes/pause.lua @@ -117,7 +117,9 @@ function sceneBack.pause() if not GAME.replaying then mergeStat(STAT,PLAYERS[1].stat) end - FILE.saveData() + if not GAME.result then + FILE.save(STAT,"data") + end end function keyDown.pause(key) diff --git a/parts/scenes/setting_game.lua b/parts/scenes/setting_game.lua index e570c7c2..35a025b6 100644 --- a/parts/scenes/setting_game.lua +++ b/parts/scenes/setting_game.lua @@ -7,7 +7,7 @@ function sceneInit.setting_game() BG.set("space") end function sceneBack.setting_game() - FILE.saveSetting() + FILE.save(SETTING,"settings") end function Pnt.setting_game() diff --git a/parts/scenes/setting_key.lua b/parts/scenes/setting_key.lua index f7abdc43..d5697cc3 100644 --- a/parts/scenes/setting_key.lua +++ b/parts/scenes/setting_key.lua @@ -13,7 +13,7 @@ function sceneInit.setting_key() } end function sceneBack.setting_key() - FILE.saveKeyMap() + FILE.save(keyMap,"key") end function keyDown.setting_key(key) diff --git a/parts/scenes/setting_sound.lua b/parts/scenes/setting_sound.lua index f3d1416e..f28c75c9 100644 --- a/parts/scenes/setting_sound.lua +++ b/parts/scenes/setting_sound.lua @@ -13,7 +13,7 @@ function sceneInit.setting_sound() BG.set("space") end function sceneBack.setting_sound() - FILE.saveSetting() + FILE.save(SETTING,"settings") end function mouseDown.setting_sound(x,y) diff --git a/parts/scenes/setting_touch.lua b/parts/scenes/setting_touch.lua index df43493b..db58eb5e 100644 --- a/parts/scenes/setting_touch.lua +++ b/parts/scenes/setting_touch.lua @@ -13,7 +13,7 @@ function sceneInit.setting_touch() } end function sceneBack.setting_touch() - FILE.saveVK() + FILE.save(VK_org,"virtualkey") end local function onVK_org(x,y) diff --git a/parts/scenes/setting_video.lua b/parts/scenes/setting_video.lua index de79a015..fd925622 100644 --- a/parts/scenes/setting_video.lua +++ b/parts/scenes/setting_video.lua @@ -2,7 +2,7 @@ function sceneInit.setting_video() BG.set("space") end function sceneBack.setting_video() - FILE.saveSetting() + FILE.save(SETTING,"settings") end WIDGET.init("setting_video",{