The `spell_area` table
This table is used to apply a specific spell aura to the player within an area in the game. When any player enters this area or somehow interacts with a quest, this aura will be handled accordingly.
Structure
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 | |||
flags | TINYINT | UNSIGNED | NO | ||||
quest_start_status | INT | UNSIGNED | NO | ||||
quest_end_status | INT | UNSIGNED | NO |
Description of the fields
The spell ID of the spell to be casted on the player. See Spell.dbc.
The area ID. Type “.gps” in-game and find the “Area:” number to use for this cell. Also see AreaTable.dbc.
The entry of the quest which the player must have in the state defined by quest_start_status. See quest_template.id.
The entry of the quest which the player must not have in the state defined by quest_end_status. See quest_template.id. Setting both quest_start and quest_end to the same value is useless.
If set, this value (plus or minus aura spell ID from Spell.dbc) imposes additional condition.
The value has the following effect:
This ID is automatically called from ChrRaces.dbc. The bitmask is entered here.
The gender type this entry applies to. 0 = Male, 1 = Female, 2 = Any.
Flag | Value | Name | Comment |
---|---|---|---|
1 | 0x01 | SPELL_AREA_FLAG_AUTOCAST | If the spell should be automatically applied when the character enters the area. Also prevents the user from removing it. |
2 | 0x02 | SPELL_AREA_FLAG_AUTOREMOVE | If the spell should be automatically removed when the character is inside the area (only works with quest updates) |
Note: Spell is allways removed on leaving area, SPELL_AREA_FLAG_AUTOREMOVE does not effect this.
Example:
Within quest_start_status, you can define the mask of quest status required for quest_start.
Within quest_end_status, you can define the mask of quest status required for quest_end.
Example:
Area 257 is a cavern on Teldrassil. What we want is simple : When the player take the 28725 quest, he have the aura in the cavern. When he finish the 28727 quest, the aura disappear.
You should have the spell 92237 when entering the cavern IF :
Here is the SQL for this example :
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 | Player does not have or had quest at all. He could accept it, but he did not (yet). |
QUEST_STATUS_COMPLETE = 1 | 2 | Player fulfilled objectives, but did not hand it in yet. |
| 4 (NOT USED) | (Not used) |
QUEST_STATUS_INCOMPLETE = 3 | 8 | Player did not fulfill objectives yet |
| 16 (NOT USED) | (Not used) |
QUEST_STATUS_FAILED = 5 | 32 | Player failed to fulfill objectives for any reason, e.g. time limit |
QUEST_STATUS_REWARDED = 6 | 64 | Player handed quest in and this is sort of a post-quest interaction |
Example for a SQL
For a `quest_end_status` that should contain QUEST_STATUS_NONE (1), QUEST_STATUS_COMPLETE (2) and QUEST_STATUS_INCOMPLETE (8):
-- equivalent to `quest_end_status`= 11 UPDATE `spell_area` SET `quest_end_status`= (1|2|8) WHERE `spell`=XXXXX AND `area`=YYYY;
Some examples: