47 lines
5.1 KiB
C++
47 lines
5.1 KiB
C++
#define HOOK(hookName, source, ...) \
|
|
{ \
|
|
try { \
|
|
auto aggregator = (source)->GetScriptIterator(); \
|
|
ArbUt::BorrowedPtr<CreatureLib::Battling::BattleScript> next = (CreatureLib::Battling::BattleScript*)1; \
|
|
while (aggregator.GetNext(next)) { \
|
|
if (next->IsSuppressed()) { \
|
|
continue; \
|
|
} \
|
|
try { \
|
|
next->hookName(__VA_ARGS__); \
|
|
} catch (const std::exception& e) { \
|
|
THROW("Exception running script hook '" #hookName "': ", e.what()) \
|
|
} \
|
|
} \
|
|
} catch (const ArbUt::Exception& e) { \
|
|
throw e; \
|
|
} catch (const std::exception& e) { \
|
|
THROW("Exception setting up script hook '" #hookName "': ", e.what()) \
|
|
} \
|
|
}
|
|
|
|
#define EXECUTE_SCRIPT_FUNC(scriptWrapper, hookName, ...) \
|
|
{ \
|
|
try { \
|
|
if (scriptWrapper.HasValue()) { \
|
|
if (scriptWrapper.IsSet()) { \
|
|
for (const auto& sv : scriptWrapper.GetScriptSet()->GetIterator()) { \
|
|
if (sv->IsSuppressed()) { \
|
|
continue; \
|
|
} \
|
|
sv->hookName(__VA_ARGS__); \
|
|
} \
|
|
} else { \
|
|
if (scriptWrapper.GetScript()->get()->IsSuppressed()) { \
|
|
continue; \
|
|
} \
|
|
scriptWrapper.GetScript()->get()->hookName(__VA_ARGS__); \
|
|
} \
|
|
} \
|
|
} catch (const ArbUt::Exception& e) { \
|
|
throw e; \
|
|
} catch (const std::exception& e) { \
|
|
THROW("Exception setting up script hook '" #hookName "': ", e.what()) \
|
|
} \
|
|
}
|