diff --git a/Client/core/CScreenShot.cpp b/Client/core/CScreenShot.cpp index fa7ba37aad..59e387b1f6 100644 --- a/Client/core/CScreenShot.cpp +++ b/Client/core/CScreenShot.cpp @@ -35,6 +35,9 @@ static bool ms_bIsSaving = false; static uint ms_uiWidth = 0; static uint ms_uiHeight = 0; +// whether we want to actually save photo in documents folder +static bool savePhotoInDocuments = false; + void CScreenShot::InitiateScreenShot(bool bIsCameraShot) { if (ms_bScreenShot || ms_bIsSaving || IsRateLimited(bIsCameraShot)) @@ -48,8 +51,11 @@ void CScreenShot::InitiateScreenShot(bool bIsCameraShot) if (bIsCameraShot) { - // Set the screenshot path to camera gallery path - ms_strScreenDirectoryPath = PathJoin(GetSystemPersonalPath(), "GTA San Andreas User Files", "Gallery"); + if (savePhotoInDocuments) + { + // Set the screenshot path to camera gallery path + ms_strScreenDirectoryPath = PathJoin(GetSystemPersonalPath(), "GTA San Andreas User Files", "Gallery"); + } } else { @@ -82,6 +88,13 @@ void CScreenShot::CheckForScreenShot(bool bBeforeGUI) // Update last time of taken screenshot of given type ms_lLastSaveTime[ms_bIsCameraShot] = GetTickCount64_(); + if (ms_bIsCameraShot && !savePhotoInDocuments) + { + ClearBuffer(); + ms_bScreenShot = false; + return; + } + ms_strScreenShotPath = GetScreenshotPath(); ms_uiWidth = CDirect3DData::GetSingleton().GetViewportWidth(); ms_uiHeight = CDirect3DData::GetSingleton().GetViewportHeight(); @@ -205,3 +218,8 @@ void CScreenShot::ClearBuffer() { ms_ScreenShotBuffer.Clear(); } + +void CScreenShot::SetPhotoSavingInsideDocuments(bool savePhoto) noexcept +{ + savePhotoInDocuments = savePhoto; +} diff --git a/Client/core/CScreenShot.h b/Client/core/CScreenShot.h index 07f5594ccf..e83545385a 100644 --- a/Client/core/CScreenShot.h +++ b/Client/core/CScreenShot.h @@ -19,6 +19,7 @@ class CScreenShot public: static void InitiateScreenShot(bool bIsCameraShot); static void CheckForScreenShot(bool bBeforeGUI); + static void SetPhotoSavingInsideDocuments(bool bSavePhoto) noexcept; protected: static void StartSaveThread(); diff --git a/Client/core/CSettings.cpp b/Client/core/CSettings.cpp index 6792bac450..566a374247 100644 --- a/Client/core/CSettings.cpp +++ b/Client/core/CSettings.cpp @@ -1201,6 +1201,12 @@ void CSettings::CreateGUI() m_pCachePathValue->AutoSize(); vecTemp.fY += fLineHeight; + // Enable camera photos getting saved to documents folder + m_pPhotoSavingCheckbox = reinterpret_cast(pManager->CreateCheckBox(pTabAdvanced, _("Save photos taken by camera weapon to GTA San Andreas User Files folder"), true)); + m_pPhotoSavingCheckbox->SetPosition(CVector2D(vecTemp.fX, vecTemp.fY)); + m_pPhotoSavingCheckbox->AutoSize(NULL, 20.0f); + vecTemp.fY += fLineHeight; + // Auto updater section label m_pAdvancedUpdaterLabel = reinterpret_cast(pManager->CreateLabel(pTabAdvanced, _("Auto updater"))); m_pAdvancedUpdaterLabel->SetPosition(CVector2D(vecTemp.fX - 10.0f, vecTemp.fY)); @@ -3218,6 +3224,10 @@ void CSettings::LoadData() iVar = GetApplicationSettingInt("Win8MouseFix"); m_pWin8MouseCheckBox->SetSelected(iVar != 0); + // Save camera photos inside user documents folder + CVARS_GET("photosaving", bVar); + m_pPhotoSavingCheckbox->SetSelected(bVar); + // Update build type CVARS_GET("update_build_type", iVar); if (iVar == 0 || iVar == 1) @@ -3609,6 +3619,11 @@ void CSettings::SaveData() // Windows 8 mouse fix SetApplicationSettingInt("Win8MouseFix", m_pWin8MouseCheckBox->GetSelected()); + // Save photos in documents folder + bool photoSaving = m_pPhotoSavingCheckbox->GetSelected(); + CVARS_SET("photosaving", photoSaving); + CScreenShot::SetPhotoSavingInsideDocuments(photoSaving); + // Debug setting if (CGUIListItem* pSelected = m_pDebugSettingCombo->GetSelectedItem()) { diff --git a/Client/core/CSettings.h b/Client/core/CSettings.h index 9c288557e6..91a14ca40e 100644 --- a/Client/core/CSettings.h +++ b/Client/core/CSettings.h @@ -215,6 +215,7 @@ class CSettings CGUILabel* m_pWin8Label; CGUICheckBox* m_pWin8ColorCheckBox; CGUICheckBox* m_pWin8MouseCheckBox; + CGUICheckBox* m_pPhotoSavingCheckbox; CGUILabel* m_pUpdateBuildTypeLabel; CGUIComboBox* m_pUpdateBuildTypeCombo; CGUILabel* m_pUpdateAutoInstallLabel; diff --git a/Client/core/DXHook/CProxyDirect3D9.cpp b/Client/core/DXHook/CProxyDirect3D9.cpp index d563d95a5d..bc0d5fb068 100644 --- a/Client/core/DXHook/CProxyDirect3D9.cpp +++ b/Client/core/DXHook/CProxyDirect3D9.cpp @@ -10,6 +10,11 @@ *****************************************************************************/ #include "StdInc.h" +#include +#include + +extern HINSTANCE g_hModule; + HRESULT HandleCreateDeviceResult(HRESULT hResult, IDirect3D9* pDirect3D, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface); std::vector ms_CreatedDirect3D9List; @@ -166,6 +171,27 @@ HRESULT CProxyDirect3D9::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType, HWND SetWindowTextW(hFocusWindow, MbUTF8ToUTF16("MTA: San Andreas").c_str()); #endif + // Set dark titlebar if needed + BOOL darkTitleBar = GetSystemRegistryValue((uint)HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "AppsUseLightTheme") == "\x0"; + DwmSetWindowAttribute(hFocusWindow, DWMWA_USE_IMMERSIVE_DARK_MODE, &darkTitleBar, sizeof(darkTitleBar)); + + // Update icon + if (HICON icon = LoadIcon(g_hModule, MAKEINTRESOURCE(IDI_ICON1))) + { + const auto paramIcon = reinterpret_cast(icon); + for (const WPARAM size : {ICON_SMALL, ICON_BIG}) + { + SendMessage(hFocusWindow, WM_SETICON, size, paramIcon); + } + + // Clean + DestroyIcon(icon); + } + + // Redraw, we avoid possible problems with the fact that it won't replace the icon somewhere + InvalidateRect(hFocusWindow, nullptr, TRUE); + UpdateWindow(hFocusWindow); + // Detect if second call to CreateDevice if (CreateDeviceSecondCallCheck(hResult, m_pDevice, Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface)) { diff --git a/Client/core/premake5.lua b/Client/core/premake5.lua index 0573dd6c05..49755743a2 100644 --- a/Client/core/premake5.lua +++ b/Client/core/premake5.lua @@ -46,7 +46,7 @@ project "Client Core" links { "ws2_32", "d3dx9", "Userenv", "DbgHelp", "xinput", "Imagehlp", "dxguid", "dinput8", - "strmiids", "odbc32", "odbccp32", "shlwapi", "winmm", "gdi32", "Imm32", "Psapi", + "strmiids", "odbc32", "odbccp32", "shlwapi", "winmm", "gdi32", "Imm32", "Psapi", "dwmapi", "pthread", "libpng", "jpeg", "zlib", "tinygettext", "discord-rpc", } diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index c3eafa78d6..fbb9dd98a5 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -253,7 +253,7 @@ CGameSA::CGameSA() error += ": "; error += e.what(); - MessageBoxUTF8(nullptr, error.c_str(), _("Error"), MB_ICONERROR | MB_OK); + MessageBoxUTF8(nullptr, error, _("Error"), MB_ICONERROR | MB_OK); ExitProcess(EXIT_FAILURE); } catch (const std::exception& e) @@ -1102,6 +1102,33 @@ bool CGameSA::SetBuildingPoolSize(size_t size) return status; } +void CGameSA::UnloadUnusedModels() +{ + // Unload DFF's + // CJ should not be unloaded + const std::size_t baseIdForTxd = GetBaseIDforTXD(); + for (std::size_t id = 1; id < baseIdForTxd; id++) + { + CStreamingInfo* streamingInfo = m_pStreaming->GetStreamingInfo(id); + if (streamingInfo->loadState != eModelLoadState::LOADSTATE_NOT_LOADED && streamingInfo->sizeInBlocks > 0) + { + CModelInfoSA& model = ModelInfo[id]; + if (model.GetRefCount() == 0) + model.UnloadUnused(); + }; + } + // Unload TXD + for (std::size_t id = baseIdForTxd; id < GetBaseIDforCOL(); id++) + { + CStreamingInfo* streamingInfo = m_pStreaming->GetStreamingInfo(id); + std::size_t refsCount = GetPools()->GetTxdPool().GetRefsCount(id - baseIdForTxd); + if (streamingInfo->loadState != eModelLoadState::LOADSTATE_NOT_LOADED && streamingInfo->sizeInBlocks > 0 && refsCount == 0) + { + GetStreaming()->RemoveModel(id); + } + } +} + // Ensure models have the default lod distances void CGameSA::ResetModelLodDistances() { diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 2133d7d9a5..9a5b5ccd05 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -312,6 +312,8 @@ class CGameSA : public CGame bool SetBuildingPoolSize(size_t size); + void UnloadUnusedModels(); + private: std::unique_ptr m_Pools; CPlayerInfo* m_pPlayerInfo; diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 0b5ff312b3..a41194438a 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -452,6 +452,8 @@ void CModelInfoSA::Remove() bool CModelInfoSA::UnloadUnused() { + m_pInterface = ppModelInfo[m_dwModelID]; + if (m_pInterface->usNumberOfRefs == 0 && !m_pCustomClump && !m_pCustomColModel) { pGame->GetStreaming()->RemoveModel(m_dwModelID); @@ -1094,11 +1096,6 @@ void CModelInfoSA::ModelAddRef(EModelRequestType requestType, const char* szTag) m_dwReferences++; } -int CModelInfoSA::GetRefCount() -{ - return static_cast(m_dwReferences); -} - void CModelInfoSA::RemoveRef(bool bRemoveExtraGTARef) { // Decrement the references diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 6fc7b04811..be6811b8d9 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -397,7 +397,7 @@ class CModelInfoSA : public CModelInfo static void StaticResetAlphaTransparencies(); void ModelAddRef(EModelRequestType requestType, const char* szTag); - int GetRefCount(); + int GetRefCount() const override { return static_cast(m_dwReferences); }; void RemoveRef(bool bRemoveExtraGTARef = false); bool ForceUnload(); diff --git a/Client/game_sa/CPhysicalSA.h b/Client/game_sa/CPhysicalSA.h index eb5a2a4515..a1236f371b 100644 --- a/Client/game_sa/CPhysicalSA.h +++ b/Client/game_sa/CPhysicalSA.h @@ -104,8 +104,8 @@ class CPhysicalSAInterface : public CEntitySAInterface CVector m_vecUnk; // 280 uint32 m_pad4; // 292 CPtrNodeDoubleLink* m_pControlCodeNodeLink; // 296 - float m_fLighting; // 300 - float m_fLighting2; // 304 + float m_fLighting; // 300 surface brightness + float m_fLighting2; // 304 dynamic lighting (unused, always set to 0 in the GTA code) class CShadowDataSA* m_pShadowData; // 308 CRect* GetBoundRect_(CRect* pRect); diff --git a/Client/game_sa/CPoolSAInterface.h b/Client/game_sa/CPoolSAInterface.h index 9f48bc63d3..f879775b3b 100644 --- a/Client/game_sa/CPoolSAInterface.h +++ b/Client/game_sa/CPoolSAInterface.h @@ -122,7 +122,7 @@ class CPoolSAInterface return !IsEmpty(index); } - B* GetObject(std::int32_t objectIndex) { return &m_pObjects[objectIndex]; } + B* GetObject(std::int32_t objectIndex) const { return &m_pObjects[objectIndex]; } uint GetObjectIndex(B* pObject) { return ((DWORD)pObject - (DWORD)m_pObjects) / sizeof(B); } diff --git a/Client/game_sa/CRendererSA.cpp b/Client/game_sa/CRendererSA.cpp index bad607d5ba..04face6248 100644 --- a/Client/game_sa/CRendererSA.cpp +++ b/Client/game_sa/CRendererSA.cpp @@ -15,6 +15,9 @@ #include "CMatrix.h" #include "gamesa_renderware.h" +#define SetLightColoursForPedsCarsAndObjects(fMult) ((RpLight*(__cdecl*)(float))0x735D90)(fMult) +#define SetAmbientColours() ((RpLight*(__cdecl*)())0x735D30)() + CRendererSA::CRendererSA() { } @@ -23,7 +26,7 @@ CRendererSA::~CRendererSA() { } -void CRendererSA::RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix) +void CRendererSA::RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting) { CBaseModelInfoSAInterface* pModelInfoSAInterface = pModelInfo->GetInterface(); if (!pModelInfoSAInterface) @@ -40,7 +43,10 @@ void CRendererSA::RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix) rwMatrix.up = (RwV3d&)matrix.vFront; rwMatrix.at = (RwV3d&)matrix.vUp; rwMatrix.pos = (RwV3d&)matrix.vPos; - RwFrameTransform(pFrame, &rwMatrix, rwCOMBINEREPLACE); + RwFrameTransform(pFrame, &rwMatrix, rwCOMBINEREPLACE); + + // Setup ambient light multiplier + SetLightColoursForPedsCarsAndObjects(lighting); if (pRwObject->type == RP_TYPE_ATOMIC) { @@ -52,4 +58,7 @@ void CRendererSA::RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix) RpClump* pClump = reinterpret_cast(pRwObject); RpClumpRender(pClump); } + + // Restore ambient light + SetAmbientColours(); } diff --git a/Client/game_sa/CRendererSA.h b/Client/game_sa/CRendererSA.h index e71a83665e..eb09edae72 100644 --- a/Client/game_sa/CRendererSA.h +++ b/Client/game_sa/CRendererSA.h @@ -19,5 +19,5 @@ class CRendererSA : public CRenderer CRendererSA(); ~CRendererSA(); - void RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix) override; + void RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting) override; }; diff --git a/Client/game_sa/CTxdPoolSA.cpp b/Client/game_sa/CTxdPoolSA.cpp index 248f825836..36be04fce5 100644 --- a/Client/game_sa/CTxdPoolSA.cpp +++ b/Client/game_sa/CTxdPoolSA.cpp @@ -55,3 +55,12 @@ std::uint16_t CTxdPoolSA::GetFreeTextureDictonarySlot() { return (*m_ppTxdPoolInterface)->GetFreeSlot(); } + +std::uint16_t CTxdPoolSA::GetRefsCount(std::uint16_t slot) const +{ + CTextureDictonarySAInterface* pTxd = (*m_ppTxdPoolInterface)->GetObject(slot); + if (!pTxd) + return -1; + + return pTxd->usUsagesCount; +} diff --git a/Client/game_sa/CTxdPoolSA.h b/Client/game_sa/CTxdPoolSA.h index c1f0ed8ece..daaf3a1ccb 100644 --- a/Client/game_sa/CTxdPoolSA.h +++ b/Client/game_sa/CTxdPoolSA.h @@ -25,6 +25,7 @@ class CTxdPoolSA final : public CTxdPool bool IsFreeTextureDictonarySlot(std::uint32_t uiTxdId); std::uint16_t GetFreeTextureDictonarySlot(); + std::uint16_t GetRefsCount(std::uint16_t slot) const; private: CPoolSAInterface** m_ppTxdPoolInterface; diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index 99eb78de34..116fbbd8ca 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -6764,6 +6764,8 @@ void CClientGame::RestreamWorld() g_pGame->GetStreaming()->RemoveBigBuildings(); g_pGame->GetStreaming()->ReinitStreaming(); + + g_pGame->UnloadUnusedModels(); } void CClientGame::ReinitMarkers() diff --git a/Client/mods/deathmatch/logic/CModelRenderer.cpp b/Client/mods/deathmatch/logic/CModelRenderer.cpp index 2f06c836ec..ed05fa4ae4 100644 --- a/Client/mods/deathmatch/logic/CModelRenderer.cpp +++ b/Client/mods/deathmatch/logic/CModelRenderer.cpp @@ -13,14 +13,14 @@ #include "game\CRenderer.h" #include "game\CVisibilityPlugins.h" -bool CModelRenderer::EnqueueModel(CModelInfo* pModelInfo, const CMatrix& matrix) +bool CModelRenderer::EnqueueModel(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting) { if (g_pCore->IsWindowMinimized()) return false; if (pModelInfo && pModelInfo->IsLoaded()) { - m_Queue.emplace_back(pModelInfo, matrix); + m_Queue.emplace_back(pModelInfo, matrix, lighting); return true; } @@ -54,7 +54,7 @@ void CModelRenderer::Render() for (auto& modelDesc : m_Queue) { if (modelDesc.pModelInfo->IsLoaded() && !modelDesc.pModelInfo->GetIdeFlag(eModelIdeFlag::DRAW_LAST)) - pRenderer->RenderModel(modelDesc.pModelInfo, modelDesc.matrix); + pRenderer->RenderModel(modelDesc.pModelInfo, modelDesc.matrix, modelDesc.lighting); } m_Queue.clear(); @@ -68,5 +68,5 @@ void CModelRenderer::RenderEntity(SModelToRender* modelDesc, float distance) CRenderer* pRenderer = g_pGame->GetRenderer(); assert(pRenderer); - pRenderer->RenderModel(modelDesc->pModelInfo, modelDesc->matrix); + pRenderer->RenderModel(modelDesc->pModelInfo, modelDesc->matrix, modelDesc->lighting); } diff --git a/Client/mods/deathmatch/logic/CModelRenderer.h b/Client/mods/deathmatch/logic/CModelRenderer.h index d923db6c7f..a2dba3030b 100644 --- a/Client/mods/deathmatch/logic/CModelRenderer.h +++ b/Client/mods/deathmatch/logic/CModelRenderer.h @@ -18,15 +18,17 @@ class CModelRenderer final { CModelInfo* pModelInfo; CMatrix matrix; + float lighting; - SModelToRender(CModelInfo* pModelInfo, const CMatrix& matrix) : + SModelToRender(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting = 0.0f) : pModelInfo(pModelInfo), - matrix(matrix) + matrix(matrix), + lighting(lighting) { } }; - bool EnqueueModel(CModelInfo* pModelInfo, const CMatrix& matrix); + bool EnqueueModel(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting); void Update(); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.cpp index f54378944d..adc83a1224 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.cpp @@ -2123,7 +2123,7 @@ bool CLuaDrawingDefs::DxDrawWiredSphere(lua_State* const luaVM, const CVector po return true; } -bool CLuaDrawingDefs::DxDrawModel3D(std::uint32_t modelID, CVector position, CVector rotation, const std::optional scale) +bool CLuaDrawingDefs::DxDrawModel3D(std::uint32_t modelID, CVector position, CVector rotation, const std::optional scale, const std::optional lighting) { CModelInfo* pModelInfo = g_pGame->GetModelInfo(modelID); if (!pModelInfo) @@ -2138,5 +2138,5 @@ bool CLuaDrawingDefs::DxDrawModel3D(std::uint32_t modelID, CVector position, CVe ConvertDegreesToRadians(rotation); return g_pClientGame->GetModelRenderer()->EnqueueModel(pModelInfo, - CMatrix{position, rotation, scale.value_or(CVector{1.0f, 1.0f, 1.0f})}); + CMatrix{position, rotation, scale.value_or(CVector{1.0f, 1.0f, 1.0f})}, lighting.value_or(0.0f)); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.h index 55dc3adda1..d01d6ec214 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.h @@ -82,7 +82,7 @@ class CLuaDrawingDefs : public CLuaDefs static bool DxDrawWiredSphere(lua_State* const luaVM, const CVector position, const float radius, const std::optional color, const std::optional lineWidth, const std::optional iterations); - static bool DxDrawModel3D(std::uint32_t modelID, CVector position, CVector rotation, const std::optional scale); + static bool DxDrawModel3D(std::uint32_t modelID, CVector position, CVector rotation, const std::optional scale, const std::optional lighting); private: static void AddDxMaterialClass(lua_State* luaVM); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index e88f8f6751..ff4f9b3abb 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -99,6 +99,7 @@ void CLuaElementDefs::LoadFunctions() {"setElementFrozen", SetElementFrozen}, {"setLowLODElement", ArgumentParser}, {"setElementCallPropagationEnabled", SetElementCallPropagationEnabled}, + {"setElementLighting", ArgumentParser}, }; // Add functions @@ -191,6 +192,7 @@ void CLuaElementDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "setLowLOD", "setLowLODElement"); lua_classfunction(luaVM, "setCallPropagationEnabled", "setElementCallPropagationEnabled"); lua_classfunction(luaVM, "setStreamable", "setElementStreamable"); + lua_classfunction(luaVM, "setLighting", "setElementLighting"); lua_classvariable(luaVM, "callPropagationEnabled", "setElementCallPropagationEnabled", "isElementCallPropagationEnabled"); lua_classvariable(luaVM, "waitingForGroundToLoad", NULL, "isElementWaitingForGroundToLoad"); @@ -225,6 +227,7 @@ void CLuaElementDefs::AddClass(lua_State* luaVM) lua_classvariable(luaVM, "velocity", SetElementVelocity, OOP_GetElementVelocity); lua_classvariable(luaVM, "angularVelocity", SetElementAngularVelocity, OOP_GetElementTurnVelocity); lua_classvariable(luaVM, "isElement", NULL, "isElement"); + lua_classvariable(luaVM, "lighting", "setElementLighting", "getElementLighting"); // TODO: Support element data: player.data["age"] = 1337; <=> setElementData(player, "age", 1337) lua_registerclass(luaVM, "Element"); @@ -1340,6 +1343,7 @@ std::variant CLuaElementDefs::GetElementLighting(CClientEntity* ent break; } case CCLIENTOBJECT: + case CCLIENTWEAPON: { CObject* object = static_cast(entity)->GetGameObject(); if (object) @@ -2604,3 +2608,41 @@ int CLuaElementDefs::IsElementWaitingForGroundToLoad(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } + +bool CLuaElementDefs::SetElementLighting(CClientEntity* entity, float lighting) +{ + switch (entity->GetType()) + { + case CCLIENTPLAYER: + case CCLIENTPED: + { + auto* ped = static_cast(entity)->GetGamePlayer(); + if (!ped) + return false; + + ped->SetLighting(lighting); + return true; + } + case CCLIENTVEHICLE: + { + auto* vehicle = static_cast(entity)->GetGameVehicle(); + if (!vehicle) + return false; + + vehicle->SetLighting(lighting); + return true; + } + case CCLIENTOBJECT: + case CCLIENTWEAPON: + { + auto* object = static_cast(entity)->GetGameObject(); + if (!object) + return false; + + object->SetLighting(lighting); + return true; + } + } + + return false; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 40f93761e4..87b8c42f64 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -99,4 +99,5 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(SetElementFrozen); static bool SetLowLodElement(lua_State* luaVM, CClientEntity* pEntity, std::optional pLowLodEntity); LUA_DECLARE(SetElementCallPropagationEnabled); + static bool SetElementLighting(CClientEntity* entity, float lighting); }; diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 7af3738c28..e9ec1ca94b 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -107,7 +107,9 @@ void CLuaVehicleDefs::LoadFunctions() {"setVehicleDoorsUndamageable", SetVehicleDoorsUndamageable}, {"setVehicleSirensOn", SetVehicleSirensOn}, {"addVehicleUpgrade", AddVehicleUpgrade}, + {"addVehicleSirens", ArgumentParser}, {"removeVehicleUpgrade", RemoveVehicleUpgrade}, + {"removeVehicleSirens", ArgumentParser}, {"setVehicleDoorState", SetVehicleDoorState}, {"setVehicleWheelStates", SetVehicleWheelStates}, {"setVehicleLightState", SetVehicleLightState}, @@ -4363,6 +4365,30 @@ bool CLuaVehicleDefs::SpawnVehicleFlyingComponent(CClientVehicle* const vehicle, return vehicle->SpawnFlyingComponent(partNodeIndex, collisionType, removalTime.value_or(-1)); } +bool CLuaVehicleDefs::AddVehicleSirens(CClientVehicle* vehicle, std::uint8_t sirenType, std::uint8_t sirenCount, std::optional enable360, std::optional enableLOSCheck, std::optional enableRandomiser, std::optional enableSilent) noexcept +{ + eClientVehicleType vehicleType = vehicle->GetVehicleType(); + + if (vehicleType != CLIENTVEHICLE_CAR && vehicleType != CLIENTVEHICLE_MONSTERTRUCK && vehicleType != CLIENTVEHICLE_QUADBIKE) + return false; + + if (sirenType < 1 || sirenType > 6) + return false; + + if (sirenCount < 0 || sirenCount > SIREN_COUNT_MAX) + return false; + + vehicle->GiveVehicleSirens(sirenType, sirenCount); + vehicle->SetVehicleFlags(enable360.value_or(false), enableRandomiser.value_or(true), enableLOSCheck.value_or(true), enableSilent.value_or(false)); + return true; +} + +bool CLuaVehicleDefs::RemoveVehicleSirens(CClientVehicle* vehicle) noexcept +{ + vehicle->RemoveVehicleSirens(); + return true; +} + bool CLuaVehicleDefs::SetSmokeTrailEnabled(CClientVehicle* vehicle, bool state) { std::uint16_t model = vehicle->GetModel(); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index cfae84faba..ab1feb1821 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -169,6 +169,9 @@ class CLuaVehicleDefs : public CLuaDefs static bool SetVehicleRotorState(CClientVehicle* const vehicle, bool state, std::optional stopRotor) noexcept; static bool GetVehicleRotorState(CClientVehicle* const vehicle) noexcept; + static bool AddVehicleSirens(CClientVehicle* vehicle, std::uint8_t sirenType, std::uint8_t sirenCount, std::optional enable360, std::optional enableLOSCheck, std::optional enableRandomiser, std::optional enableSilent) noexcept; + static bool RemoveVehicleSirens(CClientVehicle* vehicle) noexcept; + // Components LUA_DECLARE(SetVehicleComponentPosition); LUA_DECLARE_OOP(GetVehicleComponentPosition); diff --git a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp index 7915c2c7d4..50d5028caf 100644 --- a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp +++ b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp @@ -53,6 +53,7 @@ void CVehicleRPCs::LoadFunctions() AddHandler(SET_VEHICLE_SIRENS, SetVehicleSirens, "setVehicleSirens"); AddHandler(SET_VEHICLE_PLATE_TEXT, SetVehiclePlateText, "setVehiclePlateText"); AddHandler(SPAWN_VEHICLE_FLYING_COMPONENT, SpawnVehicleFlyingComponent, "spawnVehicleFlyingComponent"); + AddHandler(SET_VEHICLE_NITRO_ACTIVATED, SetVehicleNitroActivated, "SetVehicleNitroActivated"); } void CVehicleRPCs::DestroyAllVehicles(NetBitStreamInterface& bitStream) @@ -667,3 +668,26 @@ void CVehicleRPCs::SpawnVehicleFlyingComponent(CClientEntity* const sourceEntity if (bitStream.Read(nodeIndex) && bitStream.Read(collisionType) && bitStream.Read(removalTime)) vehicle->SpawnFlyingComponent(static_cast(nodeIndex), static_cast(collisionType), removalTime); } + +void CVehicleRPCs::SetVehicleNitroActivated(CClientEntity* pSourceEntity, NetBitStreamInterface& bitStream) +{ + bool state = bitStream.ReadBit(); + + CClientVehicle* vehicle = m_pVehicleManager->Get(pSourceEntity->GetID()); + if (!vehicle) + return; + + if (!vehicle->IsNitroInstalled()) + return; + + // If nitro level < 0, nitro is activated. (until nitro level reaches -1, at that point it will become 0 and increase instead of decrease) + if ((vehicle->GetNitroLevel() < 0.0f) == state) + return; + + // Apply nitro level change + if (state) + vehicle->SetNitroLevel(vehicle->GetNitroLevel() - 1.0001f); + else + vehicle->SetNitroLevel(vehicle->GetNitroLevel() + 1.0001f); +} + diff --git a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h index 6d4e9f5d19..4107c03f51 100644 --- a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h +++ b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h @@ -58,4 +58,5 @@ class CVehicleRPCs : public CRPCFunctions DECLARE_ELEMENT_RPC(SetVehicleSirens); DECLARE_ELEMENT_RPC(SetVehiclePlateText); DECLARE_ELEMENT_RPC(SpawnVehicleFlyingComponent); + DECLARE_ELEMENT_RPC(SetVehicleNitroActivated); }; diff --git a/Client/multiplayer_sa/multiplayer_keysync.cpp b/Client/multiplayer_sa/multiplayer_keysync.cpp index 5807350dbb..704020a18b 100644 --- a/Client/multiplayer_sa/multiplayer_keysync.cpp +++ b/Client/multiplayer_sa/multiplayer_keysync.cpp @@ -51,7 +51,6 @@ VOID InitKeysyncHooks() HookInstallMethod(VTBL_CBoat__ProcessControl, (DWORD)HOOK_CBoat__ProcessControl); HookInstallMethod(VTBL_CBike__ProcessControl, (DWORD)HOOK_CBike__ProcessControl); HookInstallMethod(VTBL_CHeli__ProcessControl, (DWORD)HOOK_CHeli__ProcessControl); - HookInstallMethod(VTBL_CHeli__ProcessControl, (DWORD)HOOK_CHeli__ProcessControl); // not strictly for keysync, to make CPlayerPed::GetPlayerInfoForThisPlayerPed always return the local playerinfo // 00609FF2 EB 1F JMP SHORT gta_sa_u.0060A013 diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index 51f94c9d77..b35e5e858f 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -278,4 +278,5 @@ class __declspec(novtable) CGame virtual bool SetBuildingPoolSize(size_t size) = 0; + virtual void UnloadUnusedModels() = 0; }; diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index c578be1990..785fe81b40 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -181,7 +181,7 @@ class CModelInfo virtual void ModelAddRef(EModelRequestType requestType, const char* szTag /* = NULL*/) = 0; virtual void RemoveRef(bool bRemoveExtraGTARef = false) = 0; - virtual int GetRefCount() = 0; + virtual int GetRefCount() const = 0; virtual bool ForceUnload() = 0; virtual bool UnloadUnused() = 0; virtual void DeallocateModel() = 0; diff --git a/Client/sdk/game/CRenderer.h b/Client/sdk/game/CRenderer.h index 65d6a8bdca..19a9465224 100644 --- a/Client/sdk/game/CRenderer.h +++ b/Client/sdk/game/CRenderer.h @@ -19,5 +19,5 @@ class CRenderer public: virtual ~CRenderer() {} - virtual void RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix) = 0; + virtual void RenderModel(CModelInfo* pModelInfo, const CMatrix& matrix, float lighting) = 0; }; diff --git a/Client/sdk/game/CTxdPool.h b/Client/sdk/game/CTxdPool.h index 1e4ff3493b..f186d8dff9 100644 --- a/Client/sdk/game/CTxdPool.h +++ b/Client/sdk/game/CTxdPool.h @@ -19,4 +19,5 @@ class CTxdPool virtual bool IsFreeTextureDictonarySlot(std::uint32_t uiTxdID) = 0; virtual std::uint16_t GetFreeTextureDictonarySlot() = 0; + virtual std::uint16_t GetRefsCount(std::uint16_t slot) const = 0; }; diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 6e1c06d124..c32ce504b6 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -4938,40 +4938,38 @@ bool CStaticFunctionDefinitions::GiveVehicleSirens(CVehicle* pVehicle, unsigned assert(pVehicle); eVehicleType vehicleType = CVehicleManager::GetVehicleType(pVehicle->GetModel()); // Won't work with below. - if (vehicleType != VEHICLE_PLANE && vehicleType != VEHICLE_BOAT && vehicleType != VEHICLE_TRAILER && vehicleType != VEHICLE_HELI && - vehicleType != VEHICLE_BIKE && vehicleType != VEHICLE_BMX) - { - if (ucSirenType >= 1 && ucSirenType <= 6) - { - if (ucSirenCount <= SIREN_COUNT_MAX) - { - pVehicle->m_tSirenBeaconInfo.m_bOverrideSirens = true; + if (vehicleType != VEHICLE_CAR && vehicleType != VEHICLE_MONSTERTRUCK && vehicleType != VEHICLE_QUADBIKE) + return false; - pVehicle->m_tSirenBeaconInfo.m_ucSirenCount = ucSirenCount; - pVehicle->m_tSirenBeaconInfo.m_ucSirenType = ucSirenType; + if (ucSirenType < 1 || ucSirenType > 6) + return false; - pVehicle->m_tSirenBeaconInfo.m_b360Flag = tSirenInfo.m_b360Flag; - pVehicle->m_tSirenBeaconInfo.m_bDoLOSCheck = tSirenInfo.m_bDoLOSCheck; - pVehicle->m_tSirenBeaconInfo.m_bUseRandomiser = tSirenInfo.m_bUseRandomiser; - pVehicle->m_tSirenBeaconInfo.m_bSirenSilent = tSirenInfo.m_bSirenSilent; + if (ucSirenCount > SIREN_COUNT_MAX) + return false; - SVehicleSirenAddSync tSirenSync; - tSirenSync.data.m_bOverrideSirens = pVehicle->m_tSirenBeaconInfo.m_bOverrideSirens; - tSirenSync.data.m_b360Flag = pVehicle->m_tSirenBeaconInfo.m_b360Flag; - tSirenSync.data.m_bDoLOSCheck = pVehicle->m_tSirenBeaconInfo.m_bDoLOSCheck; - tSirenSync.data.m_bEnableSilent = pVehicle->m_tSirenBeaconInfo.m_bSirenSilent; - tSirenSync.data.m_bUseRandomiser = pVehicle->m_tSirenBeaconInfo.m_bUseRandomiser; - tSirenSync.data.m_ucSirenCount = pVehicle->m_tSirenBeaconInfo.m_ucSirenCount; - tSirenSync.data.m_ucSirenType = pVehicle->m_tSirenBeaconInfo.m_ucSirenType; + pVehicle->m_tSirenBeaconInfo.m_bOverrideSirens = true; - CBitStream BitStream; - BitStream.pBitStream->Write(&tSirenSync); - m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(pVehicle, GIVE_VEHICLE_SIRENS, *BitStream.pBitStream)); - return true; - } - } - } - return false; + pVehicle->m_tSirenBeaconInfo.m_ucSirenCount = ucSirenCount; + pVehicle->m_tSirenBeaconInfo.m_ucSirenType = ucSirenType; + + pVehicle->m_tSirenBeaconInfo.m_b360Flag = tSirenInfo.m_b360Flag; + pVehicle->m_tSirenBeaconInfo.m_bDoLOSCheck = tSirenInfo.m_bDoLOSCheck; + pVehicle->m_tSirenBeaconInfo.m_bUseRandomiser = tSirenInfo.m_bUseRandomiser; + pVehicle->m_tSirenBeaconInfo.m_bSirenSilent = tSirenInfo.m_bSirenSilent; + + SVehicleSirenAddSync tSirenSync; + tSirenSync.data.m_bOverrideSirens = pVehicle->m_tSirenBeaconInfo.m_bOverrideSirens; + tSirenSync.data.m_b360Flag = pVehicle->m_tSirenBeaconInfo.m_b360Flag; + tSirenSync.data.m_bDoLOSCheck = pVehicle->m_tSirenBeaconInfo.m_bDoLOSCheck; + tSirenSync.data.m_bEnableSilent = pVehicle->m_tSirenBeaconInfo.m_bSirenSilent; + tSirenSync.data.m_bUseRandomiser = pVehicle->m_tSirenBeaconInfo.m_bUseRandomiser; + tSirenSync.data.m_ucSirenCount = pVehicle->m_tSirenBeaconInfo.m_ucSirenCount; + tSirenSync.data.m_ucSirenType = pVehicle->m_tSirenBeaconInfo.m_ucSirenType; + + CBitStream BitStream; + BitStream.pBitStream->Write(&tSirenSync); + m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(pVehicle, GIVE_VEHICLE_SIRENS, *BitStream.pBitStream)); + return true; } bool CStaticFunctionDefinitions::SetVehicleSirens(CVehicle* pVehicle, unsigned char ucSirenID, SSirenInfo tSirenInfo) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index d34d8fe579..55ab0e0631 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -127,6 +127,7 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehicleSirens", GetVehicleSirens}, {"getVehicleSirenParams", GetVehicleSirenParams}, {"setVehiclePlateText", SetVehiclePlateText}, + {"setVehicleNitroActivated", ArgumentParser}, }; // Add functions @@ -3046,3 +3047,12 @@ bool CLuaVehicleDefs::SpawnVehicleFlyingComponent(CVehicle* const vehicle, std:: return CStaticFunctionDefinitions::SpawnVehicleFlyingComponent(vehicle, nodeIndex, static_cast(collisionType), removalTime.value_or(-1)); } + +bool CLuaVehicleDefs::SetVehicleNitroActivated(CVehicle* vehicle, bool state) noexcept +{ + CBitStream BitStream; + BitStream.pBitStream->WriteBit(state); + + m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(vehicle, SET_VEHICLE_NITRO_ACTIVATED, *BitStream.pBitStream)); + return true; +} \ No newline at end of file diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index b349736113..11b23691dc 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -125,6 +125,7 @@ class CLuaVehicleDefs : public CLuaDefs LUA_DECLARE(GetVehicleSirens); LUA_DECLARE(GetVehicleSirenParams); LUA_DECLARE(SetVehiclePlateText); - + static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime); + static bool SetVehicleNitroActivated(CVehicle* vehicle, bool state) noexcept; }; diff --git a/Shared/data/MTA San Andreas/MTA/locale/en_US/client.pot b/Shared/data/MTA San Andreas/MTA/locale/en_US/client.pot index bb5c84bc7a..e9486ec70a 100644 --- a/Shared/data/MTA San Andreas/MTA/locale/en_US/client.pot +++ b/Shared/data/MTA San Andreas/MTA/locale/en_US/client.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: MTA San Andreas 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-23 15:13+0000\n" +"POT-Creation-Date: 2024-12-30 16:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -160,7 +160,7 @@ msgstr "" #: Client/mods/deathmatch/logic/CResource.cpp:375 #: Client/mods/deathmatch/logic/CClientGame.cpp:1095 Client/core/CCore.cpp:674 -#: Client/core/CSettings.cpp:3510 +#: Client/core/CSettings.cpp:3520 msgid "In-game" msgstr "" @@ -275,7 +275,7 @@ msgstr "" #: Client/mods/deathmatch/logic/CClientGame.cpp:539 #: Client/core/CMainMenu.cpp:304 Client/core/CCore.cpp:674 -#: Client/core/CSettings.cpp:3506 +#: Client/core/CSettings.cpp:3516 msgid "Main menu" msgstr "" @@ -300,9 +300,9 @@ msgstr "" #: Client/loader/MainFunctions.cpp:269 Client/loader/MainFunctions.cpp:846 #: Client/loader/CInstallManager.cpp:552 Client/loader/CInstallManager.cpp:561 #: Client/core/CGUI.cpp:93 Client/core/CCore.cpp:1279 -#: Client/core/CCore.cpp:1292 Client/core/CSettings.cpp:2966 -#: Client/core/CSettings.cpp:4204 Client/core/CSettings.cpp:4232 -#: Client/core/CSettings.cpp:4802 Client/core/CConnectManager.cpp:80 +#: Client/core/CCore.cpp:1292 Client/core/CSettings.cpp:2972 +#: Client/core/CSettings.cpp:4219 Client/core/CSettings.cpp:4247 +#: Client/core/CSettings.cpp:4817 Client/core/CConnectManager.cpp:80 #: Client/core/CConnectManager.cpp:111 Client/core/CConnectManager.cpp:127 #: Client/core/CConnectManager.cpp:265 Client/core/CConnectManager.cpp:323 #: Client/core/CConnectManager.cpp:406 Client/core/CConnectManager.cpp:413 @@ -706,7 +706,7 @@ msgstr "" #. * #: Client/mods/deathmatch/logic/CLocalServer.cpp:51 #: Client/core/CSettings.cpp:458 Client/core/CSettings.cpp:917 -#: Client/core/CSettings.cpp:2043 +#: Client/core/CSettings.cpp:2049 msgid "General" msgstr "" @@ -762,7 +762,7 @@ msgstr "" #: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/loader/Dialogs.cpp:136 #: Client/core/CVersionUpdater.cpp:1790 Client/core/CVersionUpdater.cpp:1806 #: Client/core/CVersionUpdater.cpp:1841 Client/core/CSettings.cpp:132 -#: Client/core/CSettings.cpp:4822 +#: Client/core/CSettings.cpp:4837 msgid "Cancel" msgstr "" @@ -813,7 +813,7 @@ msgstr "" #: Client/core/CVersionUpdater.cpp:1956 Client/core/CVersionUpdater.cpp:1968 #: Client/core/CVersionUpdater.cpp:2120 Client/core/CVersionUpdater.cpp:2129 #: Client/core/CVersionUpdater.cpp:2138 Client/core/CVersionUpdater.cpp:2152 -#: Client/core/CSettings.cpp:127 Client/core/CSettings.cpp:4823 +#: Client/core/CSettings.cpp:127 Client/core/CSettings.cpp:4838 msgid "OK" msgstr "" @@ -827,9 +827,9 @@ msgstr "" #: Client/core/CVersionUpdater.cpp:1572 Client/core/CVersionUpdater.cpp:1590 #: Client/core/CVersionUpdater.cpp:1859 Client/core/CVersionUpdater.cpp:1878 #: Client/core/CQuestionBox.cpp:195 Client/core/CMainMenu.cpp:1196 -#: Client/core/CSettings.cpp:1407 Client/core/CSettings.cpp:1431 -#: Client/core/CSettings.cpp:4527 Client/core/CSettings.cpp:4601 -#: Client/core/CSettings.cpp:4631 Client/core/CSettings.cpp:4680 +#: Client/core/CSettings.cpp:1413 Client/core/CSettings.cpp:1437 +#: Client/core/CSettings.cpp:4542 Client/core/CSettings.cpp:4616 +#: Client/core/CSettings.cpp:4646 Client/core/CSettings.cpp:4695 #: Client/core/ServerBrowser/CServerInfo.cpp:481 msgid "Yes" msgstr "" @@ -965,10 +965,10 @@ msgstr "" #: Client/loader/Dialogs.cpp:132 Client/core/CVersionUpdater.cpp:1571 #: Client/core/CVersionUpdater.cpp:1589 Client/core/CVersionUpdater.cpp:1858 #: Client/core/CVersionUpdater.cpp:1877 Client/core/CQuestionBox.cpp:194 -#: Client/core/CMainMenu.cpp:1195 Client/core/CSettings.cpp:1406 -#: Client/core/CSettings.cpp:1430 Client/core/CSettings.cpp:4526 -#: Client/core/CSettings.cpp:4600 Client/core/CSettings.cpp:4630 -#: Client/core/CSettings.cpp:4679 Client/core/ServerBrowser/CServerInfo.cpp:481 +#: Client/core/CMainMenu.cpp:1195 Client/core/CSettings.cpp:1412 +#: Client/core/CSettings.cpp:1436 Client/core/CSettings.cpp:4541 +#: Client/core/CSettings.cpp:4615 Client/core/CSettings.cpp:4645 +#: Client/core/CSettings.cpp:4694 Client/core/ServerBrowser/CServerInfo.cpp:481 msgid "No" msgstr "" @@ -1188,7 +1188,7 @@ msgid "Fullscreen mode:" msgstr "" #: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:683 -#: Client/core/CSettings.cpp:1633 +#: Client/core/CSettings.cpp:1639 msgid "Borderless window" msgstr "" @@ -1569,7 +1569,7 @@ msgstr "" msgid " - Unknown problem in _DialogUpdateResult" msgstr "" -#: Client/core/CVersionUpdater.cpp:2081 Client/core/CSettings.cpp:4628 +#: Client/core/CVersionUpdater.cpp:2081 Client/core/CSettings.cpp:4643 msgid "CUSTOMIZED GTA:SA FILES" msgstr "" @@ -1622,13 +1622,13 @@ msgstr "" msgid "Backwards" msgstr "" -#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2265 -#: Client/core/CSettings.cpp:2293 +#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2271 +#: Client/core/CSettings.cpp:2299 msgid "Left" msgstr "" -#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2267 -#: Client/core/CSettings.cpp:2294 +#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2273 +#: Client/core/CSettings.cpp:2300 msgid "Right" msgstr "" @@ -1784,16 +1784,16 @@ msgstr "" msgid "Group control backwards" msgstr "" -#: Client/core/CScreenShot.cpp:104 +#: Client/core/CScreenShot.cpp:117 #, c-format msgid "Screenshot got %d bytes, but expected %d" msgstr "" -#: Client/core/CScreenShot.cpp:110 +#: Client/core/CScreenShot.cpp:123 msgid "Screenshot failed" msgstr "" -#: Client/core/CScreenShot.cpp:160 +#: Client/core/CScreenShot.cpp:173 #, c-format msgid "Screenshot taken: '%s'" msgstr "" @@ -2276,15 +2276,15 @@ msgstr "" msgid "Usertrack options" msgstr "" -#: Client/core/CSettings.cpp:589 Client/core/CSettings.cpp:3112 +#: Client/core/CSettings.cpp:589 Client/core/CSettings.cpp:3118 msgid "Radio" msgstr "" -#: Client/core/CSettings.cpp:590 Client/core/CSettings.cpp:3114 +#: Client/core/CSettings.cpp:590 Client/core/CSettings.cpp:3120 msgid "Random" msgstr "" -#: Client/core/CSettings.cpp:591 Client/core/CSettings.cpp:3116 +#: Client/core/CSettings.cpp:591 Client/core/CSettings.cpp:3122 msgid "Sequential" msgstr "" @@ -2359,11 +2359,11 @@ msgstr "" msgid "DPI aware" msgstr "" -#: Client/core/CSettings.cpp:682 Client/core/CSettings.cpp:1631 +#: Client/core/CSettings.cpp:682 Client/core/CSettings.cpp:1637 msgid "Standard" msgstr "" -#: Client/core/CSettings.cpp:684 Client/core/CSettings.cpp:1635 +#: Client/core/CSettings.cpp:684 Client/core/CSettings.cpp:1641 msgid "Borderless keep res" msgstr "" @@ -2371,57 +2371,57 @@ msgstr "" msgid "Mip Mapping" msgstr "" -#: Client/core/CSettings.cpp:756 Client/core/CSettings.cpp:1535 +#: Client/core/CSettings.cpp:756 Client/core/CSettings.cpp:1541 msgid "Low" msgstr "" -#: Client/core/CSettings.cpp:757 Client/core/CSettings.cpp:1537 +#: Client/core/CSettings.cpp:757 Client/core/CSettings.cpp:1543 msgid "Medium" msgstr "" #: Client/core/CSettings.cpp:758 Client/core/CSettings.cpp:1104 -#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3170 +#: Client/core/CSettings.cpp:1545 Client/core/CSettings.cpp:3176 msgid "High" msgstr "" -#: Client/core/CSettings.cpp:759 Client/core/CSettings.cpp:1541 +#: Client/core/CSettings.cpp:759 Client/core/CSettings.cpp:1547 msgid "Very high" msgstr "" #: Client/core/CSettings.cpp:774 Client/core/CSettings.cpp:797 #: Client/core/CSettings.cpp:1035 Client/core/CSettings.cpp:1089 -#: Client/core/CSettings.cpp:1219 Client/core/CSettings.cpp:1545 -#: Client/core/CSettings.cpp:3177 Client/core/CSettings.cpp:3209 -#: Client/core/CSettings.cpp:3231 Client/core/CSettings.cpp:4272 +#: Client/core/CSettings.cpp:1225 Client/core/CSettings.cpp:1551 +#: Client/core/CSettings.cpp:3183 Client/core/CSettings.cpp:3215 +#: Client/core/CSettings.cpp:3241 Client/core/CSettings.cpp:4287 msgid "Off" msgstr "" -#: Client/core/CSettings.cpp:798 Client/core/CSettings.cpp:1547 +#: Client/core/CSettings.cpp:798 Client/core/CSettings.cpp:1553 msgid "1x" msgstr "" -#: Client/core/CSettings.cpp:799 Client/core/CSettings.cpp:1549 +#: Client/core/CSettings.cpp:799 Client/core/CSettings.cpp:1555 msgid "2x" msgstr "" -#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1551 +#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1557 msgid "3x" msgstr "" #: Client/core/CSettings.cpp:813 Client/core/CSettings.cpp:1037 -#: Client/core/CSettings.cpp:1557 Client/core/CSettings.cpp:3179 +#: Client/core/CSettings.cpp:1563 Client/core/CSettings.cpp:3185 msgid "Auto" msgstr "" -#: Client/core/CSettings.cpp:814 Client/core/CSettings.cpp:1559 +#: Client/core/CSettings.cpp:814 Client/core/CSettings.cpp:1565 msgid "4:3" msgstr "" -#: Client/core/CSettings.cpp:815 Client/core/CSettings.cpp:1561 +#: Client/core/CSettings.cpp:815 Client/core/CSettings.cpp:1567 msgid "16:10" msgstr "" -#: Client/core/CSettings.cpp:816 Client/core/CSettings.cpp:1563 +#: Client/core/CSettings.cpp:816 Client/core/CSettings.cpp:1569 msgid "16:9" msgstr "" @@ -2521,91 +2521,91 @@ msgstr "" #. Fast clothes loading #: Client/core/CSettings.cpp:1020 Client/core/CSettings.cpp:1028 -#: Client/core/CSettings.cpp:4841 +#: Client/core/CSettings.cpp:4856 msgid "Fast CJ clothes loading:" msgstr "" #. Browser scan speed #: Client/core/CSettings.cpp:1020 Client/core/CSettings.cpp:1042 -#: Client/core/CSettings.cpp:4843 +#: Client/core/CSettings.cpp:4858 msgid "Browser speed:" msgstr "" #. Single download #: Client/core/CSettings.cpp:1020 Client/core/CSettings.cpp:1056 -#: Client/core/CSettings.cpp:4845 +#: Client/core/CSettings.cpp:4860 msgid "Single connection:" msgstr "" #. Packet tag #: Client/core/CSettings.cpp:1020 Client/core/CSettings.cpp:1069 -#: Client/core/CSettings.cpp:4847 +#: Client/core/CSettings.cpp:4862 msgid "Packet tag:" msgstr "" #. Progress animation #: Client/core/CSettings.cpp:1021 Client/core/CSettings.cpp:1082 -#: Client/core/CSettings.cpp:4849 +#: Client/core/CSettings.cpp:4864 msgid "Progress animation:" msgstr "" #. Process priority #: Client/core/CSettings.cpp:1021 Client/core/CSettings.cpp:1095 -#: Client/core/CSettings.cpp:4839 +#: Client/core/CSettings.cpp:4854 msgid "Process priority:" msgstr "" #. Debug setting #: Client/core/CSettings.cpp:1021 Client/core/CSettings.cpp:1109 -#: Client/core/CSettings.cpp:4851 +#: Client/core/CSettings.cpp:4866 msgid "Debug setting:" msgstr "" #. Streaming memory #: Client/core/CSettings.cpp:1022 Client/core/CSettings.cpp:1132 -#: Client/core/CSettings.cpp:4853 +#: Client/core/CSettings.cpp:4868 msgid "Streaming memory:" msgstr "" #. Update build type -#: Client/core/CSettings.cpp:1022 Client/core/CSettings.cpp:1233 +#: Client/core/CSettings.cpp:1022 Client/core/CSettings.cpp:1239 msgid "Update build type:" msgstr "" #. UpdateAutoInstall -#: Client/core/CSettings.cpp:1022 Client/core/CSettings.cpp:1212 +#: Client/core/CSettings.cpp:1022 Client/core/CSettings.cpp:1218 msgid "Install important updates:" msgstr "" #: Client/core/CSettings.cpp:1036 Client/core/CSettings.cpp:1064 -#: Client/core/CSettings.cpp:1077 Client/core/CSettings.cpp:3181 -#: Client/core/CSettings.cpp:3197 Client/core/CSettings.cpp:3204 +#: Client/core/CSettings.cpp:1077 Client/core/CSettings.cpp:3187 +#: Client/core/CSettings.cpp:3203 Client/core/CSettings.cpp:3210 msgid "On" msgstr "" -#: Client/core/CSettings.cpp:1049 Client/core/CSettings.cpp:3186 +#: Client/core/CSettings.cpp:1049 Client/core/CSettings.cpp:3192 msgid "Very slow" msgstr "" #: Client/core/CSettings.cpp:1050 Client/core/CSettings.cpp:1063 #: Client/core/CSettings.cpp:1076 Client/core/CSettings.cpp:1090 #: Client/core/CSettings.cpp:1116 Client/core/CSettings.cpp:1128 -#: Client/core/CSettings.cpp:1220 Client/core/CSettings.cpp:1240 -#: Client/core/CSettings.cpp:3188 Client/core/CSettings.cpp:3195 -#: Client/core/CSettings.cpp:3202 Client/core/CSettings.cpp:3211 -#: Client/core/CSettings.cpp:3224 +#: Client/core/CSettings.cpp:1226 Client/core/CSettings.cpp:1246 +#: Client/core/CSettings.cpp:3194 Client/core/CSettings.cpp:3201 +#: Client/core/CSettings.cpp:3208 Client/core/CSettings.cpp:3217 +#: Client/core/CSettings.cpp:3234 msgid "Default" msgstr "" -#: Client/core/CSettings.cpp:1051 Client/core/CSettings.cpp:3190 +#: Client/core/CSettings.cpp:1051 Client/core/CSettings.cpp:3196 msgid "Fast" msgstr "" -#: Client/core/CSettings.cpp:1102 Client/core/CSettings.cpp:3166 +#: Client/core/CSettings.cpp:1102 Client/core/CSettings.cpp:3172 msgid "Normal" msgstr "" -#: Client/core/CSettings.cpp:1103 Client/core/CSettings.cpp:3168 +#: Client/core/CSettings.cpp:1103 Client/core/CSettings.cpp:3174 msgid "Above normal" msgstr "" @@ -2639,200 +2639,205 @@ msgstr "" msgid "Show in Explorer" msgstr "" +#. Enable camera photos getting saved to documents folder +#: Client/core/CSettings.cpp:1205 +msgid "Save photos taken by camera weapon to GTA San Andreas User Files folder" +msgstr "" + #. Auto updater section label -#: Client/core/CSettings.cpp:1205 Client/core/CSettings.cpp:1208 +#: Client/core/CSettings.cpp:1211 Client/core/CSettings.cpp:1214 msgid "Auto updater" msgstr "" #. Check for updates -#: Client/core/CSettings.cpp:1246 +#: Client/core/CSettings.cpp:1252 msgid "Check for update now" msgstr "" -#: Client/core/CSettings.cpp:1400 +#: Client/core/CSettings.cpp:1406 msgid "Some settings will be changed when you next start MTA" msgstr "" -#: Client/core/CSettings.cpp:1401 +#: Client/core/CSettings.cpp:1407 msgid "" "\n" "\n" "Do you want to restart now?" msgstr "" -#: Client/core/CSettings.cpp:1404 +#: Client/core/CSettings.cpp:1410 msgid "RESTART REQUIRED" msgstr "" -#: Client/core/CSettings.cpp:1424 +#: Client/core/CSettings.cpp:1430 msgid "Some settings will be changed when you disconnect the current server" msgstr "" -#: Client/core/CSettings.cpp:1425 +#: Client/core/CSettings.cpp:1431 msgid "" "\n" "\n" "Do you want to disconnect now?" msgstr "" -#: Client/core/CSettings.cpp:1428 +#: Client/core/CSettings.cpp:1434 msgid "DISCONNECT REQUIRED" msgstr "" #. Update the joystick name -#: Client/core/CSettings.cpp:1760 +#: Client/core/CSettings.cpp:1766 msgid "Joypad not detected - Check connections and restart game" msgstr "" -#: Client/core/CSettings.cpp:1957 +#: Client/core/CSettings.cpp:1963 msgid "Binding axis" msgstr "" -#: Client/core/CSettings.cpp:1957 +#: Client/core/CSettings.cpp:1963 msgid "Move an axis to bind, or escape to clear" msgstr "" -#: Client/core/CSettings.cpp:2034 +#: Client/core/CSettings.cpp:2040 msgid "Language:" msgstr "" -#: Client/core/CSettings.cpp:2034 +#: Client/core/CSettings.cpp:2040 msgid "Skin:" msgstr "" -#: Client/core/CSettings.cpp:2034 +#: Client/core/CSettings.cpp:2040 msgid "Presets:" msgstr "" -#: Client/core/CSettings.cpp:2083 +#: Client/core/CSettings.cpp:2089 msgid "Chat" msgstr "" -#: Client/core/CSettings.cpp:2100 +#: Client/core/CSettings.cpp:2106 msgid "Load" msgstr "" -#: Client/core/CSettings.cpp:2112 +#: Client/core/CSettings.cpp:2118 msgid "Colors" msgstr "" -#: Client/core/CSettings.cpp:2113 +#: Client/core/CSettings.cpp:2119 msgid "Layout" msgstr "" -#: Client/core/CSettings.cpp:2114 Client/core/CSettings.cpp:2360 +#: Client/core/CSettings.cpp:2120 Client/core/CSettings.cpp:2366 msgid "Options" msgstr "" -#: Client/core/CSettings.cpp:2120 +#: Client/core/CSettings.cpp:2126 msgid "Chat Background" msgstr "" -#: Client/core/CSettings.cpp:2120 +#: Client/core/CSettings.cpp:2126 msgid "Chat Text" msgstr "" -#: Client/core/CSettings.cpp:2120 +#: Client/core/CSettings.cpp:2126 msgid "Input Background" msgstr "" -#: Client/core/CSettings.cpp:2120 +#: Client/core/CSettings.cpp:2126 msgid "Input Text" msgstr "" -#: Client/core/CSettings.cpp:2143 +#: Client/core/CSettings.cpp:2149 msgid "Lines:" msgstr "" -#: Client/core/CSettings.cpp:2143 +#: Client/core/CSettings.cpp:2149 msgid "Scale:" msgstr "" -#: Client/core/CSettings.cpp:2143 +#: Client/core/CSettings.cpp:2149 msgid "Width:" msgstr "" -#: Client/core/CSettings.cpp:2146 +#: Client/core/CSettings.cpp:2152 msgid "Size" msgstr "" -#: Client/core/CSettings.cpp:2195 +#: Client/core/CSettings.cpp:2201 msgid "after" msgstr "" -#: Client/core/CSettings.cpp:2195 +#: Client/core/CSettings.cpp:2201 msgid "for" msgstr "" -#: Client/core/CSettings.cpp:2195 +#: Client/core/CSettings.cpp:2201 msgid "sec" msgstr "" -#: Client/core/CSettings.cpp:2198 +#: Client/core/CSettings.cpp:2204 msgid "Fading" msgstr "" -#: Client/core/CSettings.cpp:2204 +#: Client/core/CSettings.cpp:2210 msgid "Fade out old lines" msgstr "" -#: Client/core/CSettings.cpp:2244 +#: Client/core/CSettings.cpp:2250 msgid "Horizontal:" msgstr "" -#: Client/core/CSettings.cpp:2244 +#: Client/core/CSettings.cpp:2250 msgid "Vertical:" msgstr "" -#: Client/core/CSettings.cpp:2244 +#: Client/core/CSettings.cpp:2250 msgid "Text-Align:" msgstr "" -#: Client/core/CSettings.cpp:2244 +#: Client/core/CSettings.cpp:2250 msgid "X-Offset:" msgstr "" -#: Client/core/CSettings.cpp:2245 +#: Client/core/CSettings.cpp:2251 msgid "Y-Offset:" msgstr "" -#: Client/core/CSettings.cpp:2251 +#: Client/core/CSettings.cpp:2257 msgid "Position" msgstr "" -#: Client/core/CSettings.cpp:2266 Client/core/CSettings.cpp:2280 +#: Client/core/CSettings.cpp:2272 Client/core/CSettings.cpp:2286 msgid "Center" msgstr "" -#: Client/core/CSettings.cpp:2279 +#: Client/core/CSettings.cpp:2285 msgid "Top" msgstr "" -#: Client/core/CSettings.cpp:2281 +#: Client/core/CSettings.cpp:2287 msgid "Bottom" msgstr "" -#: Client/core/CSettings.cpp:2329 +#: Client/core/CSettings.cpp:2335 msgid "Font" msgstr "" -#: Client/core/CSettings.cpp:2366 +#: Client/core/CSettings.cpp:2372 msgid "Hide background when not typing" msgstr "" -#: Client/core/CSettings.cpp:2371 +#: Client/core/CSettings.cpp:2377 msgid "Nickname completion using the \"Tab\" key" msgstr "" -#: Client/core/CSettings.cpp:2376 +#: Client/core/CSettings.cpp:2382 msgid "Allow server to flash the window" msgstr "" -#: Client/core/CSettings.cpp:2381 +#: Client/core/CSettings.cpp:2387 msgid "Allow tray balloon notifications" msgstr "" -#: Client/core/CSettings.cpp:2386 +#: Client/core/CSettings.cpp:2392 msgid "Chat text black/white outline" msgstr "" @@ -2840,85 +2845,85 @@ msgstr "" #. SString strText = SString::Printf ( "Press a key to bind to '%s'", pItemBind->GetText ().c_str () ); #. Create a messagebox to notify the user #. sSString strText = SString::Printf ( "Press a key to bind to '%s'", pItemBind->GetText ().c_str () ); -#: Client/core/CSettings.cpp:2635 Client/core/CSettings.cpp:2642 +#: Client/core/CSettings.cpp:2641 Client/core/CSettings.cpp:2648 msgid "Press a key to bind, or escape to clear" msgstr "" -#: Client/core/CSettings.cpp:2636 +#: Client/core/CSettings.cpp:2642 msgid "Binding a primary key" msgstr "" -#: Client/core/CSettings.cpp:2643 +#: Client/core/CSettings.cpp:2649 msgid "Binding a secondary key" msgstr "" -#: Client/core/CSettings.cpp:2719 +#: Client/core/CSettings.cpp:2725 msgid "GTA GAME CONTROLS" msgstr "" -#: Client/core/CSettings.cpp:2721 +#: Client/core/CSettings.cpp:2727 msgid "MULTIPLAYER CONTROLS" msgstr "" -#: Client/core/CSettings.cpp:2966 Client/core/CSettings.cpp:4802 +#: Client/core/CSettings.cpp:2972 Client/core/CSettings.cpp:4817 msgid "Your nickname contains invalid characters!" msgstr "" -#: Client/core/CSettings.cpp:3816 +#: Client/core/CSettings.cpp:3831 msgid "Red:" msgstr "" -#: Client/core/CSettings.cpp:3816 +#: Client/core/CSettings.cpp:3831 msgid "Green:" msgstr "" -#: Client/core/CSettings.cpp:3816 +#: Client/core/CSettings.cpp:3831 msgid "Blue:" msgstr "" -#: Client/core/CSettings.cpp:3816 +#: Client/core/CSettings.cpp:3831 msgid "Transparency:" msgstr "" -#: Client/core/CSettings.cpp:3819 +#: Client/core/CSettings.cpp:3834 msgid "Color" msgstr "" -#: Client/core/CSettings.cpp:3896 +#: Client/core/CSettings.cpp:3911 msgid "Preview" msgstr "" -#: Client/core/CSettings.cpp:4204 +#: Client/core/CSettings.cpp:4219 msgid "Please disconnect before changing language" msgstr "" -#: Client/core/CSettings.cpp:4232 +#: Client/core/CSettings.cpp:4247 msgid "Please disconnect before changing skin" msgstr "" -#: Client/core/CSettings.cpp:4520 +#: Client/core/CSettings.cpp:4535 msgid "" "Volmetric shadows can cause some systems to slow down.\n" "\n" "Are you sure you want to enable them?" msgstr "" -#: Client/core/CSettings.cpp:4524 +#: Client/core/CSettings.cpp:4539 msgid "PERFORMANCE WARNING" msgstr "" -#: Client/core/CSettings.cpp:4544 +#: Client/core/CSettings.cpp:4559 msgid "" "Screen upload is required by some servers for anti-cheat purposes.\n" "\n" "(The chat box and GUI is excluded from the upload)\n" msgstr "" -#: Client/core/CSettings.cpp:4546 +#: Client/core/CSettings.cpp:4561 msgid "SCREEN UPLOAD INFORMATION" msgstr "" -#: Client/core/CSettings.cpp:4561 +#: Client/core/CSettings.cpp:4576 msgid "" "Some scripts may play sounds, such as radio, from the internet.\n" "\n" @@ -2926,11 +2931,11 @@ msgid "" "bandwidth consumption.\n" msgstr "" -#: Client/core/CSettings.cpp:4564 +#: Client/core/CSettings.cpp:4579 msgid "EXTERNAL SOUNDS" msgstr "" -#: Client/core/CSettings.cpp:4593 +#: Client/core/CSettings.cpp:4608 msgid "" "It seems that you have the Rich Presence connection option enabled.\n" "Do you want to allow servers to share their data?\n" @@ -2938,11 +2943,11 @@ msgid "" "This includes yours unique ID identifier." msgstr "" -#: Client/core/CSettings.cpp:4598 +#: Client/core/CSettings.cpp:4613 msgid "CONSENT TO ALLOW DATA SHARING" msgstr "" -#: Client/core/CSettings.cpp:4622 +#: Client/core/CSettings.cpp:4637 msgid "" "Some files in your GTA:SA data directory are customized.\n" "MTA will only use these modified files if this check box is ticked.\n" @@ -2952,7 +2957,7 @@ msgid "" "Are you sure you want to use them?" msgstr "" -#: Client/core/CSettings.cpp:4671 +#: Client/core/CSettings.cpp:4686 msgid "" "Enabling DPI awareness is an experimental feature and\n" "we only recommend it when you play MTA:SA on a scaled monitor.\n" @@ -2961,77 +2966,77 @@ msgid "" "Are you sure you want to enable this option?" msgstr "" -#: Client/core/CSettings.cpp:4677 +#: Client/core/CSettings.cpp:4692 msgid "EXPERIMENTAL FEATURE" msgstr "" -#: Client/core/CSettings.cpp:4820 +#: Client/core/CSettings.cpp:4835 msgid "Please enter a nickname" msgstr "" -#: Client/core/CSettings.cpp:4821 +#: Client/core/CSettings.cpp:4836 msgid "" "Please enter a nickname to be used ingame. \n" "This will be your name when you connect to and play in a server" msgstr "" -#: Client/core/CSettings.cpp:4839 +#: Client/core/CSettings.cpp:4854 msgid "Very experimental feature." msgstr "" -#: Client/core/CSettings.cpp:4841 +#: Client/core/CSettings.cpp:4856 msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" msgstr "" -#: Client/core/CSettings.cpp:4843 +#: Client/core/CSettings.cpp:4858 msgid "Older routers may require a slower scan speed." msgstr "" -#: Client/core/CSettings.cpp:4845 +#: Client/core/CSettings.cpp:4860 msgid "Switch on to use only one connection when downloading." msgstr "" -#: Client/core/CSettings.cpp:4847 +#: Client/core/CSettings.cpp:4862 msgid "Tag network packets to help ISPs identify MTA traffic." msgstr "" -#: Client/core/CSettings.cpp:4849 +#: Client/core/CSettings.cpp:4864 msgid "Spinning circle animation at the bottom of the screen" msgstr "" -#: Client/core/CSettings.cpp:4851 +#: Client/core/CSettings.cpp:4866 msgid "Select default always. (This setting is not saved)" msgstr "" -#: Client/core/CSettings.cpp:4853 +#: Client/core/CSettings.cpp:4868 msgid "Maximum is usually best" msgstr "" -#: Client/core/CSettings.cpp:4855 Client/core/CSettings.cpp:4857 +#: Client/core/CSettings.cpp:4870 Client/core/CSettings.cpp:4872 msgid "Auto updater:" msgstr "" -#: Client/core/CSettings.cpp:4855 +#: Client/core/CSettings.cpp:4870 msgid "Select default unless you like filling out bug reports." msgstr "" -#: Client/core/CSettings.cpp:4857 +#: Client/core/CSettings.cpp:4872 msgid "Select default to automatically install important updates." msgstr "" -#: Client/core/CSettings.cpp:4859 +#: Client/core/CSettings.cpp:4874 msgid "16-bit color:" msgstr "" -#: Client/core/CSettings.cpp:4859 +#: Client/core/CSettings.cpp:4874 msgid "Enable 16 bit color modes - Requires MTA restart" msgstr "" -#: Client/core/CSettings.cpp:4861 +#: Client/core/CSettings.cpp:4876 msgid "Mouse fix:" msgstr "" -#: Client/core/CSettings.cpp:4861 +#: Client/core/CSettings.cpp:4876 msgid "Mouse movement fix - May need PC restart" msgstr "" diff --git a/Shared/sdk/net/rpc_enums.h b/Shared/sdk/net/rpc_enums.h index 2318908f4e..08e18eb077 100644 --- a/Shared/sdk/net/rpc_enums.h +++ b/Shared/sdk/net/rpc_enums.h @@ -285,10 +285,10 @@ enum eElementRPCFunctions RESPAWN_OBJECT, TOGGLE_OBJECT_RESPAWN, - RESET_WORLD_PROPERTIES, - + SPAWN_VEHICLE_FLYING_COMPONENT, - + SET_VEHICLE_NITRO_ACTIVATED, + NUM_RPC_FUNCS // Add above this line }; diff --git a/utils/localization/generate-images/package-lock.json b/utils/localization/generate-images/package-lock.json index 2dadb06346..492303e78b 100644 --- a/utils/localization/generate-images/package-lock.json +++ b/utils/localization/generate-images/package-lock.json @@ -87,11 +87,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" }