You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
🆙 Updated SQL
This commit is contained in:
@@ -1,7 +1,5 @@
|
|||||||
-- Soundboard
|
ALTER TABLE `rooms`
|
||||||
-- The room flag column + sounds table are also created at boot by
|
ADD COLUMN IF NOT EXISTS `soundboard_enabled` TINYINT(1) NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
ALTER TABLE `rooms` ADD COLUMN IF NOT EXISTS `soundboard_enabled` TINYINT(1) NOT NULL DEFAULT 0;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `soundboard_sounds` (
|
CREATE TABLE IF NOT EXISTS `soundboard_sounds` (
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -12,11 +10,9 @@ CREATE TABLE IF NOT EXISTS `soundboard_sounds` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- ----------------------------------------------------------------------------
|
||||||
-- Fortune Wheel
|
-- Fortune Wheel — tables
|
||||||
-- Tables are also created at boot by WheelManager (CREATE TABLE IF NOT EXISTS),
|
-- ----------------------------------------------------------------------------
|
||||||
-- so applying this file is only needed to seed prizes + settings.
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `wheel_prizes` (
|
CREATE TABLE IF NOT EXISTS `wheel_prizes` (
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
`type` VARCHAR(16) NOT NULL DEFAULT 'nothing', -- item | badge | credits | points | spin | nothing
|
`type` VARCHAR(16) NOT NULL DEFAULT 'nothing', -- item | badge | credits | points | spin | nothing
|
||||||
@@ -45,34 +41,49 @@ CREATE TABLE IF NOT EXISTS `wheel_recent_wins` (
|
|||||||
`look` VARCHAR(255) NOT NULL DEFAULT '',
|
`look` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
`prize_label` VARCHAR(64) NOT NULL DEFAULT '',
|
`prize_label` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
`won_at` INT(11) NOT NULL DEFAULT 0,
|
`won_at` INT(11) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`)
|
||||||
KEY `idx_wheel_recent_wins_id` (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`, `comment`) VALUES
|
INSERT INTO `emulator_settings` (`key`, `value`, `comment`) VALUES
|
||||||
('wheel.free_spins_per_day', '1', 'Fortune wheel: free spins granted each day.')
|
('wheel.free_spins_per_day', '1', 'Fortune wheel: free spins granted each day.'),
|
||||||
ON DUPLICATE KEY UPDATE `comment` = VALUES(`comment`);
|
('wheel.spin_cost', '50', 'Fortune wheel: cost of one extra spin.'),
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`, `comment`) VALUES
|
|
||||||
('wheel.spin_cost', '50', 'Fortune wheel: cost of one extra spin.')
|
|
||||||
ON DUPLICATE KEY UPDATE `comment` = VALUES(`comment`);
|
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`, `comment`) VALUES
|
|
||||||
('wheel.spin_cost_type', '5', 'Fortune wheel: currency type for the spin cost (5 = diamonds; -1 = credits).')
|
('wheel.spin_cost_type', '5', 'Fortune wheel: currency type for the spin cost (5 = diamonds; -1 = credits).')
|
||||||
ON DUPLICATE KEY UPDATE `comment` = VALUES(`comment`);
|
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO `wheel_prizes` (`type`, `amount`, `points_type`, `weight`, `label`, `sort_order`) VALUES
|
|
||||||
('points',25, 5, 20, '25 diamonds',1),
|
|
||||||
('points',50, 5, 12, '50 diamonds',2),
|
|
||||||
('points',200, 5, 3, '200 diamonds',3),
|
|
||||||
('credits',100, 0, 15, '100 credits',4),
|
|
||||||
('spin',1, 0, 15, '1 Extra spin', 5),
|
|
||||||
('spin',2, 0, 6, '2 Extra spins',6),
|
|
||||||
('nothing',0, 0, 29, 'Oh to bad!',7);
|
|
||||||
|
|
||||||
INSERT INTO `permission_definitions`
|
|
||||||
(`permission_key`, `max_value`, `comment`,
|
|
||||||
`rank_1`, `rank_2`, `rank_3`, `rank_4`, `rank_5`, `rank_6`, `rank_7`)
|
|
||||||
VALUES
|
|
||||||
('acc_wheeladmin', 1, 'Required to open the Fortune Wheel settings popup and edit prize rows.',
|
|
||||||
0, 0, 0, 0, 0, 0, 1)
|
|
||||||
ON DUPLICATE KEY UPDATE `comment` = VALUES(`comment`);
|
ON DUPLICATE KEY UPDATE `comment` = VALUES(`comment`);
|
||||||
|
|
||||||
|
INSERT INTO `wheel_prizes` (`type`, `amount`, `points_type`, `weight`, `label`, `sort_order`)
|
||||||
|
SELECT `type`, `amount`, `points_type`, `weight`, `label`, `sort_order`
|
||||||
|
FROM (
|
||||||
|
SELECT 'points' AS `type`, 25 AS `amount`, 5 AS `points_type`, 20 AS `weight`, '25 diamonds' AS `label`, 1 AS `sort_order`
|
||||||
|
UNION ALL SELECT 'points', 50, 5, 12, '50 diamonds', 2
|
||||||
|
UNION ALL SELECT 'points', 200, 5, 3, '200 diamonds', 3
|
||||||
|
UNION ALL SELECT 'credits', 100, 0, 15, '100 credits', 4
|
||||||
|
UNION ALL SELECT 'spin', 1, 0, 15, '1 Extra spin', 5
|
||||||
|
UNION ALL SELECT 'spin', 2, 0, 6, '2 Extra spins', 6
|
||||||
|
UNION ALL SELECT 'nothing', 0, 0, 29, 'Oh to bad!', 7
|
||||||
|
) AS seed
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM `wheel_prizes`);
|
||||||
|
|
||||||
|
INSERT IGNORE INTO `permission_definitions` (`permission_key`, `max_value`, `comment`)
|
||||||
|
VALUES (
|
||||||
|
'acc_wheeladmin',
|
||||||
|
1,
|
||||||
|
'Allows opening the Fortune Wheel prize editor (FortuneWheelSettingsView) to add/edit prize slices. Gated server-side by the same key.'
|
||||||
|
);
|
||||||
|
|
||||||
|
SET @cols := NULL;
|
||||||
|
SELECT GROUP_CONCAT(CONCAT('dst.`', `column_name`, '` = src.`', `column_name`, '`') SEPARATOR ', ')
|
||||||
|
INTO @cols
|
||||||
|
FROM `information_schema`.`columns`
|
||||||
|
WHERE `table_schema` = DATABASE()
|
||||||
|
AND `table_name` = 'permission_definitions'
|
||||||
|
AND `column_name` REGEXP '^rank_[0-9]+$';
|
||||||
|
|
||||||
|
SET @sql := CONCAT(
|
||||||
|
'UPDATE `permission_definitions` dst ',
|
||||||
|
'JOIN `permission_definitions` src ON src.`permission_key` = ''acc_ads_background'' ',
|
||||||
|
'SET ', @cols, ' ',
|
||||||
|
'WHERE dst.`permission_key` = ''acc_wheeladmin'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
-- Fortune Wheel — admin permission grant (`acc_wheeladmin`)
|
|
||||||
--
|
|
||||||
-- Both the client (FortuneWheelView "Settings" button) and the server handlers
|
|
||||||
-- (WheelAdminGetPrizesEvent / WheelAdminSavePrizesEvent, PERMISSION_KEY =
|
|
||||||
-- "acc_wheeladmin") gate the prize editor on `acc_wheeladmin`.
|
|
||||||
--
|
|
||||||
-- The key itself is registered upstream in
|
|
||||||
-- `Database Updates/008_soundboard_fortune_wheel.sql`, but that file only grants
|
|
||||||
-- it to `rank_7` (its author's 7-rank hotel) and its ON DUPLICATE clause touches
|
|
||||||
-- the comment only. So on a hotel with a different rank layout the key would end
|
|
||||||
-- up granted to nobody useful. This file supplies the portable grant.
|
|
||||||
--
|
|
||||||
-- Idempotent + portable: registers the key as a no-op safety (in case 008 hasn't
|
|
||||||
-- run yet) and grants it to the same ranks that hold acc_ads_background — the
|
|
||||||
-- adjacent "manage room-ad furni" permission — with dynamic SQL over the per-rank
|
|
||||||
-- columns, so no rank ids are hardcoded. If acc_ads_background is absent the JOIN
|
|
||||||
-- matches nothing and the key stays ungranted (safe; the button just stays
|
|
||||||
-- hidden until granted by hand).
|
|
||||||
--
|
|
||||||
-- After applying, reload at runtime with `:update_permissions` (rebinds online
|
|
||||||
-- users to the fresh rank and rebroadcasts the permission map — no relog) or
|
|
||||||
-- restart the emulator.
|
|
||||||
|
|
||||||
-- 1) Safety no-op registration (008 is the canonical registrar). rank_* default 0.
|
|
||||||
INSERT IGNORE INTO `permission_definitions` (`permission_key`, `max_value`, `comment`)
|
|
||||||
VALUES (
|
|
||||||
'acc_wheeladmin',
|
|
||||||
1,
|
|
||||||
'Allows opening the fortune wheel prize editor (FortuneWheelSettingsView) to add/edit prize slices. Gated server-side by the same key.'
|
|
||||||
);
|
|
||||||
|
|
||||||
-- 2) Grant to the same ranks as acc_ads_background, portably.
|
|
||||||
SET @cols := NULL;
|
|
||||||
|
|
||||||
SELECT GROUP_CONCAT(CONCAT('dst.`', `column_name`, '` = src.`', `column_name`, '`') SEPARATOR ', ')
|
|
||||||
INTO @cols
|
|
||||||
FROM `information_schema`.`columns`
|
|
||||||
WHERE `table_schema` = DATABASE()
|
|
||||||
AND `table_name` = 'permission_definitions'
|
|
||||||
AND `column_name` REGEXP '^rank_[0-9]+$';
|
|
||||||
|
|
||||||
SET @sql := CONCAT(
|
|
||||||
'UPDATE `permission_definitions` dst ',
|
|
||||||
'JOIN `permission_definitions` src ON src.`permission_key` = ''acc_ads_background'' ',
|
|
||||||
'SET ', @cols, ' ',
|
|
||||||
'WHERE dst.`permission_key` = ''acc_wheeladmin'''
|
|
||||||
);
|
|
||||||
|
|
||||||
PREPARE stmt FROM @sql;
|
|
||||||
EXECUTE stmt;
|
|
||||||
DEALLOCATE PREPARE stmt;
|
|
||||||
Reference in New Issue
Block a user