*Backup your DB!
[8098] Support uint32 spell ids in code. Author: VladimirMangos
* Propertly work with uint32 spell ids in player action bar
* Fix in same time bug with not save equipment set button with id==0
* Merge misc field in character_action and playercreateinfo_action to action field as 3 byte
* Propertly load uint32 spell ids from character_spell
* Fixed types for some pet/creature related structure for spell id storing.
--HG--
branch : trunk
This commit is contained in:
+2
-3
@@ -23,7 +23,7 @@
|
||||
|
||||
DROP TABLE IF EXISTS `character_db_version`;
|
||||
CREATE TABLE `character_db_version` (
|
||||
`required_8072_02_characters_characters` bit(1) default NULL
|
||||
`required_8098_04_characters_pet_spell` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
|
||||
|
||||
--
|
||||
@@ -389,9 +389,8 @@ DROP TABLE IF EXISTS `character_action`;
|
||||
CREATE TABLE `character_action` (
|
||||
`guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier',
|
||||
`button` tinyint(3) unsigned NOT NULL default '0',
|
||||
`action` smallint(5) unsigned NOT NULL default '0',
|
||||
`action` int(11) unsigned NOT NULL default '0',
|
||||
`type` tinyint(3) unsigned NOT NULL default '0',
|
||||
`misc` tinyint(3) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`guid`,`button`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Player System';
|
||||
|
||||
|
||||
+356
-357
@@ -23,7 +23,7 @@ DROP TABLE IF EXISTS `db_version`;
|
||||
CREATE TABLE `db_version` (
|
||||
`version` varchar(120) default NULL,
|
||||
`creature_ai_version` varchar(120) default NULL,
|
||||
`required_8071_01_mangos_command` bit(1) default NULL
|
||||
`required_8098_02_mangos_playercreateinfo_action` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||
|
||||
--
|
||||
@@ -9720,9 +9720,8 @@ CREATE TABLE `playercreateinfo_action` (
|
||||
`race` tinyint(3) unsigned NOT NULL default '0',
|
||||
`class` tinyint(3) unsigned NOT NULL default '0',
|
||||
`button` smallint(5) unsigned NOT NULL default '0',
|
||||
`action` smallint(5) unsigned NOT NULL default '0',
|
||||
`action` int(11) unsigned NOT NULL default '0',
|
||||
`type` smallint(5) unsigned NOT NULL default '0',
|
||||
`misc` smallint(5) unsigned NOT NULL default '0',
|
||||
KEY `playercreateinfo_race_class_index` (`race`,`class`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
@@ -9733,360 +9732,360 @@ CREATE TABLE `playercreateinfo_action` (
|
||||
LOCK TABLES `playercreateinfo_action` WRITE;
|
||||
/*!40000 ALTER TABLE `playercreateinfo_action` DISABLE KEYS */;
|
||||
INSERT INTO `playercreateinfo_action` VALUES
|
||||
(1,1,1,78,0,0),
|
||||
(1,1,0,6603,0,0),
|
||||
(1,1,11,117,128,0),
|
||||
(1,2,2,635,0,0),
|
||||
(1,2,0,6603,0,0),
|
||||
(1,2,1,21084,0,0),
|
||||
(1,2,10,159,128,0),
|
||||
(1,2,11,2070,128,0),
|
||||
(1,4,1,1752,0,0),
|
||||
(1,4,2,2098,0,0),
|
||||
(1,4,3,2764,0,0),
|
||||
(1,4,0,6603,0,0),
|
||||
(1,4,11,2070,128,0),
|
||||
(1,5,1,585,0,0),
|
||||
(1,5,2,2050,0,0),
|
||||
(1,5,0,6603,0,0),
|
||||
(1,5,10,159,128,0),
|
||||
(1,5,11,2070,128,0),
|
||||
(1,6,0,6603,0,0),
|
||||
(1,6,1,49576,0,0),
|
||||
(1,6,2,45477,0,0),
|
||||
(1,6,3,45462,0,0),
|
||||
(1,6,4,45902,0,0),
|
||||
(1,6,5,47541,0,0),
|
||||
(1,6,11,59752,0,0),
|
||||
(1,8,1,133,0,0),
|
||||
(1,8,2,168,0,0),
|
||||
(1,8,0,6603,0,0),
|
||||
(1,8,10,159,128,0),
|
||||
(1,8,11,2070,128,0),
|
||||
(1,9,1,686,0,0),
|
||||
(1,9,2,687,0,0),
|
||||
(1,9,0,6603,0,0),
|
||||
(1,9,10,159,128,0),
|
||||
(1,9,11,4604,128,0),
|
||||
(2,1,1,78,0,0),
|
||||
(2,1,0,6603,0,0),
|
||||
(2,1,11,117,128,0),
|
||||
(2,3,2,75,0,0),
|
||||
(2,3,1,2973,0,0),
|
||||
(2,3,0,6603,0,0),
|
||||
(2,3,11,117,128,0),
|
||||
(2,3,10,159,128,0),
|
||||
(2,4,10,0,128,0),
|
||||
(2,4,1,1752,0,0),
|
||||
(2,4,2,2098,0,0),
|
||||
(2,4,0,6603,0,0),
|
||||
(2,4,11,117,128,0),
|
||||
(2,6,0,6603,0,0),
|
||||
(2,6,1,49576,0,0),
|
||||
(2,6,2,45477,0,0),
|
||||
(2,6,3,45462,0,0),
|
||||
(2,6,4,45902,0,0),
|
||||
(2,6,5,47541,0,0),
|
||||
(2,6,10,20572,0,0),
|
||||
(2,7,2,331,0,0),
|
||||
(2,7,1,403,0,0),
|
||||
(2,7,0,6603,0,0),
|
||||
(2,7,11,117,128,0),
|
||||
(2,7,10,159,128,0),
|
||||
(2,9,1,686,0,0),
|
||||
(2,9,2,687,0,0),
|
||||
(2,9,0,6603,0,0),
|
||||
(2,9,11,117,128,0),
|
||||
(2,9,10,159,128,0),
|
||||
(3,1,1,78,0,0),
|
||||
(3,1,0,6603,0,0),
|
||||
(3,1,11,117,128,0),
|
||||
(3,2,2,635,0,0),
|
||||
(3,2,0,6603,0,0),
|
||||
(3,2,1,21084,0,0),
|
||||
(3,2,10,159,128,0),
|
||||
(3,2,11,4540,128,0),
|
||||
(3,3,2,75,0,0),
|
||||
(3,3,1,2973,0,0),
|
||||
(3,3,0,6603,0,0),
|
||||
(3,3,11,117,128,0),
|
||||
(3,3,10,159,128,0),
|
||||
(3,4,1,1752,0,0),
|
||||
(3,4,2,2098,0,0),
|
||||
(3,4,3,2764,0,0),
|
||||
(3,4,0,6603,0,0),
|
||||
(3,4,11,4540,128,0),
|
||||
(3,5,1,585,0,0),
|
||||
(3,5,2,2050,0,0),
|
||||
(3,5,0,6603,0,0),
|
||||
(3,5,10,159,128,0),
|
||||
(3,5,11,4540,128,0),
|
||||
(3,6,0,6603,0,0),
|
||||
(3,6,1,49576,0,0),
|
||||
(3,6,2,45477,0,0),
|
||||
(3,6,3,45462,0,0),
|
||||
(3,6,4,45902,0,0),
|
||||
(3,6,5,47541,0,0),
|
||||
(3,6,10,2481,0,0),
|
||||
(4,1,1,78,0,0),
|
||||
(4,1,0,6603,0,0),
|
||||
(4,1,11,117,128,0),
|
||||
(4,3,2,75,0,0),
|
||||
(4,3,1,2973,0,0),
|
||||
(4,3,0,6603,0,0),
|
||||
(4,3,11,117,128,0),
|
||||
(4,3,10,159,128,0),
|
||||
(4,4,1,1752,0,0),
|
||||
(4,4,2,2098,0,0),
|
||||
(4,4,3,2764,0,0),
|
||||
(4,4,0,6603,0,0),
|
||||
(4,4,11,4540,128,0),
|
||||
(4,5,1,585,0,0),
|
||||
(4,5,2,2050,0,0),
|
||||
(4,5,0,6603,0,0),
|
||||
(4,5,10,159,128,0),
|
||||
(4,5,11,2070,128,0),
|
||||
(4,6,0,6603,0,0),
|
||||
(4,6,1,49576,0,0),
|
||||
(4,6,2,45477,0,0),
|
||||
(4,6,3,45462,0,0),
|
||||
(4,6,4,45902,0,0),
|
||||
(4,6,5,47541,0,0),
|
||||
(4,6,10,58984,0,0),
|
||||
(4,6,83,58984,0,0),
|
||||
(4,11,1,5176,0,0),
|
||||
(4,11,2,5185,0,0),
|
||||
(4,11,0,6603,0,0),
|
||||
(4,11,10,159,128,0),
|
||||
(4,11,11,4536,128,0),
|
||||
(5,1,11,4604,128,0),
|
||||
(5,1,0,6603,0,0),
|
||||
(5,1,1,78,0,0),
|
||||
(5,4,11,4604,128,0),
|
||||
(5,4,3,2764,0,0),
|
||||
(5,4,2,2098,0,0),
|
||||
(5,4,1,1752,0,0),
|
||||
(5,4,0,6603,0,0),
|
||||
(5,5,10,159,128,0),
|
||||
(5,5,2,2050,0,0),
|
||||
(5,5,1,585,0,0),
|
||||
(5,5,11,4604,128,0),
|
||||
(5,5,0,6603,0,0),
|
||||
(5,6,0,6603,0,0),
|
||||
(5,6,1,49576,0,0),
|
||||
(5,6,2,45477,0,0),
|
||||
(5,6,3,45462,0,0),
|
||||
(5,6,4,45902,0,0),
|
||||
(5,6,5,47541,0,0),
|
||||
(5,6,10,20577,0,0),
|
||||
(5,8,11,4604,128,0),
|
||||
(5,8,10,159,128,0),
|
||||
(5,8,2,168,0,0),
|
||||
(5,8,1,133,0,0),
|
||||
(5,8,0,6603,0,0),
|
||||
(5,9,1,686,0,0),
|
||||
(5,9,10,159,128,0),
|
||||
(5,9,2,687,0,0),
|
||||
(5,9,11,4604,128,0),
|
||||
(5,9,0,6603,0,0),
|
||||
(6,1,1,78,0,0),
|
||||
(6,1,2,20549,0,0),
|
||||
(6,1,11,4540,128,0),
|
||||
(6,1,0,6603,0,0),
|
||||
(6,3,1,2973,0,0),
|
||||
(6,3,10,159,128,0),
|
||||
(6,3,2,75,0,0),
|
||||
(6,3,3,20549,0,0),
|
||||
(6,3,11,117,128,0),
|
||||
(6,3,0,6603,0,0),
|
||||
(6,6,0,6603,0,0),
|
||||
(6,6,1,49576,0,0),
|
||||
(6,6,2,45477,0,0),
|
||||
(6,6,3,45462,0,0),
|
||||
(6,6,4,45902,0,0),
|
||||
(6,6,5,47541,0,0),
|
||||
(6,6,10,20549,0,0),
|
||||
(6,6,75,20549,0,0),
|
||||
(6,7,1,403,0,0),
|
||||
(6,7,10,159,128,0),
|
||||
(6,7,2,331,0,0),
|
||||
(6,7,3,20549,0,0),
|
||||
(6,7,11,4604,128,0),
|
||||
(6,7,0,6603,0,0),
|
||||
(6,11,1,5176,0,0),
|
||||
(6,11,10,159,128,0),
|
||||
(6,11,2,5185,0,0),
|
||||
(6,11,3,20549,0,0),
|
||||
(6,11,11,4536,128,0),
|
||||
(6,11,0,6603,0,0),
|
||||
(7,1,11,117,128,0),
|
||||
(7,1,1,78,0,0),
|
||||
(7,1,0,6603,0,0),
|
||||
(7,4,11,117,128,0),
|
||||
(7,4,3,2764,0,0),
|
||||
(7,4,1,1752,0,0),
|
||||
(7,4,2,2098,0,0),
|
||||
(7,4,0,6603,0,0),
|
||||
(7,6,0,6603,0,0),
|
||||
(7,6,1,49576,0,0),
|
||||
(7,6,2,45477,0,0),
|
||||
(7,6,3,45462,0,0),
|
||||
(7,6,4,45902,0,0),
|
||||
(7,6,5,47541,0,0),
|
||||
(7,6,10,20589,0,0),
|
||||
(7,6,72,6603,0,0),
|
||||
(7,6,83,117,128,0),
|
||||
(7,6,84,6603,0,0),
|
||||
(7,6,96,6603,0,0),
|
||||
(7,6,108,6603,0,0),
|
||||
(7,8,11,4536,128,0),
|
||||
(7,8,1,133,0,0),
|
||||
(7,8,2,168,0,0),
|
||||
(7,8,10,159,128,0),
|
||||
(7,8,0,6603,0,0),
|
||||
(7,9,11,4604,128,0),
|
||||
(7,9,1,686,0,0),
|
||||
(7,9,2,687,0,0),
|
||||
(7,9,10,159,128,0),
|
||||
(7,9,0,6603,0,0),
|
||||
(8,1,11,117,128,0),
|
||||
(8,1,1,78,0,0),
|
||||
(8,1,3,2764,0,0),
|
||||
(8,1,0,6603,0,0),
|
||||
(8,3,10,159,128,0),
|
||||
(8,3,11,4604,128,0),
|
||||
(8,3,1,2973,0,0),
|
||||
(8,3,2,75,0,0),
|
||||
(8,3,0,6603,0,0),
|
||||
(8,4,1,1752,0,0),
|
||||
(8,4,3,2764,0,0),
|
||||
(8,4,2,2098,0,0),
|
||||
(8,4,11,117,128,0),
|
||||
(8,4,0,6603,0,0),
|
||||
(8,5,1,585,0,0),
|
||||
(8,5,10,159,128,0),
|
||||
(8,5,2,2050,0,0),
|
||||
(8,5,11,4540,128,0),
|
||||
(8,5,0,6603,0,0),
|
||||
(8,6,0,6603,0,0),
|
||||
(8,6,1,49576,0,0),
|
||||
(8,6,2,45477,0,0),
|
||||
(8,6,3,45462,0,0),
|
||||
(8,6,4,45902,0,0),
|
||||
(8,6,5,47541,0,0),
|
||||
(8,6,10,50621,0,0),
|
||||
(8,7,1,403,0,0),
|
||||
(8,7,10,159,128,0),
|
||||
(8,7,2,331,0,0),
|
||||
(8,7,11,117,128,0),
|
||||
(8,7,0,6603,0,0),
|
||||
(8,8,1,133,0,0),
|
||||
(8,8,10,159,128,0),
|
||||
(8,8,2,168,0,0),
|
||||
(8,8,11,117,128,0),
|
||||
(8,8,0,6603,0,0),
|
||||
(10,2,0,6603,0,0),
|
||||
(10,2,1,21084,0,0),
|
||||
(10,2,2,635,0,0),
|
||||
(10,2,3,28734,0,0),
|
||||
(10,2,4,28730,0,0),
|
||||
(10,2,10,159,128,0),
|
||||
(10,2,11,20857,128,0),
|
||||
(10,3,0,6603,0,0),
|
||||
(10,3,1,2973,0,0),
|
||||
(10,3,2,75,0,0),
|
||||
(10,3,3,28734,0,0),
|
||||
(10,3,4,28730,0,0),
|
||||
(10,3,10,159,128,0),
|
||||
(10,3,11,20857,128,0),
|
||||
(10,4,0,6603,0,0),
|
||||
(10,4,1,1752,0,0),
|
||||
(10,4,2,2098,0,0),
|
||||
(10,4,3,2764,0,0),
|
||||
(10,4,4,28734,0,0),
|
||||
(10,4,5,25046,0,0),
|
||||
(10,4,11,20857,128,0),
|
||||
(10,5,0,6603,0,0),
|
||||
(10,5,1,585,0,0),
|
||||
(10,5,2,2050,0,0),
|
||||
(10,5,3,28734,0,0),
|
||||
(10,5,4,28730,0,0),
|
||||
(10,5,10,159,128,0),
|
||||
(10,5,11,20857,128,0),
|
||||
(10,6,0,6603,0,0),
|
||||
(10,6,1,49576,0,0),
|
||||
(10,6,2,45477,0,0),
|
||||
(10,6,3,45462,0,0),
|
||||
(10,6,4,45902,0,0),
|
||||
(10,6,5,47541,0,0),
|
||||
(10,6,6,50613,0,0),
|
||||
(10,8,0,6603,0,0),
|
||||
(10,8,1,133,0,0),
|
||||
(10,8,2,168,0,0),
|
||||
(10,8,3,28734,0,0),
|
||||
(10,8,4,28730,0,0),
|
||||
(10,8,10,159,128,0),
|
||||
(10,8,11,20857,128,0),
|
||||
(10,9,11,20857,128,0),
|
||||
(10,9,10,159,128,0),
|
||||
(10,9,4,28730,0,0),
|
||||
(10,9,3,28734,0,0),
|
||||
(10,9,2,687,0,0),
|
||||
(10,9,1,686,0,0),
|
||||
(10,9,0,6603,0,0),
|
||||
(11,1,0,6603,0,0),
|
||||
(11,1,72,6603,0,0),
|
||||
(11,1,73,78,0,0),
|
||||
(11,1,74,28880,0,0),
|
||||
(11,1,83,4540,128,0),
|
||||
(11,1,84,6603,0,0),
|
||||
(11,1,96,6603,0,0),
|
||||
(11,1,108,6603,0,0),
|
||||
(11,2,0,6603,0,0),
|
||||
(11,2,1,21084,0,0),
|
||||
(11,2,2,635,0,0),
|
||||
(11,2,3,59542,0,0),
|
||||
(11,2,10,159,128,0),
|
||||
(11,2,11,4540,128,0),
|
||||
(11,2,83,4540,128,0),
|
||||
(11,3,0,6603,0,0),
|
||||
(11,3,1,2973,0,0),
|
||||
(11,3,2,75,0,0),
|
||||
(11,3,3,59543,0,0),
|
||||
(11,3,10,159,128,0),
|
||||
(11,3,11,4540,128,0),
|
||||
(11,3,72,6603,0,0),
|
||||
(11,3,73,2973,0,0),
|
||||
(11,3,74,75,0,0),
|
||||
(11,3,82,159,128,0),
|
||||
(11,3,83,4540,128,0),
|
||||
(11,5,0,6603,0,0),
|
||||
(11,5,1,585,0,0),
|
||||
(11,5,2,2050,0,0),
|
||||
(11,5,3,59544,0,0),
|
||||
(11,5,10,159,128,0),
|
||||
(11,5,11,4540,128,0),
|
||||
(11,5,83,4540,128,0),
|
||||
(11,6,0,6603,0,0),
|
||||
(11,6,1,49576,0,0),
|
||||
(11,6,2,45477,0,0),
|
||||
(11,6,3,45462,0,0),
|
||||
(11,6,4,45902,0,0),
|
||||
(11,6,5,47541,0,0),
|
||||
(11,6,6,59545,0,0),
|
||||
(11,7,0,6603,0,0),
|
||||
(11,7,1,403,0,0),
|
||||
(11,7,2,331,0,0),
|
||||
(11,7,3,59547,0,0),
|
||||
(11,7,10,159,128,0),
|
||||
(11,7,11,4540,128,0),
|
||||
(11,8,0,6603,0,0),
|
||||
(11,8,1,133,0,0),
|
||||
(11,8,2,168,0,0),
|
||||
(11,8,3,59548,0,0),
|
||||
(11,8,10,159,128,0),
|
||||
(11,8,11,4540,128,0),
|
||||
(11,8,83,4540,128,0);
|
||||
(1,1,1,78,0),
|
||||
(1,1,0,6603,0),
|
||||
(1,1,11,117,128),
|
||||
(1,2,2,635,0),
|
||||
(1,2,0,6603,0),
|
||||
(1,2,1,21084,0),
|
||||
(1,2,10,159,128),
|
||||
(1,2,11,2070,128),
|
||||
(1,4,1,1752,0),
|
||||
(1,4,2,2098,0),
|
||||
(1,4,3,2764,0),
|
||||
(1,4,0,6603,0),
|
||||
(1,4,11,2070,128),
|
||||
(1,5,1,585,0),
|
||||
(1,5,2,2050,0),
|
||||
(1,5,0,6603,0),
|
||||
(1,5,10,159,128),
|
||||
(1,5,11,2070,128),
|
||||
(1,6,0,6603,0),
|
||||
(1,6,1,49576,0),
|
||||
(1,6,2,45477,0),
|
||||
(1,6,3,45462,0),
|
||||
(1,6,4,45902,0),
|
||||
(1,6,5,47541,0),
|
||||
(1,6,11,59752,0),
|
||||
(1,8,1,133,0),
|
||||
(1,8,2,168,0),
|
||||
(1,8,0,6603,0),
|
||||
(1,8,10,159,128),
|
||||
(1,8,11,2070,128),
|
||||
(1,9,1,686,0),
|
||||
(1,9,2,687,0),
|
||||
(1,9,0,6603,0),
|
||||
(1,9,10,159,128),
|
||||
(1,9,11,4604,128),
|
||||
(2,1,1,78,0),
|
||||
(2,1,0,6603,0),
|
||||
(2,1,11,117,128),
|
||||
(2,3,2,75,0),
|
||||
(2,3,1,2973,0),
|
||||
(2,3,0,6603,0),
|
||||
(2,3,11,117,128),
|
||||
(2,3,10,159,128),
|
||||
(2,4,10,0,128),
|
||||
(2,4,1,1752,0),
|
||||
(2,4,2,2098,0),
|
||||
(2,4,0,6603,0),
|
||||
(2,4,11,117,128),
|
||||
(2,6,0,6603,0),
|
||||
(2,6,1,49576,0),
|
||||
(2,6,2,45477,0),
|
||||
(2,6,3,45462,0),
|
||||
(2,6,4,45902,0),
|
||||
(2,6,5,47541,0),
|
||||
(2,6,10,20572,0),
|
||||
(2,7,2,331,0),
|
||||
(2,7,1,403,0),
|
||||
(2,7,0,6603,0),
|
||||
(2,7,11,117,128),
|
||||
(2,7,10,159,128),
|
||||
(2,9,1,686,0),
|
||||
(2,9,2,687,0),
|
||||
(2,9,0,6603,0),
|
||||
(2,9,11,117,128),
|
||||
(2,9,10,159,128),
|
||||
(3,1,1,78,0),
|
||||
(3,1,0,6603,0),
|
||||
(3,1,11,117,128),
|
||||
(3,2,2,635,0),
|
||||
(3,2,0,6603,0),
|
||||
(3,2,1,21084,0),
|
||||
(3,2,10,159,128),
|
||||
(3,2,11,4540,128),
|
||||
(3,3,2,75,0),
|
||||
(3,3,1,2973,0),
|
||||
(3,3,0,6603,0),
|
||||
(3,3,11,117,128),
|
||||
(3,3,10,159,128),
|
||||
(3,4,1,1752,0),
|
||||
(3,4,2,2098,0),
|
||||
(3,4,3,2764,0),
|
||||
(3,4,0,6603,0),
|
||||
(3,4,11,4540,128),
|
||||
(3,5,1,585,0),
|
||||
(3,5,2,2050,0),
|
||||
(3,5,0,6603,0),
|
||||
(3,5,10,159,128),
|
||||
(3,5,11,4540,128),
|
||||
(3,6,0,6603,0),
|
||||
(3,6,1,49576,0),
|
||||
(3,6,2,45477,0),
|
||||
(3,6,3,45462,0),
|
||||
(3,6,4,45902,0),
|
||||
(3,6,5,47541,0),
|
||||
(3,6,10,2481,0),
|
||||
(4,1,1,78,0),
|
||||
(4,1,0,6603,0),
|
||||
(4,1,11,117,128),
|
||||
(4,3,2,75,0),
|
||||
(4,3,1,2973,0),
|
||||
(4,3,0,6603,0),
|
||||
(4,3,11,117,128),
|
||||
(4,3,10,159,128),
|
||||
(4,4,1,1752,0),
|
||||
(4,4,2,2098,0),
|
||||
(4,4,3,2764,0),
|
||||
(4,4,0,6603,0),
|
||||
(4,4,11,4540,128),
|
||||
(4,5,1,585,0),
|
||||
(4,5,2,2050,0),
|
||||
(4,5,0,6603,0),
|
||||
(4,5,10,159,128),
|
||||
(4,5,11,2070,128),
|
||||
(4,6,0,6603,0),
|
||||
(4,6,1,49576,0),
|
||||
(4,6,2,45477,0),
|
||||
(4,6,3,45462,0),
|
||||
(4,6,4,45902,0),
|
||||
(4,6,5,47541,0),
|
||||
(4,6,10,58984,0),
|
||||
(4,6,83,58984,0),
|
||||
(4,11,1,5176,0),
|
||||
(4,11,2,5185,0),
|
||||
(4,11,0,6603,0),
|
||||
(4,11,10,159,128),
|
||||
(4,11,11,4536,128),
|
||||
(5,1,11,4604,128),
|
||||
(5,1,0,6603,0),
|
||||
(5,1,1,78,0),
|
||||
(5,4,11,4604,128),
|
||||
(5,4,3,2764,0),
|
||||
(5,4,2,2098,0),
|
||||
(5,4,1,1752,0),
|
||||
(5,4,0,6603,0),
|
||||
(5,5,10,159,128),
|
||||
(5,5,2,2050,0),
|
||||
(5,5,1,585,0),
|
||||
(5,5,11,4604,128),
|
||||
(5,5,0,6603,0),
|
||||
(5,6,0,6603,0),
|
||||
(5,6,1,49576,0),
|
||||
(5,6,2,45477,0),
|
||||
(5,6,3,45462,0),
|
||||
(5,6,4,45902,0),
|
||||
(5,6,5,47541,0),
|
||||
(5,6,10,20577,0),
|
||||
(5,8,11,4604,128),
|
||||
(5,8,10,159,128),
|
||||
(5,8,2,168,0),
|
||||
(5,8,1,133,0),
|
||||
(5,8,0,6603,0),
|
||||
(5,9,1,686,0),
|
||||
(5,9,10,159,128),
|
||||
(5,9,2,687,0),
|
||||
(5,9,11,4604,128),
|
||||
(5,9,0,6603,0),
|
||||
(6,1,1,78,0),
|
||||
(6,1,2,20549,0),
|
||||
(6,1,11,4540,128),
|
||||
(6,1,0,6603,0),
|
||||
(6,3,1,2973,0),
|
||||
(6,3,10,159,128),
|
||||
(6,3,2,75,0),
|
||||
(6,3,3,20549,0),
|
||||
(6,3,11,117,128),
|
||||
(6,3,0,6603,0),
|
||||
(6,6,0,6603,0),
|
||||
(6,6,1,49576,0),
|
||||
(6,6,2,45477,0),
|
||||
(6,6,3,45462,0),
|
||||
(6,6,4,45902,0),
|
||||
(6,6,5,47541,0),
|
||||
(6,6,10,20549,0),
|
||||
(6,6,75,20549,0),
|
||||
(6,7,1,403,0),
|
||||
(6,7,10,159,128),
|
||||
(6,7,2,331,0),
|
||||
(6,7,3,20549,0),
|
||||
(6,7,11,4604,128),
|
||||
(6,7,0,6603,0),
|
||||
(6,11,1,5176,0),
|
||||
(6,11,10,159,128),
|
||||
(6,11,2,5185,0),
|
||||
(6,11,3,20549,0),
|
||||
(6,11,11,4536,128),
|
||||
(6,11,0,6603,0),
|
||||
(7,1,11,117,128),
|
||||
(7,1,1,78,0),
|
||||
(7,1,0,6603,0),
|
||||
(7,4,11,117,128),
|
||||
(7,4,3,2764,0),
|
||||
(7,4,1,1752,0),
|
||||
(7,4,2,2098,0),
|
||||
(7,4,0,6603,0),
|
||||
(7,6,0,6603,0),
|
||||
(7,6,1,49576,0),
|
||||
(7,6,2,45477,0),
|
||||
(7,6,3,45462,0),
|
||||
(7,6,4,45902,0),
|
||||
(7,6,5,47541,0),
|
||||
(7,6,10,20589,0),
|
||||
(7,6,72,6603,0),
|
||||
(7,6,83,117,128),
|
||||
(7,6,84,6603,0),
|
||||
(7,6,96,6603,0),
|
||||
(7,6,108,6603,0),
|
||||
(7,8,11,4536,128),
|
||||
(7,8,1,133,0),
|
||||
(7,8,2,168,0),
|
||||
(7,8,10,159,128),
|
||||
(7,8,0,6603,0),
|
||||
(7,9,11,4604,128),
|
||||
(7,9,1,686,0),
|
||||
(7,9,2,687,0),
|
||||
(7,9,10,159,128),
|
||||
(7,9,0,6603,0),
|
||||
(8,1,11,117,128),
|
||||
(8,1,1,78,0),
|
||||
(8,1,3,2764,0),
|
||||
(8,1,0,6603,0),
|
||||
(8,3,10,159,128),
|
||||
(8,3,11,4604,128),
|
||||
(8,3,1,2973,0),
|
||||
(8,3,2,75,0),
|
||||
(8,3,0,6603,0),
|
||||
(8,4,1,1752,0),
|
||||
(8,4,3,2764,0),
|
||||
(8,4,2,2098,0),
|
||||
(8,4,11,117,128),
|
||||
(8,4,0,6603,0),
|
||||
(8,5,1,585,0),
|
||||
(8,5,10,159,128),
|
||||
(8,5,2,2050,0),
|
||||
(8,5,11,4540,128),
|
||||
(8,5,0,6603,0),
|
||||
(8,6,0,6603,0),
|
||||
(8,6,1,49576,0),
|
||||
(8,6,2,45477,0),
|
||||
(8,6,3,45462,0),
|
||||
(8,6,4,45902,0),
|
||||
(8,6,5,47541,0),
|
||||
(8,6,10,50621,0),
|
||||
(8,7,1,403,0),
|
||||
(8,7,10,159,128),
|
||||
(8,7,2,331,0),
|
||||
(8,7,11,117,128),
|
||||
(8,7,0,6603,0),
|
||||
(8,8,1,133,0),
|
||||
(8,8,10,159,128),
|
||||
(8,8,2,168,0),
|
||||
(8,8,11,117,128),
|
||||
(8,8,0,6603,0),
|
||||
(10,2,0,6603,0),
|
||||
(10,2,1,21084,0),
|
||||
(10,2,2,635,0),
|
||||
(10,2,3,28734,0),
|
||||
(10,2,4,28730,0),
|
||||
(10,2,10,159,128),
|
||||
(10,2,11,20857,128),
|
||||
(10,3,0,6603,0),
|
||||
(10,3,1,2973,0),
|
||||
(10,3,2,75,0),
|
||||
(10,3,3,28734,0),
|
||||
(10,3,4,28730,0),
|
||||
(10,3,10,159,128),
|
||||
(10,3,11,20857,128),
|
||||
(10,4,0,6603,0),
|
||||
(10,4,1,1752,0),
|
||||
(10,4,2,2098,0),
|
||||
(10,4,3,2764,0),
|
||||
(10,4,4,28734,0),
|
||||
(10,4,5,25046,0),
|
||||
(10,4,11,20857,128),
|
||||
(10,5,0,6603,0),
|
||||
(10,5,1,585,0),
|
||||
(10,5,2,2050,0),
|
||||
(10,5,3,28734,0),
|
||||
(10,5,4,28730,0),
|
||||
(10,5,10,159,128),
|
||||
(10,5,11,20857,128),
|
||||
(10,6,0,6603,0),
|
||||
(10,6,1,49576,0),
|
||||
(10,6,2,45477,0),
|
||||
(10,6,3,45462,0),
|
||||
(10,6,4,45902,0),
|
||||
(10,6,5,47541,0),
|
||||
(10,6,6,50613,0),
|
||||
(10,8,0,6603,0),
|
||||
(10,8,1,133,0),
|
||||
(10,8,2,168,0),
|
||||
(10,8,3,28734,0),
|
||||
(10,8,4,28730,0),
|
||||
(10,8,10,159,128),
|
||||
(10,8,11,20857,128),
|
||||
(10,9,11,20857,128),
|
||||
(10,9,10,159,128),
|
||||
(10,9,4,28730,0),
|
||||
(10,9,3,28734,0),
|
||||
(10,9,2,687,0),
|
||||
(10,9,1,686,0),
|
||||
(10,9,0,6603,0),
|
||||
(11,1,0,6603,0),
|
||||
(11,1,72,6603,0),
|
||||
(11,1,73,78,0),
|
||||
(11,1,74,28880,0),
|
||||
(11,1,83,4540,128),
|
||||
(11,1,84,6603,0),
|
||||
(11,1,96,6603,0),
|
||||
(11,1,108,6603,0),
|
||||
(11,2,0,6603,0),
|
||||
(11,2,1,21084,0),
|
||||
(11,2,2,635,0),
|
||||
(11,2,3,59542,0),
|
||||
(11,2,10,159,128),
|
||||
(11,2,11,4540,128),
|
||||
(11,2,83,4540,128),
|
||||
(11,3,0,6603,0),
|
||||
(11,3,1,2973,0),
|
||||
(11,3,2,75,0),
|
||||
(11,3,3,59543,0),
|
||||
(11,3,10,159,128),
|
||||
(11,3,11,4540,128),
|
||||
(11,3,72,6603,0),
|
||||
(11,3,73,2973,0),
|
||||
(11,3,74,75,0),
|
||||
(11,3,82,159,128),
|
||||
(11,3,83,4540,128),
|
||||
(11,5,0,6603,0),
|
||||
(11,5,1,585,0),
|
||||
(11,5,2,2050,0),
|
||||
(11,5,3,59544,0),
|
||||
(11,5,10,159,128),
|
||||
(11,5,11,4540,128),
|
||||
(11,5,83,4540,128),
|
||||
(11,6,0,6603,0),
|
||||
(11,6,1,49576,0),
|
||||
(11,6,2,45477,0),
|
||||
(11,6,3,45462,0),
|
||||
(11,6,4,45902,0),
|
||||
(11,6,5,47541,0),
|
||||
(11,6,6,59545,0),
|
||||
(11,7,0,6603,0),
|
||||
(11,7,1,403,0),
|
||||
(11,7,2,331,0),
|
||||
(11,7,3,59547,0),
|
||||
(11,7,10,159,128),
|
||||
(11,7,11,4540,128),
|
||||
(11,8,0,6603,0),
|
||||
(11,8,1,133,0),
|
||||
(11,8,2,168,0),
|
||||
(11,8,3,59548,0),
|
||||
(11,8,10,159,128),
|
||||
(11,8,11,4540,128),
|
||||
(11,8,83,4540,128);
|
||||
/*!40000 ALTER TABLE `playercreateinfo_action` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
-- ALTER TABLE character_db_version CHANGE COLUMN required_8072_02_characters_characters required_8098_01_characters_character_action bit;
|
||||
|
||||
ALTER TABLE character_action
|
||||
CHANGE COLUMN action action int(11) unsigned NOT NULL default '0';
|
||||
|
||||
UPDATE character_action
|
||||
SET action = action | ( misc < 16 );
|
||||
|
||||
ALTER TABLE character_action
|
||||
DROP COLUMN misc;
|
||||
|
||||
|
||||
UPDATE character_pet
|
||||
SET abdata = CONCAT(
|
||||
(SUBSTRING(abdata, 1, length(SUBSTRING_INDEX(abdata, ' ', 1))) >> 8),' ',
|
||||
SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 1))+2, length(SUBSTRING_INDEX(abdata, ' ', 2))-length(SUBSTRING_INDEX(abdata, ' ', 1))-1),' ',
|
||||
(SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 2))+2, length(SUBSTRING_INDEX(abdata, ' ', 3))-length(SUBSTRING_INDEX(abdata, ' ', 2))-1) >> 8),' ',
|
||||
SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 3))+2, length(SUBSTRING_INDEX(abdata, ' ', 4))-length(SUBSTRING_INDEX(abdata, ' ', 3))-1),' ',
|
||||
(SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 4))+2, length(SUBSTRING_INDEX(abdata, ' ', 5))-length(SUBSTRING_INDEX(abdata, ' ', 4))-1) >> 8),' ',
|
||||
SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 5))+2, length(SUBSTRING_INDEX(abdata, ' ', 6))-length(SUBSTRING_INDEX(abdata, ' ', 5))-1),' ',
|
||||
(SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 6))+2, length(SUBSTRING_INDEX(abdata, ' ', 7))-length(SUBSTRING_INDEX(abdata, ' ', 6))-1) >> 8),' ',
|
||||
SUBSTRING(abdata, length(SUBSTRING_INDEX(abdata, ' ', 7))+2, length(SUBSTRING_INDEX(abdata, ' ', 8))-length(SUBSTRING_INDEX(abdata, ' ', 7))-1),' '
|
||||
);
|
||||
|
||||
|
||||
UPDATE pet_spell
|
||||
SET active = ( active >> 8);
|
||||
@@ -0,0 +1,10 @@
|
||||
-- ALTER TABLE db_version CHANGE COLUMN required_8071_01_mangos_command required_8098_02_mangos_playercreateinfo_action bit;
|
||||
|
||||
ALTER TABLE playercreateinfo_action
|
||||
CHANGE COLUMN action action int(11) unsigned NOT NULL default '0';
|
||||
|
||||
UPDATE playercreateinfo_action
|
||||
SET action = action | ( misc < 16 );
|
||||
|
||||
ALTER TABLE playercreateinfo_action
|
||||
DROP COLUMN misc;
|
||||
@@ -73,7 +73,7 @@ bool LoginQueryHolder::Initialize()
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS,"SELECT quest,time FROM character_queststatus_daily WHERE guid = '%u'", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADREPUTATION, "SELECT faction,standing,flags FROM character_reputation WHERE guid = '%u'", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADINVENTORY, "SELECT data,bag,slot,item,item_template FROM character_inventory JOIN item_instance ON character_inventory.item = item_instance.guid WHERE character_inventory.guid = '%u' ORDER BY bag,slot", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADACTIONS, "SELECT button,action,type,misc FROM character_action WHERE guid = '%u' ORDER BY button", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADACTIONS, "SELECT button,action,type FROM character_action WHERE guid = '%u' ORDER BY button", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADMAILCOUNT, "SELECT COUNT(id) FROM mail WHERE receiver = '%u' AND (checked & 1)=0 AND deliver_time <= '" UI64FMTD "'", GUID_LOPART(m_guid),(uint64)time(NULL));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADMAILDATE, "SELECT MIN(deliver_time) FROM mail WHERE receiver = '%u' AND (checked & 1)=0", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADSOCIALLIST, "SELECT friend,flags,note FROM character_social WHERE guid = '%u' LIMIT 255", GUID_LOPART(m_guid));
|
||||
|
||||
+3
-3
@@ -319,7 +319,7 @@ struct CreatureData
|
||||
|
||||
struct CreatureDataAddonAura
|
||||
{
|
||||
uint16 spell_id;
|
||||
uint32 spell_id;
|
||||
uint8 effect_idx;
|
||||
};
|
||||
|
||||
@@ -702,10 +702,10 @@ class TRINITY_DLL_SPEC Creature : public Unit
|
||||
virtual uint8 GetPetAutoSpellSize() const { return CREATURE_MAX_SPELLS; }
|
||||
virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const
|
||||
{
|
||||
if (pos >= CREATURE_MAX_SPELLS || m_charmInfo->GetCharmSpell(pos)->active != ACT_ENABLED)
|
||||
if (pos >= CREATURE_MAX_SPELLS || m_charmInfo->GetCharmSpell(pos)->GetType() != ACT_ENABLED)
|
||||
return 0;
|
||||
else
|
||||
return m_charmInfo->GetCharmSpell(pos)->spellId;
|
||||
return m_charmInfo->GetCharmSpell(pos)->GetAction();
|
||||
}
|
||||
|
||||
void SetHomePosition(float x, float y, float z, float ori) { mHome_X = x; mHome_Y = y; mHome_Z = z; mHome_O = ori;}
|
||||
|
||||
+27
-26
@@ -1040,40 +1040,41 @@ void WorldSession::HandleSetActionButtonOpcode(WorldPacket& recv_data)
|
||||
CHECK_PACKET_SIZE(recv_data,1+2+1+1);
|
||||
|
||||
sLog.outDebug( "WORLD: Received CMSG_SET_ACTION_BUTTON" );
|
||||
uint8 button, misc, type;
|
||||
uint16 action;
|
||||
recv_data >> button >> action >> misc >> type;
|
||||
sLog.outDetail( "BUTTON: %u ACTION: %u TYPE: %u MISC: %u", button, action, type, misc );
|
||||
if(action==0)
|
||||
uint8 button;
|
||||
uint32 packetData;
|
||||
recv_data >> button >> packetData;
|
||||
|
||||
uint32 action = ACTION_BUTTON_ACTION(packetData);
|
||||
uint8 type = ACTION_BUTTON_TYPE(packetData);
|
||||
|
||||
sLog.outDetail( "BUTTON: %u ACTION: %u TYPE: %u", button, action, type );
|
||||
if (!packetData)
|
||||
{
|
||||
sLog.outDetail( "MISC: Remove action from button %u", button );
|
||||
|
||||
GetPlayer()->removeActionButton(button);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(type==ACTION_BUTTON_MACRO || type==ACTION_BUTTON_CMACRO)
|
||||
switch(type)
|
||||
{
|
||||
sLog.outDetail( "MISC: Added Macro %u into button %u", action, button );
|
||||
GetPlayer()->addActionButton(button,action,type,misc);
|
||||
case ACTION_BUTTON_MACRO:
|
||||
case ACTION_BUTTON_CMACRO:
|
||||
sLog.outDetail( "MISC: Added Macro %u into button %u", action, button );
|
||||
break;
|
||||
case ACTION_BUTTON_EQSET:
|
||||
sLog.outDetail( "MISC: Added EquipmentSet %u into button %u", action, button );
|
||||
break;
|
||||
case ACTION_BUTTON_SPELL:
|
||||
sLog.outDetail( "MISC: Added Spell %u into button %u", action, button );
|
||||
break;
|
||||
case ACTION_BUTTON_ITEM:
|
||||
sLog.outDetail( "MISC: Added Item %u into button %u", action, button );
|
||||
break;
|
||||
default:
|
||||
sLog.outError( "MISC: Unknown action button type %u for action %u into button %u", type, action, button );
|
||||
return;
|
||||
}
|
||||
else if(type==ACTION_BUTTON_EQSET)
|
||||
{
|
||||
sLog.outDetail( "MISC: Added EquipmentSet %u into button %u", action, button );
|
||||
GetPlayer()->addActionButton(button,action,type,misc);
|
||||
}
|
||||
else if(type==ACTION_BUTTON_SPELL)
|
||||
{
|
||||
sLog.outDetail( "MISC: Added Spell %u into button %u", action, button );
|
||||
GetPlayer()->addActionButton(button,action,type,misc);
|
||||
}
|
||||
else if(type==ACTION_BUTTON_ITEM)
|
||||
{
|
||||
sLog.outDetail( "MISC: Added Item %u into button %u", action, button );
|
||||
GetPlayer()->addActionButton(button,action,type,misc);
|
||||
}
|
||||
else
|
||||
sLog.outError( "MISC: Unknown action button type %u for action %u into button %u", type, action, button );
|
||||
GetPlayer()->addActionButton(button,action,type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2712,8 +2712,8 @@ void ObjectMgr::LoadPlayerInfo()
|
||||
|
||||
// Load playercreate actions
|
||||
{
|
||||
// 0 1 2 3 4 5
|
||||
QueryResult *result = WorldDatabase.Query("SELECT race, class, button, action, type, misc FROM playercreateinfo_action");
|
||||
// 0 1 2 3 4
|
||||
QueryResult *result = WorldDatabase.Query("SELECT race, class, button, action, type FROM playercreateinfo_action");
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
@@ -2748,10 +2748,7 @@ void ObjectMgr::LoadPlayerInfo()
|
||||
}
|
||||
|
||||
PlayerInfo* pInfo = &playerInfo[current_race][current_class];
|
||||
pInfo->action[0].push_back(fields[2].GetUInt16());
|
||||
pInfo->action[1].push_back(fields[3].GetUInt16());
|
||||
pInfo->action[2].push_back(fields[4].GetUInt16());
|
||||
pInfo->action[3].push_back(fields[5].GetUInt16());
|
||||
pInfo->action.push_back(PlayerCreateInfoAction(fields[2].GetUInt8(),fields[3].GetUInt32(),fields[4].GetUInt8()));
|
||||
|
||||
bar.step();
|
||||
++count;
|
||||
|
||||
+12
-12
@@ -412,8 +412,8 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||
// save only spell slots from action bar
|
||||
for(uint32 i = ACTION_BAR_INDEX_PET_SPELL_START; i < ACTION_BAR_INDEX_PET_SPELL_END; ++i)
|
||||
{
|
||||
ss << uint32(m_charmInfo->GetActionBarEntry(i)->Type) << " "
|
||||
<< uint32(m_charmInfo->GetActionBarEntry(i)->SpellOrAction) << " ";
|
||||
ss << uint32(m_charmInfo->GetActionBarEntry(i)->GetType()) << " "
|
||||
<< uint32(m_charmInfo->GetActionBarEntry(i)->GetAction()) << " ";
|
||||
};
|
||||
|
||||
ss << "', "
|
||||
@@ -1064,7 +1064,7 @@ void Pet::_LoadSpells()
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
|
||||
addSpell(fields[0].GetUInt32(), ActiveStates(fields[1].GetUInt16()), PETSPELL_UNCHANGED);
|
||||
addSpell(fields[0].GetUInt32(), ActiveStates(fields[1].GetUInt8()), PETSPELL_UNCHANGED);
|
||||
}
|
||||
while( result->NextRow() );
|
||||
|
||||
@@ -1329,8 +1329,8 @@ bool Pet::learnSpell(uint32 spell_id)
|
||||
|
||||
if(!m_loading)
|
||||
{
|
||||
WorldPacket data(SMSG_PET_LEARNED_SPELL, 2);
|
||||
data << uint16(spell_id);
|
||||
WorldPacket data(SMSG_PET_LEARNED_SPELL, 4);
|
||||
data << uint32(spell_id);
|
||||
m_owner->GetSession()->SendPacket(&data);
|
||||
m_owner->PetSpellInitialize();
|
||||
}
|
||||
@@ -1382,8 +1382,8 @@ bool Pet::unlearnSpell(uint32 spell_id, bool learn_prev, bool clear_ab)
|
||||
{
|
||||
if(!m_loading)
|
||||
{
|
||||
WorldPacket data(SMSG_PET_REMOVED_SPELL, 2);
|
||||
data << uint16(spell_id);
|
||||
WorldPacket data(SMSG_PET_REMOVED_SPELL, 4);
|
||||
data << uint32(spell_id);
|
||||
m_owner->GetSession()->SendPacket(&data);
|
||||
}
|
||||
return true;
|
||||
@@ -1447,12 +1447,12 @@ void Pet::CleanupActionBar()
|
||||
{
|
||||
for(uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
if(UnitActionBarEntry const* ab = m_charmInfo->GetActionBarEntry(i))
|
||||
if(ab->SpellOrAction && ab->IsActionBarForSpell())
|
||||
if(ab->GetAction() && ab->IsActionBarForSpell())
|
||||
{
|
||||
if(!HasSpell(ab->SpellOrAction))
|
||||
if(!HasSpell(ab->GetAction()))
|
||||
m_charmInfo->SetActionBar(i, 0, ACT_PASSIVE);
|
||||
else if(ab->Type == ACT_ENABLED)
|
||||
ToggleAutocast(ab->SpellOrAction, true);
|
||||
else if(ab->GetType() == ACT_ENABLED)
|
||||
ToggleAutocast(ab->GetAction(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1832,7 +1832,7 @@ void Pet::CastPetAuras(bool current)
|
||||
|
||||
void Pet::CastPetAura(PetAura const* aura)
|
||||
{
|
||||
uint16 auraId = aura->GetAura(GetEntry());
|
||||
uint32 auraId = aura->GetAura(GetEntry());
|
||||
if(!auraId)
|
||||
return;
|
||||
|
||||
|
||||
+25
-23
@@ -37,17 +37,18 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data )
|
||||
CHECK_PACKET_SIZE(recv_data, 8+2+2+8);
|
||||
|
||||
uint64 guid1;
|
||||
uint16 spellid;
|
||||
uint16 flag;
|
||||
uint32 data;
|
||||
uint64 guid2;
|
||||
recv_data >> guid1; //pet guid
|
||||
recv_data >> spellid;
|
||||
recv_data >> flag; //delete = 0x0700 CastSpell = C100
|
||||
recv_data >> data;
|
||||
recv_data >> guid2; //tag guid
|
||||
|
||||
uint32 spellid = UNIT_ACTION_BUTTON_ACTION(data);
|
||||
uint8 flag = UNIT_ACTION_BUTTON_TYPE(data); //delete = 0x07 CastSpell = C1
|
||||
|
||||
// used also for charmed creature
|
||||
Unit* pet= ObjectAccessor::GetUnit(*_player, guid1);
|
||||
sLog.outDetail("HandlePetAction.Pet %u flag is %u, spellid is %u, target %u.", uint32(GUID_LOPART(guid1)), flag, spellid, uint32(GUID_LOPART(guid2)) );
|
||||
sLog.outDetail("HandlePetAction.Pet %u flag is %u, spellid is %u, target %u.", uint32(GUID_LOPART(guid1)), uint32(flag), spellid, uint32(GUID_LOPART(guid2)) );
|
||||
if(!pet)
|
||||
{
|
||||
sLog.outError( "Pet %u not exist.", uint32(GUID_LOPART(guid1)) );
|
||||
@@ -89,7 +90,7 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid
|
||||
|
||||
switch(flag)
|
||||
{
|
||||
case ACT_COMMAND: //0x0700
|
||||
case ACT_COMMAND: //0x07
|
||||
switch(spellid)
|
||||
{
|
||||
case COMMAND_STAY: //flat=1792 //STAY
|
||||
@@ -151,7 +152,7 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid
|
||||
pet->SendPetAIReaction(guid1);
|
||||
}
|
||||
}
|
||||
else // charmed player
|
||||
else // charmed player
|
||||
{
|
||||
if(pet->getVictim() && pet->getVictim() != TargetUnit)
|
||||
pet->AttackStop();
|
||||
@@ -183,10 +184,10 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid
|
||||
}
|
||||
break;
|
||||
default:
|
||||
sLog.outError("WORLD: unknown PET flag Action %i and spellid %i.", flag, spellid);
|
||||
sLog.outError("WORLD: unknown PET flag Action %i and spellid %i.", uint32(flag), spellid);
|
||||
}
|
||||
break;
|
||||
case ACT_REACTION: // 0x600
|
||||
case ACT_REACTION: // 0x6
|
||||
switch(spellid)
|
||||
{
|
||||
case REACT_PASSIVE: //passive
|
||||
@@ -197,9 +198,9 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ACT_DISABLED: // 0x8100 spell (disabled), ignore
|
||||
case ACT_PASSIVE: // 0x0100
|
||||
case ACT_ENABLED: // 0xC100 spell
|
||||
case ACT_DISABLED: // 0x81 spell (disabled), ignore
|
||||
case ACT_PASSIVE: // 0x01
|
||||
case ACT_ENABLED: // 0xC1 spell
|
||||
{
|
||||
Unit* unit_target = NULL;
|
||||
if (((Creature*)pet)->GetGlobalCooldown() > 0)
|
||||
@@ -299,7 +300,7 @@ void WorldSession::HandlePetActionHelper(Unit *pet, uint64 guid1, uint16 spellid
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sLog.outError("WORLD: unknown PET flag Action %i and spellid %i.", flag, spellid);
|
||||
sLog.outError("WORLD: unknown PET flag Action %i and spellid %i.", uint32(flag), spellid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,9 +351,6 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data )
|
||||
sLog.outDetail( "HandlePetSetAction. CMSG_PET_SET_ACTION" );
|
||||
|
||||
uint64 petguid;
|
||||
uint32 position;
|
||||
uint16 spell_id;
|
||||
uint16 act_state;
|
||||
uint8 count;
|
||||
|
||||
recv_data >> petguid;
|
||||
@@ -375,11 +373,16 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data )
|
||||
count = (recv_data.size() == 24) ? 2 : 1;
|
||||
for(uint8 i = 0; i < count; ++i)
|
||||
{
|
||||
recv_data >> position;
|
||||
recv_data >> spell_id;
|
||||
recv_data >> act_state;
|
||||
uint32 position;
|
||||
uint32 data;
|
||||
|
||||
sLog.outDetail( "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X", _player->GetName(), position, spell_id, act_state);
|
||||
recv_data >> position;
|
||||
recv_data >> data;
|
||||
|
||||
uint32 spell_id = UNIT_ACTION_BUTTON_ACTION(data);
|
||||
uint8 act_state = UNIT_ACTION_BUTTON_TYPE(data);
|
||||
|
||||
sLog.outDetail( "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X", _player->GetName(), position, spell_id, uint32(act_state));
|
||||
|
||||
//ignore invalid position
|
||||
if(position >= MAX_UNIT_ACTION_BAR_INDEX)
|
||||
@@ -551,10 +554,9 @@ void WorldSession::HandlePetSpellAutocastOpcode( WorldPacket& recvPacket )
|
||||
|
||||
sLog.outDetail("CMSG_PET_SPELL_AUTOCAST");
|
||||
uint64 guid;
|
||||
uint16 spellid;
|
||||
uint16 spellid2; //maybe second spell, automatically toggled off when first toggled on?
|
||||
uint32 spellid;
|
||||
uint8 state; //1 for on, 0 for off
|
||||
recvPacket >> guid >> spellid >> spellid2 >> state;
|
||||
recvPacket >> guid >> spellid >> state;
|
||||
|
||||
if(!_player->GetGuardianPet() && !_player->GetCharm())
|
||||
return;
|
||||
|
||||
+56
-67
@@ -704,21 +704,8 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8
|
||||
learnDefaultSpells();
|
||||
|
||||
// original action bar
|
||||
std::list<uint16>::const_iterator action_itr[4];
|
||||
for(uint8 i=0; i<4; i++)
|
||||
action_itr[i] = info->action[i].begin();
|
||||
|
||||
for (; action_itr[0]!=info->action[0].end() && action_itr[1]!=info->action[1].end();)
|
||||
{
|
||||
uint16 taction[4];
|
||||
for(uint8 i=0; i<4 ;i++)
|
||||
taction[i] = (*action_itr[i]);
|
||||
|
||||
addActionButton((uint8)taction[0], taction[1], (uint8)taction[2], (uint8)taction[3]);
|
||||
|
||||
for(uint8 i=0; i<4 ;i++)
|
||||
++action_itr[i];
|
||||
}
|
||||
for (PlayerCreateInfoActions::const_iterator action_itr = info->action.begin(); action_itr != info->action.end(); ++action_itr)
|
||||
addActionButton(action_itr->button,action_itr->action,action_itr->type);
|
||||
|
||||
// original items
|
||||
CharStartOutfitEntry const* oEntry = NULL;
|
||||
@@ -5559,65 +5546,69 @@ void Player::SendInitialActionButtons() const
|
||||
sLog.outDetail( "Initializing Action Buttons for '%u'", GetGUIDLow() );
|
||||
|
||||
WorldPacket data(SMSG_ACTION_BUTTONS, 1+(MAX_ACTION_BUTTONS*4));
|
||||
data << uint8(0); // can be 0, 1, 2
|
||||
data << uint8(0); // can be 0, 1, 2 (talent spec)
|
||||
for(int button = 0; button < MAX_ACTION_BUTTONS; ++button)
|
||||
{
|
||||
ActionButtonList::const_iterator itr = m_actionButtons.find(button);
|
||||
if(itr != m_actionButtons.end() && itr->second.uState != ACTIONBUTTON_DELETED)
|
||||
{
|
||||
data << uint16(itr->second.action);
|
||||
data << uint8(itr->second.misc);
|
||||
data << uint8(itr->second.type);
|
||||
}
|
||||
data << uint32(itr->second.packedData);
|
||||
else
|
||||
{
|
||||
data << uint32(0);
|
||||
}
|
||||
}
|
||||
|
||||
GetSession()->SendPacket( &data );
|
||||
sLog.outDetail( "Action Buttons for '%u' Initialized", GetGUIDLow() );
|
||||
}
|
||||
|
||||
bool Player::addActionButton(const uint8 button, const uint16 action, const uint8 type, const uint8 misc)
|
||||
ActionButton* Player::addActionButton(uint8 button, uint32 action, uint8 type)
|
||||
{
|
||||
if(button >= MAX_ACTION_BUTTONS)
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: button must be < 132", action, button, GetName() );
|
||||
return false;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// check cheating with adding non-known spells to action bar
|
||||
if(type==ACTION_BUTTON_SPELL)
|
||||
if(action >= MAX_ACTION_BUTTON_ACTION_VALUE)
|
||||
{
|
||||
if(!sSpellStore.LookupEntry(action))
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: spell not exist", action, button, GetName() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!HasSpell(action))
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: player don't known this spell", action, button, GetName() );
|
||||
return false;
|
||||
}
|
||||
sLog.outError( "Action %u not added into button %u for player %s: action must be < %u", action, button, GetName(), MAX_ACTION_BUTTON_ACTION_VALUE );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ActionButtonList::iterator buttonItr = m_actionButtons.find(button);
|
||||
switch(type)
|
||||
{
|
||||
case ACTION_BUTTON_SPELL:
|
||||
if(!sSpellStore.LookupEntry(action))
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: spell not exist", action, button, GetName() );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (buttonItr==m_actionButtons.end())
|
||||
{ // just add new button
|
||||
m_actionButtons[button] = ActionButton(action,type,misc);
|
||||
if(!HasSpell(action))
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: player don't known this spell", action, button, GetName() );
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case ACTION_BUTTON_ITEM:
|
||||
if(!objmgr.GetItemPrototype(action))
|
||||
{
|
||||
sLog.outError( "Action %u not added into button %u for player %s: item not exist", action, button, GetName() );
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break; // pther cases not checked at this moment
|
||||
}
|
||||
else
|
||||
{ // change state of current button
|
||||
ActionButtonUpdateState uState = buttonItr->second.uState;
|
||||
buttonItr->second = ActionButton(action,type,misc);
|
||||
if (uState != ACTIONBUTTON_NEW) buttonItr->second.uState = ACTIONBUTTON_CHANGED;
|
||||
};
|
||||
|
||||
sLog.outDetail( "Player '%u' Added Action '%u' to Button '%u'", GetGUIDLow(), action, button );
|
||||
return true;
|
||||
|
||||
// it create new button (NEW state) if need or return existed
|
||||
ActionButton& ab = m_actionButtons[button];
|
||||
|
||||
// set data and update to CHANGED if not NEW
|
||||
ab.SetActionAndType(action,ActionButtonType(type));
|
||||
|
||||
sLog.outDetail( "Player '%u' Added Action '%u' (type %u) to Button '%u'", GetGUIDLow(), action, uint32(type), button );
|
||||
return &ab;
|
||||
}
|
||||
|
||||
void Player::removeActionButton(uint8 button)
|
||||
@@ -14981,7 +14972,7 @@ void Player::_LoadActions(QueryResult *result)
|
||||
{
|
||||
m_actionButtons.clear();
|
||||
|
||||
//QueryResult *result = CharacterDatabase.PQuery("SELECT button,action,type,misc FROM character_action WHERE guid = '%u' ORDER BY button",GetGUIDLow());
|
||||
//QueryResult *result = CharacterDatabase.PQuery("SELECT button,action,type FROM character_action WHERE guid = '%u' ORDER BY button",GetGUIDLow());
|
||||
|
||||
if(result)
|
||||
{
|
||||
@@ -14990,9 +14981,11 @@ void Player::_LoadActions(QueryResult *result)
|
||||
Field *fields = result->Fetch();
|
||||
|
||||
uint8 button = fields[0].GetUInt8();
|
||||
uint32 action = fields[1].GetUInt32();
|
||||
uint8 type = fields[2].GetUInt8();
|
||||
|
||||
if(addActionButton(button, fields[1].GetUInt16(), fields[2].GetUInt8(), fields[3].GetUInt8()))
|
||||
m_actionButtons[button].uState = ACTIONBUTTON_UNCHANGED;
|
||||
if(ActionButton* ab = addActionButton(button, action, type))
|
||||
ab->uState = ACTIONBUTTON_UNCHANGED;
|
||||
else
|
||||
{
|
||||
sLog.outError( " ...at loading, and will deleted in DB also");
|
||||
@@ -15561,7 +15554,7 @@ void Player::_LoadSpells(QueryResult *result)
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
|
||||
addSpell(fields[0].GetUInt16(), fields[1].GetBool(), false, false, fields[2].GetBool());
|
||||
addSpell(fields[0].GetUInt32(), fields[1].GetBool(), false, false, fields[2].GetBool());
|
||||
}
|
||||
while( result->NextRow() );
|
||||
|
||||
@@ -16148,14 +16141,14 @@ void Player::_SaveActions()
|
||||
switch (itr->second.uState)
|
||||
{
|
||||
case ACTIONBUTTON_NEW:
|
||||
CharacterDatabase.PExecute("INSERT INTO character_action (guid,button,action,type,misc) VALUES ('%u', '%u', '%u', '%u', '%u')",
|
||||
GetGUIDLow(), (uint32)itr->first, (uint32)itr->second.action, (uint32)itr->second.type, (uint32)itr->second.misc );
|
||||
CharacterDatabase.PExecute("INSERT INTO character_action (guid,button,action,type) VALUES ('%u', '%u', '%u', '%u')",
|
||||
GetGUIDLow(), (uint32)itr->first, (uint32)itr->second.GetAction(), (uint32)itr->second.GetType() );
|
||||
itr->second.uState = ACTIONBUTTON_UNCHANGED;
|
||||
++itr;
|
||||
break;
|
||||
case ACTIONBUTTON_CHANGED:
|
||||
CharacterDatabase.PExecute("UPDATE character_action SET action = '%u', type = '%u', misc= '%u' WHERE guid= '%u' AND button= '%u' ",
|
||||
(uint32)itr->second.action, (uint32)itr->second.type, (uint32)itr->second.misc, GetGUIDLow(), (uint32)itr->first );
|
||||
CharacterDatabase.PExecute("UPDATE character_action SET action = '%u', type = '%u' WHERE guid= '%u' AND button= '%u' ",
|
||||
(uint32)itr->second.GetAction(), (uint32)itr->second.GetType(), GetGUIDLow(), (uint32)itr->first );
|
||||
itr->second.uState = ACTIONBUTTON_UNCHANGED;
|
||||
++itr;
|
||||
break;
|
||||
@@ -16166,7 +16159,7 @@ void Player::_SaveActions()
|
||||
default:
|
||||
++itr;
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16982,8 +16975,7 @@ void Player::PetSpellInitialize()
|
||||
if(itr->second.state == PETSPELL_REMOVED)
|
||||
continue;
|
||||
|
||||
data << uint16(itr->first);
|
||||
data << uint16(itr->second.active); // pet spell active state isn't boolean
|
||||
data << uint32(MAKE_UNIT_ACTION_BUTTON(itr->first,itr->second.active));
|
||||
++addlist;
|
||||
}
|
||||
}
|
||||
@@ -17108,7 +17100,7 @@ void Player::CharmSpellInitialize()
|
||||
{
|
||||
for(uint32 i = 0; i < MAX_SPELL_CHARM; ++i)
|
||||
{
|
||||
if(charmInfo->GetCharmSpell(i)->spellId)
|
||||
if(charmInfo->GetCharmSpell(i)->GetAction())
|
||||
++addlist;
|
||||
}
|
||||
}
|
||||
@@ -17133,11 +17125,8 @@ void Player::CharmSpellInitialize()
|
||||
for(uint32 i = 0; i < MAX_SPELL_CHARM; ++i)
|
||||
{
|
||||
CharmSpellEntry *cspell = charmInfo->GetCharmSpell(i);
|
||||
if(cspell->spellId)
|
||||
{
|
||||
data << uint16(cspell->spellId);
|
||||
data << uint16(cspell->active);
|
||||
}
|
||||
if(cspell->GetAction())
|
||||
data << uint32(cspell->packedData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+40
-13
@@ -134,17 +134,6 @@ enum ActionButtonUpdateState
|
||||
ACTIONBUTTON_DELETED = 3
|
||||
};
|
||||
|
||||
struct ActionButton
|
||||
{
|
||||
ActionButton() : action(0), type(0), misc(0), uState( ACTIONBUTTON_NEW ) {}
|
||||
ActionButton(uint16 _action, uint8 _type, uint8 _misc) : action(_action), type(_type), misc(_misc), uState( ACTIONBUTTON_NEW ) {}
|
||||
|
||||
uint16 action;
|
||||
uint8 type;
|
||||
uint8 misc;
|
||||
ActionButtonUpdateState uState;
|
||||
};
|
||||
|
||||
enum ActionButtonType
|
||||
{
|
||||
ACTION_BUTTON_SPELL = 0,
|
||||
@@ -154,6 +143,32 @@ enum ActionButtonType
|
||||
ACTION_BUTTON_ITEM = 128
|
||||
};
|
||||
|
||||
#define ACTION_BUTTON_ACTION(X) (uint32(X) & 0x00FFFFFF)
|
||||
#define ACTION_BUTTON_TYPE(X) ((uint32(X) & 0xFF000000) >> 24)
|
||||
#define MAX_ACTION_BUTTON_ACTION_VALUE (0x00FFFFFF+1)
|
||||
|
||||
struct ActionButton
|
||||
{
|
||||
ActionButton() : packedData(0), uState( ACTIONBUTTON_NEW ) {}
|
||||
|
||||
uint32 packedData;
|
||||
ActionButtonUpdateState uState;
|
||||
|
||||
// helpers
|
||||
ActionButtonType GetType() const { return ActionButtonType(ACTION_BUTTON_TYPE(packedData)); }
|
||||
uint32 GetAction() const { return ACTION_BUTTON_ACTION(packedData); }
|
||||
void SetActionAndType(uint32 action, ActionButtonType type)
|
||||
{
|
||||
uint32 newData = action | (uint32(type) << 24);
|
||||
if (newData != packedData)
|
||||
{
|
||||
packedData = newData;
|
||||
if (uState != ACTIONBUTTON_NEW)
|
||||
uState = ACTIONBUTTON_CHANGED;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#define MAX_ACTION_BUTTONS 132 //checked in 2.3.0
|
||||
|
||||
typedef std::map<uint8,ActionButton> ActionButtonList;
|
||||
@@ -191,6 +206,18 @@ struct PlayerLevelInfo
|
||||
|
||||
typedef std::list<uint32> PlayerCreateInfoSpells;
|
||||
|
||||
struct PlayerCreateInfoAction
|
||||
{
|
||||
PlayerCreateInfoAction() : button(0), type(0), action(0) {}
|
||||
PlayerCreateInfoAction(uint8 _button, uint32 _action, uint8 _type) : button(_button), type(_type), action(_action) {}
|
||||
|
||||
uint8 button;
|
||||
uint8 type;
|
||||
uint32 action;
|
||||
};
|
||||
|
||||
typedef std::list<PlayerCreateInfoAction> PlayerCreateInfoActions;
|
||||
|
||||
struct PlayerInfo
|
||||
{
|
||||
// existence checked by displayId != 0 // existence checked by displayId != 0
|
||||
@@ -207,7 +234,7 @@ struct PlayerInfo
|
||||
uint16 displayId_f;
|
||||
PlayerCreateInfoItems item;
|
||||
PlayerCreateInfoSpells spell;
|
||||
std::list<uint16> action[4];
|
||||
PlayerCreateInfoActions action;
|
||||
|
||||
PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1
|
||||
};
|
||||
@@ -1462,7 +1489,7 @@ class TRINITY_DLL_SPEC Player : public Unit
|
||||
m_cinematic = cine;
|
||||
}
|
||||
|
||||
bool addActionButton(uint8 button, uint16 action, uint8 type, uint8 misc);
|
||||
ActionButton* addActionButton(uint8 button, uint32 action, uint8 type);
|
||||
void removeActionButton(uint8 button);
|
||||
void SendInitialActionButtons() const;
|
||||
|
||||
|
||||
@@ -1093,7 +1093,7 @@ void SpellMgr::LoadSpellAffects()
|
||||
|
||||
bar.step();
|
||||
|
||||
uint16 entry = fields[0].GetUInt16();
|
||||
uint32 entry = fields[0].GetUInt32();
|
||||
uint8 effectId = fields[1].GetUInt8();
|
||||
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(entry);
|
||||
@@ -1413,7 +1413,7 @@ void SpellMgr::LoadSpellElixirs()
|
||||
|
||||
bar.step();
|
||||
|
||||
uint16 entry = fields[0].GetUInt16();
|
||||
uint32 entry = fields[0].GetUInt32();
|
||||
uint8 mask = fields[1].GetUInt8();
|
||||
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(entry);
|
||||
@@ -1928,10 +1928,10 @@ void SpellMgr::LoadSpellPetAuras()
|
||||
|
||||
bar.step();
|
||||
|
||||
uint16 spell = fields[0].GetUInt16();
|
||||
uint32 spell = fields[0].GetUInt32();
|
||||
uint8 eff = fields[1].GetUInt8();
|
||||
uint16 pet = fields[2].GetUInt16();
|
||||
uint16 aura = fields[3].GetUInt16();
|
||||
uint32 pet = fields[2].GetUInt32();
|
||||
uint32 aura = fields[3].GetUInt32();
|
||||
|
||||
SpellPetAuraMap::iterator itr = mSpellPetAuraMap.find((spell<<8) + eff);
|
||||
if(itr != mSpellPetAuraMap.end())
|
||||
|
||||
+8
-8
@@ -552,20 +552,20 @@ class PetAura
|
||||
auras.clear();
|
||||
}
|
||||
|
||||
PetAura(uint16 petEntry, uint16 aura, bool _removeOnChangePet, int _damage) :
|
||||
PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
|
||||
removeOnChangePet(_removeOnChangePet), damage(_damage)
|
||||
{
|
||||
auras[petEntry] = aura;
|
||||
}
|
||||
|
||||
uint16 GetAura(uint16 petEntry) const
|
||||
uint32 GetAura(uint32 petEntry) const
|
||||
{
|
||||
std::map<uint16, uint16>::const_iterator itr = auras.find(petEntry);
|
||||
std::map<uint32, uint32>::const_iterator itr = auras.find(petEntry);
|
||||
if(itr != auras.end())
|
||||
return itr->second;
|
||||
else
|
||||
{
|
||||
std::map<uint16, uint16>::const_iterator itr2 = auras.find(0);
|
||||
std::map<uint32, uint32>::const_iterator itr2 = auras.find(0);
|
||||
if(itr2 != auras.end())
|
||||
return itr2->second;
|
||||
else
|
||||
@@ -573,7 +573,7 @@ class PetAura
|
||||
}
|
||||
}
|
||||
|
||||
void AddAura(uint16 petEntry, uint16 aura)
|
||||
void AddAura(uint32 petEntry, uint32 aura)
|
||||
{
|
||||
auras[petEntry] = aura;
|
||||
}
|
||||
@@ -589,7 +589,7 @@ class PetAura
|
||||
}
|
||||
|
||||
private:
|
||||
std::map<uint16, uint16> auras;
|
||||
std::map<uint32, uint32> auras;
|
||||
bool removeOnChangePet;
|
||||
int32 damage;
|
||||
};
|
||||
@@ -726,7 +726,7 @@ class SpellMgr
|
||||
// Accessors (const or static functions)
|
||||
public:
|
||||
// Spell affects
|
||||
flag96 const*GetSpellAffect(uint16 spellId, uint8 effectId) const
|
||||
flag96 const*GetSpellAffect(uint32 spellId, uint8 effectId) const
|
||||
{
|
||||
SpellAffectMap::const_iterator itr = mSpellAffectMap.find((spellId<<8) + effectId);
|
||||
if( itr != mSpellAffectMap.end( ) )
|
||||
@@ -965,7 +965,7 @@ class SpellMgr
|
||||
return mSkillLineAbilityMap.upper_bound(spell_id);
|
||||
}
|
||||
|
||||
PetAura const* GetPetAura(uint16 spell_id, uint8 eff)
|
||||
PetAura const* GetPetAura(uint32 spell_id, uint8 eff)
|
||||
{
|
||||
SpellPetAuraMap::const_iterator itr = mSpellPetAuraMap.find((spell_id<<8) + eff);
|
||||
if(itr != mSpellPetAuraMap.end())
|
||||
|
||||
+27
-31
@@ -12193,11 +12193,9 @@ void Unit::DeleteCharmInfo()
|
||||
CharmInfo::CharmInfo(Unit* unit)
|
||||
: m_unit(unit), m_CommandState(COMMAND_FOLLOW), m_petnumber(0), m_barInit(false)
|
||||
{
|
||||
for(uint8 i =0; i<MAX_SPELL_CHARM; ++i)
|
||||
{
|
||||
m_charmspells[i].spellId = 0;
|
||||
m_charmspells[i].active = ACT_DISABLED;
|
||||
}
|
||||
for(uint8 i = 0; i < MAX_SPELL_CHARM; ++i)
|
||||
m_charmspells[i].SetActionAndType(0,ACT_DISABLED);
|
||||
|
||||
if(m_unit->GetTypeId() == TYPEID_UNIT)
|
||||
{
|
||||
m_oldReactState = ((Creature*)m_unit)->GetReactState();
|
||||
@@ -12274,18 +12272,21 @@ void CharmInfo::InitCharmCreateSpells()
|
||||
if(spellInfo && spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_DEAD)
|
||||
spellId = 0;
|
||||
|
||||
m_charmspells[x].spellId = spellId;
|
||||
|
||||
if(!spellId)
|
||||
{
|
||||
m_charmspells[x].SetActionAndType(spellId,ACT_DISABLED);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (IsPassiveSpell(spellId))
|
||||
{
|
||||
m_unit->CastSpell(m_unit, spellId, true);
|
||||
m_charmspells[x].active = ACT_PASSIVE;
|
||||
m_charmspells[x].SetActionAndType(spellId,ACT_PASSIVE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_charmspells[x].SetActionAndType(spellId,ACT_DISABLED);
|
||||
|
||||
ActiveStates newstate;
|
||||
if(spellInfo)
|
||||
{
|
||||
@@ -12320,11 +12321,11 @@ bool CharmInfo::AddSpellToActionBar(uint32 spell_id, ActiveStates newstate)
|
||||
// new spell rank can be already listed
|
||||
for(uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
{
|
||||
if (PetActionBar[i].SpellOrAction && PetActionBar[i].IsActionBarForSpell())
|
||||
if (uint32 action = PetActionBar[i].GetAction())
|
||||
{
|
||||
if (spellmgr.GetFirstSpellInChain(PetActionBar[i].SpellOrAction) == first_id)
|
||||
if (PetActionBar[i].IsActionBarForSpell() && spellmgr.GetFirstSpellInChain(action) == first_id)
|
||||
{
|
||||
PetActionBar[i].SpellOrAction = spell_id;
|
||||
PetActionBar[i].SetAction(spell_id);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -12333,7 +12334,7 @@ bool CharmInfo::AddSpellToActionBar(uint32 spell_id, ActiveStates newstate)
|
||||
// or use empty slot in other case
|
||||
for(uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
{
|
||||
if (!PetActionBar[i].SpellOrAction && PetActionBar[i].IsActionBarForSpell())
|
||||
if (!PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell())
|
||||
{
|
||||
SetActionBar(i,spell_id,newstate == ACT_DECIDE ? IsAutocastableSpell(spell_id) ? ACT_DISABLED : ACT_PASSIVE : newstate);
|
||||
return true;
|
||||
@@ -12348,9 +12349,9 @@ bool CharmInfo::RemoveSpellFromActionBar(uint32 spell_id)
|
||||
|
||||
for(uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
{
|
||||
if (PetActionBar[i].SpellOrAction && PetActionBar[i].IsActionBarForSpell())
|
||||
if (uint32 action = PetActionBar[i].GetAction())
|
||||
{
|
||||
if (spellmgr.GetFirstSpellInChain(PetActionBar[i].SpellOrAction) == first_id)
|
||||
if (PetActionBar[i].IsActionBarForSpell() && spellmgr.GetFirstSpellInChain(action) == first_id)
|
||||
{
|
||||
SetActionBar(i,0,ACT_PASSIVE);
|
||||
return true;
|
||||
@@ -12367,12 +12368,8 @@ void CharmInfo::ToggleCreatureAutocast(uint32 spellid, bool apply)
|
||||
return;
|
||||
|
||||
for(uint32 x = 0; x < MAX_SPELL_CHARM; ++x)
|
||||
{
|
||||
if(spellid == m_charmspells[x].spellId)
|
||||
{
|
||||
m_charmspells[x].active = apply ? ACT_ENABLED : ACT_DISABLED;
|
||||
}
|
||||
}
|
||||
if(spellid == m_charmspells[x].GetAction())
|
||||
m_charmspells[x].SetType(apply ? ACT_ENABLED : ACT_DISABLED);
|
||||
}
|
||||
|
||||
void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow)
|
||||
@@ -12398,17 +12395,19 @@ void CharmInfo::LoadPetActionBar(const std::string& data )
|
||||
for(iter = tokens.begin(), index = ACTION_BAR_INDEX_PET_SPELL_START; index < ACTION_BAR_INDEX_PET_SPELL_END; ++iter, ++index )
|
||||
{
|
||||
// use unsigned cast to avoid sign negative format use at long-> ActiveStates (int) conversion
|
||||
PetActionBar[index].Type = atol((*iter).c_str());
|
||||
uint8 type = atol((*iter).c_str());
|
||||
++iter;
|
||||
PetActionBar[index].SpellOrAction = atol((*iter).c_str());
|
||||
uint32 action = atol((*iter).c_str());
|
||||
|
||||
PetActionBar[index].SetActionAndType(action,ActiveStates(type));
|
||||
|
||||
// check correctness
|
||||
if(PetActionBar[index].IsActionBarForSpell())
|
||||
{
|
||||
if(!sSpellStore.LookupEntry(PetActionBar[index].SpellOrAction))
|
||||
if(!sSpellStore.LookupEntry(PetActionBar[index].GetAction()))
|
||||
SetActionBar(index,0,ACT_PASSIVE);
|
||||
else if(!IsAutocastableSpell(PetActionBar[index].SpellOrAction))
|
||||
SetActionBar(index,PetActionBar[index].SpellOrAction,ACT_PASSIVE);
|
||||
else if(!IsAutocastableSpell(PetActionBar[index].GetAction()))
|
||||
SetActionBar(index,PetActionBar[index].GetAction(),ACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12416,19 +12415,16 @@ void CharmInfo::LoadPetActionBar(const std::string& data )
|
||||
void CharmInfo::BuildActionBar( WorldPacket* data )
|
||||
{
|
||||
for(uint32 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
{
|
||||
*data << uint16(PetActionBar[i].SpellOrAction);
|
||||
*data << uint16(PetActionBar[i].Type);
|
||||
}
|
||||
*data << uint32(PetActionBar[i].packedData);
|
||||
}
|
||||
|
||||
void CharmInfo::SetSpellAutocast( uint32 spell_id, bool state )
|
||||
{
|
||||
for(uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
{
|
||||
if(spell_id == PetActionBar[i].SpellOrAction && PetActionBar[i].IsActionBarForSpell())
|
||||
if(spell_id == PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell())
|
||||
{
|
||||
PetActionBar[i].Type = state ? ACT_ENABLED : ACT_DISABLED;
|
||||
PetActionBar[i].SetType(state ? ACT_ENABLED : ACT_DISABLED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+33
-16
@@ -856,12 +856,12 @@ enum CurrentSpellTypes
|
||||
|
||||
enum ActiveStates
|
||||
{
|
||||
ACT_PASSIVE = 0x0100, // 0x0100 - passive
|
||||
ACT_DISABLED = 0x8100, // 0x8000 - castable
|
||||
ACT_ENABLED = 0xC100, // 0x4000 | 0x8000 - auto cast + castable
|
||||
ACT_COMMAND = 0x0700, // 0x0100 | 0x0200 | 0x0400
|
||||
ACT_REACTION = 0x0600, // 0x0200 | 0x0400
|
||||
ACT_DECIDE = 0x0001 // what is it?
|
||||
ACT_PASSIVE = 0x01, // 0x01 - passive
|
||||
ACT_DISABLED = 0x81, // 0x80 - castable
|
||||
ACT_ENABLED = 0xC1, // 0x40 | 0x80 - auto cast + castable
|
||||
ACT_COMMAND = 0x07, // 0x01 | 0x02 | 0x04
|
||||
ACT_REACTION = 0x06, // 0x02 | 0x04
|
||||
ACT_DECIDE = 0x00 // custom
|
||||
};
|
||||
|
||||
enum ReactStates
|
||||
@@ -879,24 +879,40 @@ enum CommandStates
|
||||
COMMAND_ABANDON = 3
|
||||
};
|
||||
|
||||
#define UNIT_ACTION_BUTTON_ACTION(X) (uint32(X) & 0x00FFFFFF)
|
||||
#define UNIT_ACTION_BUTTON_TYPE(X) ((uint32(X) & 0xFF000000) >> 24)
|
||||
#define MAX_UNIT_ACTION_BUTTON_ACTION_VALUE (0x00FFFFFF+1)
|
||||
#define MAKE_UNIT_ACTION_BUTTON(A,T) (uint32(A) | (uint32(T) << 24))
|
||||
|
||||
struct UnitActionBarEntry
|
||||
{
|
||||
UnitActionBarEntry() : SpellOrAction(0), Type(ACT_DISABLED) {}
|
||||
UnitActionBarEntry() : packedData(uint32(ACT_DISABLED) << 24) {}
|
||||
|
||||
uint16 SpellOrAction;
|
||||
uint16 Type;
|
||||
uint32 packedData;
|
||||
|
||||
// helper
|
||||
ActiveStates GetType() const { return ActiveStates(UNIT_ACTION_BUTTON_TYPE(packedData)); }
|
||||
uint32 GetAction() const { return UNIT_ACTION_BUTTON_ACTION(packedData); }
|
||||
bool IsActionBarForSpell() const
|
||||
{
|
||||
ActiveStates Type = GetType();
|
||||
return Type == ACT_DISABLED || Type == ACT_ENABLED || Type == ACT_PASSIVE;
|
||||
}
|
||||
};
|
||||
|
||||
struct CharmSpellEntry
|
||||
{
|
||||
uint16 spellId;
|
||||
uint16 active;
|
||||
void SetActionAndType(uint32 action, ActiveStates type)
|
||||
{
|
||||
packedData = MAKE_UNIT_ACTION_BUTTON(action,type);
|
||||
}
|
||||
|
||||
void SetType(ActiveStates type)
|
||||
{
|
||||
packedData = MAKE_UNIT_ACTION_BUTTON(UNIT_ACTION_BUTTON_ACTION(packedData),type);
|
||||
}
|
||||
|
||||
void SetAction(uint32 action)
|
||||
{
|
||||
packedData = (packedData & 0xFF000000) | UNIT_ACTION_BUTTON_ACTION(action);
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::list<Player*> SharedVisionList;
|
||||
@@ -909,6 +925,8 @@ enum CharmType
|
||||
CHARM_TYPE_CONVERT,
|
||||
};
|
||||
|
||||
typedef UnitActionBarEntry CharmSpellEntry;
|
||||
|
||||
enum ActionBarIndex
|
||||
{
|
||||
ACTION_BAR_INDEX_START = 0,
|
||||
@@ -947,8 +965,7 @@ struct CharmInfo
|
||||
void SetSpellAutocast(uint32 spell_id, bool state);
|
||||
void SetActionBar(uint8 index, uint32 spellOrAction,ActiveStates type)
|
||||
{
|
||||
PetActionBar[index].Type = type;
|
||||
PetActionBar[index].SpellOrAction = spellOrAction;
|
||||
PetActionBar[index].SetActionAndType(spellOrAction,type);
|
||||
}
|
||||
UnitActionBarEntry const* GetActionBarEntry(uint8 index) const { return &(PetActionBar[index]); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user