-- Segunda leva do schema (23/08): dados de classe, atributos por personagem e tabela de EXP.
-- Ate aqui isso vivia em constantes no db.py. Passando pro banco, da pra ajustar
-- balanceamento sem mexer em codigo -- que e o que um dono de servidor privado quer.

USE Rosh;
GO

-- As 7 classes, medidas no servidor oficial em 23/08 criando um personagem de cada e
-- conferindo contra a ficha de atributos na tela. Nao existe classe 700.
IF OBJECT_ID('dbo.classe', 'U') IS NULL
CREATE TABLE dbo.classe (
    classe_id     INT           NOT NULL PRIMARY KEY,
    nome          NVARCHAR(32)  NOT NULL,
    hp_base       INT           NOT NULL,
    mp_base       INT           NOT NULL,
    forca         INT           NOT NULL,
    destreza      INT           NOT NULL,
    vitalidade    INT           NOT NULL,
    inteligencia  INT           NOT NULL,
    sabedoria     INT           NOT NULL,
    -- ganho por nivel. So temos medida da Maga (HP +36/+37, MP +10); as outras herdam
    -- esses valores ate termos captura de personagem subindo de nivel em cada classe.
    hp_por_nivel  INT           NOT NULL DEFAULT 36,
    mp_por_nivel  INT           NOT NULL DEFAULT 10
);
GO

MERGE dbo.classe AS alvo
USING (VALUES
    (100, N'Guerreiro',  190,  60, 10,  7, 10,  7, 6),
    (200, N'Paladina',   190,  91,  9,  7, 10,  7, 7),
    (300, N'Vagabundo',  150,  80,  7, 11,  6,  8, 8),
    (400, N'Feiticeira', 160,  90,  5,  9,  7, 10, 9),
    (500, N'Arqueira',   160,  70,  9, 10,  7,  8, 7),
    (600, N'Maga',       150,  90,  6,  8,  6, 11, 9),
    (800, N'Artilheiro', 189, 117, 10,  5,  9,  7, 9)
) AS f(classe_id, nome, hp_base, mp_base, forca, destreza, vitalidade, inteligencia, sabedoria)
   ON alvo.classe_id = f.classe_id
WHEN MATCHED THEN UPDATE SET nome = f.nome, hp_base = f.hp_base, mp_base = f.mp_base,
     forca = f.forca, destreza = f.destreza, vitalidade = f.vitalidade,
     inteligencia = f.inteligencia, sabedoria = f.sabedoria
WHEN NOT MATCHED THEN INSERT (classe_id, nome, hp_base, mp_base, forca, destreza,
     vitalidade, inteligencia, sabedoria)
     VALUES (f.classe_id, f.nome, f.hp_base, f.mp_base, f.forca, f.destreza,
             f.vitalidade, f.inteligencia, f.sabedoria);
GO

-- Atributos por personagem: comecam iguais aos da classe e passam a divergir conforme o
-- personagem evolui. Ficam no 02 05 em [1030], cinco LE u16 na ordem desta tabela.
IF COL_LENGTH('dbo.personagem', 'forca') IS NULL
    ALTER TABLE dbo.personagem
        ADD forca INT NOT NULL DEFAULT 0,
            destreza INT NOT NULL DEFAULT 0,
            vitalidade INT NOT NULL DEFAULT 0,
            inteligencia INT NOT NULL DEFAULT 0,
            sabedoria INT NOT NULL DEFAULT 0;
GO

-- EXP para subir de cada nivel.
--   niveis 1..3: MEDIDOS no servidor oficial (48, 216, 520)
--   acima disso: 68n^2 - 36n + 16, que passa exatamente nos tres
-- ATENCAO: tres pontos determinam uma quadratica de forma unica, entao a formula fechar nos
-- tres nao prova nada. E interpolacao. A previsao testavel e nivel 4 = 960.
IF OBJECT_ID('dbo.nivel_exp', 'U') IS NULL
CREATE TABLE dbo.nivel_exp (
    nivel      INT NOT NULL PRIMARY KEY,
    exp_para_subir INT NOT NULL,
    medido     BIT NOT NULL DEFAULT 0   -- 1 = visto no servidor oficial, 0 = calculado
);
GO
