MCPcopy Create free account
hub / github.com/DFHack/dfhack / sc_script

Method sc_script

library/Commands.cpp:468–558  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

466 }
467
468 command_result Commands::sc_script(color_ostream& con, Core& core, const std::string& first, const std::vector<std::string>& parts)
469 {
470 if (parts.empty() || parts[0] == "help" || parts[0] == "?")
471 {
472 con << "Usage: sc-script add|remove|list|help SC_EVENT [path-to-script] [...]" << std::endl;
473 con << "Valid event names (SC_ prefix is optional):" << std::endl;
474 for (int i = SC_WORLD_LOADED; i <= SC_UNPAUSED; i++)
475 {
476 std::string name = sc_event_name((state_change_event)i);
477 if (name != "SC_UNKNOWN")
478 con << " " << name << std::endl;
479 }
480 return CR_OK;
481 }
482 else if (parts[0] == "list")
483 {
484 std::string event_name = parts.size() >= 2 ? parts[1] : "";
485 if (event_name.size() && sc_event_id(event_name) == SC_UNKNOWN)
486 {
487 con << "Unrecognized event name: " << parts[1] << std::endl;
488 return CR_WRONG_USAGE;
489 }
490 for (const auto& state_script : core.getStateChangeScripts())
491 {
492 if (!parts[1].size() || (state_script.event == sc_event_id(parts[1])))
493 {
494 con.print("{} ({}): {}{}\n", sc_event_name(state_script.event),
495 state_script.save_specific ? "save-specific" : "global",
496 state_script.save_specific ? "<save folder>/raw/" : "<DF folder>/",
497 state_script.path);
498 }
499 }
500 return CR_OK;
501 }
502 else if (parts[0] == "add")
503 {
504 if (parts.size() < 3 || (parts.size() >= 4 && parts[3] != "-save"))
505 {
506 con << "Usage: sc-script add EVENT path-to-script [-save]" << std::endl;
507 return CR_WRONG_USAGE;
508 }
509 state_change_event evt = sc_event_id(parts[1]);
510 if (evt == SC_UNKNOWN)
511 {
512 con << "Unrecognized event: " << parts[1] << std::endl;
513 return CR_FAILURE;
514 }
515 bool save_specific = (parts.size() >= 4 && parts[3] == "-save");
516 StateChangeScript script(evt, parts[2], save_specific);
517 for (const auto& state_script : core.getStateChangeScripts())
518 {
519 if (script == state_script)
520 {
521 con << "Script already registered" << std::endl;
522 return CR_FAILURE;
523 }
524 }
525 core.addStateChangeScript(script);

Callers

nothing calls this directly

Calls 3

emptyMethod · 0.45
sizeMethod · 0.45
printMethod · 0.45

Tested by

no test coverage detected