-- mw4print MySQL database schema
-- Tables are created automatically by mw4print on first export.
-- This file documents the structure for reference.
--
-- Prerequisites: create the database first, then configure mw4print.ini:
--
--   [MySQLExport]
--   Enabled=1
--   Host=192.168.1.100
--   Port=3306
--   Database=firestorm_stats
--   Username=mw4
--   Password=yourpassword
--   ExportEvents=0
--
-- Run this script manually if you want to pre-create the tables,
-- or just let mw4print create them on first connect.

CREATE TABLE IF NOT EXISTS `match` (
  `match_id`       INT UNSIGNED     NOT NULL AUTO_INCREMENT,
  `match_time`     DATETIME         NOT NULL,
  `server_name`    VARCHAR(256)     NOT NULL DEFAULT '',
  `server_ip`      VARCHAR(64)      NOT NULL DEFAULT '',
  `map_name`       VARCHAR(128)     NOT NULL DEFAULT '',
  `scenario_name`  VARCHAR(128)     NOT NULL DEFAULT '',
  `game_type`      INT              NOT NULL DEFAULT 0,
  `game_type_name` VARCHAR(64)      NOT NULL DEFAULT '',
  `is_team_game`   TINYINT(1)       NOT NULL DEFAULT 0,
  `player_count`   INT              NOT NULL DEFAULT 0,
  `team_count`     INT              NOT NULL DEFAULT 0,
  `team_scores`    VARCHAR(64)      NOT NULL DEFAULT '',   -- comma-separated team totals: t0,t1,...,t7
  `game_length`    INT              NOT NULL DEFAULT 0,
  `kill_limit`     INT              NOT NULL DEFAULT 0,    -- 0 = no limit
  `respawn_limit`  INT              NOT NULL DEFAULT 0,    -- 0 = no limit
  `friendly_fire`  INT              NOT NULL DEFAULT 0,    -- percentage
  `heat_on`        TINYINT(1)       NOT NULL DEFAULT 0,
  `armor_mode`     TINYINT(1)       NOT NULL DEFAULT 0,
  `unlimited_ammo` TINYINT(1)       NOT NULL DEFAULT 0,
  `is_night`       TINYINT(1)       NOT NULL DEFAULT 0,
  `min_tonnage`    INT              NOT NULL DEFAULT 0,
  `max_tonnage`    INT              NOT NULL DEFAULT 0,
  PRIMARY KEY (`match_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- game_type values (from GameTypes.h):
--   0  StockDestruction        1  StockTeamDestruction
--   2  StockAttrition          3  StockTeamAttrition
--   4  StockCaptureTheFlag     5  StockKingOfTheHill
--   6  StockTeamKingOfTheHill  7  StockTerritories
--   8  StockStealTheBacon      9  StockCaptureBase
--  10  StockDestroyObjective  11  StockEscort
--  12  StockMasterTrial       13  StockSiegeAssault
--  14  StockCampaign          15  CustomDestruction
--  16  CustomTeamDestruction  17  CustomAttrition
--  18  CustomTeamAttrition    19  CustomCaptureTheFlag
--  20  CustomKingOfTheHill    21  CustomTeamKingOfTheHill
--  22  CustomTerritories      23  CustomStealTheBacon
--  24  CustomCaptureBase      25  CustomDestroyObjective
--  26  CustomEscort           27  CustomMasterTrial
--  28  CustomSiegeAssault     29  CustomCampaign


CREATE TABLE IF NOT EXISTS `player_result` (
  `result_id`   INT UNSIGNED  NOT NULL AUTO_INCREMENT,
  `match_id`    INT UNSIGNED  NOT NULL,
  `player_name` VARCHAR(64)   NOT NULL DEFAULT '',
  `mech_name`   VARCHAR(64)   NOT NULL DEFAULT '',
  `team`        INT           NOT NULL DEFAULT 0,    -- 0-7; meaningless in FFA (team_count=0)
  `score`       INT           NOT NULL DEFAULT 0,
  `kills`       INT           NOT NULL DEFAULT 0,
  `deaths`      INT           NOT NULL DEFAULT 0,
  `is_bot`      TINYINT(1)    NOT NULL DEFAULT 0,
  `pilot_decal` INT           NOT NULL DEFAULT 0,    -- decal index 0-63
  PRIMARY KEY (`result_id`),
  KEY `match_id` (`match_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `pvp` (
  `pvp_id`    INT UNSIGNED  NOT NULL AUTO_INCREMENT,
  `match_id`  INT UNSIGNED  NOT NULL,
  `attacker`  VARCHAR(64)   NOT NULL DEFAULT '',   -- player_name of attacker
  `victim`    VARCHAR(64)   NOT NULL DEFAULT '',   -- player_name of victim
  `kills`     INT           NOT NULL DEFAULT 0,    -- times attacker killed victim
  `score`     INT           NOT NULL DEFAULT 0,    -- score attacker earned from victim
  PRIMARY KEY (`pvp_id`),
  KEY `match_id` (`match_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- Optional: populated only when ExportEvents=1 in mw4print.ini.
-- Can generate thousands of rows per match; off by default.
CREATE TABLE IF NOT EXISTS `event` (
  `event_id`   INT UNSIGNED  NOT NULL AUTO_INCREMENT,
  `match_id`   INT UNSIGNED  NOT NULL,
  `event_type` INT           NOT NULL DEFAULT 0,   -- CBucketManager::Bucket_Type (see below)
  `actor`      VARCHAR(64)   NOT NULL DEFAULT '',
  `target`     VARCHAR(64)   NOT NULL DEFAULT '',
  `weapon`     INT           NOT NULL DEFAULT 0,
  `body_zone`  INT           NOT NULL DEFAULT 0,   -- DamageObject zone (see below)
  `param`      INT           NOT NULL DEFAULT 0,   -- context-dependent value
  PRIMARY KEY (`event_id`),
  KEY `match_id` (`match_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- event_type values (CBucketManager::Bucket_Type):
--   0  KILL_LINK               1  DEATH_LINK
--   2  KILLS                   3  FRIENDLY_KILLS
--   4  ENEMY_KILLS             5  KILLS_BY_TONNAGE
--   6  FRIENDLY_KILLS_BY_TONNAGE  7  ENEMY_KILLS_BY_TONNAGE
--   8  DEATHS                  9  SUICIDES
--  10  DAMAGE_INFLICT         11  FRIENDLY_DAMAGE_INFLICT
--  12  ENEMY_DAMAGE_INFLICT   13  DAMAGE_RECEIVE
--  14  FRIENDLY_DAMAGE_RECEIVE  15  ENEMY_DAMAGE_RECEIVE
--  16  COMPONENT_KILLS        17  COMPONENT_DEATHS
--  18  FRIENDLY_COMPONENT_KILLS  19  FRIENDLY_COMPONENT_DEATHS
--  20  ENEMY_COMPONENT_KILLS  21  ENEMY_COMPONENT_DEATHS
--  22  DFA                    23  SHOTS_HIT
--  24  SHOTS_FIRED            25  HEAD_SHOTS
--  26  ARM_SHOTS              27  LEG_SHOTS
--  28  TORSO_SHOTS            29  KILLS_PC
--  30  KILLS_AI               31  BLANK
--  32  SHUTDOWN_TIMER         33  OBJECTIVE
--  34  OBJECTIVE_CONTESTED    35  OBJECTIVE_UNCONTESTED
--  36  FLAGS_TAKEN            37  FLAGS_DROPPED
--  38  FLAGS_CAPTURED         39  FLAG_HOLD_TIME
--  40  TIME                   41  ALIVE_PLAYERS
--  42  DEAD_PLAYERS           43  CUSTOM
--  44  ENEMY_TURRET_KILLS     45  FRIENDLY_TURRET_KILLS
--  46  ENEMY_BUILDING_KILLS   47  FRIENDLY_BUILDING_KILLS

-- body_zone values (DamageObject::DamageZone):
--   0  LeftLeg     1  RightLeg    2  LeftArm     3  RightArm
--   4  RightTorso  5  LeftTorso   6  CenterTorso 7  Head
--   8  SpecialZone1  9  SpecialZone2
