spell\_area 表
此表用于在游戏中的某个区域内对玩家施加特定的法术光环。当任何玩家进入该区域,或以某种方式与任务交互时,该光环都会得到相应的处理。
表结构
| Field | Type | Attributes | Key | Null | Default | Extra | Comment |
|---|---|---|---|---|---|---|---|
| spell | MEDIUMINT | UNSIGNED | PRI | NO | |||
| area | MEDIUMINT | UNSIGNED | PRI | NO | |||
| quest_start | MEDIUMINT | UNSIGNED | PRI | NO | |||
| quest_end | MEDIUMINT | UNSIGNED | NO | ||||
| aura_spell | MEDIUMINT | SIGNED | PRI | NO | |||
| racemask | MEDIUMINT | UNSIGNED | PRI | NO | |||
| gender | TINYINT | UNSIGNED | PRI | NO | |||
| autocast | TINYINT | UNSIGNED | NO | ||||
| quest_start_status | INT | UNSIGNED | NO | ||||
| quest_end_status | INT | UNSIGNED | NO |
字段说明
要对玩家施放的法术 ID。参见 Spell.dbc。
区域 ID。在游戏内输入 ".gps" 并查找 "Area:" 数值来用于此单元格。另参见 AreaTable.dbc。
玩家必须以 quest_start_status 所定义的状态拥有的任务条目。参见 quest_template.id。
玩家不得以 quest_end_status 所定义的状态拥有的任务条目。参见 quest_template.id。将 quest_start 和 quest_end 都设置为相同的值是无效的。
如果设置,此值(加上或减去来自 Spell.dbc 的光环法术 ID)会施加额外条件。
该值具有以下效果:
此 ID 会自动从 ChrRaces.dbc 调用。此处填写位掩码。
此条目适用的性别类型。0 = 男,1 = 女,2 = 任意。
| Flag | Value | Name | Comment |
|---|---|---|---|
| 1 | 0x01 | SPELL_AREA_FLAG_AUTOCAST | 当角色进入区域时是否自动施加该法术。同时防止用户将其移除。 |
| 2 | 0x02 | SPELL_AREA_FLAG_AUTOREMOVE | 当角色处于该区域内时是否自动移除该法术(仅与任务更新配合使用) |
注意:离开区域时法术总是会被移除,SPELL_AREA_FLAG_AUTOREMOVE 对此没有影响。
示例:
在 quest_start_status 中,你可以定义 quest_start 所需的任务状态掩码。
在 quest_end_status 中,你可以定义 quest_end 所需的任务状态掩码。
示例:
区域 257 是泰达希尔的一个洞穴。我们想要的效果很简单:当玩家接取 28725 任务时,他在洞穴中拥有该光环。当他完成 28727 任务时,光环消失。
进入洞穴时应拥有法术 92237,条件为:
以下是该示例的 SQL:
INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
(92237, 257, 28725, 28727, 1, 74, 11);
| Quest Status | Flag | Explanation |
|---|---|---|
| QUEST_STATUS_NONE = 0 | 1 | 玩家从未拥有过该任务。他本可以接受,但(还)没有接受。 |
| QUEST_STATUS_COMPLETE = 1 | 2 | 玩家已达成目标,但尚未交任务。 |
| 4 (NOT USED) | (未使用) | |
| QUEST_STATUS_INCOMPLETE = 3 | 8 | 玩家尚未达成目标 |
| 16 (NOT USED) | (未使用) | |
| QUEST_STATUS_FAILED = 5 | 32 | 玩家因任何原因未能达成目标,例如超时 |
| QUEST_STATUS_REWARDED = 6 | 64 | 玩家已交任务,这属于某种任务完成后的交互 |
SQL 示例
对于一个应包含 QUEST_STATUS_NONE (1)、QUEST_STATUS_COMPLETE (2) 和 QUEST_STATUS_INCOMPLETE (8) 的 `quest_end_status`:
-- 等价于 `quest_end_status` = 11
UPDATE `spell_area` SET `quest_end_status`= (1|2|8) WHERE `spell`=XXXXX AND `area`=YYYY;
一些示例: