124 行
5.9 KiB
SQL
124 行
5.9 KiB
SQL
-- T004: 扩展天道系统 - 因果值/功德值/业力值系统
|
||
-- 对齐GDD-02 13.5.5 因果系统 + T003审阅报告
|
||
|
||
-- 1. 创建因果系统表
|
||
CREATE TABLE IF NOT EXISTS karma_records (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
karma_type VARCHAR(16) NOT NULL, -- good_evil/bonus/penalty
|
||
karma_value INT NOT NULL, -- 正数=善因,负数=恶因
|
||
reason_code VARCHAR(64) NOT NULL,
|
||
related_id UUID, -- 关联的事件/战斗/任务ID
|
||
world_tier SMALLINT NOT NULL,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_karma_character ON karma_records(character_id, created_at);
|
||
CREATE INDEX idx_karma_type ON karma_records(karma_type, created_at);
|
||
COMMENT ON TABLE karma_records IS '因果记录表,记录玩家行为的因果关系';
|
||
|
||
-- 2. 创建因果轮回事件表
|
||
CREATE TABLE IF NOT EXISTS karma_events (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
event_type VARCHAR(32) NOT NULL, -- good_tribute/bad_retribution
|
||
trigger_value INT NOT NULL, -- 触发时的因果值
|
||
event_data JSONB NOT NULL DEFAULT '{}',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'pending', -- pending/completed/failed
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
completed_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE INDEX idx_karma_events_character ON karma_events(character_id, status);
|
||
|
||
-- 3. 扩展characters表字段(已在003中添加部分,这里补充)
|
||
-- 因果值字段(GDD-02 13.5.5)
|
||
ALTER TABLE characters ADD COLUMN IF NOT EXISTS karma_good INT NOT NULL DEFAULT 0; -- 善因积累
|
||
ALTER TABLE characters ADD COLUMN IF NOT EXISTS karma_evil INT NOT NULL DEFAULT 0; -- 恶因积累
|
||
ALTER TABLE characters ADD COLUMN IF NOT EXISTS karma_balance NUMERIC(10,2) NOT NULL DEFAULT 0; -- 因果平衡值
|
||
|
||
-- 4. 创建功德消耗记录表
|
||
CREATE TABLE IF NOT EXISTS karma_expenditure_records (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
expenditure_type VARCHAR(32) NOT NULL, -- offset_sin/protect/buff/reward
|
||
amount INT NOT NULL,
|
||
related_id UUID,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_karma_expend_character ON karma_expenditure_records(character_id, created_at);
|
||
|
||
-- 5. 创建功德护体效果表
|
||
CREATE TABLE IF NOT EXISTS karma_shields (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
shield_type VARCHAR(32) NOT NULL, -- life_save/breakthrough_buff/luck_boost
|
||
trigger_condition JSONB NOT NULL DEFAULT '{}',
|
||
effect_data JSONB NOT NULL DEFAULT '{}',
|
||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||
uses_remaining SMALLINT NOT NULL DEFAULT 1,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
expires_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE INDEX idx_karma_shields_character ON karma_shields(character_id, is_active);
|
||
|
||
-- 6. 创建功德馈赠事件表
|
||
CREATE TABLE IF NOT EXISTS karma_gifts (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
gift_type VARCHAR(32) NOT NULL, -- fortune_favor/rare_opportunity/special_event
|
||
gift_data JSONB NOT NULL DEFAULT '{}',
|
||
is_claimed BOOLEAN NOT NULL DEFAULT false,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
expires_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE INDEX idx_karma_gifts_character ON karma_gifts(character_id, is_claimed);
|
||
|
||
-- 7. 创建业力累积记录表(GDD-04 秘术系统)
|
||
CREATE TABLE IF NOT EXISTS sin_accumulation (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
character_id UUID NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
|
||
source_type VARCHAR(32) NOT NULL, -- forbidden_art/killing/betrayal/special_event
|
||
sin_amount INT NOT NULL,
|
||
reason_code VARCHAR(64) NOT NULL,
|
||
related_id UUID,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_sin_accumulation_character ON sin_accumulation(character_id, created_at);
|
||
|
||
-- 8. 插入因果轮回事件配置
|
||
INSERT INTO manual_types (id, name, description, max_equipped, acquisition_req, usage_cost, cooldown_config, conflict_rules) VALUES
|
||
('karma_event_good', '善因轮回事件', '因果值达到极端值时触发的善报事件', 0,
|
||
'{"min_karma_good":1000}',
|
||
'{"type":"tribute"}',
|
||
'{"min_interval_hours":168}',
|
||
'[]'),
|
||
('karma_event_evil', '恶因轮回事件', '因果值达到极端值时触发的恶报事件', 0,
|
||
'{"min_karma_evil":-1000}',
|
||
'{"type":"retribution"}',
|
||
'{"min_interval_hours":168}',
|
||
'[]')
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- 9. 创建天道馈赠触发条件配置表
|
||
CREATE TABLE IF NOT EXISTS karma_gift_conditions (
|
||
id SERIAL PRIMARY KEY,
|
||
condition_type VARCHAR(32) NOT NULL,
|
||
threshold_value INT NOT NULL,
|
||
gift_type VARCHAR(32) NOT NULL,
|
||
gift_data JSONB NOT NULL DEFAULT '{}',
|
||
probability NUMERIC(5,4) NOT NULL DEFAULT 1.0,
|
||
cooldown_hours INT NOT NULL DEFAULT 168,
|
||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||
);
|
||
|
||
INSERT INTO karma_gift_conditions (condition_type, threshold_value, gift_type, gift_data, probability, cooldown_hours) VALUES
|
||
('karma_good', 100, 'breakthrough_buff', '{"success_rate_bonus":0.05,"description":"天道庇护:境界突破成功率+5%"}', 1.0, 720),
|
||
('karma_good', 500, 'luck_boost', '{"fortune_trigger_rate":0.10,"description":"天命相助:游历机缘触发概率+10%"}', 1.0, 720),
|
||
('karma_good', 1000, 'appearance_buff', '{"appearance":"功德身","heavenly_tribulation_reduce":1,"description":"功德圆满:获得功德身外观;渡劫时减少1次天劫"}', 1.0, 720),
|
||
('karma_good', 2000, 'rare_opportunity', '{"rare_event_chance":0.05,"description":"天道认可:极小概率获得天道馈赠机缘"}', 0.05, 720);
|