法术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
);
使用以下SQL语句查询特定法术的DBC数据:
SELECT * FROM spell_dbc WHERE Id = 法术ID;
如果在spell_dbc表中没有找到,则需要从客户端的Spell.dbc文件中提取。
是的,修改spell_dbc表后需要重启服务器才能生效,因为DBC数据只在服务器启动时加载。
法术图标是在客户端DBC文件中定义的,无法通过spell_dbc表修改。如果需要修改图标,需要修改客户端文件。
法术的职业限制是在SpellClassOptions字段中定义的,但这通常需要修改客户端文件。在服务器端,可以通过脚本或其他方式限制法术的使用。
警告: 修改法术DBC数据可能会导致游戏不稳定或崩溃。在修改前,请确保备份原始数据,并在测试服务器上测试修改后的效果。