
This commit introduces several improvements to the UI and functionality of various addons, including: - **Admin Panel:** Updated header statistics layout and added payday functionality with rank-based amounts. Enhanced styling for better user experience. - **Bank Addon:** Improved balance display with updated styling and structure for better readability. - **Garage Addon:** Refined vehicle and maintenance statistics display with enhanced UI elements. - **Locker Addon:** Updated storage and item statistics layout for improved clarity and usability. - **Organization Addon:** Enhanced organization statistics display and improved transaction handling with better sorting and formatting. - **Store Addon:** Updated payment method selection and improved overall styling for a more cohesive look. These changes aim to provide a more intuitive and visually appealing user experience across the platform.
230 lines
7.3 KiB
JavaScript
230 lines
7.3 KiB
JavaScript
// Simulated admin data - this would be replaced with actual game data
|
|
let adminData = {
|
|
players: [
|
|
{
|
|
id: 1,
|
|
name: "John_Doe",
|
|
rank: 5,
|
|
money: 50000,
|
|
status: "online"
|
|
},
|
|
{
|
|
id: 2,
|
|
name: "Jane_Smith",
|
|
rank: 3,
|
|
money: 25000,
|
|
status: "online"
|
|
},
|
|
{
|
|
id: 3,
|
|
name: "Mike_Johnson",
|
|
rank: 1,
|
|
money: 10000,
|
|
status: "offline"
|
|
}
|
|
],
|
|
paydayAmounts: {
|
|
1: 1000, // Rank 1 (Player) payday amount
|
|
2: 2000, // Rank 2 payday amount
|
|
3: 3000, // Rank 3 payday amount
|
|
4: 4000, // Rank 4 payday amount
|
|
5: 5000 // Rank 5 (Admin) payday amount
|
|
},
|
|
maxRank: 5
|
|
};
|
|
|
|
let selectedPlayerId = null;
|
|
|
|
// Initialize the admin panel
|
|
function initializeAdmin() {
|
|
updateStats();
|
|
setupFilterListeners();
|
|
updatePlayerList();
|
|
}
|
|
|
|
// Update header statistics
|
|
function updateStats() {
|
|
const onlinePlayers = adminData.players.filter(p => p.status === "online").length;
|
|
const onlineStaff = adminData.players.filter(p => p.status === "online" && p.rank > 1).length;
|
|
|
|
document.getElementById('playerCount').textContent = onlinePlayers;
|
|
document.getElementById('staffCount').textContent = onlineStaff;
|
|
}
|
|
|
|
// Set up filter button listeners
|
|
function setupFilterListeners() {
|
|
const filterButtons = document.querySelectorAll('.filter-btn');
|
|
|
|
filterButtons.forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
filterButtons.forEach(btn => btn.classList.remove('active'));
|
|
button.classList.add('active');
|
|
filterPlayers(button.dataset.filter);
|
|
});
|
|
});
|
|
|
|
// Set up search functionality
|
|
const searchInput = document.getElementById('playerSearch');
|
|
searchInput.addEventListener('input', () => {
|
|
const activeFilter = document.querySelector('.filter-btn.active').dataset.filter;
|
|
filterPlayers(activeFilter, searchInput.value);
|
|
});
|
|
}
|
|
|
|
// Filter players based on category and search term
|
|
function filterPlayers(filter, searchTerm = '') {
|
|
let filteredPlayers = adminData.players;
|
|
|
|
// Apply category filter
|
|
if (filter === 'online') {
|
|
filteredPlayers = filteredPlayers.filter(p => p.status === 'online');
|
|
} else if (filter === 'staff') {
|
|
filteredPlayers = filteredPlayers.filter(p => p.rank > 1);
|
|
}
|
|
|
|
// Apply search filter
|
|
if (searchTerm) {
|
|
const term = searchTerm.toLowerCase();
|
|
filteredPlayers = filteredPlayers.filter(p =>
|
|
p.name.toLowerCase().includes(term)
|
|
);
|
|
}
|
|
|
|
updatePlayerList(filteredPlayers);
|
|
}
|
|
|
|
// Update the player list display
|
|
function updatePlayerList(players = adminData.players) {
|
|
const playerList = document.getElementById('playerList');
|
|
playerList.innerHTML = players.map(player => {
|
|
const paydayAmount = adminData.paydayAmounts[player.rank] || 1000; // Default to 1000 if rank not found
|
|
return `
|
|
<div class="player-item" data-id="${player.id}">
|
|
<div class="player-info">
|
|
<span class="player-name">${player.name}</span>
|
|
<span class="player-rank rank-${player.rank}">Rank ${player.rank}</span>
|
|
<span class="player-money">$${player.money.toLocaleString()}</span>
|
|
<span class="player-payday">Payday: $${paydayAmount.toLocaleString()}</span>
|
|
</div>
|
|
<div class="player-actions">
|
|
${player.rank < adminData.maxRank ? `
|
|
<button class="action-btn promote-btn" onclick="promotePlayer(${player.id})">
|
|
Promote
|
|
</button>
|
|
` : ''}
|
|
${player.rank > 1 ? `
|
|
<button class="action-btn demote-btn" onclick="demotePlayer(${player.id})">
|
|
Demote
|
|
</button>
|
|
` : ''}
|
|
<button class="action-btn message-btn" onclick="openMessageModal(${player.id})">Message</button>
|
|
<button class="action-btn" onclick="openMoneyModal(${player.id})">Modify Money</button>
|
|
</div>
|
|
</div>
|
|
`}).join('');
|
|
}
|
|
|
|
// Rank management functions
|
|
function promotePlayer(playerId) {
|
|
const player = adminData.players.find(p => p.id === playerId);
|
|
if (player && player.rank < adminData.maxRank) {
|
|
player.rank++;
|
|
updatePlayerList();
|
|
}
|
|
}
|
|
|
|
function demotePlayer(playerId) {
|
|
const player = adminData.players.find(p => p.id === playerId);
|
|
if (player && player.rank > 1) {
|
|
player.rank--;
|
|
updatePlayerList();
|
|
}
|
|
}
|
|
|
|
// Money management functions
|
|
function openMoneyModal(playerId) {
|
|
selectedPlayerId = playerId;
|
|
const modal = document.getElementById('moneyModal');
|
|
modal.style.display = 'block';
|
|
}
|
|
|
|
function closeMoneyModal() {
|
|
const modal = document.getElementById('moneyModal');
|
|
modal.style.display = 'none';
|
|
document.getElementById('moneyAmount').value = '';
|
|
selectedPlayerId = null;
|
|
}
|
|
|
|
function giveMoney() {
|
|
const amount = parseInt(document.getElementById('moneyAmount').value);
|
|
if (amount && selectedPlayerId) {
|
|
const player = adminData.players.find(p => p.id === selectedPlayerId);
|
|
if (player) {
|
|
player.money += amount;
|
|
updatePlayerList();
|
|
closeMoneyModal();
|
|
}
|
|
}
|
|
}
|
|
|
|
function takeMoney() {
|
|
const amount = parseInt(document.getElementById('moneyAmount').value);
|
|
if (amount && selectedPlayerId) {
|
|
const player = adminData.players.find(p => p.id === selectedPlayerId);
|
|
if (player) {
|
|
player.money = Math.max(0, player.money - amount);
|
|
updatePlayerList();
|
|
closeMoneyModal();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Message system functions
|
|
function openMessageModal(playerId) {
|
|
selectedPlayerId = playerId;
|
|
const player = adminData.players.find(p => p.id === playerId);
|
|
const modal = document.getElementById('messageModal');
|
|
document.getElementById('messagePlayerName').textContent = player.name;
|
|
modal.style.display = 'block';
|
|
}
|
|
|
|
function closeMessageModal() {
|
|
const modal = document.getElementById('messageModal');
|
|
modal.style.display = 'none';
|
|
document.getElementById('messageInput').value = '';
|
|
selectedPlayerId = null;
|
|
}
|
|
|
|
function sendPlayerMessage() {
|
|
const message = document.getElementById('messageInput').value;
|
|
if (message && selectedPlayerId) {
|
|
const player = adminData.players.find(p => p.id === selectedPlayerId);
|
|
if (player) {
|
|
console.log(`Message sent to ${player.name}: ${message}`);
|
|
closeMessageModal();
|
|
}
|
|
}
|
|
}
|
|
|
|
function broadcastMessage() {
|
|
const message = document.getElementById('broadcastMessage').value;
|
|
if (message) {
|
|
console.log(`Broadcasting message to all players: ${message}`);
|
|
document.getElementById('broadcastMessage').value = '';
|
|
}
|
|
}
|
|
|
|
// Global actions
|
|
function Payday() {
|
|
const amount = parseInt(document.getElementById('paydayAmount').value);
|
|
if (amount) {
|
|
adminData.players.forEach(player => {
|
|
player.money += amount;
|
|
});
|
|
updatePlayerList();
|
|
}
|
|
}
|
|
|
|
// Initialize when DOM is loaded
|
|
document.addEventListener('DOMContentLoaded', initializeAdmin);
|