diff options
| author | Shauren <none@none> | 2010-08-07 16:48:34 +0200 |
|---|---|---|
| committer | Shauren <none@none> | 2010-08-07 16:48:34 +0200 |
| commit | 431301c1b29103e444b5c534c17543c87a99e481 (patch) | |
| tree | 748d5acb68d83a7cad74c9bd9c06cdbc08a5267e /src/server/game/Scripting | |
| parent | ed4e49a4e7f44e45ba5b81e5aaa6fe5dff584a5a (diff) | |
Added support for scripting achievement criteria checks using ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT (11)
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Scripting')
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 23 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index b43e601b433..dc405c53e53 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1053,6 +1053,15 @@ void ScriptMgr::OnShutdown() FOREACH_SCRIPT(WorldScript)->OnShutdown(); } +bool ScriptMgr::OnCriteriaCheck(AchievementCriteriaData const* data, Player* source, Unit* target) +{ + ASSERT(source); + // target can be NULL + + GET_SCRIPT_RET(AchievementCriteriaScript, data->ScriptId, tmpscript, false); + return tmpscript->OnCheck(source, target); +} + void SpellHandlerScript::RegisterSelf() { ScriptMgr::ScriptRegistry<SpellHandlerScript>::AddScript(this); @@ -1158,6 +1167,11 @@ void TransportScript::RegisterSelf() ScriptMgr::ScriptRegistry<TransportScript>::AddScript(this); } +void AchievementCriteriaScript::RegisterSelf() +{ + ScriptMgr::ScriptRegistry<AchievementCriteriaScript>::AddScript(this); +} + template<class TScript> void ScriptMgr::ScriptRegistry<TScript>::AddScript(TScript* const script) { @@ -1255,6 +1269,7 @@ template class ScriptMgr::ScriptRegistry<ConditionScript>; template class ScriptMgr::ScriptRegistry<VehicleScript>; template class ScriptMgr::ScriptRegistry<DynamicObjectScript>; template class ScriptMgr::ScriptRegistry<TransportScript>; +template class ScriptMgr::ScriptRegistry<AchievementCriteriaScript>; // Undefine utility macros. #undef GET_SCRIPT_RET diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 375c339c109..c27a169880c 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -753,6 +753,25 @@ class TransportScript : public ScriptObject, public UpdatableScript<Transport> virtual void OnRelocate(Transport* transport, uint32 mapId, float x, float y, float z) { } }; +class AchievementCriteriaScript : public ScriptObject +{ + protected: + + AchievementCriteriaScript(const char* name) + : ScriptObject(name) + { + } + + void RegisterSelf(); + + public: + + bool IsDatabaseBound() const { return true; } + + // Called when additional criteria is checked + virtual bool OnCheck(Player* source, Unit* target) = 0; +}; + // Placed here due to ScriptRegistry::AddScript dependency. #define sScriptMgr (*ACE_Singleton<ScriptMgr, ACE_Null_Mutex>::instance()) @@ -921,6 +940,10 @@ class ScriptMgr void OnTransportUpdate(Transport* transport, uint32 diff); void OnRelocate(Transport* transport, uint32 mapId, float x, float y, float z); + public: /* AchievementCriteriaScript */ + + bool OnCriteriaCheck(AchievementCriteriaData const* data, Player* source, Unit* target); + public: /* ScriptRegistry */ // This is the global static registry of scripts. |
