Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4

Conflicts:
	src/server/game/Entities/Player/Player.cpp
	src/server/game/Entities/Player/Player.h
	src/server/scripts/Spells/spell_dk.cpp
This commit is contained in:
Vincent_Michael committed 2014-01-31 23:51:07 +01:00
commit 224da47952
33 files changed
+473 -340

No files matched your search

+4 -4
View File
@@ -221,12 +221,12 @@ DROP TABLE IF EXISTS `banned_addons`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `banned_addons` (
`Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(255) NOT NULL,
`Version` varchar(255) NOT NULL DEFAULT '',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Id`),
UNIQUE KEY `idx_name_ver` (`Name`, `Version`)
UNIQUE KEY `idx_name_ver` (`Name`,`Version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -1746,7 +1746,7 @@ CREATE TABLE `guild` (
`BorderStyle` tinyint(3) unsigned NOT NULL DEFAULT '0',
`BorderColor` tinyint(3) unsigned NOT NULL DEFAULT '0',
`BackgroundColor` tinyint(3) unsigned NOT NULL DEFAULT '0',
`info` VARCHAR(500) NOT NULL DEFAULT '',
`info` varchar(500) NOT NULL DEFAULT '',
`motd` varchar(128) NOT NULL DEFAULT '',
`createdate` int(10) unsigned NOT NULL DEFAULT '0',
`BankMoney` bigint(20) unsigned NOT NULL DEFAULT '0',
@@ -2683,4 +2683,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2013-02-04 16:22:06
-- Dump completed on 2014-01-26 14:39:20
+17 -17
View File
@@ -1,23 +1,23 @@
-- Add new permissions
DELETE FROM `rbac_permissions` WHERE `id` BETWEEN 200 AND 216;
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
(200, 'Command: .rbac'),
(201, 'Command: .rbac account'),
(202, 'Command: .rbac account group'),
(203, 'Command: .rbac account group add'),
(204, 'Command: .rbac account group remove'),
(205, 'Command: .rbac account role'),
(206, 'Command: .rbac account role grant'),
(207, 'Command: .rbac account role deny'),
(208, 'Command: .rbac account role revoke'),
(209, 'Command: .rbac account permission'),
(210, 'Command: .rbac account permission grant'),
(211, 'Command: .rbac account permission deny'),
(212, 'Command: .rbac account permission revoke'),
(213, 'Command: .rbac list'),
(214, 'Command: .rbac list groups'),
(215, 'Command: .rbac list roles'),
(216, 'Command: .rbac list permissions');
(200, 'Command: rbac'),
(201, 'Command: rbac account'),
(202, 'Command: rbac account group'),
(203, 'Command: rbac account group add'),
(204, 'Command: rbac account group remove'),
(205, 'Command: rbac account role'),
(206, 'Command: rbac account role grant'),
(207, 'Command: rbac account role deny'),
(208, 'Command: rbac account role revoke'),
(209, 'Command: rbac account permission'),
(210, 'Command: rbac account permission grant'),
(211, 'Command: rbac account permission deny'),
(212, 'Command: rbac account permission revoke'),
(213, 'Command: rbac list'),
(214, 'Command: rbac list groups'),
(215, 'Command: rbac list roles'),
(216, 'Command: rbac list permissions');
-- Add Permissions to "Administrator Commands Role"
DELETE FROM `rbac_role_permissions` WHERE `roleId` = 4 AND `permissionId` BETWEEN 200 AND 216;
+1 -2
View File
@@ -1,2 +1 @@
ALTER TABLE `logs` CHANGE `type` `type` varchar(250);
ALTER TABLE `logs` CHANGE `type` `type` varchar(250) NOT NULL;
@@ -0,0 +1,6 @@
--
UPDATE `creature_template` SET `faction_A` = 1214, `faction_H` = 1214 WHERE `entry` IN (13079,22683,32026);
UPDATE `creature_template` SET `faction_A` = 1215, `faction_H` = 1215 WHERE `entry` IN (37481);
UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `faction_A`=84, `faction_H`=84 WHERE `entry`=35401;
UPDATE `creature_template` SET `minlevel`=81, `maxlevel`=81, `faction_A`=84, `faction_H`=84 WHERE `entry`=35403;
UPDATE `creature_template` SET `faction_A` = 84, `faction_H` = 84 WHERE `entry` IN (37236);
@@ -0,0 +1,4 @@
--
UPDATE `creature_template` SET `unit_class` = 4 WHERE `entry` IN (34777,35436,36357);
UPDATE `creature_template` SET `difficulty_entry_1`=34114 WHERE `entry`=33855;
UPDATE `creature_template` SET `minlevel`=81, `maxlevel`=81 WHERE `entry`=35405;
@@ -0,0 +1,3 @@
--
UPDATE `creature_template` SET `faction_A` = 1216, `faction_H` = 1216 WHERE `entry` IN (13331,13422,22588,22608,31932,32125);
UPDATE `creature_template` SET `faction_A` = 1214, `faction_H` = 1214 WHERE `entry` IN (13088,13316,22684,22733,31950,32043,13332,22589,32126);
@@ -0,0 +1,2 @@
--
UPDATE `creature_template` SET `faction_A` = 1216, `faction_H` = 1216 WHERE `entry` IN (13086,13317,22670,22732,31918,31949,37267);
@@ -0,0 +1,4 @@
-- TDB 3.3.5a have faction 1214 for mob 37384, TDB 4.3.4 have the same faction for mob 13328 this makes the fix generic for both TDB.
UPDATE `creature_template` SET `faction_A` = 1214, `faction_H` = 1214 WHERE `entry` IN (13328,22715,32063,37384);
UPDATE `creature_template` SET `faction_A`=1693, `faction_H`=1693 WHERE `entry` IN (29062,31589,29096,31590,29098,31602,31590);
UPDATE `creature_template` SET `faction_A`=14, `faction_H`=14 WHERE `entry` IN (31588,31600);
@@ -0,0 +1,5 @@
--
UPDATE `creature_template` SET `faction_A` = 190, `faction_H` = 190 WHERE `entry` = 30794;
UPDATE `creature_template` SET `difficulty_entry_1`=0 WHERE `entry`=30023;
UPDATE `creature_template` SET `difficulty_entry_1`=22643, `difficulty_entry_2`=32027, `difficulty_entry_3`=37347 WHERE `entry`=12159;
UPDATE `creature_template` SET `faction_A`=14, `faction_H`=14 WHERE `entry` IN (32027,37347);
@@ -0,0 +1,3 @@
--
UPDATE `creature_template` SET `faction_A`=14, `faction_H`=14 WHERE `entry` IN (22643,28924,28925);
UPDATE `creature_template` SET `faction_A`=16, `faction_H`=16 WHERE `entry` = 34114;
@@ -0,0 +1,2 @@
--
UPDATE `creature_template` SET `faction_A`=1214, `faction_H`=1214 WHERE `entry` IN (13421,22609,31933);
@@ -0,0 +1,2 @@
--
UPDATE `creature_template` SET `VehicleId`=0 WHERE `entry` IN (38156,38637,38638);
@@ -0,0 +1,3 @@
DELETE FROM `spell_script_names` WHERE `spell_id`=46584;
INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
(46584,'spell_dk_raise_dead');
@@ -0,0 +1,167 @@
DROP TABLE IF EXISTS `spell_custom_attr`;
CREATE TABLE IF NOT EXISTS `spell_custom_attr` (
`entry` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'spell id',
`attributes` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellCustomAttributes',
PRIMARY KEY (`entry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='SpellInfo custom attributes';
SET @SPELL_ATTR0_CU_ENCHANT_PROC = 1,
@SPELL_ATTR0_CU_CONE_BACK = 2,
@SPELL_ATTR0_CU_CONE_LINE = 4,
@SPELL_ATTR0_CU_SHARE_DAMAGE = 8,
@SPELL_ATTR0_CU_NO_INITIAL_THREAT = 16,
@SPELL_ATTR0_CU_AURA_CC = 64,
@SPELL_ATTR0_CU_DIRECT_DAMAGE = 256,
@SPELL_ATTR0_CU_CHARGE = 512,
@SPELL_ATTR0_CU_PICKPOCKET = 1024,
@SPELL_ATTR0_CU_NEGATIVE_EFF0 = 4096,
@SPELL_ATTR0_CU_NEGATIVE_EFF1 = 8192,
@SPELL_ATTR0_CU_NEGATIVE_EFF2 = 16384,
@SPELL_ATTR0_CU_IGNORE_ARMOR = 32768,
@SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER = 65536,
@SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET = 131072;
INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES
(1776, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(1777, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(8629, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(11285, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(11286, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(12540, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(13579, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(24698, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(28456, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(29425, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(34940, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(36862, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(38764, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(38863, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(52743, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(53, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2589, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2590, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2591, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(7159, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8627, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8721, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11279, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11280, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11281, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(15582, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(15657, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(22416, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(25300, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26863, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(37685, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48656, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48657, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(703, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8631, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8632, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8633, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11289, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11290, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26839, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26884, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48675, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48676, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(5221, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6800, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8992, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9829, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9830, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27001, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27002, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48571, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48572, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8676, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8724, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8725, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11267, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11268, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11269, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27441, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48689, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48690, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48691, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6785, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6787, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9866, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9867, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27005, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48578, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48579, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(21987, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(23959, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(24825, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(58563, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26029, @SPELL_ATTR0_CU_CONE_LINE),
(37433, @SPELL_ATTR0_CU_CONE_LINE),
(43140, @SPELL_ATTR0_CU_CONE_LINE),
(43215, @SPELL_ATTR0_CU_CONE_LINE),
(70461, @SPELL_ATTR0_CU_CONE_LINE),
(72133, @SPELL_ATTR0_CU_CONE_LINE),
(73788, @SPELL_ATTR0_CU_CONE_LINE),
(73789, @SPELL_ATTR0_CU_CONE_LINE),
(73790, @SPELL_ATTR0_CU_CONE_LINE),
(24340, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(26558, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(28884, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(36837, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(38903, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(41276, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(57467, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(26789, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(31436, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(35181, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(40810, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(43267, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(43268, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(42384, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(45150, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(64688, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72373, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(71904, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(70492, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72505, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72624, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72625, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(18500, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(33086, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(49749, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(52890, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(53454, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(59446, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62383, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64777, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65239, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65919, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67858, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67859, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67860, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(69293, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(74439, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63278, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62544, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64588, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(66479, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68505, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62709, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62626, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64590, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64342, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64686, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65147, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68504, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62874, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68498, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64591, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63003, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63010, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68321, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72255, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72444, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72445, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72446, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64422, @SPELL_ATTR0_CU_SHARE_DAMAGE | @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72293, @SPELL_ATTR0_CU_NEGATIVE_EFF0);
@@ -0,0 +1,11 @@
UPDATE `item_template` SET `spellcharges_1`=0 WHERE `spellcharges_1` IS NULL;
UPDATE `item_template` SET `spellcharges_2`=0 WHERE `spellcharges_2` IS NULL;
UPDATE `item_template` SET `spellcharges_3`=0 WHERE `spellcharges_3` IS NULL;
UPDATE `item_template` SET `spellcharges_4`=0 WHERE `spellcharges_4` IS NULL;
UPDATE `item_template` SET `spellcharges_5`=0 WHERE `spellcharges_5` IS NULL;
ALTER TABLE `item_template` CHANGE `spellcharges_1` `spellcharges_1` SMALLINT( 6 ) NOT NULL DEFAULT '0',
CHANGE `spellcharges_2` `spellcharges_2` SMALLINT( 6 ) NOT NULL DEFAULT '0',
CHANGE `spellcharges_3` `spellcharges_3` SMALLINT( 6 ) NOT NULL DEFAULT '0',
CHANGE `spellcharges_4` `spellcharges_4` SMALLINT( 6 ) NOT NULL DEFAULT '0',
CHANGE `spellcharges_5` `spellcharges_5` SMALLINT( 6 ) NOT NULL DEFAULT '0';
+6 -6
View File
@@ -321,7 +321,7 @@ bool AuthSocket::_HandleLogonChallenge()
socket().recv((char *)&buf[0], 4);
EndianConvert(*((uint16*)(buf[0])));
EndianConvertPtr<uint16>(&buf[0]);
uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;
TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got header, body is %#04x bytes", remaining);
@@ -341,11 +341,11 @@ bool AuthSocket::_HandleLogonChallenge()
// BigEndian code, nop in little endian case
// size already converted
EndianConvert(*((uint32*)(&ch->gamename[0])));
EndianConvertPtr<uint32>(&ch->gamename[0]);
EndianConvert(ch->build);
EndianConvert(*((uint32*)(&ch->platform[0])));
EndianConvert(*((uint32*)(&ch->os[0])));
EndianConvert(*((uint32*)(&ch->country[0])));
EndianConvertPtr<uint32>(&ch->platform[0]);
EndianConvertPtr<uint32>(&ch->os[0]);
EndianConvertPtr<uint32>(&ch->country[0]);
EndianConvert(ch->timezone_bias);
EndianConvert(ch->ip);
@@ -779,7 +779,7 @@ bool AuthSocket::_HandleReconnectChallenge()
socket().recv((char *)&buf[0], 4);
EndianConvert(*((uint16*)(buf[0])));
EndianConvertPtr<uint16>(&buf[0]);
uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size;
TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] got header, body is %#04x bytes", remaining);
+3 -3
View File
@@ -151,9 +151,9 @@ enum AchievementCriteriaFlags
{
ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar
ACHIEVEMENT_CRITERIA_FLAG_HIDDEN = 0x00000002, // Not show criteria in client
ACHIEVEMENT_CRITERIA_FLAG_UNK3 = 0x00000004, // BG related??
ACHIEVEMENT_CRITERIA_FLAG_UNK4 = 0x00000008, //
ACHIEVEMENT_CRITERIA_FLAG_UNK5 = 0x00000010, // not used
ACHIEVEMENT_CRITERIA_FLAG_FAIL_ACHIEVEMENT = 0x00000004, // BG related??
ACHIEVEMENT_CRITERIA_FLAG_RESET_ON_START = 0x00000008, //
ACHIEVEMENT_CRITERIA_FLAG_IS_DATE = 0x00000010, // not used
ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER = 0x00000020 // Displays counter as money
};
+2 -2
View File
@@ -706,7 +706,7 @@ Player::Player(WorldSession* session): Unit(true), phaseMgr(this)
m_focusRegenTimerCount = 0;
m_weaponChangeTimer = 0;
m_zoneUpdateId = 0;
m_zoneUpdateId = uint32(-1);
m_zoneUpdateTimer = 0;
m_areaUpdateId = 0;
@@ -24198,7 +24198,7 @@ uint32 Player::GetResurrectionSpellId()
}
// Used in triggers for check "Only to targets that grant experience or honor" req
bool Player::isHonorOrXPTarget(Unit const* victim)
bool Player::isHonorOrXPTarget(Unit const* victim) const
{
uint8 v_level = victim->getLevel();
uint8 k_grey = Trinity::XP::GetGrayLevel(getLevel());
+1 -1
View File
@@ -2108,7 +2108,7 @@ class Player : public Unit, public GridObject<Player>
bool IsAtRecruitAFriendDistance(WorldObject const* pOther) const;
void RewardPlayerAndGroupAtKill(Unit* victim, bool isBattleGround);
void RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewardSource);
bool isHonorOrXPTarget(Unit const* victim);
bool isHonorOrXPTarget(Unit const* victim) const;
bool GetsRecruitAFriendBonus(bool forXP);
uint8 GetGrantableLevels() { return m_grantableLevels; }
-1
View File
@@ -1164,7 +1164,6 @@ void WorldSession::HandleMoveRootAck(WorldPacket& recvData)
void WorldSession::HandleSetActionBarToggles(WorldPacket& recvData)
{
uint8 actionBar;
recvData >> actionBar;
if (!GetPlayer()) // ignore until not logged (check needed because STATUS_AUTHED)
-2
View File
@@ -406,7 +406,6 @@ void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData)
TC_LOG_DEBUG("network", "WORLD: CMSG_SPIRIT_HEALER_ACTIVATE");
uint64 guid;
recvData >> guid;
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_SPIRITHEALER);
@@ -426,7 +425,6 @@ void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData)
void WorldSession::SendSpiritResurrect()
{
_player->ResurrectPlayer(0.5f, true);
_player->DurabilityLossAll(0.25f, true);
// get corpse nearest graveyard
@@ -337,6 +337,9 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa
if (_owner->GetTypeId() == TYPEID_PLAYER)
return;
if (speedXY <= 0.1f)
return;
float x, y, z;
float moveTimeHalf = speedZ / Movement::gravity;
float dist = 2 * moveTimeHalf * speedXY;
@@ -370,6 +373,8 @@ void MotionMaster::MoveJumpTo(float angle, float speedXY, float speedZ)
void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id)
{
TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z);
if (speedXY <= 0.1f)
return;
float moveTimeHalf = speedZ / Movement::gravity;
float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ);
+1 -73
View File
@@ -1171,77 +1171,6 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge
float radius = m_spellInfo->Effects[effIndex].CalcRadius(m_caster) * m_spellValue->RadiusMod;
SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), m_spellInfo->Effects[effIndex].ImplicitTargetConditions);
// Custom entries
/// @todo remove those
switch (m_spellInfo->Id)
{
case 46584: // Raise Dead
{
if (Player* playerCaster = m_caster->ToPlayer())
{
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
{
switch ((*itr)->GetTypeId())
{
case TYPEID_UNIT:
case TYPEID_PLAYER:
{
Unit* unitTarget = (*itr)->ToUnit();
if (unitTarget->IsAlive() || !playerCaster->isHonorOrXPTarget(unitTarget)
|| ((unitTarget->GetCreatureTypeMask() & (1 << (CREATURE_TYPE_HUMANOID-1))) == 0)
|| (unitTarget->GetDisplayId() != unitTarget->GetNativeDisplayId()))
break;
AddUnitTarget(unitTarget, effMask, false);
// no break;
}
case TYPEID_CORPSE: // wont work until corpses are allowed in target lists, but at least will send dest in packet
m_targets.SetDst(*(*itr));
return; // nothing more to do here
default:
break;
}
}
}
return; // don't add targets to target map
}
// Corpse Explosion
case 49158:
case 51325:
case 51326:
case 51327:
case 51328:
// check if our target is not valid (spell can target ghoul or dead unit)
if (!(m_targets.GetUnitTarget() && m_targets.GetUnitTarget()->GetDisplayId() == m_targets.GetUnitTarget()->GetNativeDisplayId() &&
((m_targets.GetUnitTarget()->GetEntry() == 26125 && m_targets.GetUnitTarget()->GetOwnerGUID() == m_caster->GetGUID())
|| m_targets.GetUnitTarget()->isDead())))
{
// remove existing targets
CleanupTargetList();
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
{
switch ((*itr)->GetTypeId())
{
case TYPEID_UNIT:
case TYPEID_PLAYER:
if (!(*itr)->ToUnit()->isDead())
break;
AddUnitTarget((*itr)->ToUnit(), 1 << effIndex, false);
return;
default:
break;
}
}
if (m_caster->GetTypeId() == TYPEID_PLAYER)
m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true);
SendCastResult(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW);
finish(false);
}
return;
default:
break;
}
CallScriptObjectAreaTargetSelectHandlers(targets, effIndex);
if (!targets.empty())
@@ -4930,8 +4859,7 @@ SpellCastResult Spell::CheckCast(bool strict)
uint32 zone, area;
m_caster->GetZoneAndAreaId(zone, area);
SpellCastResult locRes= m_spellInfo->CheckLocation(m_caster->GetMapId(), zone, area,
m_caster->GetTypeId() == TYPEID_PLAYER ? m_caster->ToPlayer() : NULL);
SpellCastResult locRes = m_spellInfo->CheckLocation(m_caster->GetMapId(), zone, area, m_caster->ToPlayer());
if (locRes != SPELL_CAST_OK)
return locRes;
}
+1 -1
View File
@@ -562,7 +562,7 @@ class Spell
GameObject* focusObject;
// Damage and healing in effects need just calculate
int32 m_damage; // Damge in effects count here
int32 m_damage; // Damage in effects count here
int32 m_healing; // Healing in effects count here
// ******************************************
+3 -58
View File
@@ -559,11 +559,6 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
if (!unitTarget && !gameObjTarget && !itemTarget)
return;
uint32 spell_id = 0;
int32 bp = 0;
bool triggered = true;
SpellCastTargets targets;
// selection by spell family
switch (m_spellInfo->SpellFamilyName)
{
@@ -600,60 +595,10 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
}
}
break;
case SPELLFAMILY_DEATHKNIGHT:
switch (m_spellInfo->Id)
{
case 46584: // Raise Dead
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
// Do we have talent Master of Ghouls?
if (m_caster->HasAura(52143))
// summon as pet
bp = 52150;
else
// or guardian
bp = 46585;
if (m_targets.HasDst())
targets.SetDst(*m_targets.GetDstPos());
else
{
targets.SetDst(*m_caster);
// Corpse not found - take reagents (only not triggered cast can take them)
triggered = false;
}
// Remove cooldown - summon spellls have category
m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true);
spell_id = 48289;
break;
// Raise dead - take reagents and trigger summon spells
case 48289:
if (m_targets.HasDst())
targets.SetDst(*m_targets.GetDstPos());
spell_id = CalculateDamage(0, NULL);
break;
}
default:
break;
}
//spells triggered by dummy effect should not miss
if (spell_id)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
if (!spellInfo)
{
TC_LOG_ERROR("spells", "EffectDummy of spell %u: triggering unknown spell id %i\n", m_spellInfo->Id, spell_id);
return;
}
targets.SetUnitTarget(unitTarget);
Spell* spell = new Spell(m_caster, spellInfo, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, m_originalCasterGUID, true);
if (bp) spell->SetSpellValue(SPELLVALUE_BASE_POINT0, bp);
spell->prepare(&targets);
}
// pet auras
if (PetAura const* petSpell = sSpellMgr->GetPetAura(m_spellInfo->Id, effIndex))
{
@@ -774,7 +719,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(triggered_spell_id);
if (!spellInfo)
{
TC_LOG_DEBUG("spells", "Spell::EffectTriggerSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id);
TC_LOG_ERROR("spells", "Spell::EffectTriggerSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id);
return;
}
@@ -826,7 +771,7 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex)
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(triggered_spell_id);
if (!spellInfo)
{
TC_LOG_DEBUG("spells", "Spell::EffectTriggerMissileSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id);
TC_LOG_ERROR("spells", "Spell::EffectTriggerMissileSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id);
return;
}
+32 -166
View File
@@ -2793,8 +2793,39 @@ void SpellMgr::UnloadSpellInfoImplicitTargetConditionLists()
void SpellMgr::LoadSpellInfoCustomAttributes()
{
uint32 oldMSTime = getMSTime();
uint32 oldMSTime2 = oldMSTime;
SpellInfo* spellInfo = NULL;
QueryResult result = WorldDatabase.Query("SELECT entry, attributes FROM spell_custom_attr");
if (!result)
TC_LOG_INFO("server.loading", ">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty.");
else
{
uint32 count = 0;
do
{
Field* fields = result->Fetch();
uint32 spellId = fields[0].GetUInt32();
uint32 attributes = fields[1].GetUInt32();
spellInfo = mSpellInfoMap[spellId];
if (!spellInfo)
{
TC_LOG_ERROR("sql.sql", "Table `spell_custom_attr` has wrong spell (entry: %u), ignored.", spellId);
continue;
}
// TODO: validate attributes
spellInfo->AttributesCu |= attributes;
++count;
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u spell custom attributes from DB in %u ms", count, GetMSTimeDiffToNow(oldMSTime2));
}
for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
spellInfo = mSpellInfoMap[i];
@@ -2905,171 +2936,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
if (spellInfo->SpellVisual[0] == 3879)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_BACK;
switch (spellInfo->Id)
{
case 1776: // Gouge
case 1777:
case 8629:
case 11285:
case 11286:
case 12540:
case 13579:
case 24698:
case 28456:
case 29425:
case 34940:
case 36862:
case 38764:
case 38863:
case 52743: // Head Smack
spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER;
break;
case 53: // Backstab
case 2589:
case 2590:
case 2591:
case 7159:
case 8627:
case 8721:
case 11279:
case 11280:
case 11281:
case 15582:
case 15657:
case 22416:
case 25300:
case 26863:
case 37685:
case 48656:
case 48657:
case 703: // Garrote
case 8631:
case 8632:
case 8633:
case 11289:
case 11290:
case 26839:
case 26884:
case 48675:
case 48676:
case 5221: // Shred
case 6800:
case 8992:
case 9829:
case 9830:
case 27001:
case 27002:
case 48571:
case 48572:
case 8676: // Ambush
case 8724:
case 8725:
case 11267:
case 11268:
case 11269:
case 27441:
case 48689:
case 48690:
case 48691:
case 6785: // Ravage
case 6787:
case 9866:
case 9867:
case 27005:
case 48578:
case 48579:
case 21987: // Lash of Pain
case 23959: // Test Stab R50
case 24825: // Test Backstab
case 58563: // Assassinate Restless Lookout
spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET;
break;
case 26029: // Dark Glare
case 37433: // Spout
case 43140: // Flame Breath
case 43215: // Flame Breath
case 70461: // Coldflame Trap
case 72133: // Pain and Suffering
case 73788: // Pain and Suffering
case 73789: // Pain and Suffering
case 73790: // Pain and Suffering
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_LINE;
break;
case 24340: // Meteor
case 26558: // Meteor
case 28884: // Meteor
case 36837: // Meteor
case 38903: // Meteor
case 41276: // Meteor
case 57467: // Meteor
case 26789: // Shard of the Fallen Star
case 31436: // Malevolent Cleave
case 35181: // Dive Bomb
case 40810: // Saber Lash
case 43267: // Saber Lash
case 43268: // Saber Lash
case 42384: // Brutal Swipe
case 45150: // Meteor Slash
case 64688: // Sonic Screech
case 72373: // Shared Suffering
case 71904: // Chaos Bane
case 70492: // Ooze Eruption
case 72505: // Ooze Eruption
case 72624: // Ooze Eruption
case 72625: // Ooze Eruption
// ONLY SPELLS WITH SPELLFAMILY_GENERIC and EFFECT_SCHOOL_DAMAGE
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
break;
case 18500: // Wing Buffet
case 33086: // Wild Bite
case 49749: // Piercing Blow
case 52890: // Penetrating Strike
case 53454: // Impale
case 59446: // Impale
case 62383: // Shatter
case 64777: // Machine Gun
case 65239: // Machine Gun
case 65919: // Impale
case 67858: // Impale
case 67859: // Impale
case 67860: // Impale
case 69293: // Wing Buffet
case 74439: // Machine Gun
case 63278: // Mark of the Faceless (General Vezax)
case 62544: // Thrust (Argent Tournament)
case 64588: // Thrust (Argent Tournament)
case 66479: // Thrust (Argent Tournament)
case 68505: // Thrust (Argent Tournament)
case 62709: // Counterattack! (Argent Tournament)
case 62626: // Break-Shield (Argent Tournament, Player)
case 64590: // Break-Shield (Argent Tournament, Player)
case 64342: // Break-Shield (Argent Tournament, NPC)
case 64686: // Break-Shield (Argent Tournament, NPC)
case 65147: // Break-Shield (Argent Tournament, NPC)
case 68504: // Break-Shield (Argent Tournament, NPC)
case 62874: // Charge (Argent Tournament, Player)
case 68498: // Charge (Argent Tournament, Player)
case 64591: // Charge (Argent Tournament, Player)
case 63003: // Charge (Argent Tournament, NPC)
case 63010: // Charge (Argent Tournament, NPC)
case 68321: // Charge (Argent Tournament, NPC)
case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72444: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72445: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72446: // Mark of the Fallen Champion (Deathbringer Saurfang)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR;
break;
case 64422: // Sonic Screech (Auriaya)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR;
break;
case 72293: // Mark of the Fallen Champion (Deathbringer Saurfang)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NEGATIVE_EFF0;
break;
default:
break;
}
switch (spellInfo->SpellFamilyName)
{
case SPELLFAMILY_WARRIOR:
+14 -2
View File
@@ -576,16 +576,28 @@ void SpellScript::PreventHitDefaultEffect(SpellEffIndex effIndex)
m_hitPreventDefaultEffectMask |= 1 << effIndex;
}
int32 SpellScript::GetEffectValue()
int32 SpellScript::GetEffectValue() const
{
if (!IsInEffectHook())
{
TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::PreventHitDefaultEffect was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId);
TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetEffectValue was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId);
return 0;
}
return m_spell->damage;
}
void SpellScript::SetEffectValue(int32 value)
{
if (!IsInEffectHook())
{
TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::SetEffectValue was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId);
return;
}
m_spell->damage = value;
}
Item* SpellScript::GetCastItem()
{
return m_spell->m_CastItem;
+2 -1
View File
@@ -411,7 +411,8 @@ class SpellScript : public _SpellScript
void PreventHitDefaultEffect(SpellEffIndex effIndex);
// method avalible only in EffectHandler method
int32 GetEffectValue();
int32 GetEffectValue() const;
void SetEffectValue(int32 value);
// returns: cast item if present.
Item* GetCastItem();
@@ -1837,7 +1837,6 @@ public:
void IsSummonedBy(Unit*) OVERRIDE
{
DoCast(me, SPELL_EMERGE_VISUAL);
DoZoneInCombat(me, 100.00f);
}
void JustDied(Unit* /*killer*/) OVERRIDE
+160
View File
@@ -53,6 +53,8 @@ enum DeathKnightSpells
SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622,
SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962,
SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736,
SPELL_DK_MASTER_OF_GHOULS = 52143,
SPELL_DK_RAISE_DEAD_USE_REAGENT = 48289,
SPELL_DK_RUNIC_POWER_ENERGIZE = 49088,
SPELL_DK_RUNE_TAP = 48982,
SPELL_DK_SCENT_OF_BLOOD = 50422,
@@ -1031,6 +1033,163 @@ class spell_dk_presence : public SpellScriptLoader
}
};
class RaiseDeadCheck
{
public:
explicit RaiseDeadCheck(Player const* caster) : _caster(caster) { }
bool operator()(WorldObject* obj) const
{
if (Unit* target = obj->ToUnit())
{
if (!target->IsAlive()
&& _caster->isHonorOrXPTarget(target)
&& target->GetCreatureType() == CREATURE_TYPE_HUMANOID
&& target->GetDisplayId() == target->GetNativeDisplayId())
return false;
}
return true;
}
private:
Player const* _caster;
};
// 46584 - Raise Dead
class spell_dk_raise_dead : public SpellScriptLoader
{
public:
spell_dk_raise_dead() : SpellScriptLoader("spell_dk_raise_dead") { }
class spell_dk_raise_dead_SpellScript : public SpellScript
{
PrepareSpellScript(spell_dk_raise_dead_SpellScript);
bool Validate(SpellInfo const* spellInfo) OVERRIDE
{
if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue())
|| !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_2].CalcValue())
|| !sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_DEAD_USE_REAGENT)
|| !sSpellMgr->GetSpellInfo(SPELL_DK_MASTER_OF_GHOULS))
return false;
return true;
}
bool Load() OVERRIDE
{
_result = SPELL_CAST_OK;
_corpse = false;
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
SpellCastResult CheckCast()
{
/// process spell target selection before cast starts
/// targets of effect_1 are used to check cast
GetSpell()->SelectSpellTargets();
/// cleanup spell target map, and fill it again on normal way
GetSpell()->CleanupTargetList();
/// _result is set in spell target selection
return _result;
}
SpellCastResult CheckReagents()
{
/// @workaround: there is no access to castresult of other spells, check it manually
SpellInfo const* reagentSpell = sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_DEAD_USE_REAGENT);
Player* player = GetCaster()->ToPlayer();
if (!player->CanNoReagentCast(reagentSpell))
{
for (uint32 i = 0; i < MAX_SPELL_REAGENTS; i++)
{
if (reagentSpell->Reagent[i] <= 0)
continue;
if (!player->HasItemCount(reagentSpell->Reagent[i], reagentSpell->ReagentCount[i]))
{
Spell::SendCastResult(player, reagentSpell, 0, SPELL_FAILED_REAGENTS);
return SPELL_FAILED_DONT_REPORT;
}
}
}
return SPELL_CAST_OK;
}
void CheckTargets(std::list<WorldObject*>& targets)
{
targets.remove_if(RaiseDeadCheck(GetCaster()->ToPlayer()));
if (targets.empty())
{
if (GetSpell()->getState() == SPELL_STATE_PREPARING)
_result = CheckReagents();
return;
}
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
targets.clear();
targets.push_back(target);
_corpse = true;
}
void CheckTarget(WorldObject*& target)
{
// Don't add caster to target map, if we found a corpse to raise dead
if (_corpse)
target = NULL;
}
void ConsumeReagents()
{
// No corpse found, take reagents
if (!_corpse)
GetCaster()->CastSpell(GetCaster(), SPELL_DK_RAISE_DEAD_USE_REAGENT, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST));
}
uint32 GetGhoulSpellId()
{
// Do we have talent Master of Ghouls?
if (GetCaster()->HasAura(SPELL_DK_MASTER_OF_GHOULS))
// summon as pet
return GetSpellInfo()->Effects[EFFECT_2].CalcValue();
// or guardian
return GetSpellInfo()->Effects[EFFECT_1].CalcValue();
}
void HandleRaiseDead(SpellEffIndex /*effIndex*/)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(GetGhoulSpellId());
SpellCastTargets targets;
targets.SetDst(*GetHitUnit());
GetCaster()->CastSpell(targets, spellInfo, NULL, TRIGGERED_FULL_MASK);
}
void Register() OVERRIDE
{
OnCheckCast += SpellCheckCastFn(spell_dk_raise_dead_SpellScript::CheckCast);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_raise_dead_SpellScript::CheckTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dk_raise_dead_SpellScript::CheckTarget, EFFECT_2, TARGET_UNIT_CASTER);
OnCast += SpellCastFn(spell_dk_raise_dead_SpellScript::ConsumeReagents);
OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_2, SPELL_EFFECT_DUMMY);
}
private:
SpellCastResult _result;
bool _corpse;
};
SpellScript* GetSpellScript() const OVERRIDE
{
return new spell_dk_raise_dead_SpellScript();
}
};
// 59754 Rune Tap - Party
class spell_dk_rune_tap_party : public SpellScriptLoader
{
@@ -1256,6 +1415,7 @@ void AddSC_deathknight_spell_scripts()
new spell_dk_improved_unholy_presence();
new spell_dk_necrotic_strike();
new spell_dk_presence();
new spell_dk_raise_dead();
new spell_dk_rune_tap_party();
new spell_dk_scent_of_blood();
new spell_dk_scourge_strike();
+2
View File
@@ -57,6 +57,8 @@
#if defined(__cplusplus) && __cplusplus == 201103L
# define COMPILER_HAS_CPP11_SUPPORT 1
#elif _MSC_VER >= 1700
# define COMPILER_HAS_CPP11_SUPPORT 1
#else
# define COMPILER_HAS_CPP11_SUPPORT 0
#endif
@@ -47,9 +47,13 @@ namespace ByteConverter
#if TRINITY_ENDIAN == TRINITY_BIGENDIAN
template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); }
template<typename T> inline void EndianConvertReverse(T&) { }
template<typename T> inline void EndianConvertPtr(void* val) { ByteConverter::apply<T>(val); }
template<typename T> inline void EndianConvertPtrReverse(void*) { }
#else
template<typename T> inline void EndianConvert(T&) { }
template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); }
template<typename T> inline void EndianConvertPtr(void*) { }
template<typename T> inline void EndianConvertPtrReverse(void* val) { ByteConverter::apply<T>(val); }
#endif
template<typename T> void EndianConvert(T*); // will generate link error
+3
View File
@@ -510,6 +510,9 @@ void vutf8printf(FILE* out, const char *str, va_list* ap)
wchar_t wtemp_buf[32*1024];
size_t temp_len = vsnprintf(temp_buf, 32*1024, str, *ap);
//vsnprintf returns -1 if the buffer is too small
if (temp_len == size_t(-1))
temp_len = 32*1024-1;
size_t wtemp_len = 32*1024-1;
Utf8toWStr(temp_buf, temp_len, wtemp_buf, wtemp_len);