diff --git a/TR5Main/Scripting/GameLogicScript.cpp b/TR5Main/Scripting/GameLogicScript.cpp index 5fcc3e469..556aad59c 100644 --- a/TR5Main/Scripting/GameLogicScript.cpp +++ b/TR5Main/Scripting/GameLogicScript.cpp @@ -35,6 +35,8 @@ GameScript::GameScript(sol::state* lua) : LuaHandler{ lua } m_lua->set_function("GetInvItemCount", &GameScript::InventoryGetCount); m_lua->set_function("SetInvItemCount", &GameScript::InventorySetCount); + m_lua->set_function("GetItemByName", &GameScript::GetItemByName, this); + m_lua->set_function("GetItemByID", &GameScript::GetItemById, this); auto makeReadOnlyTable = [this](std::string const & tableName, auto const& container) { auto mt = tableName + "Meta"; @@ -65,16 +67,17 @@ GameScript::GameScript(sol::state* lua) : LuaHandler{ lua } GameScriptItemInfo::Register(m_lua); auto addLuaName = [this](std::string const& str, short num) { - return m_itemsMapName.insert(std::pair(str, num)).second; + return AddLuaName(str, num); }; auto removeLuaName = [this](std::string const& str) { - return m_itemsMapName.erase(str); + return RemoveLuaName(str); }; GameScriptItemInfo::SetNameCallbacks(addLuaName, removeLuaName); GameScriptPosition::Register(m_lua); GameScriptRotation::Register(m_lua); + GameScriptColor::Register(m_lua); m_lua->new_enum("Object", { {"LARA", ID_LARA} @@ -268,19 +271,23 @@ std::unique_ptr GameScript::GetItemById(int id) return std::unique_ptr(nullptr); } - return std::make_unique(m_itemsMapId[id]); + return std::make_unique(m_itemsMapId[id], false); } -std::unique_ptr GameScript::GetItemByName(std::string name) +std::unique_ptr GameScript::GetItemByName(std::string const & name) { if (m_itemsMapName.find(name) == m_itemsMapName.end()) { if (WarningsAsErrors) - throw "item name not found"; + { + std::string error{ "Item name not found: " }; + error += name; + throw std::runtime_error{error}; + } return std::unique_ptr(nullptr); } - return std::make_unique(m_itemsMapName[name]); + return std::make_unique(m_itemsMapName[name], false); } void GameScript::PlayAudioTrack(std::string const & trackName, bool looped) diff --git a/TR5Main/Specific/winmain.cpp b/TR5Main/Specific/winmain.cpp index ede4ad6ff..4efa2cc5e 100644 --- a/TR5Main/Specific/winmain.cpp +++ b/TR5Main/Specific/winmain.cpp @@ -229,8 +229,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine g_GameScript = new GameScript(&luaState); - luaState.set_function("GetItemByID", &GameScript::GetItemById, g_GameScript); - luaState.set_function("GetItemByName", &GameScript::GetItemByName, g_GameScript); //luaState.set_function("CreatePosition", &GameScript::CreatePosition, g_GameScript); //luaState.set_function("CreateRotation", &GameScript::CreateRotation, g_GameScript); luaState.set_function("CalculateDistance", &GameScript::CalculateDistance, g_GameScript);