From e0f010b310d6d7c8ca3c696f941f17312bf3c01d Mon Sep 17 00:00:00 2001 From: joschiwald Date: Mon, 19 Aug 2013 20:03:06 +0200 Subject: Scripts: Random script fixes and code optimizations --- src/server/game/Entities/GameObject/GameObject.cpp | 9 --------- src/server/game/Globals/ObjectMgr.cpp | 6 ++---- 2 files changed, 2 insertions(+), 13 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 906c1f281bc..f903e0b2ee5 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1195,13 +1195,6 @@ void GameObject::Use(Unit* user) // calculate the distance between the player and this slot float thisDistance = player->GetDistance2d(x_i, y_i); - /* debug code. It will spawn a npc on each slot to visualize them. - Creature* helper = player->SummonCreature(14496, x_i, y_i, GetPositionZ(), GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10000); - std::ostringstream output; - output << i << ": thisDist: " << thisDistance; - helper->MonsterSay(output.str().c_str(), LANG_UNIVERSAL, 0); - */ - if (thisDistance <= lowestDist) { nearest_slot = itr->first; @@ -1222,8 +1215,6 @@ void GameObject::Use(Unit* user) return; } } - //else - //player->GetSession()->SendNotification("There's nowhere left for you to sit."); return; } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 88a8664e8a4..b8899ae0cd9 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -8202,10 +8202,8 @@ void ObjectMgr::LoadGossipMenuItems() _gossipMenuItemsStore.clear(); QueryResult result = WorldDatabase.Query( - // 0 1 2 3 4 - "SELECT menu_id, id, option_icon, option_text, option_id, npc_option_npcflag, " - // 5 6 7 8 9 - "action_menu_id, action_poi_id, box_coded, box_money, box_text " + // 0 1 2 3 4 5 6 7 8 9 10 + "SELECT menu_id, id, option_icon, option_text, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text " "FROM gossip_menu_option ORDER BY menu_id, id"); if (!result) -- cgit v1.2.3 From 75cc4e7b257a0b40b3e83590bf49a1b337aae9fb Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 20 Aug 2013 00:43:03 +0200 Subject: Core/Auras * Fixed unsafe removal of charm auras, it is now safe to remove them inside AI hooks * Fixes crash in SmartAI::EnterEvadeMode Closes #8679 --- src/server/game/Entities/Creature/Creature.cpp | 7 ++++++- src/server/game/Entities/Unit/Unit.cpp | 13 +++++-------- src/server/game/Entities/Unit/Unit.h | 1 + src/server/game/Grids/ObjectGridLoader.cpp | 3 +-- 4 files changed, 13 insertions(+), 11 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 2af7824cf98..169d5feae03 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -522,12 +522,17 @@ void Creature::Update(uint32 diff) if (!IsAlive()) break; - // if creature is charmed, switch to charmed AI + // if creature is charmed, switch to charmed AI (and back) if (NeedChangeAI) { UpdateCharmAI(); NeedChangeAI = false; IsAIEnabled = true; + if (!IsInEvadeMode() && LastCharmerGUID) + if (Unit* charmer = ObjectAccessor::GetUnit(*this, LastCharmerGUID)) + i_AI->AttackStart(charmer); + + LastCharmerGUID = 0; } if (!IsInEvadeMode() && IsAIEnabled) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 57a920ab56b..7e67a9e6e09 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -162,7 +162,7 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget, #endif Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0), - IsAIEnabled(false), NeedChangeAI(false), + IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(0), m_ControlledByPlayer(false), movespline(new Movement::MoveSpline()), i_AI(NULL), i_disabledAI(NULL), m_AutoRepeatFirstCast(false), m_procDeep(0), m_removedAurasCount(0), i_motionMaster(this), m_ThreatManager(this), @@ -15836,16 +15836,13 @@ void Unit::RemoveCharmedBy(Unit* charmer) if (Creature* creature = ToCreature()) { + // Creature will restore its old AI on next update if (creature->AI()) creature->AI()->OnCharmed(false); - if (type != CHARM_TYPE_VEHICLE) // Vehicles' AI is never modified - { - creature->AIM_Initialize(); - - if (creature->AI() && charmer && charmer->IsAlive()) - creature->AI()->AttackStart(charmer); - } + // Vehicle should not attack its passenger after he exists the seat + if (type != CHARM_TYPE_VEHICLE) + LastCharmerGUID = charmer->GetGUID(); } else ToPlayer()->SetClientControl(this, 1); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index d34c66f7893..c90357a9eb8 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2074,6 +2074,7 @@ class Unit : public WorldObject friend class VehicleJoinEvent; bool IsAIEnabled, NeedChangeAI; + uint64 LastCharmerGUID; bool CreateVehicleKit(uint32 id, uint32 creatureEntry); void RemoveVehicleKit(); Vehicle* GetVehicleKit()const { return m_vehicleKit; } diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index dacb72d5de6..879dd48c759 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -217,8 +217,7 @@ void ObjectGridStoper::Visit(CreatureMapType &m) { iter->GetSource()->CombatStop(); iter->GetSource()->DeleteThreatList(); - if (iter->GetSource()->IsAIEnabled) - iter->GetSource()->AI()->EnterEvadeMode(); + iter->GetSource()->AI()->EnterEvadeMode(); } } } -- cgit v1.2.3