diff --git a/main.lua b/main.lua index dc8c9faf..e8e3f144 100644 --- a/main.lua +++ b/main.lua @@ -63,6 +63,7 @@ FIELD[1]=newBoard()--Initialize field[1] NET= require"parts.net" AIBUILDER= require"parts.AITemplate" FREEROW= require"parts.freeRow" +USERS= require"parts.users" TEXTURE= require"parts.texture" SKIN= require"parts.skin" diff --git a/parts/gametoolfunc.lua b/parts/gametoolfunc.lua index 44f3b301..60568f41 100644 --- a/parts/gametoolfunc.lua +++ b/parts/gametoolfunc.lua @@ -973,7 +973,7 @@ do--function saveRecording() os.date("%Y/%m/%d %A %H:%M:%S\n").. GAME.curModeName.."\n".. VERSION.string.."\n".. - (USER.username or"Player") + "Local Player" local fileBody= GAME.seed.."\n".. JSON.encode(GAME.setting).."\n".. @@ -1021,7 +1021,7 @@ do--function drawFWM() local t=TIME() setFont(25) gc_setColor(1,1,1,.2+.1*(sin(3*t)+sin(2.6*t))) - mStr(m[SETTING.lang]or m[1],240,60+26*sin(t)) + mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t)) end end function drawWarning() diff --git a/parts/globalTables.lua b/parts/globalTables.lua index eabb78ae..04e7c4fc 100644 --- a/parts/globalTables.lua +++ b/parts/globalTables.lua @@ -222,14 +222,12 @@ GAME={--Global game data RANKS=FILE.load("conf/unlock")or{sprint_10l=0}--Ranks of modes USER=FILE.load("conf/user")or{--User infomation --Network infos - username=false, uid=false, authToken=false, --Local data xp=0,lv=1, } -USERS=FILE.load("conf/users")or{} SETTING={--Settings --Tuning das=10,arr=2,dascut=0, diff --git a/parts/net.lua b/parts/net.lua index a39fb247..9863a2fe 100644 --- a/parts/net.lua +++ b/parts/net.lua @@ -145,30 +145,11 @@ function NET.getUserInfo(id,ifDetail) WS.send("user",JSON.encode{ action=1, data={ - id=id or USER.uid, + id=id, detailed=ifDetail or false, }, }) end -function NET.storeUserInfo(d) - local user=USERS[d.uid] - if not user then - user={} - USERS[d.uid]=user - end - user.uid=d.uid - user.username=d.username - user.motto=d.motto - user.avatar=d.avatar - - --Get own name - if d.uid==USER.uid then - USER.username=d.username - FILE.save(USER,"conf/user","q") - end - - -- FILE.save(USERS,"conf/users") -end --Room function NET.fetchRoom() @@ -316,14 +297,14 @@ function NET.updateWS_user() LOG.print(text.loginSuccessed) --Get self infos - NET.getUserInfo(USER.uid) + NET.getUserInfo() NET.unlock("wsc_user") elseif res.action==0 then--Get accessToken NET.accessToken=res.accessToken LOG.print(text.accessSuccessed) NET.wsconn_play() elseif res.action==1 then--Get userInfo - NET.storeUserInfo(res.data) + USERS.updateUserData(res.data) end else WS.alert("user") @@ -490,9 +471,8 @@ function NET.updateWS_stream() elseif res.action==3 then--Player leave --? elseif res.action==4 then--Player died - local uid=res.data.uid for _,P in next,PLY_ALIVE do - if P.uid==uid then + if P.uid==d.uid then P:lose(true) break end diff --git a/parts/scenes/net_menu.lua b/parts/scenes/net_menu.lua index cee6519e..ff8d9cf2 100644 --- a/parts/scenes/net_menu.lua +++ b/parts/scenes/net_menu.lua @@ -20,7 +20,6 @@ scene.widgetList={ if USER.uid then NET.wsclose_play() NET.wsclose_user() - USER.username=false USER.uid=false USER.authToken=false FILE.save(USER,"conf/user","q") diff --git a/parts/scenes/net_rooms.lua b/parts/scenes/net_rooms.lua index 0f38b9bf..4c823fdc 100644 --- a/parts/scenes/net_rooms.lua +++ b/parts/scenes/net_rooms.lua @@ -38,7 +38,7 @@ function scene.keyDown(k) kb.isDown("4")and"r99"or kb.isDown("5")and"unlimited" )or"solo", - (USER.username or"???").."'s room" + (USERS.getName(USER.uid)or"???").."'s room" ) lastCreateRoomTime=TIME() else diff --git a/parts/users.lua b/parts/users.lua new file mode 100644 index 00000000..dc9161d6 --- /dev/null +++ b/parts/users.lua @@ -0,0 +1,81 @@ +local loadImage=love.graphics.newImage +local fs=love.filesystem + +local ins=table.insert + +local texture_noImage=DOGC{32,32, + {"rgb",0,0,0}, + {"rect","fill",0,0,32,32}, + {"rgb",1,1,1}, + {"wid",3}, + {"line",0,0,31,31}, + {"line",0,31,31,0}, +} + +local function _getEmptyUser() + return{ + uid=-1, + username="[X]", + motto="Techmino haowan", + hash=false, + new=false, + } +end + +local imgReqSeq={} +local db_img={} +local db=setmetatable({},{__index=function(self,k) + local file="cache/user"..k..".dat" + if fs.getInfo(file)then + rawset(self,k,JSON.decode(fs.read(file))) + if fs.getInfo(self[k].hash)then + db_img[k].avatar=loadImage(self[k].hash) + end + else + rawset(self,k,_getEmptyUser()) + end + return self[k] +end}) + +local USERS={} + +function USERS.updateUserData(data) + local uid=data.uid + db[uid].username=data.username + db[uid].motto=data.motto + fs.write("cache/user"..uid..".dat",JSON.encode{ + username=data.username, + motto=data.motto, + hash=data.hash, + }) + if data.avatar then + fs.write("cache/"..data.hash,data.avatar:sub(data.avatar:find","+1)) + db_img[uid].avatar=loadImage("cache/"..data.hash) + db[uid].hash=data.hash + db[uid].new=true + end + needSave=true +end + +function USERS.getUsername(uid)return db[uid].username end +function USERS.getMotto(uid)return db[uid].motto end +function USERS.getAvatar(uid) + if db_img[uid]then + return db_img[uid] + else + if not db[uid].new then + ins(imgReqSeq,uid) + db[uid].new=true + end + return texture_noImage + end +end + +function USERS.update() + if #imgReqSeq>0 and WS.status("user")=="running"then + NET.getUserInfo(imgReqSeq[#imgReqSeq],true) + imgReqSeq[#imgReqSeq]=nil + end +end + +return USERS \ No newline at end of file