PlayerbotV2 module with core-hooks patches and full SQL migrations
Shipped patches:
playerbotv2_core_hooks.patch — stock TrinityCore master
playerbotv2_core_hooks.thordekk.patch — ThordekkCore
SQL applied at module init by PlayerbotMigrationMgr:
sql/playerbot_v2/0000_playerbot_shared_bootstrap.sql — creates playerbot
shared DB + tables (handcrafted_road, playerbots_names,
playerbot_dungeon_routes, playerbot_nav_links,
playerbot_v2_world_metadata)
sql/playerbot_v2/0001..0016*.sql — character DB tables
SQL auto-applied by TC DBUpdater:
sql/updates/auth/master/
sql/updates/characters/master/
Manual fallback:
sql/playerbot/playerbot_bootstrap.sql
Static data (manual):
src/modules/PlayerbotV2/sql/shared/
src/modules/PlayerbotV2/sql/world/
Includes: Log.h, SpellAuras.h (PlayerbotAPI), Position.h (PlayerbotHooks)
This commit is contained in:
@@ -0,0 +1,110 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- PlayerbotV2: Shared playerbot database bootstrap
|
||||||
|
-- Creates the `playerbot` database and all tables required by the module.
|
||||||
|
-- Run this once after installing the module.
|
||||||
|
--
|
||||||
|
-- Usage: mysql -u root -p < playerbot_bootstrap.sql
|
||||||
|
-- This file is NOT part of TrinityCore's auto-updater.
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
CREATE DATABASE IF NOT EXISTS `playerbot` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
USE `playerbot`;
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- Handcrafted roads: operator-curated road centerlines for navmesh re-tagging
|
||||||
|
-- and bot pathfinding. Queried by HandcraftedRoadStorage.
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `handcrafted_road` (
|
||||||
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`mapId` INT UNSIGNED NOT NULL,
|
||||||
|
`fromX` FLOAT NOT NULL,
|
||||||
|
`fromY` FLOAT NOT NULL,
|
||||||
|
`fromZ` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toX` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toY` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toZ` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`width` FLOAT NOT NULL DEFAULT 2.0,
|
||||||
|
`comment` VARCHAR(255) DEFAULT NULL,
|
||||||
|
`verified` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_map` (`mapId`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- Bot name pool: pre-generated names for spawned bots.
|
||||||
|
-- Queried by Fleet::BotNamePool.
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbots_names` (
|
||||||
|
`name_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(12) NOT NULL,
|
||||||
|
`gender` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`is_used` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`used_by_guid` BIGINT UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`name_id`),
|
||||||
|
UNIQUE KEY `uk_name` (`name`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- Dungeon route waypoints: auto-generated navmesh corridor chains.
|
||||||
|
-- Queried by DungeonScriptMgr.
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot_dungeon_routes` (
|
||||||
|
`map_id` SMALLINT UNSIGNED NOT NULL,
|
||||||
|
`difficulty` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '0 = any difficulty',
|
||||||
|
`seq` SMALLINT UNSIGNED NOT NULL COMMENT 'ordered chain index',
|
||||||
|
`position_x` FLOAT NOT NULL,
|
||||||
|
`position_y` FLOAT NOT NULL,
|
||||||
|
`position_z` FLOAT NOT NULL,
|
||||||
|
PRIMARY KEY (`map_id`, `difficulty`, `seq`),
|
||||||
|
KEY `map_idx` (`map_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- Nav links: DB-authored traversal links (jumps, unmeshed walkable stretches).
|
||||||
|
-- Queried by the dungeon stepper and travel graph.
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot_nav_links` (
|
||||||
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`map_id` SMALLINT UNSIGNED NOT NULL,
|
||||||
|
`from_x` FLOAT NOT NULL,
|
||||||
|
`from_y` FLOAT NOT NULL,
|
||||||
|
`from_z` FLOAT NOT NULL,
|
||||||
|
`to_x` FLOAT NOT NULL,
|
||||||
|
`to_y` FLOAT NOT NULL,
|
||||||
|
`to_z` FLOAT NOT NULL,
|
||||||
|
`radius` FLOAT NOT NULL DEFAULT 12 COMMENT 'mouth proximity (3D yards)',
|
||||||
|
`verified` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`created_by` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`comment` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_map` (`map_id`),
|
||||||
|
KEY `idx_verified` (`verified`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- World metadata: operator-curated world knowledge (cities, roads, danger
|
||||||
|
-- zones, vendors, mailboxes, innkeepers, crossroads). Populated via
|
||||||
|
-- `.playerbot meta add` GM commands.
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot_v2_world_metadata` (
|
||||||
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`map_id` INT UNSIGNED NOT NULL,
|
||||||
|
`zone_id` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`kind` TINYINT UNSIGNED NOT NULL,
|
||||||
|
`pos_x` FLOAT NOT NULL,
|
||||||
|
`pos_y` FLOAT NOT NULL,
|
||||||
|
`pos_z` FLOAT NOT NULL,
|
||||||
|
`radius` FLOAT NOT NULL DEFAULT 10.0,
|
||||||
|
`label` VARCHAR(96) NOT NULL DEFAULT '',
|
||||||
|
`notes` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`created_by` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
KEY `idx_map_kind` (map_id, kind),
|
||||||
|
KEY `idx_map_xy` (map_id, pos_x, pos_y),
|
||||||
|
KEY `idx_zone` (zone_id),
|
||||||
|
KEY `idx_kind` (kind)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
-- Migration: 0000_playerbot_shared_bootstrap
|
||||||
|
-- Date: 2026-08-10
|
||||||
|
-- Purpose: Creates the shared `playerbot` database and all tables the module
|
||||||
|
-- queries via cross-DB qualified syntax (e.g. playerbot.handcrafted_road).
|
||||||
|
-- This runs once on first boot through the PlayerbotMigrationMgr
|
||||||
|
-- (CharacterDatabase connection); the MySQL user needs CREATE DATABASE
|
||||||
|
-- and cross-schema DDL privileges on the `playerbot` schema.
|
||||||
|
-- Reverts: no (tables are IF NOT EXISTS — safe to re-run)
|
||||||
|
-- Target: MySQL server (creates `playerbot` schema), not the characters DB.
|
||||||
|
|
||||||
|
CREATE DATABASE IF NOT EXISTS `playerbot`
|
||||||
|
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot`.`handcrafted_road` (
|
||||||
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`mapId` INT UNSIGNED NOT NULL,
|
||||||
|
`fromX` FLOAT NOT NULL,
|
||||||
|
`fromY` FLOAT NOT NULL,
|
||||||
|
`fromZ` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toX` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toY` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`toZ` FLOAT NOT NULL DEFAULT 0,
|
||||||
|
`width` FLOAT NOT NULL DEFAULT 2.0,
|
||||||
|
`comment` VARCHAR(255) DEFAULT NULL,
|
||||||
|
`verified` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_map` (`mapId`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot`.`playerbots_names` (
|
||||||
|
`name_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(12) NOT NULL,
|
||||||
|
`gender` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`is_used` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`used_by_guid` BIGINT UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`name_id`),
|
||||||
|
UNIQUE KEY `uk_name` (`name`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot`.`playerbot_dungeon_routes` (
|
||||||
|
`map_id` SMALLINT UNSIGNED NOT NULL,
|
||||||
|
`difficulty` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`seq` SMALLINT UNSIGNED NOT NULL,
|
||||||
|
`position_x` FLOAT NOT NULL,
|
||||||
|
`position_y` FLOAT NOT NULL,
|
||||||
|
`position_z` FLOAT NOT NULL,
|
||||||
|
PRIMARY KEY (`map_id`, `difficulty`, `seq`),
|
||||||
|
KEY `map_idx` (`map_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot`.`playerbot_nav_links` (
|
||||||
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`map_id` SMALLINT UNSIGNED NOT NULL,
|
||||||
|
`from_x` FLOAT NOT NULL,
|
||||||
|
`from_y` FLOAT NOT NULL,
|
||||||
|
`from_z` FLOAT NOT NULL,
|
||||||
|
`to_x` FLOAT NOT NULL,
|
||||||
|
`to_y` FLOAT NOT NULL,
|
||||||
|
`to_z` FLOAT NOT NULL,
|
||||||
|
`radius` FLOAT NOT NULL DEFAULT 12,
|
||||||
|
`verified` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`created_by` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`comment` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_map` (`map_id`),
|
||||||
|
KEY `idx_verified` (`verified`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `playerbot`.`playerbot_v2_world_metadata` (
|
||||||
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`map_id` INT UNSIGNED NOT NULL,
|
||||||
|
`zone_id` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`kind` TINYINT UNSIGNED NOT NULL,
|
||||||
|
`pos_x` FLOAT NOT NULL,
|
||||||
|
`pos_y` FLOAT NOT NULL,
|
||||||
|
`pos_z` FLOAT NOT NULL,
|
||||||
|
`radius` FLOAT NOT NULL DEFAULT 10.0,
|
||||||
|
`label` VARCHAR(96) NOT NULL DEFAULT '',
|
||||||
|
`notes` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`created_by` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_map_kind` (`map_id`, `kind`),
|
||||||
|
KEY `idx_map_xy` (`map_id`, `pos_x`, `pos_y`),
|
||||||
|
KEY `idx_zone` (`zone_id`),
|
||||||
|
KEY `idx_kind` (`kind`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
-- Migration: 0001_init
|
||||||
|
-- Date: 2026-05-01
|
||||||
|
-- Purpose: Bootstrap V2 schema. Creates the version table and the minimal
|
||||||
|
-- set of bot-specific tables documented in v2/SCHEMA.md.
|
||||||
|
-- Reverts: yes (all DROP TABLE).
|
||||||
|
|
||||||
|
-- Per v2/SCHEMA.md: bot character data lives in TrinityCore's `characters`
|
||||||
|
-- table. V2 owns ONLY what TrinityCore doesn't already store. No mirror
|
||||||
|
-- tables are permitted.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_schema_version (
|
||||||
|
version INT UNSIGNED NOT NULL PRIMARY KEY,
|
||||||
|
applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
sha256 CHAR(64) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_account (
|
||||||
|
account_id INT UNSIGNED NOT NULL PRIMARY KEY,
|
||||||
|
pseudo_account_idx INT UNSIGNED NOT NULL,
|
||||||
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_used_at DATETIME NULL,
|
||||||
|
KEY idx_pseudo (pseudo_account_idx)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_character (
|
||||||
|
character_guid_low BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||||
|
spawned_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_active_at DATETIME NULL,
|
||||||
|
rng_seed BIGINT UNSIGNED NOT NULL,
|
||||||
|
spawn_state TINYINT UNSIGNED NOT NULL,
|
||||||
|
KEY idx_active (last_active_at),
|
||||||
|
KEY idx_state (spawn_state)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_personality (
|
||||||
|
character_guid_low BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||||
|
skill_tier TINYINT UNSIGNED NOT NULL,
|
||||||
|
verbosity TINYINT UNSIGNED NOT NULL,
|
||||||
|
aggression TINYINT UNSIGNED NOT NULL,
|
||||||
|
risk_tolerance TINYINT UNSIGNED NOT NULL,
|
||||||
|
politeness TINYINT UNSIGNED NOT NULL,
|
||||||
|
loyalty TINYINT UNSIGNED NOT NULL,
|
||||||
|
activity_pref TINYINT UNSIGNED NOT NULL,
|
||||||
|
response_delay_ms SMALLINT UNSIGNED NOT NULL,
|
||||||
|
response_jitter_ms SMALLINT UNSIGNED NOT NULL,
|
||||||
|
mistake_rate TINYINT UNSIGNED NOT NULL,
|
||||||
|
CONSTRAINT fk_pers_char FOREIGN KEY (character_guid_low)
|
||||||
|
REFERENCES playerbot_v2_character (character_guid_low)
|
||||||
|
ON DELETE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_preferences (
|
||||||
|
character_guid_low BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||||
|
preferred_neighborhood INT UNSIGNED NULL,
|
||||||
|
preferred_house_template INT UNSIGNED NULL,
|
||||||
|
opt_in_dungeons BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_raids BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_pvp BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_arena BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_delves BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_professions BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
opt_in_housing BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
accept_player_invites TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
||||||
|
follow_distance_yd FLOAT NOT NULL DEFAULT 5.0,
|
||||||
|
CONSTRAINT fk_prefs_char FOREIGN KEY (character_guid_low)
|
||||||
|
REFERENCES playerbot_v2_character (character_guid_low)
|
||||||
|
ON DELETE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_population_target (
|
||||||
|
target_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
realm_id INT UNSIGNED NOT NULL,
|
||||||
|
effective_at DATETIME NOT NULL,
|
||||||
|
total_target INT UNSIGNED NOT NULL,
|
||||||
|
floor INT UNSIGNED NOT NULL,
|
||||||
|
ceiling INT UNSIGNED NOT NULL,
|
||||||
|
horde_pct TINYINT UNSIGNED NOT NULL,
|
||||||
|
payload_json TEXT NOT NULL,
|
||||||
|
KEY idx_realm_effective (realm_id, effective_at)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (1, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
-- Migration: 0002_owner_squad_control
|
||||||
|
-- Date: 2026-05-06
|
||||||
|
-- Purpose: Owner-bot binding + squad-control state. Adds persistent
|
||||||
|
-- owner_account_id / owner_player_guid so a bot's authority
|
||||||
|
-- model survives logout / group disband. Also adds squad-
|
||||||
|
-- control state (formation type/slot, follow distance,
|
||||||
|
-- verbose flag) so commands like /follow, /formation wedge,
|
||||||
|
-- and /verbose persist across restarts.
|
||||||
|
-- Reverts: yes (DROP COLUMN ... and DROP TABLE on the squad preset).
|
||||||
|
|
||||||
|
-- Per-character owner + squad state. All columns default to "no owner /
|
||||||
|
-- autonomous defaults" so existing rows keep current behaviour.
|
||||||
|
ALTER TABLE playerbot_v2_character
|
||||||
|
ADD COLUMN owner_account_id INT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER spawn_state,
|
||||||
|
ADD COLUMN owner_player_guid BIGINT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER owner_account_id,
|
||||||
|
ADD COLUMN formation_type TINYINT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER owner_player_guid,
|
||||||
|
ADD COLUMN formation_slot TINYINT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER formation_type,
|
||||||
|
ADD COLUMN follow_distance_yd FLOAT NOT NULL DEFAULT 5.0
|
||||||
|
AFTER formation_slot,
|
||||||
|
ADD COLUMN owner_verbose TINYINT(1) NOT NULL DEFAULT 0
|
||||||
|
AFTER follow_distance_yd,
|
||||||
|
ADD KEY idx_owner_account (owner_account_id),
|
||||||
|
ADD KEY idx_owner_player (owner_player_guid);
|
||||||
|
|
||||||
|
-- Owner-saved squad presets (formation per role/class snapshots that an
|
||||||
|
-- owner can re-apply after a wipe / new dungeon entry / etc).
|
||||||
|
-- One row per (owner_account_id, preset_name); the payload_json stores
|
||||||
|
-- {bot_guid → {slot, type}} mappings. We use TEXT (JSON in 8.0+) for
|
||||||
|
-- forward compat; the application layer parses.
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_squad_preset (
|
||||||
|
owner_account_id INT UNSIGNED NOT NULL,
|
||||||
|
preset_name VARCHAR(64) NOT NULL,
|
||||||
|
saved_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
payload_json TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (owner_account_id, preset_name)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (2, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
-- Migration: 0003_talent_builds
|
||||||
|
-- Date: 2026-05-07
|
||||||
|
-- Purpose: Curated per-spec talent build storage. Each (class, spec, context)
|
||||||
|
-- row stores a complete trait spend as a CSV of colon-triples.
|
||||||
|
-- The bot loads these on demand, picks the row matching its
|
||||||
|
-- current context (Raid / MythicPlus / PvP / Default), and applies
|
||||||
|
-- via TraitMgr commit.
|
||||||
|
-- Reverts: yes (DROP TABLE).
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_talent_build (
|
||||||
|
class_id TINYINT UNSIGNED NOT NULL,
|
||||||
|
spec_id INT UNSIGNED NOT NULL,
|
||||||
|
context TINYINT UNSIGNED NOT NULL,
|
||||||
|
label VARCHAR(128) NOT NULL DEFAULT '',
|
||||||
|
entries_json MEDIUMTEXT NOT NULL,
|
||||||
|
source_url VARCHAR(512) NOT NULL DEFAULT '',
|
||||||
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (class_id, spec_id, context),
|
||||||
|
KEY idx_spec (spec_id, context)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- Column docs (kept here below the CREATE so the migration body stays
|
||||||
|
-- a single statement free of comment-embedded semicolons that the
|
||||||
|
-- migration parser used to choke on):
|
||||||
|
-- class_id ChrClasses.db2 id (1=Warrior, 2=Paladin, 3=Hunter...)
|
||||||
|
-- spec_id ChrSpecialization.db2 id (e.g., 71=Arms, 72=Fury)
|
||||||
|
-- context 0=Default, 1=Raid, 2=MythicPlus, 3=PvP, 4=Leveling.
|
||||||
|
-- Default is the fallback when no context-specific row
|
||||||
|
-- exists for the bot.
|
||||||
|
-- label Human-readable name for diagnostics
|
||||||
|
-- ("Arms Slaughterhouse 11.1.5").
|
||||||
|
-- entries_json CSV of colon-triples: nodeID:entryID:ranks separated
|
||||||
|
-- by commas. Loader parses into a TraitConfig.Entries
|
||||||
|
-- vector. Empty string is allowed (bot falls back to
|
||||||
|
-- TraitMgr starter build).
|
||||||
|
-- source_url wowhead / simc origin URL for human reference.
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (3, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
-- Migration: 0004_simc_seed
|
||||||
|
-- Date: 2026-05-07
|
||||||
|
-- Purpose: Seed playerbot_v2_talent_build with raid-context talent
|
||||||
|
-- loadouts decoded from simc/midnight via decode_simc.py.
|
||||||
|
-- Each row is REPLACE INTO upsert — re-running the
|
||||||
|
-- migration overwrites existing rows for (class, spec, context).
|
||||||
|
-- Trait build: WoW 12.0.5.67314. Trait node IDs in entries_json reference
|
||||||
|
-- this client build. If the server runs a newer build that
|
||||||
|
-- renumbered nodes, TraitMgr::ValidateConfig will reject
|
||||||
|
-- rows on apply and bots fall back to TraitMgr starter.
|
||||||
|
-- Coverage: 31 of 39 specs (DPS + tanks). Healers (Restoration Druid,
|
||||||
|
-- Holy/Disc Priest, Holy Paladin, Mistweaver Monk,
|
||||||
|
-- Restoration Shaman, Preservation Evoker) plus Augmentation
|
||||||
|
-- Evoker absent from simc; populate via separate sources.
|
||||||
|
-- Reverts: yes (DELETE rows; re-run the migration to repopulate).
|
||||||
|
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (1, 71, 1, 'simc/midnight MID1_Warrior_Arms', '90269:112121:1,90270:112122:1,90271:112123:1,90273:112125:1,90274:112126:1,90276:112128:1,90277:112129:1,90279:112131:1,90282:112134:1,90283:112135:2,90285:112137:1,90290:112144:1,90291:112145:1,90292:112146:1,90322:112179:2,90326:112183:1,90327:112184:1,90328:112185:1,90331:112188:1,90337:112198:1,90344:112206:1,90346:112208:1,90347:112209:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90438:112310:1,90439:112311:1,90441:112314:1,90444:112317:2,90445:112318:1,90447:112320:2,92537:114643:1,92614:114733:1,94784:117381:1,94786:117383:1,94787:117384:1,94788:117385:1,94795:117392:1,94801:117398:1,94809:117406:1,94810:117407:1,94813:117410:1,94814:117411:1,94818:117415:1,94820:117417:1,95956:118850:1,99853:123390:1,108543:134032:1,108544:134033:1,108676:134216:1,108686:134226:1,108705:136627:1,109391:135597:1,109680:135934:1,109684:135940:1,109685:135941:1,109687:135944:2,109815:136074:1,109816:136075:1,109817:136076:1,110118:136625:1,110119:136626:1,110176:136703:1,110407:136989:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (1, 72, 1, 'simc/midnight MID1_Warrior_Fury', '90325:112182:1,90326:112183:1,90328:112185:1,90331:112188:1,90337:112198:1,90344:112206:1,90346:112208:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90373:112240:2,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90387:112255:1,90388:119139:1,90390:112259:1,90392:112261:1,90394:112263:1,90395:112264:1,90396:112265:1,90397:112266:2,90398:112267:1,90399:112268:1,90401:112270:1,90402:112271:1,90403:112272:1,90406:112275:1,90408:112277:1,90410:112279:1,90412:112281:1,90415:112284:1,90421:112292:2,90428:112299:2,90429:112300:1,90430:112301:1,92538:114644:1,94784:117381:1,94786:117383:1,94787:117384:1,94788:117385:1,94795:117392:1,94801:117398:1,94803:117400:1,94809:117406:1,94810:117407:1,94813:117410:1,94814:117411:1,94820:117417:1,95956:118850:1,99852:123389:1,108542:134031:1,108543:134032:1,108544:134033:1,108674:134213:1,108686:134226:1,108705:136627:1,109391:135597:1,109815:136074:1,109816:136075:1,109817:136076:1,109963:136448:1,109966:136451:1,109968:136453:1,109969:136454:1,110118:136625:1,110119:136626:1,110203:136735:1,110412:137004:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (1, 73, 1, 'simc/midnight MID1_Warrior_Protection', '90261:112112:1,90264:132884:1,90265:112116:1,90295:112149:1,90296:112150:1,90297:112151:1,90298:112152:1,90301:112155:1,90302:112156:1,90303:112157:1,90304:112158:1,90305:112159:1,90306:112160:1,90308:112162:1,90309:112163:1,90310:112165:1,90311:112166:2,90312:132885:1,90314:112170:1,90317:112173:1,90318:112174:1,90319:112176:1,90320:112177:1,90324:112181:2,90326:112183:1,90328:112185:1,90329:112186:1,90330:112187:1,90331:112188:1,90343:112205:1,90346:112208:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90432:112304:1,90433:112305:1,90448:112321:1,90449:112323:1,90451:112325:1,94785:117382:1,94792:118834:1,94797:117394:1,94798:117395:1,94800:117397:1,94803:117400:1,94805:117402:1,94807:117404:1,94808:117405:1,94816:117413:1,94817:118835:1,95956:118850:1,95959:118853:1,99851:123388:1,107577:132882:1,107578:132883:1,108542:134031:1,108543:134032:1,108544:134033:1,108686:134226:1,108705:136627:1,109391:135597:1,109809:136068:1,109810:136069:1,109811:136070:1,110118:136625:1,110119:136626:1,110411:137001:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (2, 65, 1, 'method.gg Holy Paladin (Herald of the Sun)', '81496:102465:1,81508:102477:1,81510:133481:1,81554:102533:1,81555:102534:1,81557:102536:1,81558:102537:1,81560:102539:1,81561:102540:1,81564:102544:1,81565:102545:1,81567:102548:1,81568:102549:1,81569:102550:1,81570:102551:1,81571:102552:1,81575:102558:1,81578:102562:1,81580:102564:1,81583:102567:2,81584:102569:1,81585:102570:1,81588:133501:1,81589:102574:1,81590:102575:1,81591:102577:1,81592:102578:1,81594:102580:1,81595:102581:1,81597:102583:1,81598:102584:1,81600:102587:1,81605:102592:1,81609:102597:1,81613:102601:1,81614:102602:1,81615:102603:1,81616:102604:1,81621:102612:2,81630:102622:2,81631:128251:1,81632:102625:1,92220:114292:1,93009:115034:2,93180:115465:1,93191:128246:1,93520:115872:1,93521:115873:1,93522:115874:1,93927:116376:1,95069:117666:1,95071:117668:1,95072:117669:1,95073:117778:1,95080:117677:1,95086:117683:1,95094:117691:1,95095:117692:1,95098:117777:1,95099:117696:1,95105:117702:1,99839:123362:1,103851:128241:2,103856:128309:1,103858:128254:2,103861:128257:1,103863:128259:1,103864:128260:1,103866:128262:1,109748:136006:1,109749:136007:1,109750:136008:1,109998:136486:1,109999:136487:1,110012:136503:1,110092:136593:1,110257:136795:1,110417:137019:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (2, 66, 1, 'simc/midnight MID1_Paladin_Protection', '81469:102431:1,81470:102432:1,81471:102433:2,81472:102435:1,81477:102440:1,81479:102443:1,81481:102445:1,81482:102446:2,81483:102448:1,81485:102450:2,81486:102452:1,81487:102453:1,81489:102455:1,81490:102456:1,81493:102461:1,81494:102463:1,81495:102464:1,81498:102467:1,81499:102468:1,81501:102470:1,81502:102471:1,81503:102472:1,81505:136732:1,81506:102475:1,81507:102476:1,81510:133481:1,81597:102583:1,81600:102587:1,81603:102590:1,81604:102591:1,81605:102592:1,81607:102595:1,81609:102597:1,81612:102600:1,81614:102602:1,81616:102604:1,81617:102606:1,81621:102612:2,81629:102621:1,81630:102622:2,81631:128251:1,81632:102625:1,90062:111886:1,93010:102623:1,93187:115479:1,93192:128244:1,93357:115673:1,95177:117810:1,95178:117811:1,95179:117812:1,95180:117813:1,95181:117858:1,95182:117815:1,95183:117816:1,95184:117818:1,95185:117819:1,95186:117822:1,95187:117823:1,95234:117882:1,99838:123358:1,101927:102451:1,103851:128241:2,103855:128250:1,103857:128253:1,103858:128254:2,103859:128255:1,103860:128256:1,103867:128263:1,103868:128264:1,103877:128278:1,109745:136003:1,109746:136004:1,109747:136005:1,109999:136487:1,110006:136496:1,110012:136503:1,110418:137022:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (2, 70, 1, 'simc/midnight MID1_Paladin_Retribution', '81510:133481:1,81512:115475:1,81521:114828:1,81523:102493:1,81525:102497:1,81526:102498:1,81527:102499:1,81532:102504:1,81533:102505:1,81534:102506:1,81542:102516:1,81543:102518:1,81544:102519:1,81597:102583:1,81600:102587:1,81603:102590:1,81605:102592:1,81608:102596:1,81609:102597:1,81614:102602:1,81615:102603:1,81616:102604:1,81618:128243:1,81621:102612:2,81630:102622:2,81631:128251:1,81632:102625:1,92686:114824:1,92689:114830:1,92838:115022:1,92839:115024:1,92854:115043:1,92952:115165:2,93009:115034:2,93160:115439:2,93161:115440:1,93164:115443:2,93173:115453:1,93174:115454:1,93181:115467:1,93189:115481:1,93190:115483:2,93357:115673:1,95099:117696:1,95177:117810:1,95178:117811:1,95179:117812:1,95180:117813:1,95181:117858:1,95182:117815:1,95183:117816:1,95184:117818:1,95185:117819:1,95186:117822:1,95187:117823:1,99837:123357:1,103851:128241:2,103861:128257:1,103863:128259:1,103864:128260:1,103867:128263:1,103868:128264:1,109368:135564:1,109369:135565:1,109371:115438:1,109373:115435:1,109374:136809:1,109745:136003:1,109746:136004:1,109747:136005:1,109867:136127:1,109999:136487:1,110012:136503:1,110091:136592:1,110093:136594:1,110419:137025:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (3, 253, 1, 'method.gg Beast Mastery Hunter (Pack Leader Single Target)', '94962:117559:1,94966:117563:1,94967:117564:1,94969:117566:1,94972:117569:1,94979:117576:1,94984:117581:1,94985:117582:1,94988:117585:1,94991:117588:1,94992:117589:1,99832:123347:1,102292:126352:1,102336:126397:2,102339:126400:1,102340:126402:1,102342:126404:1,102343:126405:1,102344:128265:1,102345:126407:2,102346:126408:1,102347:126409:1,102353:126415:1,102354:126416:1,102356:126418:1,102357:126419:1,102358:126420:1,102362:126424:1,102365:126427:1,102367:126430:2,102368:126431:1,102370:126433:1,102372:126435:1,102373:126436:1,102374:126437:1,102376:126439:1,102377:126440:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102397:126461:1,102401:126465:2,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,107285:132188:1,107286:132189:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109488:135711:1,109489:135712:1,109802:136060:1,109803:136061:1,109804:136236:1,109961:136446:1,110152:136670:1,110157:136677:1,110158:136679:1,110164:136685:1,110428:137052:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (3, 254, 1, 'method.gg Marksmanship Hunter (Sentinel Cleave)', '94958:117555:1,94965:117562:1,94970:117567:1,94971:117568:1,94973:117570:1,94976:117573:1,94978:117575:1,94980:117577:1,94981:117578:1,94989:117586:1,94990:117587:1,99831:123345:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102389:126452:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102401:126465:2,102402:126466:1,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,103947:128367:1,103956:128376:1,103957:128377:1,103958:132194:1,103961:128383:1,103962:128384:1,103964:128386:1,103966:128388:1,103973:128395:2,103974:128396:1,103975:128397:1,103977:128399:1,103978:128400:1,103979:128401:1,103982:128404:1,103984:128406:1,103985:128407:1,103986:128408:1,103990:128413:1,104095:128609:1,104127:128710:1,104130:128717:1,107288:132192:1,107289:132193:1,107290:132195:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109488:135711:1,109489:135712:1,109805:136063:1,109807:136065:1,109938:136232:1,109961:136446:1,110028:136521:1,110157:136677:1,110164:136685:1,110430:137058:1,110572:137375:1,110573:137376:1,110574:137377:1,110575:137378:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (3, 255, 1, 'method.gg Survival Hunter (Pack Leader Single Target)', '79837:100543:1,94962:117559:1,94966:117563:1,94967:117564:1,94969:117566:1,94972:117569:1,94976:117573:1,94979:123781:1,94984:117581:1,94985:117582:1,94988:117585:1,94991:117588:1,94992:117589:1,99833:123350:1,102255:126314:1,102262:126322:1,102263:126323:1,102264:126324:1,102268:126328:1,102270:126330:1,102272:126332:1,102279:126339:1,102282:126342:1,102285:126345:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102389:126452:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102401:126465:1,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,109305:135496:1,109307:135498:1,109309:135500:1,109310:135501:1,109311:135502:1,109312:135503:2,109313:135504:2,109316:135507:1,109319:135510:1,109320:135511:2,109321:135512:1,109323:135514:1,109324:135515:1,109470:135689:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109489:135712:1,109802:136060:1,109803:136061:1,109804:136236:1,110154:136673:1,110155:136675:1,110156:136676:1,110157:136677:1,110159:136680:1,110161:136682:1,110162:136683:1,110164:136685:1,110429:137055:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (4, 259, 1, 'simc/midnight MID1_Rogue_Assassination', '90624:112509:2,90625:112510:1,90626:112511:1,90628:112513:1,90633:112518:1,90634:134840:1,90635:112520:1,90636:112521:1,90640:112526:1,90684:112572:1,90686:112574:1,90687:112575:1,90692:117152:1,90695:112583:1,90697:112585:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90744:112634:1,90745:112635:1,90746:112636:1,90747:112638:1,90748:112639:1,90749:112640:2,90750:112642:1,90751:112643:2,90752:112644:1,90754:112646:1,90756:112648:1,90757:112649:1,90758:112650:1,90759:112651:2,90760:112652:1,90762:112654:1,90763:112655:1,90764:112657:1,90766:112659:2,90767:112660:1,90768:112661:1,90769:112662:1,90770:112663:1,90771:112664:1,90772:112665:2,90777:112670:1,90780:112673:1,90783:112676:1,90784:112677:1,90785:112678:2,90786:112679:1,94536:117106:1,94552:117130:1,94553:117131:1,94554:117133:1,94556:117137:1,94562:117145:1,95107:117704:1,95114:117711:1,95119:117716:1,95120:117717:1,95122:117719:1,95125:117722:1,95127:117724:1,95129:117726:1,95130:117727:1,95136:117733:1,95138:117735:1,95139:117736:1,99844:123371:1,101714:125615:1,109766:136024:1,109767:136025:1,109768:136026:1,110323:136881:1,110433:137067:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (4, 260, 1, 'simc/midnight MID1_Rogue_Outlaw_Fatebound', '90636:112521:1,90638:112523:1,90639:112525:2,90640:112526:1,90643:112529:1,90645:112531:1,90648:112534:1,90649:112535:1,90652:112538:1,90653:112539:1,90654:112540:1,90655:135732:1,90656:112542:1,90659:112545:1,90661:112547:1,90662:112548:1,90663:112549:1,90664:112551:1,90665:112552:1,90666:112553:2,90668:112555:1,90670:112557:1,90671:112558:1,90676:112563:1,90677:112565:1,90678:112566:2,90679:112567:1,90680:112568:1,90681:112569:1,90683:112571:1,90684:112572:1,90686:112574:1,90687:112575:1,90692:117152:1,90695:112583:1,90697:112585:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90744:112634:1,90745:112635:1,90746:112636:1,90747:112638:1,90750:112642:1,90751:112643:2,90752:112644:1,90753:112645:1,90754:112646:1,90755:112647:1,90756:112648:1,90758:112650:1,90759:112651:2,90760:112652:1,90762:112654:1,90763:112656:1,90764:112657:1,94562:117145:1,95107:117704:1,95114:125139:1,95119:117716:1,95120:117717:1,95122:117719:1,95125:117722:1,95127:117724:1,95129:117726:1,95130:125140:1,95138:125132:1,95139:117736:1,95140:117737:1,99843:123374:1,101714:125615:1,109766:136024:1,109767:136025:1,109768:136026:1,110323:136881:1,110434:137070:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (4, 261, 1, 'simc/midnight MID1_Rogue_Subtlety', '90636:112521:1,90638:112523:1,90639:112525:2,90640:112526:1,90684:112572:1,90686:112574:1,90687:112575:1,90690:112578:1,90692:112580:1,90695:112583:1,90697:112585:1,90700:112588:1,90701:136807:1,90703:117172:1,90704:112592:1,90706:112594:2,90709:112597:1,90710:112598:1,90713:112601:1,90716:112604:1,90720:112608:2,90721:112609:1,90722:112610:1,90723:112611:1,90724:112612:1,90726:112614:1,90727:112615:1,90730:112618:1,90732:112620:2,90733:112621:1,90734:112623:1,90737:112627:1,90738:112628:1,90739:112629:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90745:112635:1,90746:112636:1,90748:112639:1,90749:112640:2,90750:112642:1,90751:112643:2,90752:112644:1,90754:112646:1,90758:112650:1,90760:112652:1,90762:112654:1,90763:112656:1,90764:112657:1,94562:117145:1,94580:117168:1,94582:117170:1,95106:117703:1,95108:117705:1,95109:117706:1,95110:117707:1,95117:117714:1,95123:117720:1,95131:117728:1,95132:117729:1,95135:117732:1,95136:117733:1,95140:117737:1,95142:117739:1,99842:123373:1,101714:125615:1,101715:125619:1,109760:136018:1,109761:136019:1,109762:136020:1,110323:136881:1,110324:136882:1,110325:136883:1,110432:137064:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (5, 256, 1, 'method.gg Discipline Priest (Oracle)', '82556:103834:1,82564:116182:1,82570:103695:1,82571:136829:1,82572:103697:2,82573:103698:1,82575:103700:1,82576:108226:1,82577:103702:1,82581:103706:1,82582:103708:1,82583:103709:2,82587:103713:1,82588:103714:1,82589:103717:1,82590:103718:1,82591:103719:1,82592:103721:1,82593:103722:1,82594:103723:1,82595:103724:1,82596:103725:1,82597:103726:1,82598:103727:1,82601:103731:1,82602:103732:1,82672:103818:1,82673:103819:1,82676:115884:1,82677:103823:1,82678:103825:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82696:103846:1,82697:103847:2,82702:103852:1,82703:103853:1,82711:103863:1,82712:103864:1,82713:103865:1,82715:103867:1,82716:103868:1,82717:103869:1,82718:103870:1,82719:103871:1,86730:103688:1,94673:117276:1,94674:117277:1,94675:117278:1,94679:117282:1,94683:117286:1,94687:117290:1,94689:117292:1,94690:117293:1,94691:117294:1,94698:117301:1,94700:117303:1,99801:123290:1,108731:134284:1,109006:103841:1,109010:134844:2,109011:134845:1,109012:134846:1,109015:134849:1,109020:134859:1,109021:134860:1,109781:136039:1,109782:136040:1,109783:136041:1,109890:136157:1,110008:136498:1,110277:136828:1,110278:136830:1,110410:136998:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (5, 257, 1, 'method.gg Holy Priest (Oracle)', '82554:103675:1,82556:103834:1,82606:103738:1,82608:103740:1,82610:103743:1,82611:103744:2,82612:103745:1,82613:128316:1,82614:103748:1,82615:103749:1,82616:103750:1,82617:103751:1,82618:103752:1,82620:103754:1,82621:103755:1,82622:103756:1,82623:103757:1,82627:103762:1,82630:103765:1,82631:103766:1,82632:103767:1,82633:103769:1,82636:103773:1,82637:103774:1,82638:103775:1,82641:103779:1,82642:103780:1,82672:103818:1,82673:103819:1,82676:115884:1,82677:103823:1,82678:103825:1,82682:103831:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82696:103846:1,82697:103847:2,82702:103852:1,82703:103853:1,82715:103867:1,82716:103868:1,82717:103869:1,82718:103870:1,82719:103871:1,94673:117276:1,94674:117277:1,94675:117278:1,94679:117282:1,94683:117286:1,94687:117290:1,94689:117292:1,94690:117293:1,94691:117294:1,94698:117301:1,94700:117303:1,99802:123292:1,103901:103676:1,103916:128333:1,104097:128611:1,108724:134273:1,108730:134283:1,108731:134284:1,109006:103841:1,109010:134844:2,109012:134846:1,109015:134849:1,109019:134852:1,109020:134859:1,109021:134860:1,109781:136039:1,109782:136040:1,109783:136041:1,109890:136157:1,109917:136185:1,110409:136995:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (5, 258, 1, 'simc/midnight MID1_Priest_Shadow_Voidweaver', '82552:103781:1,82555:103817:1,82556:103834:1,82559:103682:1,82560:103683:2,82563:103686:1,82643:103782:1,82645:103784:2,82647:103786:1,82649:103789:2,82651:103792:1,82654:103796:1,82656:103798:1,82657:103674:1,82658:103799:1,82659:103801:1,82663:103806:1,82665:103808:1,82666:136811:1,82667:103811:1,82668:103812:1,82669:103813:1,82672:103818:1,82673:103819:1,82676:135091:1,82677:103823:1,82678:103825:1,82679:103826:1,82680:103828:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82695:114588:1,82701:103851:1,82703:103853:1,82704:103854:1,82708:103860:1,82711:103863:1,82712:103864:1,82713:103865:1,82715:103867:1,93170:103810:1,93171:115448:1,94668:117271:1,94669:117272:1,94670:117273:1,94684:117287:1,94692:117295:1,94693:123845:1,94694:117297:1,94695:125982:1,94696:117299:1,94703:117306:1,99800:123287:1,100212:123841:1,108007:133378:1,108029:133400:1,108731:134284:1,109006:103841:1,109009:103677:1,109010:134844:2,109011:134845:1,109012:134846:1,109015:134849:1,109017:136223:1,109018:134851:1,109020:134859:1,109021:134860:1,109778:136036:1,109779:136037:1,109780:136038:1,109890:136157:1,109917:136185:1,110408:136992:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (6, 250, 1, 'method.gg Blood Death Knight (San''layn Single Target)', '76039:96167:1,76041:96169:1,76042:96170:1,76043:96171:1,76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76056:96184:1,76057:96186:1,76058:96187:1,76061:96190:1,76064:96193:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:96203:1,76076:96205:1,76079:96208:2,76080:96209:1,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76124:96255:1,76125:96256:1,76126:96257:2,76127:96258:1,76128:96259:1,76129:96260:1,76130:96261:1,76131:96262:1,76132:96263:1,76133:96264:1,76135:96266:1,76137:96268:1,76138:96269:1,76141:96273:1,76142:96274:1,76144:96277:1,76146:96279:1,76168:96303:1,76169:96304:1,76170:96305:1,76171:96306:1,76172:96307:1,76173:96308:1,95033:117630:1,95040:117637:1,95045:117642:1,95046:117643:1,95048:136836:1,95051:117648:1,95053:117650:1,95055:117652:1,95056:117891:1,95062:117659:1,95064:117661:1,95065:117662:1,99822:123325:1,102007:126015:1,102008:126016:1,102243:126298:1,102244:126300:1,109736:135994:1,109737:135995:1,109738:135996:1,110030:136524:1,110353:136917:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (6, 251, 1, 'method.gg Frost Death Knight (Breath of Sindragosa)', '76033:96161:2,76037:96165:1,76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76061:96190:1,76064:136526:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:96203:1,76075:96204:1,76076:96205:1,76078:96207:1,76079:96208:2,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76091:96220:1,76092:96221:1,76093:96222:1,76096:96225:1,76098:96228:1,76101:96231:1,76103:96233:1,76106:96236:1,76108:96238:1,76109:96239:1,76114:96244:1,76115:96245:1,76116:96246:1,76117:96247:1,76118:96248:1,76121:96252:1,76122:96253:2,76123:96254:1,95032:117629:1,95034:117631:1,95035:123420:1,95036:117633:1,95043:117640:1,95049:117646:1,95057:117654:1,95058:117655:1,95061:117658:1,95062:117659:1,95066:117663:1,95068:117665:1,99821:123324:1,101929:125874:1,101930:125875:1,101931:125876:1,101933:125878:1,102007:126015:1,102008:126016:1,102009:126017:1,106790:131618:1,106791:131619:1,109258:133362:1,109733:135991:1,109734:135992:1,109735:135993:1,110029:136523:1,110030:136524:1,110031:136525:1,110400:136968:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (6, 252, 1, 'method.gg Unholy Death Knight (Riders Single Target)', '76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76058:96187:1,76061:96190:1,76064:136526:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:133518:1,76076:96205:1,76078:96207:1,76079:96208:2,76080:96209:1,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76148:96282:1,76149:96283:2,76150:96284:2,76156:96290:1,76160:96294:1,76162:96296:1,76176:133514:1,76178:96313:1,76179:96314:1,76182:96318:1,76184:96321:1,76185:96322:1,76186:133365:1,76187:96324:1,76189:96326:1,76190:96327:1,76191:96328:1,76193:96330:1,76196:96333:1,76197:96334:1,95037:123410:1,95041:117638:1,95042:117639:1,95044:117641:1,95047:117644:1,95051:117648:1,95054:117651:1,95059:117656:1,95060:123412:1,95063:117660:1,95066:117663:1,95067:117664:1,99820:123322:1,102007:126015:1,102008:126016:1,108126:133515:1,108129:133522:1,108130:125816:1,108131:133523:1,108151:133546:1,109392:133517:1,109458:135676:1,109739:135997:1,109740:135998:1,109741:135999:1,110029:136523:1,110030:136524:1,110260:136797:1,110354:136920:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (7, 262, 1, 'simc/midnight MID1_Shaman_Elemental_Stormbringer', '80978:101844:1,80981:101850:1,80983:101853:1,80984:127924:1,80985:101855:1,80988:101859:1,80989:101860:1,80990:101861:1,80991:101862:1,80992:101864:1,80993:101865:1,80995:101867:1,80996:101869:1,80997:101870:1,80998:101871:1,80999:136714:1,81000:101873:1,81002:101876:1,81008:101885:1,81012:101889:1,81015:101892:1,81016:101893:1,94858:123631:1,94860:117457:1,94861:117458:1,94862:123632:1,94863:128226:1,94867:117464:1,94868:117465:1,94869:117466:1,94870:117467:1,94873:128225:1,94875:117472:1,94880:117477:1,94883:117480:1,94884:123630:1,94885:117482:1,94886:117483:1,94887:117484:1,94888:117485:1,94889:117486:1,94892:117489:1,94893:117490:1,94894:117491:1,99845:123376:1,103579:127851:1,103581:127854:1,103582:127855:2,103583:127856:1,103584:127857:1,103585:127858:1,103586:127859:1,103588:127861:1,103591:127864:1,103593:127868:1,103596:127871:1,103598:127873:1,103602:127877:1,103605:127880:1,103606:127881:1,103607:127882:1,103608:127884:1,103611:127888:1,103612:127889:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103620:127899:1,103624:127905:1,103625:127906:1,103626:127908:1,103627:127909:1,103628:127910:1,103631:127913:1,103633:127915:1,103634:127916:1,103635:127917:1,103638:127919:1,103639:127920:1,103640:127921:1,109387:135591:1,109727:135985:1,109728:135986:1,109729:135987:1,109730:135988:1,109731:135989:1,109732:135990:1,110066:136561:1,110085:136585:1,110402:136974:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (7, 263, 1, 'simc/midnight MID1_Shaman_Enhancement_Totemic', '80938:101801:1,80939:101802:1,80941:101804:1,80942:101805:1,80943:101806:1,80945:101809:2,80947:101811:1,80948:101812:1,80949:101813:1,80950:101814:2,80951:101815:1,80953:101818:1,80954:101819:1,80958:101823:1,80959:101824:1,80960:101825:1,80961:101826:1,80962:101827:1,80963:101828:1,80964:101829:1,80967:101832:1,80968:101833:1,80969:101834:1,80973:101839:1,80974:101840:1,80975:101841:1,94859:117456:1,94866:125824:1,94871:117468:1,94872:117469:1,94874:117471:1,94877:117474:1,94879:117476:1,94881:125822:1,94882:117479:1,94890:117487:1,94891:117488:1,94892:117489:1,99847:123379:1,103581:127854:1,103582:127855:2,103583:127856:1,103585:127858:1,103586:127859:1,103588:127861:1,103591:127865:1,103593:127868:1,103594:127869:1,103596:127871:1,103602:127877:1,103605:127880:1,103606:127881:1,103607:127882:1,103608:127884:1,103611:127888:1,103612:127889:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103622:127902:1,103624:127905:1,103625:127906:1,103627:127909:1,103628:127910:1,103871:128270:1,109194:128236:1,109386:135590:1,109387:135591:1,109388:135592:1,109389:135593:1,109724:135982:1,109725:135983:1,109726:135984:1,110085:136585:1,110401:136971:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (7, 264, 1, 'method.gg Restoration Shaman (Totemic Downpour)', '80976:101842:1,81018:101895:1,81019:101896:1,81021:101899:1,81022:101900:1,81024:101902:1,81027:101905:1,81031:101911:1,81032:101912:1,81033:135485:1,81037:101919:1,81040:101923:1,81041:101924:1,81044:101928:1,81047:101932:1,81048:101934:1,81049:101935:1,81050:101936:1,81051:101937:1,81052:101939:2,81055:101942:1,81073:101964:1,92675:114811:1,92677:114813:1,94859:117456:1,94866:125824:1,94871:117468:1,94872:117469:1,94874:117471:1,94877:117474:1,94879:117476:1,94881:125822:1,94882:117479:1,94888:117485:1,94890:117487:1,94891:117488:1,99846:123378:1,103428:127672:1,103430:127674:1,103434:127680:1,103436:127682:1,103581:127853:1,103582:127855:2,103584:127857:1,103586:127859:1,103587:127860:1,103588:127861:1,103590:127863:1,103591:127864:1,103593:127868:1,103594:127869:1,103596:127871:1,103598:127873:1,103601:127876:1,103602:127877:1,103606:127881:1,103607:127883:1,103611:127888:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103620:127899:1,103622:127902:1,103625:127906:1,103626:127908:1,103627:127909:1,104124:128703:1,109301:135487:1,109386:135590:1,109387:135591:1,109388:135592:1,109724:135982:1,109725:135983:1,109726:135984:1,110085:136585:1,110403:136977:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (8, 62, 1, 'simc/midnight MID1_Mage_Arcane_Spellslinger', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62112:80170:2,62114:80173:2,62115:80174:1,62116:80175:1,62121:80180:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,93524:115877:1,94647:117250:1,94654:117257:1,94655:117258:1,94656:117259:1,94657:128267:1,94658:117261:1,94659:117262:1,94660:117263:1,94661:117264:1,94662:117265:1,94663:117266:1,94664:117267:1,99830:123344:1,101883:125818:1,102438:126508:1,102440:126510:1,102441:126511:1,102445:126515:1,102446:126516:1,102449:126519:1,102453:126523:1,102454:136465:1,102460:126530:1,102465:134020:1,102467:126537:1,102468:126538:1,102469:126539:1,102470:126540:1,102471:126541:1,102473:126543:1,102474:126544:1,102475:126545:1,102480:126550:2,104113:128689:1,108536:134024:1,108537:134026:2,108538:134027:1,108539:134028:1,108551:134047:1,108654:134183:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108664:134194:1,108665:134196:1,109002:134834:1,109667:135918:1,109668:135919:1,109669:135920:1,110080:136578:1,110081:136579:1,110420:137028:1,110442:137084:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (8, 63, 1, 'simc/midnight MID1_Mage_Fire_Sunfury', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62112:80170:2,62114:80173:2,62115:80174:1,62119:80178:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,93524:115877:1,94643:117246:1,94644:117247:1,94645:117248:1,94646:117249:1,94647:117250:1,94648:117251:1,94649:117252:1,94650:117253:1,94651:117254:1,94652:117255:1,94653:117256:1,99829:123340:1,100989:124750:1,100995:124756:1,100998:124759:1,100999:124760:1,101007:135618:1,101009:124771:1,101019:124783:2,101024:124789:1,101027:124793:1,101029:124795:2,108654:134182:1,108656:134186:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108662:134192:2,109393:135600:1,109395:135603:1,109396:135604:1,109398:135606:1,109399:135607:1,109401:135609:1,109402:135610:1,109403:135612:1,109404:135613:2,109407:135616:1,109408:135617:1,109409:135602:1,109411:135621:1,109673:135924:1,109674:135925:1,109675:135926:1,109956:136441:1,110080:136578:1,110081:136579:1,110086:136587:1,110088:136589:1,110321:136878:1,110322:136879:1,110423:137037:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (8, 64, 1, 'simc/midnight MID1_Mage_Frost_Spellslinger', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62107:80165:1,62112:80170:2,62114:80173:2,62115:80174:1,62116:80175:1,62117:80176:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,62129:80189:1,62150:134540:1,62153:80216:1,62157:80220:1,62164:80227:1,62170:80234:1,62173:80237:1,62176:80241:1,62177:80242:1,62178:80243:1,62179:80244:1,62180:80245:1,62181:80247:1,62182:80248:1,62184:80250:1,81468:102429:1,93524:115877:1,94654:117257:1,94655:117258:1,94656:117259:1,94657:128267:1,94658:117261:1,94659:117262:1,94660:117263:1,94661:117264:1,94662:117265:1,94663:117266:1,94664:117267:1,99828:123339:1,103771:134418:1,108653:134180:1,108654:134183:1,108655:134185:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108849:134405:1,108850:134406:1,108851:134407:1,108852:134408:1,108855:134411:1,108858:134414:2,108859:134415:1,108864:134421:1,109667:135918:1,109668:135919:1,109669:135920:1,109915:136182:1,109916:136183:1,109956:136441:1,110081:136579:1,110258:136796:1,110283:136837:1,110422:137034:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (9, 265, 1, 'simc/midnight MID1_Warlock_Affliction_Soul_Harvester', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91446:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71954:91465:1,71955:91466:1,71956:91468:1,71957:91469:1,72032:91552:1,72033:91553:1,72034:91554:1,72037:91558:1,72041:91562:1,72045:124692:1,72047:91568:1,72049:91570:1,72050:91571:1,72051:91572:1,72054:91576:1,72055:91577:2,72058:91580:2,94821:117418:1,94823:117420:1,94824:117421:1,94825:117422:1,94832:117429:1,94838:117435:1,94840:117437:1,94846:117443:1,94847:117444:1,94850:123840:1,94851:117448:1,94857:117454:1,99850:123384:1,100941:124694:1,102031:126064:1,102247:126303:1,109837:136096:1,109838:136097:1,109839:136098:1,109842:136102:2,109843:136103:1,109844:136104:1,109845:136105:1,109847:136107:1,109849:136109:1,109852:136112:1,109855:136115:1,109857:136117:1,109859:136119:1,109860:136120:1,109861:136121:1,109862:136122:1,109863:136123:1,109865:136125:2,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110269:136812:1,110270:136813:1,110405:136983:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (9, 266, 1, 'simc/midnight MID1_Warlock_Demonology_Soul_Harvester', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91445:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71955:91466:1,71956:91468:1,71957:91469:1,94821:117418:1,94823:123839:1,94824:117421:1,94825:117422:1,94832:117429:1,94838:117435:1,94846:117443:1,94847:117444:1,94850:123840:1,94851:117448:1,94855:117452:1,94857:117454:1,99849:123383:1,100941:124694:1,101887:125829:2,101891:125834:1,101893:136731:1,101894:125837:1,101895:125839:1,101903:125848:2,101905:125850:1,101908:125854:1,101909:125855:1,101914:125860:2,101920:125866:1,101923:125869:1,109244:135306:1,109248:135310:1,109249:135311:2,109250:135312:1,109251:135313:1,109252:135314:1,109253:135315:1,109257:135319:1,109837:136096:1,109838:136097:1,109839:136098:1,109840:136100:1,109842:136102:2,109843:136103:1,109845:136105:1,109846:136106:1,109847:136107:1,109934:136227:1,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110191:136719:1,110193:136721:1,110194:136722:1,110197:136726:1,110198:136727:1,110404:136980:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (9, 267, 1, 'simc/midnight MID1_Warlock_Destruction_Hellcaller', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91445:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71954:91465:1,71955:91466:1,71956:91468:1,71957:91469:1,71960:91473:1,71965:91478:1,71968:91481:1,71969:91482:2,71971:91484:1,71973:91486:1,71975:91489:1,71980:91496:1,71983:91500:2,71985:91502:1,72059:91581:1,72060:91582:1,72061:91583:1,72062:91584:1,72065:91588:1,72066:91589:2,72067:91590:1,72068:91591:1,72069:91592:1,94822:117419:1,94829:117426:1,94834:117431:1,94835:117432:1,94837:117434:1,94840:117437:1,94842:117439:1,94844:117441:1,94845:117442:1,94853:117450:1,94854:123310:1,94855:117452:1,99848:123382:1,100941:124694:1,101992:126002:1,101994:126004:1,108678:134219:1,108681:134221:1,109834:136093:1,109835:136094:1,109836:136095:1,109841:136101:1,109842:136102:2,109843:136103:1,109845:136105:1,109847:136107:1,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110280:136833:1,110281:136834:2,110282:136835:1,110406:136986:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (10, 268, 1, 'simc/midnight MID1_Monk_Brewmaster', '101064:124838:1,101065:136148:1,101067:136146:1,101069:124843:1,101071:124845:1,101072:124846:1,101074:124848:2,101075:124849:1,101076:124850:1,101078:124852:1,101079:124854:1,101080:124855:1,101082:124857:1,101086:124863:1,101087:124864:1,101088:124865:1,101135:124924:1,101136:124926:1,101140:124930:1,101142:124932:1,101145:124935:1,101146:124936:1,101147:124937:1,101152:124943:1,101153:124944:1,101156:124948:1,101160:124954:1,101161:124955:1,101163:124957:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101177:124974:1,101178:124975:1,101179:124976:2,101181:124979:1,101182:124980:1,101183:124982:1,101184:124983:2,101187:124987:1,101188:124988:1,101190:124991:1,101193:124996:1,101195:124999:1,101197:125001:1,101198:125003:1,101201:125006:1,101202:125008:1,101219:125028:1,101220:125029:1,101221:125031:1,101222:125032:1,101223:125033:1,101224:125035:1,101225:125036:1,101226:125037:1,101227:125039:1,101228:125040:1,101229:125042:1,101230:125043:1,101248:125069:1,101711:125002:1,102004:124859:1,102433:126501:1,109694:135952:1,109695:135953:1,109696:135954:1,109826:136085:1,109827:136086:1,109882:136145:1,109910:136177:1,110435:137075:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (10, 269, 1, 'simc/midnight MID1_Monk_Windwalker', '101035:124805:2,101036:124806:1,101037:124807:1,101039:124810:1,101044:126026:1,101045:124817:1,101048:124820:1,101051:124823:1,101052:124825:1,101053:124826:1,101054:124827:1,101055:124828:1,101056:124829:1,101057:124830:1,101059:124833:1,101060:124834:1,101136:124926:1,101137:124927:1,101140:124930:1,101142:124932:1,101146:124936:1,101147:124937:1,101149:124939:1,101150:124941:1,101153:124944:1,101159:124953:1,101160:124954:1,101162:124956:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101178:124975:1,101179:124976:2,101182:124980:1,101183:124982:1,101184:124983:2,101185:124984:1,101186:124985:1,101203:125009:1,101205:125012:1,101206:125013:1,101207:134452:1,101208:125015:1,101209:125016:1,101210:125017:1,101213:125020:1,101215:125022:1,101216:125023:1,101217:125025:1,101218:125026:1,101232:125046:1,101243:125062:1,101244:125063:1,101245:125065:1,101246:125066:1,101247:125068:1,101248:125069:1,101249:125070:1,101250:125071:1,101251:125072:1,101252:125073:1,101253:125074:1,101254:125076:1,108946:134543:1,109697:135955:1,109698:135956:1,109699:135957:1,110022:136514:1,110023:136515:1,110025:136518:1,110098:136599:1,110436:137076:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (10, 270, 1, 'method.gg Mistweaver Monk (Conduit of the Celestials)', '101089:124866:1,101093:124871:1,101095:124873:1,101096:124875:1,101097:124876:1,101102:128221:1,101104:124885:1,101107:124888:1,101108:124889:1,101110:124891:1,101111:124892:2,101112:124893:1,101113:124894:1,101114:124896:2,101115:124897:1,101117:124899:1,101121:124905:1,101122:124906:1,101123:124907:1,101124:124908:2,101127:125932:1,101128:124913:1,101129:124915:1,101130:124916:1,101131:124918:1,101132:124920:1,101133:124921:1,101134:124922:1,101136:124926:1,101139:124929:1,101140:124930:1,101142:124932:1,101143:124933:1,101144:124934:1,101146:124936:1,101147:124937:1,101153:124944:1,101157:124949:1,101161:124955:1,101164:124958:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101179:124976:2,101183:124982:1,101185:124984:1,101186:124985:1,101223:125033:1,101231:125045:1,101233:125049:1,101234:125050:1,101235:125052:1,101236:125054:1,101237:125055:1,101238:125056:1,101239:125058:1,101240:125059:1,101242:125061:1,102432:126500:1,109516:135749:1,109700:135958:1,109701:135959:1,110019:136510:1,110021:136512:1,110024:136517:1,110026:136519:1,110027:136520:1,110067:136562:1,110097:136598:1,110211:136747:1,110218:136754:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (11, 102, 1, 'simc/midnight MID1_Druid_Balance', '82198:103276:1,82201:103279:1,82202:103280:1,82206:103284:1,82207:128589:1,82208:103286:1,82209:103287:1,82210:103288:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82228:103306:1,82229:103307:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82237:103316:1,82241:103320:1,82246:103326:1,88201:109833:1,88202:109834:1,88203:109835:1,88204:109836:1,88206:109839:1,88207:109840:2,88208:109842:1,88212:109846:1,88213:109847:1,88214:109848:2,88215:109849:1,88218:109852:1,88221:109856:1,88222:109857:1,88223:109858:1,88224:109859:1,88225:109861:1,88226:109862:1,88227:109863:2,88231:109867:1,88234:109870:1,88235:109871:1,88236:109872:1,91048:115458:1,92229:114300:1,93714:116102:1,94585:117772:1,94586:117178:1,94587:117179:1,94588:117181:1,94590:117183:1,94594:117769:1,94596:117190:1,94597:123304:1,94598:117193:1,94600:117195:1,94607:117204:1,94608:117205:1,99808:123302:1,100174:123793:1,100175:123794:1,100176:123795:1,100177:123796:2,100223:123868:1,103846:128230:1,103847:128231:1,104078:128579:1,104080:128584:1,104083:128588:1,104085:128591:1,108032:133404:1,109718:135976:1,109719:135977:1,109720:135978:1,110421:137031:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (11, 103, 1, 'simc/midnight MID1_Druid_Feral_Wildstalker', '82088:103147:1,82091:103150:1,82092:103152:1,82096:103157:1,82098:103159:1,82099:103160:1,82100:103161:1,82101:103162:1,82102:103163:1,82103:103164:1,82104:103165:1,82106:103167:1,82107:103168:1,82108:103170:1,82110:103173:1,82111:103174:1,82112:103175:1,82113:103176:1,82114:103177:1,82115:103179:2,82116:103180:1,82118:103182:1,82119:103183:1,82121:103185:2,82122:103186:1,82123:103187:1,82124:103188:1,82198:103276:1,82199:103277:1,82206:103284:1,82207:128589:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82222:103300:1,82223:103301:1,82224:103302:1,82225:103303:2,82228:103306:1,82229:103307:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82239:103318:1,82241:103320:1,82242:103322:1,82243:103323:2,82244:103324:1,82246:103326:1,92641:114771:1,94609:117206:1,94621:117221:1,94622:119855:1,94623:117223:1,94624:117224:1,94625:117225:1,94626:117226:1,94627:117227:1,94628:117229:1,94629:117231:1,94630:117232:1,94631:117234:1,99805:123296:1,100175:123794:1,100176:123795:1,100177:123796:2,104078:128580:1,104080:128584:1,104081:128585:1,104085:128591:1,109715:135973:1,109716:135974:1,109717:135975:1,110426:137046:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (11, 104, 1, 'simc/midnight MID1_Druid_Guardian', '82126:103190:1,82127:103191:1,82129:103193:1,82131:103195:1,82135:103199:1,82136:103201:1,82138:103203:2,82140:103206:1,82142:103209:1,82143:103210:2,82145:103212:1,82146:103213:2,82147:135336:1,82149:103216:1,82152:103221:1,82153:103222:1,82160:103229:1,82161:103230:1,82198:103276:1,82199:103277:1,82206:103284:1,82208:103286:1,82209:103287:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82223:103301:1,82224:103302:1,82225:103303:2,82227:103305:1,82228:103306:1,82229:103307:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82237:103316:1,82239:103318:1,82241:103320:1,82242:103322:1,82243:103323:1,82246:103326:1,91044:112967:1,91046:112969:1,92226:103208:1,92227:103218:1,92585:114698:1,92586:114699:1,92587:114700:1,94608:117205:1,94609:117206:1,94610:117207:1,94611:117208:1,94612:117210:1,94613:117211:1,94614:117214:1,94615:117215:1,94616:117216:1,94618:117218:1,94619:117219:1,94620:117220:1,99807:123301:1,100175:123794:1,100176:123795:1,104078:128580:1,104080:128584:1,104081:128585:1,104085:128591:1,109375:135568:1,109377:135491:1,109378:135570:1,109379:135490:1,109721:135979:1,109722:135980:1,109723:136624:1,110431:137061:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (11, 105, 1, 'method.gg Restoration Druid (Wildstalker)', '82043:117104:1,82045:103096:1,82047:103098:1,82049:103100:1,82050:103101:1,82051:103102:1,82052:103105:1,82053:103106:1,82054:103108:1,82055:103109:1,82057:103111:1,82058:103112:1,82059:103113:1,82060:103114:1,82063:103118:1,82064:103119:1,82065:103121:1,82068:103124:1,82071:103127:1,82072:103128:1,82073:103129:1,82074:114809:1,82076:103132:1,82079:103137:1,82082:103141:1,82083:103142:1,82198:103275:1,82205:103283:1,82206:103284:1,82207:128589:1,82209:103287:1,82210:103288:1,82214:103292:2,82217:103295:1,82218:103296:1,82219:103297:1,82220:103298:1,82225:103303:2,82228:103306:1,82229:103307:1,82230:103308:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82240:103319:1,82243:103323:2,82244:103324:1,94600:117195:1,94621:117221:1,94622:119855:1,94623:117223:1,94624:117224:1,94625:117225:1,94626:117226:1,94627:117227:1,94628:117229:1,94629:117231:1,94630:117232:1,94631:117233:1,99806:123298:1,100173:123792:1,100175:123794:1,100176:123795:1,100177:123796:2,100223:123868:1,103873:128274:1,103874:128708:1,103876:128277:1,104082:128586:1,104084:128590:1,104085:128591:1,104125:128707:1,109715:135973:1,109716:135974:1,109717:135975:1,110424:137040:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (12, 577, 1, 'simc/midnight MID1_Demon_Hunter_Havoc_Fel-Scarred', '90914:112823:1,90919:112828:1,90921:112830:1,90922:112831:1,90923:112832:1,90925:112834:1,90928:112838:1,90929:112839:1,90931:112841:1,90933:112844:1,90934:112845:1,90935:112846:2,90936:112847:2,90937:112848:1,90938:112849:1,90941:112852:1,90942:112853:1,90946:112859:1,90948:112861:1,90949:112862:2,90950:112863:1,90993:112911:1,90994:117768:1,90997:117755:1,91000:112918:2,91001:112919:1,91002:112921:1,91003:112923:1,91004:112924:2,91006:112926:1,91007:112927:1,91008:112928:1,91011:112932:1,91012:117764:1,91013:112934:1,91015:112936:2,91017:112938:1,91018:112939:1,91021:117744:1,91022:112944:1,91024:117765:1,91025:112948:1,91026:112949:1,91027:112950:1,91028:112951:1,91032:112955:1,91034:112957:2,91036:112959:1,93013:115244:1,93015:115246:1,93016:115248:1,94899:124010:1,94901:117498:1,94902:117499:1,94904:117501:1,94905:117502:1,94909:117506:1,94912:117509:1,94913:124011:1,94915:117512:1,94916:117513:1,94917:117514:1,94918:117515:1,95143:117741:1,95147:117754:2,95149:117758:1,95150:117759:1,95152:117762:1,99824:123329:1,109772:136030:1,109773:136031:1,109774:136032:1,110011:136501:1,110427:137049:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (12, 581, 1, 'simc/midnight MID1_Demon_Hunter_Vengeance_Annihilator', '90929:112839:1,90931:112841:1,90933:112844:1,90934:112845:1,90935:112846:2,90936:112847:2,90938:112849:1,90941:112852:1,90942:112853:1,90946:112859:1,90948:112861:1,90949:112862:2,90950:112863:1,90951:112864:1,90952:112865:1,90953:112866:1,90955:112868:1,90958:112872:2,90959:112873:1,90960:112875:1,90961:112876:1,90962:112877:2,90963:112878:1,90964:112879:1,90968:112883:1,90970:112886:1,90971:112887:1,90972:112888:1,90974:112890:1,90975:112891:1,90977:112893:1,90978:112894:1,90980:112896:1,90981:112897:2,90984:112900:1,90986:112902:1,90987:112903:1,90989:112906:1,90990:112907:1,90991:112908:1,90994:112912:1,90996:112914:2,90999:112917:1,91000:112918:2,91001:112920:1,91002:112921:1,91004:112924:2,91006:112926:1,91007:112927:1,95149:117758:1,95150:117759:1,95151:117761:1,95152:117762:1,99823:134253:1,108722:134271:1,108729:134282:1,109442:135660:1,109443:135661:1,109444:135662:1,109445:135663:1,109446:135664:1,109447:135665:1,109448:135659:1,109449:135667:1,109450:136810:1,109451:135669:1,109452:135670:1,109453:135671:1,109454:135672:1,109455:135673:1,110011:136501:1,110425:137043:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (13, 1467, 1, 'simc/midnight MID1_Evoker_Devastation_SC', '93272:115578:1,93273:115579:1,93274:115580:2,93275:115581:1,93280:115587:1,93281:115588:2,93284:115592:1,93285:115593:1,93289:115597:1,93294:115602:1,93295:115603:2,93297:115606:1,93298:115607:1,93300:115609:1,93302:115611:2,93304:115613:1,93305:115614:1,93306:115615:1,93309:115618:1,93310:115619:2,93311:115620:1,93312:115621:1,93313:115623:1,93314:115624:1,93316:115627:1,93318:115630:1,93319:115631:1,93320:115632:1,93322:115634:1,93323:115635:1,93324:115636:1,93325:115637:1,93326:115638:1,93327:115639:1,93328:115640:1,93329:115641:1,93330:115642:1,93331:115643:1,93332:115645:1,93333:115646:1,93334:115647:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93346:115661:1,93348:115663:1,93349:115664:2,93350:115665:1,93351:115666:1,93352:115667:1,93353:115668:1,93354:115669:1,93355:115670:2,93366:115683:1,93715:116103:1,94921:117518:1,94928:117525:1,94933:117530:1,94934:117531:1,94936:117533:1,94939:117536:1,94941:117538:1,94943:120123:1,94944:117541:1,94950:117547:1,94952:117549:1,94953:117550:1,98931:122279:1,99827:123333:1,103843:128216:1,103844:128217:1,109793:136051:1,109794:136052:1,109795:136053:1,110064:136559:1,110414:137010:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (13, 1468, 1, 'method.gg Preservation Evoker (Chronowarden Raid)', '93238:115540:1,93239:115541:1,93240:115542:1,93241:115543:1,93242:115544:1,93243:115546:1,93245:115549:1,93246:115550:1,93250:115554:1,93253:115557:1,93254:115558:2,93255:115559:1,93257:115561:1,93258:115562:1,93260:115565:1,93262:115567:1,93263:115568:2,93264:115570:1,93265:115571:1,93266:115572:1,93267:115573:1,93268:115574:2,93269:115575:1,93271:115577:1,93288:115596:1,93289:115597:1,93291:115599:1,93292:115600:2,93294:115602:1,93299:115608:1,93300:115609:1,93302:115611:2,93304:115613:1,93306:115615:1,93308:115617:1,93309:115618:1,93310:115619:2,93311:115620:1,93336:115650:1,93337:115651:1,93338:115652:1,93339:115653:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93346:115661:1,93347:115662:2,93348:115663:1,93350:115665:1,93351:125610:1,93352:115667:1,93353:115668:1,93354:115669:1,93355:115670:2,93715:116103:1,94925:117522:1,94929:117526:1,94930:126310:1,94932:117786:1,94935:117532:1,94942:117539:1,94947:117544:1,94948:117545:1,94950:117547:1,94951:117548:1,94954:117551:1,94955:117552:1,99826:123335:1,103843:128216:1,109508:135741:1,109509:135742:1,109510:135743:1,110064:136559:1,110413:137007:1', 'https://www.method.gg/guides');
|
||||||
|
REPLACE INTO playerbot_v2_talent_build (class_id, spec_id, context, label, entries_json, source_url) VALUES (13, 1473, 1, 'method.gg Augmentation Evoker (Chronowarden ST+Cleave)', '93195:115493:1,93197:115495:1,93198:115496:1,93199:115690:1,93200:115498:1,93201:115499:1,93202:115500:1,93203:115502:1,93205:115504:1,93206:115505:1,93207:115506:1,93208:115507:1,93209:115508:1,93211:115511:1,93212:115512:1,93219:115519:1,93220:115520:1,93221:115521:1,93222:115522:1,93223:115523:1,93226:115527:1,93229:115530:1,93232:115533:1,93234:115536:1,93271:115577:1,93287:115595:1,93288:115596:1,93289:115597:1,93290:115598:1,93295:115603:2,93300:115609:1,93302:115611:2,93304:115613:1,93305:115614:1,93306:115615:1,93308:115617:1,93309:115618:1,93310:115619:2,93311:115620:1,93312:115621:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93345:115660:1,93346:115661:1,93348:115663:1,93349:115664:2,93350:115665:1,93351:115666:1,93352:115667:1,93354:115669:1,93355:115670:2,93358:115675:1,93367:115685:1,93368:115688:1,93369:115686:1,93715:116103:1,94925:117522:1,94929:117526:1,94930:126310:1,94932:117529:1,94935:117532:1,94942:117539:1,94947:117544:1,94948:117545:1,94951:117548:1,94954:117551:1,94955:117552:1,98931:122279:1,99825:123334:1,102248:126304:1,102249:126305:1,103843:128216:1,109508:135741:1,109509:135742:1,109510:135743:1,110415:137013:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (4, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
-- Migration: 0005_population_columns
|
||||||
|
-- Date: 2026-05-07
|
||||||
|
-- Purpose: Schema additions for the world-population subsystem
|
||||||
|
-- (BotPopulationManager + BotSetupPipeline). Tracks the
|
||||||
|
-- one-shot distribution levelup, idempotent setup-pipeline
|
||||||
|
-- progress, JIT queue-fill provenance, and LRU timestamps.
|
||||||
|
-- Reverts: yes (DROP COLUMN per added column).
|
||||||
|
|
||||||
|
ALTER TABLE playerbot_v2_character
|
||||||
|
ADD COLUMN distribution_level TINYINT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER owner_verbose,
|
||||||
|
ADD COLUMN distribution_at TIMESTAMP NULL DEFAULT NULL
|
||||||
|
AFTER distribution_level,
|
||||||
|
ADD COLUMN setup_pipeline_state TINYINT UNSIGNED NOT NULL DEFAULT 0
|
||||||
|
AFTER distribution_at,
|
||||||
|
ADD COLUMN jit_for_queue VARCHAR(48) NULL DEFAULT NULL
|
||||||
|
AFTER setup_pipeline_state,
|
||||||
|
ADD COLUMN last_seen_at TIMESTAMP NULL DEFAULT NULL
|
||||||
|
AFTER jit_for_queue,
|
||||||
|
ADD KEY idx_distribution_level (distribution_level),
|
||||||
|
ADD KEY idx_jit_for_queue (jit_for_queue),
|
||||||
|
ADD KEY idx_last_seen_at (last_seen_at);
|
||||||
|
|
||||||
|
-- Column docs (kept here below the ALTER so the migration body stays a
|
||||||
|
-- single statement free of comment-embedded semicolons that the migration
|
||||||
|
-- parser used to choke on):
|
||||||
|
-- distribution_level Floor level the BotPopulationManager set this
|
||||||
|
-- bot to. 0 = never distributed. The shaper
|
||||||
|
-- refuses to lower a bot's level (see
|
||||||
|
-- project_v2_world_population.md A5). Gameplay
|
||||||
|
-- leveling beyond this floor proceeds normally.
|
||||||
|
-- distribution_at When the distribution levelup happened.
|
||||||
|
-- Used by hygiene + diagnostics; NULL until set.
|
||||||
|
-- setup_pipeline_state Bitmask of completed BotSetupPipeline steps.
|
||||||
|
-- bit 0 = SetLevel, 1 = StarterKit,
|
||||||
|
-- 2 = GenerateGear, 3 = AutoEquip,
|
||||||
|
-- 4 = ApplyTalents, 5 = LearnProfessions,
|
||||||
|
-- 6 = AcquireMount, 7 = PlaceInCapital,
|
||||||
|
-- 8 (high bits in 0xFF marker) = TravelToZone +
|
||||||
|
-- Mark complete. 0xFF = pipeline complete.
|
||||||
|
-- jit_for_queue Tag set when the bot was JIT-spawned to fill
|
||||||
|
-- a player's queue (e.g. "BG_AB", "LFG_5man").
|
||||||
|
-- Used by hygiene cleanup to delete bots that
|
||||||
|
-- were created solely for queue-fill and have
|
||||||
|
-- outlived their retention window. NULL = bot
|
||||||
|
-- is part of the regular distribution pool.
|
||||||
|
-- last_seen_at UTC timestamp of last login or significant
|
||||||
|
-- AI tick. Drives LRU log-out when the
|
||||||
|
-- population exceeds target.
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (5, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
-- Migration: 0006_bot_guild_meta
|
||||||
|
-- Date: 2026-05-16
|
||||||
|
-- Purpose: Schema for the bot guild ecosystem (see
|
||||||
|
-- src/modules/PlayerbotV2/docs/GUILD_PLAN.md).
|
||||||
|
-- - bot_guild_meta: maps TC's `guild.guildid` to BotGuildMgr
|
||||||
|
-- metadata (faction, theme, founder, rival, member cap).
|
||||||
|
-- Distinguishes bot-founded guilds from operator/player
|
||||||
|
-- guilds so the manager never modifies guilds it didn't
|
||||||
|
-- create.
|
||||||
|
-- - bot_guild_name_reserved: in-flight name reservations
|
||||||
|
-- while a charter FSM is collecting signatures. Prevents
|
||||||
|
-- two parallel founders from picking the same name.
|
||||||
|
-- Reverts: yes (DROP TABLE both).
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS bot_guild_meta (
|
||||||
|
guild_id BIGINT UNSIGNED NOT NULL,
|
||||||
|
faction TINYINT UNSIGNED NOT NULL,
|
||||||
|
theme VARCHAR(32) NOT NULL DEFAULT 'adventurers',
|
||||||
|
founder_low BIGINT UNSIGNED NOT NULL,
|
||||||
|
rival_low BIGINT UNSIGNED DEFAULT NULL,
|
||||||
|
member_cap SMALLINT UNSIGNED NOT NULL DEFAULT 75,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_event_at TIMESTAMP NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (guild_id),
|
||||||
|
KEY idx_bot_guild_meta_faction (faction),
|
||||||
|
KEY idx_bot_guild_meta_founder (founder_low)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Column docs:
|
||||||
|
-- guild_id FK to guild.guildid (CharacterDatabase). Not a real
|
||||||
|
-- FK constraint because TC's guild table doesn't carry
|
||||||
|
-- one for player rosters and we mirror the convention.
|
||||||
|
-- faction 0 = Alliance, 1 = Horde. Matches
|
||||||
|
-- BotGuildMgr::Faction enum.
|
||||||
|
-- theme 'adventurers' for the default Phase A.2 guild kind;
|
||||||
|
-- 'crafters' / 'raiders' for Phase E themed guilds.
|
||||||
|
-- founder_low Character guid_low of the bot that founded the
|
||||||
|
-- guild. NOT necessarily the current GM (GM rotates
|
||||||
|
-- via Phase B hygiene). Used by recently-disbanded
|
||||||
|
-- cooldowns and ownership lineage.
|
||||||
|
-- rival_low Optional rival guild_id (intra-faction). Set at
|
||||||
|
-- creation (Phase A.2 picks the longest-active
|
||||||
|
-- existing bot guild of same faction; NULL if first).
|
||||||
|
-- Phase E rivalries read this.
|
||||||
|
-- member_cap Per-guild membership ceiling. Defaults to 75 from
|
||||||
|
-- BotGuildMgr::kDefaultMaxMembersPerGuild but
|
||||||
|
-- configurable per guild for special cases.
|
||||||
|
-- created_at Insertion time = guild submission time.
|
||||||
|
-- last_event_at Last scheduled-event start (Phase D). NULL until
|
||||||
|
-- first event runs.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS bot_guild_name_reserved (
|
||||||
|
name VARCHAR(64) NOT NULL,
|
||||||
|
faction TINYINT UNSIGNED NOT NULL,
|
||||||
|
founder_low BIGINT UNSIGNED NOT NULL,
|
||||||
|
reserved_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (name),
|
||||||
|
KEY idx_bot_guild_name_reserved_founder (founder_low)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Column docs:
|
||||||
|
-- name The candidate guild name reserved by the charter
|
||||||
|
-- FSM at phase 2 (buy_charter). Released on success
|
||||||
|
-- (row deleted when bot_guild_meta row is INSERTed)
|
||||||
|
-- OR on FSM abort (founder lost the charter, exceeded
|
||||||
|
-- the 30-min total time-to-found budget, etc.).
|
||||||
|
-- faction Founder's faction (sanity check + queryability).
|
||||||
|
-- founder_low Owner of the reservation. Hygiene cron sweeps
|
||||||
|
-- reservations older than 60 min as orphans.
|
||||||
|
-- reserved_at For 60-min sweep cutoff.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS bot_guild_member_meta (
|
||||||
|
guild_id BIGINT UNSIGNED NOT NULL,
|
||||||
|
char_guid_low BIGINT UNSIGNED NOT NULL,
|
||||||
|
joined_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_promoted_at TIMESTAMP NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (guild_id, char_guid_low),
|
||||||
|
KEY idx_bot_gmm_char (char_guid_low),
|
||||||
|
KEY idx_bot_gmm_joined (joined_at)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Column docs:
|
||||||
|
-- guild_id FK to guild.guildid (CharacterDatabase).
|
||||||
|
-- char_guid_low Bot character guid_low (FK to characters.guid).
|
||||||
|
-- joined_at When the bot joined this guild — populated by the
|
||||||
|
-- manager whenever Guild::AddMember succeeds for a
|
||||||
|
-- bot (charter-signer turn-in, organic recruitment,
|
||||||
|
-- etc). Drives the rank ladder hygiene cron
|
||||||
|
-- (Initiate <7d, Member <30d, Veteran >30d).
|
||||||
|
-- last_promoted_at Last rank change; null until first promotion.
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (6, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
-- Migration: 0007_talent_builds_seed
|
||||||
|
-- Date: 2026-05-07
|
||||||
|
-- Purpose: Populate context=0 (Default) rows in playerbot_v2_talent_build
|
||||||
|
-- by mirroring the curated raid loadouts seeded in 0004.
|
||||||
|
-- The API loader (LookupCuratedBuildRow in PlayerbotAPI.cpp)
|
||||||
|
-- falls back from any requested context (M+/PvP/Leveling)
|
||||||
|
-- to context=0/Default when the requested row is missing.
|
||||||
|
-- Seeding Default for all 39 specs therefore guarantees that
|
||||||
|
-- every bot in every context receives a curated build instead
|
||||||
|
-- of the TraitMgr generic starter, regardless of role.
|
||||||
|
-- Coverage: 39/39 specs at context=0 (Default).
|
||||||
|
-- Per-context rows (Raid=1 already in 0004; M+=2, PvP=3,
|
||||||
|
-- Leveling=4) deferred until per-context simc/method profiles
|
||||||
|
-- are sourced.
|
||||||
|
-- Reverts: yes (DELETE rows; re-run the migration to repopulate).
|
||||||
|
-- Populated 39/195 rows
|
||||||
|
|
||||||
|
-- ===== Warrior =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(1, 71, 0, 'Default: simc/midnight MID1_Warrior_Arms', '90269:112121:1,90270:112122:1,90271:112123:1,90273:112125:1,90274:112126:1,90276:112128:1,90277:112129:1,90279:112131:1,90282:112134:1,90283:112135:2,90285:112137:1,90290:112144:1,90291:112145:1,90292:112146:1,90322:112179:2,90326:112183:1,90327:112184:1,90328:112185:1,90331:112188:1,90337:112198:1,90344:112206:1,90346:112208:1,90347:112209:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90438:112310:1,90439:112311:1,90441:112314:1,90444:112317:2,90445:112318:1,90447:112320:2,92537:114643:1,92614:114733:1,94784:117381:1,94786:117383:1,94787:117384:1,94788:117385:1,94795:117392:1,94801:117398:1,94809:117406:1,94810:117407:1,94813:117410:1,94814:117411:1,94818:117415:1,94820:117417:1,95956:118850:1,99853:123390:1,108543:134032:1,108544:134033:1,108676:134216:1,108686:134226:1,108705:136627:1,109391:135597:1,109680:135934:1,109684:135940:1,109685:135941:1,109687:135944:2,109815:136074:1,109816:136075:1,109817:136076:1,110118:136625:1,110119:136626:1,110176:136703:1,110407:136989:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(1, 72, 0, 'Default: simc/midnight MID1_Warrior_Fury', '90325:112182:1,90326:112183:1,90328:112185:1,90331:112188:1,90337:112198:1,90344:112206:1,90346:112208:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90373:112240:2,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90387:112255:1,90388:119139:1,90390:112259:1,90392:112261:1,90394:112263:1,90395:112264:1,90396:112265:1,90397:112266:2,90398:112267:1,90399:112268:1,90401:112270:1,90402:112271:1,90403:112272:1,90406:112275:1,90408:112277:1,90410:112279:1,90412:112281:1,90415:112284:1,90421:112292:2,90428:112299:2,90429:112300:1,90430:112301:1,92538:114644:1,94784:117381:1,94786:117383:1,94787:117384:1,94788:117385:1,94795:117392:1,94801:117398:1,94803:117400:1,94809:117406:1,94810:117407:1,94813:117410:1,94814:117411:1,94820:117417:1,95956:118850:1,99852:123389:1,108542:134031:1,108543:134032:1,108544:134033:1,108674:134213:1,108686:134226:1,108705:136627:1,109391:135597:1,109815:136074:1,109816:136075:1,109817:136076:1,109963:136448:1,109966:136451:1,109968:136453:1,109969:136454:1,110118:136625:1,110119:136626:1,110203:136735:1,110412:137004:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(1, 73, 0, 'Default: simc/midnight MID1_Warrior_Protection', '90261:112112:1,90264:132884:1,90265:112116:1,90295:112149:1,90296:112150:1,90297:112151:1,90298:112152:1,90301:112155:1,90302:112156:1,90303:112157:1,90304:112158:1,90305:112159:1,90306:112160:1,90308:112162:1,90309:112163:1,90310:112165:1,90311:112166:2,90312:132885:1,90314:112170:1,90317:112173:1,90318:112174:1,90319:112176:1,90320:112177:1,90324:112181:2,90326:112183:1,90328:112185:1,90329:112186:1,90330:112187:1,90331:112188:1,90343:112205:1,90346:112208:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90432:112304:1,90433:112305:1,90448:112321:1,90449:112323:1,90451:112325:1,94785:117382:1,94792:118834:1,94797:117394:1,94798:117395:1,94800:117397:1,94803:117400:1,94805:117402:1,94807:117404:1,94808:117405:1,94816:117413:1,94817:118835:1,95956:118850:1,95959:118853:1,99851:123388:1,107577:132882:1,107578:132883:1,108542:134031:1,108543:134032:1,108544:134033:1,108686:134226:1,108705:136627:1,109391:135597:1,109809:136068:1,109810:136069:1,109811:136070:1,110118:136625:1,110119:136626:1,110411:137001:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Paladin =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(2, 65, 0, 'Default: method.gg Holy Paladin (Herald of the Sun)', '81496:102465:1,81508:102477:1,81510:133481:1,81554:102533:1,81555:102534:1,81557:102536:1,81558:102537:1,81560:102539:1,81561:102540:1,81564:102544:1,81565:102545:1,81567:102548:1,81568:102549:1,81569:102550:1,81570:102551:1,81571:102552:1,81575:102558:1,81578:102562:1,81580:102564:1,81583:102567:2,81584:102569:1,81585:102570:1,81588:133501:1,81589:102574:1,81590:102575:1,81591:102577:1,81592:102578:1,81594:102580:1,81595:102581:1,81597:102583:1,81598:102584:1,81600:102587:1,81605:102592:1,81609:102597:1,81613:102601:1,81614:102602:1,81615:102603:1,81616:102604:1,81621:102612:2,81630:102622:2,81631:128251:1,81632:102625:1,92220:114292:1,93009:115034:2,93180:115465:1,93191:128246:1,93520:115872:1,93521:115873:1,93522:115874:1,93927:116376:1,95069:117666:1,95071:117668:1,95072:117669:1,95073:117778:1,95080:117677:1,95086:117683:1,95094:117691:1,95095:117692:1,95098:117777:1,95099:117696:1,95105:117702:1,99839:123362:1,103851:128241:2,103856:128309:1,103858:128254:2,103861:128257:1,103863:128259:1,103864:128260:1,103866:128262:1,109748:136006:1,109749:136007:1,109750:136008:1,109998:136486:1,109999:136487:1,110012:136503:1,110092:136593:1,110257:136795:1,110417:137019:1', 'https://www.method.gg/guides'),
|
||||||
|
(2, 66, 0, 'Default: simc/midnight MID1_Paladin_Protection', '81469:102431:1,81470:102432:1,81471:102433:2,81472:102435:1,81477:102440:1,81479:102443:1,81481:102445:1,81482:102446:2,81483:102448:1,81485:102450:2,81486:102452:1,81487:102453:1,81489:102455:1,81490:102456:1,81493:102461:1,81494:102463:1,81495:102464:1,81498:102467:1,81499:102468:1,81501:102470:1,81502:102471:1,81503:102472:1,81505:136732:1,81506:102475:1,81507:102476:1,81510:133481:1,81597:102583:1,81600:102587:1,81603:102590:1,81604:102591:1,81605:102592:1,81607:102595:1,81609:102597:1,81612:102600:1,81614:102602:1,81616:102604:1,81617:102606:1,81621:102612:2,81629:102621:1,81630:102622:2,81631:128251:1,81632:102625:1,90062:111886:1,93010:102623:1,93187:115479:1,93192:128244:1,93357:115673:1,95177:117810:1,95178:117811:1,95179:117812:1,95180:117813:1,95181:117858:1,95182:117815:1,95183:117816:1,95184:117818:1,95185:117819:1,95186:117822:1,95187:117823:1,95234:117882:1,99838:123358:1,101927:102451:1,103851:128241:2,103855:128250:1,103857:128253:1,103858:128254:2,103859:128255:1,103860:128256:1,103867:128263:1,103868:128264:1,103877:128278:1,109745:136003:1,109746:136004:1,109747:136005:1,109999:136487:1,110006:136496:1,110012:136503:1,110418:137022:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(2, 70, 0, 'Default: simc/midnight MID1_Paladin_Retribution', '81510:133481:1,81512:115475:1,81521:114828:1,81523:102493:1,81525:102497:1,81526:102498:1,81527:102499:1,81532:102504:1,81533:102505:1,81534:102506:1,81542:102516:1,81543:102518:1,81544:102519:1,81597:102583:1,81600:102587:1,81603:102590:1,81605:102592:1,81608:102596:1,81609:102597:1,81614:102602:1,81615:102603:1,81616:102604:1,81618:128243:1,81621:102612:2,81630:102622:2,81631:128251:1,81632:102625:1,92686:114824:1,92689:114830:1,92838:115022:1,92839:115024:1,92854:115043:1,92952:115165:2,93009:115034:2,93160:115439:2,93161:115440:1,93164:115443:2,93173:115453:1,93174:115454:1,93181:115467:1,93189:115481:1,93190:115483:2,93357:115673:1,95099:117696:1,95177:117810:1,95178:117811:1,95179:117812:1,95180:117813:1,95181:117858:1,95182:117815:1,95183:117816:1,95184:117818:1,95185:117819:1,95186:117822:1,95187:117823:1,99837:123357:1,103851:128241:2,103861:128257:1,103863:128259:1,103864:128260:1,103867:128263:1,103868:128264:1,109368:135564:1,109369:135565:1,109371:115438:1,109373:115435:1,109374:136809:1,109745:136003:1,109746:136004:1,109747:136005:1,109867:136127:1,109999:136487:1,110012:136503:1,110091:136592:1,110093:136594:1,110419:137025:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Hunter =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(3, 253, 0, 'Default: method.gg Beast Mastery Hunter (Pack Leader Single Target)', '94962:117559:1,94966:117563:1,94967:117564:1,94969:117566:1,94972:117569:1,94979:117576:1,94984:117581:1,94985:117582:1,94988:117585:1,94991:117588:1,94992:117589:1,99832:123347:1,102292:126352:1,102336:126397:2,102339:126400:1,102340:126402:1,102342:126404:1,102343:126405:1,102344:128265:1,102345:126407:2,102346:126408:1,102347:126409:1,102353:126415:1,102354:126416:1,102356:126418:1,102357:126419:1,102358:126420:1,102362:126424:1,102365:126427:1,102367:126430:2,102368:126431:1,102370:126433:1,102372:126435:1,102373:126436:1,102374:126437:1,102376:126439:1,102377:126440:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102397:126461:1,102401:126465:2,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,107285:132188:1,107286:132189:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109488:135711:1,109489:135712:1,109802:136060:1,109803:136061:1,109804:136236:1,109961:136446:1,110152:136670:1,110157:136677:1,110158:136679:1,110164:136685:1,110428:137052:1', 'https://www.method.gg/guides'),
|
||||||
|
(3, 254, 0, 'Default: method.gg Marksmanship Hunter (Sentinel Cleave)', '94958:117555:1,94965:117562:1,94970:117567:1,94971:117568:1,94973:117570:1,94976:117573:1,94978:117575:1,94980:117577:1,94981:117578:1,94989:117586:1,94990:117587:1,99831:123345:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102389:126452:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102401:126465:2,102402:126466:1,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,103947:128367:1,103956:128376:1,103957:128377:1,103958:132194:1,103961:128383:1,103962:128384:1,103964:128386:1,103966:128388:1,103973:128395:2,103974:128396:1,103975:128397:1,103977:128399:1,103978:128400:1,103979:128401:1,103982:128404:1,103984:128406:1,103985:128407:1,103986:128408:1,103990:128413:1,104095:128609:1,104127:128710:1,104130:128717:1,107288:132192:1,107289:132193:1,107290:132195:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109488:135711:1,109489:135712:1,109805:136063:1,109807:136065:1,109938:136232:1,109961:136446:1,110028:136521:1,110157:136677:1,110164:136685:1,110430:137058:1,110572:137375:1,110573:137376:1,110574:137377:1,110575:137378:1', 'https://www.method.gg/guides'),
|
||||||
|
(3, 255, 0, 'Default: method.gg Survival Hunter (Pack Leader Single Target)', '79837:100543:1,94962:117559:1,94966:117563:1,94967:117564:1,94969:117566:1,94972:117569:1,94976:117573:1,94979:123781:1,94984:117581:1,94985:117582:1,94988:117585:1,94991:117588:1,94992:117589:1,99833:123350:1,102255:126314:1,102262:126322:1,102263:126323:1,102264:126324:1,102268:126328:1,102270:126330:1,102272:126332:1,102279:126339:1,102282:126342:1,102285:126345:1,102380:126443:1,102381:126444:1,102384:126447:2,102387:126450:1,102389:126452:1,102390:126453:1,102391:126454:1,102395:126459:1,102396:126460:2,102401:126465:1,102404:126468:1,102406:126470:1,102409:126473:2,102411:126475:1,102416:126481:2,102419:126484:1,102422:126488:1,102423:126489:1,102424:126490:1,109305:135496:1,109307:135498:1,109309:135500:1,109310:135501:1,109311:135502:1,109312:135503:2,109313:135504:2,109316:135507:1,109319:135510:1,109320:135511:2,109321:135512:1,109323:135514:1,109324:135515:1,109470:135689:1,109483:135705:1,109485:135708:1,109486:135709:1,109487:135710:2,109489:135712:1,109802:136060:1,109803:136061:1,109804:136236:1,110154:136673:1,110155:136675:1,110156:136676:1,110157:136677:1,110159:136680:1,110161:136682:1,110162:136683:1,110164:136685:1,110429:137055:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- ===== Rogue =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(4, 259, 0, 'Default: simc/midnight MID1_Rogue_Assassination', '90624:112509:2,90625:112510:1,90626:112511:1,90628:112513:1,90633:112518:1,90634:134840:1,90635:112520:1,90636:112521:1,90640:112526:1,90684:112572:1,90686:112574:1,90687:112575:1,90692:117152:1,90695:112583:1,90697:112585:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90744:112634:1,90745:112635:1,90746:112636:1,90747:112638:1,90748:112639:1,90749:112640:2,90750:112642:1,90751:112643:2,90752:112644:1,90754:112646:1,90756:112648:1,90757:112649:1,90758:112650:1,90759:112651:2,90760:112652:1,90762:112654:1,90763:112655:1,90764:112657:1,90766:112659:2,90767:112660:1,90768:112661:1,90769:112662:1,90770:112663:1,90771:112664:1,90772:112665:2,90777:112670:1,90780:112673:1,90783:112676:1,90784:112677:1,90785:112678:2,90786:112679:1,94536:117106:1,94552:117130:1,94553:117131:1,94554:117133:1,94556:117137:1,94562:117145:1,95107:117704:1,95114:117711:1,95119:117716:1,95120:117717:1,95122:117719:1,95125:117722:1,95127:117724:1,95129:117726:1,95130:117727:1,95136:117733:1,95138:117735:1,95139:117736:1,99844:123371:1,101714:125615:1,109766:136024:1,109767:136025:1,109768:136026:1,110323:136881:1,110433:137067:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(4, 260, 0, 'Default: simc/midnight MID1_Rogue_Outlaw_Fatebound', '90636:112521:1,90638:112523:1,90639:112525:2,90640:112526:1,90643:112529:1,90645:112531:1,90648:112534:1,90649:112535:1,90652:112538:1,90653:112539:1,90654:112540:1,90655:135732:1,90656:112542:1,90659:112545:1,90661:112547:1,90662:112548:1,90663:112549:1,90664:112551:1,90665:112552:1,90666:112553:2,90668:112555:1,90670:112557:1,90671:112558:1,90676:112563:1,90677:112565:1,90678:112566:2,90679:112567:1,90680:112568:1,90681:112569:1,90683:112571:1,90684:112572:1,90686:112574:1,90687:112575:1,90692:117152:1,90695:112583:1,90697:112585:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90744:112634:1,90745:112635:1,90746:112636:1,90747:112638:1,90750:112642:1,90751:112643:2,90752:112644:1,90753:112645:1,90754:112646:1,90755:112647:1,90756:112648:1,90758:112650:1,90759:112651:2,90760:112652:1,90762:112654:1,90763:112656:1,90764:112657:1,94562:117145:1,95107:117704:1,95114:125139:1,95119:117716:1,95120:117717:1,95122:117719:1,95125:117722:1,95127:117724:1,95129:117726:1,95130:125140:1,95138:125132:1,95139:117736:1,95140:117737:1,99843:123374:1,101714:125615:1,109766:136024:1,109767:136025:1,109768:136026:1,110323:136881:1,110434:137070:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(4, 261, 0, 'Default: simc/midnight MID1_Rogue_Subtlety', '90636:112521:1,90638:112523:1,90639:112525:2,90640:112526:1,90684:112572:1,90686:112574:1,90687:112575:1,90690:112578:1,90692:112580:1,90695:112583:1,90697:112585:1,90700:112588:1,90701:136807:1,90703:117172:1,90704:112592:1,90706:112594:2,90709:112597:1,90710:112598:1,90713:112601:1,90716:112604:1,90720:112608:2,90721:112609:1,90722:112610:1,90723:112611:1,90724:112612:1,90726:112614:1,90727:112615:1,90730:112618:1,90732:112620:2,90733:112621:1,90734:112623:1,90737:112627:1,90738:112628:1,90739:112629:1,90740:112630:1,90741:117740:1,90742:114737:1,90743:112633:1,90745:112635:1,90746:112636:1,90748:112639:1,90749:112640:2,90750:112642:1,90751:112643:2,90752:112644:1,90754:112646:1,90758:112650:1,90760:112652:1,90762:112654:1,90763:112656:1,90764:112657:1,94562:117145:1,94580:117168:1,94582:117170:1,95106:117703:1,95108:117705:1,95109:117706:1,95110:117707:1,95117:117714:1,95123:117720:1,95131:117728:1,95132:117729:1,95135:117732:1,95136:117733:1,95140:117737:1,95142:117739:1,99842:123373:1,101714:125615:1,101715:125619:1,109760:136018:1,109761:136019:1,109762:136020:1,110323:136881:1,110324:136882:1,110325:136883:1,110432:137064:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Priest =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(5, 256, 0, 'Default: method.gg Discipline Priest (Oracle)', '82556:103834:1,82564:116182:1,82570:103695:1,82571:136829:1,82572:103697:2,82573:103698:1,82575:103700:1,82576:108226:1,82577:103702:1,82581:103706:1,82582:103708:1,82583:103709:2,82587:103713:1,82588:103714:1,82589:103717:1,82590:103718:1,82591:103719:1,82592:103721:1,82593:103722:1,82594:103723:1,82595:103724:1,82596:103725:1,82597:103726:1,82598:103727:1,82601:103731:1,82602:103732:1,82672:103818:1,82673:103819:1,82676:115884:1,82677:103823:1,82678:103825:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82696:103846:1,82697:103847:2,82702:103852:1,82703:103853:1,82711:103863:1,82712:103864:1,82713:103865:1,82715:103867:1,82716:103868:1,82717:103869:1,82718:103870:1,82719:103871:1,86730:103688:1,94673:117276:1,94674:117277:1,94675:117278:1,94679:117282:1,94683:117286:1,94687:117290:1,94689:117292:1,94690:117293:1,94691:117294:1,94698:117301:1,94700:117303:1,99801:123290:1,108731:134284:1,109006:103841:1,109010:134844:2,109011:134845:1,109012:134846:1,109015:134849:1,109020:134859:1,109021:134860:1,109781:136039:1,109782:136040:1,109783:136041:1,109890:136157:1,110008:136498:1,110277:136828:1,110278:136830:1,110410:136998:1', 'https://www.method.gg/guides'),
|
||||||
|
(5, 257, 0, 'Default: method.gg Holy Priest (Oracle)', '82554:103675:1,82556:103834:1,82606:103738:1,82608:103740:1,82610:103743:1,82611:103744:2,82612:103745:1,82613:128316:1,82614:103748:1,82615:103749:1,82616:103750:1,82617:103751:1,82618:103752:1,82620:103754:1,82621:103755:1,82622:103756:1,82623:103757:1,82627:103762:1,82630:103765:1,82631:103766:1,82632:103767:1,82633:103769:1,82636:103773:1,82637:103774:1,82638:103775:1,82641:103779:1,82642:103780:1,82672:103818:1,82673:103819:1,82676:115884:1,82677:103823:1,82678:103825:1,82682:103831:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82696:103846:1,82697:103847:2,82702:103852:1,82703:103853:1,82715:103867:1,82716:103868:1,82717:103869:1,82718:103870:1,82719:103871:1,94673:117276:1,94674:117277:1,94675:117278:1,94679:117282:1,94683:117286:1,94687:117290:1,94689:117292:1,94690:117293:1,94691:117294:1,94698:117301:1,94700:117303:1,99802:123292:1,103901:103676:1,103916:128333:1,104097:128611:1,108724:134273:1,108730:134283:1,108731:134284:1,109006:103841:1,109010:134844:2,109012:134846:1,109015:134849:1,109019:134852:1,109020:134859:1,109021:134860:1,109781:136039:1,109782:136040:1,109783:136041:1,109890:136157:1,109917:136185:1,110409:136995:1', 'https://www.method.gg/guides'),
|
||||||
|
(5, 258, 0, 'Default: simc/midnight MID1_Priest_Shadow_Voidweaver', '82552:103781:1,82555:103817:1,82556:103834:1,82559:103682:1,82560:103683:2,82563:103686:1,82643:103782:1,82645:103784:2,82647:103786:1,82649:103789:2,82651:103792:1,82654:103796:1,82656:103798:1,82657:103674:1,82658:103799:1,82659:103801:1,82663:103806:1,82665:103808:1,82666:136811:1,82667:103811:1,82668:103812:1,82669:103813:1,82672:103818:1,82673:103819:1,82676:135091:1,82677:103823:1,82678:103825:1,82679:103826:1,82680:103828:1,82684:103833:2,82685:103835:1,82686:103836:2,82687:103837:1,82690:103840:1,82695:114588:1,82701:103851:1,82703:103853:1,82704:103854:1,82708:103860:1,82711:103863:1,82712:103864:1,82713:103865:1,82715:103867:1,93170:103810:1,93171:115448:1,94668:117271:1,94669:117272:1,94670:117273:1,94684:117287:1,94692:117295:1,94693:123845:1,94694:117297:1,94695:125982:1,94696:117299:1,94703:117306:1,99800:123287:1,100212:123841:1,108007:133378:1,108029:133400:1,108731:134284:1,109006:103841:1,109009:103677:1,109010:134844:2,109011:134845:1,109012:134846:1,109015:134849:1,109017:136223:1,109018:134851:1,109020:134859:1,109021:134860:1,109778:136036:1,109779:136037:1,109780:136038:1,109890:136157:1,109917:136185:1,110408:136992:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Death Knight =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(6, 250, 0, 'Default: method.gg Blood Death Knight (San''layn Single Target)', '76039:96167:1,76041:96169:1,76042:96170:1,76043:96171:1,76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76056:96184:1,76057:96186:1,76058:96187:1,76061:96190:1,76064:96193:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:96203:1,76076:96205:1,76079:96208:2,76080:96209:1,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76124:96255:1,76125:96256:1,76126:96257:2,76127:96258:1,76128:96259:1,76129:96260:1,76130:96261:1,76131:96262:1,76132:96263:1,76133:96264:1,76135:96266:1,76137:96268:1,76138:96269:1,76141:96273:1,76142:96274:1,76144:96277:1,76146:96279:1,76168:96303:1,76169:96304:1,76170:96305:1,76171:96306:1,76172:96307:1,76173:96308:1,95033:117630:1,95040:117637:1,95045:117642:1,95046:117643:1,95048:136836:1,95051:117648:1,95053:117650:1,95055:117652:1,95056:117891:1,95062:117659:1,95064:117661:1,95065:117662:1,99822:123325:1,102007:126015:1,102008:126016:1,102243:126298:1,102244:126300:1,109736:135994:1,109737:135995:1,109738:135996:1,110030:136524:1,110353:136917:1', 'https://www.method.gg/guides'),
|
||||||
|
(6, 251, 0, 'Default: method.gg Frost Death Knight (Breath of Sindragosa)', '76033:96161:2,76037:96165:1,76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76061:96190:1,76064:136526:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:96203:1,76075:96204:1,76076:96205:1,76078:96207:1,76079:96208:2,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76091:96220:1,76092:96221:1,76093:96222:1,76096:96225:1,76098:96228:1,76101:96231:1,76103:96233:1,76106:96236:1,76108:96238:1,76109:96239:1,76114:96244:1,76115:96245:1,76116:96246:1,76117:96247:1,76118:96248:1,76121:96252:1,76122:96253:2,76123:96254:1,95032:117629:1,95034:117631:1,95035:123420:1,95036:117633:1,95043:117640:1,95049:117646:1,95057:117654:1,95058:117655:1,95061:117658:1,95062:117659:1,95066:117663:1,95068:117665:1,99821:123324:1,101929:125874:1,101930:125875:1,101931:125876:1,101933:125878:1,102007:126015:1,102008:126016:1,102009:126017:1,106790:131618:1,106791:131619:1,109258:133362:1,109733:135991:1,109734:135992:1,109735:135993:1,110029:136523:1,110030:136524:1,110031:136525:1,110400:136968:1', 'https://www.method.gg/guides'),
|
||||||
|
(6, 252, 0, 'Default: method.gg Unholy Death Knight (Riders Single Target)', '76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76058:96187:1,76061:96190:1,76064:136526:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:133518:1,76076:96205:1,76078:96207:1,76079:96208:2,76080:96209:1,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76148:96282:1,76149:96283:2,76150:96284:2,76156:96290:1,76160:96294:1,76162:96296:1,76176:133514:1,76178:96313:1,76179:96314:1,76182:96318:1,76184:96321:1,76185:96322:1,76186:133365:1,76187:96324:1,76189:96326:1,76190:96327:1,76191:96328:1,76193:96330:1,76196:96333:1,76197:96334:1,95037:123410:1,95041:117638:1,95042:117639:1,95044:117641:1,95047:117644:1,95051:117648:1,95054:117651:1,95059:117656:1,95060:123412:1,95063:117660:1,95066:117663:1,95067:117664:1,99820:123322:1,102007:126015:1,102008:126016:1,108126:133515:1,108129:133522:1,108130:125816:1,108131:133523:1,108151:133546:1,109392:133517:1,109458:135676:1,109739:135997:1,109740:135998:1,109741:135999:1,110029:136523:1,110030:136524:1,110260:136797:1,110354:136920:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- ===== Shaman =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(7, 262, 0, 'Default: simc/midnight MID1_Shaman_Elemental_Stormbringer', '80978:101844:1,80981:101850:1,80983:101853:1,80984:127924:1,80985:101855:1,80988:101859:1,80989:101860:1,80990:101861:1,80991:101862:1,80992:101864:1,80993:101865:1,80995:101867:1,80996:101869:1,80997:101870:1,80998:101871:1,80999:136714:1,81000:101873:1,81002:101876:1,81008:101885:1,81012:101889:1,81015:101892:1,81016:101893:1,94858:123631:1,94860:117457:1,94861:117458:1,94862:123632:1,94863:128226:1,94867:117464:1,94868:117465:1,94869:117466:1,94870:117467:1,94873:128225:1,94875:117472:1,94880:117477:1,94883:117480:1,94884:123630:1,94885:117482:1,94886:117483:1,94887:117484:1,94888:117485:1,94889:117486:1,94892:117489:1,94893:117490:1,94894:117491:1,99845:123376:1,103579:127851:1,103581:127854:1,103582:127855:2,103583:127856:1,103584:127857:1,103585:127858:1,103586:127859:1,103588:127861:1,103591:127864:1,103593:127868:1,103596:127871:1,103598:127873:1,103602:127877:1,103605:127880:1,103606:127881:1,103607:127882:1,103608:127884:1,103611:127888:1,103612:127889:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103620:127899:1,103624:127905:1,103625:127906:1,103626:127908:1,103627:127909:1,103628:127910:1,103631:127913:1,103633:127915:1,103634:127916:1,103635:127917:1,103638:127919:1,103639:127920:1,103640:127921:1,109387:135591:1,109727:135985:1,109728:135986:1,109729:135987:1,109730:135988:1,109731:135989:1,109732:135990:1,110066:136561:1,110085:136585:1,110402:136974:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(7, 263, 0, 'Default: simc/midnight MID1_Shaman_Enhancement_Totemic', '80938:101801:1,80939:101802:1,80941:101804:1,80942:101805:1,80943:101806:1,80945:101809:2,80947:101811:1,80948:101812:1,80949:101813:1,80950:101814:2,80951:101815:1,80953:101818:1,80954:101819:1,80958:101823:1,80959:101824:1,80960:101825:1,80961:101826:1,80962:101827:1,80963:101828:1,80964:101829:1,80967:101832:1,80968:101833:1,80969:101834:1,80973:101839:1,80974:101840:1,80975:101841:1,94859:117456:1,94866:125824:1,94871:117468:1,94872:117469:1,94874:117471:1,94877:117474:1,94879:117476:1,94881:125822:1,94882:117479:1,94890:117487:1,94891:117488:1,94892:117489:1,99847:123379:1,103581:127854:1,103582:127855:2,103583:127856:1,103585:127858:1,103586:127859:1,103588:127861:1,103591:127865:1,103593:127868:1,103594:127869:1,103596:127871:1,103602:127877:1,103605:127880:1,103606:127881:1,103607:127882:1,103608:127884:1,103611:127888:1,103612:127889:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103622:127902:1,103624:127905:1,103625:127906:1,103627:127909:1,103628:127910:1,103871:128270:1,109194:128236:1,109386:135590:1,109387:135591:1,109388:135592:1,109389:135593:1,109724:135982:1,109725:135983:1,109726:135984:1,110085:136585:1,110401:136971:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(7, 264, 0, 'Default: method.gg Restoration Shaman (Totemic Downpour)', '80976:101842:1,81018:101895:1,81019:101896:1,81021:101899:1,81022:101900:1,81024:101902:1,81027:101905:1,81031:101911:1,81032:101912:1,81033:135485:1,81037:101919:1,81040:101923:1,81041:101924:1,81044:101928:1,81047:101932:1,81048:101934:1,81049:101935:1,81050:101936:1,81051:101937:1,81052:101939:2,81055:101942:1,81073:101964:1,92675:114811:1,92677:114813:1,94859:117456:1,94866:125824:1,94871:117468:1,94872:117469:1,94874:117471:1,94877:117474:1,94879:117476:1,94881:125822:1,94882:117479:1,94888:117485:1,94890:117487:1,94891:117488:1,99846:123378:1,103428:127672:1,103430:127674:1,103434:127680:1,103436:127682:1,103581:127853:1,103582:127855:2,103584:127857:1,103586:127859:1,103587:127860:1,103588:127861:1,103590:127863:1,103591:127864:1,103593:127868:1,103594:127869:1,103596:127871:1,103598:127873:1,103601:127876:1,103602:127877:1,103606:127881:1,103607:127883:1,103611:127888:1,103613:127890:1,103614:127891:2,103615:127892:1,103616:127893:1,103617:127894:2,103620:127899:1,103622:127902:1,103625:127906:1,103626:127908:1,103627:127909:1,104124:128703:1,109301:135487:1,109386:135590:1,109387:135591:1,109388:135592:1,109724:135982:1,109725:135983:1,109726:135984:1,110085:136585:1,110403:136977:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- ===== Mage =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(8, 62, 0, 'Default: simc/midnight MID1_Mage_Arcane_Spellslinger', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62112:80170:2,62114:80173:2,62115:80174:1,62116:80175:1,62121:80180:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,93524:115877:1,94647:117250:1,94654:117257:1,94655:117258:1,94656:117259:1,94657:128267:1,94658:117261:1,94659:117262:1,94660:117263:1,94661:117264:1,94662:117265:1,94663:117266:1,94664:117267:1,99830:123344:1,101883:125818:1,102438:126508:1,102440:126510:1,102441:126511:1,102445:126515:1,102446:126516:1,102449:126519:1,102453:126523:1,102454:136465:1,102460:126530:1,102465:134020:1,102467:126537:1,102468:126538:1,102469:126539:1,102470:126540:1,102471:126541:1,102473:126543:1,102474:126544:1,102475:126545:1,102480:126550:2,104113:128689:1,108536:134024:1,108537:134026:2,108538:134027:1,108539:134028:1,108551:134047:1,108654:134183:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108664:134194:1,108665:134196:1,109002:134834:1,109667:135918:1,109668:135919:1,109669:135920:1,110080:136578:1,110081:136579:1,110420:137028:1,110442:137084:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(8, 63, 0, 'Default: simc/midnight MID1_Mage_Fire_Sunfury', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62112:80170:2,62114:80173:2,62115:80174:1,62119:80178:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,93524:115877:1,94643:117246:1,94644:117247:1,94645:117248:1,94646:117249:1,94647:117250:1,94648:117251:1,94649:117252:1,94650:117253:1,94651:117254:1,94652:117255:1,94653:117256:1,99829:123340:1,100989:124750:1,100995:124756:1,100998:124759:1,100999:124760:1,101007:135618:1,101009:124771:1,101019:124783:2,101024:124789:1,101027:124793:1,101029:124795:2,108654:134182:1,108656:134186:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108662:134192:2,109393:135600:1,109395:135603:1,109396:135604:1,109398:135606:1,109399:135607:1,109401:135609:1,109402:135610:1,109403:135612:1,109404:135613:2,109407:135616:1,109408:135617:1,109409:135602:1,109411:135621:1,109673:135924:1,109674:135925:1,109675:135926:1,109956:136441:1,110080:136578:1,110081:136579:1,110086:136587:1,110088:136589:1,110321:136878:1,110322:136879:1,110423:137037:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(8, 64, 0, 'Default: simc/midnight MID1_Mage_Frost_Spellslinger', '62085:80141:1,62086:80142:1,62091:80147:1,62094:126060:1,62096:80153:1,62098:80155:1,62100:80157:1,62102:80159:2,62104:80161:1,62105:80163:1,62107:80165:1,62112:80170:2,62114:80173:2,62115:80174:1,62116:80175:1,62117:80176:1,62122:80181:1,62123:80182:2,62124:80183:1,62125:134184:1,62127:80187:1,62129:80189:1,62150:134540:1,62153:80216:1,62157:80220:1,62164:80227:1,62170:80234:1,62173:80237:1,62176:80241:1,62177:80242:1,62178:80243:1,62179:80244:1,62180:80245:1,62181:80247:1,62182:80248:1,62184:80250:1,81468:102429:1,93524:115877:1,94654:117257:1,94655:117258:1,94656:117259:1,94657:128267:1,94658:117261:1,94659:117262:1,94660:117263:1,94661:117264:1,94662:117265:1,94663:117266:1,94664:117267:1,99828:123339:1,103771:134418:1,108653:134180:1,108654:134183:1,108655:134185:1,108657:134187:1,108658:134188:1,108659:134189:1,108660:134190:1,108661:134191:1,108849:134405:1,108850:134406:1,108851:134407:1,108852:134408:1,108855:134411:1,108858:134414:2,108859:134415:1,108864:134421:1,109667:135918:1,109668:135919:1,109669:135920:1,109915:136182:1,109916:136183:1,109956:136441:1,110081:136579:1,110258:136796:1,110283:136837:1,110422:137034:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Warlock =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(9, 265, 0, 'Default: simc/midnight MID1_Warlock_Affliction_Soul_Harvester', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91446:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71954:91465:1,71955:91466:1,71956:91468:1,71957:91469:1,72032:91552:1,72033:91553:1,72034:91554:1,72037:91558:1,72041:91562:1,72045:124692:1,72047:91568:1,72049:91570:1,72050:91571:1,72051:91572:1,72054:91576:1,72055:91577:2,72058:91580:2,94821:117418:1,94823:117420:1,94824:117421:1,94825:117422:1,94832:117429:1,94838:117435:1,94840:117437:1,94846:117443:1,94847:117444:1,94850:123840:1,94851:117448:1,94857:117454:1,99850:123384:1,100941:124694:1,102031:126064:1,102247:126303:1,109837:136096:1,109838:136097:1,109839:136098:1,109842:136102:2,109843:136103:1,109844:136104:1,109845:136105:1,109847:136107:1,109849:136109:1,109852:136112:1,109855:136115:1,109857:136117:1,109859:136119:1,109860:136120:1,109861:136121:1,109862:136122:1,109863:136123:1,109865:136125:2,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110269:136812:1,110270:136813:1,110405:136983:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(9, 266, 0, 'Default: simc/midnight MID1_Warlock_Demonology_Soul_Harvester', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91445:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71955:91466:1,71956:91468:1,71957:91469:1,94821:117418:1,94823:123839:1,94824:117421:1,94825:117422:1,94832:117429:1,94838:117435:1,94846:117443:1,94847:117444:1,94850:123840:1,94851:117448:1,94855:117452:1,94857:117454:1,99849:123383:1,100941:124694:1,101887:125829:2,101891:125834:1,101893:136731:1,101894:125837:1,101895:125839:1,101903:125848:2,101905:125850:1,101908:125854:1,101909:125855:1,101914:125860:2,101920:125866:1,101923:125869:1,109244:135306:1,109248:135310:1,109249:135311:2,109250:135312:1,109251:135313:1,109252:135314:1,109253:135315:1,109257:135319:1,109837:136096:1,109838:136097:1,109839:136098:1,109840:136100:1,109842:136102:2,109843:136103:1,109845:136105:1,109846:136106:1,109847:136107:1,109934:136227:1,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110191:136719:1,110193:136721:1,110194:136722:1,110197:136726:1,110198:136727:1,110404:136980:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(9, 267, 0, 'Default: simc/midnight MID1_Warlock_Destruction_Hellcaller', '71918:91425:1,71922:91430:1,71923:91431:1,71924:91432:2,71926:91434:1,71930:91438:1,71931:91439:1,71933:91441:1,71936:91444:1,71937:91445:1,71942:91452:1,71948:91459:1,71949:91460:1,71950:91461:2,71952:91463:2,71954:91465:1,71955:91466:1,71956:91468:1,71957:91469:1,71960:91473:1,71965:91478:1,71968:91481:1,71969:91482:2,71971:91484:1,71973:91486:1,71975:91489:1,71980:91496:1,71983:91500:2,71985:91502:1,72059:91581:1,72060:91582:1,72061:91583:1,72062:91584:1,72065:91588:1,72066:91589:2,72067:91590:1,72068:91591:1,72069:91592:1,94822:117419:1,94829:117426:1,94834:117431:1,94835:117432:1,94837:117434:1,94840:117437:1,94842:117439:1,94844:117441:1,94845:117442:1,94853:117450:1,94854:123310:1,94855:117452:1,99848:123382:1,100941:124694:1,101992:126002:1,101994:126004:1,108678:134219:1,108681:134221:1,109834:136093:1,109835:136094:1,109836:136095:1,109841:136101:1,109842:136102:2,109843:136103:1,109845:136105:1,109847:136107:1,110071:136568:1,110072:136569:1,110073:136570:1,110074:136571:1,110075:136572:1,110076:136573:1,110280:136833:1,110281:136834:2,110282:136835:1,110406:136986:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Monk =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(10, 268, 0, 'Default: simc/midnight MID1_Monk_Brewmaster', '101064:124838:1,101065:136148:1,101067:136146:1,101069:124843:1,101071:124845:1,101072:124846:1,101074:124848:2,101075:124849:1,101076:124850:1,101078:124852:1,101079:124854:1,101080:124855:1,101082:124857:1,101086:124863:1,101087:124864:1,101088:124865:1,101135:124924:1,101136:124926:1,101140:124930:1,101142:124932:1,101145:124935:1,101146:124936:1,101147:124937:1,101152:124943:1,101153:124944:1,101156:124948:1,101160:124954:1,101161:124955:1,101163:124957:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101177:124974:1,101178:124975:1,101179:124976:2,101181:124979:1,101182:124980:1,101183:124982:1,101184:124983:2,101187:124987:1,101188:124988:1,101190:124991:1,101193:124996:1,101195:124999:1,101197:125001:1,101198:125003:1,101201:125006:1,101202:125008:1,101219:125028:1,101220:125029:1,101221:125031:1,101222:125032:1,101223:125033:1,101224:125035:1,101225:125036:1,101226:125037:1,101227:125039:1,101228:125040:1,101229:125042:1,101230:125043:1,101248:125069:1,101711:125002:1,102004:124859:1,102433:126501:1,109694:135952:1,109695:135953:1,109696:135954:1,109826:136085:1,109827:136086:1,109882:136145:1,109910:136177:1,110435:137075:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(10, 269, 0, 'Default: simc/midnight MID1_Monk_Windwalker', '101035:124805:2,101036:124806:1,101037:124807:1,101039:124810:1,101044:126026:1,101045:124817:1,101048:124820:1,101051:124823:1,101052:124825:1,101053:124826:1,101054:124827:1,101055:124828:1,101056:124829:1,101057:124830:1,101059:124833:1,101060:124834:1,101136:124926:1,101137:124927:1,101140:124930:1,101142:124932:1,101146:124936:1,101147:124937:1,101149:124939:1,101150:124941:1,101153:124944:1,101159:124953:1,101160:124954:1,101162:124956:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101178:124975:1,101179:124976:2,101182:124980:1,101183:124982:1,101184:124983:2,101185:124984:1,101186:124985:1,101203:125009:1,101205:125012:1,101206:125013:1,101207:134452:1,101208:125015:1,101209:125016:1,101210:125017:1,101213:125020:1,101215:125022:1,101216:125023:1,101217:125025:1,101218:125026:1,101232:125046:1,101243:125062:1,101244:125063:1,101245:125065:1,101246:125066:1,101247:125068:1,101248:125069:1,101249:125070:1,101250:125071:1,101251:125072:1,101252:125073:1,101253:125074:1,101254:125076:1,108946:134543:1,109697:135955:1,109698:135956:1,109699:135957:1,110022:136514:1,110023:136515:1,110025:136518:1,110098:136599:1,110436:137076:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(10, 270, 0, 'Default: method.gg Mistweaver Monk (Conduit of the Celestials)', '101089:124866:1,101093:124871:1,101095:124873:1,101096:124875:1,101097:124876:1,101102:128221:1,101104:124885:1,101107:124888:1,101108:124889:1,101110:124891:1,101111:124892:2,101112:124893:1,101113:124894:1,101114:124896:2,101115:124897:1,101117:124899:1,101121:124905:1,101122:124906:1,101123:124907:1,101124:124908:2,101127:125932:1,101128:124913:1,101129:124915:1,101130:124916:1,101131:124918:1,101132:124920:1,101133:124921:1,101134:124922:1,101136:124926:1,101139:124929:1,101140:124930:1,101142:124932:1,101143:124933:1,101144:124934:1,101146:124936:1,101147:124937:1,101153:124944:1,101157:124949:1,101161:124955:1,101164:124958:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101179:124976:2,101183:124982:1,101185:124984:1,101186:124985:1,101223:125033:1,101231:125045:1,101233:125049:1,101234:125050:1,101235:125052:1,101236:125054:1,101237:125055:1,101238:125056:1,101239:125058:1,101240:125059:1,101242:125061:1,102432:126500:1,109516:135749:1,109700:135958:1,109701:135959:1,110019:136510:1,110021:136512:1,110024:136517:1,110026:136519:1,110027:136520:1,110067:136562:1,110097:136598:1,110211:136747:1,110218:136754:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- ===== Druid =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(11, 102, 0, 'Default: simc/midnight MID1_Druid_Balance', '82198:103276:1,82201:103279:1,82202:103280:1,82206:103284:1,82207:128589:1,82208:103286:1,82209:103287:1,82210:103288:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82228:103306:1,82229:103307:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82237:103316:1,82241:103320:1,82246:103326:1,88201:109833:1,88202:109834:1,88203:109835:1,88204:109836:1,88206:109839:1,88207:109840:2,88208:109842:1,88212:109846:1,88213:109847:1,88214:109848:2,88215:109849:1,88218:109852:1,88221:109856:1,88222:109857:1,88223:109858:1,88224:109859:1,88225:109861:1,88226:109862:1,88227:109863:2,88231:109867:1,88234:109870:1,88235:109871:1,88236:109872:1,91048:115458:1,92229:114300:1,93714:116102:1,94585:117772:1,94586:117178:1,94587:117179:1,94588:117181:1,94590:117183:1,94594:117769:1,94596:117190:1,94597:123304:1,94598:117193:1,94600:117195:1,94607:117204:1,94608:117205:1,99808:123302:1,100174:123793:1,100175:123794:1,100176:123795:1,100177:123796:2,100223:123868:1,103846:128230:1,103847:128231:1,104078:128579:1,104080:128584:1,104083:128588:1,104085:128591:1,108032:133404:1,109718:135976:1,109719:135977:1,109720:135978:1,110421:137031:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(11, 103, 0, 'Default: simc/midnight MID1_Druid_Feral_Wildstalker', '82088:103147:1,82091:103150:1,82092:103152:1,82096:103157:1,82098:103159:1,82099:103160:1,82100:103161:1,82101:103162:1,82102:103163:1,82103:103164:1,82104:103165:1,82106:103167:1,82107:103168:1,82108:103170:1,82110:103173:1,82111:103174:1,82112:103175:1,82113:103176:1,82114:103177:1,82115:103179:2,82116:103180:1,82118:103182:1,82119:103183:1,82121:103185:2,82122:103186:1,82123:103187:1,82124:103188:1,82198:103276:1,82199:103277:1,82206:103284:1,82207:128589:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82222:103300:1,82223:103301:1,82224:103302:1,82225:103303:2,82228:103306:1,82229:103307:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82239:103318:1,82241:103320:1,82242:103322:1,82243:103323:2,82244:103324:1,82246:103326:1,92641:114771:1,94609:117206:1,94621:117221:1,94622:119855:1,94623:117223:1,94624:117224:1,94625:117225:1,94626:117226:1,94627:117227:1,94628:117229:1,94629:117231:1,94630:117232:1,94631:117234:1,99805:123296:1,100175:123794:1,100176:123795:1,100177:123796:2,104078:128580:1,104080:128584:1,104081:128585:1,104085:128591:1,109715:135973:1,109716:135974:1,109717:135975:1,110426:137046:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(11, 104, 0, 'Default: simc/midnight MID1_Druid_Guardian', '82126:103190:1,82127:103191:1,82129:103193:1,82131:103195:1,82135:103199:1,82136:103201:1,82138:103203:2,82140:103206:1,82142:103209:1,82143:103210:2,82145:103212:1,82146:103213:2,82147:135336:1,82149:103216:1,82152:103221:1,82153:103222:1,82160:103229:1,82161:103230:1,82198:103276:1,82199:103277:1,82206:103284:1,82208:103286:1,82209:103287:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82223:103301:1,82224:103302:1,82225:103303:2,82227:103305:1,82228:103306:1,82229:103307:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82237:103316:1,82239:103318:1,82241:103320:1,82242:103322:1,82243:103323:1,82246:103326:1,91044:112967:1,91046:112969:1,92226:103208:1,92227:103218:1,92585:114698:1,92586:114699:1,92587:114700:1,94608:117205:1,94609:117206:1,94610:117207:1,94611:117208:1,94612:117210:1,94613:117211:1,94614:117214:1,94615:117215:1,94616:117216:1,94618:117218:1,94619:117219:1,94620:117220:1,99807:123301:1,100175:123794:1,100176:123795:1,104078:128580:1,104080:128584:1,104081:128585:1,104085:128591:1,109375:135568:1,109377:135491:1,109378:135570:1,109379:135490:1,109721:135979:1,109722:135980:1,109723:136624:1,110431:137061:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(11, 105, 0, 'Default: method.gg Restoration Druid (Wildstalker)', '82043:117104:1,82045:103096:1,82047:103098:1,82049:103100:1,82050:103101:1,82051:103102:1,82052:103105:1,82053:103106:1,82054:103108:1,82055:103109:1,82057:103111:1,82058:103112:1,82059:103113:1,82060:103114:1,82063:103118:1,82064:103119:1,82065:103121:1,82068:103124:1,82071:103127:1,82072:103128:1,82073:103129:1,82074:114809:1,82076:103132:1,82079:103137:1,82082:103141:1,82083:103142:1,82198:103275:1,82205:103283:1,82206:103284:1,82207:128589:1,82209:103287:1,82210:103288:1,82214:103292:2,82217:103295:1,82218:103296:1,82219:103297:1,82220:103298:1,82225:103303:2,82228:103306:1,82229:103307:1,82230:103308:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82240:103319:1,82243:103323:2,82244:103324:1,94600:117195:1,94621:117221:1,94622:119855:1,94623:117223:1,94624:117224:1,94625:117225:1,94626:117226:1,94627:117227:1,94628:117229:1,94629:117231:1,94630:117232:1,94631:117233:1,99806:123298:1,100173:123792:1,100175:123794:1,100176:123795:1,100177:123796:2,100223:123868:1,103873:128274:1,103874:128708:1,103876:128277:1,104082:128586:1,104084:128590:1,104085:128591:1,104125:128707:1,109715:135973:1,109716:135974:1,109717:135975:1,110424:137040:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- ===== Demon Hunter =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(12, 577, 0, 'Default: simc/midnight MID1_Demon_Hunter_Havoc_Fel-Scarred', '90914:112823:1,90919:112828:1,90921:112830:1,90922:112831:1,90923:112832:1,90925:112834:1,90928:112838:1,90929:112839:1,90931:112841:1,90933:112844:1,90934:112845:1,90935:112846:2,90936:112847:2,90937:112848:1,90938:112849:1,90941:112852:1,90942:112853:1,90946:112859:1,90948:112861:1,90949:112862:2,90950:112863:1,90993:112911:1,90994:117768:1,90997:117755:1,91000:112918:2,91001:112919:1,91002:112921:1,91003:112923:1,91004:112924:2,91006:112926:1,91007:112927:1,91008:112928:1,91011:112932:1,91012:117764:1,91013:112934:1,91015:112936:2,91017:112938:1,91018:112939:1,91021:117744:1,91022:112944:1,91024:117765:1,91025:112948:1,91026:112949:1,91027:112950:1,91028:112951:1,91032:112955:1,91034:112957:2,91036:112959:1,93013:115244:1,93015:115246:1,93016:115248:1,94899:124010:1,94901:117498:1,94902:117499:1,94904:117501:1,94905:117502:1,94909:117506:1,94912:117509:1,94913:124011:1,94915:117512:1,94916:117513:1,94917:117514:1,94918:117515:1,95143:117741:1,95147:117754:2,95149:117758:1,95150:117759:1,95152:117762:1,99824:123329:1,109772:136030:1,109773:136031:1,109774:136032:1,110011:136501:1,110427:137049:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(12, 581, 0, 'Default: simc/midnight MID1_Demon_Hunter_Vengeance_Annihilator', '90929:112839:1,90931:112841:1,90933:112844:1,90934:112845:1,90935:112846:2,90936:112847:2,90938:112849:1,90941:112852:1,90942:112853:1,90946:112859:1,90948:112861:1,90949:112862:2,90950:112863:1,90951:112864:1,90952:112865:1,90953:112866:1,90955:112868:1,90958:112872:2,90959:112873:1,90960:112875:1,90961:112876:1,90962:112877:2,90963:112878:1,90964:112879:1,90968:112883:1,90970:112886:1,90971:112887:1,90972:112888:1,90974:112890:1,90975:112891:1,90977:112893:1,90978:112894:1,90980:112896:1,90981:112897:2,90984:112900:1,90986:112902:1,90987:112903:1,90989:112906:1,90990:112907:1,90991:112908:1,90994:112912:1,90996:112914:2,90999:112917:1,91000:112918:2,91001:112920:1,91002:112921:1,91004:112924:2,91006:112926:1,91007:112927:1,95149:117758:1,95150:117759:1,95151:117761:1,95152:117762:1,99823:134253:1,108722:134271:1,108729:134282:1,109442:135660:1,109443:135661:1,109444:135662:1,109445:135663:1,109446:135664:1,109447:135665:1,109448:135659:1,109449:135667:1,109450:136810:1,109451:135669:1,109452:135670:1,109453:135671:1,109454:135672:1,109455:135673:1,110011:136501:1,110425:137043:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- ===== Evoker =====
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(13, 1467, 0, 'Default: simc/midnight MID1_Evoker_Devastation_SC', '93272:115578:1,93273:115579:1,93274:115580:2,93275:115581:1,93280:115587:1,93281:115588:2,93284:115592:1,93285:115593:1,93289:115597:1,93294:115602:1,93295:115603:2,93297:115606:1,93298:115607:1,93300:115609:1,93302:115611:2,93304:115613:1,93305:115614:1,93306:115615:1,93309:115618:1,93310:115619:2,93311:115620:1,93312:115621:1,93313:115623:1,93314:115624:1,93316:115627:1,93318:115630:1,93319:115631:1,93320:115632:1,93322:115634:1,93323:115635:1,93324:115636:1,93325:115637:1,93326:115638:1,93327:115639:1,93328:115640:1,93329:115641:1,93330:115642:1,93331:115643:1,93332:115645:1,93333:115646:1,93334:115647:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93346:115661:1,93348:115663:1,93349:115664:2,93350:115665:1,93351:115666:1,93352:115667:1,93353:115668:1,93354:115669:1,93355:115670:2,93366:115683:1,93715:116103:1,94921:117518:1,94928:117525:1,94933:117530:1,94934:117531:1,94936:117533:1,94939:117536:1,94941:117538:1,94943:120123:1,94944:117541:1,94950:117547:1,94952:117549:1,94953:117550:1,98931:122279:1,99827:123333:1,103843:128216:1,103844:128217:1,109793:136051:1,109794:136052:1,109795:136053:1,110064:136559:1,110414:137010:1', 'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1'),
|
||||||
|
(13, 1468, 0, 'Default: method.gg Preservation Evoker (Chronowarden Raid)', '93238:115540:1,93239:115541:1,93240:115542:1,93241:115543:1,93242:115544:1,93243:115546:1,93245:115549:1,93246:115550:1,93250:115554:1,93253:115557:1,93254:115558:2,93255:115559:1,93257:115561:1,93258:115562:1,93260:115565:1,93262:115567:1,93263:115568:2,93264:115570:1,93265:115571:1,93266:115572:1,93267:115573:1,93268:115574:2,93269:115575:1,93271:115577:1,93288:115596:1,93289:115597:1,93291:115599:1,93292:115600:2,93294:115602:1,93299:115608:1,93300:115609:1,93302:115611:2,93304:115613:1,93306:115615:1,93308:115617:1,93309:115618:1,93310:115619:2,93311:115620:1,93336:115650:1,93337:115651:1,93338:115652:1,93339:115653:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93346:115661:1,93347:115662:2,93348:115663:1,93350:115665:1,93351:125610:1,93352:115667:1,93353:115668:1,93354:115669:1,93355:115670:2,93715:116103:1,94925:117522:1,94929:117526:1,94930:126310:1,94932:117786:1,94935:117532:1,94942:117539:1,94947:117544:1,94948:117545:1,94950:117547:1,94951:117548:1,94954:117551:1,94955:117552:1,99826:123335:1,103843:128216:1,109508:135741:1,109509:135742:1,109510:135743:1,110064:136559:1,110413:137007:1', 'https://www.method.gg/guides'),
|
||||||
|
(13, 1473, 0, 'Default: method.gg Augmentation Evoker (Chronowarden ST+Cleave)', '93195:115493:1,93197:115495:1,93198:115496:1,93199:115690:1,93200:115498:1,93201:115499:1,93202:115500:1,93203:115502:1,93205:115504:1,93206:115505:1,93207:115506:1,93208:115507:1,93209:115508:1,93211:115511:1,93212:115512:1,93219:115519:1,93220:115520:1,93221:115521:1,93222:115522:1,93223:115523:1,93226:115527:1,93229:115530:1,93232:115533:1,93234:115536:1,93271:115577:1,93287:115595:1,93288:115596:1,93289:115597:1,93290:115598:1,93295:115603:2,93300:115609:1,93302:115611:2,93304:115613:1,93305:115614:1,93306:115615:1,93308:115617:1,93309:115618:1,93310:115619:2,93311:115620:1,93312:115621:1,93340:115654:1,93341:115655:1,93343:115657:1,93344:115658:1,93345:115660:1,93346:115661:1,93348:115663:1,93349:115664:2,93350:115665:1,93351:115666:1,93352:115667:1,93354:115669:1,93355:115670:2,93358:115675:1,93367:115685:1,93368:115688:1,93369:115686:1,93715:116103:1,94925:117522:1,94929:117526:1,94930:126310:1,94932:117529:1,94935:117532:1,94942:117539:1,94947:117544:1,94948:117545:1,94951:117548:1,94954:117551:1,94955:117552:1,98931:122279:1,99825:123334:1,102248:126304:1,102249:126305:1,103843:128216:1,109508:135741:1,109509:135742:1,109510:135743:1,110415:137013:1', 'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (7, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
-- Migration: 0008_talent_builds_per_context
|
||||||
|
-- Date: 2026-05-07
|
||||||
|
-- Purpose: Populate per-context (M+/PvP/Leveling) talent loadouts in
|
||||||
|
-- playerbot_v2_talent_build for the subset of (class, spec, context)
|
||||||
|
-- tuples where a curated build is honestly sourceable today.
|
||||||
|
--
|
||||||
|
-- Research summary
|
||||||
|
-- ----------------
|
||||||
|
-- 1. simc/midnight branch (the source for 0004_simc_seed.sql) publishes ONLY
|
||||||
|
-- raid profiles for Midnight (profiles/MID1/MID1_*.simc). There are no
|
||||||
|
-- M+/PvP/Leveling .simc files on that branch — the directory listing
|
||||||
|
-- confirms 50 raid-only profiles. Historic dragonflight branches had the
|
||||||
|
-- same convention. Conclusion: simc cannot seed contexts 2/3/4.
|
||||||
|
--
|
||||||
|
-- 2. method.gg / wowhead publish per-context builds as base64 talent strings
|
||||||
|
-- on guide pages. Decoding them requires (a) the simc trait_data.inc DB
|
||||||
|
-- for the live wow build (currently 12.0.5.67314 — used by 0004) and
|
||||||
|
-- (b) re-running decode_simc.py against fresh profile headers. The
|
||||||
|
-- trait_data.inc isn't checked in (decode_simc.py expects it at
|
||||||
|
-- src/modules/PlayerbotV2/Bot/Talent/data/trait_data.inc; not present
|
||||||
|
-- in this tree), and bulk-decoding 30-100 fresh strings is out of scope
|
||||||
|
-- for a one-shot migration. Deferred for a future pass.
|
||||||
|
--
|
||||||
|
-- 3. TraitMgr starter builds (DB2-driven SkillLine_TraitTree starters) cover
|
||||||
|
-- the Leveling case natively — at sub-cap level the TraitMgr starter is
|
||||||
|
-- objectively correct (player doesn't have all talent points yet), and
|
||||||
|
-- the API loader in PlayerbotAPI.cpp already falls back to TraitMgr when
|
||||||
|
-- no curated row matches. Seeding curated max-level loadouts for
|
||||||
|
-- context=4/Leveling would actively harm low-level bots, so we
|
||||||
|
-- intentionally do NOT populate Leveling.
|
||||||
|
--
|
||||||
|
-- 4. PvP talents come from a separate system (PvP_Talent.db2 — not the
|
||||||
|
-- Trait_*.db2 family that this table represents). A "context=3 PvP"
|
||||||
|
-- talent row would only carry the PvE talents you'd take for arenas/BGs;
|
||||||
|
-- it cannot encode honor talents. Without a sourced/curated PvP-PvE-talent
|
||||||
|
-- string per spec we'd just be mirroring the raid build with a misleading
|
||||||
|
-- label. Deferred for a future pass.
|
||||||
|
--
|
||||||
|
-- What this migration ships
|
||||||
|
-- -------------------------
|
||||||
|
-- Tank M+ rows (context=2). For tank specs, the high-key M+ build and the
|
||||||
|
-- raid build genuinely overlap — both prioritize survivability + threat +
|
||||||
|
-- single-target/cleave throughput, and method.gg/Wowhead routinely publish
|
||||||
|
-- a single "Mythic+ / Raid" combined build per tank spec. Mirroring 0004's
|
||||||
|
-- raid loadout into context=2 with an honest "mirrors raid build" label
|
||||||
|
-- gives the M+ branch of the API a genuine curated build instead of
|
||||||
|
-- bouncing off context=2 → context=0 fallback for every tank dispatch.
|
||||||
|
--
|
||||||
|
-- Coverage: 6/117 rows (6 tank specs × M+ context).
|
||||||
|
-- Remaining 111 rows deferred — see notes 1-4 above.
|
||||||
|
-- Reverts: yes (DELETE rows; re-run the migration to repopulate).
|
||||||
|
-- Populated 6/117 rows
|
||||||
|
|
||||||
|
-- ===== Tank M+ (context=2): mirror of curated raid build =====
|
||||||
|
-- Each entries_json below is byte-for-byte identical to the corresponding
|
||||||
|
-- row in 0004_simc_seed.sql (context=1) / 0007_talent_builds_seed.sql
|
||||||
|
-- (context=0). Honest "mirrors raid" label so future maintainers know to
|
||||||
|
-- re-source these when method.gg ships a divergent M+ build.
|
||||||
|
|
||||||
|
-- Protection Warrior (class 1, spec 73) — simc/midnight raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(1, 73, 2, 'M+: mirrors raid (simc/midnight MID1_Warrior_Protection)',
|
||||||
|
'90261:112112:1,90264:132884:1,90265:112116:1,90295:112149:1,90296:112150:1,90297:112151:1,90298:112152:1,90301:112155:1,90302:112156:1,90303:112157:1,90304:112158:1,90305:112159:1,90306:112160:1,90308:112162:1,90309:112163:1,90310:112165:1,90311:112166:2,90312:132885:1,90314:112170:1,90317:112173:1,90318:112174:1,90319:112176:1,90320:112177:1,90324:112181:2,90326:112183:1,90328:112185:1,90329:112186:1,90330:112187:1,90331:112188:1,90343:112205:1,90346:112208:1,90351:112215:1,90352:112216:1,90353:112217:1,90355:112219:1,90360:112224:2,90366:112233:2,90368:112235:2,90371:112238:1,90378:112245:1,90381:112248:2,90382:112249:1,90385:112253:1,90432:112304:1,90433:112305:1,90448:112321:1,90449:112323:1,90451:112325:1,94785:117382:1,94792:118834:1,94797:117394:1,94798:117395:1,94800:117397:1,94803:117400:1,94805:117402:1,94807:117404:1,94808:117405:1,94816:117413:1,94817:118835:1,95956:118850:1,95959:118853:1,99851:123388:1,107577:132882:1,107578:132883:1,108542:134031:1,108543:134032:1,108544:134033:1,108686:134226:1,108705:136627:1,109391:135597:1,109809:136068:1,109810:136069:1,109811:136070:1,110118:136625:1,110119:136626:1,110411:137001:1',
|
||||||
|
'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- Protection Paladin (class 2, spec 66) — simc/midnight raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(2, 66, 2, 'M+: mirrors raid (simc/midnight MID1_Paladin_Protection)',
|
||||||
|
'81469:102431:1,81470:102432:1,81471:102433:2,81472:102435:1,81477:102440:1,81479:102443:1,81481:102445:1,81482:102446:2,81483:102448:1,81485:102450:2,81486:102452:1,81487:102453:1,81489:102455:1,81490:102456:1,81493:102461:1,81494:102463:1,81495:102464:1,81498:102467:1,81499:102468:1,81501:102470:1,81502:102471:1,81503:102472:1,81505:136732:1,81506:102475:1,81507:102476:1,81510:133481:1,81597:102583:1,81600:102587:1,81603:102590:1,81604:102591:1,81605:102592:1,81607:102595:1,81609:102597:1,81612:102600:1,81614:102602:1,81616:102604:1,81617:102606:1,81621:102612:2,81629:102621:1,81630:102622:2,81631:128251:1,81632:102625:1,90062:111886:1,93010:102623:1,93187:115479:1,93192:128244:1,93357:115673:1,95177:117810:1,95178:117811:1,95179:117812:1,95180:117813:1,95181:117858:1,95182:117815:1,95183:117816:1,95184:117818:1,95185:117819:1,95186:117822:1,95187:117823:1,95234:117882:1,99838:123358:1,101927:102451:1,103851:128241:2,103855:128250:1,103857:128253:1,103858:128254:2,103859:128255:1,103860:128256:1,103867:128263:1,103868:128264:1,103877:128278:1,109745:136003:1,109746:136004:1,109747:136005:1,109999:136487:1,110006:136496:1,110012:136503:1,110418:137022:1',
|
||||||
|
'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- Blood Death Knight (class 6, spec 250) — method.gg raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(6, 250, 2, 'M+: mirrors raid (method.gg Blood DK San''layn)',
|
||||||
|
'76039:96167:1,76041:96169:1,76042:96170:1,76043:96171:1,76045:96173:1,76046:96174:1,76048:96176:1,76051:96179:1,76052:96180:2,76054:96182:2,76055:96183:1,76056:96184:1,76057:96186:1,76058:96187:1,76061:96190:1,76064:96193:1,76065:96194:1,76066:96195:1,76067:96196:1,76068:96197:1,76069:96198:2,76071:96200:1,76072:96201:1,76073:96202:1,76074:96203:1,76076:96205:1,76079:96208:2,76080:96209:1,76081:96210:1,76084:96213:1,76085:96214:1,76087:96216:1,76124:96255:1,76125:96256:1,76126:96257:2,76127:96258:1,76128:96259:1,76129:96260:1,76130:96261:1,76131:96262:1,76132:96263:1,76133:96264:1,76135:96266:1,76137:96268:1,76138:96269:1,76141:96273:1,76142:96274:1,76144:96277:1,76146:96279:1,76168:96303:1,76169:96304:1,76170:96305:1,76171:96306:1,76172:96307:1,76173:96308:1,95033:117630:1,95040:117637:1,95045:117642:1,95046:117643:1,95048:136836:1,95051:117648:1,95053:117650:1,95055:117652:1,95056:117891:1,95062:117659:1,95064:117661:1,95065:117662:1,99822:123325:1,102007:126015:1,102008:126016:1,102243:126298:1,102244:126300:1,109736:135994:1,109737:135995:1,109738:135996:1,110030:136524:1,110353:136917:1',
|
||||||
|
'https://www.method.gg/guides');
|
||||||
|
|
||||||
|
-- Brewmaster Monk (class 10, spec 268) — simc/midnight raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(10, 268, 2, 'M+: mirrors raid (simc/midnight MID1_Monk_Brewmaster)',
|
||||||
|
'101064:124838:1,101065:136148:1,101067:136146:1,101069:124843:1,101071:124845:1,101072:124846:1,101074:124848:2,101075:124849:1,101076:124850:1,101078:124852:1,101079:124854:1,101080:124855:1,101082:124857:1,101086:124863:1,101087:124864:1,101088:124865:1,101135:124924:1,101136:124926:1,101140:124930:1,101142:124932:1,101145:124935:1,101146:124936:1,101147:124937:1,101152:124943:1,101153:124944:1,101156:124948:1,101160:124954:1,101161:124955:1,101163:124957:1,101165:124960:1,101166:124961:2,101167:124962:1,101168:124963:1,101169:124964:2,101170:124965:1,101173:124968:1,101174:124970:1,101175:124971:1,101177:124974:1,101178:124975:1,101179:124976:2,101181:124979:1,101182:124980:1,101183:124982:1,101184:124983:2,101187:124987:1,101188:124988:1,101190:124991:1,101193:124996:1,101195:124999:1,101197:125001:1,101198:125003:1,101201:125006:1,101202:125008:1,101219:125028:1,101220:125029:1,101221:125031:1,101222:125032:1,101223:125033:1,101224:125035:1,101225:125036:1,101226:125037:1,101227:125039:1,101228:125040:1,101229:125042:1,101230:125043:1,101248:125069:1,101711:125002:1,102004:124859:1,102433:126501:1,109694:135952:1,109695:135953:1,109696:135954:1,109826:136085:1,109827:136086:1,109882:136145:1,109910:136177:1,110435:137075:1',
|
||||||
|
'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- Guardian Druid (class 11, spec 104) — simc/midnight raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(11, 104, 2, 'M+: mirrors raid (simc/midnight MID1_Druid_Guardian)',
|
||||||
|
'82126:103190:1,82127:103191:1,82129:103193:1,82131:103195:1,82135:103199:1,82136:103201:1,82138:103203:2,82140:103206:1,82142:103209:1,82143:103210:2,82145:103212:1,82146:103213:2,82147:135336:1,82149:103216:1,82152:103221:1,82153:103222:1,82160:103229:1,82161:103230:1,82198:103276:1,82199:103277:1,82206:103284:1,82208:103286:1,82209:103287:1,82214:103292:2,82218:103296:1,82219:103297:1,82220:103298:1,82223:103301:1,82224:103302:1,82225:103303:2,82227:103305:1,82228:103306:1,82229:103307:1,82231:103309:1,82232:128581:1,82233:103311:2,82234:103312:1,82235:103313:1,82236:103314:1,82237:103316:1,82239:103318:1,82241:103320:1,82242:103322:1,82243:103323:1,82246:103326:1,91044:112967:1,91046:112969:1,92226:103208:1,92227:103218:1,92585:114698:1,92586:114699:1,92587:114700:1,94608:117205:1,94609:117206:1,94610:117207:1,94611:117208:1,94612:117210:1,94613:117211:1,94614:117214:1,94615:117215:1,94616:117216:1,94618:117218:1,94619:117219:1,94620:117220:1,99807:123301:1,100175:123794:1,100176:123795:1,104078:128580:1,104080:128584:1,104081:128585:1,104085:128591:1,109375:135568:1,109377:135491:1,109378:135570:1,109379:135490:1,109721:135979:1,109722:135980:1,109723:136624:1,110431:137061:1',
|
||||||
|
'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- Vengeance Demon Hunter (class 12, spec 581) — simc/midnight raid loadout.
|
||||||
|
INSERT IGNORE INTO playerbot_v2_talent_build
|
||||||
|
(class_id, spec_id, context, label, entries_json, source_url) VALUES
|
||||||
|
(12, 581, 2, 'M+: mirrors raid (simc/midnight MID1_DH_Vengeance_Annihilator)',
|
||||||
|
'90929:112839:1,90931:112841:1,90933:112844:1,90934:112845:1,90935:112846:2,90936:112847:2,90938:112849:1,90941:112852:1,90942:112853:1,90946:112859:1,90948:112861:1,90949:112862:2,90950:112863:1,90951:112864:1,90952:112865:1,90953:112866:1,90955:112868:1,90958:112872:2,90959:112873:1,90960:112875:1,90961:112876:1,90962:112877:2,90963:112878:1,90964:112879:1,90968:112883:1,90970:112886:1,90971:112887:1,90972:112888:1,90974:112890:1,90975:112891:1,90977:112893:1,90978:112894:1,90980:112896:1,90981:112897:2,90984:112900:1,90986:112902:1,90987:112903:1,90989:112906:1,90990:112907:1,90991:112908:1,90994:112912:1,90996:112914:2,90999:112917:1,91000:112918:2,91001:112920:1,91002:112921:1,91004:112924:2,91006:112926:1,91007:112927:1,95149:117758:1,95150:117759:1,95151:117761:1,95152:117762:1,99823:134253:1,108722:134271:1,108729:134282:1,109442:135660:1,109443:135661:1,109444:135662:1,109445:135663:1,109446:135664:1,109447:135665:1,109448:135659:1,109449:135667:1,109450:136810:1,109451:135669:1,109452:135670:1,109453:135671:1,109454:135672:1,109455:135673:1,110011:136501:1,110425:137043:1',
|
||||||
|
'https://github.com/simulationcraft/simc/tree/midnight/profiles/MID1');
|
||||||
|
|
||||||
|
-- Future work
|
||||||
|
-- -----------
|
||||||
|
-- M+ for DPS specs (16 specs × M+) — needs fresh decode of method.gg /
|
||||||
|
-- wowhead M+ talent strings. Most diverge from raid in cleave/AoE rows.
|
||||||
|
-- M+ for healers (6 specs × M+) — needs fresh decode; healer M+ vs raid
|
||||||
|
-- diverges on dispel/utility nodes.
|
||||||
|
-- PvP (39 specs × PvP) — separate db2 system; this table can encode the
|
||||||
|
-- PvE talents you'd take for arenas/BGs but cannot encode honor talents.
|
||||||
|
-- Defer until a curated source publishes per-spec PvE-only PvP loadouts.
|
||||||
|
-- Leveling (39 specs × Leveling) — DO NOT seed; TraitMgr starter is
|
||||||
|
-- objectively correct for sub-cap chars and the API loader already
|
||||||
|
-- falls back to it when no curated row exists.
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (8, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
-- Migration: 0009_world_metadata
|
||||||
|
-- Date: 2026-05-22
|
||||||
|
-- Purpose: Persist GM-curated world-knowledge points (road centerlines,
|
||||||
|
-- city/village footprints, crossroads, danger zones, hubs)
|
||||||
|
-- so bots have authoritative situational data independent of
|
||||||
|
-- texture-classifier heuristics. Two consumers:
|
||||||
|
-- 1. mmaps_generator reads `kind='road'` rows at regen time
|
||||||
|
-- and tags polygons within `radius` as NAV_AREA_ROAD.
|
||||||
|
-- Solves the Teldrassil road-tagging gap (kalidar
|
||||||
|
-- tileset's road textures don't pass the classifier's
|
||||||
|
-- effectId confidence gate, leaving zero road MCNKs in
|
||||||
|
-- .road files despite road textures being referenced).
|
||||||
|
-- 2. BotSnapshotBuilder loads same rows once at startup
|
||||||
|
-- and bots query `nearest_metadata(kind)` for awareness
|
||||||
|
-- — "am I in a city?", "is the nearest crossroad N
|
||||||
|
-- yards away?", etc.
|
||||||
|
-- Reverts: yes (DROP TABLE).
|
||||||
|
--
|
||||||
|
-- Population mechanism: in-game GM types `.playerbot meta add road [r]`
|
||||||
|
-- standing on the spot to capture; the command writes a row keyed by
|
||||||
|
-- the GM's current position and zone. List/edit/delete subcommands
|
||||||
|
-- provided. No client-side editor — the in-game capture flow IS the
|
||||||
|
-- editor.
|
||||||
|
--
|
||||||
|
-- Schema versioning: kinds enumerated as a small uint8 set rather than
|
||||||
|
-- VARCHAR so the on-disk column is fixed-width and the C++ side can
|
||||||
|
-- compare against an enum without string match. Names below match
|
||||||
|
-- WorldMetadataKind in code:
|
||||||
|
-- 0=unknown (defensive default)
|
||||||
|
-- 1=road (road centerline waypoint; mmaps_generator consumes)
|
||||||
|
-- 2=crossroad (intersection — used by route planner hints)
|
||||||
|
-- 3=city (capital / major settlement footprint)
|
||||||
|
-- 4=village (minor settlement footprint)
|
||||||
|
-- 5=hub (quest hub / outpost)
|
||||||
|
-- 6=danger (avoid-this-area, e.g. elite spawn zone)
|
||||||
|
-- 7=vendor (general vendor anchor — bot navigation hint)
|
||||||
|
-- 8=mailbox (mailbox anchor)
|
||||||
|
-- 9=innkeeper (innkeeper anchor, e.g. hearth-rebind target)
|
||||||
|
-- 10=other (operator-defined; check label/notes for context)
|
||||||
|
--
|
||||||
|
-- `radius` (yards) is mandatory for area-kinds (city/village/hub/
|
||||||
|
-- danger). For point-kinds (road waypoint, crossroad, vendor, mailbox,
|
||||||
|
-- innkeeper) radius is the "effective range" — e.g. road waypoint with
|
||||||
|
-- radius=15 means polygons within 15y of the point get NAV_AREA_ROAD
|
||||||
|
-- tagged. Default radii are picked by the GM command, not the schema.
|
||||||
|
--
|
||||||
|
-- `zone_id` (Area.db2 ID) is denormalized for fast filter; we DO NOT
|
||||||
|
-- enforce FK because the area table lives in client data we don't
|
||||||
|
-- mirror.
|
||||||
|
--
|
||||||
|
-- Indexes: (map_id, kind) for the most common query (load all roads
|
||||||
|
-- for map X), plus (map_id, x, y) for nearest-point lookups via the
|
||||||
|
-- bot snapshot.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_world_metadata (
|
||||||
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
map_id INT UNSIGNED NOT NULL,
|
||||||
|
zone_id INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
kind TINYINT UNSIGNED NOT NULL,
|
||||||
|
pos_x FLOAT NOT NULL,
|
||||||
|
pos_y FLOAT NOT NULL,
|
||||||
|
pos_z FLOAT NOT NULL,
|
||||||
|
radius FLOAT NOT NULL DEFAULT 10.0,
|
||||||
|
label VARCHAR(96) NOT NULL DEFAULT '',
|
||||||
|
notes VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
created_by VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
KEY idx_map_kind (map_id, kind),
|
||||||
|
KEY idx_map_xy (map_id, pos_x, pos_y),
|
||||||
|
KEY idx_zone (zone_id),
|
||||||
|
KEY idx_kind (kind)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256) VALUES
|
||||||
|
(9, REPEAT('0', 64))
|
||||||
|
ON DUPLICATE KEY UPDATE applied_at = CURRENT_TIMESTAMP;
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
-- Migration: 0010_leveling_zone
|
||||||
|
-- Date: 2026-06-03
|
||||||
|
-- Purpose: Persistent per-bot leveling-zone target for R7 cross-map hub
|
||||||
|
-- relocation. When a bot exhausts its current zone's quests, it
|
||||||
|
-- picks the best level-appropriate hub from QuestHubDatabase::
|
||||||
|
-- GetQuestHubsForBot (ContentTuning DB2 bracket matrix) and STORES
|
||||||
|
-- the choice here so it is STICKY: on server restart the bot reads
|
||||||
|
-- this target and resumes traveling toward it instead of re-picking
|
||||||
|
-- (which, being distance-ranked, would flip-flop / relocate every
|
||||||
|
-- restart). The choice is re-evaluated only with HYSTERESIS — when
|
||||||
|
-- the bot's level moves OUTSIDE [bracket_lo, bracket_hi], the stored
|
||||||
|
-- hub no longer fits and a fresh pick + store happens. 0 hub = unset
|
||||||
|
-- (bot has never needed relocation, or is mid-pick).
|
||||||
|
-- Reverts: yes (DROP COLUMN per added column).
|
||||||
|
|
||||||
|
ALTER TABLE playerbot_v2_character
|
||||||
|
ADD COLUMN leveling_target_hub INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN leveling_target_map SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN leveling_bracket_lo TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN leveling_bracket_hi TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN leveling_chosen_at TIMESTAMP NULL DEFAULT NULL,
|
||||||
|
ADD KEY idx_leveling_target_hub (leveling_target_hub);
|
||||||
|
|
||||||
|
-- Column docs (kept below the ALTER so the migration body stays a single
|
||||||
|
-- statement, per the 0005 convention — the migration parser chokes on
|
||||||
|
-- comment-embedded semicolons inside the statement):
|
||||||
|
-- leveling_target_hub QuestHub.hubId the bot is relocating toward (the
|
||||||
|
-- sticky leveling-zone choice). 0 = unset.
|
||||||
|
-- leveling_target_map Map id of that hub. Drives the UnifiedTravelGraph
|
||||||
|
-- cross-map route (walk/fly/ship — never teleport).
|
||||||
|
-- NOTE map 0 (Eastern Kingdoms) is a REAL map, so
|
||||||
|
-- this field is only meaningful when target_hub != 0.
|
||||||
|
-- leveling_bracket_lo Inclusive min level of the chosen hub's
|
||||||
|
-- leveling_bracket_hi ContentTuning bracket. Hysteresis gate: re-pick a
|
||||||
|
-- new hub only when bot.level < lo OR > hi, so a bot
|
||||||
|
-- that out-levels its zone moves on, but small level
|
||||||
|
-- gains inside the bracket do NOT churn the choice.
|
||||||
|
-- leveling_chosen_at When the current target was chosen. Diagnostics +
|
||||||
|
-- a safety re-pick if a target somehow goes stale
|
||||||
|
-- (e.g. the hub became unreachable).
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256)
|
||||||
|
VALUES (10, 'pending-fill-at-release-time-with-actual-sha256-of-this-file');
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
-- Migration: 0011_fleet_vitals
|
||||||
|
-- Date: 2026-06-14
|
||||||
|
-- Purpose: Persist the fleet-vitals rolling window (#1C of
|
||||||
|
-- docs/LIVING_SERVER_PLAN_20260614.md) so telemetry survives a
|
||||||
|
-- worldserver restart and the operator gets a REAL trend / incident
|
||||||
|
-- replay instead of an in-memory window that resets to zero on every
|
||||||
|
-- bounce. A 60s job in PlayerbotV2.cpp computes one sample bucket
|
||||||
|
-- (the same VitalsBucket pushed into PerfCounters' in-memory ring)
|
||||||
|
-- and writes one row here.
|
||||||
|
--
|
||||||
|
-- Columns mirror PerfCounters::VitalsBucket plus the per-category
|
||||||
|
-- wedge breakdown (cheap to store, makes the persisted history
|
||||||
|
-- self-describing for a later trend dashboard). Counts are the
|
||||||
|
-- instantaneous fleet census at sample time; the *_per_* columns are
|
||||||
|
-- rates derived over the 60s window from cumulative-counter deltas.
|
||||||
|
--
|
||||||
|
-- Reverts: yes (DROP TABLE).
|
||||||
|
--
|
||||||
|
-- Retention: the writer does NOT prune — a row/min is ~525K rows/yr, trivial
|
||||||
|
-- for InnoDB, and operators want the long-tail history for incident
|
||||||
|
-- forensics. If retention is ever needed it's a single scheduled
|
||||||
|
-- DELETE on sample_at; intentionally left to operator policy.
|
||||||
|
--
|
||||||
|
-- Indexing: PRIMARY KEY on the auto-increment id; a secondary KEY on
|
||||||
|
-- sample_at for the common "last 1h / last 24h" range scan the trend
|
||||||
|
-- reader issues.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_fleet_vitals_sample (
|
||||||
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
sample_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
in_world INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
alive INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
in_combat INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
-- Per-category active wedge counts (WedgeCategory enum order; None at
|
||||||
|
-- index 0 is normally 0). Stored as discrete columns so a SQL trend query
|
||||||
|
-- can GROUP/aggregate a single category without parsing a blob.
|
||||||
|
wedged_navmesh INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged_offmesh INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged_travel INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged_combatloop INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged_pickernone INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
wedged_goalunreach INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
tick_p50_us INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
tick_p99_us INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
intents_per_sec INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
intents_dropped INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
path_fail_per_min INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
avg_level FLOAT NOT NULL DEFAULT 0,
|
||||||
|
KEY idx_sample_at (sample_at)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Record this migration as applied.
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256) VALUES
|
||||||
|
(11, REPEAT('0', 64))
|
||||||
|
ON DUPLICATE KEY UPDATE applied_at = CURRENT_TIMESTAMP;
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
-- Migration: 0012_archetype
|
||||||
|
-- Date: 2026-06-14
|
||||||
|
-- Purpose: Per-bot ARCHETYPE foundation (#4A of
|
||||||
|
-- docs/LIVING_SERVER_PLAN_20260614.md). Personality (HOW a bot
|
||||||
|
-- plays) already exists; this adds Archetype (WHAT it does + WHEN it
|
||||||
|
-- is online) so the fleet is heterogeneous — casual-solo, hardcore-
|
||||||
|
-- raider, social-guildie, gatherer/AH-flipper, PvPer, altoholic-
|
||||||
|
-- explorer — the basis of a believable living server and of economy /
|
||||||
|
-- role variety.
|
||||||
|
--
|
||||||
|
-- Columns:
|
||||||
|
-- archetype_id The curated archetype id (index into
|
||||||
|
-- BotArchetype.cpp's kArchetypeTable ==
|
||||||
|
-- ArchetypeId enum). 0 = CasualSolo (the
|
||||||
|
-- default + the value an un-rolled bot
|
||||||
|
-- reads as). Assigned on first spawn via
|
||||||
|
-- RollArchetype(SeedForBot(id)) and
|
||||||
|
-- written back; deterministic per bot so
|
||||||
|
-- it is stable across restarts.
|
||||||
|
-- session_start_at When the bot's CURRENT play session
|
||||||
|
-- began. NULL when logged out. Reserved
|
||||||
|
-- for the session-rhythm logout layer
|
||||||
|
-- (documented followup) — stored now so
|
||||||
|
-- the data is available when that lands.
|
||||||
|
-- cumulative_session_minutes Lifetime online minutes accrued by
|
||||||
|
-- this bot across sessions. Also for the
|
||||||
|
-- future session-rhythm layer. Not
|
||||||
|
-- decremented; monotonic.
|
||||||
|
-- Reverts: yes (DROP COLUMN per added column).
|
||||||
|
|
||||||
|
ALTER TABLE playerbot_v2_character
|
||||||
|
ADD COLUMN archetype_id TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN session_start_at DATETIME NULL DEFAULT NULL,
|
||||||
|
ADD COLUMN cumulative_session_minutes BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD KEY idx_archetype_id (archetype_id);
|
||||||
|
|
||||||
|
-- Record this migration as applied (mirrors the 0011 record-version pattern).
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256) VALUES
|
||||||
|
(12, REPEAT('0', 64))
|
||||||
|
ON DUPLICATE KEY UPDATE applied_at = CURRENT_TIMESTAMP;
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
-- Migration: 0013_craft_orders
|
||||||
|
-- Date: 2026-06-15
|
||||||
|
-- Purpose: Bot-to-bot CRAFT-ORDER BOARD + escrow plumbing (#4B-2(a) part 1 of
|
||||||
|
-- docs/LIVING_SERVER_PLAN_20260614.md). Lets a requester bot post an
|
||||||
|
-- order for an item it can't make itself (escrowing the payment up
|
||||||
|
-- front by debiting its gold), a crafter bot that KNOWS the recipe
|
||||||
|
-- claim + fulfil it, and the escrow release/refund to settle the
|
||||||
|
-- transaction exactly once. This closes the profession economy loop:
|
||||||
|
-- gatherers feed reagents into the AH, crafters turn reagents into
|
||||||
|
-- finished goods on demand, and gold circulates between bots.
|
||||||
|
--
|
||||||
|
-- SECURITY (#4B-2 human-firewall): this is a CLOSED bot-to-bot system.
|
||||||
|
-- requester_low AND crafter_low are re-verified as CURRENT fleet bots
|
||||||
|
-- (Services::Registry()) at every state transition by CraftOrderBoard.
|
||||||
|
-- There is NO GM command / whisper / human entry point — a real player
|
||||||
|
-- can neither post, claim, fulfil, nor extract value from an order.
|
||||||
|
--
|
||||||
|
-- Columns:
|
||||||
|
-- id auto PK; the order id carried by snapshot + intent.
|
||||||
|
-- requester_low Player guid-low of the bot that posted the order
|
||||||
|
-- and whose gold was escrowed.
|
||||||
|
-- crafter_low Player guid-low of the bot that claimed it; NULL
|
||||||
|
-- while the order is still Open.
|
||||||
|
-- spell_id The craft recipe spell the order wants fulfilled.
|
||||||
|
-- item_entry The product item the recipe creates (item_template
|
||||||
|
-- entry), carried so the board / snapshot can describe
|
||||||
|
-- the order without re-resolving the spell.
|
||||||
|
-- quantity How many of the product the requester wants.
|
||||||
|
-- payment_copper The escrowed payment (copper). Debited from the
|
||||||
|
-- requester at PostOrder; paid to the crafter at
|
||||||
|
-- MarkDelivered OR refunded to the requester at
|
||||||
|
-- Fail/Cancel — EXACTLY ONCE, never both, never
|
||||||
|
-- neither. The `status` column is the single source
|
||||||
|
-- of truth that guards which of those two settlements
|
||||||
|
-- (if any) has already happened.
|
||||||
|
-- status 0=Open 1=Claimed 2=Delivered 3=Failed 4=Cancelled.
|
||||||
|
-- created_at When the order was posted (escrow taken).
|
||||||
|
-- claimed_at When a crafter claimed it; NULL while Open.
|
||||||
|
--
|
||||||
|
-- ESCROW INVARIANT (documented here + in CraftOrderBoard.h):
|
||||||
|
-- payment_copper is removed from the requester's gold EXACTLY ONCE,
|
||||||
|
-- at the Open transition (PostOrder). It then has exactly one of two
|
||||||
|
-- terminal fates:
|
||||||
|
-- * Delivered -> paid to the crafter (MarkDelivered), or
|
||||||
|
-- * Failed/Cancelled -> refunded to the requester (FailOrder).
|
||||||
|
-- A row may be settled only while transitioning OUT of a non-terminal
|
||||||
|
-- status (Open/Claimed) INTO a terminal one. Terminal rows
|
||||||
|
-- (Delivered/Failed/Cancelled) are never re-settled, so the gold can
|
||||||
|
-- never be double-released or double-refunded.
|
||||||
|
--
|
||||||
|
-- Reverts: yes (DROP TABLE).
|
||||||
|
--
|
||||||
|
-- Retention: finished rows (Delivered/Failed/Cancelled) are pruned by
|
||||||
|
-- CraftOrderBoard::Tick after a grace window; Open/Claimed rows are
|
||||||
|
-- reconciled into memory on load.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS bot_craft_orders (
|
||||||
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
requester_low BIGINT UNSIGNED NOT NULL,
|
||||||
|
crafter_low BIGINT UNSIGNED NULL DEFAULT NULL,
|
||||||
|
spell_id INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
item_entry INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
quantity INT UNSIGNED NOT NULL DEFAULT 1,
|
||||||
|
payment_copper BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
status TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
claimed_at DATETIME NULL DEFAULT NULL,
|
||||||
|
KEY idx_status (status)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Record this migration as applied (mirrors the 0011/0012 record-version pattern).
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256) VALUES
|
||||||
|
(13, REPEAT('0', 64))
|
||||||
|
ON DUPLICATE KEY UPDATE applied_at = CURRENT_TIMESTAMP;
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
-- Migration: 0014_stuck_objective
|
||||||
|
-- Date: 2026-06-16
|
||||||
|
-- Purpose: Persistent, fleet-aggregated STUCK-OBJECTIVE LEDGER (#7 follow-up).
|
||||||
|
-- The WedgeWatchdog self-remediation layer abandons a bot's current
|
||||||
|
-- objective when it has been wedged (GoalUnreachable / CombatLoop) past
|
||||||
|
-- RemediationMs. That abandon is a 5-minute in-memory blacklist (the
|
||||||
|
-- bot RETRIES automatically once it expires) and, until now, the only
|
||||||
|
-- record of WHICH content stranded bots was the ephemeral
|
||||||
|
-- [wedge_remediate] log line (Playerbot.log is truncated every boot).
|
||||||
|
--
|
||||||
|
-- This table turns the fleet into a self-documenting content-QA system:
|
||||||
|
-- every remediation upserts a row keyed by (quest_id, obj_id), so an
|
||||||
|
-- operator can later run e.g.
|
||||||
|
-- SELECT quest_id, obj_id, category, hit_count, sample_map,
|
||||||
|
-- sample_zone, sample_x, sample_y, sample_bot, last_seen
|
||||||
|
-- FROM playerbot_v2_stuck_objective ORDER BY hit_count DESC LIMIT 50;
|
||||||
|
-- to find the quests/objectives that strand the most bots and root-cause
|
||||||
|
-- them (navmesh gap, off-mesh bridge, bad POI data, friendly-only kill
|
||||||
|
-- target, permanent blacklist, ...). It is the durable, queryable
|
||||||
|
-- successor to the manual log-forensics + character_queststatus queries
|
||||||
|
-- used in the 2026-06-15 cross-region investigation (4494 / 876 / 55660).
|
||||||
|
--
|
||||||
|
-- Columns:
|
||||||
|
-- quest_id / obj_id The stranded objective (obj_id 0 = quest-level /
|
||||||
|
-- no specific sub-objective). Composite PK so each
|
||||||
|
-- distinct objective is one accumulating row.
|
||||||
|
-- category Last WedgeCategory that remediated it
|
||||||
|
-- (GoalUnreachable / CombatLoop).
|
||||||
|
-- hit_count Cumulative remediation events across the whole
|
||||||
|
-- fleet AND across restarts (the writer flushes a
|
||||||
|
-- per-interval delta via hit_count = hit_count +
|
||||||
|
-- VALUES(hit_count)). A high count = chronically
|
||||||
|
-- stuck content worth investigating.
|
||||||
|
-- first_seen When this objective first stranded a bot (set on
|
||||||
|
-- insert, never overwritten).
|
||||||
|
-- last_seen Most recent remediation (updated every flush). A
|
||||||
|
-- stale last_seen ~ the issue resolved itself.
|
||||||
|
-- sample_* A representative stuck location + bot for the
|
||||||
|
-- objective, so an investigator can fly there /
|
||||||
|
-- reproduce without grepping logs.
|
||||||
|
--
|
||||||
|
-- Reverts: yes (DROP TABLE).
|
||||||
|
--
|
||||||
|
-- Retention: the writer does NOT prune — rows are small, bounded by the number
|
||||||
|
-- of DISTINCT stuck objectives (hundreds–low thousands), and the long
|
||||||
|
-- history is the point. Operators may DELETE on last_seen if desired.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS playerbot_v2_stuck_objective (
|
||||||
|
quest_id INT UNSIGNED NOT NULL,
|
||||||
|
obj_id INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
category VARCHAR(24) NOT NULL DEFAULT '',
|
||||||
|
hit_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
first_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
last_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
sample_map INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
sample_zone INT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
sample_x FLOAT NOT NULL DEFAULT 0,
|
||||||
|
sample_y FLOAT NOT NULL DEFAULT 0,
|
||||||
|
sample_bot VARCHAR(48) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (quest_id, obj_id),
|
||||||
|
KEY idx_hit_count (hit_count),
|
||||||
|
KEY idx_last_seen (last_seen)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
-- Record this migration as applied (mirrors the 0011/0012/0013 pattern).
|
||||||
|
INSERT INTO playerbot_v2_schema_version (version, sha256) VALUES
|
||||||
|
(14, REPEAT('0', 64))
|
||||||
|
ON DUPLICATE KEY UPDATE applied_at = CURRENT_TIMESTAMP;
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
|||||||
|
-- Migration: 0016_companion_bots
|
||||||
|
-- Date: 2026-07-22
|
||||||
|
-- Columns applied by Module::Init() via DirectPExecute (idempotent).
|
||||||
|
-- This file exists only as a schema-version marker.
|
||||||
|
|
||||||
|
INSERT IGNORE INTO playerbot_v2_schema_version (version, applied_at, sha256)
|
||||||
|
VALUES (16, NOW(), '0');
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Playerbot V2 — SQL migrations
|
||||||
|
|
||||||
|
Per `v2/SCHEMA.md`. Migration files in this directory are numbered, append-only, and idempotent. Run by `Persistence/PlayerbotMigrationMgr` at module init.
|
||||||
|
|
||||||
|
For full setup instructions (schema creation, config, world fixes) see
|
||||||
|
`v2/INSTALL.md`.
|
||||||
|
|
||||||
|
## Order
|
||||||
|
Applied in ascending numeric order; each file records itself in
|
||||||
|
`playerbot_v2_schema_version`. Current set:
|
||||||
|
|
||||||
|
- `0001_init.sql` — schema_version + core tables (account, character, personality, preferences, population_target)
|
||||||
|
- `0002`–`0014` — owner/squad control, talent builds, population columns, guild metadata, world metadata, leveling zone, fleet vitals, archetype, craft orders, stuck-objective ledger
|
||||||
|
- `0015_name_pool.sql` — the curated ~107k-row random bot **name pool** (`playerbots_names`), shipped with use-state reset so a fresh install starts with the whole pool available
|
||||||
|
|
||||||
|
## Discipline
|
||||||
|
- Never edit a numbered migration after it ships. Add a new one to amend.
|
||||||
|
- Each migration is self-contained: no cross-file dependencies on application order beyond numbering.
|
||||||
|
- Reversibility documented in the file header.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
-- Grant playerbot command permissions to all security levels
|
||||||
|
INSERT IGNORE INTO `rbac_default_permissions` (`secId`, `permissionId`, `realmId`) VALUES
|
||||||
|
(0, 886, -1),
|
||||||
|
(1, 886, -1),
|
||||||
|
(2, 886, -1),
|
||||||
|
(3, 886, -1),
|
||||||
|
(4, 886, -1),
|
||||||
|
(0, 887, -1),
|
||||||
|
(1, 887, -1),
|
||||||
|
(2, 887, -1),
|
||||||
|
(3, 887, -1),
|
||||||
|
(4, 887, -1);
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
-- Playerbot System Tables
|
||||||
|
-- Requires: characters database
|
||||||
|
-- Date: 2026-07-16
|
||||||
|
|
||||||
|
-- Table 1: ai_playerbot_names
|
||||||
|
-- Stores pre-generated bot character names with optional gender/race/class hints
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_names`;
|
||||||
|
CREATE TABLE `ai_playerbot_names` (
|
||||||
|
`name_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(24) NOT NULL,
|
||||||
|
`gender` TINYINT UNSIGNED NOT NULL DEFAULT '255',
|
||||||
|
`race` SMALLINT UNSIGNED NOT NULL DEFAULT '65535',
|
||||||
|
`class` TINYINT UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
`in_use` TINYINT UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`name_id`),
|
||||||
|
KEY `in_use` (`in_use`),
|
||||||
|
KEY `name` (`name`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 2: ai_playerbot_guild_names
|
||||||
|
-- Stores pre-generated bot guild names
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_guild_names`;
|
||||||
|
CREATE TABLE `ai_playerbot_guild_names` (
|
||||||
|
`name_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(24) NOT NULL,
|
||||||
|
PRIMARY KEY (`name_id`),
|
||||||
|
KEY `name` (`name`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 3: ai_playerbot_random_bots
|
||||||
|
-- Tracks random bot lifecycle events (add, randomize, logout, teleport, online)
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_random_bots`;
|
||||||
|
CREATE TABLE `ai_playerbot_random_bots` (
|
||||||
|
`owner` INT UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
`bot` INT UNSIGNED NOT NULL,
|
||||||
|
`time` INT UNSIGNED NOT NULL,
|
||||||
|
`validIn` INT UNSIGNED NOT NULL,
|
||||||
|
`event` VARCHAR(32) NOT NULL,
|
||||||
|
`value` INT UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (`owner`, `bot`, `event`),
|
||||||
|
KEY `bot` (`bot`),
|
||||||
|
KEY `event` (`event`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 4: ai_playerbot_guild_tasks
|
||||||
|
-- Tracks guild kill/item tasks for bots
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_guild_tasks`;
|
||||||
|
CREATE TABLE `ai_playerbot_guild_tasks` (
|
||||||
|
`owner` INT UNSIGNED NOT NULL,
|
||||||
|
`guildid` INT UNSIGNED NOT NULL,
|
||||||
|
`time` INT UNSIGNED NOT NULL,
|
||||||
|
`validIn` INT UNSIGNED NOT NULL,
|
||||||
|
`type` VARCHAR(32) NOT NULL,
|
||||||
|
`value` INT UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (`owner`, `guildid`, `type`),
|
||||||
|
KEY `guildid` (`guildid`),
|
||||||
|
KEY `type` (`type`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 5: ai_playerbot_locks
|
||||||
|
-- Gear lock state for bots (prevents auto-updating gear when locked)
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_locks`;
|
||||||
|
CREATE TABLE `ai_playerbot_locks` (
|
||||||
|
`name_id` INT UNSIGNED NOT NULL,
|
||||||
|
`gearlock` TINYINT UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`name_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 6: ai_playerbot_speech
|
||||||
|
-- Bot speech text categorized by qualifier name
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_speech`;
|
||||||
|
CREATE TABLE `ai_playerbot_speech` (
|
||||||
|
`name` VARCHAR(64) NOT NULL,
|
||||||
|
`text` TEXT NOT NULL,
|
||||||
|
`type` VARCHAR(16) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`name`(64), `text`(255))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 7: ai_playerbot_speech_probability
|
||||||
|
-- Speech probability weights per qualifier name
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_speech_probability`;
|
||||||
|
CREATE TABLE `ai_playerbot_speech_probability` (
|
||||||
|
`name` VARCHAR(64) NOT NULL,
|
||||||
|
`probability` INT UNSIGNED NOT NULL DEFAULT '100',
|
||||||
|
PRIMARY KEY (`name`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Table 8: ai_playerbot_custom_strategy
|
||||||
|
-- Custom strategy action lines
|
||||||
|
DROP TABLE IF EXISTS `ai_playerbot_custom_strategy`;
|
||||||
|
CREATE TABLE `ai_playerbot_custom_strategy` (
|
||||||
|
`name` VARCHAR(64) NOT NULL,
|
||||||
|
`action_line` TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (`name`(64), `action_line`(255))
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Playerbot Guild Names Seed Data
|
||||||
|
-- Generated for TrinityCore Playerbot System
|
||||||
|
|
||||||
|
INSERT INTO `ai_playerbot_guild_names` (`name_id`, `name`) VALUES
|
||||||
|
(1, 'Stormguard'),
|
||||||
|
(2, 'Shadowfang'),
|
||||||
|
(3, 'Dawnbreaker'),
|
||||||
|
(4, 'Ironforge'),
|
||||||
|
(5, 'Silvermoon'),
|
||||||
|
(6, 'Goldshire'),
|
||||||
|
(7, 'Darkhaven'),
|
||||||
|
(8, 'Brightwater'),
|
||||||
|
(9, 'Thunderstrike'),
|
||||||
|
(10, 'Stormchaser'),
|
||||||
|
(11, 'Moonshade'),
|
||||||
|
(12, 'Sunspear'),
|
||||||
|
(13, 'Windwalker'),
|
||||||
|
(14, 'Frostguard'),
|
||||||
|
(15, 'Starfall'),
|
||||||
|
(16, 'Nightbane'),
|
||||||
|
(17, 'Bloodhoof'),
|
||||||
|
(18, 'Deathwhisper'),
|
||||||
|
(19, 'Lightfury'),
|
||||||
|
(20, 'Shadowstep'),
|
||||||
|
(21, 'Boldheart'),
|
||||||
|
(22, 'Fairweather'),
|
||||||
|
(23, 'Highpeak'),
|
||||||
|
(24, 'Longbeard'),
|
||||||
|
(25, 'Stronghold'),
|
||||||
|
(26, 'Deepforge'),
|
||||||
|
(27, 'Wildhammer'),
|
||||||
|
(28, 'Truewind'),
|
||||||
|
(29, 'Brightstar'),
|
||||||
|
(30, 'Darkmoon'),
|
||||||
|
(31, 'Northstar'),
|
||||||
|
(32, 'Eastgate'),
|
||||||
|
(33, 'Southwatch'),
|
||||||
|
(34, 'Westgate'),
|
||||||
|
(35, 'Mountainhold'),
|
||||||
|
(36, 'Riverwatch'),
|
||||||
|
(37, 'Lakerun'),
|
||||||
|
(38, 'Forestkeep'),
|
||||||
|
(39, 'Fieldguard'),
|
||||||
|
(40, 'Hillwatch'),
|
||||||
|
(41, 'Stonewall'),
|
||||||
|
(42, 'Ironbark'),
|
||||||
|
(43, 'Silverleaf'),
|
||||||
|
(44, 'Goldroot'),
|
||||||
|
(45, 'Bronzebeard'),
|
||||||
|
(46, 'Greyguard'),
|
||||||
|
(47, 'Whitepeak'),
|
||||||
|
(48, 'Blackwatch'),
|
||||||
|
(49, 'Redcloud'),
|
||||||
|
(50, 'Bluewind');
|
||||||
@@ -0,0 +1,704 @@
|
|||||||
|
-- Playerbot Names Population
|
||||||
|
-- Generates 1000 bot names with randomized gender/race/class hints
|
||||||
|
|
||||||
|
INSERT INTO `ai_playerbot_names` (`name_id`, `name`, `gender`, `race`, `class`, `in_use`) VALUES
|
||||||
|
(1, 'Thorn', 0, 1, 1, 0),
|
||||||
|
(2, 'Elara', 1, 4, 2, 0),
|
||||||
|
(3, 'Borin', 0, 3, 3, 0),
|
||||||
|
(4, 'Shade', 1, 5, 4, 0),
|
||||||
|
(5, 'Zaren', 0, 2, 5, 0),
|
||||||
|
(6, 'Lyssa', 1, 8, 6, 0),
|
||||||
|
(7, 'Gromm', 0, 6, 7, 0),
|
||||||
|
(8, 'Sylva', 1, 11, 8, 0),
|
||||||
|
(9, 'Vex', 0, 10, 9, 0),
|
||||||
|
(10, 'Mira', 1, 1, 1, 0),
|
||||||
|
(11, 'Durnan', 0, 3, 2, 0),
|
||||||
|
(12, 'Fenris', 0, 8, 3, 0),
|
||||||
|
(13, 'Sera', 1, 4, 4, 0),
|
||||||
|
(14, 'Kael', 0, 10, 5, 0),
|
||||||
|
(15, 'Riven', 1, 5, 6, 0),
|
||||||
|
(16, 'Thrain', 0, 3, 7, 0),
|
||||||
|
(17, 'Vale', 1, 11, 8, 0),
|
||||||
|
(18, 'Zephyr', 0, 1, 9, 0),
|
||||||
|
(19, 'Nyx', 1, 8, 1, 0),
|
||||||
|
(20, 'Orin', 0, 2, 2, 0),
|
||||||
|
(21, 'Bryn', 1, 3, 3, 0),
|
||||||
|
(22, 'Talon', 0, 6, 4, 0),
|
||||||
|
(23, 'Ivy', 1, 4, 5, 0),
|
||||||
|
(24, 'Rook', 0, 10, 6, 0),
|
||||||
|
(25, 'Eira', 1, 11, 7, 0),
|
||||||
|
(26, 'Brorn', 0, 1, 8, 0),
|
||||||
|
(27, 'Kira', 1, 8, 9, 0),
|
||||||
|
(28, 'Dorn', 0, 3, 1, 0),
|
||||||
|
(29, 'Lira', 1, 5, 2, 0),
|
||||||
|
(30, 'Vorn', 0, 6, 3, 0),
|
||||||
|
(31, 'Wren', 1, 4, 4, 0),
|
||||||
|
(32, 'Thane', 0, 2, 5, 0),
|
||||||
|
(33, 'Selene', 1, 11, 6, 0),
|
||||||
|
(34, 'Ragnar', 0, 1, 7, 0),
|
||||||
|
(35, 'Maeve', 1, 10, 8, 0),
|
||||||
|
(36, 'Korr', 0, 6, 9, 0),
|
||||||
|
(37, 'Faye', 1, 8, 1, 0),
|
||||||
|
(38, 'Grimm', 0, 5, 2, 0),
|
||||||
|
(39, 'Lyra', 1, 4, 3, 0),
|
||||||
|
(40, 'Hroth', 0, 2, 4, 0),
|
||||||
|
(41, 'Nara', 1, 1, 5, 0),
|
||||||
|
(42, 'Dolg', 0, 3, 6, 0),
|
||||||
|
(43, 'Siren', 1, 5, 7, 0),
|
||||||
|
(44, 'Fang', 0, 6, 8, 0),
|
||||||
|
(45, 'Myra', 1, 10, 9, 0),
|
||||||
|
(46, 'Torin', 0, 11, 1, 0),
|
||||||
|
(47, 'Astra', 1, 8, 2, 0),
|
||||||
|
(48, 'Gorim', 0, 1, 3, 0),
|
||||||
|
(49, 'Vesper', 1, 4, 4, 0),
|
||||||
|
(50, 'Ulf', 0, 2, 5, 0),
|
||||||
|
(51, 'Rowan', 0, 10, 6, 0),
|
||||||
|
(52, 'Belle', 1, 11, 7, 0),
|
||||||
|
(53, 'Morg', 0, 5, 8, 0),
|
||||||
|
(54, 'Tess', 1, 3, 9, 0),
|
||||||
|
(55, 'Hogan', 0, 6, 1, 0),
|
||||||
|
(56, 'Rune', 1, 1, 2, 0),
|
||||||
|
(57, 'Kade', 0, 8, 3, 0),
|
||||||
|
(58, 'Frey', 1, 4, 4, 0),
|
||||||
|
(59, 'Bael', 0, 2, 5, 0),
|
||||||
|
(60, 'Niamh', 1, 11, 6, 0),
|
||||||
|
(61, 'Tork', 0, 3, 7, 0),
|
||||||
|
(62, 'Saga', 1, 10, 8, 0),
|
||||||
|
(63, 'Zane', 0, 6, 9, 0),
|
||||||
|
(64, 'Illy', 1, 8, 1, 0),
|
||||||
|
(65, 'Dane', 0, 1, 2, 0),
|
||||||
|
(66, 'Oona', 1, 5, 3, 0),
|
||||||
|
(67, 'Garet', 0, 4, 4, 0),
|
||||||
|
(68, 'Lena', 1, 2, 5, 0),
|
||||||
|
(69, 'Truk', 0, 6, 6, 0),
|
||||||
|
(70, 'Yuki', 1, 10, 7, 0),
|
||||||
|
(71, 'Brott', 0, 3, 8, 0),
|
||||||
|
(72, 'Suki', 1, 11, 9, 0),
|
||||||
|
(73, 'Finch', 0, 1, 1, 0),
|
||||||
|
(74, 'Aria', 1, 8, 2, 0),
|
||||||
|
(75, 'Gruul', 0, 2, 3, 0),
|
||||||
|
(76, 'Ezri', 1, 4, 4, 0),
|
||||||
|
(77, 'Morne', 0, 5, 5, 0),
|
||||||
|
(78, 'Tara', 1, 3, 6, 0),
|
||||||
|
(79, 'Baldr', 0, 11, 7, 0),
|
||||||
|
(80, 'Nix', 1, 6, 8, 0),
|
||||||
|
(81, 'Havak', 0, 10, 9, 0),
|
||||||
|
(82, 'Lark', 1, 1, 1, 0),
|
||||||
|
(83, 'Orik', 0, 3, 2, 0),
|
||||||
|
(84, 'Phae', 1, 8, 3, 0),
|
||||||
|
(85, 'Rourk', 0, 6, 4, 0),
|
||||||
|
(86, 'Mavis', 1, 5, 5, 0),
|
||||||
|
(87, 'Durik', 0, 2, 6, 0),
|
||||||
|
(88, 'Sybil', 1, 10, 7, 0),
|
||||||
|
(89, 'Gorak', 0, 4, 8, 0),
|
||||||
|
(90, 'Willow', 1, 11, 9, 0),
|
||||||
|
(91, 'Tyr', 0, 1, 1, 0),
|
||||||
|
(92, 'Eris', 1, 8, 2, 0),
|
||||||
|
(93, 'Grend', 0, 6, 3, 0),
|
||||||
|
(94, 'Petra', 1, 3, 4, 0),
|
||||||
|
(95, 'Krohn', 0, 2, 5, 0),
|
||||||
|
(96, 'Leela', 1, 4, 6, 0),
|
||||||
|
(97, 'Malkor', 0, 10, 7, 0),
|
||||||
|
(98, 'Nissa', 1, 11, 8, 0),
|
||||||
|
(99, 'Bog', 0, 5, 9, 0),
|
||||||
|
(100, 'Tiva', 1, 1, 1, 0),
|
||||||
|
(101, 'Aldric', 0, 1, 1, 0),
|
||||||
|
(102, 'Branwen', 1, 4, 2, 0),
|
||||||
|
(103, 'Cedric', 0, 3, 3, 0),
|
||||||
|
(104, 'Drisana', 1, 8, 4, 0),
|
||||||
|
(105, 'Eadric', 0, 10, 5, 0),
|
||||||
|
(106, 'Faelan', 0, 11, 6, 0),
|
||||||
|
(107, 'Gwyneth', 1, 4, 7, 0),
|
||||||
|
(108, 'Hadrian', 0, 1, 8, 0),
|
||||||
|
(109, 'Iseult', 1, 10, 9, 0),
|
||||||
|
(110, 'Jareth', 0, 6, 1, 0),
|
||||||
|
(111, 'Kaelen', 0, 2, 2, 0),
|
||||||
|
(112, 'Liriel', 1, 8, 3, 0),
|
||||||
|
(113, 'Morwen', 1, 5, 4, 0),
|
||||||
|
(114, 'Nevyn', 0, 11, 5, 0),
|
||||||
|
(115, 'Orlaith', 1, 3, 6, 0),
|
||||||
|
(116, 'Phelan', 0, 1, 7, 0),
|
||||||
|
(117, 'Quinn', 1, 10, 8, 0),
|
||||||
|
(118, 'Rhian', 1, 4, 9, 0),
|
||||||
|
(119, 'Soren', 0, 2, 1, 0),
|
||||||
|
(120, 'Tristan', 0, 6, 2, 0),
|
||||||
|
(121, 'Ulric', 0, 3, 3, 0),
|
||||||
|
(122, 'Vivien', 1, 8, 4, 0),
|
||||||
|
(123, 'Wulfric', 0, 6, 5, 0),
|
||||||
|
(124, 'Xanthe', 1, 11, 6, 0),
|
||||||
|
(125, 'Yseult', 1, 4, 7, 0),
|
||||||
|
(126, 'Zander', 0, 2, 8, 0),
|
||||||
|
(127, 'Aelfric', 0, 1, 9, 0),
|
||||||
|
(128, 'Brynn', 1, 3, 1, 0),
|
||||||
|
(129, 'Corbin', 0, 5, 2, 0),
|
||||||
|
(130, 'Drusilla', 1, 10, 3, 0),
|
||||||
|
(131, 'Eldon', 0, 11, 4, 0),
|
||||||
|
(132, 'Fenella', 1, 4, 5, 0),
|
||||||
|
(133, 'Godric', 0, 1, 6, 0),
|
||||||
|
(134, 'Helga', 1, 6, 7, 0),
|
||||||
|
(135, 'Isolde', 1, 8, 8, 0),
|
||||||
|
(136, 'Jorund', 0, 2, 9, 0),
|
||||||
|
(137, 'Keth', 0, 10, 1, 0),
|
||||||
|
(138, 'Lucian', 0, 5, 2, 0),
|
||||||
|
(139, 'Mirabel', 1, 3, 3, 0),
|
||||||
|
(140, 'Nerys', 1, 11, 4, 0),
|
||||||
|
(141, 'Osric', 0, 1, 5, 0),
|
||||||
|
(142, 'Pryderi', 0, 4, 6, 0),
|
||||||
|
(143, 'Ragnarok', 0, 6, 7, 0),
|
||||||
|
(144, 'Seren', 1, 8, 8, 0),
|
||||||
|
(145, 'Torsten', 0, 2, 9, 0),
|
||||||
|
(146, 'Una', 1, 10, 1, 0),
|
||||||
|
(147, 'Varian', 0, 1, 2, 0),
|
||||||
|
(148, 'Wynne', 1, 5, 3, 0),
|
||||||
|
(149, 'Yorick', 0, 6, 4, 0),
|
||||||
|
(150, 'Zelda', 1, 11, 5, 0),
|
||||||
|
(151, 'Alistair', 0, 1, 6, 0),
|
||||||
|
(152, 'Brienne', 1, 4, 7, 0),
|
||||||
|
(153, 'Caius', 0, 3, 8, 0),
|
||||||
|
(154, 'Deanna', 1, 10, 9, 0),
|
||||||
|
(155, 'Evander', 0, 2, 1, 0),
|
||||||
|
(156, 'Freya', 1, 6, 2, 0),
|
||||||
|
(157, 'Gideon', 0, 5, 3, 0),
|
||||||
|
(158, 'Harlow', 1, 8, 4, 0),
|
||||||
|
(159, 'Icarus', 0, 11, 5, 0),
|
||||||
|
(160, 'Jaina', 1, 3, 6, 0),
|
||||||
|
(161, 'Korben', 0, 1, 7, 0),
|
||||||
|
(162, 'Lilith', 1, 10, 8, 0),
|
||||||
|
(163, 'Marius', 0, 4, 9, 0),
|
||||||
|
(164, 'Nadia', 1, 2, 1, 0),
|
||||||
|
(165, 'Octavia', 1, 8, 2, 0),
|
||||||
|
(166, 'Percival', 0, 1, 3, 0),
|
||||||
|
(167, 'Ravenna', 1, 5, 4, 0),
|
||||||
|
(168, 'Silas', 0, 6, 5, 0),
|
||||||
|
(169, 'Titania', 1, 11, 6, 0),
|
||||||
|
(170, 'Uther', 0, 3, 7, 0),
|
||||||
|
(171, 'Valkyrie', 1, 6, 8, 0),
|
||||||
|
(172, 'Wesley', 0, 10, 9, 0),
|
||||||
|
(173, 'Xerxes', 0, 2, 1, 0),
|
||||||
|
(174, 'Ygraine', 1, 4, 2, 0),
|
||||||
|
(175, 'Zephyra', 1, 8, 3, 0),
|
||||||
|
(176, 'Aric', 0, 1, 4, 0),
|
||||||
|
(177, 'Beryl', 1, 3, 5, 0),
|
||||||
|
(178, 'Conrad', 0, 5, 6, 0),
|
||||||
|
(179, 'Daphne', 1, 10, 7, 0),
|
||||||
|
(180, 'Emrys', 0, 11, 8, 0),
|
||||||
|
(181, 'Fiona', 1, 4, 9, 0),
|
||||||
|
(182, 'Gareth', 0, 1, 1, 0),
|
||||||
|
(183, 'Helene', 1, 8, 2, 0),
|
||||||
|
(184, 'Ignis', 0, 2, 3, 0),
|
||||||
|
(185, 'Juniper', 1, 6, 4, 0),
|
||||||
|
(186, 'Kurt', 0, 3, 5, 0),
|
||||||
|
(187, 'Lavender', 1, 11, 6, 0),
|
||||||
|
(188, 'Magnus', 0, 1, 7, 0),
|
||||||
|
(189, 'Nyx', 1, 10, 8, 0),
|
||||||
|
(190, 'Oberon', 0, 5, 9, 0),
|
||||||
|
(191, 'Portia', 1, 4, 1, 0),
|
||||||
|
(192, 'Quentin', 0, 2, 2, 0),
|
||||||
|
(193, 'Roxana', 1, 8, 3, 0),
|
||||||
|
(194, 'Siegfried', 0, 6, 4, 0),
|
||||||
|
(195, 'Tabitha', 1, 3, 5, 0),
|
||||||
|
(196, 'Ulric', 0, 1, 6, 0),
|
||||||
|
(197, 'Vespera', 1, 11, 7, 0),
|
||||||
|
(198, 'Wolfgang', 0, 10, 8, 0),
|
||||||
|
(199, 'Xenia', 1, 5, 9, 0),
|
||||||
|
(200, 'Yannick', 0, 4, 1, 0),
|
||||||
|
(201, 'Aelar', 0, 4, 2, 0),
|
||||||
|
(202, 'Brynjar', 0, 6, 3, 0),
|
||||||
|
(203, 'Caelan', 0, 10, 4, 0),
|
||||||
|
(204, 'Dagny', 1, 3, 5, 0),
|
||||||
|
(205, 'Eldrin', 0, 1, 6, 0),
|
||||||
|
(206, 'Fjola', 1, 6, 7, 0),
|
||||||
|
(207, 'Gunnar', 0, 2, 8, 0),
|
||||||
|
(208, 'Hilda', 1, 5, 9, 0),
|
||||||
|
(209, 'Ingrid', 1, 11, 1, 0),
|
||||||
|
(210, 'Jorunn', 1, 6, 2, 0),
|
||||||
|
(211, 'Ketill', 0, 3, 3, 0),
|
||||||
|
(212, 'Lagertha', 1, 1, 4, 0),
|
||||||
|
(213, 'Mimir', 0, 8, 5, 0),
|
||||||
|
(214, 'Njord', 0, 2, 6, 0),
|
||||||
|
(215, 'Odin', 0, 1, 7, 0),
|
||||||
|
(216, 'Runa', 1, 4, 8, 0),
|
||||||
|
(217, 'Sigrid', 1, 6, 9, 0),
|
||||||
|
(218, 'Tyr', 0, 1, 1, 0),
|
||||||
|
(219, 'Ulfhednar', 0, 2, 2, 0),
|
||||||
|
(220, 'Viggo', 0, 10, 3, 0),
|
||||||
|
(221, 'Yrsa', 1, 8, 4, 0),
|
||||||
|
(222, 'Asger', 0, 3, 5, 0),
|
||||||
|
(223, 'Borghild', 1, 3, 6, 0),
|
||||||
|
(224, 'Didrik', 0, 4, 7, 0),
|
||||||
|
(225, 'Eirik', 0, 1, 8, 0),
|
||||||
|
(226, 'Freydis', 1, 5, 9, 0),
|
||||||
|
(227, 'Gorm', 0, 2, 1, 0),
|
||||||
|
(228, 'Hakon', 0, 6, 2, 0),
|
||||||
|
(229, 'Isgerd', 1, 10, 3, 0),
|
||||||
|
(230, 'Kari', 1, 1, 4, 0),
|
||||||
|
(231, 'Leif', 0, 3, 5, 0),
|
||||||
|
(232, 'Mikkel', 0, 8, 6, 0),
|
||||||
|
(233, 'Nanna', 1, 4, 7, 0),
|
||||||
|
(234, 'Orvar', 0, 6, 8, 0),
|
||||||
|
(235, 'Rikard', 0, 2, 9, 0),
|
||||||
|
(236, 'Sif', 1, 11, 1, 0),
|
||||||
|
(237, 'Toke', 0, 5, 2, 0),
|
||||||
|
(238, 'Valdis', 1, 6, 3, 0),
|
||||||
|
(239, 'Yngvar', 0, 1, 4, 0),
|
||||||
|
(240, 'Aelfwine', 0, 4, 5, 0),
|
||||||
|
(241, 'Berthold', 0, 3, 6, 0),
|
||||||
|
(242, 'Clothilde', 1, 10, 7, 0),
|
||||||
|
(243, 'Dietrich', 0, 2, 8, 0),
|
||||||
|
(244, 'Erembour', 0, 8, 9, 0),
|
||||||
|
(245, 'Faramir', 0, 1, 1, 0),
|
||||||
|
(246, 'Grimhild', 1, 5, 2, 0),
|
||||||
|
(247, 'Hildebrand', 0, 11, 3, 0),
|
||||||
|
(248, 'Isolde', 1, 4, 4, 0),
|
||||||
|
(249, 'Kriemhild', 1, 6, 5, 0),
|
||||||
|
(250, 'Lorelei', 1, 8, 6, 0),
|
||||||
|
(251, 'Meinrad', 0, 3, 7, 0),
|
||||||
|
(252, 'Notger', 0, 1, 8, 0),
|
||||||
|
(253, 'Ortwin', 0, 2, 9, 0),
|
||||||
|
(254, 'Reinmar', 0, 5, 1, 0),
|
||||||
|
(255, 'Seigwald', 0, 6, 2, 0),
|
||||||
|
(256, 'Theodoric', 0, 10, 3, 0),
|
||||||
|
(257, 'Volker', 0, 4, 4, 0),
|
||||||
|
(258, 'Wigand', 0, 1, 5, 0),
|
||||||
|
(259, 'Zerline', 1, 8, 6, 0),
|
||||||
|
(260, 'Athalstan', 0, 1, 7, 0),
|
||||||
|
(261, 'Beorn', 0, 2, 8, 0),
|
||||||
|
(262, 'Ceolwulf', 0, 3, 9, 0),
|
||||||
|
(263, 'Deorwynn', 1, 4, 1, 0),
|
||||||
|
(264, 'Eadgard', 0, 5, 2, 0),
|
||||||
|
(265, 'Frithugyth', 1, 6, 3, 0),
|
||||||
|
(266, 'Godwine', 0, 11, 4, 0),
|
||||||
|
(267, 'Hereward', 0, 8, 5, 0),
|
||||||
|
(268, 'Leofric', 0, 10, 6, 0),
|
||||||
|
(269, 'Mildryth', 1, 1, 7, 0),
|
||||||
|
(270, 'Ordgar', 0, 2, 8, 0),
|
||||||
|
(271, 'Sigeweard', 0, 3, 9, 0),
|
||||||
|
(272, 'Wulfstan', 0, 4, 1, 0),
|
||||||
|
(273, 'Aethelred', 0, 5, 2, 0),
|
||||||
|
(274, 'Burgred', 0, 6, 3, 0),
|
||||||
|
(275, 'Cenwulf', 0, 11, 4, 0),
|
||||||
|
(276, 'Ecgberht', 0, 1, 5, 0),
|
||||||
|
(277, 'Osgar', 0, 2, 6, 0),
|
||||||
|
(278, 'Wulfgar', 0, 8, 7, 0),
|
||||||
|
(279, 'Aelle', 1, 10, 8, 0),
|
||||||
|
(280, 'Badda', 1, 3, 9, 0),
|
||||||
|
(281, 'Cutha', 1, 4, 1, 0),
|
||||||
|
(282, 'Penda', 0, 1, 2, 0),
|
||||||
|
(283, 'Sabert', 0, 5, 3, 0),
|
||||||
|
(284, 'Seaxwulf', 0, 6, 4, 0),
|
||||||
|
(285, 'Tondberht', 0, 2, 5, 0),
|
||||||
|
(286, 'Wigthegn', 0, 11, 6, 0),
|
||||||
|
(287, 'Sigehelm', 0, 3, 7, 0),
|
||||||
|
(288, 'Aethelhere', 0, 4, 8, 0),
|
||||||
|
(289, 'Anna', 1, 1, 9, 0),
|
||||||
|
(290, 'Botwulf', 0, 8, 1, 0),
|
||||||
|
(291, 'Cissa', 1, 10, 2, 0),
|
||||||
|
(292, 'Eorpwald', 0, 5, 3, 0),
|
||||||
|
(293, 'Foer', 0, 6, 4, 0),
|
||||||
|
(294, 'Gipeswic', 0, 2, 5, 0),
|
||||||
|
(295, 'Hryp', 0, 3, 6, 0),
|
||||||
|
(296, 'Icanho', 0, 1, 7, 0),
|
||||||
|
(297, 'Loeg', 0, 4, 8, 0),
|
||||||
|
(298, 'Mael', 0, 11, 9, 0),
|
||||||
|
(299, 'Norf', 0, 8, 1, 0),
|
||||||
|
(300, 'Oundle', 0, 10, 2, 0),
|
||||||
|
(301, 'Peak', 0, 5, 3, 0),
|
||||||
|
(302, 'Reoda', 0, 6, 4, 0),
|
||||||
|
(303, 'Sudb', 0, 2, 5, 0),
|
||||||
|
(304, 'Tuda', 0, 3, 6, 0),
|
||||||
|
(305, 'Ubban', 0, 1, 7, 0),
|
||||||
|
(306, 'Weal', 0, 4, 8, 0),
|
||||||
|
(307, 'Ythanc', 0, 11, 9, 0),
|
||||||
|
(308, 'Arvak', 0, 6, 1, 0),
|
||||||
|
(309, 'Blodugh', 1, 8, 2, 0),
|
||||||
|
(310, 'Delling', 0, 10, 3, 0),
|
||||||
|
(311, 'Eikthyrnir', 0, 2, 4, 0),
|
||||||
|
(312, 'Fensal', 1, 4, 5, 0),
|
||||||
|
(313, 'Gladsheim', 0, 1, 6, 0),
|
||||||
|
(314, 'Himinbjorg', 0, 3, 7, 0),
|
||||||
|
(315, 'Idavoll', 0, 5, 8, 0),
|
||||||
|
(316, 'Jotunheim', 0, 6, 9, 0),
|
||||||
|
(317, 'Kvasir', 0, 11, 1, 0),
|
||||||
|
(318, 'Lidskialf', 0, 2, 2, 0),
|
||||||
|
(319, 'Mimir', 0, 1, 3, 0),
|
||||||
|
(320, 'Noatum', 1, 8, 4, 0),
|
||||||
|
(321, 'Okkolnir', 0, 10, 5, 0),
|
||||||
|
(322, 'Ragnarok', 0, 4, 6, 0),
|
||||||
|
(323, 'Sessrumnir', 0, 5, 7, 0),
|
||||||
|
(324, 'Thrudheim', 0, 6, 8, 0),
|
||||||
|
(325, 'Urd', 1, 3, 9, 0),
|
||||||
|
(326, 'Valaskialf', 0, 11, 1, 0),
|
||||||
|
(327, 'Yggdrasil', 0, 2, 2, 0),
|
||||||
|
(328, 'Alfheim', 0, 8, 3, 0),
|
||||||
|
(329, 'Bilskirnir', 0, 1, 4, 0),
|
||||||
|
(330, 'Folkvang', 0, 10, 5, 0),
|
||||||
|
(331, 'Gimle', 1, 4, 6, 0),
|
||||||
|
(332, 'Helheim', 0, 5, 7, 0),
|
||||||
|
(333, 'Muspelheim', 0, 6, 8, 0),
|
||||||
|
(334, 'Niflhel', 1, 3, 9, 0),
|
||||||
|
(335, 'Vanaheim', 0, 11, 1, 0),
|
||||||
|
(336, 'Andor', 0, 2, 2, 0),
|
||||||
|
(337, 'Belen', 0, 8, 3, 0),
|
||||||
|
(338, 'Cernunnos', 0, 1, 4, 0),
|
||||||
|
(339, 'Danu', 1, 10, 5, 0),
|
||||||
|
(340, 'Epona', 1, 4, 6, 0),
|
||||||
|
(341, 'Grian', 1, 5, 7, 0),
|
||||||
|
(342, 'Lugh', 0, 6, 8, 0),
|
||||||
|
(343, 'Morrigan', 1, 3, 9, 0),
|
||||||
|
(344, 'Nuada', 0, 11, 1, 0),
|
||||||
|
(345, 'Ogma', 0, 2, 2, 0),
|
||||||
|
(346, 'Tailtiu', 1, 8, 3, 0),
|
||||||
|
(347, 'Balor', 0, 1, 4, 0),
|
||||||
|
(348, 'Cian', 0, 10, 5, 0),
|
||||||
|
(349, 'Diancecht', 0, 4, 6, 0),
|
||||||
|
(350, 'Goibniu', 0, 5, 7, 0),
|
||||||
|
(351, 'Macha', 1, 6, 8, 0),
|
||||||
|
(352, 'Nechtan', 0, 3, 9, 0),
|
||||||
|
(353, 'Aine', 1, 11, 1, 0),
|
||||||
|
(354, 'Bres', 0, 2, 2, 0),
|
||||||
|
(355, 'Cromm', 0, 8, 3, 0),
|
||||||
|
(356, 'Etain', 1, 1, 4, 0),
|
||||||
|
(357, 'Flidais', 1, 10, 5, 0),
|
||||||
|
(358, 'Midir', 0, 4, 6, 0),
|
||||||
|
(359, 'Nemain', 1, 5, 7, 0),
|
||||||
|
(360, 'Bodb', 0, 6, 8, 0),
|
||||||
|
(361, 'Cailleach', 1, 3, 9, 0),
|
||||||
|
(362, 'Arawn', 0, 11, 1, 0),
|
||||||
|
(363, 'Beli', 0, 2, 2, 0),
|
||||||
|
(364, 'Cerridwen', 1, 8, 3, 0),
|
||||||
|
(365, 'Dylan', 0, 1, 4, 0),
|
||||||
|
(366, 'Gwydion', 0, 10, 5, 0),
|
||||||
|
(367, 'Lleu', 0, 4, 6, 0),
|
||||||
|
(368, 'Mabon', 0, 5, 7, 0),
|
||||||
|
(369, 'Pwyll', 0, 6, 8, 0),
|
||||||
|
(370, 'Rhiannon', 1, 3, 9, 0),
|
||||||
|
(371, 'Taliesin', 0, 11, 1, 0),
|
||||||
|
(372, 'Brigid', 1, 2, 2, 0),
|
||||||
|
(373, 'Creidhne', 0, 8, 3, 0),
|
||||||
|
(374, 'Ebir', 0, 1, 4, 0),
|
||||||
|
(375, 'Fionn', 0, 10, 5, 0),
|
||||||
|
(376, 'Glas', 1, 4, 6, 0),
|
||||||
|
(377, 'Lir', 0, 5, 7, 0),
|
||||||
|
(378, 'Mider', 0, 6, 8, 0),
|
||||||
|
(379, 'Sengann', 0, 3, 9, 0),
|
||||||
|
(380, 'Tuan', 0, 11, 1, 0),
|
||||||
|
(381, 'Aengus', 0, 2, 2, 0),
|
||||||
|
(382, 'Bregon', 0, 1, 3, 0),
|
||||||
|
(383, 'Cessair', 1, 8, 4, 0),
|
||||||
|
(384, 'Delbna', 1, 10, 5, 0),
|
||||||
|
(385, 'Eremon', 0, 4, 6, 0),
|
||||||
|
(386, 'Firbolg', 0, 5, 7, 0),
|
||||||
|
(387, 'Ith', 0, 6, 8, 0),
|
||||||
|
(388, 'Miled', 0, 3, 9, 0),
|
||||||
|
(389, 'Partholon', 0, 11, 1, 0),
|
||||||
|
(390, 'Calatin', 0, 2, 2, 0),
|
||||||
|
(391, 'Daire', 0, 1, 3, 0),
|
||||||
|
(392, 'Eogan', 0, 8, 4, 0),
|
||||||
|
(393, 'Fergus', 0, 10, 5, 0),
|
||||||
|
(394, 'Labraid', 0, 4, 6, 0),
|
||||||
|
(395, 'Maelduin', 0, 5, 7, 0),
|
||||||
|
(396, 'Oscar', 0, 6, 8, 0),
|
||||||
|
(397, 'Rury', 0, 3, 9, 0),
|
||||||
|
(398, 'Sualtam', 0, 11, 1, 0),
|
||||||
|
(399, 'Uathach', 1, 2, 2, 0),
|
||||||
|
(400, 'Aife', 1, 1, 3, 0),
|
||||||
|
(401, 'Briccriu', 0, 8, 4, 0),
|
||||||
|
(402, 'Curoi', 0, 10, 5, 0),
|
||||||
|
(403, 'Conchobar', 0, 4, 6, 0),
|
||||||
|
(404, 'Deichtine', 1, 5, 7, 0),
|
||||||
|
(405, 'Eimhir', 1, 6, 8, 0),
|
||||||
|
(406, 'Fand', 1, 3, 9, 0),
|
||||||
|
(407, 'Sencha', 0, 11, 1, 0),
|
||||||
|
(408, 'Blai', 1, 2, 2, 0),
|
||||||
|
(409, 'Crimthann', 0, 1, 3, 0),
|
||||||
|
(410, 'Eterscel', 0, 8, 4, 0),
|
||||||
|
(411, 'Goll', 0, 10, 5, 0),
|
||||||
|
(412, 'Lugaid', 0, 4, 6, 0),
|
||||||
|
(413, 'Mugain', 1, 5, 7, 0),
|
||||||
|
(414, 'Nath', 0, 6, 8, 0),
|
||||||
|
(415, 'Aldric', 0, 3, 9, 0),
|
||||||
|
(416, 'Bram', 0, 11, 1, 0),
|
||||||
|
(417, 'Colm', 0, 2, 2, 0),
|
||||||
|
(418, 'Daireann', 1, 1, 3, 0),
|
||||||
|
(419, 'Donn', 0, 8, 4, 0),
|
||||||
|
(420, 'Emer', 1, 10, 5, 0),
|
||||||
|
(421, 'Feidelm', 1, 4, 6, 0),
|
||||||
|
(422, 'Cet', 0, 5, 7, 0),
|
||||||
|
(423, 'Ailill', 0, 6, 8, 0),
|
||||||
|
(424, 'Bec', 0, 3, 9, 0),
|
||||||
|
(425, 'Daithi', 0, 11, 1, 0),
|
||||||
|
(426, 'Tuathal', 0, 2, 2, 0),
|
||||||
|
(427, 'Eochaid', 0, 1, 3, 0),
|
||||||
|
(428, 'Fachtna', 0, 8, 4, 0),
|
||||||
|
(429, 'Rath', 0, 10, 5, 0),
|
||||||
|
(430, 'Sli', 0, 4, 6, 0),
|
||||||
|
(431, 'Tadhg', 0, 5, 7, 0),
|
||||||
|
(432, 'Art', 0, 6, 8, 0),
|
||||||
|
(433, 'Buide', 0, 3, 9, 0),
|
||||||
|
(434, 'Cairbre', 0, 11, 1, 0),
|
||||||
|
(435, 'Dathi', 0, 2, 2, 0),
|
||||||
|
(436, 'Elcmar', 0, 1, 3, 0),
|
||||||
|
(437, 'Ir', 0, 8, 4, 0),
|
||||||
|
(438, 'Maine', 0, 10, 5, 0),
|
||||||
|
(439, 'Nia', 0, 4, 6, 0),
|
||||||
|
(440, 'Scota', 1, 5, 7, 0),
|
||||||
|
(441, 'Tea', 1, 6, 8, 0),
|
||||||
|
(442, 'Berba', 1, 3, 9, 0),
|
||||||
|
(443, 'Corb', 0, 11, 1, 0),
|
||||||
|
(444, 'Doll', 1, 2, 2, 0),
|
||||||
|
(445, 'Ethne', 1, 1, 3, 0),
|
||||||
|
(446, 'Gran', 1, 8, 4, 0),
|
||||||
|
(447, 'Assa', 1, 10, 5, 0),
|
||||||
|
(448, 'Torc', 0, 4, 6, 0),
|
||||||
|
(449, 'Uall', 0, 5, 7, 0),
|
||||||
|
(450, 'Brega', 1, 6, 8, 0),
|
||||||
|
(451, 'Cerna', 1, 3, 9, 0),
|
||||||
|
(452, 'Dubh', 0, 11, 1, 0),
|
||||||
|
(453, 'Finn', 0, 2, 2, 0),
|
||||||
|
(454, 'Glas', 1, 1, 3, 0),
|
||||||
|
(455, 'Lon', 0, 8, 4, 0),
|
||||||
|
(456, 'Odran', 0, 10, 5, 0),
|
||||||
|
(457, 'Ronan', 0, 4, 6, 0),
|
||||||
|
(458, 'Sodelb', 1, 5, 7, 0),
|
||||||
|
(459, 'Tren', 0, 6, 8, 0),
|
||||||
|
(460, 'Fulgent', 0, 3, 9, 0),
|
||||||
|
(461, 'Aura', 1, 11, 1, 0),
|
||||||
|
(462, 'Caelestis', 1, 2, 2, 0),
|
||||||
|
(463, 'Glacies', 1, 1, 3, 0),
|
||||||
|
(464, 'Ignis', 0, 8, 4, 0),
|
||||||
|
(465, 'Lux', 1, 10, 5, 0),
|
||||||
|
(466, 'Nox', 1, 4, 6, 0),
|
||||||
|
(467, 'Ordo', 0, 5, 7, 0),
|
||||||
|
(468, 'Pax', 1, 6, 8, 0),
|
||||||
|
(469, 'Sol', 1, 3, 9, 0),
|
||||||
|
(470, 'Stella', 1, 11, 1, 0),
|
||||||
|
(471, 'Bellator', 0, 2, 2, 0),
|
||||||
|
(472, 'Custos', 0, 1, 3, 0),
|
||||||
|
(473, 'Dux', 0, 8, 4, 0),
|
||||||
|
(474, 'Ferrum', 0, 10, 5, 0),
|
||||||
|
(475, 'Gladius', 0, 4, 6, 0),
|
||||||
|
(476, 'Miles', 0, 5, 7, 0),
|
||||||
|
(477, 'Scutum', 0, 6, 8, 0),
|
||||||
|
(478, 'Sagitta', 1, 3, 9, 0),
|
||||||
|
(479, 'Arcanus', 0, 11, 1, 0),
|
||||||
|
(480, 'Scientia', 1, 2, 2, 0),
|
||||||
|
(481, 'Verbum', 0, 1, 3, 0),
|
||||||
|
(482, 'Aquila', 1, 8, 4, 0),
|
||||||
|
(483, 'Leo', 0, 10, 5, 0),
|
||||||
|
(484, 'Lupus', 0, 4, 6, 0),
|
||||||
|
(485, 'Ursa', 1, 5, 7, 0),
|
||||||
|
(486, 'Vulpes', 1, 6, 8, 0),
|
||||||
|
(487, 'Corvus', 0, 3, 9, 0),
|
||||||
|
(488, 'Falco', 0, 11, 1, 0),
|
||||||
|
(489, 'Alauda', 1, 2, 2, 0),
|
||||||
|
(490, 'Ciconia', 1, 1, 3, 0),
|
||||||
|
(491, 'Ardea', 1, 8, 4, 0),
|
||||||
|
(492, 'Bubo', 0, 10, 5, 0),
|
||||||
|
(493, 'Cuculus', 0, 4, 6, 0),
|
||||||
|
(494, 'Gallus', 0, 5, 7, 0),
|
||||||
|
(495, 'Merula', 1, 6, 8, 0),
|
||||||
|
(496, 'Monedula', 1, 3, 9, 0),
|
||||||
|
(497, 'Noctua', 1, 11, 1, 0),
|
||||||
|
(498, 'Picumnus', 0, 2, 2, 0),
|
||||||
|
(499, 'Hyacinth', 1, 1, 3, 0),
|
||||||
|
(500, 'Iris', 1, 8, 4, 0),
|
||||||
|
(501, 'Laurus', 0, 10, 5, 0),
|
||||||
|
(502, 'Myrtus', 0, 4, 6, 0),
|
||||||
|
(503, 'Quercus', 0, 5, 7, 0),
|
||||||
|
(504, 'Salix', 1, 6, 8, 0),
|
||||||
|
(505, 'Ulmus', 0, 3, 9, 0),
|
||||||
|
(506, 'Vitis', 1, 11, 1, 0),
|
||||||
|
(507, 'Buxus', 0, 2, 2, 0),
|
||||||
|
(508, 'Cedrus', 0, 1, 3, 0),
|
||||||
|
(509, 'Fagus', 0, 8, 4, 0),
|
||||||
|
(510, 'Ilex', 0, 10, 5, 0),
|
||||||
|
(511, 'Taxus', 0, 4, 6, 0),
|
||||||
|
(512, 'Tilia', 1, 5, 7, 0),
|
||||||
|
(513, 'Acer', 0, 6, 8, 0),
|
||||||
|
(514, 'Alnus', 0, 3, 9, 0),
|
||||||
|
(515, 'Carpinus', 0, 11, 1, 0),
|
||||||
|
(516, 'Aesculus', 0, 2, 2, 0),
|
||||||
|
(517, 'Fraxinus', 0, 1, 3, 0),
|
||||||
|
(518, 'Liquidambar', 0, 8, 4, 0),
|
||||||
|
(519, 'Platanus', 0, 10, 5, 0),
|
||||||
|
(520, 'Populus', 0, 4, 6, 0),
|
||||||
|
(521, 'Robur', 0, 5, 7, 0),
|
||||||
|
(522, 'Sambucus', 0, 6, 8, 0),
|
||||||
|
(523, 'Asklepios', 0, 3, 9, 0),
|
||||||
|
(524, 'Briareos', 0, 11, 1, 0),
|
||||||
|
(525, 'Charon', 0, 2, 2, 0),
|
||||||
|
(526, 'Deimos', 0, 1, 3, 0),
|
||||||
|
(527, 'Erebos', 0, 8, 4, 0),
|
||||||
|
(528, 'Hypnos', 0, 10, 5, 0),
|
||||||
|
(529, 'Iapetos', 0, 4, 6, 0),
|
||||||
|
(530, 'Koios', 0, 5, 7, 0),
|
||||||
|
(531, 'Letha', 1, 6, 8, 0),
|
||||||
|
(532, 'Moros', 0, 3, 9, 0),
|
||||||
|
(533, 'Nereus', 0, 11, 1, 0),
|
||||||
|
(534, 'Oizys', 1, 2, 2, 0),
|
||||||
|
(535, 'Pallas', 0, 1, 3, 0),
|
||||||
|
(536, 'Selene', 1, 8, 4, 0),
|
||||||
|
(537, 'Thanatos', 0, 10, 5, 0),
|
||||||
|
(538, 'Eos', 1, 4, 6, 0),
|
||||||
|
(539, 'Helios', 0, 5, 7, 0),
|
||||||
|
(540, 'Nyx', 1, 6, 8, 0),
|
||||||
|
(541, 'Kronos', 0, 3, 9, 0),
|
||||||
|
(542, 'Rheia', 1, 11, 1, 0),
|
||||||
|
(543, 'Atlas', 0, 2, 2, 0),
|
||||||
|
(544, 'Echo', 1, 1, 3, 0),
|
||||||
|
(545, 'Iris', 1, 8, 4, 0),
|
||||||
|
(546, 'Styx', 1, 10, 5, 0),
|
||||||
|
(547, 'Tyche', 1, 4, 6, 0),
|
||||||
|
(548, 'Zelos', 0, 5, 7, 0),
|
||||||
|
(549, 'Bia', 1, 6, 8, 0),
|
||||||
|
(550, 'Kratos', 0, 3, 9, 0),
|
||||||
|
(551, 'Nike', 1, 11, 1, 0),
|
||||||
|
(552, 'Adrestia', 1, 2, 2, 0),
|
||||||
|
(553, 'Astraea', 1, 1, 3, 0),
|
||||||
|
(554, 'Dike', 1, 8, 4, 0),
|
||||||
|
(555, 'Eirene', 1, 10, 5, 0),
|
||||||
|
(556, 'Eunomia', 1, 4, 6, 0),
|
||||||
|
(557, 'Hegemone', 1, 5, 7, 0),
|
||||||
|
(558, 'Horme', 1, 6, 8, 0),
|
||||||
|
(559, 'Kakia', 1, 3, 9, 0),
|
||||||
|
(560, 'Arete', 1, 11, 1, 0),
|
||||||
|
(561, 'Eucleia', 1, 2, 2, 0),
|
||||||
|
(562, 'Eupheme', 1, 1, 3, 0),
|
||||||
|
(563, 'Philophrosyne', 1, 8, 4, 0),
|
||||||
|
(564, 'Ariadne', 1, 10, 5, 0),
|
||||||
|
(565, 'Cassiopeia', 1, 4, 6, 0),
|
||||||
|
(566, 'Erigone', 1, 5, 7, 0),
|
||||||
|
(567, 'Herophile', 1, 6, 8, 0),
|
||||||
|
(568, 'Manto', 1, 3, 9, 0),
|
||||||
|
(569, 'Medea', 1, 11, 1, 0),
|
||||||
|
(570, 'Phaedra', 1, 2, 2, 0),
|
||||||
|
(571, 'Xanthe', 1, 1, 3, 0),
|
||||||
|
(572, 'Chloe', 1, 8, 4, 0),
|
||||||
|
(573, 'Daphne', 1, 10, 5, 0),
|
||||||
|
(574, 'Hecuba', 1, 4, 6, 0),
|
||||||
|
(575, 'Laodice', 1, 5, 7, 0),
|
||||||
|
(576, 'Myrrha', 1, 6, 8, 0),
|
||||||
|
(577, 'Penthesilea', 1, 3, 9, 0),
|
||||||
|
(578, 'Alcestis', 1, 11, 1, 0),
|
||||||
|
(579, 'Andromache', 1, 2, 2, 0),
|
||||||
|
(580, 'Deianira', 1, 1, 3, 0),
|
||||||
|
(581, 'Europa', 1, 8, 4, 0),
|
||||||
|
(582, 'Harmonia', 1, 10, 5, 0),
|
||||||
|
(583, 'Iphigenia', 1, 4, 6, 0),
|
||||||
|
(584, 'Jocasta', 1, 5, 7, 0),
|
||||||
|
(585, 'Niobe', 1, 6, 8, 0),
|
||||||
|
(586, 'Persephone', 1, 3, 9, 0),
|
||||||
|
(587, 'Pyrrha', 1, 11, 1, 0),
|
||||||
|
(588, 'Thetis', 1, 2, 2, 0),
|
||||||
|
(589, 'Acrisius', 0, 1, 3, 0),
|
||||||
|
(590, 'Actor', 0, 2, 4, 0),
|
||||||
|
(591, 'Alcmaon', 0, 3, 5, 0),
|
||||||
|
(592, 'Antenor', 0, 4, 6, 0),
|
||||||
|
(593, 'Autolycus', 0, 5, 7, 0),
|
||||||
|
(594, 'Bellerophon', 0, 6, 8, 0),
|
||||||
|
(595, 'Chiron', 0, 8, 9, 0),
|
||||||
|
(596, 'Daedalus', 0, 10, 1, 0),
|
||||||
|
(597, 'Eleusis', 0, 11, 2, 0),
|
||||||
|
(598, 'Glaucus', 0, 1, 3, 0),
|
||||||
|
(599, 'Hippolytus', 0, 2, 4, 0),
|
||||||
|
(600, 'Iamus', 0, 3, 5, 0),
|
||||||
|
(601, 'Laertes', 0, 4, 6, 0),
|
||||||
|
(602, 'Melampus', 0, 5, 7, 0),
|
||||||
|
(603, 'Neoptolemus', 0, 6, 8, 0),
|
||||||
|
(604, 'Oicles', 0, 8, 9, 0),
|
||||||
|
(605, 'Peleus', 0, 10, 1, 0),
|
||||||
|
(606, 'Rhadamanthus', 0, 11, 2, 0),
|
||||||
|
(607, 'Sisyphus', 0, 1, 3, 0),
|
||||||
|
(608, 'Teiresias', 0, 2, 4, 0),
|
||||||
|
(609, 'Albinus', 0, 3, 5, 0),
|
||||||
|
(610, 'Augustus', 0, 4, 6, 0),
|
||||||
|
(611, 'Cato', 0, 5, 7, 0),
|
||||||
|
(612, 'Cicero', 0, 6, 8, 0),
|
||||||
|
(613, 'Drusus', 0, 8, 9, 0),
|
||||||
|
(614, 'Fabius', 0, 10, 1, 0),
|
||||||
|
(615, 'Galla', 1, 11, 2, 0),
|
||||||
|
(616, 'Horatia', 1, 1, 3, 0),
|
||||||
|
(617, 'Junia', 1, 2, 4, 0),
|
||||||
|
(618, 'Livia', 1, 3, 5, 0),
|
||||||
|
(619, 'Marcella', 1, 4, 6, 0),
|
||||||
|
(620, 'Nigrina', 1, 5, 7, 0),
|
||||||
|
(621, 'Octavia', 1, 6, 8, 0),
|
||||||
|
(622, 'Paulina', 1, 8, 9, 0),
|
||||||
|
(623, 'Quinctia', 1, 10, 1, 0),
|
||||||
|
(624, 'Rufina', 1, 11, 2, 0),
|
||||||
|
(625, 'Servilia', 1, 1, 3, 0),
|
||||||
|
(626, 'Tullia', 1, 2, 4, 0),
|
||||||
|
(627, 'Ulpia', 1, 3, 5, 0),
|
||||||
|
(628, 'Valeria', 1, 4, 6, 0),
|
||||||
|
(629, 'Vipsania', 1, 5, 7, 0),
|
||||||
|
(630, 'Allectus', 0, 6, 8, 0),
|
||||||
|
(631, 'Carausius', 0, 8, 9, 0),
|
||||||
|
(632, 'Constantius', 0, 10, 1, 0),
|
||||||
|
(633, 'Domitianus', 0, 11, 2, 0),
|
||||||
|
(634, 'Gratian', 0, 1, 3, 0),
|
||||||
|
(635, 'Honorius', 0, 2, 4, 0),
|
||||||
|
(636, 'Justinian', 0, 3, 5, 0),
|
||||||
|
(637, 'Licinius', 0, 4, 6, 0),
|
||||||
|
(638, 'Maximian', 0, 5, 7, 0),
|
||||||
|
(639, 'Numerian', 0, 6, 8, 0),
|
||||||
|
(640, 'Probus', 0, 8, 9, 0),
|
||||||
|
(641, 'Severus', 0, 10, 1, 0),
|
||||||
|
(642, 'Tacitus', 0, 11, 2, 0),
|
||||||
|
(643, 'Aurelian', 0, 1, 3, 0),
|
||||||
|
(644, 'Claudius', 0, 2, 4, 0),
|
||||||
|
(645, 'Decius', 0, 3, 5, 0),
|
||||||
|
(646, 'Florianus', 0, 4, 6, 0),
|
||||||
|
(647, 'Gallienus', 0, 5, 7, 0),
|
||||||
|
(648, 'Macrinus', 0, 6, 8, 0),
|
||||||
|
(649, 'Nepotian', 0, 8, 9, 0),
|
||||||
|
(650, 'Anullinus', 0, 10, 1, 0),
|
||||||
|
(651, 'Celsus', 0, 11, 2, 0),
|
||||||
|
(652, 'Titianus', 0, 1, 3, 0),
|
||||||
|
(653, 'Ursus', 0, 2, 4, 0),
|
||||||
|
(654, 'Victor', 0, 3, 5, 0),
|
||||||
|
(655, 'Asterius', 0, 4, 6, 0),
|
||||||
|
(656, 'Cornelius', 0, 5, 7, 0),
|
||||||
|
(657, 'Dexter', 0, 6, 8, 0),
|
||||||
|
(658, 'Firmus', 0, 8, 9, 0),
|
||||||
|
(659, 'Iustus', 0, 10, 1, 0),
|
||||||
|
(660, 'Laetus', 0, 11, 2, 0),
|
||||||
|
(661, 'Marinus', 0, 1, 3, 0),
|
||||||
|
(662, 'Regulus', 0, 2, 4, 0),
|
||||||
|
(663, 'Agrippa', 0, 3, 5, 0),
|
||||||
|
(664, 'Balbinus', 0, 4, 6, 0),
|
||||||
|
(665, 'Capitolinus', 0, 5, 7, 0),
|
||||||
|
(666, 'Catilina', 0, 6, 8, 0),
|
||||||
|
(667, 'Cinna', 0, 8, 9, 0),
|
||||||
|
(668, 'Lucullus', 0, 10, 1, 0),
|
||||||
|
(669, 'Marius', 0, 11, 2, 0),
|
||||||
|
(670, 'Pompeius', 0, 1, 3, 0),
|
||||||
|
(671, 'Romulus', 0, 2, 4, 0),
|
||||||
|
(672, 'Scipio', 0, 3, 5, 0),
|
||||||
|
(673, 'Sulla', 0, 4, 6, 0),
|
||||||
|
(674, 'Varro', 0, 5, 7, 0),
|
||||||
|
(675, 'Ambrosius', 0, 6, 8, 0),
|
||||||
|
(676, 'Cassivellaunus', 0, 8, 9, 0),
|
||||||
|
(677, 'Cunobelinus', 0, 10, 1, 0),
|
||||||
|
(678, 'Vortigern', 0, 11, 2, 0),
|
||||||
|
(679, 'Cerdic', 0, 1, 3, 0),
|
||||||
|
(680, 'Cynric', 0, 2, 4, 0),
|
||||||
|
(681, 'Caewlin', 0, 3, 5, 0),
|
||||||
|
(682, 'Aethelberht', 0, 4, 6, 0),
|
||||||
|
(683, 'Raedwald', 0, 5, 7, 0),
|
||||||
|
(684, 'Eorpwald', 0, 6, 8, 0),
|
||||||
|
(685, 'Sigeberht', 0, 8, 9, 0),
|
||||||
|
(686, 'Oswald', 0, 10, 1, 0),
|
||||||
|
(687, 'Oswiu', 0, 11, 2, 0),
|
||||||
|
(688, 'Ecgfrith', 0, 1, 3, 0),
|
||||||
|
(689, 'Aldfrith', 0, 2, 4, 0),
|
||||||
|
(690, 'Coenred', 0, 3, 5, 0),
|
||||||
|
(691, 'Ceolred', 0, 4, 6, 0),
|
||||||
|
(692, 'Aethelbald', 0, 5, 7, 0),
|
||||||
|
(693, 'Offa', 0, 6, 8, 0),
|
||||||
|
(694, 'Coenwulf', 0, 8, 9, 0),
|
||||||
|
(695, 'Beornwulf', 0, 10, 1, 0),
|
||||||
|
(696, 'Burgred', 0, 11, 2, 0),
|
||||||
|
(697, 'Aethelwulf', 0, 1, 3, 0),
|
||||||
|
(698, 'Aethelbald', 0, 2, 4, 0),
|
||||||
|
(699, 'Eadweard', 0, 3, 5, 0),
|
||||||
|
(700, 'Aelfweard', 0, 4, 6, 0);
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "SocialMgr.h" // SOCIAL_FLAG_FRIEND/IGNORED for friend ops
|
#include "SocialMgr.h" // SOCIAL_FLAG_FRIEND/IGNORED for friend ops
|
||||||
#include "CalendarMgr.h" // sCalendarMgr for calendar_rsvp_all_pending
|
#include "CalendarMgr.h" // sCalendarMgr for calendar_rsvp_all_pending
|
||||||
#include "SpellAuraDefines.h"
|
#include "SpellAuraDefines.h"
|
||||||
|
#include "SpellAuras.h"
|
||||||
#include "Pet.h"
|
#include "Pet.h"
|
||||||
#include "PetAI.h"
|
#include "PetAI.h"
|
||||||
#include "CreatureAI.h"
|
#include "CreatureAI.h"
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
#include "GroupMgr.h"
|
#include "GroupMgr.h"
|
||||||
#include "ChatPackets.h"
|
#include "ChatPackets.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
|
#include "Log.h"
|
||||||
#include "PartyPackets.h"
|
#include "PartyPackets.h"
|
||||||
#include "GameObject.h"
|
#include "GameObject.h"
|
||||||
#include "GameObjectAI.h"
|
#include "GameObjectAI.h"
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "Define.h"
|
#include "Define.h"
|
||||||
#include "ObjectGuid.h"
|
#include "ObjectGuid.h"
|
||||||
|
#include "Position.h"
|
||||||
#include "SharedDefines.h"
|
#include "SharedDefines.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|||||||
@@ -1,103 +1,49 @@
|
|||||||
# PlayerbotV2 — Installation Guide
|
# PlayerbotV2 — Installation Guide
|
||||||
|
|
||||||
Apply these changes to a clean TrinityCore source tree to enable the
|
Two core-hooks patches are shipped for different host cores:
|
||||||
PlayerbotV2 module. Each section lists the exact file, line (approximate —
|
|
||||||
may shift with TC updates), and the change needed.
|
|
||||||
|
|
||||||
There are two installation methods:
|
| Patch | Target | Description |
|
||||||
|
|-------|--------|-------------|
|
||||||
|
| `playerbotv2_core_hooks.patch` | Stock TrinityCore `master` (f1d9bbe9ca) | Full V2 bundle — core hooks, accessors, DB statements, module harness, build wiring |
|
||||||
|
| `playerbotv2_core_hooks.thordekk.patch` | ThordekkCore `main` (4db5b776e2) | V2-only — assumes ThordekkCore already carries fork API additions (`GetTargetIcon`, `virtual SendPacket`, etc.) |
|
||||||
|
|
||||||
1. **Quick install (recommended): git patch** — see Section 1. One command,
|
Apply the patch that matches your target core, then copy the module into place:
|
||||||
applies the module + all core hooks + build integration automatically.
|
|
||||||
Every core hook is wrapped in an `#if TRINITY_PLAYERBOT_V2` guard, so the
|
|
||||||
core files stay clean and the whole integration can be toggled via
|
|
||||||
`-DBUILD_PLAYERBOT_V2`.
|
|
||||||
2. **Manual install** — see Sections 2–6. Copy the changes by hand.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. Quick Install (Recommended): Git Patch
|
|
||||||
|
|
||||||
The repository ships a single patch file that turns a clean TrinityCore tree
|
|
||||||
into a PlayerbotV2-enabled one:
|
|
||||||
|
|
||||||
```
|
|
||||||
playerbotv2_core_hooks.patch
|
|
||||||
```
|
|
||||||
|
|
||||||
It contains:
|
|
||||||
|
|
||||||
- the full module: `src/modules/PlayerbotV2/` (all 14 sub-libraries)
|
|
||||||
- the core forwarding headers: `src/server/game/Playerbot/`
|
|
||||||
- the command script: `src/server/scripts/Commands/cs_playerbot_v2.cpp`
|
|
||||||
- every core hook (each a self-delineated `#if TRINITY_PLAYERBOT_V2` block)
|
|
||||||
- the build integration (`cmake/options.cmake`, `src/modules/CMakeLists.txt`,
|
|
||||||
and the `game` / `scripts` / `worldserver` CMakeLists)
|
|
||||||
|
|
||||||
### Applying the patch
|
|
||||||
|
|
||||||
From a clean TrinityCore checkout:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git apply playerbotv2_core_hooks.patch
|
# Step 1: apply the core hooks patch for your target
|
||||||
|
git apply src/modules/PlayerbotV2/playerbotv2_core_hooks.patch
|
||||||
|
|
||||||
|
# Step 2: if you applied the thordekk variant, skip to step 3.
|
||||||
|
# For stock TC, the patch already includes src/modules/Common and
|
||||||
|
# src/modules/CMakeLists.txt.
|
||||||
|
|
||||||
|
# Step 3: configure and build
|
||||||
|
cmake -S . -B build -DBUILD_PLAYERBOT_V2=ON
|
||||||
|
cmake --build build --target worldserver
|
||||||
```
|
```
|
||||||
|
|
||||||
> If you have no local commits yet, `git am playerbotv2_core_hooks.patch`
|
Every hook in the patch is wrapped in `#if TRINITY_PLAYERBOT_V2`, so if you
|
||||||
> also works (it produces one commit).
|
build without `-DBUILD_PLAYERBOT_V2=ON` the changes compile to no-ops.
|
||||||
|
|
||||||
Then configure and build (see Section 8).
|
### Regenerating the patch
|
||||||
|
|
||||||
### Keeping a dedicated branch (leaves `origin` untouched)
|
The patches live in the repo at `src/modules/PlayerbotV2/`. Run
|
||||||
|
`/tmp/opencode/gen_v2_patch.sh` followed by the V2-only hunk filter
|
||||||
|
(`/tmp/opencode/filter_v2.py`) to regenerate the stock-TC patch. Hand-edit
|
||||||
|
the output to drop fork-noise hunks and add module-required core APIs
|
||||||
|
that stock TC lacks (`GetTargetIcon`, `virtual SendPacket`).
|
||||||
|
|
||||||
To keep the module on its own branch without touching the `origin` remote,
|
For ThordekkCore, diff the patched worktree against clean `thordekk/main`
|
||||||
create a branch from your upstream base and apply the patch onto it:
|
excluding the module directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# From your clone:
|
git diff thordekk/main -- . ':(exclude)src/modules/PlayerbotV2' \
|
||||||
git checkout -b playerbotv2-module origin/master # or tc-upstream/master
|
> src/modules/PlayerbotV2/playerbotv2_core_hooks.thordekk.patch
|
||||||
git apply playerbotv2_core_hooks.patch
|
|
||||||
git add -A
|
|
||||||
git commit -m "Add PlayerbotV2 module + core hooks"
|
|
||||||
|
|
||||||
# Push it to a remote that is NOT origin (e.g. your module repo):
|
|
||||||
git remote add playerbot-v2 <your-module-repo-url> # once
|
|
||||||
git push -u playerbot-v2 playerbotv2-module
|
|
||||||
```
|
|
||||||
|
|
||||||
`origin` and all its branches are never modified by these commands; the
|
|
||||||
branch is purely local until you push it to the chosen remote.
|
|
||||||
|
|
||||||
### Regenerating the patch after edits
|
|
||||||
|
|
||||||
The patch is generated from a clean base so it stays self-contained:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git diff <clean-base>..HEAD -- \
|
|
||||||
src/modules/PlayerbotV2/ src/server/game/Playerbot/ \
|
|
||||||
src/server/scripts/Commands/cs_playerbot_v2.cpp \
|
|
||||||
cmake/options.cmake src/modules/CMakeLists.txt \
|
|
||||||
src/server/game/CMakeLists.txt src/server/scripts/CMakeLists.txt \
|
|
||||||
src/server/scripts/Commands/cs_script_loader.cpp src/server/worldserver/CMakeLists.txt \
|
|
||||||
src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Unit/Unit.cpp \
|
|
||||||
src/server/game/Server/WorldSession.cpp src/server/game/Server/WorldSession.h \
|
|
||||||
src/server/game/World/World.cpp src/server/game/Handlers/CharacterHandler.cpp \
|
|
||||||
src/server/game/Handlers/ChatHandler.cpp src/server/game/Handlers/BattleGroundHandler.cpp \
|
|
||||||
src/server/game/Handlers/LootHandler.cpp src/server/game/Handlers/ItemHandler.cpp \
|
|
||||||
src/server/game/Handlers/LFGHandler.cpp src/server/game/Handlers/NPCHandler.cpp \
|
|
||||||
src/server/game/DungeonFinding/LFGMgr.cpp src/server/game/Battlegrounds/BattlegroundQueue.cpp \
|
|
||||||
src/server/game/Guilds/Guild.cpp \
|
|
||||||
> playerbotv2_core_hooks.patch
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace `<clean-base>` with the upstream commit you want the patch rooted at
|
|
||||||
(e.g. `tc-upstream/master`). Verify it still applies to a clean tree first:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git apply --check playerbotv2_core_hooks.patch
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. World Thread Integration
|
## 3. World Thread Integration
|
||||||
|
|
||||||
**File:** `src/server/game/World/World.cpp`
|
**File:** `src/server/game/World/World.cpp`
|
||||||
|
|
||||||
@@ -113,7 +59,7 @@ git apply --check playerbotv2_core_hooks.patch
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Core Hook Points
|
## 4. Core Hook Points
|
||||||
|
|
||||||
### Entity Hooks
|
### Entity Hooks
|
||||||
|
|
||||||
@@ -242,7 +188,7 @@ class WorldSession {
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. Script Registration
|
## 5. Script Registration
|
||||||
|
|
||||||
**File:** `src/server/scripts/Commands/cs_script_loader.cpp`
|
**File:** `src/server/scripts/Commands/cs_script_loader.cpp`
|
||||||
|
|
||||||
@@ -259,7 +205,7 @@ and is compiled as part of the `scripts_commands` library.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Build System Integration
|
## 6. Build System Integration
|
||||||
|
|
||||||
**File:** `src/server/worldserver/CMakeLists.txt`
|
**File:** `src/server/worldserver/CMakeLists.txt`
|
||||||
|
|
||||||
@@ -316,7 +262,7 @@ The umbrella `playerbot-v2` INTERFACE library links all 14 sub-libs transitively
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Directory Structure After Installation
|
## 7. Directory Structure After Installation
|
||||||
|
|
||||||
```
|
```
|
||||||
src/
|
src/
|
||||||
@@ -353,7 +299,7 @@ src/
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. Core Files Touched (Summary)
|
## 8. Core Files Touched (Summary)
|
||||||
|
|
||||||
| File | # of hooks | Category |
|
| File | # of hooks | Category |
|
||||||
|------|-----------|----------|
|
|------|-----------|----------|
|
||||||
@@ -375,20 +321,20 @@ src/
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. First-Time Setup
|
## 9. First-Time Setup
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Apply the module — recommended: `git apply playerbotv2_core_hooks.patch`
|
# 1. Apply the bundled patch (Section 1) — this covers all core hooks,
|
||||||
# (Section 1). Manual fallback: apply Sections 2–5 by hand.
|
# forwarding headers, and build integration in one step
|
||||||
# 2. Configure and build:
|
# 3. Configure and build:
|
||||||
cmake -S . -B build -DBUILD_PLAYERBOT_V2=ON
|
cmake -S . -B build -DBUILD_PLAYERBOT_V2=ON
|
||||||
cmake --build build --target worldserver
|
cmake --build build --target worldserver
|
||||||
|
|
||||||
# 3. Apply DB migrations (optional — altbot table auto-creates on first use):
|
# 4. Apply DB migrations (optional — altbot table auto-creates on first use):
|
||||||
mysql < src/modules/PlayerbotV2/sql/world/0007_playerbot_v2_altbot.sql
|
mysql < src/modules/PlayerbotV2/sql/world/0007_playerbot_v2_altbot.sql
|
||||||
|
|
||||||
# 4. Copy config:
|
# 5. Copy config:
|
||||||
cp src/modules/PlayerbotV2/conf/playerbot.conf.dist <server_etc_dir>/playerbot.conf
|
cp src/modules/PlayerbotV2/conf/playerbot.conf.dist <server_etc_dir>/playerbot.conf
|
||||||
|
|
||||||
# 5. Start worldserver — the module initializes automatically
|
# 6. Start worldserver — the module initializes automatically
|
||||||
```
|
```
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user