
Presente de evento, prêmio de concurso, "deu ruim e preciso devolver": em algum momento você vai precisar dar ou ajustar moeda de alguém — ou de todo mundo de uma vez. No jogo existe o :masscredits, mas o banco é o que resolve quando é um valor específico, um jogador só ou um monte de gente.
Onde cada moeda fica
| O que | Tabela | Coluna / tipo |
|---|---|---|
| Moedas (credits) | users | credits |
| Duckets | users_currency | type = 0 |
| Diamantes | users_currency | type = 5 |
| Habbo Club | users_subscriptions | subscription_type = 'HABBO_CLUB' |
A coluna credits de users_settings fica zerada: a moeda de verdade é a de users.
Para ver quais moedas o seu hotel usa, olhe o mapeamento do emulador:
SELECT `key`, `value` FROM emulator_settings WHERE `key` LIKE 'seasonal.currency%';
E o que cada tipo já tem no hotel:
SELECT `type`, SUM(amount) AS total, COUNT(*) AS contas FROM users_currency GROUP BY `type`;
Passo 1: dar moedas
-- Moedas para todos os jogadores de uma vez
UPDATE users SET credits = credits + 1000 WHERE `rank` = 1;
-- Um jogador só
UPDATE users SET credits = credits + 500 WHERE username = 'Bia';
-- Valor exato (cuidado: sobrescreve o que a pessoa tinha)
UPDATE users SET credits = 2500 WHERE username = 'Bia';
Passo 2: duckets e diamantes
Aqui cada moeda é uma linha em users_currency (user_id + type). O ON DUPLICATE KEY UPDATE faz o trabalho de "se já existe, soma":
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 0, 500 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 500;
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 5, 50 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 50;

Passo 3: Habbo Club
O HC fica em users_subscriptions, com a duração em segundos:
INSERT INTO users_subscriptions (user_id, subscription_type, timestamp_start, duration, active)
SELECT id, 'HABBO_CLUB', UNIX_TIMESTAMP(), 2592000, 1
FROM users WHERE username = 'Caio';
2592000 é 30 dias. Uma semana é 604800, um ano é 31536000.
Tudo junto, o resultado é uma linha por instrução:

Conferindo
SELECT id, username, credits FROM users ORDER BY id;
SELECT user_id, `type`, amount FROM users_currency ORDER BY user_id, `type`;

Detalhes que evitam dor de cabeça
- Rode o
SELECT com o mesmo WHERE antes de qualquer UPDATE, para ver quem vai ser afetado. O WHERErank= 1 do exemplo pega todo mundo que é Membro; sem ele, você paga a conta da equipe também.
- Quem está online precisa sair e entrar para ver a moeda nova (o emulador guarda na memória).
- Alternativa pelo jogo (staff):
:masscredits 1000, :massduckets 500, :masspoints 50 5 (o 5 é o tipo da moeda) e :credits 500 Fulano.
- Moeda muito alta está sempre no topo do ranking do hotel e chama atenção: valores redondos e exagerados (99999999) aparecem. Prefira valores plausíveis.
amount é um número inteiro: 0 na prática é "sem saldo" e valor negativo não existe. Para tirar moeda, use credits - 500 (e confira que ninguém ficou no negativo: WHERE credits >= 500).
- Sempre backup antes. É a única coisa que desfaz um
UPDATE sem WHERE que pegou mais gente do que devia.
🇬🇧 English
Credits, duckets, diamonds and HC from the database
Event presents, contest prizes, "something went wrong and I need to refund": sooner or later you will need to give or adjust someone's currency — or everyone's at once. In game there is :masscredits, but the database is what solves it when the value is specific, it is a single player, or a whole crowd.
Where each currency lives
| What | Table | Column / type |
|---|---|---|
| Credits | users | credits |
| Duckets | users_currency | type = 0 |
| Diamonds | users_currency | type = 5 |
| Habbo Club | users_subscriptions | subscription_type = 'HABBO_CLUB' |
The credits column in users_settings stays zero: the real money is in users.
Step 1: giving credits
UPDATE users SET credits = credits + 1000 WHERE `rank` = 1;
UPDATE users SET credits = credits + 500 WHERE username = 'Bia';
UPDATE users SET credits = 2500 WHERE username = 'Bia';
Step 2: duckets and diamonds
Each currency is a row in users_currency (user_id + type). ON DUPLICATE KEY UPDATE handles "add if it exists":
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 0, 500 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 500;
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 5, 50 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 50;

Step 3: Habbo Club
HC lives in users_subscriptions, with the duration in seconds:
INSERT INTO users_subscriptions (user_id, subscription_type, timestamp_start, duration, active)
SELECT id, 'HABBO_CLUB', UNIX_TIMESTAMP(), 2592000, 1
FROM users WHERE username = 'Caio';
2592000 is 30 days (a week is 604800, a year is 31536000).

Checking
SELECT id, username, credits FROM users ORDER BY id;
SELECT user_id, `type`, amount FROM users_currency ORDER BY user_id, `type`;

Details that save you trouble
- Run the
SELECT with the same WHERE first. WHERErank= 1 means every Member — without it you pay your staff too.
- Whoever is online must log out and back in to see it.
- In game:
:masscredits 1000, :massduckets 500, :masspoints 50 5 and :credits 500 Someone.
- To take currency away use
credits - 500 and check nobody goes negative: add WHERE credits >= 500.
- Always back up first: it is the only thing that undoes an
UPDATE without WHERE.
🇪🇸 Español
Monedas, duckets, diamantes y HC desde la base de datos
Regalos de evento, premios de concurso, "algo salió mal y hay que devolverlo": tarde o temprano vas a necesitar dar o ajustar la moneda de alguien — o de todos a la vez. En el juego existe :masscredits, pero la base de datos es la que resuelve cuando el valor es exacto, es un solo jugador o es mucha gente.
Dónde vive cada moneda
| Qué | Tabla | Columna / tipo |
|---|---|---|
| Monedas | users | credits |
| Duckets | users_currency | type = 0 |
| Diamantes | users_currency | type = 5 |
| Habbo Club | users_subscriptions | subscription_type = 'HABBO_CLUB' |
La columna credits de users_settings queda en cero: el saldo real está en users.
Paso 1: dar monedas
UPDATE users SET credits = credits + 1000 WHERE `rank` = 1;
UPDATE users SET credits = credits + 500 WHERE username = 'Bia';
UPDATE users SET credits = 2500 WHERE username = 'Bia';
Paso 2: duckets y diamantes
Cada moneda es una fila en users_currency (user_id + type):
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 0, 500 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 500;
INSERT INTO users_currency (user_id, type, amount)
SELECT id, 5, 50 FROM users WHERE `rank` = 1
ON DUPLICATE KEY UPDATE amount = amount + 50;

Paso 3: Habbo Club
El HC vive en users_subscriptions, con la duración en segundos:
INSERT INTO users_subscriptions (user_id, subscription_type, timestamp_start, duration, active)
SELECT id, 'HABBO_CLUB', UNIX_TIMESTAMP(), 2592000, 1
FROM users WHERE username = 'Caio';
2592000 son 30 días (una semana son 604800).

Comprobar
SELECT id, username, credits FROM users ORDER BY id;
SELECT user_id, `type`, amount FROM users_currency ORDER BY user_id, `type`;

Detalles que evitan dolores de cabeza
- Ejecuta primero el
SELECT con el mismo WHERE. WHERErank= 1 son todos los Miembros; sin él, le pagas también al equipo.
- Quien esté en línea debe salir y volver a entrar.
- En el juego:
:masscredits 1000, :massduckets 500, :masspoints 50 5 y :credits 500 Fulano.
- Para quitar monedas usa
credits - 500 y comprueba que nadie quede en negativo: WHERE credits >= 500.
- Backup siempre antes: es lo único que deshace un
UPDATE sin WHERE.
📚 Leia também