| 397 | } |
| 398 | |
| 399 | ItemPtr ItemDatabase::applyAugment(ItemPtr const item, AugmentItem* augment) const { |
| 400 | if (item) { |
| 401 | RecursiveMutexLocker locker(m_luaMutex); |
| 402 | LuaBaseComponent script; |
| 403 | script.setLuaRoot(m_luaRoot); |
| 404 | script.setScripts(augment->augmentScripts()); |
| 405 | script.addCallbacks("item", LuaBindings::makeItemCallbacks(augment)); |
| 406 | script.addCallbacks("config", LuaBindings::makeConfigCallbacks(bind(&Item::instanceValue, augment, _1, _2))); |
| 407 | script.init(); |
| 408 | auto luaResult = script.invoke<LuaTupleReturn<Json, Maybe<uint64_t>>>("apply", item->descriptor().toJson()); |
| 409 | script.uninit(); |
| 410 | locker.unlock(); |
| 411 | |
| 412 | if (luaResult) { |
| 413 | if (!get<0>(*luaResult).isNull()) { |
| 414 | augment->take(get<1>(*luaResult).value(1)); |
| 415 | return ItemDatabase::item(ItemDescriptor(get<0>(*luaResult))); |
| 416 | } |
| 417 | } |
| 418 | } |
| 419 | |
| 420 | return item; |
| 421 | } |
| 422 | |
| 423 | bool ItemDatabase::ageItem(ItemPtr& item, double aging) const { |
| 424 | if (!item) |
no test coverage detected