2026-06-21 17:20:31 -05:00
/* !40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */ ;
/* !40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */ ;
/* !40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */ ;
/* !40101 SET NAMES utf8 */ ;
/* !40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */ ;
/* !40103 SET TIME_ZONE='+00:00' */ ;
/* !40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */ ;
/* !40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */ ;
/* !40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */ ;
/* !40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */ ;
DELIMITER ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_CharExtraLevelHPMP` */ ; ;
/* !50003 SET SESSION SQL_MODE="" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_CharExtraLevelHPMP`()
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE intMaxHP INT DEFAULT 65535000 ;
DECLARE intMaxMana INT DEFAULT 65535000 ;
DECLARE sngHPInc FLOAT DEFAULT 0 . 001 ;
DECLARE sngManaInc FLOAT DEFAULT 0 . 001 ;
DECLARE intStartLvl INT DEFAULT 80 ;
2026-06-21 18:10:04 -05:00
DECLARE intFinishLvl INT DEFAULT 90 ;
2026-06-21 17:20:31 -05:00
DECLARE intRecordDone INT DEFAULT 0 ;
DECLARE intClass INT DEFAULT 0 ;
DECLARE intLevel INT DEFAULT 0 ;
DECLARE intCurrHP INT DEFAULT 0 ;
DECLARE intCurrMana INT DEFAULT 0 ;
DECLARE curPlayerStat CURSOR FOR SELECT ` class ` , ` level ` , ` basehp ` , ` basemana ` FROM player_classlevelstats ;
DECLARE CONTINUE HANDLER FOR SQLSTATE ' 02000 ' SET intRecordDone = 1 ;
OPEN curPlayerStat ;
REPEAT
FETCH curPlayerStat INTO intClass , intLevel , intCurrHP , intCurrMana ;
IF intLevel = intStartLvl THEN
REPEAT
SET intLevel = intLevel + 1 ;
DELETE FROM player_classlevelstats WHERE ` class ` = intClass AND ` level ` = intLevel ;
IF ( ROUND ( intCurrHP * ( 1 + sngHPInc ) + 200 ) ) < = intMaxHP THEN
SET intCurrHP = ROUND ( intCurrHP * ( 1 + sngHPInc ) + 200 ) ;
ELSE
SET intCurrHP = intMaxHP ;
END IF ;
IF ( ROUND ( intCurrMana * ( 1 + sngManaInc ) + 200 ) ) < = intMaxMana THEN
SET intCurrMana = ROUND ( intCurrMana * ( 1 + sngManaInc ) + 200 ) ;
ELSE
SET intCurrMana = intMaxMana ;
END IF ;
INSERT INTO player_classlevelstats
( ` class ` , ` level ` , ` basehp ` , ` basemana ` )
VALUES
( intClass , intLevel , intCurrHP , intCurrMana ) ;
UNTIL intLevel = intFinishLvl END REPEAT ;
END IF ;
UNTIL intRecordDone END REPEAT ;
CLOSE curPlayerStat ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_CharExtraLevelStats` */ ; ;
/* !50003 SET SESSION SQL_MODE="" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_CharExtraLevelStats`()
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE intMaxStats INT DEFAULT 2556541 ;
DECLARE sngStatsInc FLOAT DEFAULT 0 . 00000000001 ;
DECLARE intStartLvl INT DEFAULT 80 ;
2026-06-21 18:10:04 -05:00
DECLARE intFinishLvl INT DEFAULT 90 ;
2026-06-21 17:20:31 -05:00
DECLARE intRecordDone INT DEFAULT 0 ;
DECLARE intRace INT DEFAULT 0 ;
DECLARE intClass INT DEFAULT 0 ;
DECLARE intLevel INT DEFAULT 0 ;
DECLARE intCurrSTR INT DEFAULT 0 ;
DECLARE intCurrAGI INT DEFAULT 0 ;
DECLARE intCurrSTA INT DEFAULT 0 ;
DECLARE intCurrINT INT DEFAULT 0 ;
DECLARE intCurrSPI INT DEFAULT 0 ;
DECLARE curPlayerStat CURSOR FOR SELECT ` race ` , ` class ` , ` level ` , ` str ` , ` agi ` , ` sta ` , ` inte ` , ` spi ` FROM player_levelstats ;
DECLARE CONTINUE HANDLER FOR SQLSTATE ' 02000 ' SET intRecordDone = 1 ;
OPEN curPlayerStat ;
REPEAT
FETCH curPlayerStat INTO intRace , intClass , intLevel , intCurrSTR , intCurrAGI , intCurrSTA , intCurrINT , intCurrSPI ;
IF intLevel = intStartLvl THEN
REPEAT
SET intLevel = intLevel + 1 ;
DELETE FROM player_levelstats WHERE ` race ` = intRace AND ` class ` = intClass AND ` level ` = intLevel ;
IF ( ROUND ( intCurrSTR * ( 1 + sngStatsInc ) + 10 ) ) < = intMaxStats THEN
SET intCurrSTR = ROUND ( intCurrSTR * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSTR = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrAGI * ( 1 + sngStatsInc ) + 10 ) ) < = intMaxStats THEN
SET intCurrAGI = ROUND ( intCurrAGI * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrAGI = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrSTA * ( 1 + sngStatsInc ) + 10 ) ) < = intMaxStats THEN
SET intCurrSTA = ROUND ( intCurrSTA * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSTA = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrINT * ( 1 + sngStatsInc ) + 10 ) ) < = intMaxStats THEN
SET intCurrINT = ROUND ( intCurrINT * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrINT = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrSPI * ( 1 + sngStatsInc ) + 10 ) ) < = intMaxStats THEN
SET intCurrSPI = ROUND ( intCurrSPI * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSPI = intMaxStats ;
END IF ;
INSERT INTO player_levelstats
( ` race ` , ` class ` , ` level ` , ` str ` , ` agi ` , ` sta ` , ` inte ` , ` spi ` )
VALUES
( intRace , intClass , intLevel , intCurrSTR , intCurrAGI , intCurrSTA , intCurrINT , intCurrSPI ) ;
UNTIL intLevel = intFinishLvl END REPEAT ;
END IF ;
UNTIL intRecordDone END REPEAT ;
CLOSE curPlayerStat ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_loot` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_loot`(IN loot_type VARCHAR(10),IN loot_entry INT(10),IN item_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF loot_entry IS NOT NULL OR item_entry IS NOT NULL THEN
CASE UCASE ( loot_type )
WHEN ' FISH ' THEN BEGIN
DELETE FROM ` fishing_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' NPC ' THEN BEGIN
DELETE FROM ` creature_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject_loot_template ` WHERE ` entry ` = IFNUofcLL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' ITEM ' THEN BEGIN
DELETE FROM ` item_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' DISENCH ' THEN BEGIN
DELETE FROM ` disenchant_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' PROSPECT ' THEN BEGIN
DELETE FROM ` propspecting_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' MILL ' THEN BEGIN
DELETE FROM ` millling_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' PICKPOCKET ' THEN BEGIN
DELETE FROM ` pickpocketing_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' SKIN ' THEN BEGIN
DELETE FROM ` skinning_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' QUEST ' THEN BEGIN
DELETE FROM ` quest_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
WHEN ' REF ' THEN BEGIN
IF loot_entry IS NOT NULL THEN
DELETE FROM ` creature_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` disenchant_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` fishing_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` gameobject_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` item_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` mail_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` milling_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` pickpocketing_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` prospecting_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` skinning_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
DELETE FROM ` spell_loot_template ` WHERE ` mincountOrRef ` = - loot_entry ;
END IF ;
DELETE FROM ` reference_loot_template ` WHERE ` entry ` = IFNULL ( loot_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
END ;
ELSE CALL INVALID_LOOT_TYPE ;
END CASE ;
ELSE
CALL MUST_PROVIDE_ENTRY_OR_ITEM ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_npc_trainer` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_npc_trainer`(IN npc_entry INT(10), IN spell_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF spell_id IS NOT NULL OR npc_entry IS NOT NULL THEN
DELETE FROM ` npc_trainer ` WHERE ` entry ` = IFNULL ( npc_entry , ` entry ` ) AND ` spell ` = IFNULL ( spell_id , ` spell ` ) ;
ELSE
CALL MUST_PROVIDE_ENTRY_OR_SPELL ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_npc_vendor` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_npc_vendor`(IN npc_entry INT(10), IN item_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF item_entry IS NOT NULL OR npc_entry IS NOT NULL THEN
DELETE FROM ` npc_vendor ` WHERE ` entry ` = IFNULL ( npc_entry , ` entry ` ) AND ` item ` = IFNULL ( item_entry , ` item ` ) ;
ELSE
CALL MUST_PROVIDE_ENTRY_OR_ITEM ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_questgiver` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_questgiver`(IN qg_type VARCHAR(10),IN qg_entry INT(10), IN quest_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF qg_entry IS NOT NULL OR quest_entry IS NOT NULL THEN
CASE UCASE ( qg_type )
WHEN ' NPC ' THEN BEGIN
DELETE FROM ` creature_questrelation ` WHERE ` id ` = IFNULL ( qg_entry , ` id ` ) AND ` quest ` = IFNULL ( quest_entry , ` quest ` ) ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject_questrelation ` WHERE ` id ` = IFNULL ( qg_entry , ` id ` ) AND ` quest ` = IFNULL ( quest_entry , ` quest ` ) ;
END ;
ELSE CALL INVALID_ENTRY_TYPE ;
END CASE ;
ELSE CALL MUST_PROVIDE_ENTRY_OR_QUEST ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_questtaker` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_questtaker`(IN qt_type VARCHAR(10),IN qt_entry INT(10), IN quest_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF qt_entry IS NOT NULL OR quest_entry IS NOT NULL THEN
CASE UCASE ( qt_type )
WHEN ' NPC ' THEN BEGIN
DELETE FROM ` creature_involvedrelation ` WHERE ` id ` = IFNULL ( qt_entry , ` id ` ) AND ` quest ` = IFNULL ( quest_entry , ` quest ` ) ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject_involvedrelation ` WHERE ` id ` = IFNULL ( qt_entry , ` id ` ) AND ` quest ` = IFNULL ( quest_entry , ` quest ` ) ;
END ;
ELSE CALL INVALID_ENTRY_TYPE ;
END CASE ;
ELSE CALL MUST_PROVIDE_ENTRY_OR_QUEST ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_script` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_script`(IN script_type VARCHAR(10), IN script_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CASE UCASE ( script_type )
WHEN ' EAI ' THEN BEGIN
DELETE FROM ` creature_ai_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' GOSSIP ' THEN BEGIN
DELETE FROM ` gossip_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' Q_START ' THEN BEGIN
DELETE FROM ` quest_start_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' Q_END ' THEN BEGIN
DELETE FROM ` quest_end_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' SPELL ' THEN BEGIN
DELETE FROM ` spell_scripts ` WHERE ` id ` = script_id ;
END ;
WHEN ' WP ' THEN BEGIN
DELETE FROM ` waypoint_scripts ` WHERE ` id ` = script_id ;
END ;
ELSE CALL INVALID_SCRIPT_TYPE ;
END CASE ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_script_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_script_bylist`(IN script_type VARCHAR(10), IN script_id_list LONGTEXT)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( script_id_list , null ) ;
CASE UCASE ( script_type )
WHEN ' EAI ' THEN BEGIN
DELETE FROM ` creature_ai_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' GOSSIP ' THEN BEGIN
DELETE FROM ` gossip_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' Q_START ' THEN BEGIN
DELETE FROM ` quest_start_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' Q_END ' THEN BEGIN
DELETE FROM ` quest_end_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' SPELL ' THEN BEGIN
DELETE FROM ` spell_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
WHEN ' WP ' THEN BEGIN
DELETE FROM ` waypoint_scripts ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END ;
ELSE CALL INVALID_SCRIPT_TYPE ;
END CASE ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_spawn` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_spawn`(IN spawn_type VARCHAR(10),IN spawn_guid INT(10), IN spawn_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF spawn_guid IS NOT NULL OR spawn_entry IS NOT NULL THEN
CASE UCASE ( spawn_type )
WHEN ' NPC ' THEN BEGIN
DELETE FROM ` creature ` WHERE ` guid ` = IFNULL ( spawn_guid , ` guid ` ) AND ` id ` = IFNULL ( spawn_entry , ` id ` ) ;
DELETE FROM ` game_event_creature ` WHERE ` guid ` = IFNULL ( spawn_guid , - 1 ) ;
END ;
WHEN ' GO ' THEN BEGIN
DELETE FROM ` gameobject ` WHERE ` guid ` = IFNULL ( spawn_guid , ` guid ` ) AND ` id ` = IFNULL ( spawn_entry , ` id ` ) ;
DELETE FROM ` game_event_gameobject ` WHERE ` guid ` = IFNULL ( spawn_guid , - 1 ) ;
END ;
ELSE CALL INVALID_SPAWN_TYPE ;
END CASE ;
ELSE
CALL MUST_PROVIDE_GUID_OR_ENTRY ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_spell_area` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_spell_area`(IN spell_id INT(10), IN area_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF spell_id IS NOT NULL OR area_id IS NOT NULL THEN
DELETE FROM ` spell_area ` WHERE ` spell ` = IFNULL ( spell_id , ` spell ` ) AND ` area ` = IFNULL ( area_id , ` area ` ) ;
ELSE
CALL MUST_PROVIDE_SPELL_OR_AREA ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_spell_position` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_spell_position`(IN spell_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
DELETE FROM ` spell_target_position ` WHERE ` id ` = spell_id ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_spell_position_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_spell_position_bylist`(IN spell_list LONGTEXT)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( spell_list , null ) ;
DELETE FROM ` spell_target_position ` WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_delete_spell_target` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_delete_spell_target`(IN spell_id INT(10),IN target_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
IF spell_id IS NOT NULL OR target_entry IS NOT NULL THEN
DELETE FROM ` spell_script_target ` WHERE ` entry ` = IFNULL ( spell_id , ` entry ` ) AND ` targetEntry ` = IFNULL ( target_entry , ` targetEntry ` ) ;
ELSE
CALL MUST_PROVIDE_SPELL_OR_TARGET ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_dev_cleanup_loot` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_dev_cleanup_loot`()
2026-06-21 17:20:31 -05:00
BEGIN
CREATE TABLE ` Loot_temp ` (
` lootid ` INT ( 8 ) UNSIGNED NOT NULL PRIMARY KEY DEFAULT ' 0 '
) ;
INSERT IGNORE INTO ` Loot_temp ` SELECT ` entry ` FROM ` item_template ` ;
DELETE FROM ` prospecting_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` lootid ` FROM ` Loot_temp ` ) ;
DELETE FROM ` Loot_temp ` ;
INSERT IGNORE INTO ` Loot_temp ` SELECT ` skinloot ` FROM ` creature_template ` WHERE skinloot > 0 ;
DELETE FROM ` skinning_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` lootid ` FROM ` Loot_temp ` ) ;
DELETE FROM ` Loot_temp ` ;
INSERT IGNORE INTO ` Loot_temp ` SELECT ` lootid ` FROM ` creature_template ` WHERE lootid > 0 ;
DELETE FROM ` creature_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` lootid ` FROM ` Loot_temp ` ) ;
DELETE FROM ` Loot_temp ` ;
DROP TABLE ` Loot_temp ` ;
DELETE FROM ` disenchant_loot_template ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` disenchant_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` disenchantid ` FROM ` item_template ` ) ;
DELETE FROM ` pickpocketing_loot_template ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` prospecting_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` prospecting_loot_template ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` mail_loot_template ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_dev_cleanup_reference_loot` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_dev_cleanup_reference_loot`()
2026-06-21 17:20:31 -05:00
BEGIN
CREATE TABLE ` RL_temp ` (
` ref_id ` INT ( 8 ) UNSIGNED NOT NULL PRIMARY KEY DEFAULT ' 0 '
) ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` gameobject_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` item_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` creature_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` spell_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` prospecting_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` milling_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` mail_loot_template ` WHERE ` mincountOrRef ` < 0 ;
INSERT IGNORE INTO ` RL_temp ` SELECT DISTINCT ( ` mincountOrRef ` ) * - 1 FROM ` reference_loot_template ` WHERE ` mincountOrRef ` < 0 ;
DELETE FROM ` reference_loot_template ` WHERE ` entry ` NOT IN ( SELECT ` ref_id ` FROM ` RL_temp ` ) ;
DROP TABLE ` RL_temp ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_dev_cleanup_world` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_dev_cleanup_world`()
2026-06-21 17:20:31 -05:00
BEGIN
DELETE FROM ` gameobject ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` gameobject_template ` ) ;
DELETE FROM ` creature ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM areatrigger_involvedrelation WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` battlemaster_entry ` WHERE ` entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` battlemaster_entry ` WHERE ` bg_template ` NOT IN ( SELECT ` id ` FROM ` battleground_template ` ) ;
UPDATE ` creature ` SET ` equipment_id ` = 0 WHERE ` equipment_id ` NOT IN ( SELECT ` entry ` FROM ` creature_equip_template ` ) AND ` equipment_id ` ! = 0 ;
DELETE FROM ` creature_addon ` WHERE ` guid ` NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` creature_ai_scripts ` WHERE ` creature_id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` creature_formations ` WHERE leaderGUID NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` creature_formations ` WHERE memberGUID NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` creature_involvedrelation ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` creature_involvedrelation ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` creature_linked_respawn ` WHERE ` guid ` NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` creature_linked_respawn ` WHERE ` linkedGuid ` NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` creature_onkill_reputation ` WHERE ` creature_id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` creature_questrelation ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` creature_questrelation ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` creature_template_addon ` WHERE ` entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` game_event_creature_quest ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` game_event_creature_quest ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` game_event_creature_quest ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_gameobject_quest ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` gameobject_template ` ) ;
DELETE FROM ` game_event_gameobject_quest ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` game_event_gameobject_quest ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_npc_gossip ` WHERE ` event_id ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_model_equip ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_battleground_holiday ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_condition ` WHERE ` event_id ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_creature ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_gameobject ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_npc_vendor ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` game_event_npc_vendor ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_npcflag ` WHERE ` event_id ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_pool ` WHERE ` event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_prerequisite ` WHERE ` event_id ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_prerequisite ` WHERE ` prerequisite_event ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_quest_condition ` WHERE ` event_id ` NOT IN ( SELECT ` entry ` FROM ` game_event ` ) ;
DELETE FROM ` game_event_quest_condition ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` gameobject_involvedrelation ` WHERE ` id ` NOT IN ( SELECT ` entry ` FROM ` gameobject_template ` ) ;
DELETE FROM ` gameobject_involvedrelation ` WHERE ` quest ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) ;
DELETE FROM ` item_required_target ` WHERE ` targetEntry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) AND ` type ` IN ( 1 , 2 ) ;
DELETE FROM ` mail_level_reward ` WHERE ` senderEntry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` npc_gossip ` WHERE ` npc_guid ` NOT IN ( SELECT ` guid ` FROM ` creature ` ) ;
DELETE FROM ` npc_spellclick_spells ` WHERE ` npc_entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` npc_spellclick_spells ` WHERE ` quest_start ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) AND ` quest_start ` < > 0 ;
DELETE FROM ` npc_spellclick_spells ` WHERE ` quest_end ` NOT IN ( SELECT ` entry ` FROM ` quest_template ` ) AND ` quest_end ` < > 0 ;
DELETE FROM ` npc_trainer ` WHERE ` entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` npc_vendor ` WHERE ` entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` npc_vendor ` WHERE ` item ` NOT IN ( SELECT ` entry ` FROM ` item_template ` ) ;
DELETE FROM ` pet_levelstats ` WHERE ` creature_entry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) ;
DELETE FROM ` quest_end_scripts ` WHERE ` id ` NOT IN ( SELECT ` CompleteScript ` FROM ` quest_template ` ) ;
DELETE FROM ` quest_start_scripts ` WHERE ` id ` NOT IN ( SELECT ` StartScript ` FROM ` quest_template ` ) ;
DELETE FROM ` spell_script_target ` WHERE ` targetEntry ` NOT IN ( SELECT ` entry ` FROM ` creature_template ` ) AND ` type ` IN ( 1 , 2 , 3 ) AND ` targetEntry ` ! = 0 ;
DELETE FROM ` spell_script_target ` WHERE ` targetEntry ` NOT IN ( SELECT ` entry ` FROM ` gameobject_template ` ) AND ` type ` = 0 AND ` targetEntry ` ! = 0 ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_dev_reguid_alter_tables` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_dev_reguid_alter_tables`()
2026-06-21 17:20:31 -05:00
BEGIN
CREATE TABLE ` creature_temp ` (
` guid ` INT ( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ' Global Unique Identifier ' ,
` id ` MEDIUMINT ( 8 ) UNSIGNED NOT NULL DEFAULT ' 0 ' COMMENT ' Creature Identifier ' ,
` map ` SMALLINT ( 5 ) UNSIGNED NOT NULL DEFAULT ' 0 ' COMMENT ' Map Identifier ' ,
` spawnMask ` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT ' 1 ' ,
` phaseMask ` SMALLINT ( 5 ) UNSIGNED NOT NULL DEFAULT ' 1 ' ,
` modelid ` MEDIUMINT ( 8 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
` equipment_id ` MEDIUMINT ( 9 ) NOT NULL DEFAULT ' 0 ' ,
` position_x ` FLOAT NOT NULL DEFAULT ' 0 ' ,
` position_y ` FLOAT NOT NULL DEFAULT ' 0 ' ,
` position_z ` FLOAT NOT NULL DEFAULT ' 0 ' ,
` orientation ` FLOAT NOT NULL DEFAULT ' 0 ' ,
` spawntimesecs ` INT ( 10 ) UNSIGNED NOT NULL DEFAULT ' 120 ' ,
` spawndist ` FLOAT NOT NULL DEFAULT ' 5 ' ,
` currentwaypoint ` MEDIUMINT ( 8 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
` curhealth ` INT ( 10 ) UNSIGNED NOT NULL DEFAULT ' 1 ' ,
` curmana ` INT ( 10 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
` DeathState ` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
` MovementType ` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
` old_guid ` INT ( 10 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( ` guid ` ) ,
KEY ` idx_map ` ( ` map ` ) ,
KEY ` idx_id ` ( ` id ` )
) ENGINE = MYISAM AUTO_INCREMENT = 250001 DEFAULT CHARSET = utf8 ROW_FORMAT = DYNAMIC COMMENT = ' Creature System ' ;
ALTER TABLE ` creature_addon ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` creature_formations ` ADD COLUMN ` new_guid_leader ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` creature_formations ` ADD COLUMN ` new_guid_member ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` creature_linked_respawn ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` creature_linked_respawn ` ADD COLUMN ` new_linked_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` game_event_creature ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` pool_creature ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` game_event_model_equip ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` game_event_npc_gossip ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` game_event_npc_vendor ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` game_event_npcflag ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
ALTER TABLE ` npc_gossip ` ADD COLUMN ` new_guid ` INT ( 10 ) UNSIGNED NOT NULL ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_dev_re_guid` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_dev_re_guid`(IN new_base_guid INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_dev_reguid_alter_tables ` ( ) ;
SET @ s = CONCAT ( " ALTER TABLE `creature_temp` AUTO_INCREMENT= " , new_base_guid , " ; " ) ;
PREPARE STM FROM @ s ;
EXECUTE STM ;
INSERT INTO ` creature_temp ` ( id , map , spawnMask , phaseMask , modelid , equipment_id , position_x , position_y , position_z , orientation , spawndist , currentwaypoint , curhealth , curmana , DeathState , MovementType , old_guid )
SELECT id , map , spawnMask , phaseMask , modelid , equipment_id , position_x , position_y , position_z , orientation , spawndist , currentwaypoint , curhealth , curmana , DeathState , MovementType , guid FROM ` creature ` ORDER BY ` id ` ASC ;
UPDATE ` creature_temp ` SET guid = old_guid WHERE ` old_guid ` > 250000 ;
UPDATE game_event_npc_gossip p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE game_event_npc_vendor p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE game_event_npcflag p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE npc_gossip p
INNER JOIN creature_temp pp
ON p . npc_guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE game_event_model_equip p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE creature_addon p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE creature_formations p
INNER JOIN creature_temp pp
ON p . leaderGUID = pp . old_guid
SET p . new_guid_leader = pp . guid ;
UPDATE creature_formations p
INNER JOIN creature_temp pp
ON p . memberGUID = pp . old_guid
SET p . new_guid_member = pp . guid ;
UPDATE creature_linked_respawn p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE creature_linked_respawn p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_linked_guid = pp . guid ;
UPDATE game_event_creature p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
UPDATE pool_creature p
INNER JOIN creature_temp pp
ON p . guid = pp . old_guid
SET p . new_guid = pp . guid ;
ALTER TABLE ` creature_temp ` DROP COLUMN ` old_guid ` ;
DROP TABLE ` creature ` ;
RENAME TABLE ` creature_temp ` TO ` creature ` ;
ALTER TABLE game_event_npc_gossip DISABLE KEYS ;
UPDATE ` game_event_npc_gossip ` SET ` guid ` = ` new_guid ` ;
ALTER TABLE ` game_event_npc_gossip ` DROP COLUMN ` new_guid ` ;
ALTER TABLE game_event_npc_gossip ENABLE KEYS ;
ALTER TABLE game_event_npc_vendor DISABLE KEYS ;
UPDATE ` game_event_npc_vendor ` SET ` guid ` = ` new_guid ` ;
ALTER TABLE ` game_event_npc_vendor ` DROP COLUMN ` new_guid ` ;
ALTER TABLE game_event_npc_vendor ENABLE KEYS ;
ALTER TABLE game_event_npcflag DISABLE KEYS ;
UPDATE ` game_event_npcflag ` SET ` guid ` = ` new_guid ` ;
ALTER TABLE ` game_event_npcflag ` DROP COLUMN ` new_guid ` ;
ALTER TABLE game_event_npcflag ENABLE KEYS ;
ALTER TABLE ` npc_gossip ` DROP PRIMARY KEY ;
UPDATE ` npc_gossip ` SET ` npc_guid ` = ` new_guid ` ;
SELECT npc_guid , new_guid FROM npc_gossip ;
ALTER TABLE ` npc_gossip ` DROP COLUMN ` new_guid ` ;
ALTER TABLE ` npc_gossip ` ADD PRIMARY KEY ( ` npc_guid ` ) ;
ALTER TABLE game_event_model_equip DISABLE KEYS ;
UPDATE ` game_event_model_equip ` SET ` guid ` = ` new_guid ` ;
ALTER TABLE ` game_event_model_equip ` DROP COLUMN ` new_guid ` ;
ALTER TABLE game_event_model_equip ENABLE KEYS ;
ALTER TABLE ` creature_addon ` DROP PRIMARY KEY ;
UPDATE ` creature_addon ` SET ` guid ` = ` new_guid ` ;
ALTER TABLE ` creature_addon ` DROP COLUMN ` new_guid ` ;
ALTER TABLE ` creature_addon ` ADD PRIMARY KEY ( ` guid ` ) ;
ALTER TABLE creature_formations DISABLE KEYS ;
UPDATE ` creature_formations ` SET leaderGUID = new_guid_leader ;
ALTER TABLE ` creature_formations ` DROP COLUMN ` new_guid_leader ` ;
UPDATE ` creature_formations ` SET memberGUID = new_guid_member ;
ALTER TABLE ` creature_formations ` DROP COLUMN ` new_guid_member ` ;
ALTER TABLE creature_formations ENABLE KEYS ;
ALTER TABLE ` creature_linked_respawn ` DROP PRIMARY KEY ;
UPDATE ` creature_linked_respawn ` SET guid = new_guid ;
ALTER TABLE ` creature_linked_respawn ` DROP COLUMN ` new_guid ` ;
UPDATE ` creature_linked_respawn ` SET linkedGuid = new_linked_guid ;
ALTER TABLE ` creature_linked_respawn ` DROP COLUMN ` new_linked_guid ` ;
ALTER TABLE ` creature_linked_respawn ` ADD PRIMARY KEY ( ` guid ` ) ;
ALTER TABLE ` game_event_creature ` DROP PRIMARY KEY ;
UPDATE ` game_event_creature ` SET guid = new_guid ;
ALTER TABLE ` game_event_creature ` DROP COLUMN ` new_guid ` ;
ALTER TABLE ` game_event_creature ` ADD PRIMARY KEY ( ` guid ` ) ;
ALTER TABLE pool_creature DISABLE KEYS ;
UPDATE ` pool_creature ` SET guid = new_guid ;
ALTER TABLE ` pool_creature ` DROP COLUMN ` new_guid ` ;
ALTER TABLE pool_creature ENABLE KEYS ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_cast_onspawn` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_cast_onspawn`(IN npc_entry INT(10), spell_id MEDIUMINT(6))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
UPDATE ` creature_template ` SET ` AIName ` = ' EventAI ' WHERE ` entry ` = npc_entry ;
CALL ` sp_eai_select_id ` ( npc_entry , @ event_id ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id , npc_entry , 11 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 11 , spell_id , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: NPC cast spell on self ' ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_inverse_phase_mask` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_inverse_phase_mask`(IN max_phase INT, IN phase_list VARCHAR(255))
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE max_phase_mask INT ;
DECLARE phase_yes INT ;
DECLARE inverse_phase_mask INT ;
CALL ` sp_eai_table_phase_mask ` ( ) ;
2026-06-21 18:10:04 -05:00
CALL ` sp_set_entry_list ` ( phase_list , NULL ) ;
2026-06-21 17:20:31 -05:00
SET max_phase_mask = ( SELECT SUM ( phase_mask ) FROM phase_mask WHERE phaseID < = max_phase ) ;
SET phase_yes = ( SELECT SUM ( phase_mask ) FROM phase_mask WHERE phaseID IN ( SELECT ` value ` FROM tdb_entry_list ) ) ;
SET inverse_phase_mask = ( max_phase_mask - phase_yes ) ;
DROP TABLE ` tdb_entry_list ` ;
DROP TABLE ` phase_mask ` ;
IF inverse_phase_mask < 0 THEN
SELECT " PhaseID is bigger then maximum phase entered " AS ` inverse_phase_mask ` ;
ELSE IF phase_list = " 0 " THEN
SELECT 0 AS ` inverse_phase_mask ` ;
ELSE
SELECT inverse_phase_mask ;
END IF ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_kill_ondeath` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_kill_ondeath`(IN npc_entry INT(10), trigger_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
UPDATE ` creature_template ` SET ` AIName ` = ' EventAI ' WHERE ` entry ` = npc_entry ;
CALL ` sp_eai_select_id ` ( npc_entry , @ event_id ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id , npc_entry , 6 , 0 , 100 , 0 , 0 , 0 , 0 , 0 , 33 , trigger_id , 6 , 0 , 23 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: quest - kill trigger on NPC death ' ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_quest_credit_on_spellhit` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_quest_credit_on_spellhit`(IN npc_entry INT(10), spell_id MEDIUMINT(6), trigger_id INT(10), despawn_time INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
CALL ` sp_error_trigger ` ( trigger_id ) ;
UPDATE ` creature_template ` SET ` AIName ` = ' EventAI ' WHERE ` entry ` = npc_entry ;
CALL ` sp_eai_select_id ` ( npc_entry , @ event_id ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id , npc_entry , 8 , 0 , 100 , 1 , spell_ID , - 1 , 0 , 0 , 33 , trigger_ID , 6 , 0 , 23 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: quest - kill trigger on spellcast ' ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id + 1 , npc_entry , 1 , 1 , 100 , 0 , despawn_time , despawn_time , despawn_time , despawn_time , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: despawn after defined time ' ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_select_id` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_select_id`(IN npc_entry INT(10), OUT event_id INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
SET event_id = ( SELECT MAX ( id ) + 1 FROM ` creature_ai_scripts ` WHERE ` creature_id ` = npc_entry ) ;
DELETE FROM ` creature_ai_scripts ` WHERE ` creature_id ` = npc_entry AND ` comment ` LIKE " Stored procedures eAI% " ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_spawn_spellhit` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_spawn_spellhit`(IN npc_entry INT(10),IN spell_id MEDIUMINT(6),IN spawn_id INT(10),IN despawn_time INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
CALL ` sp_error_entry ` ( ' NPC ' , spawn_id ) ;
UPDATE ` creature_template ` SET ` AIName ` = ' EventAI ' WHERE ` entry ` = npc_entry ;
CALL ` sp_eai_select_id ` ( npc_entry , @ event_id ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id , npc_entry , 8 , 0 , 100 , 1 , spell_id , - 1 , 0 , 0 , 32 , spawn_id , 6 , 0 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: quest - summon mob on spellcast ' ) ;
INSERT INTO ` creature_ai_scripts ` ( ` id ` , ` creature_id ` , ` event_type ` , ` event_inverse_phase_mask ` , ` event_chance ` , ` event_flags ` , ` event_param1 ` , ` event_param2 ` , ` event_param3 ` , ` event_param4 ` , ` action1_type ` , ` action1_param1 ` , ` action1_param2 ` , ` action1_param3 ` , ` action2_type ` , ` action2_param1 ` , ` action2_param2 ` , ` action2_param3 ` , ` action3_type ` , ` action3_param1 ` , ` action3_param2 ` , ` action3_param3 ` , ` comment ` ) VALUES
( @ event_id + 1 , spawn_id , 1 , 1 , 100 , 0 , despawn_time , despawn_time , despawn_time , despawn_time , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ' Stored procedures eAI: despawn after defined time ' ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_eai_table_phase_mask` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_eai_table_phase_mask`()
2026-06-21 17:20:31 -05:00
BEGIN
CREATE TABLE ` phase_mask ` (
` phaseID ` INT ( 2 ) NOT NULL DEFAULT ' 0 ' ,
` phase_mask ` INT ( 11 ) UNSIGNED NOT NULL DEFAULT ' 0 ' ,
PRIMARY KEY ( ` phaseID ` ) ) ;
INSERT INTO phase_mask VALUES
( 0 , 1 ) ,
( 1 , 2 ) ,
( 2 , 4 ) ,
( 3 , 8 ) ,
( 4 , 16 ) ,
( 5 , 32 ) ,
( 6 , 64 ) ,
( 7 , 128 ) ,
( 8 , 256 ) ,
( 9 , 512 ) ,
( 10 , 1024 ) ,
( 11 , 2048 ) ,
( 12 , 4096 ) ,
( 13 , 8192 ) ,
( 14 , 16384 ) ,
( 15 , 32768 ) ,
( 16 , 65536 ) ,
( 17 , 131072 ) ,
( 18 , 262144 ) ,
( 19 , 524288 ) ,
( 20 , 1048576 ) ,
( 21 , 2097152 ) ,
( 22 , 4194304 ) ,
( 23 , 8388608 ) ,
( 24 , 16777216 ) ,
( 25 , 33554432 ) ,
( 26 , 67108864 ) ,
( 27 , 134217728 ) ,
( 28 , 268435456 ) ,
( 29 , 536870912 ) ,
( 30 , 1073741824 ) ,
( 31 , 2147483648 ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_error_entry` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_error_entry`(IN entry_type VARCHAR(10), IN e_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE check_entry INT ;
CASE UPPER ( entry_type )
WHEN ' NPC ' THEN
SET check_entry = ( SELECT COUNT ( ` entry ` ) FROM ` creature_template ` WHERE ` entry ` = e_entry ) ;
WHEN ' GO ' THEN
SET check_entry = ( SELECT COUNT ( ` entry ` ) FROM ` gameobject_template ` WHERE ` entry ` = e_entry ) ;
WHEN ' ITEM ' THEN
SET check_entry = ( SELECT COUNT ( ` entry ` ) FROM ` item_template ` WHERE ` entry ` = e_entry ) ;
WHEN ' QUEST ' THEN
SET check_entry = ( SELECT COUNT ( ` entry ` ) FROM ` quest_template ` WHERE ` entry ` = e_entry ) ;
ELSE
CALL INCORRECT_ENTRY_TYPE ;
END CASE ;
IF check_entry = 0 THEN
CALL INCORRECT_ENTRY ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_error_guid` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_error_guid`(IN guid_type VARCHAR(10),IN npc_or_go_guid INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE check_guid INT ;
CASE UPPER ( guid_type )
WHEN ' NPC ' THEN
SET check_guid = ( SELECT COUNT ( ` guid ` ) FROM ` creature ` WHERE ` guid ` = npc_or_go_guid ) ;
WHEN ' GO ' THEN
SET check_guid = ( SELECT COUNT ( ` guid ` ) FROM ` gameobject ` WHERE ` entry ` = npc_or_go_entry ) ;
ELSE
CALL INCORRECT_GUID_TYPE ;
END CASE ;
IF check_guid = 0 THEN
CALL INCORRECT_CREATURE_OR_GO_GUID ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_error_trigger` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_error_trigger`(IN trigger_entry INT)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE Check_trigger INT ;
SET Check_trigger = ( SELECT COUNT ( ReqCreatureOrGOId1 ) FROM ` quest_template ` WHERE ` ReqCreatureOrGOId1 ` = trigger_entry )
+ ( SELECT COUNT ( ReqCreatureOrGOId2 ) FROM ` quest_template ` WHERE ` ReqCreatureOrGOId2 ` = trigger_entry )
+ ( SELECT COUNT ( ReqCreatureOrGOId3 ) FROM ` quest_template ` WHERE ` ReqCreatureOrGOId3 ` = trigger_entry )
+ ( SELECT COUNT ( ReqCreatureOrGOId4 ) FROM ` quest_template ` WHERE ` ReqCreatureOrGOId4 ` = trigger_entry ) ;
IF Check_trigger = 0 THEN
CALL NO_QUEST_WITH_REQUIREMENT ( ) ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_get_go_lootid` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_get_go_lootid`(IN gobjID MEDIUMINT(6),OUT gobjLootID INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' GO ' , gobjID ) ;
SELECT ` data1 ` FROM ` gameobject_template ` WHERE ` entry ` = gobjID AND ` type ` = 3 INTO gobjLootID ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_get_npc_diffentry` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_get_npc_diffentry`(IN normalEntry MEDIUMINT(5),IN difficulty TINYINT(1),OUT output MEDIUMINT(8))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , normalEntry ) ;
CASE difficulty
WHEN 1 THEN BEGIN
SELECT ` difficulty_entry_1 ` FROM ` creature_template ` WHERE ` entry ` = normalEntry INTO output ;
END ;
WHEN 2 THEN BEGIN
SELECT ` difficulty_entry_2 ` FROM ` creature_template ` WHERE ` entry ` = normalEntry INTO output ;
END ;
WHEN 3 THEN BEGIN
SELECT ` difficulty_entry_3 ` FROM ` creature_template ` WHERE ` entry ` = normalEntry INTO output ;
END ;
ELSE CALL INVALID_DIFFICULTY ( ) ;
END CASE ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_get_ref_id` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_get_ref_id`(IN refType VARCHAR(10),OUT reference MEDIUMINT(5))
2026-06-21 17:20:31 -05:00
BEGIN
CASE UCASE ( refType )
WHEN ' SKIN ' THEN BEGIN
SET @ Low : = 00000 ;
SET @ High : = 1000 ;
END ;
WHEN ' ITEM ' THEN BEGIN
SET @ Low : = 10000 ;
SET @ High : = 10999 ;
END ;
WHEN ' FISH ' THEN BEGIN
SET @ Low : = 11000 ;
SET @ High : = 11799 ;
END ;
WHEN ' MILL ' THEN BEGIN
SET @ Low : = 11800 ;
SET @ High : = 11999 ;
END ;
WHEN ' RAID_GOBJ ' THEN BEGIN
SET @ Low : = 12000 ;
SET @ High : = 12899 ;
END ;
WHEN ' MINE ' THEN BEGIN
SET @ Low : = 12900 ;
SET @ High : = 12999 ;
END ;
WHEN ' PROSPECT ' THEN BEGIN
SET @ Low : = 13000 ;
SET @ High : = 13999 ;
END ;
WHEN ' WORLD ' THEN BEGIN
SET @ Low : = 14000 ;
SET @ High : = 29000 ;
END ;
WHEN ' RAID_CRE ' THEN BEGIN
SET @ Low : = 34000 ;
SET @ High : = 34999 ;
END ;
WHEN ' DUNGEON ' THEN BEGIN
SET @ Low : = 35000 ;
SET @ High : = 35999 ;
END ;
ELSE CALL INVALID_REFERENCE_TYPE ;
END CASE ;
SET reference : = 1 + ( SELECT ` entry ` FROM ` reference_loot_template ` WHERE ` entry ` BETWEEN @ Low AND @ High ORDER BY ` entry ` DESC LIMIT 1 ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_PetExtraLevelStats` */ ; ;
/* !50003 SET SESSION SQL_MODE="" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_PetExtraLevelStats`()
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE intMaxHP INT DEFAULT 6553500 ;
DECLARE intMaxMana INT DEFAULT 6553500 ;
DECLARE intMaxArmor INT DEFAULT 6553500 ;
DECLARE intMaxStats INT DEFAULT 100000 ;
DECLARE sngHPInc FLOAT DEFAULT 0 . 05 ;
DECLARE sngManaInc FLOAT DEFAULT 0 . 05 ;
DECLARE sngArmorInc FLOAT DEFAULT 0 . 05 ;
DECLARE sngStatsInc FLOAT DEFAULT 0 . 015 ;
DECLARE intStartLvl INT DEFAULT 80 ;
2026-06-21 18:10:04 -05:00
DECLARE intFinishLvl INT DEFAULT 90 ;
2026-06-21 17:20:31 -05:00
DECLARE intRecordDone INT DEFAULT 0 ;
DECLARE intCreature INT DEFAULT 0 ;
DECLARE intLevel INT DEFAULT 0 ;
DECLARE intClass INT DEFAULT 0 ;
DECLARE intCurrHP INT DEFAULT 0 ;
DECLARE intCurrMana INT DEFAULT 0 ;
DECLARE intCurrArmor INT DEFAULT 0 ;
DECLARE intCurrSTR INT DEFAULT 0 ;
DECLARE intCurrAGI INT DEFAULT 0 ;
DECLARE intCurrSTA INT DEFAULT 0 ;
DECLARE intCurrINT INT DEFAULT 0 ;
DECLARE intCurrSPI INT DEFAULT 0 ;
DECLARE curPetStat CURSOR FOR SELECT ` creature_entry ` , ` level ` , ` hp ` , ` mana ` , ` armor ` , ` str ` , ` agi ` , ` sta ` , ` inte ` , ` spi ` FROM pet_levelstats ;
DECLARE CONTINUE HANDLER FOR SQLSTATE ' 02000 ' SET intRecordDone = 1 ;
OPEN curPetStat ;
REPEAT
FETCH curPetStat INTO intCreature , intLevel , intCurrHP , intCurrMana , intCurrArmor , intCurrSTR , intCurrAGI , intCurrSTA , intCurrINT , intCurrSPI ;
IF intLevel = intStartLvl THEN
REPEAT
SET intLevel = intLevel + 1 ;
DELETE FROM pet_levelstats WHERE ` creature_entry ` = intCreature AND ` level ` = intLevel ;
IF ( ROUND ( intCurrHP * ( 1 + sngHPInc ) + 1 ) ) < = intMaxHP THEN
SET intCurrHP = ROUND ( intCurrHP * ( 1 + sngHPInc ) + 100 ) ;
ELSE
SET intCurrHP = intMaxHP ;
END IF ;
IF ( ROUND ( intCurrMana * ( 1 + sngManaInc ) + 1 ) ) < = intMaxMana THEN
SET intCurrMana = ROUND ( intCurrMana * ( 1 + sngManaInc ) + 100 ) ;
ELSE
SET intCurrMana = intMaxMana ;
END IF ;
IF ( ROUND ( intCurrArmor * ( 1 + sngArmorInc ) + 1 ) ) < = intMaxArmor THEN
SET intCurrArmor = ROUND ( intCurrArmor * ( 1 + sngArmorInc ) + 800 ) ;
ELSE
SET intCurrArmor = intMaxArmor ;
END IF ;
IF ( ROUND ( intCurrSTR * ( 1 + sngStatsInc ) + 1 ) ) < = intMaxStats THEN
SET intCurrSTR = ROUND ( intCurrSTR * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSTR = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrAGI * ( 1 + sngStatsInc ) + 1 ) ) < = intMaxStats THEN
SET intCurrAGI = ROUND ( intCurrAGI * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrAGI = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrSTA * ( 1 + sngStatsInc ) + 1 ) ) < = intMaxStats THEN
SET intCurrSTA = ROUND ( intCurrSTA * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSTA = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrINT * ( 1 + sngStatsInc ) + 1 ) ) < = intMaxStats THEN
SET intCurrINT = ROUND ( intCurrINT * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrINT = intMaxStats ;
END IF ;
IF ( ROUND ( intCurrSPI * ( 1 + sngStatsInc ) + 1 ) ) < = intMaxStats THEN
SET intCurrSPI = ROUND ( intCurrSPI * ( 1 + sngStatsInc ) + 10 ) ;
ELSE
SET intCurrSPI = intMaxStats ;
END IF ;
INSERT INTO pet_levelstats
( ` creature_entry ` , ` level ` , ` hp ` , ` mana ` , ` armor ` , ` str ` , ` agi ` , ` sta ` , ` inte ` , ` spi ` )
VALUES
( intCreature , intLevel , intCurrHP , intCurrMana , intCurrArmor , intCurrSTR , intCurrAGI , intCurrSTA , intCurrINT , intCurrSPI ) ;
UNTIL intLevel = intFinishLvl END REPEAT ;
END IF ;
UNTIL intRecordDone END REPEAT ;
CLOSE curPetStat ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_entry_list` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_entry_list`(IN input LONGTEXT,IN appendExisting BIT)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE cur_position INT DEFAULT 1 ;
DECLARE remainder TEXT ;
DECLARE cur_string VARCHAR ( 10 ) ;
DECLARE entry_count MEDIUMINT ;
IF appendExisting IS NULL OR appendExisting IS FALSE THEN
CREATE TABLE ` tdb_entry_list ` ( ` value ` INT NOT NULL PRIMARY KEY ) ENGINE = MYISAM ;
END IF ;
SET remainder = input ;
WHILE CHAR_LENGTH ( remainder ) > 0 AND cur_position > 0 DO
SET cur_position = INSTR ( remainder , ' , ' ) ;
IF cur_position = 0 THEN
SET cur_string = remainder ;
ELSE
SET cur_string = LEFT ( remainder , cur_position - 1 ) ;
END IF ;
IF TRIM ( cur_string ) ! = ' ' AND ( SELECT COUNT ( * ) FROM ` tdb_entry_list ` WHERE ` value ` = cur_string ) = 0 THEN
INSERT INTO ` tdb_entry_list ` VALUES ( cur_string ) ;
END IF ;
SET remainder = SUBSTRING ( remainder , cur_position + 1 ) ;
END WHILE ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_item_money` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_item_money`(IN item_entry INT, IN min_money INT, IN max_money INT)
2026-06-21 17:20:31 -05:00
BEGIN
CALL sp_error_entry ( ' ITEM ' , item_entry ) ;
UPDATE item_template SET minMoneyLoot = min_money , maxMoneyLoot = max_money WHERE entry = item_entry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_item_money_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_item_money_bylist`(IN item_entry TEXT, IN min_money INT, IN max_money INT)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE remaining INT ;
DECLARE min_entry INT ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( item_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' ITEM ' , min_entry ) ;
2026-06-21 18:10:04 -05:00
UPDATE item_template SET minMoneyLoot = min_money , maxMoneyLoot = max_money WHERE entry = min_entry ;
2026-06-21 17:20:31 -05:00
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
DROP TABLE ` tdb_entry_list ` ;
2026-06-21 17:20:31 -05:00
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_aggro` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_aggro`(IN creature_entry INT(10),IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , creature_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 WHERE ` entry ` = creature_entry ;
ELSE
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 WHERE ` entry ` = creature_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_aggro_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_aggro_bylist`(IN entry_list LONGTEXT,IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( entry_list , null ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
ELSE
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END IF ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_attackable` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_attackable`(IN npc_entry INT, IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL sp_error_entry ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 256 WHERE ` entry ` = npc_entry ;
END IF ;
IF on_off = 0 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 256 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_attackable_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_attackable_bylist`(IN npc_entry TEXT, IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE remaining INT ;
DECLARE min_entry INT ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
IF on_off = 1 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 256 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
IF on_off = 0 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 256 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_civilian` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_civilian`(IN npc_entry INT(10), IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL sp_error_entry ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 WHERE ` entry ` = npc_entry ;
ELSEIF on_off = 0 THEN
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_civilian_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_civilian_bylist`(IN npc_entry TEXT, IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE remaining INT ;
DECLARE min_entry INT ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
IF on_off = 1 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
IF on_off = 0 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_deadquest` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_deadquest`(IN npc_entry INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE check_addon_exists INT ;
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
UPDATE ` creature ` SET ` MovementType ` = 0 , ` spawndist ` = 0 , ` Deathstate ` = 0 WHERE ` id ` = npc_entry ;
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 WHERE ` entry ` = npc_entry ;
SET check_addon_exists = ( SELECT COUNT ( ` entry ` ) FROM ` creature_template_addon ` WHERE ` entry ` = npc_entry ) ;
IF check_addon_exists > 0 THEN
UPDATE ` creature_template_addon ` SET ` bytes1 ` = 7 WHERE ` entry ` = npc_entry ;
ELSE
INSERT INTO ` creature_template_addon ` VALUES ( npc_entry , 0 , 0 , 7 , 0 , 0 , ' ' ) ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_faction` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_faction`(IN npc_entry INT(10), factionA INT(10), factionH INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
UPDATE ` creature_template ` SET ` faction_A ` = IFNULL ( factionA , ` faction_A ` ) , ` faction_H ` = IFNULL ( factionH , ` faction_A ` ) WHERE ` entry ` = npc_entry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_faction_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_faction_bylist`(IN entry_list LONGTEXT, factionA INT(10), factionH INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( entry_list , null ) ;
UPDATE ` creature_template ` SET ` faction_A ` = IFNULL ( factionA , ` faction_A ` ) , ` faction_H ` = IFNULL ( factionH , ` faction_A ` ) WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_lootable` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_lootable`(IN npc_entry INT(10), IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL sp_error_entry ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` dynamicflags ` = ` dynamicflags ` & ~ 1 WHERE ` entry ` = npc_entry ;
ELSEIF on_off = 0 THEN
UPDATE ` creature_template ` SET ` dynamicflags ` = ` dynamicflags ` | 1 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_lootable_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_lootable_bylist`(IN npc_entry TEXT, IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE remaining INT ;
DECLARE min_entry INT ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
IF on_off = 1 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` dynamicflags ` = ` dynamicflags ` & ~ 1 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
IF on_off = 0 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` dynamicflags ` = ` dynamicflags ` | 1 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_lootid` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_lootid`(IN npcEntry MEDIUMINT(5),IN lootID MEDIUMINT(5))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npcEntry ) ;
UPDATE ` creature_template ` SET ` lootid ` = IFNULL ( lootID , npcEntry ) WHERE ` entry ` = npcEntry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_lootid_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_lootid_bylist`(IN entryList LONGTEXT,IN lootID MEDIUMINT(5))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( entryList , null ) ;
UPDATE ` creature_template ` SET ` lootid ` = IFNULL ( lootID , ` entry ` ) WHERE ` entry ` IN ( SELECT DISTINCT * FROM ` tdb_entry_list ` ) ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_lootid_bytable` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_lootid_bytable`(IN lootID MEDIUMINT(5))
2026-06-21 17:20:31 -05:00
BEGIN
UPDATE ` creature_template ` SET ` lootid ` = IFNULL ( lootID , ` entry ` ) WHERE ` entry ` IN ( SELECT DISTINCT * FROM ` tdb_entry_list ` ) ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_path` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_path`(IN npc_guid INT(10),OUT path INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_guid ` ( ' NPC ' , npc_guid ) ;
SELECT npc_guid * 10 INTO path ;
UPDATE ` creature ` SET ` MovementType ` = 2 , ` spawndist ` = 0 WHERE ` guid ` = npc_guid ;
IF ( SELECT COUNT ( * ) FROM ` creature_addon ` WHERE ` guid ` = npc_guid ) > 0 THEN
UPDATE ` creature_addon ` SET ` path_id ` = path WHERE ` guid ` = npc_guid ;
ELSE
INSERT INTO ` creature_addon ` ( ` guid ` , ` path_id ` ) VALUES ( npc_guid , path ) ;
END IF ;
DELETE FROM ` waypoint_data ` WHERE ` id ` = path ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_selectable` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_selectable`(IN npc_entry INT(10),IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` = npc_entry ;
ELSE
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_selectable_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_selectable_bylist`(IN entry_list LONGTEXT,IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( entry_list , null ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
ELSE
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END IF ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_targetable` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_targetable`(IN npc_entry INT(10), IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL sp_error_entry ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` = npc_entry ;
ELSEIF on_off = 0 THEN
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_targetable_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_targetable_bylist`(IN npc_entry TEXT, IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
DECLARE remaining INT ;
DECLARE min_entry INT ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
CALL sp_error_entry ( ' NPC ' , min_entry ) ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
2026-06-21 18:10:04 -05:00
CALL sp_set_entry_list ( npc_entry , NULL ) ;
2026-06-21 17:20:31 -05:00
SET remaining = ( SELECT COUNT ( ` value ` ) FROM tdb_entry_list ) ;
IF on_off = 1 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
IF on_off = 0 THEN
WHILE remaining > 0 DO
SET min_entry = ( SELECT MIN ( ` value ` ) FROM tdb_entry_list ) ;
UPDATE ` creature_template ` SET ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` = min_entry ;
DELETE FROM tdb_entry_list WHERE ` value ` = min_entry ;
SET remaining = remaining - 1 ;
END WHILE ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_trigger` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_trigger`(IN npc_entry INT(10),IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , npc_entry ) ;
IF on_off = 1 THEN
UPDATE ` creature ` SET ` spawndist ` = 0 , ` MovementType ` = 0 WHERE ` id ` = npc_entry ;
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 , ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` = npc_entry ;
ELSE
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 , ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` = npc_entry ;
END IF ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_npc_trigger_bylist` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_npc_trigger_bylist`(IN entry_list LONGTEXT,IN on_off BOOLEAN)
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_set_entry_list ` ( entry_list , null ) ;
IF on_off = 1 THEN
UPDATE ` creature ` SET ` spawndist ` = 0 , ` MovementType ` = 0 WHERE ` id ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` | 2 , ` unit_flags ` = ` unit_flags ` | 33554432 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
ELSE
UPDATE ` creature_template ` SET ` flags_extra ` = ` flags_extra ` & ~ 2 , ` unit_flags ` = ` unit_flags ` & ~ 33554432 WHERE ` entry ` IN ( SELECT * FROM ` tdb_entry_list ` ) ;
END IF ;
DROP TABLE ` tdb_entry_list ` ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_quest_level` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_quest_level`(IN quest_entry INT(10), IN quest_level INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' QUEST ' , quest_entry ) ;
UPDATE ` quest_template ` SET ` MinLevel ` = quest_level WHERE ` entry ` = quest_entry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_quest_next` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_quest_next`(IN quest_entry INT(10), IN next_quest INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' QUEST ' , quest_entry ) ;
UPDATE ` quest_template ` SET ` NextQuestId ` = next_quest WHERE ` entry ` = quest_entry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_quest_previous` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_quest_previous`(IN quest_entry INT(10), IN prev_quest INT(10))
2026-06-21 17:20:31 -05:00
BEGIN
CALL ` sp_error_entry ` ( ' QUEST ' , quest_entry ) ;
UPDATE ` quest_template ` SET ` PrevQuestId ` = prev_quest WHERE ` entry ` = quest_entry ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
/* !50003 DROP PROCEDURE IF EXISTS `sp_set_spell_target` */ ; ;
/* !50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" */ ; ;
2026-06-21 17:38:47 -05:00
/* !50003 CREATE */ /* !50003 PROCEDURE `sp_set_spell_target`(IN target_type VARCHAR(10),IN target_entry INT(11),IN spell_id INT(11))
2026-06-21 17:20:31 -05:00
BEGIN
CASE UCASE ( target_type )
WHEN ' GO ' THEN BEGIN
IF target_entry > 0 THEN
CALL ` sp_error_entry ` ( ' GO ' , target_entry ) ;
END IF ;
DELETE FROM ` spell_script_target ` WHERE ` entry ` = spell_id ;
INSERT INTO ` spell_script_target ` ( ` entry ` , ` type ` , ` targetEntry ` ) VALUES ( spell_id , 0 , target_entry ) ;
END ;
WHEN ' NPC ' THEN BEGIN
IF target_entry > 0 THEN
CALL ` sp_error_entry ` ( ' NPC ' , target_entry ) ;
END IF ;
DELETE FROM ` spell_script_target ` WHERE ` entry ` = spell_id ;
INSERT INTO ` spell_script_target ` ( ` entry ` , ` type ` , ` targetEntry ` ) VALUES ( spell_id , 1 , target_entry ) ;
END ;
WHEN ' DEAD_NPC ' THEN BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , target_entry ) ;
DELETE FROM ` spell_script_target ` WHERE ` entry ` = spell_id ;
INSERT INTO ` spell_script_target ` ( ` entry ` , ` type ` , ` targetEntry ` ) VALUES ( spell_id , 2 , target_entry ) ;
END ;
WHEN ' MINION ' THEN BEGIN
CALL ` sp_error_entry ` ( ' NPC ' , target_entry ) ;
DELETE FROM ` spell_script_target ` WHERE ` entry ` = spell_id ;
INSERT INTO ` spell_script_target ` ( ` entry ` , ` type ` , ` targetEntry ` ) VALUES ( spell_id , 3 , target_entry ) ;
END ;
ELSE CALL INCORRECT_TARGET_TYPE ;
END CASE ;
END * / ; ;
/* !50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */ ; ;
DELIMITER ;
/* !40103 SET TIME_ZONE=@OLD_TIME_ZONE */ ;
/* !40101 SET SQL_MODE=@OLD_SQL_MODE */ ;
/* !40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */ ;
/* !40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */ ;
/* !40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */ ;
/* !40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */ ;
/* !40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */ ;
/* !40111 SET SQL_NOTES=@OLD_SQL_NOTES */ ;