wujia il y a 6 mois
Parent
commit
dd53cde149

+ 2 - 2
assets/package/prefab/login/LoginUI.prefab

@@ -1399,7 +1399,7 @@
     },
     "component": "",
     "_componentId": "366deUKKoRE8qWRNHqGlwi4",
-    "handler": "onLogin",
+    "handler": "onTouchButton",
     "customEventData": ""
   },
   {
@@ -2728,7 +2728,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 750,
+      "width": 749.9999999999999,
       "height": 1334
     },
     "_anchorPoint": {

Fichier diff supprimé car celui-ci est trop grand
+ 210 - 148
assets/package/prefab/login/SelectServer.prefab


+ 2 - 1
assets/script/framework/config/LayerConf.ts

@@ -25,11 +25,12 @@ export let Layer_Conf: { [key: number]: LayerConf } = {
     [ViewID.LoadingUI]: { bundle: "package", url: "prefab/login/LoadingUI", type: LayerType.UI },
     [ViewID.MaskUI]: { bundle: "package", url: "prefab/ui/relogin/MaskUI", type: LayerType.Notice,special: true, preload: true  },
     [ViewID.TempTipsUI]: { bundle: "package", url: "prefab/ui/TempTipsUI", type: LayerType.Notice },
-    [ViewID.ServerList]: { bundle: "package", url: "prefab/login/ServerList", type: LayerType.UI, anim: 0 },
+    
     [ViewID.GameWind]: { bundle: "package", url: "prefab/ui/GameUI", type: LayerType.UI, anim: 0 },
 	[ViewID.TowerUI]: { bundle: "package", url: "prefab/ui/tower/tower", type: LayerType.Game, anim: 2 },
     [ViewID.ZombieUI]: { bundle: "package", url: "prefab/ui/tower/zombie", type: LayerType.Game, anim: 2 },
 
     [ViewID.MailMain]: { bundle: "mail", url: "prefab/MailMain", type: LayerType.UI, anim: 2 },
     [ViewID.MailDetail]: { bundle: "mail", url: "prefab/MailDetail", type: LayerType.UI, anim: 2 },
+    [ViewID.SelectServer]: { bundle: "package", url: "prefab/login/SelectServer", type: LayerType.UI, anim: 2 },
 };

+ 1 - 1
assets/script/game/common/LoginManager.ts

@@ -179,7 +179,7 @@ export class LoginManager {
         this.sendPost('user', 'login', (data) => {
             console.log('登录返回数据', data)
 
-            UserData.init(this.userId, data || {});
+            UserData.init(data || {});
             let min = Number(this._server_url.indexOf('//'))
             let max = this._server_url.lastIndexOf(':')
             let server = this._server_url.substring(min, max)

+ 2 - 0
assets/script/game/data/GameEvent.ts

@@ -12,6 +12,8 @@ let event = {
 	BombUpdate: "BombUpdate",										 	//炸弹更新
 
 	MailUpdate: "MailUpdate",											//邮件操作更新
+
+	SelectServer: "SelectServer",											//服务器选择
 }
 
 export let GameEvent = event;

+ 227 - 5
assets/script/game/data/UserData.ts

@@ -9,16 +9,85 @@ export const DataKey = {
     UserID: 'UserID',                       //用户ID
 };
 
+interface Account {
+    openId: string;
+    openKey: string;
+    sdkUid;
+    cdkeyUrl: string;
+    version: string;
+    cdnUrl: string;
+    bulletin: string;
+    platform: string;
+    serverOpenTime: number;
+    serverOpenHour: number;
+    white: number;
+    openCdkey: number;
+    openLogout: number;
+    download: string;
+}
+
+interface Role {
+    sid: number;
+    headpic: number;
+    role_name: string;
+    uid: string;
+    lv: number;
+    last_time: string;
+    name?: string;
+    status?: number;
+    host?: string;
+    gs?: number;
+}
+
+interface Server {
+    sid: number;
+    name: string;
+    status: number;
+    host: string;
+    gs: number;
+}
+
+// type ServerData = {
+//     role_list?: { id: string; pic: string; name: string; uid: string; lv: string; last_time: string }[];
+//     server_list?: { id: string; name: string; status: string; host: string }[];
+//     lastsid?: number;
+// };
+
 class Data {
     private _class_id = StringUtil.getUUID(32);
     //需要保存的数据
     save_data = new Map<string, any>();
 
     UserID: any = null;
-    init(user_uuid: string, data: any) {
-        Framework.storage.setUser(user_uuid);
-        
 
+    private _roleServers: Role[] = [];
+    private _servers: Server[] = [];
+    private _recmdServers: Server[] = [];
+
+    //账号信息
+    private _accountData: Account = {
+        openId: '',
+        openKey: '',
+        sdkUid: '',
+        cdkeyUrl: '',
+        version: '',
+        cdnUrl: '',
+        bulletin: '',
+        platform: '',
+        serverOpenTime: 0,
+        serverOpenHour: 0,
+        white: 0,
+        openCdkey: 0,
+        openLogout: 0,
+        download: '',
+    };
+    //最后一次登录服id
+    private _sid: number = this.save_locally('lastsid',null,-1);;
+    //推荐区域
+    private _arenaId: string = '1';
+
+    init(data: any) {
+        Framework.storage.setUser(this._accountData.openId);
         //将服务器的数据替换到本地
         // let save = new Map<string, string>();
         for (let key in data) {
@@ -80,10 +149,163 @@ class Data {
         return obj;
     }
 
-    getServerTime(){
-        return  Date.now()
+    getServerTime() {
+        return Date.now()
+    }
+
+
+    parseLoginData(data) {
+        this.initAccount(data);
+        this.initRoles(data.role_list);
+        if (data.server_list) {
+            this.initServers(data.server_list);
+        }
+        if (data.lastsid && data.lastsid > 0) {
+            UserData.setSid(data.lastsid, true);
+        }
+    }
+
+    setSid(sid: number, flag: boolean): void {
+        this._sid = sid;
+        if (flag) {
+            this._saveData('lastsid',sid);
+        }
+    }
+
+    getSid(){
+        return this._sid;
+    }
+
+    setAreanId(areanId: string): void {
+        this._arenaId = areanId;
+    }
+
+    private initAccount(data) {
+        if (data.openid) {
+            this._accountData.openId = data.openid;
+        }
+        if (data.openkey) {
+            this._accountData.openKey = data.openkey;
+        }
+        if (data.sdkuid) {
+            this._accountData.sdkUid = data.sdkuid;
+        }
+        if (data.cdkey) {
+            this._accountData.cdkeyUrl = data.cdkey;
+        }
+        if (data.version) {
+            this._accountData.version = data.version;
+        }
+        if (data.cdn) {
+            this._accountData.cdnUrl = data.cdn;
+        }
+        if (data.bulletin) {
+            this._accountData.bulletin = data.bulletin;
+        }
+        if (data.platform) {
+            this._accountData.platform = data.platform;
+        }
+        if (data.server_open_time) {
+            this._accountData.serverOpenTime = data.server_open_time;
+        }
+        if (data.server_open_hour) {
+            this._accountData.serverOpenHour = data.server_open_hour;
+        }
+        if (data.white) {
+            this._accountData.white = data.white;
+        }
+        if (data.open_cdkey) {
+            this._accountData.openCdkey = data.open_cdkey;
+        }
+        if (data.open_logout) {
+            this._accountData.openLogout = data.open_logout;
+        }
+        if (data.download) {
+            this._accountData.download = data.download;
+        }
+    }
+
+    private initRoles(roleList?: { id: string; pic: string; name: string; uid: string; lv: string; last_time: string }[]): void {
+        if (roleList) {
+            for (const key in roleList) {
+                let v = roleList[key];
+                const t: Role = {
+                    sid: parseInt(v.id),
+                    headpic: parseInt(v.pic),
+                    role_name: v.name,
+                    uid: v.uid,
+                    lv: parseInt(v.lv),
+                    last_time: v.last_time,
+                };
+                this._roleServers.push(t);
+            }
+        }
     }
 
+    private initServers(serverList: { id: string; name: string; status: string; host: string }[]): void {
+        for (const key in serverList) {
+            let v = serverList[key];
+            const tab: Server = {
+                sid: parseInt(v.id),
+                name: v.name,
+                status: parseInt(v.status),
+                host: v.host,
+                gs: parseInt(v.status) * 10000 + parseInt(v.id),
+            };
+
+            this._servers.push(tab);
+
+            if (tab.status === 2) {
+                this._recmdServers.push(tab);
+            }
+
+            for (const role of this._roleServers) {
+                if (role.sid === tab.sid) {
+                    role.name = tab.name;
+                    role.status = tab.status;
+                    role.host = tab.host;
+                    role.gs = tab.gs;
+                    break;
+                }
+            }
+        }
+
+        this._roleServers.sort((a, b) => (a.last_time > b.last_time ? -1 : 1));
+        this._servers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
+        this._recmdServers.sort((a, b) => (a.gs > b.gs ? -1 : 1));
+    }
+
+    getAccountData() {
+        return this._accountData;
+    }
+
+    getAllServers() {
+        return this._servers;
+    }
+
+
+    getRoleServers() {
+        return this._roleServers;
+    }
+
+
+    getRecmdServers() {
+        return this._recmdServers;
+    }
+
+    getServerBySid(sid: number): Server | undefined {
+        let server = this._servers.find(v => v.sid === sid);
+
+        if (!server) {
+            if (this._servers.length <= 0) {
+                // PromptMgr.showTips(Util.getString('110573'));
+            }
+            this._sid = this._servers[0]?.sid;
+            server = this._servers[0];
+        }
+
+        return server;
+    }
 }
 
 export let UserData = new Data;

+ 98 - 60
assets/script/game/ui/login/LoginUI.ts

@@ -1,4 +1,4 @@
-import { sys, tween, Tween, _decorator, Label, EditBox,Node } from 'cc';
+import { sys, tween, Tween, _decorator, Label, EditBox, Node } from 'cc';
 import { UIHelper } from '../../../framework/common/UIHelper';
 import { AudioID } from '../../../framework/config/AudioConf';
 import { FrameworkConf } from '../../../framework/config/FrameworkConf';
@@ -9,6 +9,8 @@ import { AsyncQueue, NextFunction } from '../../../framework/queue/AsyncQueue';
 import { BulletlPool, DecoratePool, FloatTextPool, GoodsPool, IconPool, MaterialPool, PopPool, RewardPool, RolePool, TipsPool } from '../../common/Pool';
 import { UserData } from '../../data/UserData';
 import { LoginMgr } from '../../common/LoginManager';
+import { StringUtil } from '../../../framework/util/StringUtil';
+import { GameEvent } from '../../data/GameEvent';
 
 const { ccclass, property } = _decorator;
 
@@ -16,15 +18,15 @@ const { ccclass, property } = _decorator;
 
 
 export function getParameterByName(name) {
-    let url = window.location.href;
-    name = name.replace(/[\[\]]/g, "\\$&");
-    const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);
-    const results = regex.exec(url);
-    if (!results) return null;
-    if (!results[2]) return '';
-	
-    return decodeURIComponent(results[2].replace(/\+/g, ' '));
-    //return results[2].replace(/\+/g, ' ')
+	let url = window.location.href;
+	name = name.replace(/[\[\]]/g, "\\$&");
+	const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);
+	const results = regex.exec(url);
+	if (!results) return null;
+	if (!results[2]) return '';
+
+	return decodeURIComponent(results[2].replace(/\+/g, ' '));
+	//return results[2].replace(/\+/g, ' ')
 }
 
 @ccclass('LoginUI')
@@ -33,26 +35,26 @@ export class LoginUI extends BaseView {
 	@property(Node)
 	loginRoot: Node = null;
 
-	@property({type:Label,tooltip:"版本"})
+	@property({ type: Label, tooltip: "版本" })
 	version: Label = null;
 
 	@property(Node)
 	selectServer: Node = null;
-	@property({type:Label,tooltip:"ServerName"})
+	@property({ type: Label, tooltip: "ServerName" })
 	serverName: Label = null;
-	@property({type:Label,tooltip:"服务器状态"})
-	serverState:Label = null;
+	@property({ type: Label, tooltip: "服务器状态" })
+	serverState: Label = null;
 
 
-	@property({type:EditBox,tooltip:"账号"})
+	@property({ type: EditBox, tooltip: "账号" })
 	userName: EditBox = null;
 
 	private scene_back = null;
 
 	//登录数据
-	private loginData:any = null
+	private loginData: any = null
+	accountData: any;
 	serverData: any;
-	server_list: any;
 	protected onLoad() {
 		super.onLoad();
 		this._initPool();
@@ -78,20 +80,24 @@ export class LoginUI extends BaseView {
 			// 	}
 			// }
 		}, this);
+		Framework.event.addEvent(GameEvent.SelectServer, () => {
+			this.updateCurServer(true);
+		}, this);
+
 		Framework.audio.playMusic(AudioID.Game);
-		
+
 		let uid = UserData.save_locally('UserID')
 		let choose_server = UserData.save_locally('choose_server', null, {})
 
 		this.loginData = {
-			url:getParameterByName("url") ||"http://118.178.135.110/sdk/debug/login.php",
-			uid:getParameterByName("uid") || uid ||"ttq3",
-			token:getParameterByName("token"),
+			url: getParameterByName("url") || "http://118.178.135.110/sdk/debug/login.php",
+			uid: getParameterByName("uid") || uid || "ttq3",
+			token: getParameterByName("token"),
 		}
 
-		
+
 		// this.server_list.push(choose_server)
-		
+
 		this.userName.string = this.loginData.uid
 		// this.serverName.string = "997"
 	}
@@ -144,22 +150,21 @@ export class LoginUI extends BaseView {
 		this.loginData.uid = this.userName.string
 		UserData.save_locally('UserID', this.loginData.uid)
 		this.getServerList()
-
 	}
-	onEnter(){
+	onEnter() {
 		let _gateway_data = {
-			openid: this.serverData.openid,    //上面获取到的openid
-			openkey: this.serverData.openkey,    //上面获取到的openkey
-			sid: this.server_list.id,        // 选择的服务器列表信息中的id
+			openid: this.accountData.openId,    //上面获取到的openid
+			openkey: this.accountData.openKey,    //上面获取到的openkey
+			sid: this.serverData.sid,        // 选择的服务器列表信息中的id
 		}
 
-		LoginMgr.getGateway(_gateway_data, this.server_list.host, () => {
+		LoginMgr.getGateway(_gateway_data, this.serverData.host, () => {
 			if (UserData['mark'].first_login && UserData['mark'].first_login == 1) {
 
-					Framework.layer.open(ViewID.MainUI, () => {
-						Framework.layer.close(ViewID.LoginUI);
-						Framework.layer.close(ViewID.SelectServer);
-					});
+				Framework.layer.open(ViewID.MainUI, () => {
+					Framework.layer.close(ViewID.LoginUI);
+					Framework.layer.close(ViewID.SelectServer);
+				});
 
 			} else {
 				Framework.layer.open(ViewID.MainUI, () => {
@@ -168,7 +173,7 @@ export class LoginUI extends BaseView {
 				});
 			}
 		})
-		
+
 
 
 		//
@@ -180,7 +185,7 @@ export class LoginUI extends BaseView {
 		// 		Framework.tips.setTips(`${match}是敏感词`);
 		// 		return;
 		// 	}
-			
+
 		// } else {
 		// 	Framework.tips.setTips('账号只能输入英文和数字并且不可为空!');
 		// }
@@ -192,12 +197,9 @@ export class LoginUI extends BaseView {
 	private onTouchButton(event: Event) {
 
 		let target: any = event.target;
-
-		// LoginMgr.getServerList(1, (data) => {
-		// 	// Framework.layer.close(this);
-		// 	Framework.layer.open(ViewID.ServerList,null,data)
-		// })
-		return;
+		if (target.name == 'select_server') {
+			Framework.layer.open(ViewID.SelectServer)
+		}
 	}
 	private _enterGame(state: number) {
 		// if (UserData.player.uuid == "") {
@@ -299,7 +301,7 @@ export class LoginUI extends BaseView {
 
 		// queue.complete = () => {
 		// };
-		
+
 		// queue.play();
 		this._loginEx();
 	}
@@ -308,26 +310,62 @@ export class LoginUI extends BaseView {
 	private getServerList() {
 		LoginMgr.getServerList((data) => {
 			if (data) {
-				this.serverData = data;
-				let num = 0;
-				let idx = 1;
-				this.server_list = data.server_list[998]
-
-				this.loginRoot.active = false
-				this.selectServer.active = true
-				
-				// if (Object.keys(this.server_list[0]).length < 1) {
-				// 	let idx = this.server_list.length - 1
-				// 	let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame;
-				// 	this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame;
-				// 	this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame = choosePic;
-				// 	this.tabulation = String(idx * 10);
-				// 	this.List.server.numItems = this.server_list[idx].length
-				// } else {
-				// 	this.List.server.numItems = 0;
-				// }
+				UserData.parseLoginData(data);
+				this.accountData = UserData.getAccountData()
+				this.updateCurServer()
 			}
 		}, this.loginData)
 	}
+
+	updateCurServer(isRefresh?:boolean) {
+		let sid = -1;
+		if (isRefresh){
+			sid = UserData.getSid();
+		}
+		if (sid == -1) {
+			const roles = UserData.getRoleServers();
+			if (roles.length === 0) {
+				// 无角色,寻找推荐服务器
+				const recmds = UserData.getRecmdServers();
+				for (const v of recmds) {
+					if (v && v.sid) {
+						sid = v.sid;
+						break;
+					}
+				}
+			} else {
+				// 找最近登录的服务器,roles 已排序,第一个是最近的
+				for (const v of roles) {
+					if (v && v.sid) {
+						sid = v.sid;
+						break;
+					}
+				}
+			}
+
+		}
+		let serverData = UserData.getServerBySid(sid)
+		if (!serverData) {
+			return;
+		}
+		
+		this.serverData = serverData;
+		UserData.setSid(serverData['sid'], false);
+
+		this.serverName.string = serverData.name;
+
+		if (serverData.status == 0) {
+			this.serverState.string = StringUtil.getLanguageData('维护');
+		}else if(serverData.status == 1){
+			this.serverState.string = StringUtil.getLanguageData('爆满');
+		}else if(serverData.status == 2){
+			this.serverState.string = StringUtil.getLanguageData('推荐');
+		}
+
+		this.loginRoot.active = false
+		this.selectServer.active = true
+	}
+
+
 }
 

+ 147 - 67
assets/script/game/ui/login/SelectServer.ts

@@ -1,19 +1,54 @@
-import { _decorator, instantiate, Label, Node, Sprite } from 'cc';
+import { _decorator, instantiate, Label, Node, Sprite, Toggle, tween, UIOpacity } from 'cc';
 import { BaseView } from '../../../framework/layer/BaseView';
 import { ServerItem } from './ServerItem';
 import { AudioID } from '../../../framework/config/AudioConf';
 import { Framework } from '../../../framework/Framework';
 import { UserData } from '../../data/UserData';
 import { LoginMgr } from '../../common/LoginManager';
+import List from '../../../framework/list/List';
+import { StringUtil } from '../../../framework/util/StringUtil';
+import { GameEvent } from '../../data/GameEvent';
 const { ccclass, property } = _decorator;
 
-@ccclass('ServerList')
-export class ServerList extends BaseView {
-	private server_list = []
+@ccclass('SelectServer')
+export class SelectServer extends BaseView {
+	@property({ type: Label, tooltip: "关闭提示" })
+	closeTips: Label = null;
+
+	@property({ type: Label, tooltip: "标题" })
+	titlteTx: Label = null;
+
+	@property({ type: Label, tooltip: "分区文字1" })
+	arenaTx1: Label = null;
+
+	@property({ type: Label, tooltip: "分区文字2" })
+	arenaTx2: Label = null;
+
+	@property({ type: Label, tooltip: "分区文字3" })
+	arenaTx3: Label = null;
+
+	@property({ type: List, tooltip: "服务器组容器" })
+	serverGroupSv: List = null;
+
+	@property({ type: List, tooltip: "服务器容器" })
+	serverItemSv: List = null;
+
+	private groupList = []
+
+	private serverList = []
 	private Server_data = null;
 	private tabulation = 'recently_login';
+
 	protected onLoad() {
 		super.onLoad();
+		this.closeTips.string = StringUtil.getLanguageData('点击空白关闭');
+		this.titlteTx.string = StringUtil.getLanguageData('邮件');
+		this.closeTips.node.getComponent(UIOpacity).opacity = 0;
+
+		Framework.event.addEvent(GameEvent.SelectServer, () => {
+			Framework.layer.close(this);
+		}, this);
+
 	}
 
 	protected onDestroy() {
@@ -21,76 +56,80 @@ export class ServerList extends BaseView {
 	}
 
 	//UI开打时会调用,如果有初始化代码应该放到此函数
-	onOpen(game, data?) {
-		let choose_server = UserData.save_locally('choose_server', null, {})
-		this.server_list.push(choose_server)
-
-		this.Node.close.active = game;
-		// 调用获取服务器裂变
-		if (!game) {
-			LoginMgr.getServerList((data) => {
-				if (data) {
-					this.Server_data = data;
-					let num = 0;
-					let idx = 1;
-					for (let list in data.server_list) {
-						num++
-						if (!this.server_list[idx]) {
-							this.server_list[idx] = []
-						}
-						if (num == 10) {
-							idx++
-							num = 0;
-
-							if (idx > 1) {
-								let newTab = instantiate(this.Node.serverTab.getChildByName('10'));
-								newTab.name = String(idx * 10);
-								this.Node.serverTab.addChild(newTab)
-							}
-						}
-						this.server_list[idx].push(data.server_list[list])
-					}
-					if (Object.keys(this.server_list[0]).length < 1) {
-						let idx = this.server_list.length - 1
-						let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame;
-						this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame;
-						this.Node.serverTab.getChildByName(String(idx * 10)).getComponent(Sprite).spriteFrame = choosePic;
-						this.tabulation = String(idx * 10);
-						this.List.server.numItems = this.server_list[idx].length
-					} else {
-						this.List.server.numItems = 0;
-					}
+	onOpen() {
+		tween(this.closeTips.node.getComponent(UIOpacity))
+			.to(1, { opacity: 255 })
+			.to(1.2, { opacity: 10 })
+			.union()
+			.repeatForever()
+			.start()
+
+		let recmds = UserData.getRecmdServers();
+		if (recmds.length != 0) {
+			let recommendList = [];
+			for (const v of recmds) {
+				if (v && v.sid) {
+					recommendList.push(v);
 				}
-			}, data)
+			}
+			this.groupList.push({ name: 'recommend', data: recommendList });
 		}
-	}
-	// 列表渲染 
-	onServerListEvent(item, idx) {
-		let nowList = (this.tabulation == 'recently_login') ? this.server_list[0] : this.server_list[Number(this.tabulation) / 10][Math.abs(idx)];
-		item.getComponent(ServerItem).init(nowList, this.Server_data)
 
-	}
-	serverTab(event: Event) {
-		if (!this.Server_data) {
-			Framework.tips.setTips('完蛋,服务器开小差了')
-			return;
+		let roles = UserData.getRoleServers();
+		if (roles.length != 0) {
+			let roleList = [];
+			for (const v of roles) {
+				if (v && v.sid) {
+					roleList.push(v);
+				}
+			}
+			this.groupList.push({ name: 'user', data: roleList });
 		}
-		let target: any = event.target;
-		let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame;
-		this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = target.getComponent(Sprite).spriteFrame;
-		target.getComponent(Sprite).spriteFrame = choosePic;
-		this.tabulation = target.name;
-		if (target.name == 'recently_login') {
-			if (Object.keys(UserData.save_locally('choose_server', null, {})).length > 0) {
-				this.List.server.numItems = 1
-			} else {
-				this.List.server.numItems = 0;
+
+		let allList = UserData.getAllServers();
+		let num = 0;
+		let idx = 1;
+		let serverList = {};
+		for (let list in allList) {
+			num++;
+			if (!serverList[idx]) {
+				serverList[idx] = []
 			}
-		} else {
-			this.List.server.numItems = this.server_list[target.name / 10].length
+			if (num == 10) {
+				idx++
+				num = 0;
+			}
+			serverList[idx].push(allList[list])
+		}
+		for (const key in serverList) {
+			const element = serverList[key];
+			this.groupList.push({ name: Number(key) * 10, data: element });
 		}
+
+		this.serverGroupSv.numItems = this.groupList.length;
 	}
 
+	// serverTab(event: Event) {
+	// 	if (!this.Server_data) {
+	// 		Framework.tips.setTips('完蛋,服务器开小差了')
+	// 		return;
+	// 	}
+	// 	let target: any = event.target;
+	// 	let choosePic = this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame;
+	// 	this.Node.serverTab.getChildByName(this.tabulation).getComponent(Sprite).spriteFrame = target.getComponent(Sprite).spriteFrame;
+	// 	target.getComponent(Sprite).spriteFrame = choosePic;
+	// 	this.tabulation = target.name;
+	// 	if (target.name == 'recently_login') {
+	// 		if (Object.keys(UserData.save_locally('choose_server', null, {})).length > 0) {
+	// 			this.List.server.numItems = 1
+	// 		} else {
+	// 			this.List.server.numItems = 0;
+	// 		}
+	// 	} else {
+	// 		this.List.server.numItems = this.server_list[target.name / 10].length
+	// 	}
+	// }
+
 	//UI关闭时会调用,该函数在onDestroy前调用
 	onClose() {
 
@@ -112,8 +151,49 @@ export class ServerList extends BaseView {
 		let target: any = event.target;
 		if (target.name == 'serverItem') {
 			let idx = target.getChildByName('Index').getComponent(Label).string
-		} else if (target.name == 'Node.close') {
+		} else if (target.name == 'mask') {
 			Framework.layer.close(this)
 		}
 	}
+
+	onEventSelectArena(target: Toggle, customEventData: string) {
+		if (target.isChecked) {
+			console.log('============== customEventData', customEventData)
+
+		}
+	}
+
+	onEventSelectGroup(target: Toggle) {
+		if (target.isChecked) {
+			let idx = Number(target.node.name);
+			this.serverList = this.groupList[idx].data;
+			this.serverItemSv.numItems = this.groupList[idx].data.length;
+		}
+	}
+
+
+	// 列表渲染 
+	onServerListEvent(item, idx) {
+		item.name = String(idx);
+		let nameTx = item.getChildByName('name_tx').getComponent(Label);
+		let gData = this.groupList[idx]
+		if (gData.name == 'recommend') {
+			nameTx.string = StringUtil.getLanguageData('最近登录');
+		} else if (gData.name == 'user') {
+			nameTx.string = StringUtil.getLanguageData('拥有角色');
+			item.getComponent(Toggle).isChecked = false;
+			item.getComponent(Toggle).isChecked = true;
+		} else {
+			if (gData.name > 10) {
+				nameTx.string = (gData.name + 1) + "_" + (gData.name + 10)
+			} else {
+				nameTx.string = "1-10";
+			}
+		}
+	}
+
+	// 列表渲染 
+	onServerEvent(item, idx) {
+		item.getComponent(ServerItem).init(this.serverList[idx]);
+	}
 }

+ 28 - 36
assets/script/game/ui/login/ServerItem.ts

@@ -1,27 +1,40 @@
-import { _decorator, Node } from 'cc';
+import { _decorator, Label, Node, Sprite, SpriteFrame } from 'cc';
 import { ResKeeper } from '../../../framework/res/ResKeeper';
-import { LoginMgr } from '../../common/LoginManager';
 import { Framework } from '../../../framework/Framework';
-import { ViewID } from '../../../framework/config/LayerConf';
 import { AudioID } from '../../../framework/config/AudioConf';
+import { GameEvent } from '../../data/GameEvent';
 import { UserData } from '../../data/UserData';
+import { StringUtil } from '../../../framework/util/StringUtil';
+
 const { ccclass, property } = _decorator;
 
 @ccclass('ServerItem')
 export class ServerItem extends ResKeeper {
-	private ServetData = null
-	private server_list = null;
+	@property({ type: Label, tooltip: "名字" })
+	nameTx: Label = null;
+
+	@property({ type: Sprite, tooltip: "状态" })
+	stateIco: Sprite = null;
+
+	@property({ type: Label, tooltip: "推荐文字" })
+	rcdTx: Label = null;
+
+	@property({ type: [SpriteFrame], tooltip: "状态图" })
+	stateFrame: SpriteFrame[] = [];
+	
+	private servetData = null
+
 	protected onLoad() {
 
 	}
-	init(data, ServetData) {
-		this.ServetData = ServetData;
-		if (this.ServetData) {
-			this.server_list = data;
-			this.Label.name.string = this.server_list.name;
-			// this.Label.index.string = this.server_list.id
-		}
+
+	init(data) {
+		this.servetData = data;
+		this.nameTx.string = this.servetData.name;
+		this.stateIco.spriteFrame = this.stateFrame[this.servetData.status];
+		this.rcdTx.string = StringUtil.getLanguageData('荐');
 	}
+
 	protected onDestroy() {
 		//如果该组件有事件自行取消注释
 		//Framework.event.removeEvent(this);
@@ -35,30 +48,9 @@ export class ServerItem extends ResKeeper {
 
 	//UI事件处理
 	private onTouchButton(event: Event) {
-		Framework.audio.playEffect(AudioID.Click);
+		// Framework.audio.playEffect(AudioID.Click);
 		let target: any = event.target;
-		let _gateway_data = {
-			openid: this.ServetData.openid,    //上面获取到的openid
-			openkey: this.ServetData.openkey,    //上面获取到的openkey
-			sid: this.server_list.id,        // 选择的服务器列表信息中的id
-		}
-		UserData.save_locally('choose_server', this.server_list);
-		LoginMgr.getGateway(_gateway_data, this.server_list.host, () => {
-			if (UserData['mark'].first_login && UserData['mark'].first_login == 1) {
-
-					Framework.layer.open(ViewID.MainUI, () => {
-						Framework.layer.close(ViewID.LoginUI);
-						Framework.layer.close(ViewID.SelectServer);
-						Framework.layer.close(ViewID.LoadingUI);
-					});
-
-			} else {
-				Framework.layer.open(ViewID.MainUI, () => {
-					Framework.layer.close(ViewID.LoginUI);
-					Framework.layer.close(ViewID.SelectServer);
-					Framework.layer.close(ViewID.LoadingUI);
-				});
-			}
-		})
+		UserData.setSid(this.servetData.sid,false);
+		Framework.event.fireEvent(GameEvent.SelectServer);
 	}
 }

+ 2 - 1
assets/script/game/ui/mail/MailMain.ts

@@ -7,6 +7,7 @@ import { GlobalConf } from '../../config/GlobalConf';
 import List from '../../../framework/list/List';
 import { Framework } from '../../../framework/Framework';
 import { LoginMgr } from '../../common/LoginManager';
+import { GameEvent } from '../../data/GameEvent';
 const { ccclass, property } = _decorator;
 
 @ccclass('MailMain')
@@ -59,7 +60,7 @@ export class MailMain extends BaseView {
 	onOpen() {
 		this.updateMainPanel();
 		this.updateMailNum();
-		Framework.event.addEvent("MailUpdate", () => {
+		Framework.event.addEvent(GameEvent.MailUpdate, () => {
 			this.updateMainPanel();
 			this.updateMailNum();
         }, this);

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff