| 1248 | } |
| 1249 | |
| 1250 | void Player::triggerPickupEvents(ItemPtr const& item) { |
| 1251 | if (item) { |
| 1252 | for (auto b : item->learnBlueprintsOnPickup()) |
| 1253 | addBlueprint(b); |
| 1254 | |
| 1255 | for (auto pair : item->collectablesOnPickup()) |
| 1256 | addCollectable(pair.first, pair.second); |
| 1257 | |
| 1258 | for (auto m : item->instanceValue("radioMessagesOnPickup", JsonArray()).iterateArray()) { |
| 1259 | if (m.isType(Json::Type::Array)) { |
| 1260 | if (m.size() >= 2 && m.get(1).canConvert(Json::Type::Float)) |
| 1261 | queueRadioMessage(m.get(0), m.get(1).toFloat()); |
| 1262 | } else { |
| 1263 | queueRadioMessage(m); |
| 1264 | } |
| 1265 | } |
| 1266 | |
| 1267 | if (auto cinematic = item->instanceValue("cinematicOnPickup", Json())) |
| 1268 | setPendingCinematic(cinematic, true); |
| 1269 | |
| 1270 | for (auto const& quest : item->pickupQuestTemplates()) { |
| 1271 | if (m_questManager->canStart(quest)) |
| 1272 | m_questManager->offer(make_shared<Quest>(quest, 0, this)); |
| 1273 | } |
| 1274 | |
| 1275 | if (auto consume = item->instanceValue("consumeOnPickup", Json())) { |
| 1276 | if (consume.toBool()) |
| 1277 | item->consume(item->count()); |
| 1278 | } |
| 1279 | |
| 1280 | statistics()->recordEvent("item", JsonObject{ |
| 1281 | {"itemName", item->name()}, |
| 1282 | {"count", item->count()}, |
| 1283 | {"category", item->instanceValue("eventCategory", item->category())} |
| 1284 | }); |
| 1285 | } |
| 1286 | } |
| 1287 | |
| 1288 | ItemPtr Player::essentialItem(EssentialItem essentialItem) const { |
| 1289 | return m_inventory->essentialItem(essentialItem); |
no test coverage detected