spell_dbc - 法术DBC表

法术DBC表是一个服务器端的表,用于存储和修改客户端DBC文件中的法术数据。这个表允许开发者修改或创建法术,而无需修改客户端文件。当服务器启动时,这个表中的数据会覆盖或补充客户端的Spell.dbc文件中的数据。

注意: 这个表中只需要包含你想要修改或创建的法术,不需要包含所有法术。未在此表中指定的法术将使用客户端DBC文件中的原始数据。

表结构

由于spell_dbc表的字段非常多(超过200个字段),这里只列出最常用的关键字段。完整的字段列表可以通过查看数据库结构获取。

字段名 类型 描述
Id int(10) unsigned 法术ID,主键
Category int(10) unsigned 法术类别
Dispel int(10) unsigned 驱散类型
Mechanic int(10) unsigned 机制类型
Attributes int(10) unsigned 法术属性
AttributesEx int(10) unsigned 法术扩展属性1
AttributesEx2 int(10) unsigned 法术扩展属性2
AttributesEx3 int(10) unsigned 法术扩展属性3
AttributesEx4 int(10) unsigned 法术扩展属性4
AttributesEx5 int(10) unsigned 法术扩展属性5
AttributesEx6 int(10) unsigned 法术扩展属性6
AttributesEx7 int(10) unsigned 法术扩展属性7
Stances int(10) unsigned 可用姿态
StancesNot int(10) unsigned 不可用姿态
Targets int(10) unsigned 目标标志
TargetCreatureType int(10) unsigned 目标生物类型
RequiresSpellFocus int(10) unsigned 需要法术焦点
FacingCasterFlags int(10) unsigned 面向施法者标志
CasterAuraState int(10) unsigned 施法者光环状态
TargetAuraState int(10) unsigned 目标光环状态
CasterAuraStateNot int(10) unsigned 施法者不能有的光环状态
TargetAuraStateNot int(10) unsigned 目标不能有的光环状态
CastingTimeIndex int(10) unsigned 施法时间索引
RecoveryTime int(10) unsigned 恢复时间
CategoryRecoveryTime int(10) unsigned 类别恢复时间
InterruptFlags int(10) unsigned 打断标志
AuraInterruptFlags int(10) unsigned 光环打断标志
ChannelInterruptFlags int(10) unsigned 引导打断标志
ProcFlags int(10) unsigned 触发标志
ProcChance int(10) unsigned 触发几率
ProcCharges int(10) unsigned 触发次数
MaxLevel int(10) unsigned 最大等级
BaseLevel int(10) unsigned 基础等级
SpellLevel int(10) unsigned 法术等级
DurationIndex int(10) unsigned 持续时间索引
PowerType int(10) unsigned 能量类型
ManaCost int(10) unsigned 法力消耗
ManaCostPerlevel int(10) unsigned 每级法力消耗
ManaPerSecond int(10) unsigned 每秒法力消耗
ManaPerSecondPerLevel int(10) unsigned 每级每秒法力消耗
RangeIndex int(10) unsigned 范围索引
Speed float 法术飞行速度
StackAmount int(10) unsigned 堆叠数量
EquippedItemClass int(10) 需要装备的物品类别
EquippedItemSubClassMask int(10) 需要装备的物品子类别掩码
EquippedItemInventoryTypeMask int(10) 需要装备的物品栏位类型掩码
Effect1 int(10) unsigned 效果1类型
Effect2 int(10) unsigned 效果2类型
Effect3 int(10) unsigned 效果3类型
EffectDieSides1 int(10) 效果1骰子面数
EffectDieSides2 int(10) 效果2骰子面数
EffectDieSides3 int(10) 效果3骰子面数
EffectRealPointsPerLevel1 float 效果1每级实际点数
EffectRealPointsPerLevel2 float 效果2每级实际点数
EffectRealPointsPerLevel3 float 效果3每级实际点数
EffectBasePoints1 int(10) 效果1基础点数
EffectBasePoints2 int(10) 效果2基础点数
EffectBasePoints3 int(10) 效果3基础点数
SpellName varchar(100) 法术名称
SpellNameFlag int(10) unsigned 法术名称标志
Rank varchar(100) 法术等级文本
RankFlags int(10) unsigned 法术等级标志
Description varchar(3000) 法术描述
DescriptionFlags int(10) unsigned 法术描述标志
ToolTip varchar(500) 法术工具提示
ToolTipFlags int(10) unsigned 法术工具提示标志

使用示例

修改现有法术

以下SQL语句将修改"奥术飞弹"法术的伤害:

-- 首先从客户端DBC中复制原始数据
INSERT INTO spell_dbc SELECT * FROM Spell.dbc WHERE Id = 5143;

-- 然后修改需要的字段
UPDATE spell_dbc
SET EffectBasePoints1 = 49  -- 基础伤害为50(显示值=基础点数+1)
WHERE Id = 5143;

创建新法术

以下SQL语句将创建一个新的法术"超级火球术":

INSERT INTO spell_dbc (Id, Category, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, AttributesEx4, AttributesEx5, AttributesEx6, AttributesEx7, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, FacingCasterFlags, CasterAuraState, TargetAuraState, CasterAuraStateNot, TargetAuraStateNot, CastingTimeIndex, RecoveryTime, CategoryRecoveryTime, InterruptFlags, AuraInterruptFlags, ChannelInterruptFlags, ProcFlags, ProcChance, ProcCharges, MaxLevel, BaseLevel, SpellLevel, DurationIndex, PowerType, ManaCost, ManaCostPerlevel, ManaPerSecond, ManaPerSecondPerLevel, RangeIndex, Speed, StackAmount, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, Effect1, Effect2, Effect3, EffectDieSides1, EffectDieSides2, EffectDieSides3, EffectRealPointsPerLevel1, EffectRealPointsPerLevel2, EffectRealPointsPerLevel3, EffectBasePoints1, EffectBasePoints2, EffectBasePoints3, SpellName, SpellNameFlag, Rank, RankFlags, Description, DescriptionFlags, ToolTip, ToolTipFlags)
VALUES (
    100001, -- 自定义法术ID,避免与官方法术冲突
    0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 1, 0, 0, 100, 0, 0, 0, 1, 0, 0, -1, 0, 0, 2, 0, 0, 1, 0, 0, 10, 0, 0, 99, 0, 0,
    '超级火球术', 0, '等级 1', 0, '向敌人发射一个火球,造成100点火焰伤害。', 0, '', 0
);

常见问题

如何查找特定法术的DBC数据?

使用以下SQL语句查询特定法术的DBC数据:

SELECT * FROM spell_dbc WHERE Id = 法术ID;

如果在spell_dbc表中没有找到,则需要从客户端的Spell.dbc文件中提取。

修改法术后需要重启服务器吗?

是的,修改spell_dbc表后需要重启服务器才能生效,因为DBC数据只在服务器启动时加载。

如何修改法术的图标?

法术图标是在客户端DBC文件中定义的,无法通过spell_dbc表修改。如果需要修改图标,需要修改客户端文件。

如何使法术对特定职业可用?

法术的职业限制是在SpellClassOptions字段中定义的,但这通常需要修改客户端文件。在服务器端,可以通过脚本或其他方式限制法术的使用。

警告: 修改法术DBC数据可能会导致游戏不稳定或崩溃。在修改前,请确保备份原始数据,并在测试服务器上测试修改后的效果。