mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 19:06:49 +01:00
Added support for scripting achievement criteria checks using ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT (11)
--HG-- branch : trunk
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user