onlineusers iii
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/546042/1642854/onlineusers.js
Tabs.OnlineUsers = {
name: 'OnlineUsers',
show: function(init) {
var t = this;
if (init) {
t.buildInterface();
}
t.loadOnlineUsers();
},
hide: function() {
// Clean up when tab is hidden
},
buildInterface: function() {
var div = ById('OnlineUsersDiv');
if (!div) return;
var html = '<table class="xtab" style="width:100%">' +
'<tr><td class="xtabHD" colspan="4">Alliance Online Users</td></tr>' +
'<tr>' +
'<td><button id="btnRefreshOnline" class="buttonv2 std">Refresh</button></td>' +
'<td colspan="3"><span id="onlineStatus" style="color:#666;font-size:11px;"></span></td>' +
'</tr>' +
'<tr><td colspan="4"><div id="onlineUsersList"></div></td></tr>' +
'</table>';
div.innerHTML = html;
ById('btnRefreshOnline').addEventListener('click', function() {
Tabs.OnlineUsers.loadOnlineUsers();
});
},
loadOnlineUsers: function() {
var t = this;
t.setStatus('Loading...');
// Get alliance members
var members = [];
if (Tabs.Alliance && Tabs.Alliance.alliancemembers) {
members = Tabs.Alliance.alliancemembers;
} else if (Seed.alliance && Seed.alliance.members) {
for (var id in Seed.alliance.members) {
members.push(Seed.alliance.members[id]);
}
}
if (members.length === 0) {
t.setStatus('No alliance data found');
return;
}
// Extract user IDs
var userIds = [];
for (var i = 0; i < members.length; i++) {
var uid = members[i].userId || members[i][6];
if (uid) userIds.push(uid);
}
// Check online status
getOnline(userIds, function(result) {
if (result.ok) {
t.displayOnlineUsers(members, result.data);
} else {
t.setStatus('Error loading online status');
}
});
},
displayOnlineUsers: function(allMembers, onlineData) {
var t = this;
var onlineList = [];
// Find online members
for (var i = 0; i < allMembers.length; i++) {
var member = allMembers[i];
var uid = member.userId || member[6];
var name = member.displayName || member[0];
var might = member.might || member[1] || 0;
var cities = member.cities || member[3] || 0;
var rank = member.officerType || member[2] || 0;
if (uid && onlineData[uid]) {
onlineList.push({
name: name,
might: might,
cities: cities,
rank: rank
});
}
}
// Sort by might
onlineList.sort(function(a, b) { return b.might - a.might; });
// Display results
var listDiv = ById('onlineUsersList');
if (!listDiv) return;
if (onlineList.length === 0) {
listDiv.innerHTML = '<div style="text-align:center;padding:20px;color:#666;">No members online</div>';
t.setStatus('No members online');
return;
}
var html = '<table class="xtab" style="width:100%">' +
'<tr style="background:#eee;">' +
'<th class="xtab" style="text-align:left;">Name</th>' +
'<th class="xtab" style="text-align:right;">Might</th>' +
'<th class="xtab" style="text-align:center;">Cities</th>' +
'<th class="xtab" style="text-align:center;">Rank</th>' +
'</tr>';
for (var i = 0; i < onlineList.length; i++) {
var user = onlineList[i];
var rankText = ['Member', 'Officer', 'Leader'][user.rank] || 'Member';
var mightText = t.formatMight(user.might);
html += '<tr>' +
'<td class="xtab"><span style="color:#4CAF50;">●</span> ' + user.name + '</td>' +
'<td class="xtab" style="text-align:right;">' + mightText + '</td>' +
'<td class="xtab" style="text-align:center;">' + user.cities + '</td>' +
'<td class="xtab" style="text-align:center;">' + rankText + '</td>' +
'</tr>';
}
html += '</table>';
listDiv.innerHTML = html;
t.setStatus(onlineList.length + ' members online - Updated: ' + new Date().toLocaleTimeString());
},
formatMight: function(might) {
if (might >= 1000000) {
return (might / 1000000).toFixed(1) + 'M';
} else if (might >= 1000) {
return (might / 1000).toFixed(1) + 'K';
}
return might.toString();
},
setStatus: function(msg) {
var statusSpan = ById('onlineStatus');
if (statusSpan) {
statusSpan.innerHTML = msg;
}
}
};