| 598 | } |
| 599 | |
| 600 | bool CScriptEngine::do_file( |
| 601 | const char* caScriptName, |
| 602 | const char* caNameSpaceName) // KRodin: эта функция открывает скрипт с диска и оправляет его содержимое в функцию load_buffer, после этого походу запускает скрипт. |
| 603 | { |
| 604 | auto l_tpFileReader = FS.r_open(caScriptName); |
| 605 | if (!l_tpFileReader) |
| 606 | { |
| 607 | // заменить на ассерт? |
| 608 | Msg("!![CScriptStorage::do_file] Cannot open file [%s]", caScriptName); |
| 609 | return false; |
| 610 | } |
| 611 | |
| 612 | l_tpFileReader->skip_bom(caScriptName); |
| 613 | |
| 614 | string_path l_caLuaFileName; |
| 615 | strconcat(sizeof(l_caLuaFileName), l_caLuaFileName, "@", caScriptName); // KRodin: приводит путь к виду @f:\games\s.t.a.l.k.e.r\gamedata\scripts\***.script |
| 616 | |
| 617 | bool loaded = load_buffer(lua(), reinterpret_cast<const char*>(l_tpFileReader->pointer()), (size_t)l_tpFileReader->elapsed(), l_caLuaFileName, caNameSpaceName); |
| 618 | |
| 619 | FS.r_close(l_tpFileReader); |
| 620 | if (!loaded) |
| 621 | return false; |
| 622 | |
| 623 | int l_iErrorCode = lua_pcall(lua(), 0, 0, 0); // KRodin: без этого скрипты не работают! |
| 624 | if (l_iErrorCode) |
| 625 | { |
| 626 | print_output(lua(), caScriptName, l_iErrorCode); |
| 627 | R_ASSERT(false); // НЕ ЗАКОММЕНТИРОВАТЬ! |
| 628 | return false; |
| 629 | } |
| 630 | return true; |
| 631 | } |
| 632 | |
| 633 | bool CScriptEngine::namespace_loaded(const char* name, bool remove_from_stack) // KRodin: видимо, функция проверяет, загружен ли скрипт. |
| 634 | { |
nothing calls this directly
no test coverage detected