From 6c020c72cc46388b04350adcfa4ffab7bc9b2c2c Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 2 Mar 2011 16:50:09 +0100 Subject: Core/SAI: Implemented Gameobject action allowing to send SMSG_GAMEOBJECT_CUSTOM_ANIM with parameter set in param1 --- src/server/game/AI/SmartScripts/SmartScript.cpp | 12 ++++++++++++ src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + src/server/game/AI/SmartScripts/SmartScriptMgr.h | 10 ++++++++-- src/server/game/Entities/GameObject/GameObject.cpp | 8 ++++---- src/server/game/Entities/GameObject/GameObject.h | 2 +- 5 files changed, 26 insertions(+), 7 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 3ad48d1421f..7809ded8e78 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1453,6 +1453,18 @@ void SmartScript::ProcessAction(SmartScriptHolder &e, Unit* unit, uint32 var0, u (*itr)->ToUnit()->InterruptNonMeleeSpells(e.action.interruptSpellCasting.withDelayed,e.action.interruptSpellCasting.spell_id,e.action.interruptSpellCasting.withInstant); } + break; + } + case SMART_ACTION_SEND_GO_CUSTOM_ANIM: + { + ObjectList* targets = GetTargets(e, unit); + if (!targets) + return; + + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); itr++) + if (IsGameObject((*itr))) + (*itr)->ToGameObject()->SendCustomAnim(e.action.sendGoCustomAnim.anim); + break; } default: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index a25b52aa30b..127994648cc 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -769,6 +769,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e) case SMART_ACTION_SET_UNIT_FIELD_BYTES_1: case SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1: case SMART_ACTION_INTERRUPT_SPELL: + case SMART_ACTION_SEND_GO_CUSTOM_ANIM: break; default: sLog->outErrorDb("SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 51f31e401ad..ec02d44b607 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -445,12 +445,13 @@ enum SMART_ACTION SMART_ACTION_RANDOM_MOVE = 89, // maxDist SMART_ACTION_SET_UNIT_FIELD_BYTES_1 = 90, // bytes, target - SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1 = 91, // bytes, target SMART_ACTION_INTERRUPT_SPELL = 92, - SMART_ACTION_END = 93, + SMART_ACTION_SEND_GO_CUSTOM_ANIM = 93, // anim id + + SMART_ACTION_END = 94, }; struct SmartAction @@ -829,6 +830,11 @@ struct SmartAction uint32 spell_id; bool withInstant; } interruptSpellCasting; + + struct + { + uint32 anim; + } sendGoCustomAnim; struct { uint32 param1; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 6bbb1784ee1..3c5521f6b87 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -306,7 +306,7 @@ void GameObject::Update(uint32 diff) udata.BuildPacket(&packet); caster->ToPlayer()->GetSession()->SendPacket(&packet); - SendCustomAnim(); + SendCustomAnim(GetGoAnimProgress()); } m_lootState = GO_READY; // can be successfully open with some chance @@ -1212,7 +1212,7 @@ void GameObject::Use(Unit* user) // this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389) if (time_to_restore && info->goober.customAnim) - SendCustomAnim(); + SendCustomAnim(GetGoAnimProgress()); else SetGoState(GO_STATE_ACTIVE); @@ -1637,11 +1637,11 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) //trigger->RemoveCorpse(); } -void GameObject::SendCustomAnim() +void GameObject::SendCustomAnim(uint32 anim) { WorldPacket data(SMSG_GAMEOBJECT_CUSTOM_ANIM,8+4); data << GetGUID(); - data << uint32(GetGoAnimProgress()); + data << uint32(anim); SendMessageToSet(&data, true); } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index c913c317772..6254666fdf6 100755 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -748,7 +748,7 @@ class GameObject : public WorldObject, public GridObject GameObject* LookupFishingHoleAround(float range); void CastSpell(Unit *target, uint32 spell); - void SendCustomAnim(); + void SendCustomAnim(uint32 anim); bool IsInRange(float x, float y, float z, float radius) const; void TakenDamage(uint32 damage, Unit* who = NULL); void Rebuild(); -- cgit v1.2.3