How to Manage Player Accounts and Guilds on Your MU Server
Learn how to manage player accounts and guilds on your MU Online private server using SQL queries, GM commands, and admin panel operations.
Managing player accounts and guilds is one of the most frequent administrative tasks on any MU Online private server. Whether you are resolving a login issue, cleaning up inactive guilds, or adjusting a character's standing, doing these operations correctly prevents data corruption and keeps your community running smoothly. This guide covers the core techniques using direct SQL access, in-game GM commands, and web-based admin panels.
Understanding the Database Structure
Before touching any data, you need to understand which tables store what. Most MU Online server emulators (such as MuEmu, Igcn, or Season 6/15 builds) share a similar database layout split across two or three databases: one for accounts, one for game data, and sometimes a separate one for events or web systems.
Key tables for account and guild management:
Account Database
MEMB_INFO → stores account credentials, status, level, email
MEMB_STAT → tracks online status, last login IP, connect time
MEMB_CREDITS → holds premium currency or credits balance
Game Database
Character → one row per character; fields: AccountID, Name, Class, Level, MapNumber
Inventory → item slots for each character
Warehouse → shared storage per account
Guild → guild header: GuildName, GuildMaster, Score, Mark
GuildMember → each member's row: AccountID, Name, GuildName, GuildStatus
GuildMark → binary logo data linked to GuildName
Never run UPDATE or DELETE statements without a WHERE clause. Use transactions (BEGIN TRANSACTION / ROLLBACK / COMMIT) so you can undo mistakes before they are permanent.
Managing Player Accounts
Viewing and Editing Account Information
To look up an account by username:
-- Find account details
SELECT memb___id, memb__pwd, mail_addr, AccountLevel, BlockCode, ConnectStat
FROM MEMB_INFO
WHERE memb___id = 'playerusername';
-- Check last known online status
SELECT memb___id, ConnectStat, ServerName, IP
FROM MEMB_STAT
WHERE memb___id = 'playerusername';
Common field meanings:
AccountLevel→ 0 = normal player, 1+ = staff tiers (values vary by build)BlockCode→ 0 = active, 1 = blocked/bannedConnectStat→ 0 = offline, 1 = online
To temporarily suspend an account:
BEGIN TRANSACTION;
UPDATE MEMB_INFO
SET BlockCode = 1
WHERE memb___id = 'playerusername';
-- Verify before committing
SELECT memb___id, BlockCode FROM MEMB_INFO WHERE memb___id = 'playerusername';
COMMIT;
To lift the suspension, set BlockCode = 0 with the same pattern.
Resetting Passwords
If your server stores passwords as plaintext (common in older builds):
BEGIN TRANSACTION;
UPDATE MEMB_INFO
SET memb__pwd = 'NewTemporaryPass1'
WHERE memb___id = 'playerusername';
COMMIT;
If your build uses MD5 or a custom hash, generate the hash first using the same algorithm your server applies, then insert the hash string instead of the raw password. Check your server's source or configuration files to confirm which method is used.
> [!WARNING] > Never store or send plaintext passwords through Discord, email, or support tickets. Generate a temporary password, deliver it privately, and instruct the player to change it immediately on first login.
Moving or Deleting a Character
To transfer a character from one account to another:
BEGIN TRANSACTION;
UPDATE Character
SET AccountID = 'destinationaccount'
WHERE Name = 'CharacterName';
-- Confirm the change
SELECT Name, AccountID FROM Character WHERE Name = 'CharacterName';
COMMIT;
To delete a character cleanly (remove all related data):
BEGIN TRANSACTION;
DELETE FROM Inventory WHERE Name = 'CharacterName';
DELETE FROM Warehouse WHERE AccountID = (SELECT AccountID FROM Character WHERE Name = 'CharacterName');
DELETE FROM Character WHERE Name = 'CharacterName';
COMMIT;
Warehouse deletion should only happen if no other characters on that account share the same warehouse. Adjust accordingly for multi-character accounts.
Managing Guilds
Viewing Guild Information
-- List all guilds with member count
SELECT g.GuildName, g.GuildMaster, g.Score,
COUNT(m.Name) AS MemberCount
FROM Guild g
LEFT JOIN GuildMember m ON g.GuildName = m.GuildName
GROUP BY g.GuildName, g.GuildMaster, g.Score
ORDER BY MemberCount DESC;
-- List all members of a specific guild
SELECT Name, AccountID, GuildStatus
FROM GuildMember
WHERE GuildName = 'GuildNameHere'
ORDER BY GuildStatus DESC;
GuildStatus values typically follow this pattern:
0→ Regular member1→ Battle Master2→ Guild Master
Changing the Guild Master
If the current master has quit the server and left the guild without leadership:
BEGIN TRANSACTION;
-- Demote the old master in GuildMember
UPDATE GuildMember
SET GuildStatus = 0
WHERE GuildName = 'GuildNameHere' AND Name = 'OldMasterName';
-- Promote the new master in GuildMember
UPDATE GuildMember
SET GuildStatus = 2
WHERE GuildName = 'GuildNameHere' AND Name = 'NewMasterName';
-- Update the Guild header table
UPDATE Guild
SET GuildMaster = 'NewMasterName'
WHERE GuildName = 'GuildNameHere';
COMMIT;
> [!TIP] > Announce leadership transfers in your server's Discord or forum before making the database change. This prevents disputes and keeps the community informed. Document the request, the reason, and the date in a private admin log.
Disbanding an Inactive Guild
Disbanding involves removing three related record sets:
BEGIN TRANSACTION;
DELETE FROM GuildMark WHERE GuildName = 'InactiveGuild';
DELETE FROM GuildMember WHERE GuildName = 'InactiveGuild';
DELETE FROM Guild WHERE GuildName = 'InactiveGuild';
COMMIT;
After disbanding, any alliance relationships this guild held should also be reviewed. Check the GuildAlliance or equivalent table in your build and remove stale entries.
Adjusting Guild Score or Alliance Points
Guild score affects ranking boards. To manually correct a score after a legitimate bug:
BEGIN TRANSACTION;
UPDATE Guild
SET Score = 15000
WHERE GuildName = 'GuildNameHere';
COMMIT;
Only adjust scores to correct verifiable bugs, not to reward favourites. Keep a log of every manual score change with the reason and admin name.
Using In-Game GM Commands
Direct database edits are powerful but risky. For day-to-day operations, in-game GM commands are faster and safer. Common commands across most builds:
/ban <AccountID> <Minutes> → temporary account ban
/unban <AccountID> → lift a ban
/kick <CharacterName> → disconnect a character
/move <CharacterName> <Map> <X> <Y> → relocate a stuck player
/givitem <CharacterName> <ItemCode> <Level> <Count> → grant item
/guilddisband <GuildName> → disband guild in-game
/addgm <AccountID> <Level> → grant GM access
> [!TIP] > Keep a private text file or wiki page documenting every GM command available on your specific build, with the exact syntax. Command syntax varies between emulators and seasons. Test new commands on a test account before using them on real players.
Logging and Audit Practices
Every change you make to accounts or guilds should be logged. At minimum, maintain a spreadsheet or private channel with:
- Date and time of the action
- Admin username who performed it
- Player/guild affected
- Reason for the action
- SQL query or command used
Many server builds include a LogGM or AdminLog table. Enable it and query it regularly:
SELECT TOP 100 *
FROM LogGM
ORDER BY LogDate DESC;
Consistent logging protects you from false accusations, helps you spot patterns of abuse, and makes it possible to undo mistakes by retracing the exact changes made.
Routine Maintenance Queries
Run these periodically to keep the database healthy:
-- Find accounts inactive for over 6 months
SELECT memb___id, LastLoginDate
FROM MEMB_STAT
WHERE LastLoginDate < DATEADD(MONTH, -6, GETDATE())
ORDER BY LastLoginDate ASC;
-- Find guilds with zero members (orphaned records)
SELECT g.GuildName
FROM Guild g
LEFT JOIN GuildMember m ON g.GuildName = m.GuildName
WHERE m.Name IS NULL;
-- Find characters with no associated account (orphaned rows)
SELECT c.Name, c.AccountID
FROM Character c
LEFT JOIN MEMB_INFO a ON c.AccountID = a.memb___id
WHERE a.memb___id IS NULL;
Cleaning up orphaned and inactive records keeps your database lean and reduces the risk of conflicts when players create new accounts or guilds with names that were previously used.
Solid account and guild management is the foundation of a well-run private server. Apply every change through tested SQL transactions, document your actions, and communicate with your player base before making decisions that affect their characters or communities.
Perguntas frequentes
How do I reset a player's password from the database?
Connect to your SQL Server instance, open the MEMB_INFO table in your account database, locate the row by memb___id, and update the memb__pwd column with the new hashed or plaintext value depending on your server's authentication method. Always back up the table before making direct edits.
Can I transfer a character between accounts without losing items?
Yes. Update the AccountID column in the Character table to point to the destination account, then verify the character's warehouse and inventory rows in the respective tables still reference the correct character name. Test with a low-value character first.
How do I disband a guild that has become inactive?
Use the GM command /guilddisband <GuildName> in-game if your server software supports it, or delete the guild's row from the Guild table in the database and cascade-delete related rows in GuildMember and GuildMark tables. Announce the action to affected players beforehand.
What is the safest way to grant GM privileges to a staff member?
Set the AccountLevel field in MEMB_INFO to the appropriate level (commonly 3 for Helper, 5 for GM, 8 for Admin depending on your build), restrict in-game GM commands to only what that staff member needs, and audit their usage periodically through server logs.