Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions sql/custom/auth/EG_2016_12_05_00_auth_permissions_01.sql
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
--
DELETE FROM `rbac_permissions` WHERE `id` = 1003;
DELETE FROM `rbac_permissions` WHERE `id` IN (1003, 1004);
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
(1003, 'Allow crossfaction arena team interaction');
(1003, 'Allow crossfaction arena team interaction'),
(1004, 'Command: tournament');

DELETE FROM `rbac_linked_permissions` WHERE `id` IN (195, 199);
INSERT INTO `rbac_linked_permissions` VALUES
Expand Down
3 changes: 2 additions & 1 deletion sql/custom/auth/EG_2016_12_05_00_auth_permissions_04.sql
Original file line number Diff line number Diff line change
Expand Up @@ -324,4 +324,5 @@ INSERT INTO `rbac_linked_permissions` VALUES
(196, 879), -- Command: debug poolstatus
(196, 881), -- Command: reload vehicle_template
(196, 884), -- Command: bg start
(196, 885); -- Command: bg stop
(196, 885), -- Command: bg stop
(196, 1004); -- Command: tournament
75 changes: 75 additions & 0 deletions sql/custom/characters/EG_2026_06_11_00_character_tournament.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
--
DROP TABLE IF EXISTS `tournament`;
CREATE TABLE `tournament` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`state` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0 draft, 1 registration, 2 locked, 3 running, 4 ended',
`difficulty` tinyint(3) unsigned NOT NULL DEFAULT 1 COMMENT '0 normal, 1 heroic',
`ilvlCap` smallint(5) unsigned NOT NULL DEFAULT 213 COMMENT 'max allowed equipped item level',
`startTime` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'unix time the tournament went running',
`endTime` int(10) unsigned NOT NULL DEFAULT 0,
`createdBy` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'admin character guidLow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tournament_dungeon`;
CREATE TABLE `tournament_dungeon` (
`tournamentId` int(10) unsigned NOT NULL,
`slot` tinyint(3) unsigned NOT NULL COMMENT '1..5',
`mapId` smallint(5) unsigned NOT NULL,
`difficulty` tinyint(3) unsigned NOT NULL DEFAULT 1 COMMENT '0 normal, 1 heroic',
`revealed` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT 'hidden until tournament start',
PRIMARY KEY (`tournamentId`,`slot`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tournament_team`;
CREATE TABLE `tournament_team` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tournamentId` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0 active, 1 disqualified',
`dqReason` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_tournament` (`tournamentId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tournament_team_member`;
CREATE TABLE `tournament_team_member` (
`teamId` int(10) unsigned NOT NULL,
`charGuid` int(10) unsigned NOT NULL COMMENT 'character guidLow',
`accountId` int(10) unsigned NOT NULL DEFAULT 0,
`role` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0 tank, 1 healer, 2 dps',
PRIMARY KEY (`teamId`,`charGuid`),
KEY `idx_char` (`charGuid`) COMMENT 'uniqueness is per tournament, enforced by the core'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tournament_run`;
CREATE TABLE `tournament_run` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`teamId` int(10) unsigned NOT NULL,
`dungeonSlot` tinyint(3) unsigned NOT NULL,
`mapId` smallint(5) unsigned NOT NULL,
`instanceId` int(10) unsigned NOT NULL DEFAULT 0,
`state` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0 pending, 1 active, 2 completed, 3 void, 4 rejected',
`combatStart` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'unix time, first player in combat',
`bossFinish` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'unix time, end boss dead with all encounters done',
`durationMs` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'millisecond-precise run time',
`rejectReason` varchar(255) NOT NULL DEFAULT '',
`verifiedBy` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'staff character guidLow',
`created` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_team` (`teamId`),
KEY `idx_slot` (`dungeonSlot`),
KEY `idx_instance` (`instanceId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tournament_run_event`;
CREATE TABLE `tournament_run_event` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`runId` int(10) unsigned NOT NULL,
`ts` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'unix time',
`type` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0 enter, 1 combatStart, 2 bossKill, 3 wipe, 4 gearViolation, 5 finish, 6 void, 7 rejected',
`detail` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_run` (`runId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
26 changes: 26 additions & 0 deletions src/server/database/Database/Implementation/CharacterDatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,32 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_ARENA_1V1, "INSERT INTO character_arena_1v1 (guid, rating, matchMakerRating, weekGames, weekWins, seasonGames, seasonWins, previousOpponent) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_ARENA_1V1, "UPDATE character_arena_1v1 SET rating = ?, matchMakerRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, previousOpponent = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ARENA_1V1, "DELETE FROM character_arena_1v1 WHERE guid = ?", CONNECTION_ASYNC);

// EG - PvE tournament
PrepareStatement(CHAR_SEL_TOURNAMENT_ALL, "SELECT id, name, state, difficulty, ilvlCap, startTime, endTime, createdBy FROM tournament", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_TOURNAMENT, "INSERT INTO tournament (id, name, state, difficulty, ilvlCap, startTime, endTime, createdBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_STATE, "UPDATE tournament SET state = ?, startTime = ?, endTime = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_ILVL, "UPDATE tournament SET ilvlCap = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT, "DELETE FROM tournament WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_TOURNAMENT_DUNGEON_ALL, "SELECT tournamentId, slot, mapId, difficulty, revealed FROM tournament_dungeon", CONNECTION_SYNCH);
PrepareStatement(CHAR_REP_TOURNAMENT_DUNGEON, "REPLACE INTO tournament_dungeon (tournamentId, slot, mapId, difficulty, revealed) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT_DUNGEON, "DELETE FROM tournament_dungeon WHERE tournamentId = ? AND slot = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT_DUNGEON_ALL, "DELETE FROM tournament_dungeon WHERE tournamentId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_DUNGEON_REVEAL, "UPDATE tournament_dungeon SET revealed = ? WHERE tournamentId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_TOURNAMENT_TEAM_ALL, "SELECT id, tournamentId, name, status, dqReason FROM tournament_team", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_TOURNAMENT_TEAM, "INSERT INTO tournament_team (id, tournamentId, name, status, dqReason) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_TEAM_STATUS, "UPDATE tournament_team SET status = ?, dqReason = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT_TEAM, "DELETE FROM tournament_team WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_TOURNAMENT_MEMBER_ALL, "SELECT teamId, charGuid, accountId, role FROM tournament_team_member", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_TOURNAMENT_MEMBER, "INSERT INTO tournament_team_member (teamId, charGuid, accountId, role) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT_MEMBER, "DELETE FROM tournament_team_member WHERE teamId = ? AND charGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_TOURNAMENT_MEMBER_BY_TEAM, "DELETE FROM tournament_team_member WHERE teamId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_TOURNAMENT_RUN_ALL, "SELECT id, teamId, dungeonSlot, mapId, instanceId, state, combatStart, bossFinish, durationMs, rejectReason FROM tournament_run", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_TOURNAMENT_RUN_BY_ID, "SELECT id FROM tournament_run WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_TOURNAMENT_RUN, "INSERT INTO tournament_run (id, teamId, dungeonSlot, mapId, instanceId, state, created) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_RUN, "UPDATE tournament_run SET state = ?, combatStart = ?, bossFinish = ?, durationMs = ?, rejectReason = ?, verifiedBy = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_TOURNAMENT_RUN_VERDICT, "UPDATE tournament_run SET state = ?, rejectReason = ?, verifiedBy = ? WHERE id = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_TOURNAMENT_RUN_EVENT, "INSERT INTO tournament_run_event (runId, ts, type, detail) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
}

CharacterDatabaseConnection::CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo)
Expand Down
26 changes: 26 additions & 0 deletions src/server/database/Database/Implementation/CharacterDatabase.h
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,32 @@ enum CharacterDatabaseStatements : uint32
CHAR_UPD_ARENA_1V1,
CHAR_DEL_ARENA_1V1,

// EG - PvE tournament
CHAR_SEL_TOURNAMENT_ALL,
CHAR_INS_TOURNAMENT,
CHAR_UPD_TOURNAMENT_STATE,
CHAR_UPD_TOURNAMENT_ILVL,
CHAR_DEL_TOURNAMENT,
CHAR_SEL_TOURNAMENT_DUNGEON_ALL,
CHAR_REP_TOURNAMENT_DUNGEON,
CHAR_DEL_TOURNAMENT_DUNGEON,
CHAR_DEL_TOURNAMENT_DUNGEON_ALL,
CHAR_UPD_TOURNAMENT_DUNGEON_REVEAL,
CHAR_SEL_TOURNAMENT_TEAM_ALL,
CHAR_INS_TOURNAMENT_TEAM,
CHAR_UPD_TOURNAMENT_TEAM_STATUS,
CHAR_DEL_TOURNAMENT_TEAM,
CHAR_SEL_TOURNAMENT_MEMBER_ALL,
CHAR_INS_TOURNAMENT_MEMBER,
CHAR_DEL_TOURNAMENT_MEMBER,
CHAR_DEL_TOURNAMENT_MEMBER_BY_TEAM,
CHAR_SEL_TOURNAMENT_RUN_ALL,
CHAR_SEL_TOURNAMENT_RUN_BY_ID,
CHAR_INS_TOURNAMENT_RUN,
CHAR_UPD_TOURNAMENT_RUN,
CHAR_UPD_TOURNAMENT_RUN_VERDICT,
CHAR_INS_TOURNAMENT_RUN_EVENT,

MAX_CHARACTERDATABASE_STATEMENTS
};

Expand Down
1 change: 1 addition & 0 deletions src/server/game/Accounts/RBAC.h
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_CUSTOM_CHARACTER_SETTINGS = 1000,
RBAC_PERM_FREE_TRANSMOGRIFICATION = 1002,
RBAC_PERM_TWO_SIDE_INTERACTION_ARENA = 1003,
RBAC_PERM_COMMAND_TOURNAMENT = 1004,

RBAC_PERM_MAX
};
Expand Down
Loading
Loading