From 1abb44724393abd55c7f87c7426247295cbaa2b6 Mon Sep 17 00:00:00 2001 From: "dr.skull" Date: Thu, 12 Jan 2012 13:10:43 +0100 Subject: Fix Feral Spirit passive spell Spirit Hunt Now will heal wolfs too. Signed-off-by: dr.skull --- src/server/game/Entities/Unit/Unit.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 753d1fb752c..a6b2d57da9b 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7182,6 +7182,8 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; basepoints0 = CalculatePctN(int32(damage), triggerAmount); triggered_spell_id = 58879; + // Cast on spirit wolf + CastCustomSpell(this, triggered_spell_id, &basepoints0, NULL, NULL, true, NULL, triggeredByAura); break; } // Shaman T8 Elemental 4P Bonus -- cgit v1.2.3 From d03894536fa57906d0003da5ccbe57d7e316943a Mon Sep 17 00:00:00 2001 From: Fredi Date: Sat, 14 Jan 2012 19:40:13 -0200 Subject: Core/IO: Corrected SMSG_AUCTION_OWNER_NOTIFICATION packet structure --- .../Server/Protocol/Handlers/AuctionHouseHandler.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp index aaafb09115d..59eefb9fa77 100755 --- a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp @@ -101,14 +101,14 @@ void WorldSession::SendAuctionBidderNotification(uint32 location, uint32 auction //this void causes on client to display: "Your auction sold" void WorldSession::SendAuctionOwnerNotification(AuctionEntry* auction) { - WorldPacket data(SMSG_AUCTION_OWNER_NOTIFICATION, (7*4)); - data << auction->Id; - data << auction->bid; - data << (uint32) 0; //unk - data << (uint32) 0; //unk - data << (uint32) 0; //unk - data << auction->item_template; - data << (uint32) 0; //unk + WorldPacket data(SMSG_AUCTION_OWNER_NOTIFICATION, (8*4)); + data << uint32(auction->Id); + data << uint32(auction->bid); + data << uint32(0); //unk + data << uint64(0); //unk (bidder guid?) + data << uint32(auction->item_template); + data << uint32(0); //unk + data << float(0); //unk (time?) SendPacket(&data); } -- cgit v1.2.3 From 6bb48a2a872b6da451deb78df1e657f57df14dfb Mon Sep 17 00:00:00 2001 From: Chaplain Date: Sun, 15 Jan 2012 21:25:03 +0300 Subject: Core/Movegen: Fix logic in WaypointMovementGenerator::StartMove --- .../game/Movement/MovementGenerators/WaypointMovementGenerator.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index ea858eaba84..ce8628af1ca 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -84,6 +84,7 @@ void WaypointMovementGenerator::OnArrived(Creature& creature) // Inform script MovementInform(creature); + creature.UpdateWaypointID(i_currentNode); Stop(i_path->at(i_currentNode)->delay); } @@ -94,13 +95,11 @@ bool WaypointMovementGenerator::StartMove(Creature &creature) if (Stopped()) return true; - const WaypointData *node = i_path->at(i_currentNode); - if (m_isArrivalDone) { if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint { - creature.SetHomePosition(node->x, node->y, node->z, creature.GetOrientation()); + creature.SetHomePosition(i_path->at(i_currentNode)->x, i_path->at(i_currentNode)->y, i_path->at(i_currentNode)->z, creature.GetOrientation()); creature.GetMotionMaster()->Initialize(); return false; } @@ -108,6 +107,8 @@ bool WaypointMovementGenerator::StartMove(Creature &creature) i_currentNode = (i_currentNode+1) % i_path->size(); } + const WaypointData *node = i_path->at(i_currentNode); + m_isArrivalDone = false; creature.AddUnitState(UNIT_STAT_ROAMING_MOVE); -- cgit v1.2.3 From 5dd6b8b2dcc99644f103a31e48fd5194795db123 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Tue, 17 Jan 2012 14:31:22 +0100 Subject: Core/Conditions: Change CONDITION_REPUTATION_RANK. It now no longer explicitly checks if ConditionValue2 is equal to the reputation rank. It now checks if the player's reputation rank is in the bitmask of ConditionValue2, where each bits are (1 << ReputationRank). Idea by Aokromes and Malcrom Data conversion query by Malcrom (*WATCH OUT WITH CUSTOM CONTENT AS THIS DELETES ALL CONDITION TYPE 5's AND RE-ADDS STOCK DATA ONLY*) --- sql/updates/world/2012_01_17_01_world_conditions.sql | 12 ++++++++++++ src/server/game/Conditions/ConditionMgr.cpp | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2012_01_17_01_world_conditions.sql (limited to 'src/server/game') diff --git a/sql/updates/world/2012_01_17_01_world_conditions.sql b/sql/updates/world/2012_01_17_01_world_conditions.sql new file mode 100644 index 00000000000..1dacd35dd4f --- /dev/null +++ b/sql/updates/world/2012_01_17_01_world_conditions.sql @@ -0,0 +1,12 @@ +-- Condition update to flags +DELETE FROM `conditions` WHERE `ConditionTypeOrReference`=5; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(19,0,13846,0,5,1106,127,0,0,'','Quest Contributin'' To The Cause - Requires Argent Crusade hated thru revered'), +(20,0,13846,0,5,1106,127,0,0,'','Quest Contributin'' To The Cause - Requires Argent Crusade hated thru revered'), +(14,21258,7594,0,5,270,120,0,0,'','Only show text_id 7594 if player is neutral thru revered with Zandalar Tribe (270)'), +(14,21258,7595,0,5,270,128,0,0,'','Only show text_id 7594 if player is exalted with Zandalar Tribe (270)'), +(15,21258,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'), +(15,21259,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'), +(15,21260,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'), +(1,23342,32726,0,5,1015,240,0,0,'','Murkblood Escape Plans - when Netherwing friendly thru exalted'), +(1,23286,32726,0,5,1015,240,0,0,'','Murkblood Escape Plans - when Netherwing friendly thru exalted'); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 0bcd1a7864b..49b5d4cba65 100755 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -63,7 +63,7 @@ bool Condition::Meets(Player* player, Unit* invoker) case CONDITION_REPUTATION_RANK: { if (FactionEntry const* faction = sFactionStore.LookupEntry(mConditionValue1)) - condMeets = uint32(player->GetReputationMgr().GetRank(faction)) == mConditionValue2; + condMeets = (mConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction))); break; } case CONDITION_ACHIEVEMENT: -- cgit v1.2.3 From 6a44399852f746883d39a17e34670e1f5c8c10a6 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Tue, 17 Jan 2012 18:51:04 +0100 Subject: Core/Items: Fix a trading spoof exploit. Closes #4713 --- src/server/game/Entities/Player/Player.cpp | 20 ++++++++++++++++++-- src/server/game/Entities/Player/Player.h | 6 ++++-- 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bed3c0cb1a7..5ba80caaaf1 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -296,15 +296,24 @@ Item* TradeData::GetItem(TradeSlots slot) const return m_items[slot] ? m_player->GetItemByGuid(m_items[slot]) : NULL; } -bool TradeData::HasItem(uint64 item_guid) const +bool TradeData::HasItem(uint64 itemGuid) const { for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) - if (m_items[i] == item_guid) + if (m_items[i] == itemGuid) return true; return false; } +TradeSlots const TradeData::GetTradeSlotForItem(uint64 itemGuid) +{ + for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) + if (m_items[i] == itemGuid) + return TradeSlots(i); + + return TRADE_SLOT_INVALID; +} + Item* TradeData::GetSpellCastItem() const { return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; @@ -12874,6 +12883,13 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) EquipItem(dest, pNewItem, true); AutoUnequipOffhandIfNeed(); } + + //! Update item count in trade window, prevent spoofing + //! Since pSrcItem has its count updated (see above), Item::GetCount() will return the new count + //! in the underlying packet builder function + TradeSlots const slot = GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()); + if (slot != TRADE_SLOT_INVALID) + GetTradeData()->SetItem(slot, pSrcItem); } void Player::SwapItem(uint16 src, uint16 dst) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 7a455590506..fccd380bd29 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -686,7 +686,8 @@ enum TradeSlots { TRADE_SLOT_COUNT = 7, TRADE_SLOT_TRADED_COUNT = 6, - TRADE_SLOT_NONTRADED = 6 + TRADE_SLOT_NONTRADED = 6, + TRADE_SLOT_INVALID = -1, }; enum TransferAbortReason @@ -1001,7 +1002,8 @@ class TradeData TradeData* GetTraderData() const; Item* GetItem(TradeSlots slot) const; - bool HasItem(uint64 item_guid) const; + bool HasItem(uint64 itemGuid) const; + TradeSlots const GetTradeSlotForItem(uint64 itemGuid); void SetItem(TradeSlots slot, Item* item); uint32 GetSpell() const { return m_spell; } -- cgit v1.2.3 From b754f7c91dc284073786ac60e6205bb5f38443b2 Mon Sep 17 00:00:00 2001 From: QAston Date: Tue, 17 Jan 2012 21:33:56 +0100 Subject: Core/Auras: Add some documentation to new proc system code to avoid confusion. --- src/server/game/Spells/Auras/SpellAuras.cpp | 14 ++++++++++++-- src/server/game/Spells/Auras/SpellAuras.h | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 5577422919f..b32e346757f 100755 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1963,6 +1963,13 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI if (!sSpellMgr->CanSpellTriggerProcOnEvent(*procEntry, eventInfo)) return false; + // TODO: + // - do checks using conditions table for eventInfo->GetActor() and eventInfo->GetActionTarget() + // - add DoCheckProc() AuraScript hook + // to allow additional requirements for procs + // this is needed because this is the last moment in which you can prevent aura charge drop on proc + // and possibly a way to prevent default checks (if there're going to be any) + // Check if current equipment meets aura requirements // do that only for passive spells // TODO: this needs to be unified for all kinds of auras @@ -2023,11 +2030,14 @@ float Aura::CalcProcChance(SpellProcEntry const& procEntry, ProcEventInfo& event void Aura::TriggerProcOnEvent(AuraApplication* aurApp, ProcEventInfo& eventInfo) { - // TODO: script hooks here (allowing prevention of selected effects) + // TODO: OnProc hook here for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (aurApp->HasEffect(i)) + // TODO: OnEffectProc hook here (allowing prevention of selected effects) GetEffect(i)->HandleProc(aurApp, eventInfo); - // TODO: script hooks here + // TODO: AfterEffectProc hook here + + // TODO: AfterProc hook here // Remove aura if we've used last charge to proc if (IsUsingCharges() && !GetCharges()) diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 8c9cde37c15..de743eb2991 100755 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -186,6 +186,9 @@ class Aura bool CanStackWith(Aura const* existingAura) const; // Proc system + // this subsystem is not yet in use - the core of it is functional, but still some research has to be done + // and some dependant problems fixed before it can replace old proc system (for example cooldown handling) + // currently proc system functionality is implemented in Unit::ProcDamageAndSpell bool IsProcOnCooldown() const; void AddProcCooldown(uint32 msec); bool IsUsingCharges() const { return m_isUsingCharges; } -- cgit v1.2.3 From 819da8af4df187f39061d1abbfe80414e5e1607c Mon Sep 17 00:00:00 2001 From: kaelima Date: Wed, 18 Jan 2012 06:06:52 +0100 Subject: Core/Items: Attempt to fix crash in Player::SplitItem caused by 6a44399852f746883d39a17e34670e1f5c8c10a6. And some random cleanup --- src/server/game/DungeonFinding/LFGMgr.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 8 ++++++-- src/server/game/Entities/Unit/Unit.cpp | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 0f146598a6e..ac7343e8f23 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -483,7 +483,7 @@ void LFGMgr::InitializeLockedDungeons(Player* player) void LFGMgr::Join(Player* player, uint8 roles, const LfgDungeonSet& selectedDungeons, const std::string& comment) { if (!player || !player->GetSession() || selectedDungeons.empty()) - return; + return; Group* grp = player->GetGroup(); uint64 guid = player->GetGUID(); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5ba80caaaf1..ed65e1ce527 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12842,7 +12842,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) pSrcItem->SetState(ITEM_CHANGED, this); StoreItem(dest, pNewItem, true); } - else if (IsBankPos (dst)) + else if (IsBankPos(dst)) { // change item amount before check (for unique max count check) pSrcItem->SetCount(pSrcItem->GetCount() - count); @@ -12862,7 +12862,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) pSrcItem->SetState(ITEM_CHANGED, this); BankItem(dest, pNewItem, true); } - else if (IsEquipmentPos (dst)) + else if (IsEquipmentPos(dst)) { // change item amount before check (for unique max count check), provide space for splitted items pSrcItem->SetCount(pSrcItem->GetCount() - count); @@ -12884,6 +12884,10 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) AutoUnequipOffhandIfNeed(); } + //! Make sure that code below only is executed when trading + if (!GetTradeData()) + return; + //! Update item count in trade window, prevent spoofing //! Since pSrcItem has its count updated (see above), Item::GetCount() will return the new count //! in the underlying packet builder function diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 63aa7771063..d7353d72ee0 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2114,12 +2114,12 @@ void Unit::SendMeleeAttackStart(Unit* victim) void Unit::SendMeleeAttackStop(Unit* victim) { - WorldPacket data(SMSG_ATTACKSTOP, (8+8+4)); // we guess size + WorldPacket data(SMSG_ATTACKSTOP, (8+8+4)); data.append(GetPackGUID()); data.append(victim ? victim->GetPackGUID() : 0); // can be 0x00... data << uint32(0); // can be 0x1 SendMessageToSet(&data, true); - sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTART"); + sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTOP"); if (victim) sLog->outDetail("%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow()); -- cgit v1.2.3 From cc88681dc5da60218e36ca00873cdf3033bcc5b5 Mon Sep 17 00:00:00 2001 From: SignFinder Date: Wed, 18 Jan 2012 11:56:34 +0400 Subject: Core/Items: Really fix a trading spoof exploit. Thanks Alexsot for fix. --- src/server/game/Entities/Player/Player.cpp | 6 +++--- src/server/game/Entities/Player/Player.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ed65e1ce527..855fb9332b2 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -319,11 +319,11 @@ Item* TradeData::GetSpellCastItem() const return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; } -void TradeData::SetItem(TradeSlots slot, Item* item) +void TradeData::SetItem(TradeSlots slot, Item* item, bool update) { uint64 itemGuid = item ? item->GetGUID() : 0; - if (m_items[slot] == itemGuid) + if (m_items[slot] == itemGuid && !update) return; m_items[slot] = itemGuid; @@ -12893,7 +12893,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) //! in the underlying packet builder function TradeSlots const slot = GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()); if (slot != TRADE_SLOT_INVALID) - GetTradeData()->SetItem(slot, pSrcItem); + GetTradeData()->SetItem(slot, pSrcItem, true); } void Player::SwapItem(uint16 src, uint16 dst) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index fccd380bd29..ae889e342c3 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1004,7 +1004,7 @@ class TradeData Item* GetItem(TradeSlots slot) const; bool HasItem(uint64 itemGuid) const; TradeSlots const GetTradeSlotForItem(uint64 itemGuid); - void SetItem(TradeSlots slot, Item* item); + void SetItem(TradeSlots slot, Item* item, bool update = false); uint32 GetSpell() const { return m_spell; } void SetSpell(uint32 spell_id, Item* castItem = NULL); -- cgit v1.2.3 From d3422169f0010289a371b072e3ab36807411dfcb Mon Sep 17 00:00:00 2001 From: Vincent-Core Date: Wed, 18 Jan 2012 12:37:34 +0100 Subject: Core/Achievements: - Fixed achievement "The Alterac Blitz" in Alterac Valley - Fixed achievement "Let's Get This Done" in Arathi Basin - Fixed achievement "Flurry" in Eye of the Storm --- sql/updates/world/2012_01_18_00_world_achievement_criteria_data.sql | 5 +++++ src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp | 3 +++ src/server/game/Battlegrounds/Zones/BattlegroundAB.h | 2 ++ src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp | 3 +++ src/server/game/Battlegrounds/Zones/BattlegroundAV.h | 2 ++ src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp | 3 +++ src/server/game/Battlegrounds/Zones/BattlegroundEY.h | 2 ++ 7 files changed, 20 insertions(+) create mode 100644 sql/updates/world/2012_01_18_00_world_achievement_criteria_data.sql (limited to 'src/server/game') diff --git a/sql/updates/world/2012_01_18_00_world_achievement_criteria_data.sql b/sql/updates/world/2012_01_18_00_world_achievement_criteria_data.sql new file mode 100644 index 00000000000..a9c2781d57f --- /dev/null +++ b/sql/updates/world/2012_01_18_00_world_achievement_criteria_data.sql @@ -0,0 +1,5 @@ +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (1237,1240,1241); +INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES +(1237, 0, 0, 0, ''), -- Achievement: Let's Get This Done +(1240, 0, 0, 0, ''), -- Achievement: Flurry +(1241, 0, 0, 0, ''); -- Achievement: The Alterac Blitz diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index d64b2a9913d..5e529768c04 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -202,6 +202,9 @@ void BattlegroundAB::StartingEventOpenDoors() } DoorOpen(BG_AB_OBJECT_GATE_A); DoorOpen(BG_AB_OBJECT_GATE_H); + + // Achievement: Let's Get This Done + StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, AB_EVENT_START_BATTLE); } void BattlegroundAB::AddPlayer(Player* player) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 38c8f4a21d4..c86076f0250 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -181,6 +181,8 @@ enum BG_AB_Objectives #define BG_AB_NotABBGWeekendReputationTicks 200 #define BG_AB_ABBGWeekendReputationTicks 150 +#define AB_EVENT_START_BATTLE 9158 // Achievement: Let's Get This Done + // x, y, z, o const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4] = { {1166.785f, 1200.132f, -56.70859f, 0.9075713f}, // stables diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 01f62bfcf35..f2e8c2bf0af 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -420,6 +420,9 @@ void BattlegroundAV::StartingEventOpenDoors() DoorOpen(BG_AV_OBJECT_DOOR_H); DoorOpen(BG_AV_OBJECT_DOOR_A); + + // Achievement: The Alterac Blitz + StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, AV_EVENT_START_BATTLE); } void BattlegroundAV::AddPlayer(Player* player) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index e2902f8fd2d..82e231c63fa 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -50,6 +50,8 @@ class Battleground; #define BG_AV_KILL_SURVIVING_CAPTAIN 2 #define BG_AV_REP_SURVIVING_CAPTAIN 125 +#define AV_EVENT_START_BATTLE 9166 // Achievement: The Alterac Blitz + enum BG_AV_Sounds { //TODO: get out if there comes a sound when neutral team captures mine diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index 4595a061e1a..1e7f79b8391 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -120,6 +120,9 @@ void BattlegroundEY::StartingEventOpenDoors() uint8 buff = urand(0, 2); SpawnBGObject(BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER + buff + i * 3, RESPAWN_IMMEDIATELY); } + + // Achievement: Flurry + StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EY_EVENT_START_BATTLE); } void BattlegroundEY::AddPoints(uint32 Team, uint32 Points) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 5f89e0d7021..baa9ca30cff 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -220,6 +220,8 @@ enum EYBattlegroundObjectTypes #define BG_EY_NotEYWeekendHonorTicks 330 #define BG_EY_EYWeekendHonorTicks 200 +#define EY_EVENT_START_BATTLE 13180 // Achievement: Flurry + enum BG_EY_Score { BG_EY_WARNING_NEAR_VICTORY_SCORE = 1400, -- cgit v1.2.3 From abd94e324b1ba872da331e19a3e80a6667edb363 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Wed, 18 Jan 2012 13:10:36 +0100 Subject: Core/Items: Fix crash and updated documentation in SplitItem --- src/server/game/Entities/Player/Player.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 855fb9332b2..eb270521500 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12891,7 +12891,9 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) //! Update item count in trade window, prevent spoofing //! Since pSrcItem has its count updated (see above), Item::GetCount() will return the new count //! in the underlying packet builder function - TradeSlots const slot = GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()); + //! Note that this is not blizzlike, the item should be greyed out when in trade. + //! TODO: Figure out which packet(s) are responsible for that. + TradeSlots const slot = GetTradeData() ? GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()) : TRADE_SLOT_INVALID; if (slot != TRADE_SLOT_INVALID) GetTradeData()->SetItem(slot, pSrcItem, true); } -- cgit v1.2.3 From 86104943cb5ad053314559c33ec20292e13f27dc Mon Sep 17 00:00:00 2001 From: Chaplain Date: Wed, 18 Jan 2012 16:26:45 +0300 Subject: Core/MotionMaster: Fix logic in MoveLand() and MoveTakeoff() --- src/server/game/Movement/MotionMaster.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index c17f5096748..b07c915165a 100755 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -307,7 +307,7 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos, float speed) init.SetVelocity(speed); init.SetAnimation(Movement::ToGround); init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); } void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, float speed) @@ -322,7 +322,7 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, float speed) init.SetVelocity(speed); init.SetAnimation(Movement::ToFly); init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); } void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ) -- cgit v1.2.3 From accea2b44ed5fd5d1a3953f5b0deaf0ff5571807 Mon Sep 17 00:00:00 2001 From: Chaplain Date: Wed, 18 Jan 2012 18:42:25 +0300 Subject: Core/Movegen: Added missing part in ChaseMovementgenerator and minor logic fix in MotionMaster::MoveJump() --- src/server/game/Movement/MotionMaster.cpp | 5 ++++- .../MovementGenerators/TargetedMovementGenerator.cpp | 14 ++++++++++++++ .../MovementGenerators/TargetedMovementGenerator.h | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index b07c915165a..8975a2d7d7b 100755 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -365,7 +365,10 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee init.SetParabolic(max_height,0); init.SetVelocity(speedXY); init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + if (i_owner->GetTypeId() == TYPEID_PLAYER) + Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + else + Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); } void MotionMaster::MoveFall(uint32 id/*=0*/) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index bded2fd512c..b03e13f91f4 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -211,6 +211,19 @@ void ChaseMovementGenerator::Reset(T &owner) Initialize(owner); } +template +void ChaseMovementGenerator::MovementInform(T & /*unit*/) +{ +} + +template<> +void ChaseMovementGenerator::MovementInform(Creature &unit) +{ + // Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle + if (unit.AI()) + unit.AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); +} + //-----------------------------------------------// template<> bool FollowMovementGenerator::EnableWalking() const @@ -300,6 +313,7 @@ template void ChaseMovementGenerator::Finalize(Player &); template void ChaseMovementGenerator::Finalize(Creature &); template void ChaseMovementGenerator::Reset(Player &); template void ChaseMovementGenerator::Reset(Creature &); +template void ChaseMovementGenerator::MovementInform(Player &unit); template void FollowMovementGenerator::Finalize(Player &); template void FollowMovementGenerator::Finalize(Creature &); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 785d12ba6d2..982f7fc875c 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -76,7 +76,7 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMedium Date: Wed, 18 Jan 2012 18:57:21 +0100 Subject: Core/Items: Blizzlike fix for the recent trade exploit fix --- src/server/game/Entities/Player/Player.cpp | 21 ++++++++------------- src/server/game/Entities/Player/Player.h | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index eb270521500..ddd1cdc8849 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12814,6 +12814,14 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) return; } + //! If trading + if (TradeData* tradeData = GetTradeData()) + { + //! If current item is in trade window (only possible with packet spoofing - silent return) + if (GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()) != TRADE_SLOT_INVALID) + return; + } + sLog->outDebug(LOG_FILTER_PLAYER_ITEMS, "STORAGE: SplitItem bag = %u, slot = %u, item = %u, count = %u", dstbag, dstslot, pSrcItem->GetEntry(), count); Item* pNewItem = pSrcItem->CloneItem(count, this); if (!pNewItem) @@ -12883,19 +12891,6 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) EquipItem(dest, pNewItem, true); AutoUnequipOffhandIfNeed(); } - - //! Make sure that code below only is executed when trading - if (!GetTradeData()) - return; - - //! Update item count in trade window, prevent spoofing - //! Since pSrcItem has its count updated (see above), Item::GetCount() will return the new count - //! in the underlying packet builder function - //! Note that this is not blizzlike, the item should be greyed out when in trade. - //! TODO: Figure out which packet(s) are responsible for that. - TradeSlots const slot = GetTradeData() ? GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()) : TRADE_SLOT_INVALID; - if (slot != TRADE_SLOT_INVALID) - GetTradeData()->SetItem(slot, pSrcItem, true); } void Player::SwapItem(uint16 src, uint16 dst) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ae889e342c3..fccd380bd29 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1004,7 +1004,7 @@ class TradeData Item* GetItem(TradeSlots slot) const; bool HasItem(uint64 itemGuid) const; TradeSlots const GetTradeSlotForItem(uint64 itemGuid); - void SetItem(TradeSlots slot, Item* item, bool update = false); + void SetItem(TradeSlots slot, Item* item); uint32 GetSpell() const { return m_spell; } void SetSpell(uint32 spell_id, Item* castItem = NULL); -- cgit v1.2.3 From e652d9043ba7c4c2b1b159eccc1e09c0c0c9bf55 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Wed, 18 Jan 2012 19:00:52 +0100 Subject: Missing unsaved changes for previous commit... --- src/server/game/Entities/Player/Player.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ddd1cdc8849..ce80d7a7af3 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -319,11 +319,11 @@ Item* TradeData::GetSpellCastItem() const return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; } -void TradeData::SetItem(TradeSlots slot, Item* item, bool update) +void TradeData::SetItem(TradeSlots slot, Item* item) { uint64 itemGuid = item ? item->GetGUID() : 0; - if (m_items[slot] == itemGuid && !update) + if (m_items[slot] == itemGuid) return; m_items[slot] = itemGuid; @@ -12818,7 +12818,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) if (TradeData* tradeData = GetTradeData()) { //! If current item is in trade window (only possible with packet spoofing - silent return) - if (GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID()) != TRADE_SLOT_INVALID) + if (tradeData->GetTradeSlotForItem(pSrcItem->GetGUID()) != TRADE_SLOT_INVALID) return; } -- cgit v1.2.3 From 2d89b4bfe0db8979c2e530c9afd83f7fbf286394 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Wed, 18 Jan 2012 21:02:06 +0100 Subject: Core/DBLayer: Change some incorrect uses of PQuery with PExecute or Execute --- src/server/game/Groups/Group.cpp | 4 +++- src/server/scripts/Commands/cs_npc.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 19bc1ab7dea..b31b632e963 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -203,7 +203,9 @@ void Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, // skip non-existed member if (!sObjectMgr->GetPlayerNameByGUID(member.guid, member.name)) { - CharacterDatabase.PQuery("DELETE FROM group_member WHERE memberGuid=%u", guidLow); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_MEMBER); + stmt->setUInt32(0, guidLow); + CharacterDatabase.Execute(stmt); return; } diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 1b6a6c6fdcf..57932ef56c6 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -130,7 +130,7 @@ public: { uint32 tguid = chr->GetTransport()->AddNPCPassenger(0, id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); if (tguid > 0) - WorldDatabase.PQuery("INSERT INTO creature_transport (guid, npc_entry, transport_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO) values (%u, %u, %f, %f, %f, %f, %u)", tguid, id, chr->GetTransport()->GetEntry(), chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); + WorldDatabase.PExecute("INSERT INTO creature_transport (guid, npc_entry, transport_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO) values (%u, %u, %f, %f, %f, %f, %u)", tguid, id, chr->GetTransport()->GetEntry(), chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); return true; } @@ -679,7 +679,7 @@ public: if (target->GetTransport()) if (target->GetGUIDTransport()) - WorldDatabase.PQuery("UPDATE creature_transport SET emote=%u WHERE transport_entry=%u AND guid=%u", emote, target->GetTransport()->GetEntry(), target->GetGUIDTransport()); + WorldDatabase.PExecute("UPDATE creature_transport SET emote=%u WHERE transport_entry=%u AND guid=%u", emote, target->GetTransport()->GetEntry(), target->GetGUIDTransport()); target->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote); -- cgit v1.2.3 From 0f383e9cdd12531260f722671f6bd51bef85930e Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 20 Jan 2012 05:11:52 +0300 Subject: Core/Movement: properly set mover for possess/vehicles --- src/server/game/Entities/Unit/Unit.cpp | 2 ++ src/server/game/Entities/Vehicle/Vehicle.cpp | 4 ---- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 14 ++------------ 3 files changed, 4 insertions(+), 16 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7b51840b49f..6bab63acf1b 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15849,6 +15849,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au case CHARM_TYPE_VEHICLE: SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); charmer->ToPlayer()->SetClientControl(this, 1); + charmer->ToPlayer()->SetMover(this); charmer->ToPlayer()->SetViewpoint(this, true); charmer->ToPlayer()->VehicleSpellInitialize(); break; @@ -15857,6 +15858,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); charmer->ToPlayer()->SetClientControl(this, 1); + charmer->ToPlayer()->SetMover(this); charmer->ToPlayer()->SetViewpoint(this, true); charmer->ToPlayer()->PossessSpellInitialize(); break; diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index b3531d585c3..7e4bebaab95 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -359,7 +359,6 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId) { if (!_me->SetCharmedBy(unit, CHARM_TYPE_VEHICLE)) ASSERT(false); - unit->ToPlayer()->SetMover(this->GetBase()); } if (_me->IsInWorld()) @@ -411,10 +410,7 @@ void Vehicle::RemovePassenger(Unit* unit) unit->ClearUnitState(UNIT_STAT_ONVEHICLE); if (_me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER && seat->first == 0 && seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_CAN_CONTROL) - { _me->RemoveCharmedBy(unit); - unit->ToPlayer()->SetMover(unit->ToPlayer()); - } if (_me->IsInWorld()) { diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 535253f4e13..7c09a2f32c6 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3096,17 +3096,9 @@ void AuraEffect::HandleModPossess(AuraApplication const* aurApp, uint8 mode, boo } if (apply) - { - if (target->SetCharmedBy(caster, CHARM_TYPE_POSSESS, aurApp)) - caster->ToPlayer()->SetMover(target); - } + target->SetCharmedBy(caster, CHARM_TYPE_POSSESS, aurApp); else - { target->RemoveCharmedBy(caster); - caster->ToPlayer()->SetMover(caster); - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->SetMover(target); - } } // only one spell has this aura @@ -3134,13 +3126,11 @@ void AuraEffect::HandleModPossessPet(AuraApplication const* aurApp, uint8 mode, if (caster->ToPlayer()->GetPet() != pet) return; - if (pet->SetCharmedBy(caster, CHARM_TYPE_POSSESS, aurApp)) - caster->ToPlayer()->SetMover(pet); + pet->SetCharmedBy(caster, CHARM_TYPE_POSSESS, aurApp); } else { pet->RemoveCharmedBy(caster); - caster->ToPlayer()->SetMover(caster); if (!pet->IsWithinDistInMap(caster, pet->GetMap()->GetVisibilityRange())) pet->Remove(PET_SAVE_NOT_IN_SLOT, true); -- cgit v1.2.3 From 07b1101a6328884464ed98d438d66956045b74bd Mon Sep 17 00:00:00 2001 From: Subv2112 Date: Sat, 21 Jan 2012 18:54:05 -0500 Subject: Core/SAI: Run mode should be disabled by default in creatures with SAI Signed-off-by: Subv2112 --- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/game') diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1a26e241c5e..01fb936b847 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -46,7 +46,7 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c) // spawn in run mode me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); - mRun = true; + mRun = false; me->GetPosition(&mLastOOCPos); -- cgit v1.2.3 From c37afafbbf67c4984d7d966c7dbf44c080a1f9ac Mon Sep 17 00:00:00 2001 From: Vincent-Core Date: Sun, 22 Jan 2012 01:49:53 +0100 Subject: Core/SmartAI: Fix target type SMART_TARGET_INVOKER_PARTY --- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/server/game') diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 15423c7aff2..ce357393515 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -282,6 +282,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_HOSTILE_RANDOM: case SMART_TARGET_HOSTILE_RANDOM_NOT_TOP: case SMART_TARGET_ACTION_INVOKER: + case SMART_TARGET_INVOKER_PARTY: case SMART_TARGET_POSITION: case SMART_TARGET_NONE: case SMART_TARGET_ACTION_INVOKER_VEHICLE: -- cgit v1.2.3