| 448 | } |
| 449 | |
| 450 | static void load_engines() |
| 451 | { |
| 452 | clear_engines(); |
| 453 | |
| 454 | std::vector<PersistentDataItem> vec; |
| 455 | |
| 456 | World::GetPersistentData(&vec, "siege-engine/target/", true); |
| 457 | for (auto it = vec.begin(); it != vec.end(); ++it) |
| 458 | { |
| 459 | auto engine = find_engine(df::building::find(it->ival(0)), true); |
| 460 | if (!engine) continue; |
| 461 | engine->target.first = df::coord(it->ival(1), it->ival(2), it->ival(3)); |
| 462 | engine->target.second = df::coord(it->ival(4), it->ival(5), it->ival(6)); |
| 463 | } |
| 464 | |
| 465 | World::GetPersistentData(&vec, "siege-engine/ammo/", true); |
| 466 | for (auto it = vec.begin(); it != vec.end(); ++it) |
| 467 | { |
| 468 | auto engine = find_engine(df::building::find(it->ival(0)), true); |
| 469 | if (!engine) continue; |
| 470 | engine->ammo_vector_id = (df::job_item_vector_id)it->ival(1); |
| 471 | engine->ammo_item_type = (df::item_type)it->ival(2); |
| 472 | } |
| 473 | |
| 474 | World::GetPersistentData(&vec, "siege-engine/stockpiles/", true); |
| 475 | for (auto it = vec.begin(); it != vec.end(); ++it) |
| 476 | { |
| 477 | auto engine = find_engine(df::building::find(it->ival(0)), true); |
| 478 | if (!engine) |
| 479 | continue; |
| 480 | auto pile = df::building::find(it->ival(1)); |
| 481 | if (!pile || pile->getType() != building_type::Stockpile) |
| 482 | { |
| 483 | World::DeletePersistentData(*it); |
| 484 | continue;; |
| 485 | } |
| 486 | |
| 487 | engine->stockpiles.insert(it->ival(1)); |
| 488 | } |
| 489 | |
| 490 | World::GetPersistentData(&vec, "siege-engine/profiles/", true); |
| 491 | for (auto it = vec.begin(); it != vec.end(); ++it) |
| 492 | { |
| 493 | auto engine = find_engine(df::building::find(it->ival(0)), true); |
| 494 | if (!engine) continue; |
| 495 | engine->profile.min_level = it->ival(1); |
| 496 | engine->profile.max_level = it->ival(2); |
| 497 | } |
| 498 | |
| 499 | World::GetPersistentData(&vec, "siege-engine/profile-workers/", true); |
| 500 | for (auto it = vec.begin(); it != vec.end(); ++it) |
| 501 | { |
| 502 | auto engine = find_engine(df::building::find(it->ival(0)), true); |
| 503 | if (!engine) |
| 504 | continue; |
| 505 | auto unit = df::unit::find(it->ival(1)); |
| 506 | if (!unit || !Units::isCitizen(unit)) |
| 507 | { |
no test coverage detected