From fc15996553dee3ac8539ad1a6117994c348cf673 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Sun, 30 Jun 2024 04:02:53 +0300 Subject: [PATCH 01/14] add shadow by script --- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 8 ++++++++ Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 1 + 2 files changed, 9 insertions(+) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 96dd4479210..7df0893b307 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -103,6 +103,7 @@ void CLuaWorldDefs::LoadFunctions() {"removeWorldModel", RemoveWorldBuilding}, {"restoreAllWorldModels", RestoreWorldBuildings}, {"restoreWorldModel", RestoreWorldBuilding}, + {"setVolumetricShadowsEnabled", ArgumentParser}, // World create funcs {"createSWATRope", CreateSWATRope}, @@ -2234,3 +2235,10 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) } return false; } + +bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool bEnable) +{ + CGameSettings* pGameSettings = g_pGame->GetSettings(); + pGameSettings->SetVolumetricShadowsEnabled(bEnable); + return true; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index fc1d6bb3a1e..4bd2a3e2e09 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -130,4 +130,5 @@ class CLuaWorldDefs : public CLuaDefs static std::variant> GetWorldProperty(eWorldProperty property); static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); + static bool SetVolumetricShadowsEnabled(bool bEnable); }; From e48eb98035b2269ef46c5412a737fb8ba84fc8c0 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Sun, 30 Jun 2024 04:17:41 +0300 Subject: [PATCH 02/14] fixes --- Client/mods/deathmatch/logic/CClientGame.cpp | 1 + Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index b07cf64564a..2eea3a90797 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -5543,6 +5543,7 @@ void CClientGame::ResetMapInfo() g_pGame->GetWeather()->ResetWaterFog(); g_pGame->GetWeather()->ResetSandstorm(); g_pGame->GetWeather()->ResetRainbow(); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(false); // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 7df0893b307..5621ad39711 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -2238,7 +2238,6 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool bEnable) { - CGameSettings* pGameSettings = g_pGame->GetSettings(); - pGameSettings->SetVolumetricShadowsEnabled(bEnable); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(bEnable); return true; } From cfc18fef4381bc31f8857e0c77696ec15be0086f Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:15:05 +0300 Subject: [PATCH 03/14] apply checkbox setting in reconnect --- Client/mods/deathmatch/logic/CClientGame.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index 2eea3a90797..ccf71d657f4 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -5543,7 +5543,10 @@ void CClientGame::ResetMapInfo() g_pGame->GetWeather()->ResetWaterFog(); g_pGame->GetWeather()->ResetSandstorm(); g_pGame->GetWeather()->ResetRainbow(); - g_pGame->GetSettings()->SetVolumetricShadowsEnabled(false); + + bool VolumetricShadow; + g_pCore->GetCVars()->Get("volumetric_shadows", VolumetricShadow); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(VolumetricShadow); // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); From 022d0a5da40b6473ddc9fcb12b3dd3989daba507 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:21:47 +0300 Subject: [PATCH 04/14] notation fix --- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 4 ++-- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 5621ad39711..134ea66e508 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -2236,8 +2236,8 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) return false; } -bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool bEnable) +bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) { - g_pGame->GetSettings()->SetVolumetricShadowsEnabled(bEnable); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(enable); return true; } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index 4bd2a3e2e09..ae7211ade8b 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -130,5 +130,5 @@ class CLuaWorldDefs : public CLuaDefs static std::variant> GetWorldProperty(eWorldProperty property); static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); - static bool SetVolumetricShadowsEnabled(bool bEnable); + static bool SetVolumetricShadowsEnabled(bool enable); }; From caff86cae0694b0d30717b9dab3fe20608dcbb66 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:52:51 +0300 Subject: [PATCH 05/14] add function IsVolumetricShadowsEnabled --- Client/game_sa/CSettingsSA.cpp | 8 ++++++-- Client/game_sa/CSettingsSA.h | 1 + Client/mods/deathmatch/logic/CClientGame.cpp | 6 +++--- .../deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 14 +++++++++++++- .../mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 1 + 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Client/game_sa/CSettingsSA.cpp b/Client/game_sa/CSettingsSA.cpp index b1b8f0ed861..94dbd2cee30 100644 --- a/Client/game_sa/CSettingsSA.cpp +++ b/Client/game_sa/CSettingsSA.cpp @@ -275,12 +275,16 @@ void CSettingsSA::Save() bool CSettingsSA::IsVolumetricShadowsEnabled() { - return m_bVolumetricShadowsEnabled && !m_bVolumetricShadowsSuspended; + return m_bVolumetricShadowsEnabled && !m_bVolumetricShadowsSuspended || m_bVolumetricShadowsEnabledByScript; } void CSettingsSA::SetVolumetricShadowsEnabled(bool bEnable) { - m_bVolumetricShadowsEnabled = bEnable; + bool volumetricShadow; + g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); + m_bVolumetricShadowsEnabled = volumetricShadow; + + m_bVolumetricShadowsEnabledByScript = bEnable; // Disable rendering ped real time shadows when they sit on bikes // if vehicle volumetric shadows are disabled because it looks a bit weird diff --git a/Client/game_sa/CSettingsSA.h b/Client/game_sa/CSettingsSA.h index 9bb313e5668..849862b0810 100644 --- a/Client/game_sa/CSettingsSA.h +++ b/Client/game_sa/CSettingsSA.h @@ -85,6 +85,7 @@ class CSettingsSA : public CGameSettings private: CSettingsSAInterface* m_pInterface; bool m_bVolumetricShadowsEnabled; + bool m_bVolumetricShadowsEnabledByScript; bool m_bVolumetricShadowsSuspended; bool m_bDynamicPedShadowsEnabled; eAspectRatio m_AspectRatio; diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index ccf71d657f4..bfcdab4c909 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -5544,9 +5544,9 @@ void CClientGame::ResetMapInfo() g_pGame->GetWeather()->ResetSandstorm(); g_pGame->GetWeather()->ResetRainbow(); - bool VolumetricShadow; - g_pCore->GetCVars()->Get("volumetric_shadows", VolumetricShadow); - g_pGame->GetSettings()->SetVolumetricShadowsEnabled(VolumetricShadow); + bool volumetricShadow; + g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(volumetricShadow); // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 134ea66e508..3f830abecba 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -132,7 +132,8 @@ void CLuaWorldDefs::LoadFunctions() {"isPedTargetingMarkerEnabled", IsPedTargetingMarkerEnabled}, {"isLineOfSightClear", IsLineOfSightClear}, {"isWorldSpecialPropertyEnabled", ArgumentParserWarn}, - {"isGarageOpen", IsGarageOpen}}; + {"isGarageOpen", IsGarageOpen}, + {"isVolumetricShadowsEnabled", ArgumentParserWarn}}; // Add functions for (const auto& [name, func] : functions) @@ -2241,3 +2242,14 @@ bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) g_pGame->GetSettings()->SetVolumetricShadowsEnabled(enable); return true; } + +bool CLuaWorldDefs::IsVolumetricShadowsEnabled() +{ + + if (g_pGame->GetSettings()->IsVolumetricShadowsEnabled()) + { + return true; + } + return false; + +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index ae7211ade8b..ffb04f399e9 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -131,4 +131,5 @@ class CLuaWorldDefs : public CLuaDefs static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); static bool SetVolumetricShadowsEnabled(bool enable); + static bool IsVolumetricShadowsEnabled(); }; From 7e4ac631238e989d731988ae3badb6f3d5e9707f Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 1 Jul 2024 20:02:26 +0300 Subject: [PATCH 06/14] review --- .../deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 14 ++++---------- .../mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 4 ++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 3f830abecba..529cb8174f5 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -133,7 +133,7 @@ void CLuaWorldDefs::LoadFunctions() {"isLineOfSightClear", IsLineOfSightClear}, {"isWorldSpecialPropertyEnabled", ArgumentParserWarn}, {"isGarageOpen", IsGarageOpen}, - {"isVolumetricShadowsEnabled", ArgumentParserWarn}}; + {"isVolumetricShadowsEnabled", ArgumentParser}}; // Add functions for (const auto& [name, func] : functions) @@ -2237,19 +2237,13 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) return false; } -bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) +bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) noexcept { g_pGame->GetSettings()->SetVolumetricShadowsEnabled(enable); return true; } -bool CLuaWorldDefs::IsVolumetricShadowsEnabled() +bool CLuaWorldDefs::IsVolumetricShadowsEnabled() noexcept { - - if (g_pGame->GetSettings()->IsVolumetricShadowsEnabled()) - { - return true; - } - return false; - + return g_pGame->GetSettings()->IsVolumetricShadowsEnabled(); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index ffb04f399e9..547db464690 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -130,6 +130,6 @@ class CLuaWorldDefs : public CLuaDefs static std::variant> GetWorldProperty(eWorldProperty property); static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); - static bool SetVolumetricShadowsEnabled(bool enable); - static bool IsVolumetricShadowsEnabled(); + static bool SetVolumetricShadowsEnabled(bool enable) noexcept; + static bool IsVolumetricShadowsEnabled() noexcept; }; From 0b5664932b0ee220ea3ae4facf08c754fbab6599 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 1 Jul 2024 20:21:42 +0300 Subject: [PATCH 07/14] logic error --- Client/game_sa/CSettingsSA.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Client/game_sa/CSettingsSA.cpp b/Client/game_sa/CSettingsSA.cpp index 94dbd2cee30..28b356471af 100644 --- a/Client/game_sa/CSettingsSA.cpp +++ b/Client/game_sa/CSettingsSA.cpp @@ -280,10 +280,7 @@ bool CSettingsSA::IsVolumetricShadowsEnabled() void CSettingsSA::SetVolumetricShadowsEnabled(bool bEnable) { - bool volumetricShadow; - g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); - m_bVolumetricShadowsEnabled = volumetricShadow; - + m_bVolumetricShadowsEnabled = bEnable; m_bVolumetricShadowsEnabledByScript = bEnable; // Disable rendering ped real time shadows when they sit on bikes From e21e7f4f602f60562cd0230d9d439c0beb08dd4b Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Tue, 2 Jul 2024 19:22:55 +0300 Subject: [PATCH 08/14] fixes --- Client/game_sa/CSettingsSA.cpp | 12 ++++++++++-- Client/game_sa/CSettingsSA.h | 2 +- Client/mods/deathmatch/logic/CClientGame.cpp | 5 +---- Client/sdk/game/CSettings.h | 1 + 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Client/game_sa/CSettingsSA.cpp b/Client/game_sa/CSettingsSA.cpp index 28b356471af..3635c6e5d2f 100644 --- a/Client/game_sa/CSettingsSA.cpp +++ b/Client/game_sa/CSettingsSA.cpp @@ -275,19 +275,27 @@ void CSettingsSA::Save() bool CSettingsSA::IsVolumetricShadowsEnabled() { - return m_bVolumetricShadowsEnabled && !m_bVolumetricShadowsSuspended || m_bVolumetricShadowsEnabledByScript; + return m_bVolumetricShadowsEnabled && !m_bVolumetricShadowsSuspended; } void CSettingsSA::SetVolumetricShadowsEnabled(bool bEnable) { m_bVolumetricShadowsEnabled = bEnable; - m_bVolumetricShadowsEnabledByScript = bEnable; // Disable rendering ped real time shadows when they sit on bikes // if vehicle volumetric shadows are disabled because it looks a bit weird MemPut(0x5E682A + 1, bEnable); } + +bool CSettingsSA::GetVolumetricShadowsEnabledByVideoSetting() +{ + bool volumetricShadow; + g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); + return volumetricShadow; + +} + void CSettingsSA::SetVolumetricShadowsSuspended(bool bSuspended) { m_bVolumetricShadowsSuspended = bSuspended; diff --git a/Client/game_sa/CSettingsSA.h b/Client/game_sa/CSettingsSA.h index 849862b0810..f304f745a3b 100644 --- a/Client/game_sa/CSettingsSA.h +++ b/Client/game_sa/CSettingsSA.h @@ -85,7 +85,6 @@ class CSettingsSA : public CGameSettings private: CSettingsSAInterface* m_pInterface; bool m_bVolumetricShadowsEnabled; - bool m_bVolumetricShadowsEnabledByScript; bool m_bVolumetricShadowsSuspended; bool m_bDynamicPedShadowsEnabled; eAspectRatio m_AspectRatio; @@ -140,6 +139,7 @@ class CSettingsSA : public CGameSettings void SetMipMappingEnabled(bool bEnable); bool IsVolumetricShadowsEnabled(); + bool GetVolumetricShadowsEnabledByVideoSetting(); void SetVolumetricShadowsEnabled(bool bEnable); void SetVolumetricShadowsSuspended(bool bSuspended); diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index bfcdab4c909..960c2c39f5d 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -5543,10 +5543,7 @@ void CClientGame::ResetMapInfo() g_pGame->GetWeather()->ResetWaterFog(); g_pGame->GetWeather()->ResetSandstorm(); g_pGame->GetWeather()->ResetRainbow(); - - bool volumetricShadow; - g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); - g_pGame->GetSettings()->SetVolumetricShadowsEnabled(volumetricShadow); + g_pGame->GetSettings()->SetVolumetricShadowsEnabled(g_pGame->GetSettings()->GetVolumetricShadowsEnabledByVideoSetting()); // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); diff --git a/Client/sdk/game/CSettings.h b/Client/sdk/game/CSettings.h index 1bed48acfce..544a52d6070 100644 --- a/Client/sdk/game/CSettings.h +++ b/Client/sdk/game/CSettings.h @@ -133,6 +133,7 @@ class CGameSettings virtual void SetMipMappingEnabled(bool bEnable) = 0; virtual bool IsVolumetricShadowsEnabled() = 0; + virtual bool GetVolumetricShadowsEnabledByVideoSetting() = 0; virtual void SetVolumetricShadowsEnabled(bool bEnable) = 0; virtual void SetVolumetricShadowsSuspended(bool bSuspended) = 0; From ac43ad107343eeecfeb0c01faccebe2e4e88ce27 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Tue, 2 Jul 2024 19:31:35 +0300 Subject: [PATCH 09/14] space --- Client/game_sa/CSettingsSA.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Client/game_sa/CSettingsSA.cpp b/Client/game_sa/CSettingsSA.cpp index 3635c6e5d2f..ea7d85f657d 100644 --- a/Client/game_sa/CSettingsSA.cpp +++ b/Client/game_sa/CSettingsSA.cpp @@ -293,7 +293,6 @@ bool CSettingsSA::GetVolumetricShadowsEnabledByVideoSetting() bool volumetricShadow; g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); return volumetricShadow; - } void CSettingsSA::SetVolumetricShadowsSuspended(bool bSuspended) From d026afc33c46a0e7b1a08692993ac93aadd5c942 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:03:56 +0300 Subject: [PATCH 10/14] Revert "Merge remote-tracking branch 'upstream/master' into shadow" This reverts commit fbad125acad0a5ba0959409c6be64b4cc231ab41, reversing changes made to 60e29edb047efbb8675b5ea79949067baca04ea1. --- Client/core/CCommands.cpp | 13 +- Client/core/CKeyBinds.cpp | 3 +- Client/game_sa/CCameraSA.cpp | 22 +- Client/game_sa/CCameraSA.h | 1 - Client/game_sa/CCarEnterExitSA.cpp | 13 - Client/game_sa/CCarEnterExitSA.h | 2 - Client/game_sa/CClockSA.cpp | 16 - Client/game_sa/CClockSA.h | 7 - Client/game_sa/CGameSA.cpp | 8 +- Client/game_sa/CGameSA.h | 2 +- Client/game_sa/CHandlingEntrySA.cpp | 84 +- Client/game_sa/CHandlingEntrySA.h | 153 +- Client/game_sa/CHandlingManagerSA.cpp | 134 +- Client/game_sa/CHandlingManagerSA.h | 33 +- Client/game_sa/CModelInfoSA.cpp | 12 +- Client/game_sa/CModelInfoSA.h | 1 - Client/game_sa/CPoolsSA.cpp | 2 - Client/game_sa/CVehicleSA.cpp | 51 +- Client/game_sa/CVehicleSA.h | 1 - Client/game_sa/CWeatherSA.h | 1 + Client/mods/deathmatch/ClientCommands.cpp | 14 +- Client/mods/deathmatch/ClientCommands.h | 2 +- .../mods/deathmatch/logic/CClientBuilding.cpp | 4 +- .../logic/CClientBuildingManager.cpp | 33 +- .../mods/deathmatch/logic/CClientCamera.cpp | 5 - Client/mods/deathmatch/logic/CClientCamera.h | 1 - Client/mods/deathmatch/logic/CClientGame.cpp | 14 +- Client/mods/deathmatch/logic/CClientGame.h | 2 +- Client/mods/deathmatch/logic/CClientIMG.cpp | 2 +- Client/mods/deathmatch/logic/CClientModel.cpp | 3 - .../mods/deathmatch/logic/CClientVehicle.cpp | 15 - Client/mods/deathmatch/logic/CClientVehicle.h | 2 - Client/mods/deathmatch/logic/CResource.cpp | 3 - Client/mods/deathmatch/logic/CResource.h | 5 - .../logic/CResourceModelStreamer.cpp | 122 - .../deathmatch/logic/CResourceModelStreamer.h | 30 - .../logic/CStaticFunctionDefinitions.cpp | 7 +- .../logic/lua/CLuaFunctionParseHelpers.cpp | 8 - .../logic/lua/CLuaFunctionParseHelpers.h | 2 - Client/mods/deathmatch/logic/lua/CLuaMain.h | 2 +- .../logic/luadefs/CLuaCameraDefs.cpp | 7 - .../deathmatch/logic/luadefs/CLuaCameraDefs.h | 1 - .../logic/luadefs/CLuaEngineDefs.cpp | 60 +- .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 6 +- .../logic/luadefs/CLuaVehicleDefs.cpp | 99 - .../logic/luadefs/CLuaVehicleDefs.h | 3 - .../logic/luadefs/CLuaWorldDefs.cpp | 20 +- .../deathmatch/logic/luadefs/CLuaWorldDefs.h | 6 - Client/multiplayer_sa/CMultiplayerSA.cpp | 103 +- Client/multiplayer_sa/CMultiplayerSA.h | 4 +- Client/sdk/core/CCommandsInterface.h | 2 +- Client/sdk/game/CCamera.h | 3 +- Client/sdk/game/CCarEnterExit.h | 2 - Client/sdk/game/CClock.h | 4 - Client/sdk/game/CGame.h | 2 +- Client/sdk/game/CHandlingEntry.h | 29 +- Client/sdk/game/CHandlingManager.h | 14 +- Client/sdk/game/CModelInfo.h | 1 - Client/sdk/game/CStreaming.h | 23 +- Client/sdk/multiplayer/CMultiplayer.h | 3 +- .../logic/CStaticFunctionDefinitions.cpp | 24 +- .../logic/luadefs/CLuaHandlingDefs.cpp | 58 +- .../MTA/locale/en_US/client.pot | 3786 ++++++++--------- Shared/data/launchers/CEFLauncher.exe | Bin 97664 -> 97664 bytes Shared/data/launchers/MTA Server ARM64.exe | Bin 372096 -> 372096 bytes Shared/data/launchers/MTA Server.exe | Bin 326528 -> 326528 bytes Shared/data/launchers/MTA Server64.exe | Bin 380800 -> 380800 bytes Shared/data/launchers/Multi Theft Auto.exe | Bin 418688 -> 418688 bytes Shared/data/launchers/wow64_helper.exe | Bin 262016 -> 262016 bytes utils/buildactions/install_cef.lua | 4 +- 70 files changed, 2317 insertions(+), 2782 deletions(-) delete mode 100644 Client/mods/deathmatch/logic/CResourceModelStreamer.cpp delete mode 100644 Client/mods/deathmatch/logic/CResourceModelStreamer.h diff --git a/Client/core/CCommands.cpp b/Client/core/CCommands.cpp index fecc85c3c61..bec794abbe5 100644 --- a/Client/core/CCommands.cpp +++ b/Client/core/CCommands.cpp @@ -125,7 +125,6 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Grab the command tagCOMMANDENTRY* pEntry = Get(szCommand); - bool wasHandled = false; if (pEntry) { // If its a core command, or if its enabled @@ -134,8 +133,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Execute it if (!bIsScriptedBind || pEntry->bAllowScriptedBind) ExecuteHandler(pEntry->pfnCmdFunc, szParameters); - - wasHandled = true; + return true; } } @@ -143,7 +141,6 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool std::string val = std::string(szCommand) + " " + std::string(szParameters ? szParameters : ""); // Is it a cvar? (syntax: cvar[ = value]) - if (!wasHandled) { // Check to see if '=' exists unsigned int nOpIndex = val.find('='); @@ -191,7 +188,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // HACK: if its a 'nick' command, save it here bool bIsNickCommand = !stricmp(szCommand, "nick"); - if (!wasHandled && bIsNickCommand && szParameters && !bIsScriptedBind) + if (bIsNickCommand && szParameters && !bIsScriptedBind) { if (CCore::GetSingleton().IsValidNick(szParameters)) { @@ -211,14 +208,10 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Try to execute the handler if (m_pfnExecuteHandler) { - bool bAllowScriptedBind = (!pEntry || pEntry->bAllowScriptedBind); - if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, wasHandled, bIsScriptedBind, bAllowScriptedBind)) + if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, (pEntry != NULL), bIsScriptedBind)) return true; } - if (wasHandled) - return true; - // Unknown command val = _("Unknown command or cvar: ") + szCommand; if (!bIsScriptedBind && !bIsNickCommand && pEntry == nullptr) diff --git a/Client/core/CKeyBinds.cpp b/Client/core/CKeyBinds.cpp index 0a1eee4a1ef..78b354bd00d 100644 --- a/Client/core/CKeyBinds.cpp +++ b/Client/core/CKeyBinds.cpp @@ -841,8 +841,7 @@ CCommandBind* CKeyBinds::FindCommandMatch(const char* szKey, const char* szComma NullEmptyStrings(szKey, szArguments, szResource, szOriginalScriptKey); std::string arguments = szArguments ? szArguments : ""; - if (!arguments.empty()) - szArguments = SharedUtil::Trim(arguments.data()); + szArguments = SharedUtil::Trim(arguments.data()); for (KeyBindPtr& bind : m_binds) { diff --git a/Client/game_sa/CCameraSA.cpp b/Client/game_sa/CCameraSA.cpp index 960ec7cfa7b..11326803b78 100644 --- a/Client/game_sa/CCameraSA.cpp +++ b/Client/game_sa/CCameraSA.cpp @@ -446,15 +446,15 @@ float CCameraSA::GetShakeForce() void CCameraSA::ShakeCamera(float radius, float x, float y, float z) noexcept { - static CCameraSAInterface* cameraInterface = GetInterface(); - if (radius <= 0.0f) - return ResetShakeCamera(); - - using ShakeCamera_t = void(__thiscall*)(CCameraSAInterface*, float radius, float x, float y, float z); - ((ShakeCamera_t)FUNC_ShakeCam)(cameraInterface, radius, x, y, z); -} - -void CCameraSA::ResetShakeCamera() noexcept -{ - GetInterface()->m_fCamShakeForce = 0.0f; + DWORD dwFunc = FUNC_ShakeCam; + CCameraSAInterface* cameraInterface = GetInterface(); + _asm + { + mov ecx, cameraInterface + push z + push y + push x + push radius + call dwFunc + } } diff --git a/Client/game_sa/CCameraSA.h b/Client/game_sa/CCameraSA.h index 246f3362d8d..bfe431c2cdb 100644 --- a/Client/game_sa/CCameraSA.h +++ b/Client/game_sa/CCameraSA.h @@ -429,5 +429,4 @@ class CCameraSA : public CCamera float GetShakeForce(); void ShakeCamera(float radius, float x, float y, float z) noexcept override; - void ResetShakeCamera() noexcept override; }; diff --git a/Client/game_sa/CCarEnterExitSA.cpp b/Client/game_sa/CCarEnterExitSA.cpp index a3001c75d25..5e0f8cd373f 100644 --- a/Client/game_sa/CCarEnterExitSA.cpp +++ b/Client/game_sa/CCarEnterExitSA.cpp @@ -78,19 +78,6 @@ bool CCarEnterExitSA::GetNearestCarPassengerDoor(CPed* pPed, CVehicle* pVehicle, return bReturn; } -void CCarEnterExitSA::GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept -{ - CVehicleSA* vehicleSA = dynamic_cast(vehicle); - - if (!vehicleSA) - return; - - CVehicleSAInterface* vehicleInterface = vehicleSA->GetVehicleInterface(); - - auto CCarEnterExit_GetPositionToOpenCarDoor = (void(__cdecl*)(CVector&, CVehicleSAInterface*, int))FUNC_GetPositionToOpenCarDoor; - CCarEnterExit_GetPositionToOpenCarDoor(position, vehicleInterface, door); -} - int CCarEnterExitSA::ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle) { DWORD dwFunc = FUNC_ComputeTargetDoorToExit; diff --git a/Client/game_sa/CCarEnterExitSA.h b/Client/game_sa/CCarEnterExitSA.h index 3e35691bd8d..e1f657b264a 100644 --- a/Client/game_sa/CCarEnterExitSA.h +++ b/Client/game_sa/CCarEnterExitSA.h @@ -17,14 +17,12 @@ #define FUNC_GetNearestCarPassengerDoor 0x650BB0 #define FUNC_ComputeTargetDoorToExit 0x64F110 #define FUNC_IsRoomForPedToLeaveCar 0x6504C0 -#define FUNC_GetPositionToOpenCarDoor 0x64E740 class CCarEnterExitSA : public CCarEnterExit { public: bool GetNearestCarDoor(CPed* pPed, CVehicle* pVehicle, CVector* pVector, int* pDoor); bool GetNearestCarPassengerDoor(CPed* pPed, CVehicle* pVehicle, CVector* pVector, int* pDoor, bool bUnknown, bool bUnknown2, bool bCheckIfRoomToGetIn); - void GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept; int ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle); bool IsRoomForPedToLeaveCar(CVehicle* pVehicle, int iDoor, CVector* pUnknown = 0); }; diff --git a/Client/game_sa/CClockSA.cpp b/Client/game_sa/CClockSA.cpp index 5ab106609d0..d8d0f5668a2 100644 --- a/Client/game_sa/CClockSA.cpp +++ b/Client/game_sa/CClockSA.cpp @@ -30,19 +30,3 @@ void CClockSA::Get(BYTE* bHour, BYTE* bMinute) *bMinute = *(BYTE*)VAR_TimeMinutes; *bHour = *(BYTE*)VAR_TimeHours; } - -bool CClockSA::SetTimeFrozen(bool value) noexcept -{ - if (value) - MemSet((void*)0x53BFBD, 0x90, 5); - else - MemCpy((void*)0x53BFBD, "\xE8\x4E\x0F\xFF\xFF", 5); - - m_bTimeCycleFrozen = value; - return true; -} - -bool CClockSA::ResetTimeFrozen() noexcept -{ - return SetTimeFrozen(false); -} diff --git a/Client/game_sa/CClockSA.h b/Client/game_sa/CClockSA.h index 4d424ba8c5e..fd392e9ecfd 100644 --- a/Client/game_sa/CClockSA.h +++ b/Client/game_sa/CClockSA.h @@ -22,11 +22,4 @@ class CClockSA : public CClock public: void Set(BYTE bHour, BYTE bMinute); void Get(BYTE* bHour, BYTE* bMinute); - - bool SetTimeFrozen(bool value) noexcept; - bool IsTimeFrozen() const noexcept { return m_bTimeCycleFrozen; }; - bool ResetTimeFrozen() noexcept; - -private: - bool m_bTimeCycleFrozen; }; diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 5d4a8300996..abfb822816f 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -1005,7 +1005,7 @@ void CGameSA::GetShaderReplacementStats(SShaderReplacementStats& outStats) m_pRenderWare->GetShaderReplacementStats(outStats); } -void CGameSA::RemoveAllBuildings() +void CGameSA::RemoveAllBuildings(bool clearBuildingRemoval) { m_pIplStore->SetDynamicIplStreamingEnabled(false); @@ -1013,6 +1013,10 @@ void CGameSA::RemoveAllBuildings() m_pPools->GetBuildingsPool().RemoveAllBuildings(); auto pBuildingRemoval = static_cast(m_pBuildingRemoval); + if (clearBuildingRemoval) + { + pBuildingRemoval->ClearRemovedBuildingLists(); + } pBuildingRemoval->DropCaches(); m_isBuildingsRemoved = true; @@ -1032,7 +1036,7 @@ bool CGameSA::SetBuildingPoolSize(size_t size) const bool shouldRemoveBuilding = !m_isBuildingsRemoved; if (shouldRemoveBuilding) { - RemoveAllBuildings(); + RemoveAllBuildings(false); } else { diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 976c1d5db0a..f22b5748f71 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -303,7 +303,7 @@ class CGameSA : public CGame PostWeaponFireHandler* m_pPostWeaponFireHandler; TaskSimpleBeHitHandler* m_pTaskSimpleBeHitHandler; - void RemoveAllBuildings(); + void RemoveAllBuildings(bool clearBuildingRemoval = true); void RestoreGameBuildings(); bool SetBuildingPoolSize(size_t size); diff --git a/Client/game_sa/CHandlingEntrySA.cpp b/Client/game_sa/CHandlingEntrySA.cpp index 1ebb1471e3f..40e8b86423a 100644 --- a/Client/game_sa/CHandlingEntrySA.cpp +++ b/Client/game_sa/CHandlingEntrySA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto + * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: Client/game_sa/CHandlingEntrySA.cpp + * FILE: game_sa/CHandlingEntrySA.cpp * PURPOSE: Vehicle handling data entry * - * Multi Theft Auto is available from https://multitheftauto.com/ + * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ @@ -22,89 +22,91 @@ CHandlingEntrySA::CHandlingEntrySA() m_pHandlingSA = new tHandlingDataSA; memset(m_pHandlingSA, 0, sizeof(tHandlingDataSA)); m_bDeleteInterface = true; + + // We have no original data + m_pOriginalData = NULL; + m_bChanged = true; } CHandlingEntrySA::CHandlingEntrySA(tHandlingDataSA* pOriginal) { // Store gta's pointer - m_pHandlingSA = nullptr; + m_pHandlingSA = NULL; + m_pOriginalData = NULL; m_bDeleteInterface = false; memcpy(&m_Handling, pOriginal, sizeof(tHandlingDataSA)); + m_bChanged = true; } CHandlingEntrySA::~CHandlingEntrySA() { + if (m_bChanged) + { + pGame->GetHandlingManager()->RemoveChangedVehicle(); + } if (m_bDeleteInterface) { - SAFE_DELETE(m_pHandlingSA); + delete m_pHandlingSA; } } // Apply the handlingdata from another data -void CHandlingEntrySA::Assign(const CHandlingEntry* pEntry) +void CHandlingEntrySA::Assign(const CHandlingEntry* pData) { - if (!pEntry) - return; - // Copy the data - const CHandlingEntrySA* pEntrySA = static_cast(pEntry); + const CHandlingEntrySA* pEntrySA = static_cast(pData); m_Handling = pEntrySA->m_Handling; + if (m_bChanged) + { + pGame->GetHandlingManager()->RemoveChangedVehicle(); + } + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::Recalculate() +void CHandlingEntrySA::Recalculate(unsigned short usModel) { // Real GTA class? - if (!m_pHandlingSA) - return; - - // Copy our stored field to GTA's - memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling)); - ((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA); + if (m_pHandlingSA) + { + // Copy our stored field to GTA's + memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling)); + ((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA); + } } -void CHandlingEntrySA::SetSuspensionForceLevel(float fForce) noexcept +// Moved to cpp to check suspension changes against default values to make sure the handling hasn't changed. +void CHandlingEntrySA::SetSuspensionForceLevel(float fForce) { - CheckSuspensionChanges(); m_Handling.fSuspensionForceLevel = fForce; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionDamping(float fDamping) noexcept +void CHandlingEntrySA::SetSuspensionDamping(float fDamping) { - CheckSuspensionChanges(); m_Handling.fSuspensionDamping = fDamping; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping) noexcept +void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping) { - CheckSuspensionChanges(); m_Handling.fSuspensionHighSpdDamping = fDamping; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit) noexcept +void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit) { - CheckSuspensionChanges(); m_Handling.fSuspensionUpperLimit = fUpperLimit; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit) noexcept +void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit) { - CheckSuspensionChanges(); m_Handling.fSuspensionLowerLimit = fLowerLimit; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias) noexcept +void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias) { - CheckSuspensionChanges(); m_Handling.fSuspensionFrontRearBias = fBias; + pGame->GetHandlingManager()->CheckSuspensionChanges(this); } - -void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept +void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive) { - CheckSuspensionChanges(); m_Handling.fSuspensionAntiDiveMultiplier = fAntidive; -} - -void CHandlingEntrySA::CheckSuspensionChanges() noexcept -{ pGame->GetHandlingManager()->CheckSuspensionChanges(this); } diff --git a/Client/game_sa/CHandlingEntrySA.h b/Client/game_sa/CHandlingEntrySA.h index d1836f461ee..ede72766f86 100644 --- a/Client/game_sa/CHandlingEntrySA.h +++ b/Client/game_sa/CHandlingEntrySA.h @@ -1,18 +1,17 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto + * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: Client/game_sa/CHandlingEntrySA.h + * FILE: game_sa/CHandlingEntrySA.h * PURPOSE: Header file for vehicle handling data entry class * - * Multi Theft Auto is available from https://multitheftauto.com/ + * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ #pragma once #include - #define FUNC_HandlingDataMgr_ConvertDataToGameUnits 0x6F5080 // http://www.gtamodding.com/index.php?title=Handling.cfg#GTA_San_Andreas @@ -96,107 +95,111 @@ class CHandlingEntrySA : public CHandlingEntry virtual ~CHandlingEntrySA(); // Use this to copy data from an another handling class to this - void Assign(const CHandlingEntry* pEntry); + void Assign(const CHandlingEntry* pData); // Get functions - float GetMass() const { return m_Handling.fMass; } - float GetTurnMass() const { return m_Handling.fTurnMass; } - float GetDragCoeff() const { return m_Handling.fDragCoeff; } - const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; } + float GetMass() const { return m_Handling.fMass; }; + float GetTurnMass() const { return m_Handling.fTurnMass; }; + float GetDragCoeff() const { return m_Handling.fDragCoeff; }; + const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; }; - unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; } - float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; } + unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; }; + float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; }; - eDriveType GetCarDriveType() const { return static_cast(m_Handling.Transmission.ucDriveType); } - eEngineType GetCarEngineType() const { return static_cast(m_Handling.Transmission.ucEngineType); } - unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; } + eDriveType GetCarDriveType() const { return static_cast(m_Handling.Transmission.ucDriveType); }; + eEngineType GetCarEngineType() const { return static_cast(m_Handling.Transmission.ucEngineType); }; + unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; }; - float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; } - float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; } - float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; } + float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; }; + float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; }; + float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; }; - float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; } - float GetBrakeBias() const { return m_Handling.fBrakeBias; } - bool GetABS() const { return m_Handling.bABS; } + float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; }; + float GetBrakeBias() const { return m_Handling.fBrakeBias; }; + bool GetABS() const { return m_Handling.bABS; }; - float GetSteeringLock() const { return m_Handling.fSteeringLock; } - float GetTractionLoss() const { return m_Handling.fTractionLoss; } - float GetTractionBias() const { return m_Handling.fTractionBias; } + float GetSteeringLock() const { return m_Handling.fSteeringLock; }; + float GetTractionLoss() const { return m_Handling.fTractionLoss; }; + float GetTractionBias() const { return m_Handling.fTractionBias; }; - float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; } - float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; } - float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; } - float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; } - float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; } - float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; } - float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; } + float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; }; + float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; }; + float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; }; + float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; }; + float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; }; + float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; }; + float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; }; - float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; } + float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; }; - unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; } - unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; } - float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; } - unsigned int GetMonetary() const { return m_Handling.uiMonetary; } + unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; }; + unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; }; + float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; }; + unsigned int GetMonetary() const { return m_Handling.uiMonetary; }; - eLightType GetHeadLight() const { return static_cast(m_Handling.ucHeadLight); } - eLightType GetTailLight() const { return static_cast(m_Handling.ucTailLight); } - unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; } + eLightType GetHeadLight() const { return static_cast(m_Handling.ucHeadLight); }; + eLightType GetTailLight() const { return static_cast(m_Handling.ucTailLight); }; + unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; }; - std::uint16_t GetVehicleID() const { return static_cast(m_Handling.iVehicleID); } + eVehicleTypes GetModel() const { return static_cast(m_Handling.iVehicleID); }; + bool HasSuspensionChanged() const { return true; }; // Set functions - void SetMass(float fMass) { m_Handling.fMass = fMass; } - void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; } - void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; } - void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; } + void SetMass(float fMass) { m_Handling.fMass = fMass; }; + void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; }; + void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; }; + void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; }; - void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; } - void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; } + void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; }; + void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; }; - void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; } - void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; } - void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; } + void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; }; + void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; }; + void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; }; - void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; } - void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; } - void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; } + void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; }; + void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; }; + void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; }; - void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; } - void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; } - void SetABS(bool bABS) { m_Handling.bABS = bABS; } + void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; }; + void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; }; + void SetABS(bool bABS) { m_Handling.bABS = bABS; }; - void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; } - void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; } - void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; } + void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; }; + void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; }; + void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; }; - void SetSuspensionForceLevel(float fForce) noexcept; - void SetSuspensionDamping(float fDamping) noexcept; - void SetSuspensionHighSpeedDamping(float fDamping) noexcept; - void SetSuspensionUpperLimit(float fUpperLimit) noexcept; - void SetSuspensionLowerLimit(float fLowerLimit) noexcept; - void SetSuspensionFrontRearBias(float fBias) noexcept; - void SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept; + void SetSuspensionForceLevel(float fForce); + void SetSuspensionDamping(float fDamping); + void SetSuspensionHighSpeedDamping(float fDamping); + void SetSuspensionUpperLimit(float fUpperLimit); + void SetSuspensionLowerLimit(float fLowerLimit); + void SetSuspensionFrontRearBias(float fBias); + void SetSuspensionAntiDiveMultiplier(float fAntidive); - void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; } + void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; }; - void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; } - void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; } - void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; } - void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; } + void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; }; + void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; }; + void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; }; + void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; }; - void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; } - void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; } - void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; } + void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; }; + void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; }; + void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; }; - void CheckSuspensionChanges() noexcept; + void Recalculate(unsigned short usModel); - void Recalculate(); + tHandlingDataSA* GetInterface() { return m_pHandlingSA; }; - tHandlingDataSA* GetInterface() const { return m_pHandlingSA; } + void SetSuspensionChanged(bool bChanged) { m_bChanged = bChanged; }; private: tHandlingDataSA* m_pHandlingSA; bool m_bDeleteInterface; tHandlingDataSA m_Handling; + + tHandlingDataSA* m_pOriginalData; + bool m_bChanged; }; diff --git a/Client/game_sa/CHandlingManagerSA.cpp b/Client/game_sa/CHandlingManagerSA.cpp index e7e3a43bd01..cf37268e961 100644 --- a/Client/game_sa/CHandlingManagerSA.cpp +++ b/Client/game_sa/CHandlingManagerSA.cpp @@ -10,10 +10,10 @@ *****************************************************************************/ #include "StdInc.h" -#include "CGameSA.h" -#include "CHandlingManagerSA.h" #include #include +#include "CHandlingManagerSA.h" +#include "CGameSA.h" extern CCoreInterface* g_pCore; extern CGameSA* pGame; @@ -24,28 +24,27 @@ extern CGameSA* pGame; #define Var_fTurnMassMultiplier 0x858B8C #define Var_fBasicDragCoeff 0x858C58 -#define DUMP_HANDLING_DATA 0 - -// Original handling data unaffected by handling.cfg changes -tHandlingDataSA m_OriginalHandlingData[HT_MAX]; -CHandlingEntrySA* m_pOriginalEntries[HT_MAX]; +DWORD CHandlingManagerSA::m_dwStore_LoadHandlingCfg = 0; -tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24]; -CFlyingHandlingEntrySA* m_pOriginalFlyingEntries[24]; +tHandlingDataSA CHandlingManagerSA::m_OriginalHandlingData[HT_MAX]; +CHandlingEntrySA* CHandlingManagerSA::m_pOriginalEntries[HT_MAX]; -tBoatHandlingDataSA m_OriginalBoatHandlingData[12]; -CBoatHandlingEntrySA* m_pOriginalBoatEntries[12]; +tFlyingHandlingDataSA CHandlingManagerSA::m_OriginalFlyingHandlingData[24]; +CFlyingHandlingEntrySA* CHandlingManagerSA::m_pOriginalFlyingEntries[24]; -tBikeHandlingDataSA m_OriginalBikeHandlingData[14]; -CBikeHandlingEntrySA* m_pOriginalBikeEntries[14]; +tBoatHandlingDataSA CHandlingManagerSA::m_OriginalBoatHandlingData[12]; +CBoatHandlingEntrySA* CHandlingManagerSA::m_pOriginalBoatEntries[12]; -std::map m_HandlingNames; +tBikeHandlingDataSA CHandlingManagerSA::m_OriginalBikeHandlingData[14]; +CBikeHandlingEntrySA* CHandlingManagerSA::m_pOriginalBikeEntries[14]; // TODO We need install a hook in 0x6F52D0 to make some stuff work corrently // Use the following code to dump handling data unrecalculated on GTA load. // NB: You need to disable the other hook in the constructor of the manager and uncomment the other +DWORD m_dwStore_Calculate = 0; + __declspec(noinline) void DumpHandlingData(tHandlingDataSA* pData) { unsigned int iCounter = pData->iVehicleID; @@ -101,17 +100,17 @@ __declspec(noinline) void DumpHandlingData(tHandlingDataSA* pData) fclose(pFile); } -static __declspec(naked) void Hook_Calculate() +__declspec(naked) void Hook_Calculate() { tHandlingDataSA* pData; - DWORD dwHandlingData; + DWORD dwHandlingData; _asm { mov eax, [esp+4] mov dwHandlingData, eax } - pData = reinterpret_cast(dwHandlingData); + pData = (tHandlingDataSA*)(dwHandlingData); DumpHandlingData(pData); _asm @@ -132,30 +131,28 @@ CHandlingManagerSA::CHandlingManagerSA() InitializeDefaultHandlings(); // Create a handling entry for every original handling data. - for (std::size_t i = 0; i < HT_MAX; i++) + for (int i = 0; i < HT_MAX; i++) { m_pOriginalEntries[i] = new CHandlingEntrySA(&m_OriginalHandlingData[i]); } - for (std::size_t i = 0; i < 24; i++) + for (int i = 0; i < 24; i++) { m_pOriginalFlyingEntries[i] = new CFlyingHandlingEntrySA(&m_OriginalFlyingHandlingData[i]); } - for (std::size_t i = 0; i < 12; i++) + for (int i = 0; i < 12; i++) { m_pOriginalBoatEntries[i] = new CBoatHandlingEntrySA(&m_OriginalBoatHandlingData[i]); } - for (std::size_t i = 0; i < 14; i++) + for (int i = 0; i < 14; i++) { m_pOriginalBikeEntries[i] = new CBikeHandlingEntrySA(&m_OriginalBikeHandlingData[i]); } -#if DUMP_HANDLING_DATA - HookInstall(Func_Calculate, (DWORD)Hook_Calculate, 11); -#endif - + // Uncomment this to dump + // HookInstall ( Func_Calculate, (DWORD) Hook_Calculate, 11 ); m_HandlingNames["mass"] = HANDLING_MASS; // works (mass > 0) m_HandlingNames["turnMass"] = HANDLING_TURNMASS; // works m_HandlingNames["dragCoeff"] = HANDLING_DRAGCOEFF; // works @@ -189,33 +186,35 @@ CHandlingManagerSA::CHandlingManagerSA() m_HandlingNames["headLight"] = HANDLING_HEADLIGHT; // doesn't work m_HandlingNames["tailLight"] = HANDLING_TAILLIGHT; // doesn't seem to work* m_HandlingNames["animGroup"] = HANDLING_ANIMGROUP; // works model based + + iChangedVehicles = 0; } CHandlingManagerSA::~CHandlingManagerSA() { // Destroy all original handling entries - for (std::size_t i = 0; i < HT_MAX; i++) + for (int i = 0; i < HT_MAX; i++) { delete m_pOriginalEntries[i]; } - for (std::size_t i = 0; i < 24; i++) + for (int i = 0; i < 24; i++) { delete m_pOriginalFlyingEntries[i]; } - for (std::size_t i = 0; i < 12; i++) + for (int i = 0; i < 12; i++) { delete m_pOriginalBoatEntries[i]; } - for (std::size_t i = 0; i < 14; i++) + for (int i = 0; i < 14; i++) { delete m_pOriginalBikeEntries[i]; } } -eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& strName) const +eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& strName) { const auto it = m_HandlingNames.find(strName); return it != m_HandlingNames.end() ? it->second : HANDLING_MAX; @@ -241,26 +240,26 @@ CBikeHandlingEntry* CHandlingManagerSA::CreateBikeHandlingData() return new CBikeHandlingEntrySA; } -const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(eVehicleTypes eModel) const +const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(eVehicleTypes eModel) { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - const eHandlingTypes eHandling = GetHandlingID(eModel); + eHandlingTypes eHandling = GetHandlingID(eModel); // Return it return m_pOriginalEntries[eHandling]; } -const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eVehicleTypes eModel) const +const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eVehicleTypes eModel) { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - const eHandlingTypes eHandling = GetHandlingID(eModel); + eHandlingTypes eHandling = GetHandlingID(eModel); // Original GTA:SA behavior if (eHandling < HT_SEAPLANE || eHandling > HT_RCRAIDER) return m_pOriginalFlyingEntries[0]; @@ -268,14 +267,14 @@ const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eV return m_pOriginalFlyingEntries[eHandling - HT_SEAPLANE]; } -const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehicleTypes eModel) const +const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehicleTypes eModel) { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - const eHandlingTypes eHandling = GetHandlingID(eModel); + eHandlingTypes eHandling = GetHandlingID(eModel); // Original GTA:SA behavior if (eHandling < HT_PREDATOR || eHandling > HT_SEAPLANE) return m_pOriginalBoatEntries[0]; @@ -283,14 +282,14 @@ const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehic return m_pOriginalBoatEntries[eHandling - HT_PREDATOR]; } -const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehicleTypes eModel) const +const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehicleTypes eModel) { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - const eHandlingTypes eHandling = GetHandlingID(eModel); + eHandlingTypes eHandling = GetHandlingID(eModel); if (eHandling >= HT_BIKE && eHandling <= HT_FREEWAY) return m_pOriginalBikeEntries[eHandling - HT_BIKE]; else if (eHandling == HT_FAGGIO) @@ -300,7 +299,7 @@ const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehic } // Return the handling manager id -eHandlingTypes CHandlingManagerSA::GetHandlingID(eVehicleTypes eModel) const +eHandlingTypes CHandlingManagerSA::GetHandlingID(eVehicleTypes eModel) { switch (eModel) { @@ -9154,29 +9153,17 @@ void CHandlingManagerSA::InitializeDefaultHandlings() m_OriginalBikeHandlingData[13].iVehicleID = 214; } -void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept +void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) { - // Valid? - if (!pEntry) - return; - // Grab us a multiplayer_sa pointer - CMultiplayer* const pMultiplayer = g_pCore->GetMultiplayer(); - if (!pMultiplayer) - return; - - // Get Handling ID - const eHandlingTypes eHandling = static_cast(pEntry->GetVehicleID()); - if (eHandling > HT_MAX) - return; - - const CHandlingEntrySA* pOriginal = m_pOriginalEntries[eHandling]; - if (!pOriginal) - return; - + CMultiplayer* pMultiplayer = g_pCore->GetMultiplayer(); + eVehicleTypes eModel = pEntry->GetModel(); + // Find our original data + CHandlingEntrySA* pOriginal = m_pOriginalEntries[eModel]; // Default bChanged to false bool bChanged = false; + // loads of if statements because I'm pro like that... na j/k // Set bChanged to true if we find ANY change. if (pEntry->GetSuspensionAntiDiveMultiplier() != pOriginal->GetSuspensionAntiDiveMultiplier()) bChanged = true; @@ -9199,8 +9186,35 @@ void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept if (pEntry->GetSuspensionUpperLimit() != pOriginal->GetSuspensionUpperLimit()) bChanged = true; - if (!bChanged) - return; + // Is bChanged true and the suspension flag changed marker false + if (bChanged && !pEntry->HasSuspensionChanged()) + { + // Is our hook uninstalled? + if (!pMultiplayer->IsSuspensionEnabled()) + // Install the hook + pMultiplayer->SetSuspensionEnabled(true); + + // Increment iChangedVehicles + iChangedVehicles++; + // Set our Suspension Changed flag + pEntry->SetSuspensionChanged(true); + } + // is bChanged false and is this model supposed to contain non-default info? (i.e. they just reverted) + else if (!bChanged && pEntry->HasSuspensionChanged()) + { + // Decrement iChangedVehicles + iChangedVehicles--; + // Set the suspension Changed flag to false + pEntry->SetSuspensionChanged(false); + } + + // if we hit 0 vehicles installed and it's installed uninstall the hook + if (iChangedVehicles == 0 && pMultiplayer->IsSuspensionEnabled()) + pMultiplayer->SetSuspensionEnabled(false); +} - pMultiplayer->UpdateVehicleSuspension(); +void CHandlingManagerSA::RemoveChangedVehicle() +{ + // Decrement the count + iChangedVehicles--; } diff --git a/Client/game_sa/CHandlingManagerSA.h b/Client/game_sa/CHandlingManagerSA.h index 52ce90c9f34..fe024b1041e 100644 --- a/Client/game_sa/CHandlingManagerSA.h +++ b/Client/game_sa/CHandlingManagerSA.h @@ -28,17 +28,36 @@ class CHandlingManagerSA : public CHandlingManager CBoatHandlingEntry* CreateBoatHandlingData(); CBikeHandlingEntry* CreateBikeHandlingData(); - const CHandlingEntry* GetOriginalHandlingData(eVehicleTypes eModel) const; - const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(eVehicleTypes eModel) const; - const CBoatHandlingEntry* GetOriginalBoatHandlingData(eVehicleTypes eModel) const; - const CBikeHandlingEntry* GetOriginalBikeHandlingData(eVehicleTypes eModel) const; + const CHandlingEntry* GetOriginalHandlingData(eVehicleTypes eModel); + const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(eVehicleTypes eModel); + const CBoatHandlingEntry* GetOriginalBoatHandlingData(eVehicleTypes eModel); + const CBikeHandlingEntry* GetOriginalBikeHandlingData(eVehicleTypes eModel); - eHandlingProperty GetPropertyEnumFromName(const std::string& strName) const; + eHandlingTypes GetHandlingID(eVehicleTypes eModel); - void CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept; + eHandlingProperty GetPropertyEnumFromName(const std::string& strName); + + void CheckSuspensionChanges(CHandlingEntry* pEntry); + void RemoveChangedVehicle(); private: void InitializeDefaultHandlings(); - eHandlingTypes GetHandlingID(eVehicleTypes eModel) const; + static DWORD m_dwStore_LoadHandlingCfg; + + // Original handling data unaffected by handling.cfg changes + static tHandlingDataSA m_OriginalHandlingData[HT_MAX]; + static CHandlingEntrySA* m_pOriginalEntries[HT_MAX]; + + static tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24]; + static CFlyingHandlingEntrySA* m_pOriginalFlyingEntries[24]; + + static tBoatHandlingDataSA m_OriginalBoatHandlingData[12]; + static CBoatHandlingEntrySA* m_pOriginalBoatEntries[12]; + + static tBikeHandlingDataSA m_OriginalBikeHandlingData[14]; + static CBikeHandlingEntrySA* m_pOriginalBikeEntries[14]; + + std::map m_HandlingNames; + int iChangedVehicles; }; diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 483615d3e14..5dc00712daa 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -440,16 +440,6 @@ void CModelInfoSA::Remove() } } -bool CModelInfoSA::UnloadUnused() -{ - if (m_pInterface->usNumberOfRefs == 0 && !m_pCustomClump && !m_pCustomColModel) - { - pGame->GetStreaming()->RemoveModel(m_dwModelID); - return true; - } - return false; -} - bool CModelInfoSA::IsLoaded() { if (DoIsLoaded()) @@ -1045,7 +1035,7 @@ void CModelInfoSA::StaticFlushPendingRestreamIPL() for (it = removedModels.begin(); it != removedModels.end(); it++) { pGame->GetStreaming()->RemoveModel(*it); - pGame->GetStreaming()->GetStreamingInfo(*it)->loadState = eModelLoadState::LOADSTATE_NOT_LOADED; + pGame->GetStreaming()->GetStreamingInfo(*it)->loadState = 0; } } diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index b261bcc04a1..329d2e3e50f 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -362,7 +362,6 @@ class CModelInfoSA : public CModelInfo BYTE GetVehicleType(); void Request(EModelRequestType requestType, const char* szTag); void Remove(); - bool UnloadUnused(); bool IsLoaded(); bool DoIsLoaded(); unsigned short GetFlags(); diff --git a/Client/game_sa/CPoolsSA.cpp b/Client/game_sa/CPoolsSA.cpp index 42c534dcaae..2be6742617c 100644 --- a/Client/game_sa/CPoolsSA.cpp +++ b/Client/game_sa/CPoolsSA.cpp @@ -128,8 +128,6 @@ CVehicle* CPoolsSA::AddVehicle(CClientVehicle* pClientVehicle, eVehicleTypes eVe { pVehicle->m_ucVariant = ucVariation; pVehicle->m_ucVariant2 = ucVariation2; - - pVehicle->DumpVehicleFrames(); } else { diff --git a/Client/game_sa/CVehicleSA.cpp b/Client/game_sa/CVehicleSA.cpp index 91fb5440e02..c2c612d5c7a 100644 --- a/Client/game_sa/CVehicleSA.cpp +++ b/Client/game_sa/CVehicleSA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto + * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: Client/game_sa/CVehicleSA.cpp + * FILE: game_sa/CVehicleSA.cpp * PURPOSE: Vehicle base entity * - * Multi Theft Auto is available from https://multitheftauto.com/ + * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ @@ -186,6 +186,12 @@ void CVehicleSA::Init() } CopyGlobalSuspensionLinesToPrivate(); + + // clear our rw frames list + m_ExtraFrames.clear(); + // dump the frames + VehicleDump(this); + FinalizeFramesList(); } CVehicleSA::~CVehicleSA() @@ -1314,7 +1320,7 @@ void CVehicleSA::RecalculateHandling() if (!m_pHandlingData) return; - m_pHandlingData->Recalculate(); + m_pHandlingData->Recalculate(GetModelIndex()); // Recalculate the suspension lines RecalculateSuspensionLines(); @@ -1693,6 +1699,11 @@ void CVehicleSA::CopyGlobalSuspensionLinesToPrivate() void CVehicleSA::RecalculateSuspensionLines() { CHandlingEntry* pHandlingEntry = GetHandlingData(); + // if suspension is master disabled or suspension hasn't changed return. + // if ( g_pCore->GetMultiplayer ()->IsSuspensionEnabled () == false || pHandlingEntry->HasSuspensionChanged ( ) == false ) + //{ + // return; + //} DWORD dwModel = GetModelIndex(); CModelInfo* pModelInfo = pGame->GetModelInfo(dwModel); @@ -1943,7 +1954,6 @@ void CVehicleSA::AddComponent(RwFrame* pFrame, bool bReadOnly) // if the frame is invalid we don't want to be here if (!pFrame) return; - // if the frame already exists ignore it if (IsComponentPresent(pFrame->szName) || pFrame->szName == "") return; @@ -1952,22 +1962,23 @@ void CVehicleSA::AddComponent(RwFrame* pFrame, bool bReadOnly) // variants have no name field. if (strName == "") { - // In MTA variant 255 means no variant - if ((m_ucVariantCount == 0 && m_ucVariant == 255) || (m_ucVariantCount == 1 && m_ucVariant2 == 255)) - return; - // name starts with extra strName = "extra_"; - - // variants are extra_a - extra_f - strName += 'a' + (m_ucVariantCount == 0 ? m_ucVariant : m_ucVariant2); - + if (m_ucVariantCount == 0) + { + // variants are extra_a, extra_b and so on + strName += ('a' - 1) + m_ucVariant; + } + if (m_ucVariantCount == 1) + { + // variants are extra_a, extra_b and so on + strName += ('a' - 1) + m_ucVariant2; + } // increment the variant count ( we assume that the first variant created is variant1 and the second is variant2 ) m_ucVariantCount++; } - - // insert our new frame SVehicleFrame frame = SVehicleFrame(pFrame, bReadOnly); + // insert our new frame m_ExtraFrames.insert(std::pair(strName, frame)); } @@ -1995,16 +2006,6 @@ void CVehicleSA::FinalizeFramesList() } } -void CVehicleSA::DumpVehicleFrames() -{ - // clear our rw frames list - m_ExtraFrames.clear(); - - // dump the frames - VehicleDump(this); - FinalizeFramesList(); -} - bool CVehicleSA::SetComponentVisible(const SString& vehicleComponent, bool bRequestVisible) { SVehicleFrame* pComponent = GetVehicleComponent(vehicleComponent); diff --git a/Client/game_sa/CVehicleSA.h b/Client/game_sa/CVehicleSA.h index 58632dabbf3..f9847d4c33f 100644 --- a/Client/game_sa/CVehicleSA.h +++ b/Client/game_sa/CVehicleSA.h @@ -687,5 +687,4 @@ class CVehicleSA : public virtual CVehicle, public virtual CPhysicalSA void CopyGlobalSuspensionLinesToPrivate(); SVehicleFrame* GetVehicleComponent(const SString& vehicleComponent); void FinalizeFramesList(); - void DumpVehicleFrames(); }; diff --git a/Client/game_sa/CWeatherSA.h b/Client/game_sa/CWeatherSA.h index 31898204fa6..8e6d970d1d5 100644 --- a/Client/game_sa/CWeatherSA.h +++ b/Client/game_sa/CWeatherSA.h @@ -60,4 +60,5 @@ class CWeatherSA : public CWeather static unsigned char* VAR_CWeather__OldWeatherType; static unsigned char* VAR_CWeather__NewWeatherType; static float* VAR_CWeather__Rain; + }; diff --git a/Client/mods/deathmatch/ClientCommands.cpp b/Client/mods/deathmatch/ClientCommands.cpp index 6ca4d736253..d2db3905df9 100644 --- a/Client/mods/deathmatch/ClientCommands.cpp +++ b/Client/mods/deathmatch/ClientCommands.cpp @@ -29,7 +29,7 @@ using std::vector; extern CClientGame* g_pClientGame; -bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind, bool bAllowScriptedBind) +bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind) { // Has the core already handled this command? if (!bHandled) @@ -95,16 +95,8 @@ bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHand } else { - // Call the onClientCoreCommand event - CLuaArguments Arguments; - Arguments.PushString(szCommand); - - auto pLocalPlayer = g_pClientGame->GetLocalPlayer(); - pLocalPlayer->CallEvent("onClientCoreCommand", Arguments, true); - - // Call our comand-handlers for core-executed commands too, if allowed - if (bAllowScriptedBind) - g_pClientGame->GetRegisteredCommands()->ProcessCommand(szCommand, szArguments); + // Call our comand-handlers for core-executed commands too + g_pClientGame->GetRegisteredCommands()->ProcessCommand(szCommand, szArguments); } return false; } diff --git a/Client/mods/deathmatch/ClientCommands.h b/Client/mods/deathmatch/ClientCommands.h index c6aa7550996..d2bb6ea71a4 100644 --- a/Client/mods/deathmatch/ClientCommands.h +++ b/Client/mods/deathmatch/ClientCommands.h @@ -11,7 +11,7 @@ #pragma once -bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind, bool bAllowScriptedBind); +bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind); void COMMAND_Help(const char* szCmdLine); void COMMAND_Disconnect(const char* szCmdLine); diff --git a/Client/mods/deathmatch/logic/CClientBuilding.cpp b/Client/mods/deathmatch/logic/CClientBuilding.cpp index 61947a6bab3..68d435011c0 100644 --- a/Client/mods/deathmatch/logic/CClientBuilding.cpp +++ b/Client/mods/deathmatch/logic/CClientBuilding.cpp @@ -24,7 +24,6 @@ CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, u m_pLowBuilding(nullptr) { m_pManager = pManager; - m_pModelInfo = g_pGame->GetModelInfo(usModelId); SetTypeName("building"); m_pBuildingManager->AddToList(this); Create(); @@ -100,7 +99,6 @@ void CClientBuilding::SetModel(uint16_t model) if (CClientBuildingManager::IsValidModel(model)) { m_usModelId = model; - m_pModelInfo = g_pGame->GetModelInfo(model); Recreate(); } } @@ -145,7 +143,7 @@ void CClientBuilding::Destroy() if (!m_pBuilding) return; - if (m_pHighBuilding && m_pHighBuilding->IsValid()) + if (m_pHighBuilding) { m_pHighBuilding->GetBuildingEntity()->SetLod(nullptr); } diff --git a/Client/mods/deathmatch/logic/CClientBuildingManager.cpp b/Client/mods/deathmatch/logic/CClientBuildingManager.cpp index 243917b89f0..198fd23ed2c 100644 --- a/Client/mods/deathmatch/logic/CClientBuildingManager.cpp +++ b/Client/mods/deathmatch/logic/CClientBuildingManager.cpp @@ -98,38 +98,9 @@ void CClientBuildingManager::DestroyAllForABit() void CClientBuildingManager::RestoreDestroyed() { - bool hasInvalidLods = true; - while (hasInvalidLods) + for (CClientBuilding* building : GetBuildings()) { - hasInvalidLods = false; - for (CClientBuilding* building : GetBuildings()) - { - const CClientBuilding* highLodBuilding = building->GetHighLodBuilding(); - if (highLodBuilding && !highLodBuilding->IsValid()) - { - hasInvalidLods = true; - } - else - { - CModelInfo* modelInfo = building->GetModelInfo(); - const uint16_t physicalGroup = modelInfo->GetObjectPropertiesGroup(); - - if (physicalGroup == -1) - { - building->Create(); - } - else - { - // GTA creates dynamic models as dummies. - // It's possible that the physical group was changes after - // creating a new building. We can avoid crashes in this case. - modelInfo->SetObjectPropertiesGroup(-1); - building->Create(); - modelInfo->SetObjectPropertiesGroup(physicalGroup); - } - - } - } + building->Create(); } } diff --git a/Client/mods/deathmatch/logic/CClientCamera.cpp b/Client/mods/deathmatch/logic/CClientCamera.cpp index 663d52828e3..292b7dbeeee 100644 --- a/Client/mods/deathmatch/logic/CClientCamera.cpp +++ b/Client/mods/deathmatch/logic/CClientCamera.cpp @@ -639,8 +639,3 @@ void CClientCamera::ShakeCamera(float radius, float x, float y, float z) noexcep { m_pCamera->ShakeCamera(radius, x, y, z); } - -void CClientCamera::ResetShakeCamera() noexcept -{ - m_pCamera->ResetShakeCamera(); -} \ No newline at end of file diff --git a/Client/mods/deathmatch/logic/CClientCamera.h b/Client/mods/deathmatch/logic/CClientCamera.h index c49246098cf..7fa36ce0490 100644 --- a/Client/mods/deathmatch/logic/CClientCamera.h +++ b/Client/mods/deathmatch/logic/CClientCamera.h @@ -65,7 +65,6 @@ class CClientCamera final : public CClientEntity void Reset(); void ShakeCamera(float radius, float x, float y, float z) noexcept; - void ResetShakeCamera() noexcept; void SetCameraVehicleViewMode(eVehicleCamMode eMode); void SetCameraPedViewMode(ePedCamMode eMode); diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index 51ac6b2c4ab..f3fe9e2f66c 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -33,7 +33,6 @@ #include #include #include -#include "game/CClock.h" #include #include "CServerInfo.h" @@ -2706,7 +2705,6 @@ void CClientGame::AddBuiltInEvents() // Console events m_Events.AddEvent("onClientConsole", "text", NULL, false); - m_Events.AddEvent("onClientCoreCommand", "command", NULL, false); // Chat events m_Events.AddEvent("onClientChatMessage", "text, r, g, b, messageType", NULL, false); @@ -5409,7 +5407,6 @@ void CClientGame::ResetMapInfo() // Hud g_pGame->GetHud()->SetComponentVisible(HUD_ALL, true); - // Disable area names as they are on load until camera unfades g_pGame->GetHud()->SetComponentVisible(HUD_AREA_NAME, false); g_pGame->GetHud()->SetComponentVisible(HUD_VITAL_STATS, false); @@ -5551,9 +5548,6 @@ void CClientGame::ResetMapInfo() // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); - // Reset Frozen Time - g_pGame->GetClock()->ResetTimeFrozen(); - // Close all garages CGarage* pGarage = NULL; CGarages* pGarages = g_pCore->GetGame()->GetGarages(); @@ -5596,7 +5590,7 @@ void CClientGame::ResetMapInfo() if (pPlayerInfo) pPlayerInfo->SetCamDrunkLevel(static_cast(0)); - RestreamWorld(); + RestreamWorld(true); ReinitMarkers(); } @@ -6819,7 +6813,7 @@ void CClientGame::RestreamModel(unsigned short usModel) m_pManager->GetVehicleManager()->RestreamVehicleUpgrades(usModel); } -void CClientGame::RestreamWorld() +void CClientGame::RestreamWorld(bool removeBigBuildings) { unsigned int numberOfFileIDs = g_pGame->GetCountOfAllFileIDs(); @@ -6832,7 +6826,9 @@ void CClientGame::RestreamWorld() m_pManager->GetPedManager()->RestreamAllPeds(); m_pManager->GetPickupManager()->RestreamAllPickups(); - g_pGame->GetStreaming()->RemoveBigBuildings(); + if (removeBigBuildings) + g_pGame->GetStreaming()->RemoveBigBuildings(); + g_pGame->GetStreaming()->ReinitStreaming(); } diff --git a/Client/mods/deathmatch/logic/CClientGame.h b/Client/mods/deathmatch/logic/CClientGame.h index f2c290d94ca..9d884a69f9e 100644 --- a/Client/mods/deathmatch/logic/CClientGame.h +++ b/Client/mods/deathmatch/logic/CClientGame.h @@ -441,7 +441,7 @@ class CClientGame bool TriggerBrowserRequestResultEvent(const std::unordered_set& newPages); void RestreamModel(unsigned short usModel); - void RestreamWorld(); + void RestreamWorld(bool removeBigBuildings); void ReinitMarkers(); void OnWindowFocusChange(bool state); diff --git a/Client/mods/deathmatch/logic/CClientIMG.cpp b/Client/mods/deathmatch/logic/CClientIMG.cpp index 5abd8b07e66..61ff89fa4c1 100644 --- a/Client/mods/deathmatch/logic/CClientIMG.cpp +++ b/Client/mods/deathmatch/logic/CClientIMG.cpp @@ -191,7 +191,7 @@ bool CClientIMG::StreamDisable() m_pImgManager->UpdateStreamerBufferSize(); - g_pClientGame->RestreamWorld(); + g_pClientGame->RestreamWorld(true); return true; } diff --git a/Client/mods/deathmatch/logic/CClientModel.cpp b/Client/mods/deathmatch/logic/CClientModel.cpp index 2a9eeb0c8d3..795bc08579c 100644 --- a/Client/mods/deathmatch/logic/CClientModel.cpp +++ b/Client/mods/deathmatch/logic/CClientModel.cpp @@ -84,9 +84,6 @@ bool CClientModel::Deallocate() if (!m_bAllocatedByUs) return false; - if (m_pParentResource) - m_pParentResource->GetResourceModelStreamer()->FullyReleaseModel(m_iModelID); - SetParentResource(nullptr); CModelInfo* pModelInfo = g_pGame->GetModelInfo(m_iModelID, true); diff --git a/Client/mods/deathmatch/logic/CClientVehicle.cpp b/Client/mods/deathmatch/logic/CClientVehicle.cpp index b1b00cfba33..42b2215adcf 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.cpp +++ b/Client/mods/deathmatch/logic/CClientVehicle.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -5032,17 +5031,3 @@ void CClientVehicle::ResetWheelScale() m_bWheelScaleChanged = false; } - -CVector CClientVehicle::GetEntryPoint(std::uint32_t entryPointIndex) -{ - static const uint32_t lookup[4] = {10, 8, 11, 9}; - assert(entryPointIndex < 4); - const std::uint32_t saDoorIndex = lookup[entryPointIndex]; - - CVector entryPoint; - CVehicle* gameVehicle = GetGameVehicle(); - - g_pGame->GetCarEnterExit()->GetPositionToOpenCarDoor(entryPoint, gameVehicle, saDoorIndex); - - return entryPoint; -} diff --git a/Client/mods/deathmatch/logic/CClientVehicle.h b/Client/mods/deathmatch/logic/CClientVehicle.h index e2c83c618ef..ff87ef00dc2 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.h +++ b/Client/mods/deathmatch/logic/CClientVehicle.h @@ -543,8 +543,6 @@ class CClientVehicle : public CClientStreamElement bool SetDummyPosition(eVehicleDummies dummy, const CVector& position); bool ResetDummyPositions(); - CVector GetEntryPoint(std::uint32_t entryPointIndex); - protected: void ConvertComponentRotationBase(const SString& vehicleComponent, CVector& vecInOutRotation, EComponentBaseType inputBase, EComponentBaseType outputBase); void ConvertComponentPositionBase(const SString& vehicleComponent, CVector& vecInOutPosition, EComponentBaseType inputBase, EComponentBaseType outputBase); diff --git a/Client/mods/deathmatch/logic/CResource.cpp b/Client/mods/deathmatch/logic/CResource.cpp index dcf119ce468..c1b5fdf9e7b 100644 --- a/Client/mods/deathmatch/logic/CResource.cpp +++ b/Client/mods/deathmatch/logic/CResource.cpp @@ -94,9 +94,6 @@ CResource::CResource(unsigned short usNetID, const char* szResourceName, CClient CResource::~CResource() { - // Remove refrences from requested models - m_modelStreamer.ReleaseAll(); - // Deallocate all models that this resource allocated earlier g_pClientGame->GetManager()->GetModelManager()->DeallocateModelsAllocatedByResource(this); diff --git a/Client/mods/deathmatch/logic/CResource.h b/Client/mods/deathmatch/logic/CResource.h index 8100d3fc79e..99df87fc3c3 100644 --- a/Client/mods/deathmatch/logic/CResource.h +++ b/Client/mods/deathmatch/logic/CResource.h @@ -15,7 +15,6 @@ #include "CClientEntity.h" #include "CResourceConfigItem.h" #include "CResourceFile.h" -#include "CResourceModelStreamer.h" #include "CElementGroup.h" #include @@ -80,8 +79,6 @@ class CResource CClientEntity* GetResourceIFPRoot() { return m_pResourceIFPRoot; }; CClientEntity* GetResourceIMGRoot() { return m_pResourceIMGRoot; }; - CResourceModelStreamer* GetResourceModelStreamer() { return &m_modelStreamer; }; - // This is to delete all the elements created in this resource that are created locally in this client void DeleteClientChildren(); @@ -148,6 +145,4 @@ class CResource CFastHashSet m_exportedFunctions; CElementGroup* m_pDefaultElementGroup; // stores elements created by scripts in this resource std::list m_NoClientCacheScriptList; - - CResourceModelStreamer m_modelStreamer{}; }; diff --git a/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp b/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp deleted file mode 100644 index 9c58219d8b3..00000000000 --- a/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/***************************************************************************** - * - * PROJECT: Multi Theft Auto - * LICENSE: See LICENSE in the top level directory - * FILE: mods/deathmatch/logic/CResourceModelStreamer.cpp - * PURPOSE: Resource model manager - * - * Multi Theft Auto is available from https://www.multitheftauto.com/ - * - *****************************************************************************/ - -#include "StdInc.h" - -#include "CResourceModelStreamer.h" -#include "CClientGame.h" -#include - -bool CResourceModelStreamer::RequestModel(std::uint16_t modelId, bool addRef, bool blocking) -{ - CModelInfo* model = g_pGame->GetModelInfo(modelId); - - if (!model) - return false; - - if (addRef) - { - std::uint16_t refsCount = ++m_requestedModels[modelId]; - if (refsCount == 1) - { - model->ModelAddRef(blocking ? EModelRequestType::BLOCKING : EModelRequestType::NON_BLOCKING, "CResourceModelStreamer::RequestModel With reference"); - return true; - } - return false; - } - else - { - if (model->IsLoaded()) - { - return false; - } - else - { - model->Request(blocking ? EModelRequestType::BLOCKING : EModelRequestType::NON_BLOCKING, "CResourceModelStreamer::RequestModel With out reference"); - return true; - } - } -} - -// Return true if model was unloaded -bool CResourceModelStreamer::ReleaseModel(std::uint16_t modelId, bool removeRef) -{ - if (removeRef) - { - auto refs = m_requestedModels.find(modelId); - if (refs == m_requestedModels.end()) - return false; - - std::uint16_t& refsCount = (*refs).second; - - if (refsCount == 0) - return false; - - refsCount--; - - if (refsCount != 0) - return false; - - CModelInfo* model = g_pGame->GetModelInfo(modelId); - - if (!model) - return false; - - // Hack - // This check will update models pending references - model->IsLoaded(); - - // This call can unload the model - model->RemoveRef(); - - return !model->IsLoaded(); - } - else - { - CModelInfo* model = g_pGame->GetModelInfo(modelId); - - if (!model) - return false; - - return model->UnloadUnused(); - } -} - -void CResourceModelStreamer::ReleaseAll() -{ - for (const auto &modelRefs : m_requestedModels) - { - if (modelRefs.second > 0) - { - CModelInfo* model = g_pGame->GetModelInfo(modelRefs.first); - model->RemoveRef(); - } - } - - m_requestedModels.clear(); -} - -void CResourceModelStreamer::FullyReleaseModel(std::uint16_t modelId) -{ - std::uint16_t &refsCount = m_requestedModels[modelId]; - - if (refsCount > 0) - { - refsCount = 0; - - CModelInfo* model = g_pGame->GetModelInfo(modelId); - - if (!model) - return; - - model->RemoveRef(); - } -} diff --git a/Client/mods/deathmatch/logic/CResourceModelStreamer.h b/Client/mods/deathmatch/logic/CResourceModelStreamer.h deleted file mode 100644 index fa72720b37e..00000000000 --- a/Client/mods/deathmatch/logic/CResourceModelStreamer.h +++ /dev/null @@ -1,30 +0,0 @@ -/***************************************************************************** - * - * PROJECT: Multi Theft Auto - * LICENSE: See LICENSE in the top level directory - * FILE: mods/deathmatch/logic/CResourceModelStreamer.h - * PURPOSE: Resource model manager - * - * Multi Theft Auto is available from https://www.multitheftauto.com/ - * - *****************************************************************************/ - -#pragma once - -#include - -class CResourceModelStreamer -{ -public: - CResourceModelStreamer() = default; - ~CResourceModelStreamer() = default; - - bool RequestModel(std::uint16_t modelId, bool addRef = false, bool blocking = false); - bool ReleaseModel(std::uint16_t modelId, bool removeRef = false); - - void ReleaseAll(); - void FullyReleaseModel(std::uint16_t modelId); - -private: - std::unordered_map m_requestedModels; -}; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 4fae81c6c2e..7aa792bf398 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -1465,8 +1465,13 @@ bool CStaticFunctionDefinitions::SetElementHealth(CClientEntity& Entity, float f // Grab the model CClientPed& Ped = static_cast(Entity); + // Limit to max health + float fMaxHealth = Ped.GetMaxHealth(); + if (fHealth > fMaxHealth) + fHealth = fMaxHealth; + // Set the new health - Ped.SetHealth(Clamp(0.0f, fHealth, Ped.GetMaxHealth())); + Ped.SetHealth(fHealth); return true; break; } diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 8d2d3a891d6..70902037048 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -896,14 +896,6 @@ ADD_ENUM(WEATHER_SANDSTORM, "Sandstorm") ADD_ENUM(WEATHER_RAINBOW, "Rainbow") IMPLEMENT_ENUM_END("world-property") -IMPLEMENT_ENUM_CLASS_BEGIN(eModelLoadState) -ADD_ENUM(eModelLoadState::LOADSTATE_NOT_LOADED, "unloaded") -ADD_ENUM(eModelLoadState::LOADSTATE_LOADED, "loaded") -ADD_ENUM(eModelLoadState::LOADSTATE_REQUESTED, "requested") -ADD_ENUM(eModelLoadState::LOADSTATE_READING, "reading") -ADD_ENUM(eModelLoadState::LOADSTATE_FINISHING, "finishing") -IMPLEMENT_ENUM_CLASS_END("model-load-state") - // // CResource from userdata // diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 1b75369d02d..9b93980d85e 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -13,7 +13,6 @@ #include #include #include -#include #include enum eLuaType @@ -86,7 +85,6 @@ DECLARE_ENUM_CLASS(eRenderStage); DECLARE_ENUM_CLASS(eFxParticleSystems); DECLARE_ENUM(ePools); DECLARE_ENUM(eWorldProperty); -DECLARE_ENUM_CLASS(eModelLoadState); class CRemoteCall; diff --git a/Client/mods/deathmatch/logic/lua/CLuaMain.h b/Client/mods/deathmatch/logic/lua/CLuaMain.h index 3839e5995e8..abe2c96cf10 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaMain.h +++ b/Client/mods/deathmatch/logic/lua/CLuaMain.h @@ -59,7 +59,7 @@ class CLuaMain //: public CClient void ResetInstructionCount(); - class CResource* GetResource() const { return m_pResource; } + class CResource* GetResource() { return m_pResource; } CXMLFile* CreateXML(const char* szFilename, bool bUseIDs = true, bool bReadOnly = false); CXMLNode* ParseString(const char* strXmlContent); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp index 2d9c268dc36..163aee9daf5 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp @@ -43,7 +43,6 @@ void CLuaCameraDefs::LoadFunctions() {"setCameraDrunkLevel", ArgumentParserWarn}, {"shakeCamera", ArgumentParser}, - {"resetShakeCamera", ArgumentParser}, }; // Add functions @@ -562,9 +561,3 @@ bool CLuaCameraDefs::ShakeCamera(float radius, std::optional x, std::opti return true; } - -bool CLuaCameraDefs::ResetShakeCamera() noexcept -{ - m_pManager->GetCamera()->ResetShakeCamera(); - return true; -} \ No newline at end of file diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h index b233d4e39c8..b772e5183c2 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h @@ -45,7 +45,6 @@ class CLuaCameraDefs : public CLuaDefs // Cam do funcs static bool ShakeCamera(float radius, std::optional x, std::optional y, std::optional z) noexcept; - static bool ResetShakeCamera() noexcept; // For OOP only LUA_DECLARE(OOP_GetCameraPosition); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 530b6e58a31..415227890f9 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -14,7 +14,6 @@ #include #include #include -#include "CLuaEngineDefs.h" //! Set the CModelCacheManager limits //! By passing `nil`/no value the original values are restored @@ -136,9 +135,6 @@ void CLuaEngineDefs::LoadFunctions() {"engineStreamingSetBufferSize", ArgumentParser}, {"engineStreamingGetBufferSize", ArgumentParser}, {"engineStreamingRestoreBufferSize", ArgumentParser}, - {"engineStreamingRequestModel", ArgumentParser}, - {"engineStreamingReleaseModel", ArgumentParser}, - {"engineStreamingGetModelLoadState", ArgumentParser}, {"engineRequestTXD", ArgumentParser}, {"engineFreeTXD", ArgumentParser}, {"engineGetPoolCapacity", ArgumentParser}, @@ -1050,14 +1046,12 @@ int CLuaEngineDefs::EngineGetModelLODDistance(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelLODDistance(lua_State* luaVM) { - // bool engineSetModelLODDistance ( int/string modelID, float distance [, bool extendedLod = false ]) + // bool engineSetModelLODDistance ( int/string modelID, float distance ) SString strModelId; float fDistance; - bool extendedLod; CScriptArgReader argStream(luaVM); argStream.ReadString(strModelId); argStream.ReadNumber(fDistance); - argStream.ReadBool(extendedLod, false); if (!argStream.HasErrors()) { @@ -1068,7 +1062,7 @@ int CLuaEngineDefs::EngineSetModelLODDistance(lua_State* luaVM) CModelInfo* pModelInfo = g_pGame->GetModelInfo(usModelID); if (pModelInfo && fDistance > 0.0f) { - pModelInfo->SetLODDistance(fDistance, extendedLod); + pModelInfo->SetLODDistance(fDistance); lua_pushboolean(luaVM, true); return 1; } @@ -2434,9 +2428,14 @@ bool CLuaEngineDefs::EngineResetModelFlags(uint uiModelID) return false; } -bool CLuaEngineDefs::EngineRestreamWorld() +bool CLuaEngineDefs::EngineRestreamWorld(lua_State* const luaVM) { - g_pClientGame->RestreamWorld(); + bool restreamLODs{}; + + CScriptArgReader argStream(luaVM); + argStream.ReadBool(restreamLODs, false); + + g_pClientGame->RestreamWorld(restreamLODs); return true; } @@ -2506,44 +2505,3 @@ bool CLuaEngineDefs::EngineSetPoolCapacity(lua_State* luaVM, ePools pool, size_t } return true; } - -bool CLuaEngineDefs::EngineStreamingRequestModel(lua_State* const luaVM, std::uint16_t modelId, std::optional addReference, std::optional blocking) -{ - // Grab the lua main and the resource belonging to this script - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - - CModelInfo* pModelInfo = g_pGame->GetModelInfo(modelId); - - if (modelId >= g_pGame->GetBaseIDforCOL() || !pModelInfo) - throw std::invalid_argument("Expected a valid model ID at argument 1"); - - // Get the resource we belong to - CResource* pResource = pLuaMain->GetResource(); - - return pResource->GetResourceModelStreamer()->RequestModel(modelId, addReference.value_or(false), blocking.value_or(false)); -} - -bool CLuaEngineDefs::EngineStreamingReleaseModel(lua_State* const luaVM, std::uint16_t modelId, std::optional removeReference) -{ - // Grab the lua main and the resource belonging to this script - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - - CModelInfo* pModelInfo = g_pGame->GetModelInfo(modelId); - - if (modelId >= g_pGame->GetBaseIDforCOL() || !pModelInfo) - throw std::invalid_argument("Expected a valid model ID at argument 1"); - - // Get the resource we belong to - CResource* pResource = pLuaMain->GetResource(); - - return pResource->GetResourceModelStreamer()->ReleaseModel(modelId, removeReference.value_or(false)); -} - -eModelLoadState CLuaEngineDefs::EngineStreamingGetModelLoadState(std::uint16_t modelId) -{ - const auto allCount = g_pGame->GetCountOfAllFileIDs(); - if (modelId >= g_pGame->GetCountOfAllFileIDs()) - throw std::invalid_argument("Expected a valid model ID at argument 1"); - - return g_pGame->GetStreaming()->GetStreamingInfo(modelId)->loadState; -} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index 8346f6ef0b9..5426c310151 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -76,7 +76,7 @@ class CLuaEngineDefs : public CLuaDefs static bool EngineRestoreTXDImage(uint uiModelID); static std::vector EngineImageGetFileList(CClientIMG* pImg); static std::string EngineImageGetFile(CClientIMG* pImg, std::variant file); - static bool EngineRestreamWorld(); + static bool EngineRestreamWorld(lua_State* const luaVM); static bool EngineSetModelVisibleTime(std::string strModelId, char cHourOn, char cHourOff); static std::variant> EngineGetModelVisibleTime(std::string strModelId); @@ -88,10 +88,6 @@ class CLuaEngineDefs : public CLuaDefs static uint EngineRequestTXD(lua_State* const luaVM, std::string strTxdName); static bool EngineFreeTXD(uint txdID); - static bool EngineStreamingRequestModel(lua_State* const luaVM, std::uint16_t modelId, std::optional addReference, std::optional blocking); - static bool EngineStreamingReleaseModel(lua_State* const luaVM, std::uint16_t modelId, std::optional removeReference); - static eModelLoadState EngineStreamingGetModelLoadState(std::uint16_t modelId); - private: static void AddEngineColClass(lua_State* luaVM); static void AddEngineTxdClass(lua_State* luaVM); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index b35bfee24b9..b26b2163e42 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -91,7 +91,6 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehicleWheelScale", ArgumentParser}, {"getVehicleModelWheelSize", ArgumentParser}, {"getVehicleWheelFrictionState", ArgumentParser}, - {"getVehicleEntryPoints", ArgumentParser}, // Vehicle set funcs {"createVehicle", CreateVehicle}, @@ -242,7 +241,6 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getWheelScale", "getVehicleWheelScale"); lua_classfunction(luaVM, "getModelWheelSize", "getVehicleModelWheelSize"); lua_classfunction(luaVM, "getWheelFrictionState", "getVehicleWheelFrictionState"); - lua_classfunction(luaVM, "getEntryPoints", ArgumentParser); lua_classfunction(luaVM, "setComponentVisible", "setVehicleComponentVisible"); lua_classfunction(luaVM, "setSirensOn", "setVehicleSirensOn"); @@ -2649,69 +2647,12 @@ int CLuaVehicleDefs::SetVehicleHandling(lua_State* luaVM) int CLuaVehicleDefs::GetVehicleHandling(lua_State* luaVM) { - // table getVehicleHandling ( element theVehicle, [ string property ] ) CClientVehicle* pVehicle = NULL; CScriptArgReader argStream(luaVM); argStream.ReadUserData(pVehicle); if (!argStream.HasErrors()) { - if (argStream.NextIsString()) - { - SString strProperty; - argStream.ReadString(strProperty); - - eHandlingProperty eProperty = g_pGame->GetHandlingManager()->GetPropertyEnumFromName(strProperty); - if (eProperty == HANDLING_MAX) - { - argStream.SetCustomError("Invalid property"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - return 1; - } - - float fValue = 0.0f; - CVector vecValue = CVector(0.0f, 0.0f, 0.0f); - SString strValue = ""; - unsigned int uiValue = 0; - unsigned char ucValue = 0; - if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, fValue)) - { - lua_pushnumber(luaVM, fValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, uiValue)) - { - lua_pushnumber(luaVM, uiValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, ucValue)) - { - lua_pushnumber(luaVM, ucValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, strValue)) - { - lua_pushstring(luaVM, strValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, vecValue)) - { - lua_createtable(luaVM, 3, 0); - lua_pushnumber(luaVM, 1); - lua_pushnumber(luaVM, vecValue.fX); - lua_settable(luaVM, -3); - lua_pushnumber(luaVM, 2); - lua_pushnumber(luaVM, vecValue.fY); - lua_settable(luaVM, -3); - lua_pushnumber(luaVM, 3); - lua_pushnumber(luaVM, vecValue.fZ); - lua_settable(luaVM, -3); - } - else - { - argStream.SetCustomError("Invalid property"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - } - return 1; - } CHandlingEntry* pEntry = pVehicle->GetHandlingData(); lua_newtable(luaVM); @@ -4233,43 +4174,3 @@ bool CLuaVehicleDefs::BlowVehicle(CClientEntity* entity, std::optional wit { return CStaticFunctionDefinitions::BlowVehicle(*entity, withExplosion); } - -std::variant, 4>> CLuaVehicleDefs::GetVehicleEntryPoints(CClientVehicle* vehicle) -{ - auto entryPointVectors = OOP_GetVehicleEntryPoints(vehicle); - - if (std::holds_alternative(entryPointVectors)) - { - return false; - } - - std::array, 4> entryPoints; - std::array vectorArray = std::get>(entryPointVectors); - - std::uint32_t i = 0; - for (auto& entryPoint : entryPoints) - { - entryPoints[i] = {vectorArray[i].fX, vectorArray[i].fY, vectorArray[i].fZ}; - i++; - } - - return entryPoints; -} - -std::variant> CLuaVehicleDefs::OOP_GetVehicleEntryPoints(CClientVehicle* vehicle) -{ - if (CClientVehicleManager::GetMaxPassengerCount(vehicle->GetModel()) == 255) - { - return false; - } - - std::array entryPoints; - - std::uint32_t i = 0; - for (auto& entryPoint : entryPoints) - { - entryPoint = vehicle->GetEntryPoint(i++); - } - - return entryPoints; -} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index 5c2e908d586..cf73032a7f8 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -152,9 +152,6 @@ class CLuaVehicleDefs : public CLuaDefs static std::variant OOP_GetVehicleDummyPosition(CClientVehicle* vehicle, eVehicleDummies dummy); static bool ResetVehicleDummyPositions(CClientVehicle* vehicle); - static std::variant, 4>> GetVehicleEntryPoints(CClientVehicle* vehicle); - static std::variant> OOP_GetVehicleEntryPoints(CClientVehicle* vehicle); - LUA_DECLARE(SetVehicleModelExhaustFumesPosition); LUA_DECLARE_OOP(GetVehicleModelExhaustFumesPosition); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index ccb06c7a556..529cb8174f5 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include "lua/CLuaFunctionParser.h" void CLuaWorldDefs::LoadFunctions() @@ -104,6 +103,7 @@ void CLuaWorldDefs::LoadFunctions() {"removeWorldModel", RemoveWorldBuilding}, {"restoreAllWorldModels", RestoreWorldBuildings}, {"restoreWorldModel", RestoreWorldBuilding}, + {"setVolumetricShadowsEnabled", ArgumentParser}, // World create funcs {"createSWATRope", CreateSWATRope}, @@ -126,7 +126,6 @@ void CLuaWorldDefs::LoadFunctions() {"resetMoonSize", ResetMoonSize}, {"resetBlurLevel", ResetBlurLevel}, {"resetWorldProperty", ArgumentParserWarn}, - {"resetTimeFrozen", ArgumentParser}, // World check funcs {"areTrafficLightsLocked", AreTrafficLightsLocked}, @@ -134,8 +133,6 @@ void CLuaWorldDefs::LoadFunctions() {"isLineOfSightClear", IsLineOfSightClear}, {"isWorldSpecialPropertyEnabled", ArgumentParserWarn}, {"isGarageOpen", IsGarageOpen}, - {"isTimeFrozen", ArgumentParser}}; - {"isGarageOpen", IsGarageOpen}, {"isVolumetricShadowsEnabled", ArgumentParser}}; // Add functions @@ -2240,21 +2237,6 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) return false; } -bool CLuaWorldDefs::SetTimeFrozen(bool value) noexcept -{ - return g_pGame->GetClock()->SetTimeFrozen(value); -} - -bool CLuaWorldDefs::IsTimeFrozen() noexcept -{ - return g_pGame->GetClock()->IsTimeFrozen(); -} - -bool CLuaWorldDefs::ResetTimeFrozen() noexcept -{ - return g_pGame->GetClock()->ResetTimeFrozen(); -} - bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) noexcept { g_pGame->GetSettings()->SetVolumetricShadowsEnabled(enable); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index cab5880f1d5..547db464690 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -130,12 +130,6 @@ class CLuaWorldDefs : public CLuaDefs static std::variant> GetWorldProperty(eWorldProperty property); static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); - - static bool SetTimeFrozen(bool value) noexcept; - static bool IsTimeFrozen() noexcept; - static bool ResetTimeFrozen() noexcept; - }; - static bool SetVolumetricShadowsEnabled(bool enable) noexcept; static bool IsVolumetricShadowsEnabled() noexcept; }; diff --git a/Client/multiplayer_sa/CMultiplayerSA.cpp b/Client/multiplayer_sa/CMultiplayerSA.cpp index 28d5b1f551c..f87296a6108 100644 --- a/Client/multiplayer_sa/CMultiplayerSA.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto + * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: Client/multiplayer_sa/CMultiplayerSA.cpp + * FILE: multiplayer_sa/CMultiplayerSA.cpp * PURPOSE: Multiplayer module class * - * Multi Theft Auto is available from https://multitheftauto.com/ + * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ @@ -190,6 +190,8 @@ DWORD RETURN_CHandlingData_isNotRWD = 0x6A0493; DWORD RETURN_CHandlingData_isNotFWD = 0x6A04C3; // end of handling fix #define CALL_CAutomobile_ProcessEntityCollision 0x6AD053 +#define CALL_CBike_ProcessEntityCollision1 0x6BDF82 +#define CALL_CBike_ProcessEntityCollision2 0x6BE0D1 #define CALL_CMonsterTruck_ProcessEntityCollision 0x6C8B9E DWORD RETURN_ProcessEntityCollision = 0x4185C0; @@ -557,6 +559,7 @@ void HOOK_CObject_ProcessBreak(); void HOOK_CObject_ProcessCollision(); void HOOK_CGlass_WindowRespondsToCollision(); void HOOK_CGlass__BreakGlassPhysically(); +void HOOK_CGlass_WindowRespondsToExplosion(); // get attacker & object void HOOK_FxManager_c__DestroyFxSystem(); @@ -597,6 +600,7 @@ CMultiplayerSA::CMultiplayerSA() MemSetFast(&localStatsData, 0, sizeof(CStatsData)); localStatsData.StatTypesFloat[24] = 569.0f; // Max Health + m_bSuspensionEnabled = true; m_fAircraftMaxHeight = 800.0f; @@ -750,6 +754,7 @@ void CMultiplayerSA::InitHooks() HookInstall(HOOKPOS_CObject_ProcessCollision, (DWORD)HOOK_CObject_ProcessCollision, 10); HookInstall(HOOKPOS_CGlass_WindowRespondsToCollision, (DWORD)HOOK_CGlass_WindowRespondsToCollision, 8); HookInstall(HOOKPOS_CGlass__BreakGlassPhysically, (DWORD)HOOK_CGlass__BreakGlassPhysically, 5); + HookInstall(HOOKPOS_CGlass_WindowRespondsToExplosion, (DWORD)HOOK_CGlass_WindowRespondsToExplosion, 5); // Post-destruction hook for FxSystems HookInstall(HOOKPOS_FxManager_c__DestroyFxSystem, (DWORD)HOOK_FxManager_c__DestroyFxSystem, 5); @@ -1452,7 +1457,7 @@ void CMultiplayerSA::InitHooks() // Disable CStreaming::StreamVehiclesAndPeds_Always MemPut(0x40B650, 0xC3); - UpdateVehicleSuspension(); + SetSuspensionEnabled(true); // Aircraft Max Height checks are at 0x6D2614 and 0x6D2625 edit the check to use our own float. MemPut(0x6D2614, &m_fAircraftMaxHeight); @@ -6113,7 +6118,7 @@ bool CheckHasSuspensionChanged() CModelInfo* pModelInfo = pGameInterface->GetModelInfo(pVehicle->GetModelIndex()); if (pModelInfo && (pModelInfo->IsCar() || pModelInfo->IsMonsterTruck())) - return true; + return pVehicle->GetHandlingData()->HasSuspensionChanged(); else return false; } @@ -6178,10 +6183,26 @@ void _declspec(naked) HOOK_ProcessVehicleCollision() } } -void CMultiplayerSA::UpdateVehicleSuspension() noexcept +void CMultiplayerSA::SetSuspensionEnabled(bool bEnabled) { - HookInstallCall(CALL_CAutomobile_ProcessEntityCollision, reinterpret_cast(HOOK_ProcessVehicleCollision)); - HookInstallCall(CALL_CMonsterTruck_ProcessEntityCollision, reinterpret_cast(HOOK_ProcessVehicleCollision)); + // if ( bEnabled ) + { + // Hook Install + m_bSuspensionEnabled = true; + HookInstallCall(CALL_CAutomobile_ProcessEntityCollision, (DWORD)HOOK_ProcessVehicleCollision); + // HookInstallCall ( CALL_CBike_ProcessEntityCollision1, (DWORD)HOOK_ProcessVehicleCollision ); + // HookInstallCall ( CALL_CBike_ProcessEntityCollision2, (DWORD)HOOK_ProcessVehicleCollision ); + HookInstallCall(CALL_CMonsterTruck_ProcessEntityCollision, (DWORD)HOOK_ProcessVehicleCollision); + } + // else + // { + // // Hook Uninstall + // m_bSuspensionEnabled = false; + // HookInstallCall ( CALL_CAutomobile_ProcessEntityCollision, RETURN_ProcessEntityCollision ); + // HookInstallCall ( CALL_CBike_ProcessEntityCollision1, RETURN_ProcessEntityCollision ); + // HookInstallCall ( CALL_CBike_ProcessEntityCollision2, RETURN_ProcessEntityCollision ); + // HookInstallCall ( CALL_CMonsterTruck_ProcessEntityCollision, RETURN_ProcessEntityCollision ); + // } } // Variables @@ -6806,8 +6827,6 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision() pop eax } - pObjectAttacker = nullptr; - if (WindowRespondsToCollision_CalledFrom != CALL_FROM_CGlass_WindowRespondsToExplosion) { _asm @@ -6817,42 +6836,45 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision() } // Get attacker for the glass break - if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision || - WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision_2 || - WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplySoftCollision) + switch (WindowRespondsToCollision_CalledFrom) { - _asm + case CALL_FROM_CPhysical_ApplyCollision: + case CALL_FROM_CPhysical_ApplyCollision_2: + case CALL_FROM_CPhysical_ApplySoftCollision: { - mov pObjectAttacker, edi - } - } + _asm + { + mov pObjectAttacker, edi + } - if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WasGlassHitByBullet) - { - _asm - { - mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact + break; } - - if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update + case CALL_FROM_CGlass_WasGlassHitByBullet: { _asm { - push ecx - mov ecx, [edi] - mov pObjectAttacker, ecx - pop ecx + mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact } - } - } - if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WindowRespondsToExplosion) - { - _asm + if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update + { + _asm + { + push ecx + mov ecx, [edi] + mov pObjectAttacker, ecx + pop ecx + } + } + + break; + } + case CALL_FROM_CGlass_WindowRespondsToExplosion: { - mov pDamagedObject, edx - mov pObjectAttacker, ebp + break; } + default: + pObjectAttacker = nullptr; } if (pObjectAttacker && !pObjectAttacker->m_pRwObject) // Still wrong? @@ -6914,6 +6936,17 @@ void _declspec(naked) HOOK_CGlass__BreakGlassPhysically() } } +void _declspec(naked) HOOK_CGlass_WindowRespondsToExplosion() +{ + _asm { + push 1 + sub esp, 0Ch + mov pDamagedObject, edx + mov pObjectAttacker, ebp + jmp RETURN_CGlass_WindowRespondsToExplosion + } +} + void* pFxSystemToBeDestroyed; void FxManager_c__DestroyFxSystem() { diff --git a/Client/multiplayer_sa/CMultiplayerSA.h b/Client/multiplayer_sa/CMultiplayerSA.h index f725f37b639..65a7afb715f 100644 --- a/Client/multiplayer_sa/CMultiplayerSA.h +++ b/Client/multiplayer_sa/CMultiplayerSA.h @@ -310,7 +310,8 @@ class CMultiplayerSA : public CMultiplayer CLimits* GetLimits() { return &m_limits; } - void UpdateVehicleSuspension() noexcept; + void SetSuspensionEnabled(bool bEnabled); + bool IsSuspensionEnabled() { return m_bSuspensionEnabled; }; virtual void FlushClothesCache(); virtual void SetFastClothesLoading(EFastClothesLoading fastClothesLoading); @@ -361,6 +362,7 @@ class CMultiplayerSA : public CMultiplayer bool m_bBadDrivebyHitboxesDisabled; private: + bool m_bSuspensionEnabled; std::vector m_PlayerImgCache; EFastClothesLoading m_FastClothesLoading; CLimitsSA m_limits; diff --git a/Client/sdk/core/CCommandsInterface.h b/Client/sdk/core/CCommandsInterface.h index 2820bec69b4..849e3a07da2 100644 --- a/Client/sdk/core/CCommandsInterface.h +++ b/Client/sdk/core/CCommandsInterface.h @@ -14,7 +14,7 @@ #include typedef void (*PFNCOMMANDHANDLER)(const char*); -typedef bool (*pfnExecuteCommandHandler)(const char*, const char*, bool, bool, bool, bool); +typedef bool (*pfnExecuteCommandHandler)(const char*, const char*, bool, bool, bool); typedef void (*PFNCOMMAND)(const char*); diff --git a/Client/sdk/game/CCamera.h b/Client/sdk/game/CCamera.h index 7dc104e3c09..5990966d908 100644 --- a/Client/sdk/game/CCamera.h +++ b/Client/sdk/game/CCamera.h @@ -144,6 +144,5 @@ class CCamera virtual void SetShakeForce(float fShakeForce) = 0; virtual float GetShakeForce() = 0; - virtual void ShakeCamera(float radius, float x, float y, float z) noexcept = 0; - virtual void ResetShakeCamera() noexcept = 0; + virtual void ShakeCamera(float radius, float x, float y, float z) noexcept = 0; }; diff --git a/Client/sdk/game/CCarEnterExit.h b/Client/sdk/game/CCarEnterExit.h index e88a9b6e1ca..741758750c1 100644 --- a/Client/sdk/game/CCarEnterExit.h +++ b/Client/sdk/game/CCarEnterExit.h @@ -23,6 +23,4 @@ class CCarEnterExit bool bCheckIfRoomToGetIn) = 0; virtual int ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle) = 0; virtual bool IsRoomForPedToLeaveCar(CVehicle* pVehicle, int iDoor, CVector* pUnknown = 0) = 0; - - virtual void GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept = 0; }; diff --git a/Client/sdk/game/CClock.h b/Client/sdk/game/CClock.h index 6f795f59199..2348564c8af 100644 --- a/Client/sdk/game/CClock.h +++ b/Client/sdk/game/CClock.h @@ -16,8 +16,4 @@ class CClock public: virtual void Set(BYTE bHour, BYTE bMinute) = 0; virtual void Get(BYTE* bHour, BYTE* bMinute) = 0; - - virtual bool SetTimeFrozen(bool value) noexcept = 0; - virtual bool IsTimeFrozen() const noexcept = 0; - virtual bool ResetTimeFrozen() noexcept = 0; }; diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index a1d792813e1..215141ee23a 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -268,7 +268,7 @@ class __declspec(novtable) CGame virtual int32_t GetBaseIDforSCM() = 0; virtual int32_t GetCountOfAllFileIDs() = 0; - virtual void RemoveAllBuildings() = 0; + virtual void RemoveAllBuildings(bool clearBuildingRemoval = true) = 0; virtual void RestoreGameBuildings() = 0; virtual bool SetBuildingPoolSize(size_t size) = 0; diff --git a/Client/sdk/game/CHandlingEntry.h b/Client/sdk/game/CHandlingEntry.h index a2da6167c98..356741e6d8c 100644 --- a/Client/sdk/game/CHandlingEntry.h +++ b/Client/sdk/game/CHandlingEntry.h @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto + * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: Client/sdk/game/CHandlingEntry.h + * FILE: sdk/game/CHandlingEntry.h * PURPOSE: Vehicle handling entry interface * - * Multi Theft Auto is available from https://multitheftauto.com/ + * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ @@ -91,7 +91,7 @@ class CHandlingEntry virtual ~CHandlingEntry(){}; // Use this to copy data from an another handling class to this - virtual void Assign(const CHandlingEntry* pEntry) = 0; + virtual void Assign(const CHandlingEntry* pData) = 0; // Get functions virtual float GetMass() const = 0; @@ -137,7 +137,8 @@ class CHandlingEntry virtual eLightType GetTailLight() const = 0; virtual unsigned char GetAnimGroup() const = 0; - virtual std::uint16_t GetVehicleID() const = 0; + virtual eVehicleTypes GetModel() const = 0; + virtual bool HasSuspensionChanged() const = 0; // Set functions virtual void SetMass(float fMass) = 0; @@ -164,13 +165,13 @@ class CHandlingEntry virtual void SetTractionLoss(float fTractionLoss) = 0; virtual void SetTractionBias(float fTractionBias) = 0; - virtual void SetSuspensionForceLevel(float fForce) noexcept = 0; - virtual void SetSuspensionDamping(float fDamping) noexcept = 0; - virtual void SetSuspensionHighSpeedDamping(float fDamping) noexcept = 0; - virtual void SetSuspensionUpperLimit(float fUpperLimit) noexcept = 0; - virtual void SetSuspensionLowerLimit(float fLowerLimit) noexcept = 0; - virtual void SetSuspensionFrontRearBias(float fBias) noexcept = 0; - virtual void SetSuspensionAntiDiveMultiplier(float fAntiDive) noexcept = 0; + virtual void SetSuspensionForceLevel(float fForce) = 0; + virtual void SetSuspensionDamping(float fDamping) = 0; + virtual void SetSuspensionHighSpeedDamping(float fDamping) = 0; + virtual void SetSuspensionUpperLimit(float fUpperLimit) = 0; + virtual void SetSuspensionLowerLimit(float fLowerLimit) = 0; + virtual void SetSuspensionFrontRearBias(float fBias) = 0; + virtual void SetSuspensionAntiDiveMultiplier(float fAntiDive) = 0; virtual void SetCollisionDamageMultiplier(float fMultiplier) = 0; @@ -183,7 +184,9 @@ class CHandlingEntry virtual void SetTailLight(eLightType Style) = 0; virtual void SetAnimGroup(unsigned char ucGroup) = 0; + virtual void SetSuspensionChanged(bool bChanged) = 0; + // Call this every time you're done changing something. This will recalculate // all transmission/handling values according to the new values. - virtual void Recalculate() = 0; + virtual void Recalculate(unsigned short usModel) = 0; }; diff --git a/Client/sdk/game/CHandlingManager.h b/Client/sdk/game/CHandlingManager.h index 25d706220e1..d57959b3def 100644 --- a/Client/sdk/game/CHandlingManager.h +++ b/Client/sdk/game/CHandlingManager.h @@ -27,12 +27,12 @@ class CHandlingManager virtual CBoatHandlingEntry* CreateBoatHandlingData() = 0; virtual CBikeHandlingEntry* CreateBikeHandlingData() = 0; - virtual const CHandlingEntry* GetOriginalHandlingData(enum eVehicleTypes eModel) const = 0; - virtual const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(enum eVehicleTypes eModel) const = 0; - virtual const CBoatHandlingEntry* GetOriginalBoatHandlingData(enum eVehicleTypes eModel) const = 0; - virtual const CBikeHandlingEntry* GetOriginalBikeHandlingData(enum eVehicleTypes eModel) const = 0; + virtual const CHandlingEntry* GetOriginalHandlingData(enum eVehicleTypes eModel) = 0; + virtual const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(enum eVehicleTypes eModel) = 0; + virtual const CBoatHandlingEntry* GetOriginalBoatHandlingData(enum eVehicleTypes eModel) = 0; + virtual const CBikeHandlingEntry* GetOriginalBikeHandlingData(enum eVehicleTypes eModel) = 0; - virtual eHandlingProperty GetPropertyEnumFromName(const std::string& strName) const = 0; - - virtual void CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept = 0; + virtual eHandlingProperty GetPropertyEnumFromName(const std::string& strName) = 0; + virtual void RemoveChangedVehicle() = 0; + virtual void CheckSuspensionChanges(CHandlingEntry* pEntry) = 0; }; diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index af9fa1bdf3f..440f079be67 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -179,7 +179,6 @@ class CModelInfo virtual void RemoveRef(bool bRemoveExtraGTARef = false) = 0; virtual int GetRefCount() = 0; virtual bool ForceUnload() = 0; - virtual bool UnloadUnused() = 0; virtual void DeallocateModel() = 0; virtual float GetDistanceFromCentreOfMassToBaseOfModel() = 0; diff --git a/Client/sdk/game/CStreaming.h b/Client/sdk/game/CStreaming.h index 6eb47f13a65..c8ff17c5581 100644 --- a/Client/sdk/game/CStreaming.h +++ b/Client/sdk/game/CStreaming.h @@ -16,27 +16,6 @@ #define INVALID_ARCHIVE_ID 0xFF #define INVALID_STREAM_ID 0xFF -enum class eModelLoadState : std::uint32_t -{ - // Model isn't loaded - LOADSTATE_NOT_LOADED = 0, - - // Model is loaded - LOADSTATE_LOADED = 1, - - // Model in request list, but not yet in loading channel (TODO: Verify this) - LOADSTATE_REQUESTED = 2, - - // Model is being read - LOADSTATE_READING = 3, - - // If the model is a `big` one this state is used to indicate - // that the model's first half has been loaded and is yet to be - // finished by loading the second half. - // When it has been loaded the state is set to `LOADED` - LOADSTATE_FINISHING = 4 -}; - struct CStreamingInfo { uint16_t prevId = (uint16_t)-1; @@ -46,7 +25,7 @@ struct CStreamingInfo uint8_t archiveId = 0u; uint32_t offsetInBlocks = 0u; uint32_t sizeInBlocks = 0u; - eModelLoadState loadState = eModelLoadState::LOADSTATE_NOT_LOADED; + uint32_t loadState = 0u; }; static_assert(sizeof(CStreamingInfo) == 0x14, "Invalid size for CStreamingInfo"); diff --git a/Client/sdk/multiplayer/CMultiplayer.h b/Client/sdk/multiplayer/CMultiplayer.h index c8b043a37fa..3d977e3f137 100644 --- a/Client/sdk/multiplayer/CMultiplayer.h +++ b/Client/sdk/multiplayer/CMultiplayer.h @@ -427,7 +427,8 @@ class CMultiplayer virtual CLimits* GetLimits() = 0; - virtual void UpdateVehicleSuspension() noexcept = 0; + virtual bool IsSuspensionEnabled() = 0; + virtual void SetSuspensionEnabled(bool bEnabled) = 0; virtual void FlushClothesCache() = 0; virtual void SetFastClothesLoading(EFastClothesLoading fastClothesLoading) = 0; diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index ab24fe0d66c..c7ce99d91ea 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -1654,15 +1654,27 @@ bool CStaticFunctionDefinitions::SetElementHealth(CElement* pElement, float fHea case CElement::PLAYER: { CPed* pPed = static_cast(pElement); - if (!pPed->IsSpawned()) - return false; + if (pPed->IsSpawned()) + { + // Limit their max health to what the stat says + float fMaxHealth = pPed->GetMaxHealth(); + if (fHealth > fMaxHealth) + fHealth = fMaxHealth; - fHealth = Clamp(0.0f, fHealth, pPed->GetMaxHealth()); - pPed->SetHealth(fHealth); + // Do not set the health below zero + if (fHealth < 0.0f) + fHealth = 0.0f; - if (pPed->IsDead() && fHealth > 0.0f) - pPed->SetIsDead(false); + // This makes sure the health is set to what will get reported + unsigned char ucHealth = static_cast(fHealth * 1.25f); + fHealth = static_cast(ucHealth) / 1.25f; + pPed->SetHealth(fHealth); + if (pPed->IsDead() && fHealth > 0.0f) + pPed->SetIsDead(false); + } + else + return false; break; } case CElement::VEHICLE: diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp index 4a80b4acfdc..9152e4dabe0 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp @@ -390,7 +390,7 @@ int CLuaHandlingDefs::SetModelHandling(lua_State* luaVM) int CLuaHandlingDefs::GetVehicleHandling(lua_State* luaVM) { - // table getVehicleHandling ( element theVehicle, [ string property ] ) + // table getVehicleHandling ( element theVehicle ) CVehicle* pVehicle; CScriptArgReader argStream(luaVM); @@ -398,62 +398,6 @@ int CLuaHandlingDefs::GetVehicleHandling(lua_State* luaVM) if (!argStream.HasErrors()) { - if (argStream.NextIsString()) - { - SString strProperty; - argStream.ReadString(strProperty); - - eHandlingProperty eProperty = m_pHandlingManager->GetPropertyEnumFromName(strProperty); - if (eProperty == HANDLING_MAX) - { - argStream.SetCustomError("Invalid property"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - return 1; - } - - float fValue = 0.0f; - CVector vecValue = CVector(0.0f, 0.0f, 0.0f); - SString strValue = ""; - unsigned int uiValue = 0; - unsigned char ucValue = 0; - if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, fValue)) - { - lua_pushnumber(luaVM, fValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, uiValue)) - { - lua_pushnumber(luaVM, uiValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, ucValue)) - { - lua_pushnumber(luaVM, ucValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, strValue)) - { - lua_pushstring(luaVM, strValue); - } - else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, vecValue)) - { - lua_createtable(luaVM, 3, 0); - lua_pushnumber(luaVM, 1); - lua_pushnumber(luaVM, vecValue.fX); - lua_settable(luaVM, -3); - lua_pushnumber(luaVM, 2); - lua_pushnumber(luaVM, vecValue.fY); - lua_settable(luaVM, -3); - lua_pushnumber(luaVM, 3); - lua_pushnumber(luaVM, vecValue.fZ); - lua_settable(luaVM, -3); - } - else - { - argStream.SetCustomError("Invalid property"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - } - return 1; - } CHandlingEntry* pEntry = pVehicle->GetHandlingData(); lua_newtable(luaVM); 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 986344b426f..b9999c834e6 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-08-14 19:10+0000\n" +"POT-Creation-Date: 2024-07-27 11:57+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,3267 +18,3267 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: Client/mods/deathmatch/CClient.cpp:36 -msgid "This version has expired." -msgstr "" - -#: Client/mods/deathmatch/CClient.cpp:56 -msgid "disconnect from the game" +#: Client/loader/Install.cpp:265 +msgid "Unknown" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:57 -msgid "shows the nametags" +#: Client/loader/Install.cpp:272 +#, c-format +msgid "" +"The file '%s' is currently locked by %zu processes.\n" +"\n" +"Do you want to terminate the following processes and continue updating?\n" +"\n" +"%s" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:58 -msgid "shows the chatbox" +#: Client/loader/Install.cpp:479 +#, c-format +msgid "" +"Your installation may be corrupt now.\n" +"\n" +"%zu out of %zu files could not be restored from the backup.\n" +"\n" +"You should reinstall Multi Theft Auto from www.multitheftauto.com\n" +"or try running the update with administrator rights." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:59 -msgid "shows the network statistics" +#: Client/loader/Install.cpp:852 Client/loader/Dialogs.cpp:901 +msgid "Installing update..." msgstr "" -#. Key commands (registered as 'mod commands', can be disabled) -#: Client/mods/deathmatch/CClient.cpp:62 -msgid "open the chat input" +#: Client/loader/Install.cpp:934 Client/loader/Dialogs.cpp:909 +msgid "Extracting files..." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:63 -msgid "transmits voice to other players" +#. ///////////////////////////////////////////////////////////////////////// +#. +#. Dialog strings +#. +#. +#. ///////////////////////////////////////////////////////////////////////// +#: Client/loader/Dialogs.cpp:131 Client/gui/CGUIMessageBox_Impl.cpp:72 +#: 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:1200 +#: Client/core/CSettings.cpp:1389 Client/core/CSettings.cpp:1413 +#: Client/core/CSettings.cpp:4489 Client/core/CSettings.cpp:4563 +#: Client/core/CSettings.cpp:4593 Client/core/CSettings.cpp:4642 +#: Client/core/ServerBrowser/CServerInfo.cpp:479 +msgid "Yes" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:64 -msgid "enters a car as passenger" +#: 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:1199 Client/core/CSettings.cpp:1388 +#: Client/core/CSettings.cpp:1412 Client/core/CSettings.cpp:4488 +#: Client/core/CSettings.cpp:4562 Client/core/CSettings.cpp:4592 +#: Client/core/CSettings.cpp:4641 Client/core/ServerBrowser/CServerInfo.cpp:479 +msgid "No" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:65 -msgid "next radio channel" +#. Create buttons +#. OK button +#: Client/loader/Dialogs.cpp:133 Client/gui/CGUIMessageBox_Impl.cpp:64 +#: Client/core/CVersionUpdater.cpp:1607 Client/core/CVersionUpdater.cpp:1823 +#: Client/core/CVersionUpdater.cpp:1916 Client/core/CVersionUpdater.cpp:1938 +#: 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:4785 +msgid "OK" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:66 -msgid "previous radio channel" +#: Client/loader/Dialogs.cpp:134 +msgid "Quit" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:67 -msgid "enables the radar view" +#: Client/loader/Dialogs.cpp:135 +#: Client/core/ServerBrowser/CServerBrowser.cpp:556 +msgid "Help" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:68 -msgid "zooms the radar in" +#. Cancel button +#: Client/loader/Dialogs.cpp:136 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 +#: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/core/CVersionUpdater.cpp:1790 +#: Client/core/CVersionUpdater.cpp:1806 Client/core/CVersionUpdater.cpp:1841 +#: Client/core/CSettings.cpp:132 Client/core/CSettings.cpp:4784 +msgid "Cancel" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:69 -msgid "zooms the radar out" +#: Client/loader/Dialogs.cpp:151 +msgid "MTA: San Andreas has encountered a problem" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:70 -msgid "moves the radar north" +#: Client/loader/Dialogs.cpp:152 +msgid "Crash information" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:71 -msgid "moves the radar south" +#: Client/loader/Dialogs.cpp:153 +msgid "" +"Tick the check box to send this crash info to MTA devs using the 'internet'" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:72 -msgid "moves the radar east" +#: Client/loader/Dialogs.cpp:154 +msgid "Doing so will increase the chance of this crash being fixed." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:73 -msgid "moves the radar west" +#: Client/loader/Dialogs.cpp:155 +msgid "Do you want to restart MTA: San Andreas ?" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:74 -msgid "attaches the radar" +#: Client/loader/Dialogs.cpp:162 +msgid "MTA: San Andreas - Warning" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:75 -msgid "reduces radar opacity" +#: Client/loader/Dialogs.cpp:163 +msgid "" +"Your Grand Theft Auto: San Andreas install directory contains these files:" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:76 -msgid "increases radar opacity" +#: Client/loader/Dialogs.cpp:165 +msgid "" +"These files are not required and may interfere with the graphical features " +"in this version of MTA:SA.\n" +"\n" +"It is recommended that you remove or rename these files." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:77 -msgid "toggles radar help text" +#: Client/loader/Dialogs.cpp:167 +msgid "Keep these files, but also show this warning on next start" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:78 -msgid "sends a message to the targetted player" +#: Client/loader/Dialogs.cpp:168 +msgid "Do not remind me about these files again" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:79 -msgid "changes to the next weapon whilst in a vehicle" +#: Client/loader/Dialogs.cpp:169 +msgid "Rename these files from *.dll to *.dll.bak" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:80 -msgid "changes to the previous weapon whilst in a vehicle" +#: Client/loader/Dialogs.cpp:170 +msgid "Show me these files" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:81 -msgid "outputs info about the current server" +#: Client/loader/Dialogs.cpp:171 +msgid "Play MTA:SA" msgstr "" -#. ACHTUNG" Should this be handled by the atomic cvar setter? -#: Client/mods/deathmatch/CClient.cpp:84 -msgid "defines the scale multiplier of all text-displays" +#: Client/loader/Dialogs.cpp:177 +msgid "MTA: San Andreas - Confusing options" msgstr "" -#. Development mode -#: Client/mods/deathmatch/CClient.cpp:91 -msgid "(Development mode) shows the colshapes" +#: Client/loader/Dialogs.cpp:178 +msgid "NVidia Optimus detected!" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:92 -msgid "(Development mode) prints world sound ids into the debug window" +#: Client/loader/Dialogs.cpp:179 +msgid "Try each option and see what works:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:37 -msgid "HOST GAME" +#: Client/loader/Dialogs.cpp:180 +msgid "A - Standard NVidia" msgstr "" -#. * -#. * Webbrowser tab -#. * -#: Client/mods/deathmatch/logic/CLocalServer.cpp:51 -#: Client/core/CSettings.cpp:442 Client/core/CSettings.cpp:630 -#: Client/core/CSettings.cpp:904 Client/core/CSettings.cpp:2018 -msgid "General" +#: Client/loader/Dialogs.cpp:181 +msgid "B - Alternate NVidia" msgstr "" -#. m_pTabs->CreateTab ( "Gamemode" ); -#: Client/mods/deathmatch/logic/CLocalServer.cpp:53 -msgid "Resources" +#: Client/loader/Dialogs.cpp:182 +msgid "C - Standard Intel" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:55 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:57 -msgid "Server name:" +#: Client/loader/Dialogs.cpp:183 +msgid "D - Alternate Intel" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:64 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:66 -msgid "Password:" +#: Client/loader/Dialogs.cpp:184 +msgid "If you get desperate, this might help:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:73 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:75 -msgid "Max players:" +#: Client/loader/Dialogs.cpp:185 +msgid "If you have already selected an option that works, this might help:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:82 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:84 -msgid "Broadcast:" +#: Client/loader/Dialogs.cpp:186 +msgid "Force windowed mode" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:86 -msgid "LAN" +#: Client/loader/Dialogs.cpp:187 +msgid "Don't show again" msgstr "" -#. Create the tabs -#: Client/mods/deathmatch/logic/CLocalServer.cpp:90 -#: Client/core/ServerBrowser/CServerBrowser.cpp:133 -msgid "Internet" +#: Client/loader/Dialogs.cpp:194 Client/game_sa/CSettingsSA.cpp:831 +msgid "MTA: San Andreas" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:99 -msgid "Selected" +#: Client/loader/Dialogs.cpp:195 +msgid "Warning: Could not detect anti-virus product" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:116 -msgid "All" +#: Client/loader/Dialogs.cpp:197 +msgid "" +"MTA could not detect an anti-virus on your PC.\n" +"\n" +"Viruses interfere with MTA and degrade your gameplay experience.\n" +"\n" +"Press 'Help' for more information." msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:118 -msgid "Start" +#: Client/loader/Dialogs.cpp:200 +msgid "I have already installed an anti-virus" msgstr "" -#. Cancel button -#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 -#: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/core/CSettings.cpp:132 -#: Client/core/CSettings.cpp:4784 Client/core/CVersionUpdater.cpp:1790 -#: Client/core/CVersionUpdater.cpp:1806 Client/core/CVersionUpdater.cpp:1841 -#: Client/loader/Dialogs.cpp:136 -msgid "Cancel" +#: Client/loader/Dialogs.cpp:202 +msgid "" +"I will not install an anti-virus.\n" +"I want my PC to lag and be part of a botnet." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:506 -msgid "Disconnected: Invalid nickname" +#: Client/loader/Dialogs.cpp:890 Client/loader/Utils.cpp:534 +msgid "Searching for Grand Theft Auto San Andreas" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 -msgid "Disconnect from server" +#: Client/loader/Dialogs.cpp:893 Client/loader/Utils.cpp:536 +msgid "Please start Grand Theft Auto San Andreas" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 -#, c-format -msgid "" -"Disconnected: Serial is banned.\n" -"Reason: %s" +#: Client/loader/Dialogs.cpp:914 Client/loader/Utils.cpp:1394 +msgid "Copying files..." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 -#, c-format -msgid "" -"Disconnected: You are banned.\n" -"Reason: %s" +#: Client/loader/Dialogs.cpp:919 Client/loader/Utils.cpp:1454 +msgid "Copy finished early. Everything OK." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 -#, c-format -msgid "" -"Disconnected: Account is banned.\n" -"Reason: %s" +#: Client/loader/Dialogs.cpp:924 Client/loader/Utils.cpp:1460 +msgid "Finishing..." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 -msgid "Disconnected: Version mismatch" +#: Client/loader/Dialogs.cpp:928 Client/loader/Utils.cpp:1462 +msgid "Done!" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 -msgid "Disconnected: Join flood. Please wait a minute, then reconnect." +#: Client/loader/MainFunctions.cpp:248 +msgid "" +"Trouble restarting MTA:SA\n" +"\n" +"If the problem persists, open Task Manager and\n" +"stop the 'gta_sa.exe' and 'Multi Theft Auto.exe' processes\n" +"\n" +"\n" +"Try to launch MTA:SA again?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 -#, c-format -msgid "" -"Disconnected: Server from different branch.\n" -"Information: %s" +#. Show timeout message and disconnect +#. Display an error, reset the error status and exit +#. Show a message that the connection timed out and abort +#. Show failed message and abort the attempt +#: Client/loader/MainFunctions.cpp:252 Client/loader/MainFunctions.cpp:267 +#: Client/loader/MainFunctions.cpp:269 Client/loader/MainFunctions.cpp:846 +#: Client/loader/CInstallManager.cpp:552 Client/loader/CInstallManager.cpp:561 +#: Client/mods/deathmatch/logic/CClientGame.cpp:635 +#: Client/mods/deathmatch/logic/CClientGame.cpp:709 +#: Client/mods/deathmatch/logic/CClientGame.cpp:733 +#: Client/mods/deathmatch/logic/CClientGame.cpp:755 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1168 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1248 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1258 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1327 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1364 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1413 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1425 +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:145 +#: Client/core/CCore.cpp:1275 Client/core/CCore.cpp:1288 +#: Client/core/CGUI.cpp:87 Client/core/CConnectManager.cpp:80 +#: Client/core/CConnectManager.cpp:111 Client/core/CConnectManager.cpp:127 +#: Client/core/CConnectManager.cpp:263 Client/core/CConnectManager.cpp:321 +#: Client/core/CConnectManager.cpp:404 Client/core/CConnectManager.cpp:411 +#: Client/core/CConnectManager.cpp:421 Client/core/CSettings.cpp:2941 +#: Client/core/CSettings.cpp:4166 Client/core/CSettings.cpp:4194 +#: Client/core/CSettings.cpp:4764 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 +#: Client/core/DXHook/CDirect3DHook9.cpp:127 +#: Shared/mods/deathmatch/logic/CLatentTransferManager.cpp:378 +#: Shared/sdk/SharedUtil.Misc.hpp:137 +msgid "Error" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 -#, c-format +#: Client/loader/MainFunctions.cpp:266 msgid "" -"Disconnected: Bad version.\n" -"Information: %s" +"Another instance of MTA is already running.\n" +"\n" +"If this problem persists, please restart your computer" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 -#, c-format +#: Client/loader/MainFunctions.cpp:269 msgid "" -"Disconnected: Server is running a newer build.\n" -"Information: %s" +"Another instance of MTA is already running.\n" +"\n" +"Do you want to terminate it?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 -#, c-format +#: Client/loader/MainFunctions.cpp:294 msgid "" -"Disconnected: Server is running an older build.\n" -"Information: %s" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to revert to an earlier version?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 -msgid "Disconnected: Nick already in use" +#: Client/loader/MainFunctions.cpp:324 +msgid "" +"There seems to be a problem launching MTA:SA.\n" +"Resetting GTA settings can sometimes fix this problem.\n" +"\n" +"Do you want to reset GTA settings now?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 -msgid "Disconnected: Player element could not be created." +#: Client/loader/MainFunctions.cpp:339 +msgid "" +"GTA settings have been reset.\n" +"\n" +"Press OK to continue." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:567 +#: Client/loader/MainFunctions.cpp:344 #, c-format -msgid "Disconnected: Server refused the connection: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 -msgid "Disconnected: Serial verification failed" +msgid "File could not be deleted: '%s'" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 -#, c-format -msgid "Disconnected: Connection desync %s" +#. No settings to delete, or can't find them +#: Client/loader/MainFunctions.cpp:352 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to see some online help?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 -#, c-format -msgid "Disconnected: You were kicked by %s" +#. Inform user +#: Client/loader/MainFunctions.cpp:388 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to change the following setting?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 -#, c-format -msgid "Disconnected: You were banned by %s" +#: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:662 +#: Client/core/CSettings.cpp:1004 +msgid "Fullscreen mode:" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 -msgid "Disconnected: Server shutdown or restarting" +#: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:670 +#: Client/core/CSettings.cpp:1615 +msgid "Borderless window" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 -msgid "You were kicked from the game" +#: Client/loader/MainFunctions.cpp:431 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Try disabling the following products for GTA and MTA:" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:622 -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:633 -msgid "This server requires a non-modifed gta_sa.exe" +#: Client/loader/MainFunctions.cpp:465 +msgid "" +"WARNING\n" +"\n" +"MTA:SA has detected unusual activity.\n" +"Please run a virus scan to ensure your system is secure.\n" +"\n" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 -msgid "Please replace gta_sa.exe" +#: Client/loader/MainFunctions.cpp:468 +#, c-format +msgid "The detected file was: %s\n" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 -msgid "This server does not allow custom D3D9.DLLs" +#: Client/loader/MainFunctions.cpp:602 +msgid "" +"An instance of GTA: San Andreas is already running. It needs to be " +"terminated before MTA:SA can be started. Do you want to do that now?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 -msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" +#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 +#: Client/loader/MainFunctions.cpp:1219 +#: Client/core/ServerBrowser/CServerInfo.cpp:319 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 +msgid "Information" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 -msgid "This server does not allow virtual machines" +#: Client/loader/MainFunctions.cpp:609 +msgid "" +"Unable to terminate GTA: San Andreas. If the problem persists, please " +"restart your computer." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 -msgid "This server requires driver signing to be enabled" +#: Client/loader/MainFunctions.cpp:632 +msgid "" +"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 -msgid "Please restart your PC" +#: Client/loader/MainFunctions.cpp:638 +msgid "" +"The path to your installation of GTA: San Andreas contains unsupported " +"(unicode) characters. Please move your Grand Theft Auto: San Andreas " +"installation to a compatible path that contains only standard ASCII " +"characters and reinstall Multi Theft Auto: San Andreas." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 -msgid "This server has detected missing anti-cheat components" +#: Client/loader/MainFunctions.cpp:648 +msgid "" +"The path to your installation of 'MTA:SA' or 'GTA: San Andreas'\n" +"contains a ';' (semicolon).\n" +"\n" +" If you experience problems when running MTA:SA,\n" +" move your installation(s) to a path that does not contain a semicolon." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 -msgid "Try restarting MTA" +#: Client/loader/MainFunctions.cpp:810 +msgid "" +"Load failed. Please ensure that the latest data files have been installed " +"correctly." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 -msgid "This server requires a non-modifed gta3.img and gta_int.img" +#: Client/loader/MainFunctions.cpp:819 +#, c-format +msgid "Load failed. Please ensure that %s is installed correctly." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 -msgid "Please replace gta3.img or gta_int.img" +#: Client/loader/MainFunctions.cpp:826 +#, c-format +msgid "Load failed. Could not find gta_sa.exe in %s." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 -msgid "This server does not allow Wine" +#: Client/loader/MainFunctions.cpp:836 +#, c-format +msgid "" +"Load failed. %s exists in the GTA directory. Please delete before continuing." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 -msgid "Ensure no other program is modifying MTA:SA" +#: Client/loader/MainFunctions.cpp:845 +#, c-format +msgid "Main file has an incorrect name (%s)" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 -msgid "Time Remaining: " +#: Client/loader/MainFunctions.cpp:856 +msgid "" +"Main file is unsigned. Possible virus activity.\n" +"\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:660 -#, c-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:662 -#, c-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:664 -#, c-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:666 +#: Client/loader/MainFunctions.cpp:882 #, c-format -msgid "%d second" -msgid_plural "%d seconds" -msgstr[0] "" -msgstr[1] "" - -#. Display the error -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:670 -msgid "Disconnected" -msgstr "" - -#: Client/mods/deathmatch/logic/CClientGame.cpp:370 -msgid "Flying a UFO around" +msgid "" +"Data file %s is missing. Possible virus activity.\n" +"\n" +"Consider reinstalling Multi Theft Auto for your security.\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:370 -msgid "Cruising around" +#: Client/loader/MainFunctions.cpp:893 +#, c-format +msgid "" +"Data file %s is modified. Possible virus activity.\n" +"\n" +"Consider reinstalling Multi Theft Auto for your security.\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:370 -msgid "Riding the waves of" +#: Client/loader/MainFunctions.cpp:907 +msgid "" +".asi files are in the 'MTA:SA' or 'GTA: San Andreas' installation " +"directory.\n" +"\n" +"Remove these .asi files if you experience problems with MTA:SA." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:371 -msgid "Riding the train in" +#: Client/loader/MainFunctions.cpp:1009 +msgid "" +"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:371 -msgid "Flying around" +#: Client/loader/MainFunctions.cpp:1018 +msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:372 -msgid "Riding around" +#: Client/loader/MainFunctions.cpp:1030 +msgid "" +"MTA:SA is not compatible with Windows 'Safe Mode'.\n" +"\n" +"Please restart your PC.\n" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:372 -msgid "Monster truckin' around" +#: Client/loader/MainFunctions.cpp:1123 +msgid "Fix configuration issue" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:372 -msgid "Quaddin' around" +#. Try to relaunch as admin if not done so already +#: Client/loader/MainFunctions.cpp:1157 +msgid "Fix elevation required error" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:373 -msgid "Bunny hopping around" +#: Client/loader/MainFunctions.cpp:1164 +#, c-format +msgid "" +"Could not start Grand Theft Auto: San Andreas. Please try restarting, or if " +"the problem persists,contact MTA at www.multitheftauto.com. \n" +"\n" +"[%s]" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:373 -msgid "Doing weird stuff in" +#: Client/loader/MainFunctions.cpp:1219 +msgid "" +"GTA: San Andreas may not have launched correctly. Do you want to terminate " +"it?" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:377 -msgid "Climbing around in" +#: Client/loader/Utils.cpp:600 +msgid "Select your Grand Theft Auto: San Andreas Installation Directory" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:378 -#: Client/mods/deathmatch/logic/CClientGame.cpp:379 -msgid "Doing a drive-by in" +#: Client/loader/Utils.cpp:968 Client/loader/CInstallManager.cpp:361 +#, c-format +msgid "" +"MTA:SA needs Administrator access for the following task:\n" +"\n" +" '%s'\n" +"\n" +"Please confirm in the next window." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:380 -msgid "Blub blub..." +#: Client/loader/Utils.cpp:1069 +#, c-format +msgid "Error loading %s module! (%s)" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:381 -msgid "Breathing water" +#: Client/loader/Utils.cpp:1502 +#, c-format +msgid "" +"New installation of %s detected.\n" +"\n" +"Do you want to copy your settings from %s ?" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:382 -msgid "Drowning in" +#: Client/loader/Utils.cpp:1541 +#, c-format +msgid "GTA:SA had trouble opening the file '%s'" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:383 -msgid "Ducking for cover in" +#: Client/loader/Utils.cpp:1563 +#, c-format +msgid "GTA:SA is missing the file '%s'." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:384 -msgid "Fighting in" +#: Client/loader/Utils.cpp:1588 +msgid "GTA:SA had trouble loading a model." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:385 -msgid "Throwing fists in" +#: Client/loader/Utils.cpp:1590 +msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:386 -msgid "Blastin' fools in" +#: Client/loader/Utils.cpp:1615 +msgid "GTA:SA had trouble adding an upgrade to a vehicle." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:387 -msgid "Shooting up" +#: Client/loader/Utils.cpp:1634 +#, c-format +msgid "GTA:SA found errors in the file '%s'" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:388 -msgid "Jetpacking in" +#: Client/loader/Utils.cpp:1716 +msgid "Did your computer restart when playing MTA:SA?" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:389 -msgid "Literally on fire in" +#: Client/loader/Utils.cpp:1781 +msgid "Please terminate the following programs before continuing:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:390 -msgid "Burning up in" +#: Client/loader/CInstallManager.cpp:376 +#, c-format +msgid "" +"MTA:SA could not complete the following task:\n" +"\n" +" '%s'\n" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:391 -msgid "Swimming in" +#: Client/loader/CInstallManager.cpp:426 +msgid "" +"** The crash was caused by a graphics driver error **\n" +"\n" +"** Please update your graphics drivers **" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:392 -msgid "Floating around in" +#: Client/loader/CInstallManager.cpp:532 +msgid "Install updated MTA:SA files" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:393 -msgid "Being chased by a shark" +#: Client/loader/CInstallManager.cpp:552 +msgid "" +"Could not update due to file conflicts. Please close other applications and " +"retry" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:394 -msgid "Choking to death in" +#: Client/loader/CInstallManager.cpp:561 +#, c-format +msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:528 -#: Client/core/CSettings.cpp:3479 Client/core/CMainMenu.cpp:304 -#: Client/core/CCore.cpp:674 -msgid "Main menu" +#: Client/loader/CInstallManager.cpp:613 +msgid "Create GTA:SA junctions" msgstr "" -#. Show timeout message and disconnect -#. Display an error, reset the error status and exit -#. Show a message that the connection timed out and abort -#. Show failed message and abort the attempt -#: Client/mods/deathmatch/logic/CClientGame.cpp:636 -#: Client/mods/deathmatch/logic/CClientGame.cpp:710 -#: Client/mods/deathmatch/logic/CClientGame.cpp:734 -#: Client/mods/deathmatch/logic/CClientGame.cpp:756 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1169 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1249 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1259 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1328 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1365 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1414 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1426 -#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:145 -#: Client/core/CConnectManager.cpp:80 Client/core/CConnectManager.cpp:111 -#: Client/core/CConnectManager.cpp:127 Client/core/CConnectManager.cpp:263 -#: Client/core/CConnectManager.cpp:321 Client/core/CConnectManager.cpp:404 -#: Client/core/CConnectManager.cpp:411 Client/core/CConnectManager.cpp:421 -#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4166 -#: Client/core/CSettings.cpp:4194 Client/core/CSettings.cpp:4764 -#: Client/core/CCore.cpp:1275 Client/core/CCore.cpp:1288 -#: Client/core/CGUI.cpp:87 Client/core/DXHook/CDirect3DHook9.cpp:127 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 -#: Client/loader/MainFunctions.cpp:252 Client/loader/MainFunctions.cpp:267 -#: Client/loader/MainFunctions.cpp:269 Client/loader/MainFunctions.cpp:846 -#: Client/loader/CInstallManager.cpp:552 Client/loader/CInstallManager.cpp:561 -#: Shared/mods/deathmatch/logic/CLatentTransferManager.cpp:378 -#: Shared/sdk/SharedUtil.Misc.hpp:137 -msgid "Error" +#: Client/loader/CInstallManager.cpp:657 +msgid "MTA:SA cannot launch because copying a file failed:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:636 -#: Client/mods/deathmatch/logic/CClientGame.cpp:734 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 -msgid "Invalid nickname! Please go to Settings and set a new one!" +#: Client/loader/CInstallManager.cpp:663 Client/loader/CInstallManager.cpp:703 +msgid "MTA:SA cannot launch because an MTA:SA file is incorrect or missing:" msgstr "" -#. Display the status box -#: Client/mods/deathmatch/logic/CClientGame.cpp:652 -#: Client/core/CConnectManager.cpp:148 -msgid "CONNECTING" +#: Client/loader/CInstallManager.cpp:672 +msgid "Copy MTA:SA files" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:652 -msgid "Entering the game ..." +#: Client/loader/CInstallManager.cpp:695 Client/loader/CInstallManager.cpp:773 +msgid "MTA:SA cannot launch because a GTA:SA file is incorrect or missing:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:710 -msgid "" -"Not connected; please use Quick Connect or the 'connect' command to connect " -"to a server." +#: Client/loader/CInstallManager.cpp:780 +msgid "Patch GTA:SA dependency" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:756 -msgid "Could not start the local server. See console for details." +#: Client/loader/CInstallManager.cpp:828 +msgid "" +"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:766 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1238 -msgid "Local Server" +#: Client/loader/CInstallManager.cpp:832 +msgid "" +"Please check your anti-virus for a false-positive detection, try to add an " +"exception for the GTA:SA executable and restart MTA:SA." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:766 -msgid "Starting local server ..." +#: Client/loader/CInstallManager.cpp:838 +msgid "Generate GTA:SA" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1014 -msgid "Area 51" +#: Client/loader/CInstallManager.cpp:853 +msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1023 -msgid "Walking around " +#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 +msgid "Patch GTA:SA" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1084 -#: Client/mods/deathmatch/logic/CResource.cpp:375 -#: Client/core/CSettings.cpp:3483 Client/core/CCore.cpp:674 -msgid "In-game" +#: Client/loader/CInstallManager.cpp:876 +msgid "MTA:SA cannot launch because patching GTA:SA has failed:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1169 +#: Client/loader/CInstallManager.cpp:1057 Client/core/CCore.cpp:811 #, c-format -msgid "You were kicked from the game ( %s )" -msgstr "" - -#: Client/mods/deathmatch/logic/CClientGame.cpp:1238 -msgid "Connecting to local server..." +msgid "MTA:SA cannot continue because drive %s does not have enough space." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1249 -msgid "Error connecting to server." +#: Client/loader/CInstallManager.cpp:1113 +msgid "Missing file:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1259 -msgid "Connecting to local server timed out. See console for details." +#: Client/loader/CInstallManager.cpp:1117 +msgid "If MTA fails to load, please re-install GTA:SA" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1328 -#: Client/core/CConnectManager.cpp:263 -msgid "Connection timed out" +#: Client/loader/CInstallManager.cpp:1152 +msgid "Update install settings" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1365 -msgid "Connection with the server was lost" +#: Client/loader/CInstallManager.cpp:1305 +msgid "Update compatibility settings" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1376 -#: Client/core/CConnectManager.cpp:277 Client/core/CConnectManager.cpp:281 -msgid "Disconnected: unknown protocol error" +#: Client/mods/deathmatch/CClient.cpp:36 +msgid "This version has expired." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1380 -#: Client/core/CConnectManager.cpp:285 -msgid "Disconnected: disconnected remotely" +#: Client/mods/deathmatch/CClient.cpp:56 +msgid "disconnect from the game" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1384 -#: Client/core/CConnectManager.cpp:289 -msgid "Disconnected: connection lost remotely" +#: Client/mods/deathmatch/CClient.cpp:57 +msgid "shows the nametags" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1388 -#: Client/core/CConnectManager.cpp:293 -msgid "Disconnected: you are banned from this server" +#: Client/mods/deathmatch/CClient.cpp:58 +msgid "shows the chatbox" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1392 -msgid "Disconnected: the server is currently full" +#: Client/mods/deathmatch/CClient.cpp:59 +msgid "shows the network statistics" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1396 -#: Client/core/CConnectManager.cpp:300 -msgid "Disconnected: disconnected from the server" +#. Key commands (registered as 'mod commands', can be disabled) +#: Client/mods/deathmatch/CClient.cpp:62 +msgid "open the chat input" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1400 -#: Client/core/CConnectManager.cpp:304 -msgid "Disconnected: connection to the server was lost" +#: Client/mods/deathmatch/CClient.cpp:63 +msgid "transmits voice to other players" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1404 -msgid "Disconnected: invalid password specified" +#: Client/mods/deathmatch/CClient.cpp:64 +msgid "enters a car as passenger" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1408 -#: Client/core/CConnectManager.cpp:311 -msgid "Disconnected: connection was refused" +#: Client/mods/deathmatch/CClient.cpp:65 +msgid "next radio channel" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1426 -msgid "MTA Client verification failed!" +#: Client/mods/deathmatch/CClient.cpp:66 +msgid "previous radio channel" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 -msgid "In a ditch" +#: Client/mods/deathmatch/CClient.cpp:67 +msgid "enables the radar view" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 -msgid "En-route to hospital" +#: Client/mods/deathmatch/CClient.cpp:68 +msgid "zooms the radar in" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 -msgid "Meeting their maker" +#: Client/mods/deathmatch/CClient.cpp:69 +msgid "zooms the radar out" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5714 -msgid "Regretting their decisions" +#: Client/mods/deathmatch/CClient.cpp:70 +msgid "moves the radar north" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5714 -msgid "Wasted" +#: Client/mods/deathmatch/CClient.cpp:71 +msgid "moves the radar south" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:25 -msgid "Map download progress:" +#: Client/mods/deathmatch/CClient.cpp:72 +msgid "moves the radar east" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:28 -msgid "Download Progress:" +#: Client/mods/deathmatch/CClient.cpp:73 +msgid "moves the radar west" msgstr "" -#. Find our largest piece of text, so we can size accordingly -#: Client/mods/deathmatch/logic/CTransferBox.cpp:42 -#: Client/mods/deathmatch/logic/CTransferBox.cpp:105 -#, c-format -msgid "%s of %s" +#: Client/mods/deathmatch/CClient.cpp:74 +msgid "attaches the radar" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:44 -#: Client/mods/deathmatch/logic/CTransferBox.cpp:65 -msgid "Disconnect to cancel download" +#: Client/mods/deathmatch/CClient.cpp:75 +msgid "reduces radar opacity" msgstr "" -#. Throw the error and disconnect -#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 -#, c-format -msgid "Download error: %s" +#: Client/mods/deathmatch/CClient.cpp:76 +msgid "increases radar opacity" msgstr "" -#. Create buttons -#. OK button -#: Client/gui/CGUIMessageBox_Impl.cpp:64 Client/core/CSettings.cpp:127 -#: Client/core/CSettings.cpp:4785 Client/core/CVersionUpdater.cpp:1607 -#: Client/core/CVersionUpdater.cpp:1823 Client/core/CVersionUpdater.cpp:1916 -#: Client/core/CVersionUpdater.cpp:1938 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/loader/Dialogs.cpp:133 -msgid "OK" +#: Client/mods/deathmatch/CClient.cpp:77 +msgid "toggles radar help text" msgstr "" -#. ///////////////////////////////////////////////////////////////////////// -#. -#. Dialog strings -#. -#. -#. ///////////////////////////////////////////////////////////////////////// -#: Client/gui/CGUIMessageBox_Impl.cpp:72 Client/core/CQuestionBox.cpp:195 -#: Client/core/CSettings.cpp:1389 Client/core/CSettings.cpp:1413 -#: Client/core/CSettings.cpp:4489 Client/core/CSettings.cpp:4563 -#: Client/core/CSettings.cpp:4593 Client/core/CSettings.cpp:4642 -#: Client/core/CMainMenu.cpp:1200 Client/core/CVersionUpdater.cpp:1572 -#: Client/core/CVersionUpdater.cpp:1590 Client/core/CVersionUpdater.cpp:1859 -#: Client/core/CVersionUpdater.cpp:1878 -#: Client/core/ServerBrowser/CServerInfo.cpp:479 Client/loader/Dialogs.cpp:131 -msgid "Yes" +#: Client/mods/deathmatch/CClient.cpp:78 +msgid "sends a message to the targetted player" msgstr "" -#: Client/core/CCommandFuncs.cpp:24 -msgid "***[ COMMAND HELP ]***\n" +#: Client/mods/deathmatch/CClient.cpp:79 +msgid "changes to the next weapon whilst in a vehicle" msgstr "" -#: Client/core/CCommandFuncs.cpp:158 -#, c-format -msgid "* The time is %d:%02d:%02d" +#: Client/mods/deathmatch/CClient.cpp:80 +msgid "changes to the previous weapon whilst in a vehicle" msgstr "" -#: Client/core/CCommandFuncs.cpp:242 -msgid "connect: Syntax is 'connect [ ]'" +#: Client/mods/deathmatch/CClient.cpp:81 +msgid "outputs info about the current server" msgstr "" -#: Client/core/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 -msgid "connect: Bad port number" +#. ACHTUNG" Should this be handled by the atomic cvar setter? +#: Client/mods/deathmatch/CClient.cpp:84 +msgid "defines the scale multiplier of all text-displays" msgstr "" -#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 -#, c-format -msgid "connect: Connecting to %s:%u..." +#. Development mode +#: Client/mods/deathmatch/CClient.cpp:91 +msgid "(Development mode) shows the colshapes" msgstr "" -#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 -#, c-format -msgid "connect: could not connect to %s:%u!" +#: Client/mods/deathmatch/CClient.cpp:92 +msgid "(Development mode) prints world sound ids into the debug window" msgstr "" -#: Client/core/CCommandFuncs.cpp:281 -msgid "connect: Failed to unload current mod" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:506 +msgid "Disconnected: Invalid nickname" msgstr "" -#: Client/core/CCommandFuncs.cpp:371 -msgid "Bound all controls from GTA" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 +msgid "Disconnect from server" msgstr "" -#: Client/core/CCommandFuncs.cpp:385 -msgid "Saved configuration file" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 +#, c-format +msgid "" +"Disconnected: Serial is banned.\n" +"Reason: %s" msgstr "" -#. Print it -#: Client/core/CCommandFuncs.cpp:451 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 #, c-format -msgid "* Your serial is: %s" +msgid "" +"Disconnected: You are banned.\n" +"Reason: %s" msgstr "" -#. Unknown command -#: Client/core/CCommands.cpp:223 -msgid "Unknown command or cvar: " +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 +#, c-format +msgid "" +"Disconnected: Account is banned.\n" +"Reason: %s" msgstr "" -#. Create window -#: Client/core/CConsole.cpp:417 -msgid "CONSOLE" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 +msgid "Disconnected: Version mismatch" msgstr "" -#: Client/core/CConnectManager.cpp:79 -msgid "Connecting failed. Invalid nick provided!" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 +msgid "Disconnected: Join flood. Please wait a minute, then reconnect." msgstr "" -#: Client/core/CConnectManager.cpp:110 -msgid "Connecting failed. Invalid host provided!" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 +#, c-format +msgid "" +"Disconnected: Server from different branch.\n" +"Information: %s" msgstr "" -#: Client/core/CConnectManager.cpp:126 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 #, c-format -msgid "Connecting to %s at port %u failed!" +msgid "" +"Disconnected: Bad version.\n" +"Information: %s" msgstr "" -#. Display the status box -#: Client/core/CConnectManager.cpp:147 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 #, c-format -msgid "Connecting to %s:%u ..." +msgid "" +"Disconnected: Server is running a newer build.\n" +"Information: %s" msgstr "" -#. Failed loading the mod -#: Client/core/CConnectManager.cpp:403 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 #, c-format -msgid "No such mod installed (%s)" +msgid "" +"Disconnected: Server is running an older build.\n" +"Information: %s" msgstr "" -#: Client/core/CConnectManager.cpp:411 -msgid "Bad server response (2)" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 +msgid "Disconnected: Nick already in use" msgstr "" -#: Client/core/CConnectManager.cpp:421 -msgid "Bad server response (1)" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 +msgid "Disconnected: Player element could not be created." msgstr "" -#: Client/core/CQuestionBox.cpp:192 Shared/sdk/SharedUtil.Misc.hpp:688 -msgid "Do you want to see some on-line help about this problem ?" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:567 +#, c-format +msgid "Disconnected: Server refused the connection: %s" msgstr "" -#: Client/core/CQuestionBox.cpp:194 Client/core/CSettings.cpp:1388 -#: Client/core/CSettings.cpp:1412 Client/core/CSettings.cpp:4488 -#: Client/core/CSettings.cpp:4562 Client/core/CSettings.cpp:4592 -#: Client/core/CSettings.cpp:4641 Client/core/CMainMenu.cpp:1199 -#: Client/core/CVersionUpdater.cpp:1571 Client/core/CVersionUpdater.cpp:1589 -#: Client/core/CVersionUpdater.cpp:1858 Client/core/CVersionUpdater.cpp:1877 -#: Client/core/ServerBrowser/CServerInfo.cpp:479 Client/loader/Dialogs.cpp:132 -msgid "No" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 +msgid "Disconnected: Serial verification failed" msgstr "" -#: Client/core/CJoystickManager.cpp:1578 -msgid "Accelerate Axis" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 +#, c-format +msgid "Disconnected: Connection desync %s" msgstr "" -#: Client/core/CJoystickManager.cpp:1580 -msgid "Brake Axis" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 +#, c-format +msgid "Disconnected: You were kicked by %s" msgstr "" -#: Client/core/CKeyBinds.cpp:186 -msgid "Fire" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 +#, c-format +msgid "Disconnected: You were banned by %s" msgstr "" -#: Client/core/CKeyBinds.cpp:187 -msgid "Next weapon" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 +msgid "Disconnected: Server shutdown or restarting" msgstr "" -#: Client/core/CKeyBinds.cpp:188 -msgid "Previous weapon" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 +msgid "You were kicked from the game" msgstr "" -#: Client/core/CKeyBinds.cpp:189 -msgid "Forwards" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:622 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:633 +msgid "This server requires a non-modifed gta_sa.exe" msgstr "" -#: Client/core/CKeyBinds.cpp:190 -msgid "Backwards" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 +msgid "Please replace gta_sa.exe" msgstr "" -#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2240 -#: Client/core/CSettings.cpp:2268 -msgid "Left" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 +msgid "This server does not allow custom D3D9.DLLs" msgstr "" -#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2242 -#: Client/core/CSettings.cpp:2269 -msgid "Right" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 +msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" msgstr "" -#: Client/core/CKeyBinds.cpp:193 -msgid "Zoom in" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 +msgid "This server does not allow virtual machines" msgstr "" -#: Client/core/CKeyBinds.cpp:194 -msgid "Zoom out" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 +msgid "This server requires driver signing to be enabled" msgstr "" -#: Client/core/CKeyBinds.cpp:195 -msgid "Enter/Exit" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 +msgid "Please restart your PC" msgstr "" -#: Client/core/CKeyBinds.cpp:196 -msgid "Change camera" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 +msgid "This server has detected missing anti-cheat components" msgstr "" -#. 10 -#: Client/core/CKeyBinds.cpp:197 -msgid "Jump" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 +msgid "Try restarting MTA" msgstr "" -#: Client/core/CKeyBinds.cpp:198 -msgid "Sprint" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 +msgid "This server requires a non-modifed gta3.img and gta_int.img" msgstr "" -#: Client/core/CKeyBinds.cpp:199 -msgid "Look behind" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 +msgid "Please replace gta3.img or gta_int.img" msgstr "" -#: Client/core/CKeyBinds.cpp:200 -msgid "Crouch" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 +msgid "This server does not allow Wine" msgstr "" -#: Client/core/CKeyBinds.cpp:201 -msgid "Action" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 +msgid "Ensure no other program is modifying MTA:SA" msgstr "" -#: Client/core/CKeyBinds.cpp:202 -msgid "Walk" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 +msgid "Time Remaining: " msgstr "" -#: Client/core/CKeyBinds.cpp:203 -msgid "Vehicle fire" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:660 +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:662 +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:664 +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:666 +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" + +#. Display the error +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:670 +msgid "Disconnected" msgstr "" -#: Client/core/CKeyBinds.cpp:204 -msgid "Vehicle secondary fire" +#: Client/mods/deathmatch/logic/CClientGame.cpp:369 +msgid "Flying a UFO around" +msgstr "" + +#: Client/mods/deathmatch/logic/CClientGame.cpp:369 +msgid "Cruising around" msgstr "" -#: Client/core/CKeyBinds.cpp:205 -msgid "Vehicle left" +#: Client/mods/deathmatch/logic/CClientGame.cpp:369 +msgid "Riding the waves of" msgstr "" -#: Client/core/CKeyBinds.cpp:206 -msgid "Vehicle right" +#: Client/mods/deathmatch/logic/CClientGame.cpp:370 +msgid "Riding the train in" msgstr "" -#. 20 -#: Client/core/CKeyBinds.cpp:207 -msgid "Steer forwards/down" +#: Client/mods/deathmatch/logic/CClientGame.cpp:370 +msgid "Flying around" msgstr "" -#: Client/core/CKeyBinds.cpp:208 -msgid "Steer backwards/up" +#: Client/mods/deathmatch/logic/CClientGame.cpp:371 +msgid "Riding around" msgstr "" -#: Client/core/CKeyBinds.cpp:209 -msgid "Accelerate" +#: Client/mods/deathmatch/logic/CClientGame.cpp:371 +msgid "Monster truckin' around" msgstr "" -#: Client/core/CKeyBinds.cpp:210 -msgid "Brake/Reverse" +#: Client/mods/deathmatch/logic/CClientGame.cpp:371 +msgid "Quaddin' around" msgstr "" -#: Client/core/CKeyBinds.cpp:211 -msgid "Radio next" +#: Client/mods/deathmatch/logic/CClientGame.cpp:372 +msgid "Bunny hopping around" msgstr "" -#: Client/core/CKeyBinds.cpp:212 -msgid "Radio previous" +#: Client/mods/deathmatch/logic/CClientGame.cpp:372 +msgid "Doing weird stuff in" msgstr "" -#: Client/core/CKeyBinds.cpp:213 -msgid "Radio user track skip" +#: Client/mods/deathmatch/logic/CClientGame.cpp:376 +msgid "Climbing around in" msgstr "" -#: Client/core/CKeyBinds.cpp:214 -msgid "Horn" +#: Client/mods/deathmatch/logic/CClientGame.cpp:377 +#: Client/mods/deathmatch/logic/CClientGame.cpp:378 +msgid "Doing a drive-by in" msgstr "" -#: Client/core/CKeyBinds.cpp:215 -msgid "Sub-mission" +#: Client/mods/deathmatch/logic/CClientGame.cpp:379 +msgid "Blub blub..." msgstr "" -#: Client/core/CKeyBinds.cpp:216 -msgid "Handbrake" +#: Client/mods/deathmatch/logic/CClientGame.cpp:380 +msgid "Breathing water" msgstr "" -#. 30 -#: Client/core/CKeyBinds.cpp:217 -msgid "Vehicle look left" +#: Client/mods/deathmatch/logic/CClientGame.cpp:381 +msgid "Drowning in" msgstr "" -#: Client/core/CKeyBinds.cpp:218 -msgid "Vehicle look right" +#: Client/mods/deathmatch/logic/CClientGame.cpp:382 +msgid "Ducking for cover in" msgstr "" -#: Client/core/CKeyBinds.cpp:219 -msgid "Vehicle look behind" +#: Client/mods/deathmatch/logic/CClientGame.cpp:383 +msgid "Fighting in" msgstr "" -#: Client/core/CKeyBinds.cpp:220 -msgid "Vehicle mouse look" +#: Client/mods/deathmatch/logic/CClientGame.cpp:384 +msgid "Throwing fists in" msgstr "" -#: Client/core/CKeyBinds.cpp:221 -msgid "Special control left" +#: Client/mods/deathmatch/logic/CClientGame.cpp:385 +msgid "Blastin' fools in" msgstr "" -#: Client/core/CKeyBinds.cpp:222 -msgid "Special control right" +#: Client/mods/deathmatch/logic/CClientGame.cpp:386 +msgid "Shooting up" msgstr "" -#: Client/core/CKeyBinds.cpp:223 -msgid "Special control down" +#: Client/mods/deathmatch/logic/CClientGame.cpp:387 +msgid "Jetpacking in" msgstr "" -#: Client/core/CKeyBinds.cpp:224 -msgid "Special control up" +#: Client/mods/deathmatch/logic/CClientGame.cpp:388 +msgid "Literally on fire in" msgstr "" -#: Client/core/CKeyBinds.cpp:225 -msgid "Aim weapon" +#: Client/mods/deathmatch/logic/CClientGame.cpp:389 +msgid "Burning up in" msgstr "" -#: Client/core/CKeyBinds.cpp:226 -msgid "Conversation yes" +#: Client/mods/deathmatch/logic/CClientGame.cpp:390 +msgid "Swimming in" msgstr "" -#. 40 -#: Client/core/CKeyBinds.cpp:227 -msgid "Conversation no" +#: Client/mods/deathmatch/logic/CClientGame.cpp:391 +msgid "Floating around in" msgstr "" -#: Client/core/CKeyBinds.cpp:228 -msgid "Group control forwards" +#: Client/mods/deathmatch/logic/CClientGame.cpp:392 +msgid "Being chased by a shark" msgstr "" -#: Client/core/CKeyBinds.cpp:229 -msgid "Group control backwards" +#: Client/mods/deathmatch/logic/CClientGame.cpp:393 +msgid "Choking to death in" msgstr "" -#. TRANSLATORS: Replace with your language native name -#: Client/core/CLocalization.cpp:16 -msgid "English" +#: Client/mods/deathmatch/logic/CClientGame.cpp:527 Client/core/CCore.cpp:674 +#: Client/core/CMainMenu.cpp:304 Client/core/CSettings.cpp:3479 +msgid "Main menu" msgstr "" -#. Create window (with frame) if it will fit inside the screen resolution -#: Client/core/CSettings.cpp:84 -msgid "SETTINGS" +#: Client/mods/deathmatch/logic/CClientGame.cpp:635 +#: Client/mods/deathmatch/logic/CClientGame.cpp:733 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 +msgid "Invalid nickname! Please go to Settings and set a new one!" msgstr "" -#: Client/core/CSettings.cpp:116 -msgid "Multiplayer" +#. Display the status box +#: Client/mods/deathmatch/logic/CClientGame.cpp:651 +#: Client/core/CConnectManager.cpp:148 +msgid "CONNECTING" msgstr "" -#: Client/core/CSettings.cpp:117 -msgid "Video" +#: Client/mods/deathmatch/logic/CClientGame.cpp:651 +msgid "Entering the game ..." msgstr "" -#: Client/core/CSettings.cpp:118 -msgid "Audio" +#: Client/mods/deathmatch/logic/CClientGame.cpp:709 +msgid "" +"Not connected; please use Quick Connect or the 'connect' command to connect " +"to a server." msgstr "" -#: Client/core/CSettings.cpp:119 -msgid "Binds" +#: Client/mods/deathmatch/logic/CClientGame.cpp:755 +msgid "Could not start the local server. See console for details." msgstr "" -#: Client/core/CSettings.cpp:120 -msgid "Controls" +#: Client/mods/deathmatch/logic/CClientGame.cpp:765 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1237 +msgid "Local Server" msgstr "" -#: Client/core/CSettings.cpp:121 -msgid "Interface" +#: Client/mods/deathmatch/logic/CClientGame.cpp:765 +msgid "Starting local server ..." msgstr "" -#: Client/core/CSettings.cpp:122 -msgid "Web Browser" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1013 +msgid "Area 51" msgstr "" -#: Client/core/CSettings.cpp:123 -msgid "Advanced" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1022 +msgid "Walking around " msgstr "" -#: Client/core/CSettings.cpp:147 Client/core/CSettings.cpp:338 -#: Client/core/CSettings.cpp:617 Client/core/CSettings.cpp:889 -msgid "Load defaults" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1083 +#: Client/mods/deathmatch/logic/CResource.cpp:372 Client/core/CCore.cpp:674 +#: Client/core/CSettings.cpp:3483 +msgid "In-game" msgstr "" -#. * -#. * Controls tab -#. * -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 -msgid "Mouse sensitivity:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1168 +#, c-format +msgid "You were kicked from the game ( %s )" msgstr "" -#. VerticalAimSensitivity -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 -msgid "Vertical aim sensitivity:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1237 +msgid "Connecting to local server..." msgstr "" -#. Mouse Options -#: Client/core/CSettings.cpp:160 -msgid "Mouse options" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1248 +msgid "Error connecting to server." msgstr "" -#: Client/core/CSettings.cpp:167 -msgid "Invert mouse vertically" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1258 +msgid "Connecting to local server timed out. See console for details." msgstr "" -#: Client/core/CSettings.cpp:171 -msgid "Steer with mouse" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1327 +#: Client/core/CConnectManager.cpp:263 +msgid "Connection timed out" msgstr "" -#: Client/core/CSettings.cpp:175 -msgid "Fly with mouse" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1364 +msgid "Connection with the server was lost" msgstr "" -#. Joypad options -#: Client/core/CSettings.cpp:217 -msgid "Joypad options" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1375 +#: Client/core/CConnectManager.cpp:277 Client/core/CConnectManager.cpp:281 +msgid "Disconnected: unknown protocol error" msgstr "" -#: Client/core/CSettings.cpp:230 -msgid "Standard controls (Mouse + Keyboard)" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1379 +#: Client/core/CConnectManager.cpp:285 +msgid "Disconnected: disconnected remotely" msgstr "" -#: Client/core/CSettings.cpp:237 -msgid "Classic controls (Joypad)" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1383 +#: Client/core/CConnectManager.cpp:289 +msgid "Disconnected: connection lost remotely" msgstr "" -#: Client/core/CSettings.cpp:274 -msgid "Dead Zone" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1387 +#: Client/core/CConnectManager.cpp:293 +msgid "Disconnected: you are banned from this server" msgstr "" -#: Client/core/CSettings.cpp:279 -msgid "Saturation" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1391 +msgid "Disconnected: the server is currently full" msgstr "" -#: Client/core/CSettings.cpp:285 -msgid "Use the 'Binds' tab for joypad buttons." +#: Client/mods/deathmatch/logic/CClientGame.cpp:1395 +#: Client/core/CConnectManager.cpp:300 +msgid "Disconnected: disconnected from the server" msgstr "" -#: Client/core/CSettings.cpp:324 -msgid "Left Stick" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1399 +#: Client/core/CConnectManager.cpp:304 +msgid "Disconnected: connection to the server was lost" msgstr "" -#: Client/core/CSettings.cpp:330 -msgid "Right Stick" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1403 +msgid "Disconnected: invalid password specified" msgstr "" -#: Client/core/CSettings.cpp:345 -msgid "DESCRIPTION" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1407 +#: Client/core/CConnectManager.cpp:311 +msgid "Disconnected: connection was refused" msgstr "" -#: Client/core/CSettings.cpp:346 -msgid "KEY" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1425 +msgid "MTA Client verification failed!" msgstr "" -#: Client/core/CSettings.cpp:348 -msgid "ALT. KEY" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 +msgid "In a ditch" msgstr "" -#. * -#. * Multiplayer tab -#. * -#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 -msgid "Nick:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 +msgid "En-route to hospital" msgstr "" -#: Client/core/CSettings.cpp:378 -msgid "Save server passwords" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 +msgid "Meeting their maker" msgstr "" -#: Client/core/CSettings.cpp:383 -msgid "Auto-refresh server browser" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5708 +msgid "Regretting their decisions" msgstr "" -#: Client/core/CSettings.cpp:388 -msgid "Allow screen upload" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5708 +msgid "Wasted" msgstr "" -#: Client/core/CSettings.cpp:393 -msgid "Allow external sounds" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:25 +msgid "Map download progress:" msgstr "" -#: Client/core/CSettings.cpp:398 -msgid "Always show download window" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:28 +msgid "Download Progress:" msgstr "" -#: Client/core/CSettings.cpp:403 -msgid "Allow connecting with Discord Rich Presence" +#. Find our largest piece of text, so we can size accordingly +#: Client/mods/deathmatch/logic/CTransferBox.cpp:42 +#: Client/mods/deathmatch/logic/CTransferBox.cpp:105 +#, c-format +msgid "%s of %s" msgstr "" -#: Client/core/CSettings.cpp:408 -msgid "Use customized GTA:SA files" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:44 +#: Client/mods/deathmatch/logic/CTransferBox.cpp:65 +msgid "Disconnect to cancel download" msgstr "" -#: Client/core/CSettings.cpp:413 -msgid "Map rendering options" +#. Throw the error and disconnect +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 +#, c-format +msgid "Download error: %s" msgstr "" -#: Client/core/CSettings.cpp:419 Client/core/CSettings.cpp:628 -msgid "Opacity:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:37 +msgid "HOST GAME" msgstr "" #. * -#. * Audio tab +#. * Webbrowser tab #. * -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:448 -msgid "Master volume:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:51 +#: Client/core/CSettings.cpp:442 Client/core/CSettings.cpp:630 +#: Client/core/CSettings.cpp:904 Client/core/CSettings.cpp:2018 +msgid "General" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:467 -msgid "Radio volume:" +#. m_pTabs->CreateTab ( "Gamemode" ); +#: Client/mods/deathmatch/logic/CLocalServer.cpp:53 +msgid "Resources" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:486 -msgid "SFX volume:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:55 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:57 +msgid "Server name:" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:505 -msgid "MTA volume:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:64 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:66 +msgid "Password:" msgstr "" -#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:524 -msgid "Voice volume:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:73 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:75 +msgid "Max players:" msgstr "" -#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:565 -msgid "Play mode:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:82 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:84 +msgid "Broadcast:" msgstr "" -#: Client/core/CSettings.cpp:543 -msgid "Radio options" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:86 +msgid "LAN" msgstr "" -#: Client/core/CSettings.cpp:549 -msgid "Radio Equalizer" +#. Create the tabs +#: Client/mods/deathmatch/logic/CLocalServer.cpp:90 +#: Client/core/ServerBrowser/CServerBrowser.cpp:133 +msgid "Internet" msgstr "" -#: Client/core/CSettings.cpp:554 -msgid "Radio Auto-tune" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:99 +msgid "Selected" msgstr "" -#: Client/core/CSettings.cpp:559 -msgid "Usertrack options" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:116 +msgid "All" msgstr "" -#: Client/core/CSettings.cpp:573 Client/core/CSettings.cpp:3087 -msgid "Radio" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:118 +msgid "Start" msgstr "" -#: Client/core/CSettings.cpp:574 Client/core/CSettings.cpp:3089 -msgid "Random" +#: Client/cefweb/CWebsiteRequests.cpp:19 +msgid "Website requests" msgstr "" -#: Client/core/CSettings.cpp:575 Client/core/CSettings.cpp:3091 -msgid "Sequential" +#: Client/cefweb/CWebsiteRequests.cpp:27 +msgid "" +"The server requests the following websites in order to load them (later):" msgstr "" -#: Client/core/CSettings.cpp:578 -msgid "Automatic Media Scan" +#: Client/cefweb/CWebsiteRequests.cpp:33 +msgid "NEVER ENTER SENSITIVE DATA TO PROTECT THEM FROM BEING STOLEN" msgstr "" -#: Client/core/CSettings.cpp:585 -msgid "Mute options" +#: Client/cefweb/CWebsiteRequests.cpp:46 +msgid "Remember decision" msgstr "" -#: Client/core/CSettings.cpp:591 -msgid "Mute All sounds when minimized" +#: Client/cefweb/CWebsiteRequests.cpp:51 Client/core/CSettings.cpp:974 +msgid "Allow" msgstr "" -#: Client/core/CSettings.cpp:596 -msgid "Mute Radio sounds when minimized" +#: Client/cefweb/CWebsiteRequests.cpp:57 +msgid "Deny" msgstr "" -#: Client/core/CSettings.cpp:601 -msgid "Mute SFX sounds when minimized" +#: Client/game_sa/CSettingsSA.cpp:753 +msgid "Can't find valid screen resolution." msgstr "" -#: Client/core/CSettings.cpp:606 -msgid "Mute MTA sounds when minimized" +#. Confirm that res should be used +#: Client/game_sa/CSettingsSA.cpp:829 +msgid "Are you sure you want to use this screen resolution?" msgstr "" -#: Client/core/CSettings.cpp:611 -msgid "Mute Voice sounds when minimized" +#. Couldn't create render target for CPostEffects +#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 +msgid "Problem with graphics driver" msgstr "" -#. * -#. * Video tab -#. * -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 -msgid "Resolution:" +#: Client/core/CJoystickManager.cpp:1578 +msgid "Accelerate Axis" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:683 -msgid "FOV:" +#: Client/core/CJoystickManager.cpp:1580 +msgid "Brake Axis" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:699 -msgid "Draw Distance:" +#. Create the window +#: Client/core/CNewsBrowser.cpp:153 +msgid "NEWS" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 -msgid "Brightness:" +#. News link +#: Client/core/CNewsBrowser.cpp:171 Client/core/CNewsBrowser.cpp:172 +msgid "Visit latest news article" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 -msgid "FX Quality:" +#. TRANSLATORS: Replace with your language native name +#: Client/core/CLocalization.cpp:16 +msgid "English" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 -msgid "Anisotropic filtering:" +#: Client/core/CKeyBinds.cpp:186 +msgid "Fire" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 -msgid "Anti-aliasing:" +#: Client/core/CKeyBinds.cpp:187 +msgid "Next weapon" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 -msgid "Aspect Ratio:" +#: Client/core/CKeyBinds.cpp:188 +msgid "Previous weapon" msgstr "" -#: Client/core/CSettings.cpp:648 -msgid "Windowed" +#: Client/core/CKeyBinds.cpp:189 +msgid "Forwards" msgstr "" -#: Client/core/CSettings.cpp:654 -msgid "DPI aware" +#: Client/core/CKeyBinds.cpp:190 +msgid "Backwards" msgstr "" -#: Client/core/CSettings.cpp:662 Client/core/CSettings.cpp:1004 -#: Client/loader/MainFunctions.cpp:389 -msgid "Fullscreen mode:" +#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2240 +#: Client/core/CSettings.cpp:2268 +msgid "Left" msgstr "" -#: Client/core/CSettings.cpp:669 Client/core/CSettings.cpp:1613 -msgid "Standard" +#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2242 +#: Client/core/CSettings.cpp:2269 +msgid "Right" msgstr "" -#: Client/core/CSettings.cpp:670 Client/core/CSettings.cpp:1615 -#: Client/loader/MainFunctions.cpp:389 -msgid "Borderless window" +#: Client/core/CKeyBinds.cpp:193 +msgid "Zoom in" msgstr "" -#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 -msgid "Borderless keep res" +#: Client/core/CKeyBinds.cpp:194 +msgid "Zoom out" msgstr "" -#: Client/core/CSettings.cpp:675 -msgid "Mip Mapping" +#: Client/core/CKeyBinds.cpp:195 +msgid "Enter/Exit" msgstr "" -#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 -msgid "Low" +#: Client/core/CKeyBinds.cpp:196 +msgid "Change camera" msgstr "" -#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 -msgid "Medium" +#. 10 +#: Client/core/CKeyBinds.cpp:197 +msgid "Jump" msgstr "" -#: Client/core/CSettings.cpp:745 Client/core/CSettings.cpp:1086 -#: Client/core/CSettings.cpp:1521 Client/core/CSettings.cpp:3145 -msgid "High" +#: Client/core/CKeyBinds.cpp:198 +msgid "Sprint" msgstr "" -#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 -msgid "Very high" +#: Client/core/CKeyBinds.cpp:199 +msgid "Look behind" msgstr "" -#: Client/core/CSettings.cpp:761 Client/core/CSettings.cpp:784 -#: Client/core/CSettings.cpp:1017 Client/core/CSettings.cpp:1071 -#: Client/core/CSettings.cpp:1201 Client/core/CSettings.cpp:1527 -#: Client/core/CSettings.cpp:3152 Client/core/CSettings.cpp:3184 -#: Client/core/CSettings.cpp:3206 Client/core/CSettings.cpp:4234 -msgid "Off" +#: Client/core/CKeyBinds.cpp:200 +msgid "Crouch" msgstr "" -#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 -msgid "1x" +#: Client/core/CKeyBinds.cpp:201 +msgid "Action" msgstr "" -#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 -msgid "2x" +#: Client/core/CKeyBinds.cpp:202 +msgid "Walk" msgstr "" -#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 -msgid "3x" +#: Client/core/CKeyBinds.cpp:203 +msgid "Vehicle fire" msgstr "" -#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1019 -#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 -msgid "Auto" +#: Client/core/CKeyBinds.cpp:204 +msgid "Vehicle secondary fire" msgstr "" -#: Client/core/CSettings.cpp:801 Client/core/CSettings.cpp:1541 -msgid "4:3" +#: Client/core/CKeyBinds.cpp:205 +msgid "Vehicle left" msgstr "" -#: Client/core/CSettings.cpp:802 Client/core/CSettings.cpp:1543 -msgid "16:10" +#: Client/core/CKeyBinds.cpp:206 +msgid "Vehicle right" msgstr "" -#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 -msgid "16:9" +#. 20 +#: Client/core/CKeyBinds.cpp:207 +msgid "Steer forwards/down" msgstr "" -#: Client/core/CSettings.cpp:806 -msgid "HUD Match Aspect Ratio" +#: Client/core/CKeyBinds.cpp:208 +msgid "Steer backwards/up" msgstr "" -#: Client/core/CSettings.cpp:812 -msgid "Volumetric Shadows" +#: Client/core/CKeyBinds.cpp:209 +msgid "Accelerate" msgstr "" -#: Client/core/CSettings.cpp:816 -msgid "Grass effect" +#: Client/core/CKeyBinds.cpp:210 +msgid "Brake/Reverse" msgstr "" -#: Client/core/CSettings.cpp:820 -msgid "Heat haze" +#: Client/core/CKeyBinds.cpp:211 +msgid "Radio next" msgstr "" -#: Client/core/CSettings.cpp:824 -msgid "Tyre Smoke etc" +#: Client/core/CKeyBinds.cpp:212 +msgid "Radio previous" msgstr "" -#: Client/core/CSettings.cpp:828 -msgid "Dynamic ped shadows" +#: Client/core/CKeyBinds.cpp:213 +msgid "Radio user track skip" msgstr "" -#: Client/core/CSettings.cpp:832 -msgid "Motion blur" +#: Client/core/CKeyBinds.cpp:214 +msgid "Horn" msgstr "" -#: Client/core/CSettings.cpp:837 -msgid "Full Screen Minimize" +#: Client/core/CKeyBinds.cpp:215 +msgid "Sub-mission" msgstr "" -#: Client/core/CSettings.cpp:849 -msgid "Enable Device Selection Dialog" +#: Client/core/CKeyBinds.cpp:216 +msgid "Handbrake" msgstr "" -#: Client/core/CSettings.cpp:861 -msgid "Show unsafe resolutions" +#. 30 +#: Client/core/CKeyBinds.cpp:217 +msgid "Vehicle look left" msgstr "" -#: Client/core/CSettings.cpp:873 -msgid "Render vehicles always in high detail" +#: Client/core/CKeyBinds.cpp:218 +msgid "Vehicle look right" msgstr "" -#: Client/core/CSettings.cpp:877 -msgid "Render peds always in high detail" +#: Client/core/CKeyBinds.cpp:219 +msgid "Vehicle look behind" msgstr "" -#: Client/core/CSettings.cpp:881 -msgid "Corona rain reflections" +#: Client/core/CKeyBinds.cpp:220 +msgid "Vehicle mouse look" msgstr "" -#: Client/core/CSettings.cpp:910 -msgid "Enable remote websites" +#: Client/core/CKeyBinds.cpp:221 +msgid "Special control left" msgstr "" -#: Client/core/CSettings.cpp:915 -msgid "Enable Javascript on remote websites" +#: Client/core/CKeyBinds.cpp:222 +msgid "Special control right" msgstr "" -#: Client/core/CSettings.cpp:920 -msgid "Custom blacklist" +#: Client/core/CKeyBinds.cpp:223 +msgid "Special control down" msgstr "" -#: Client/core/CSettings.cpp:931 Client/core/CSettings.cpp:966 -msgid "Enter a domain e.g. google.com" +#: Client/core/CKeyBinds.cpp:224 +msgid "Special control up" msgstr "" -#: Client/core/CSettings.cpp:939 -msgid "Block" +#: Client/core/CKeyBinds.cpp:225 +msgid "Aim weapon" msgstr "" -#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 -msgid "Domain" +#: Client/core/CKeyBinds.cpp:226 +msgid "Conversation yes" msgstr "" -#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 -msgid "Remove domain" +#. 40 +#: Client/core/CKeyBinds.cpp:227 +msgid "Conversation no" msgstr "" -#. Reset vecTemp -#: Client/core/CSettings.cpp:955 -msgid "Custom whitelist" +#: Client/core/CKeyBinds.cpp:228 +msgid "Group control forwards" msgstr "" -#: Client/core/CSettings.cpp:974 Client/cefweb/CWebsiteRequests.cpp:51 -msgid "Allow" +#: Client/core/CKeyBinds.cpp:229 +msgid "Group control backwards" msgstr "" -#. Misc section label -#: Client/core/CSettings.cpp:997 -msgid "Misc" +#: Client/core/CCommandFuncs.cpp:24 +msgid "***[ COMMAND HELP ]***\n" msgstr "" -#. Fast clothes loading -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1010 -#: Client/core/CSettings.cpp:4803 -msgid "Fast CJ clothes loading:" +#: Client/core/CCommandFuncs.cpp:158 +#, c-format +msgid "* The time is %d:%02d:%02d" msgstr "" -#. Browser scan speed -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 -#: Client/core/CSettings.cpp:4805 -msgid "Browser speed:" +#: Client/core/CCommandFuncs.cpp:242 +msgid "connect: Syntax is 'connect [ ]'" msgstr "" -#. Single download -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 -#: Client/core/CSettings.cpp:4807 -msgid "Single connection:" +#: Client/core/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 +msgid "connect: Bad port number" msgstr "" -#. Packet tag -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 -#: Client/core/CSettings.cpp:4809 -msgid "Packet tag:" +#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 +#, c-format +msgid "connect: Connecting to %s:%u..." msgstr "" -#. Progress animation -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1064 -#: Client/core/CSettings.cpp:4811 -msgid "Progress animation:" +#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 +#, c-format +msgid "connect: could not connect to %s:%u!" msgstr "" -#. Process priority -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1077 -#: Client/core/CSettings.cpp:4801 -msgid "Process priority:" +#: Client/core/CCommandFuncs.cpp:281 +msgid "connect: Failed to unload current mod" msgstr "" -#. Debug setting -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1091 -#: Client/core/CSettings.cpp:4813 -msgid "Debug setting:" +#: Client/core/CCommandFuncs.cpp:371 +msgid "Bound all controls from GTA" msgstr "" -#. Streaming memory -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1114 -#: Client/core/CSettings.cpp:4815 -msgid "Streaming memory:" +#: Client/core/CCommandFuncs.cpp:385 +msgid "Saved configuration file" msgstr "" -#. Update build type -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 -msgid "Update build type:" +#. Print it +#: Client/core/CCommandFuncs.cpp:451 +#, c-format +msgid "* Your serial is: %s" msgstr "" -#. UpdateAutoInstall -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 -msgid "Install important updates:" +#. Unknown command +#: Client/core/CCommands.cpp:216 +msgid "Unknown command or cvar: " msgstr "" -#: Client/core/CSettings.cpp:1018 Client/core/CSettings.cpp:1046 -#: Client/core/CSettings.cpp:1059 Client/core/CSettings.cpp:3156 -#: Client/core/CSettings.cpp:3172 Client/core/CSettings.cpp:3179 -msgid "On" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Busy" msgstr "" -#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 -msgid "Very slow" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Can't check for updates right now" msgstr "" -#: Client/core/CSettings.cpp:1032 Client/core/CSettings.cpp:1045 -#: Client/core/CSettings.cpp:1058 Client/core/CSettings.cpp:1072 -#: Client/core/CSettings.cpp:1098 Client/core/CSettings.cpp:1110 -#: Client/core/CSettings.cpp:1202 Client/core/CSettings.cpp:1222 -#: Client/core/CSettings.cpp:3163 Client/core/CSettings.cpp:3170 -#: Client/core/CSettings.cpp:3177 Client/core/CSettings.cpp:3186 -#: Client/core/CSettings.cpp:3199 -msgid "Default" +#: Client/core/CVersionUpdater.cpp:1567 Client/core/CVersionUpdater.cpp:1587 +#: Client/core/CVersionUpdater.cpp:1605 +#, c-format +msgid "MTA:SA %s required" msgstr "" -#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 -msgid "Fast" +#: Client/core/CVersionUpdater.cpp:1568 +#, c-format +msgid "" +"An updated version of MTA:SA %s is required to join the selected server.\n" +"\n" +"Do you want to download and install MTA:SA %s ?" msgstr "" -#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 -msgid "Normal" +#: Client/core/CVersionUpdater.cpp:1588 +#, c-format +msgid "Do you want to launch MTA:SA %s and connect to this server ?" msgstr "" -#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 -msgid "Above normal" +#: Client/core/CVersionUpdater.cpp:1606 +msgid "" +"It is not possible to connect at this time.\n" +"\n" +"Please try later." msgstr "" -#: Client/core/CSettings.cpp:1121 -msgid "Min" +#: Client/core/CVersionUpdater.cpp:1788 +msgid "Connecting" msgstr "" -#: Client/core/CSettings.cpp:1134 -msgid "Max" +#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 +msgid "Please wait..." msgstr "" -#. Windows 8 compatibility -#: Client/core/CSettings.cpp:1141 -msgid "Windows 8 compatibility:" +#: Client/core/CVersionUpdater.cpp:1804 +msgid "CHECKING" msgstr "" -#: Client/core/CSettings.cpp:1145 -msgid "16-bit color" +#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 +msgid "UPDATE CHECK" msgstr "" -#: Client/core/CSettings.cpp:1150 -msgid "Mouse fix" +#: Client/core/CVersionUpdater.cpp:1822 +msgid "No update needed" msgstr "" -#. Cache path info -#: Client/core/CSettings.cpp:1168 -msgid "Client resource files:" +#: Client/core/CVersionUpdater.cpp:1839 +msgid "DOWNLOADING" msgstr "" -#: Client/core/CSettings.cpp:1172 -msgid "Show in Explorer" +#: Client/core/CVersionUpdater.cpp:1840 +msgid "waiting..." msgstr "" -#. Auto updater section label -#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 -msgid "Auto updater" +#: Client/core/CVersionUpdater.cpp:1856 +msgid "MANDATORY UPDATE" msgstr "" -#. Check for updates -#: Client/core/CSettings.cpp:1228 -msgid "Check for update now" +#: Client/core/CVersionUpdater.cpp:1857 +msgid "" +"To join this server, you must update MTA.\n" +"\n" +" Do you want to update now ?" msgstr "" -#: Client/core/CSettings.cpp:1382 -msgid "Some settings will be changed when you next start MTA" +#: Client/core/CVersionUpdater.cpp:1875 +msgid "OPTIONAL UPDATE" msgstr "" -#: Client/core/CSettings.cpp:1383 +#: Client/core/CVersionUpdater.cpp:1876 msgid "" +"Server says an update is recommended, but not essential.\n" "\n" +" Do you want to update now ?" +msgstr "" + +#: Client/core/CVersionUpdater.cpp:1915 +msgid "" +"Update not currently avalable.\n" "\n" -"Do you want to restart now?" +"Please check www.mtasa.com" msgstr "" -#: Client/core/CSettings.cpp:1386 -msgid "RESTART REQUIRED" +#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 +msgid "ERROR SAVING" msgstr "" -#: Client/core/CSettings.cpp:1406 -msgid "Some settings will be changed when you disconnect the current server" +#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 +msgid "Unable to create the file." msgstr "" -#: Client/core/CSettings.cpp:1407 -msgid "" -"\n" -"\n" -"Do you want to disconnect now?" +#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 +#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 +msgid "ERROR DOWNLOADING" msgstr "" -#: Client/core/CSettings.cpp:1410 -msgid "DISCONNECT REQUIRED" +#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 +msgid "The downloaded file appears to be incorrect." msgstr "" -#. Update the joystick name -#: Client/core/CSettings.cpp:1737 -msgid "Joypad not detected - Check connections and restart game" +#: Client/core/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 +msgid "For some reason." msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Binding axis" +#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 +msgid "DOWNLOAD COMPLETE" msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Move an axis to bind, or escape to clear" +#: Client/core/CVersionUpdater.cpp:1990 +msgid " - Unknown problem in _DialogUpdateResult" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Language:" +#: Client/core/CVersionUpdater.cpp:2081 Client/core/CSettings.cpp:4590 +msgid "CUSTOMIZED GTA:SA FILES" +msgstr "" + +#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 +msgid "Ok" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Skin:" +#: Client/core/CVersionUpdater.cpp:2096 +msgid "ERROR" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Presets:" +#: Client/core/CVersionUpdater.cpp:2097 +msgid "" +"Some MTA:SA data files are missing.\n" +"\n" +"\n" +"Please reinstall MTA:SA" msgstr "" -#: Client/core/CSettings.cpp:2058 -msgid "Chat" +#: Client/core/CVersionUpdater.cpp:2774 +#, c-format +msgid "%3d %% completed" msgstr "" -#: Client/core/CSettings.cpp:2075 -msgid "Load" +#: Client/core/CVersionUpdater.cpp:2777 +#, c-format +msgid "" +"\n" +"\n" +"Waiting for response - %-3d" msgstr "" -#: Client/core/CSettings.cpp:2087 -msgid "Colors" +#: Client/core/CCore.cpp:813 Shared/mods/deathmatch/logic/Utils.cpp:129 +msgid "Fatal error" msgstr "" -#: Client/core/CSettings.cpp:2088 -msgid "Layout" +#: Client/core/CCore.cpp:938 +msgid "TO FIX, REMOVE THIS FILE:" msgstr "" -#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 -msgid "Options" +#: Client/core/CCore.cpp:970 +#, c-format +msgid "%s module is incorrect!" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Background" +#: Client/core/CCore.cpp:1275 +msgid "Error executing URL" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Text" +#: Client/core/CCore.cpp:1287 +#, c-format +msgid "Error running mod specified in command line ('%s')" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Background" +#. m_pCommands->Add ( "e", CCommandFuncs::Editor ); +#. m_pCommands->Add ( "clear", CCommandFuncs::Clear ); +#: Client/core/CCore.cpp:1389 +msgid "this help screen" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Text" +#: Client/core/CCore.cpp:1390 Client/core/CCore.cpp:1391 +msgid "exits the application" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Lines:" +#: Client/core/CCore.cpp:1392 +msgid "shows the version" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Scale:" +#: Client/core/CCore.cpp:1393 +msgid "shows the time" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Width:" +#: Client/core/CCore.cpp:1394 +msgid "shows the hud" msgstr "" -#: Client/core/CSettings.cpp:2121 -msgid "Size" +#: Client/core/CCore.cpp:1395 +msgid "shows all the binds" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "after" +#: Client/core/CCore.cpp:1396 +msgid "shows your serial" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "for" +#: Client/core/CCore.cpp:1405 +msgid "connects to a server (host port nick pass)" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "sec" +#: Client/core/CCore.cpp:1406 +msgid "connects to a previous server" msgstr "" -#: Client/core/CSettings.cpp:2173 -msgid "Fading" +#: Client/core/CCore.cpp:1407 +msgid "binds a key (key control)" msgstr "" -#: Client/core/CSettings.cpp:2179 -msgid "Fade out old lines" +#: Client/core/CCore.cpp:1408 +msgid "unbinds a key (key)" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Horizontal:" +#: Client/core/CCore.cpp:1409 +msgid "copies the default gta controls" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Vertical:" +#: Client/core/CCore.cpp:1410 +msgid "outputs a screenshot" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Text-Align:" +#: Client/core/CCore.cpp:1411 +msgid "immediately saves the config" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "X-Offset:" +#: Client/core/CCore.cpp:1413 +msgid "clears the debug view" msgstr "" -#: Client/core/CSettings.cpp:2220 -msgid "Y-Offset:" +#: Client/core/CCore.cpp:1414 +msgid "scrolls the chatbox upwards" msgstr "" -#: Client/core/CSettings.cpp:2226 -msgid "Position" +#: Client/core/CCore.cpp:1415 +msgid "scrolls the chatbox downwards" msgstr "" -#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 -msgid "Center" +#: Client/core/CCore.cpp:1416 +msgid "scrolls the debug view upwards" msgstr "" -#: Client/core/CSettings.cpp:2254 -msgid "Top" +#: Client/core/CCore.cpp:1417 +msgid "scrolls the debug view downwards" msgstr "" -#: Client/core/CSettings.cpp:2256 -msgid "Bottom" +#: Client/core/CCore.cpp:1420 +msgid "shows the memory statistics" msgstr "" -#: Client/core/CSettings.cpp:2304 -msgid "Font" +#: Client/core/CCore.cpp:1421 +msgid "shows the frame timing graph" msgstr "" -#: Client/core/CSettings.cpp:2341 -msgid "Hide background when not typing" +#: Client/core/CCore.cpp:1425 +msgid "for developers: reload news" msgstr "" -#: Client/core/CSettings.cpp:2346 -msgid "Nickname completion using the \"Tab\" key" +#: Client/core/CQuestionBox.cpp:192 Shared/sdk/SharedUtil.Misc.hpp:688 +msgid "Do you want to see some on-line help about this problem ?" msgstr "" -#: Client/core/CSettings.cpp:2351 -msgid "Allow server to flash the window" +#. Even the default skin doesn't work, so give up +#: Client/core/CGUI.cpp:86 +msgid "" +"The skin you selected could not be loaded, and the default skin also could " +"not be loaded, please reinstall MTA." msgstr "" -#: Client/core/CSettings.cpp:2356 -msgid "Allow tray balloon notifications" +#: Client/core/CScreenShot.cpp:104 +#, c-format +msgid "Screenshot got %d bytes, but expected %d" msgstr "" -#: Client/core/CSettings.cpp:2361 -msgid "Chat text black/white outline" +#: Client/core/CScreenShot.cpp:110 +msgid "Screenshot failed" msgstr "" -#. Create a messagebox to notify the user -#. 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:2610 Client/core/CSettings.cpp:2617 -msgid "Press a key to bind, or escape to clear" +#: Client/core/CScreenShot.cpp:160 +#, c-format +msgid "Screenshot taken: '%s'" msgstr "" -#: Client/core/CSettings.cpp:2611 -msgid "Binding a primary key" +#: Client/core/CCredits.cpp:34 +msgid "Programming" msgstr "" -#: Client/core/CSettings.cpp:2618 -msgid "Binding a secondary key" +#: Client/core/CCredits.cpp:63 +msgid "Contributors" msgstr "" -#: Client/core/CSettings.cpp:2694 -msgid "GTA GAME CONTROLS" +#: Client/core/CCredits.cpp:84 +msgid "Game Design / Scripting" msgstr "" -#: Client/core/CSettings.cpp:2696 -msgid "MULTIPLAYER CONTROLS" +#: Client/core/CCredits.cpp:104 +msgid "Language Localization" msgstr "" -#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 -msgid "Your nickname contains invalid characters!" +#: Client/core/CCredits.cpp:110 +msgid "Patch contributors" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Red:" +#: Client/core/CCredits.cpp:234 +msgid "Special Thanks" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Green:" +#: Client/core/CCredits.cpp:265 +msgid "" +"This software and project makes use of the following libraries and software:" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Blue:" +#: Client/core/CMainMenu.cpp:333 +msgid "" +"You are using a feature-branch build! This is a test build only which cannot " +"be used to connect to public servers!" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Transparency:" +#: Client/core/CMainMenu.cpp:352 +msgid "" +"MTA will not receive updates on XP/Vista after July 2019.\n" +"\n" +"Upgrade Windows to play on the latest servers." msgstr "" -#: Client/core/CSettings.cpp:3781 -msgid "Color" +#: Client/core/CMainMenu.cpp:1193 +msgid "" +"This will disconnect you from the current server.\n" +"\n" +"Are you sure you want to disconnect?" msgstr "" -#: Client/core/CSettings.cpp:3858 -msgid "Preview" +#: Client/core/CMainMenu.cpp:1197 +msgid "DISCONNECT WARNING" msgstr "" -#: Client/core/CSettings.cpp:4166 -msgid "Please disconnect before changing language" +#. Create window +#: Client/core/CConsole.cpp:417 +msgid "CONSOLE" msgstr "" -#: Client/core/CSettings.cpp:4194 -msgid "Please disconnect before changing skin" +#: Client/core/CConnectManager.cpp:79 +msgid "Connecting failed. Invalid nick provided!" msgstr "" -#: Client/core/CSettings.cpp:4482 -msgid "" -"Volmetric shadows can cause some systems to slow down.\n" -"\n" -"Are you sure you want to enable them?" +#: Client/core/CConnectManager.cpp:110 +msgid "Connecting failed. Invalid host provided!" msgstr "" -#: Client/core/CSettings.cpp:4486 -msgid "PERFORMANCE WARNING" +#: Client/core/CConnectManager.cpp:126 +#, c-format +msgid "Connecting to %s at port %u failed!" msgstr "" -#: Client/core/CSettings.cpp:4506 -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" +#. Display the status box +#: Client/core/CConnectManager.cpp:147 +#, c-format +msgid "Connecting to %s:%u ..." msgstr "" -#: Client/core/CSettings.cpp:4508 -msgid "SCREEN UPLOAD INFORMATION" +#. Failed loading the mod +#: Client/core/CConnectManager.cpp:403 +#, c-format +msgid "No such mod installed (%s)" msgstr "" -#: Client/core/CSettings.cpp:4523 -msgid "" -"Some scripts may play sounds, such as radio, from the internet.\n" -"\n" -"Disabling this setting may decrease network\n" -"bandwidth consumption.\n" +#: Client/core/CConnectManager.cpp:411 +msgid "Bad server response (2)" msgstr "" -#: Client/core/CSettings.cpp:4526 -msgid "EXTERNAL SOUNDS" +#: Client/core/CConnectManager.cpp:421 +msgid "Bad server response (1)" msgstr "" -#: Client/core/CSettings.cpp:4555 -msgid "" -"It seems that you have the Rich Presence connection option enabled.\n" -"Do you want to allow servers to share their data?\n" -"\n" -"This includes yours unique ID identifier." +#. Create window (with frame) if it will fit inside the screen resolution +#: Client/core/CSettings.cpp:84 +msgid "SETTINGS" msgstr "" -#: Client/core/CSettings.cpp:4560 -msgid "CONSENT TO ALLOW DATA SHARING" +#: Client/core/CSettings.cpp:116 +msgid "Multiplayer" msgstr "" -#: Client/core/CSettings.cpp:4584 -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" -"\n" -"However, CUSTOMIZED GTA:SA FILES ARE BLOCKED BY MANY SERVERS\n" -"\n" -"Are you sure you want to use them?" +#: Client/core/CSettings.cpp:117 +msgid "Video" msgstr "" -#: Client/core/CSettings.cpp:4590 Client/core/CVersionUpdater.cpp:2081 -msgid "CUSTOMIZED GTA:SA FILES" +#: Client/core/CSettings.cpp:118 +msgid "Audio" msgstr "" -#: Client/core/CSettings.cpp:4633 -msgid "" -"Enabling DPI awareness is an experimental feature and\n" -"we only recommend it when you play MTA:SA on a scaled monitor.\n" -"You may experience graphical issues if you enable this option.\n" -"\n" -"Are you sure you want to enable this option?" +#: Client/core/CSettings.cpp:119 +msgid "Binds" msgstr "" -#: Client/core/CSettings.cpp:4639 -msgid "EXPERIMENTAL FEATURE" +#: Client/core/CSettings.cpp:120 +msgid "Controls" msgstr "" -#: Client/core/CSettings.cpp:4782 -msgid "Please enter a nickname" +#: Client/core/CSettings.cpp:121 +msgid "Interface" msgstr "" -#: Client/core/CSettings.cpp:4783 -msgid "" -"Please enter a nickname to be used ingame. \n" -"This will be your name when you connect to and play in a server" +#: Client/core/CSettings.cpp:122 +msgid "Web Browser" msgstr "" -#: Client/core/CSettings.cpp:4801 -msgid "Very experimental feature." +#: Client/core/CSettings.cpp:123 +msgid "Advanced" msgstr "" -#: Client/core/CSettings.cpp:4803 -msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" +#: Client/core/CSettings.cpp:147 Client/core/CSettings.cpp:338 +#: Client/core/CSettings.cpp:617 Client/core/CSettings.cpp:889 +msgid "Load defaults" msgstr "" -#: Client/core/CSettings.cpp:4805 -msgid "Older routers may require a slower scan speed." +#. * +#. * Controls tab +#. * +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 +msgid "Mouse sensitivity:" msgstr "" -#: Client/core/CSettings.cpp:4807 -msgid "Switch on to use only one connection when downloading." +#. VerticalAimSensitivity +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 +msgid "Vertical aim sensitivity:" msgstr "" -#: Client/core/CSettings.cpp:4809 -msgid "Tag network packets to help ISPs identify MTA traffic." +#. Mouse Options +#: Client/core/CSettings.cpp:160 +msgid "Mouse options" msgstr "" -#: Client/core/CSettings.cpp:4811 -msgid "Spinning circle animation at the bottom of the screen" +#: Client/core/CSettings.cpp:167 +msgid "Invert mouse vertically" msgstr "" -#: Client/core/CSettings.cpp:4813 -msgid "Select default always. (This setting is not saved)" +#: Client/core/CSettings.cpp:171 +msgid "Steer with mouse" msgstr "" -#: Client/core/CSettings.cpp:4815 -msgid "Maximum is usually best" +#: Client/core/CSettings.cpp:175 +msgid "Fly with mouse" msgstr "" -#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 -msgid "Auto updater:" +#. Joypad options +#: Client/core/CSettings.cpp:217 +msgid "Joypad options" msgstr "" -#: Client/core/CSettings.cpp:4817 -msgid "Select default unless you like filling out bug reports." +#: Client/core/CSettings.cpp:230 +msgid "Standard controls (Mouse + Keyboard)" msgstr "" -#: Client/core/CSettings.cpp:4819 -msgid "Select default to automatically install important updates." +#: Client/core/CSettings.cpp:237 +msgid "Classic controls (Joypad)" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "16-bit color:" +#: Client/core/CSettings.cpp:274 +msgid "Dead Zone" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "Enable 16 bit color modes - Requires MTA restart" +#: Client/core/CSettings.cpp:279 +msgid "Saturation" msgstr "" -#: Client/core/CSettings.cpp:4823 -msgid "Mouse fix:" +#: Client/core/CSettings.cpp:285 +msgid "Use the 'Binds' tab for joypad buttons." msgstr "" -#: Client/core/CSettings.cpp:4823 -msgid "Mouse movement fix - May need PC restart" +#: Client/core/CSettings.cpp:324 +msgid "Left Stick" msgstr "" -#: Client/core/CMainMenu.cpp:333 -msgid "" -"You are using a feature-branch build! This is a test build only which cannot " -"be used to connect to public servers!" +#: Client/core/CSettings.cpp:330 +msgid "Right Stick" msgstr "" -#: Client/core/CMainMenu.cpp:352 -msgid "" -"MTA will not receive updates on XP/Vista after July 2019.\n" -"\n" -"Upgrade Windows to play on the latest servers." +#: Client/core/CSettings.cpp:345 +msgid "DESCRIPTION" msgstr "" -#: Client/core/CMainMenu.cpp:1193 -msgid "" -"This will disconnect you from the current server.\n" -"\n" -"Are you sure you want to disconnect?" +#: Client/core/CSettings.cpp:346 +msgid "KEY" msgstr "" -#: Client/core/CMainMenu.cpp:1197 -msgid "DISCONNECT WARNING" +#: Client/core/CSettings.cpp:348 +msgid "ALT. KEY" msgstr "" -#: Client/core/CScreenShot.cpp:104 -#, c-format -msgid "Screenshot got %d bytes, but expected %d" +#. * +#. * Multiplayer tab +#. * +#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 +msgid "Nick:" msgstr "" -#: Client/core/CScreenShot.cpp:110 -msgid "Screenshot failed" +#: Client/core/CSettings.cpp:378 +msgid "Save server passwords" msgstr "" -#: Client/core/CScreenShot.cpp:160 -#, c-format -msgid "Screenshot taken: '%s'" +#: Client/core/CSettings.cpp:383 +msgid "Auto-refresh server browser" msgstr "" -#: Client/core/CCore.cpp:811 Client/loader/CInstallManager.cpp:1057 -#, c-format -msgid "MTA:SA cannot continue because drive %s does not have enough space." +#: Client/core/CSettings.cpp:388 +msgid "Allow screen upload" msgstr "" -#: Client/core/CCore.cpp:813 Shared/mods/deathmatch/logic/Utils.cpp:129 -msgid "Fatal error" +#: Client/core/CSettings.cpp:393 +msgid "Allow external sounds" msgstr "" -#: Client/core/CCore.cpp:938 -msgid "TO FIX, REMOVE THIS FILE:" +#: Client/core/CSettings.cpp:398 +msgid "Always show download window" msgstr "" -#: Client/core/CCore.cpp:970 -#, c-format -msgid "%s module is incorrect!" +#: Client/core/CSettings.cpp:403 +msgid "Allow connecting with Discord Rich Presence" msgstr "" -#: Client/core/CCore.cpp:1275 -msgid "Error executing URL" +#: Client/core/CSettings.cpp:408 +msgid "Use customized GTA:SA files" msgstr "" -#: Client/core/CCore.cpp:1287 -#, c-format -msgid "Error running mod specified in command line ('%s')" +#: Client/core/CSettings.cpp:413 +msgid "Map rendering options" msgstr "" -#. m_pCommands->Add ( "e", CCommandFuncs::Editor ); -#. m_pCommands->Add ( "clear", CCommandFuncs::Clear ); -#: Client/core/CCore.cpp:1389 -msgid "this help screen" +#: Client/core/CSettings.cpp:419 Client/core/CSettings.cpp:628 +msgid "Opacity:" msgstr "" -#: Client/core/CCore.cpp:1390 Client/core/CCore.cpp:1391 -msgid "exits the application" +#. * +#. * Audio tab +#. * +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:448 +msgid "Master volume:" msgstr "" -#: Client/core/CCore.cpp:1392 -msgid "shows the version" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:467 +msgid "Radio volume:" msgstr "" -#: Client/core/CCore.cpp:1393 -msgid "shows the time" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:486 +msgid "SFX volume:" msgstr "" -#: Client/core/CCore.cpp:1394 -msgid "shows the hud" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:505 +msgid "MTA volume:" msgstr "" -#: Client/core/CCore.cpp:1395 -msgid "shows all the binds" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:524 +msgid "Voice volume:" msgstr "" -#: Client/core/CCore.cpp:1396 -msgid "shows your serial" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:565 +msgid "Play mode:" msgstr "" -#: Client/core/CCore.cpp:1405 -msgid "connects to a server (host port nick pass)" +#: Client/core/CSettings.cpp:543 +msgid "Radio options" msgstr "" -#: Client/core/CCore.cpp:1406 -msgid "connects to a previous server" +#: Client/core/CSettings.cpp:549 +msgid "Radio Equalizer" msgstr "" -#: Client/core/CCore.cpp:1407 -msgid "binds a key (key control)" +#: Client/core/CSettings.cpp:554 +msgid "Radio Auto-tune" msgstr "" -#: Client/core/CCore.cpp:1408 -msgid "unbinds a key (key)" +#: Client/core/CSettings.cpp:559 +msgid "Usertrack options" msgstr "" -#: Client/core/CCore.cpp:1409 -msgid "copies the default gta controls" +#: Client/core/CSettings.cpp:573 Client/core/CSettings.cpp:3087 +msgid "Radio" msgstr "" -#: Client/core/CCore.cpp:1410 -msgid "outputs a screenshot" +#: Client/core/CSettings.cpp:574 Client/core/CSettings.cpp:3089 +msgid "Random" msgstr "" - -#: Client/core/CCore.cpp:1411 -msgid "immediately saves the config" + +#: Client/core/CSettings.cpp:575 Client/core/CSettings.cpp:3091 +msgid "Sequential" msgstr "" -#: Client/core/CCore.cpp:1413 -msgid "clears the debug view" +#: Client/core/CSettings.cpp:578 +msgid "Automatic Media Scan" msgstr "" -#: Client/core/CCore.cpp:1414 -msgid "scrolls the chatbox upwards" +#: Client/core/CSettings.cpp:585 +msgid "Mute options" msgstr "" -#: Client/core/CCore.cpp:1415 -msgid "scrolls the chatbox downwards" +#: Client/core/CSettings.cpp:591 +msgid "Mute All sounds when minimized" msgstr "" -#: Client/core/CCore.cpp:1416 -msgid "scrolls the debug view upwards" +#: Client/core/CSettings.cpp:596 +msgid "Mute Radio sounds when minimized" msgstr "" -#: Client/core/CCore.cpp:1417 -msgid "scrolls the debug view downwards" +#: Client/core/CSettings.cpp:601 +msgid "Mute SFX sounds when minimized" msgstr "" -#: Client/core/CCore.cpp:1420 -msgid "shows the memory statistics" +#: Client/core/CSettings.cpp:606 +msgid "Mute MTA sounds when minimized" msgstr "" -#: Client/core/CCore.cpp:1421 -msgid "shows the frame timing graph" +#: Client/core/CSettings.cpp:611 +msgid "Mute Voice sounds when minimized" msgstr "" -#: Client/core/CCore.cpp:1425 -msgid "for developers: reload news" +#. * +#. * Video tab +#. * +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 +msgid "Resolution:" msgstr "" -#. Even the default skin doesn't work, so give up -#: Client/core/CGUI.cpp:86 -msgid "" -"The skin you selected could not be loaded, and the default skin also could " -"not be loaded, please reinstall MTA." +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:683 +msgid "FOV:" msgstr "" -#: Client/core/CCredits.cpp:34 -msgid "Programming" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:699 +msgid "Draw Distance:" msgstr "" -#: Client/core/CCredits.cpp:63 -msgid "Contributors" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 +msgid "Brightness:" msgstr "" -#: Client/core/CCredits.cpp:84 -msgid "Game Design / Scripting" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 +msgid "FX Quality:" msgstr "" -#: Client/core/CCredits.cpp:104 -msgid "Language Localization" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 +msgid "Anisotropic filtering:" msgstr "" -#: Client/core/CCredits.cpp:110 -msgid "Patch contributors" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 +msgid "Anti-aliasing:" msgstr "" -#: Client/core/CCredits.cpp:234 -msgid "Special Thanks" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 +msgid "Aspect Ratio:" msgstr "" -#: Client/core/CCredits.cpp:265 -msgid "" -"This software and project makes use of the following libraries and software:" +#: Client/core/CSettings.cpp:648 +msgid "Windowed" msgstr "" -#. Create the window -#: Client/core/CNewsBrowser.cpp:153 -msgid "NEWS" +#: Client/core/CSettings.cpp:654 +msgid "DPI aware" msgstr "" -#. News link -#: Client/core/CNewsBrowser.cpp:171 Client/core/CNewsBrowser.cpp:172 -msgid "Visit latest news article" +#: Client/core/CSettings.cpp:669 Client/core/CSettings.cpp:1613 +msgid "Standard" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Busy" +#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 +msgid "Borderless keep res" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Can't check for updates right now" +#: Client/core/CSettings.cpp:675 +msgid "Mip Mapping" msgstr "" -#: Client/core/CVersionUpdater.cpp:1567 Client/core/CVersionUpdater.cpp:1587 -#: Client/core/CVersionUpdater.cpp:1605 -#, c-format -msgid "MTA:SA %s required" +#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 +msgid "Low" msgstr "" -#: Client/core/CVersionUpdater.cpp:1568 -#, c-format -msgid "" -"An updated version of MTA:SA %s is required to join the selected server.\n" -"\n" -"Do you want to download and install MTA:SA %s ?" +#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 +msgid "Medium" msgstr "" -#: Client/core/CVersionUpdater.cpp:1588 -#, c-format -msgid "Do you want to launch MTA:SA %s and connect to this server ?" +#: Client/core/CSettings.cpp:745 Client/core/CSettings.cpp:1086 +#: Client/core/CSettings.cpp:1521 Client/core/CSettings.cpp:3145 +msgid "High" msgstr "" -#: Client/core/CVersionUpdater.cpp:1606 -msgid "" -"It is not possible to connect at this time.\n" -"\n" -"Please try later." +#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 +msgid "Very high" msgstr "" -#: Client/core/CVersionUpdater.cpp:1788 -msgid "Connecting" +#: Client/core/CSettings.cpp:761 Client/core/CSettings.cpp:784 +#: Client/core/CSettings.cpp:1017 Client/core/CSettings.cpp:1071 +#: Client/core/CSettings.cpp:1201 Client/core/CSettings.cpp:1527 +#: Client/core/CSettings.cpp:3152 Client/core/CSettings.cpp:3184 +#: Client/core/CSettings.cpp:3206 Client/core/CSettings.cpp:4234 +msgid "Off" msgstr "" -#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 -msgid "Please wait..." +#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 +msgid "1x" msgstr "" -#: Client/core/CVersionUpdater.cpp:1804 -msgid "CHECKING" +#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 +msgid "2x" msgstr "" -#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 -msgid "UPDATE CHECK" +#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 +msgid "3x" msgstr "" -#: Client/core/CVersionUpdater.cpp:1822 -msgid "No update needed" +#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1019 +#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 +msgid "Auto" msgstr "" -#: Client/core/CVersionUpdater.cpp:1839 -msgid "DOWNLOADING" +#: Client/core/CSettings.cpp:801 Client/core/CSettings.cpp:1541 +msgid "4:3" msgstr "" -#: Client/core/CVersionUpdater.cpp:1840 -msgid "waiting..." +#: Client/core/CSettings.cpp:802 Client/core/CSettings.cpp:1543 +msgid "16:10" msgstr "" -#: Client/core/CVersionUpdater.cpp:1856 -msgid "MANDATORY UPDATE" +#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 +msgid "16:9" msgstr "" -#: Client/core/CVersionUpdater.cpp:1857 -msgid "" -"To join this server, you must update MTA.\n" -"\n" -" Do you want to update now ?" +#: Client/core/CSettings.cpp:806 +msgid "HUD Match Aspect Ratio" msgstr "" -#: Client/core/CVersionUpdater.cpp:1875 -msgid "OPTIONAL UPDATE" +#: Client/core/CSettings.cpp:812 +msgid "Volumetric Shadows" msgstr "" -#: Client/core/CVersionUpdater.cpp:1876 -msgid "" -"Server says an update is recommended, but not essential.\n" -"\n" -" Do you want to update now ?" +#: Client/core/CSettings.cpp:816 +msgid "Grass effect" msgstr "" -#: Client/core/CVersionUpdater.cpp:1915 -msgid "" -"Update not currently avalable.\n" -"\n" -"Please check www.mtasa.com" +#: Client/core/CSettings.cpp:820 +msgid "Heat haze" msgstr "" -#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 -msgid "ERROR SAVING" +#: Client/core/CSettings.cpp:824 +msgid "Tyre Smoke etc" msgstr "" -#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 -msgid "Unable to create the file." +#: Client/core/CSettings.cpp:828 +msgid "Dynamic ped shadows" msgstr "" -#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 -#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 -msgid "ERROR DOWNLOADING" +#: Client/core/CSettings.cpp:832 +msgid "Motion blur" msgstr "" -#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 -msgid "The downloaded file appears to be incorrect." +#: Client/core/CSettings.cpp:837 +msgid "Full Screen Minimize" msgstr "" -#: Client/core/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 -msgid "For some reason." +#: Client/core/CSettings.cpp:849 +msgid "Enable Device Selection Dialog" msgstr "" -#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 -msgid "DOWNLOAD COMPLETE" +#: Client/core/CSettings.cpp:861 +msgid "Show unsafe resolutions" msgstr "" -#: Client/core/CVersionUpdater.cpp:1990 -msgid " - Unknown problem in _DialogUpdateResult" +#: Client/core/CSettings.cpp:873 +msgid "Render vehicles always in high detail" msgstr "" -#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 -msgid "Ok" +#: Client/core/CSettings.cpp:877 +msgid "Render peds always in high detail" msgstr "" -#: Client/core/CVersionUpdater.cpp:2096 -msgid "ERROR" +#: Client/core/CSettings.cpp:881 +msgid "Corona rain reflections" msgstr "" -#: Client/core/CVersionUpdater.cpp:2097 -msgid "" -"Some MTA:SA data files are missing.\n" -"\n" -"\n" -"Please reinstall MTA:SA" +#: Client/core/CSettings.cpp:910 +msgid "Enable remote websites" msgstr "" -#: Client/core/CVersionUpdater.cpp:2774 -#, c-format -msgid "%3d %% completed" +#: Client/core/CSettings.cpp:915 +msgid "Enable Javascript on remote websites" msgstr "" -#: Client/core/CVersionUpdater.cpp:2777 -#, c-format -msgid "" -"\n" -"\n" -"Waiting for response - %-3d" +#: Client/core/CSettings.cpp:920 +msgid "Custom blacklist" msgstr "" -#: Client/core/DXHook/CDirect3DHook9.cpp:124 -msgid "" -"Could not initialize Direct3D9.\n" -"\n" -"Please ensure the DirectX End-User Runtime and\n" -"latest Windows Service Packs are installed correctly." +#: Client/core/CSettings.cpp:931 Client/core/CSettings.cpp:966 +msgid "Enter a domain e.g. google.com" msgstr "" -#. Create the window -#: Client/core/ServerBrowser/CServerBrowser.cpp:85 -msgid "SERVER BROWSER" +#: Client/core/CSettings.cpp:939 +msgid "Block" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:134 -msgid "Local" +#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 +msgid "Domain" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:135 -msgid "Favourites" +#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 +msgid "Remove domain" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:136 -msgid "Recent" +#. Reset vecTemp +#: Client/core/CSettings.cpp:955 +msgid "Custom whitelist" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:191 -msgid "" -"FOR QUICK CONNECT:\n" -"\n" -"Type the address and port into the address bar.\n" -"Or select a server from the history list and press 'Connect'" +#. Misc section label +#: Client/core/CSettings.cpp:997 +msgid "Misc" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:203 -msgid "HELP" +#. Fast clothes loading +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1010 +#: Client/core/CSettings.cpp:4803 +msgid "Fast CJ clothes loading:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:252 -msgid "Refresh" +#. Browser scan speed +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 +#: Client/core/CSettings.cpp:4805 +msgid "Browser speed:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:253 -msgid "Add Favorite" +#. Single download +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 +#: Client/core/CSettings.cpp:4807 +msgid "Single connection:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:254 -#: Client/core/ServerBrowser/CServerBrowser.cpp:301 -#: Client/core/ServerBrowser/CServerBrowser.cpp:372 -msgid "Connect" +#. Packet tag +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 +#: Client/core/CSettings.cpp:4809 +msgid "Packet tag:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:255 -msgid "Server information" +#. Progress animation +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1064 +#: Client/core/CSettings.cpp:4811 +msgid "Progress animation:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:256 -msgid "Search servers" +#. Process priority +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1077 +#: Client/core/CSettings.cpp:4801 +msgid "Process priority:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:257 -msgid "Search players" +#. Debug setting +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1091 +#: Client/core/CSettings.cpp:4813 +msgid "Debug setting:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:258 -msgid "Start search" +#. Streaming memory +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1114 +#: Client/core/CSettings.cpp:4815 +msgid "Streaming memory:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:299 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1697 -msgid "Search players..." +#. Update build type +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 +msgid "Update build type:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:422 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1695 -msgid "Search servers..." +#. UpdateAutoInstall +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 +msgid "Install important updates:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:453 -msgid "Name" +#: Client/core/CSettings.cpp:1018 Client/core/CSettings.cpp:1046 +#: Client/core/CSettings.cpp:1059 Client/core/CSettings.cpp:3156 +#: Client/core/CSettings.cpp:3172 Client/core/CSettings.cpp:3179 +msgid "On" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:454 -msgid "Players" +#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 +msgid "Very slow" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:455 -msgid "Ping" +#: Client/core/CSettings.cpp:1032 Client/core/CSettings.cpp:1045 +#: Client/core/CSettings.cpp:1058 Client/core/CSettings.cpp:1072 +#: Client/core/CSettings.cpp:1098 Client/core/CSettings.cpp:1110 +#: Client/core/CSettings.cpp:1202 Client/core/CSettings.cpp:1222 +#: Client/core/CSettings.cpp:3163 Client/core/CSettings.cpp:3170 +#: Client/core/CSettings.cpp:3177 Client/core/CSettings.cpp:3186 +#: Client/core/CSettings.cpp:3199 +msgid "Default" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:456 -msgid "Gamemode" +#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 +msgid "Fast" msgstr "" -#. Player List Columns -#. Column for player names -#: Client/core/ServerBrowser/CServerBrowser.cpp:478 -#: Client/core/ServerBrowser/CServerInfo.cpp:138 -msgid "Player list" +#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 +msgid "Normal" msgstr "" -#. Include label -#: Client/core/ServerBrowser/CServerBrowser.cpp:486 -msgid "Include:" +#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 +msgid "Above normal" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:492 -msgid "Empty" +#: Client/core/CSettings.cpp:1121 +msgid "Min" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:498 -msgid "Full" +#: Client/core/CSettings.cpp:1134 +msgid "Max" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:504 -msgid "Locked" +#. Windows 8 compatibility +#: Client/core/CSettings.cpp:1141 +msgid "Windows 8 compatibility:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:516 -msgid "Offline" +#: Client/core/CSettings.cpp:1145 +msgid "16-bit color" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:529 -msgid "Other Versions" +#: Client/core/CSettings.cpp:1150 +msgid "Mouse fix" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:550 -msgid "Back" +#. Cache path info +#: Client/core/CSettings.cpp:1168 +msgid "Client resource files:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:556 -#: Client/loader/Dialogs.cpp:135 -msgid "Help" +#: Client/core/CSettings.cpp:1172 +msgid "Show in Explorer" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:741 -msgid "Loading..." +#. Auto updater section label +#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 +msgid "Auto updater" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1240 -#: Client/core/ServerBrowser/CServerBrowser.cpp:2182 -msgid " ..loading.." +#. Check for updates +#: Client/core/CSettings.cpp:1228 +msgid "Check for update now" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 -msgid "No address specified!" +#: Client/core/CSettings.cpp:1382 +msgid "Some settings will be changed when you next start MTA" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Unknown protocol" +#: Client/core/CSettings.cpp:1383 +msgid "" +"\n" +"\n" +"Do you want to restart now?" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Please use the mtasa:// protocol!" +#: Client/core/CSettings.cpp:1386 +msgid "RESTART REQUIRED" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -#: Client/core/ServerBrowser/CServerInfo.cpp:319 -#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 -#: Client/loader/MainFunctions.cpp:1219 -msgid "Information" +#: Client/core/CSettings.cpp:1406 +msgid "Some settings will be changed when you disconnect the current server" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -msgid "You have to select a server to connect to." +#: Client/core/CSettings.cpp:1407 +msgid "" +"\n" +"\n" +"Do you want to disconnect now?" msgstr "" -#. Create queue window -#: Client/core/ServerBrowser/CServerInfo.cpp:32 -#: Client/core/ServerBrowser/CServerInfo.cpp:302 -msgid "SERVER IS FULL" +#: Client/core/CSettings.cpp:1410 +msgid "DISCONNECT REQUIRED" msgstr "" -#. Determine our label draw position for L10n -#. Start position -#. Server Name -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:53 -msgid "Name:" +#. Update the joystick name +#: Client/core/CSettings.cpp:1737 +msgid "Joypad not detected - Check connections and restart game" msgstr "" -#. Server IP -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:64 -msgid "Server Address:" +#: Client/core/CSettings.cpp:1932 +msgid "Binding axis" msgstr "" -#. Gamemode -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:75 -msgid "Gamemode:" +#: Client/core/CSettings.cpp:1932 +msgid "Move an axis to bind, or escape to clear" msgstr "" -#. Map -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:86 -msgid "Map:" +#: Client/core/CSettings.cpp:2009 +msgid "Language:" msgstr "" -#. Players -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:97 -msgid "Players:" +#: Client/core/CSettings.cpp:2009 +msgid "Skin:" msgstr "" -#. Passworded -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:108 -msgid "Passworded:" +#: Client/core/CSettings.cpp:2009 +msgid "Presets:" msgstr "" -#. Latency -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:119 -msgid "Latency:" +#: Client/core/CSettings.cpp:2058 +msgid "Chat" msgstr "" -#. Close button -#: Client/core/ServerBrowser/CServerInfo.cpp:144 -msgid "Close" +#: Client/core/CSettings.cpp:2075 +msgid "Load" msgstr "" -#. Join Game button -#: Client/core/ServerBrowser/CServerInfo.cpp:152 -msgid "Join Game" +#: Client/core/CSettings.cpp:2087 +msgid "Colors" msgstr "" -#. Please enter password label -#: Client/core/ServerBrowser/CServerInfo.cpp:166 -msgid "Please enter the password to the server:" +#: Client/core/CSettings.cpp:2088 +msgid "Layout" msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:177 -msgid "Join the server as soon as a player slot is available." +#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 +msgid "Options" msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:310 -msgid "PLEASE ENTER SERVER PASSWORD" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Background" msgstr "" -#. The server has timed out -#: Client/core/ServerBrowser/CServerInfo.cpp:402 -msgid "Timed Out" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Text" msgstr "" -#. Set every GUI elements text to blank -#: Client/core/ServerBrowser/CServerInfo.cpp:431 -msgid "Querying..." +#: Client/core/CSettings.cpp:2095 +msgid "Input Background" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:25 -msgid "Idle" +#: Client/core/CSettings.cpp:2095 +msgid "Input Text" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:150 -msgid "player" -msgid_plural "players" -msgstr[0] "" -msgstr[1] "" - -#: Client/core/ServerBrowser/CServerList.cpp:151 -msgid "on" +#: Client/core/CSettings.cpp:2118 +msgid "Lines:" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:154 -msgid "server" -msgid_plural "servers" -msgstr[0] "" -msgstr[1] "" +#: Client/core/CSettings.cpp:2118 +msgid "Scale:" +msgstr "" -#. We are polling for the master server list (first pass) -#: Client/core/ServerBrowser/CServerList.cpp:238 -#, c-format -msgid "Requesting master server list (%lu ms elapsed)" +#: Client/core/CSettings.cpp:2118 +msgid "Width:" msgstr "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:254 -msgid "Master server list could not be parsed." +#: Client/core/CSettings.cpp:2121 +msgid "Size" msgstr "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:264 -msgid "Master server list could not be retrieved." +#: Client/core/CSettings.cpp:2170 +msgid "after" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:274 -msgid "(Backup server list)" +#: Client/core/CSettings.cpp:2170 +msgid "for" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:326 -msgid "Cannot bind LAN-broadcast socket" +#: Client/core/CSettings.cpp:2170 +msgid "sec" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:345 -msgid "Attempting to discover LAN servers" +#: Client/core/CSettings.cpp:2173 +msgid "Fading" msgstr "" -#: Client/loader/Install.cpp:265 -msgid "Unknown" +#: Client/core/CSettings.cpp:2179 +msgid "Fade out old lines" msgstr "" -#: Client/loader/Install.cpp:272 -#, c-format -msgid "" -"The file '%s' is currently locked by %zu processes.\n" -"\n" -"Do you want to terminate the following processes and continue updating?\n" -"\n" -"%s" +#: Client/core/CSettings.cpp:2219 +msgid "Horizontal:" msgstr "" -#: Client/loader/Install.cpp:479 -#, c-format -msgid "" -"Your installation may be corrupt now.\n" -"\n" -"%zu out of %zu files could not be restored from the backup.\n" -"\n" -"You should reinstall Multi Theft Auto from www.multitheftauto.com\n" -"or try running the update with administrator rights." +#: Client/core/CSettings.cpp:2219 +msgid "Vertical:" msgstr "" -#: Client/loader/Install.cpp:852 Client/loader/Dialogs.cpp:901 -msgid "Installing update..." +#: Client/core/CSettings.cpp:2219 +msgid "Text-Align:" msgstr "" -#: Client/loader/Install.cpp:934 Client/loader/Dialogs.cpp:909 -msgid "Extracting files..." +#: Client/core/CSettings.cpp:2219 +msgid "X-Offset:" msgstr "" -#: Client/loader/Dialogs.cpp:134 -msgid "Quit" +#: Client/core/CSettings.cpp:2220 +msgid "Y-Offset:" msgstr "" -#: Client/loader/Dialogs.cpp:151 -msgid "MTA: San Andreas has encountered a problem" +#: Client/core/CSettings.cpp:2226 +msgid "Position" msgstr "" -#: Client/loader/Dialogs.cpp:152 -msgid "Crash information" +#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 +msgid "Center" msgstr "" -#: Client/loader/Dialogs.cpp:153 -msgid "" -"Tick the check box to send this crash info to MTA devs using the 'internet'" +#: Client/core/CSettings.cpp:2254 +msgid "Top" msgstr "" -#: Client/loader/Dialogs.cpp:154 -msgid "Doing so will increase the chance of this crash being fixed." +#: Client/core/CSettings.cpp:2256 +msgid "Bottom" msgstr "" -#: Client/loader/Dialogs.cpp:155 -msgid "Do you want to restart MTA: San Andreas ?" +#: Client/core/CSettings.cpp:2304 +msgid "Font" msgstr "" -#: Client/loader/Dialogs.cpp:162 -msgid "MTA: San Andreas - Warning" +#: Client/core/CSettings.cpp:2341 +msgid "Hide background when not typing" msgstr "" -#: Client/loader/Dialogs.cpp:163 -msgid "" -"Your Grand Theft Auto: San Andreas install directory contains these files:" +#: Client/core/CSettings.cpp:2346 +msgid "Nickname completion using the \"Tab\" key" msgstr "" -#: Client/loader/Dialogs.cpp:165 -msgid "" -"These files are not required and may interfere with the graphical features " -"in this version of MTA:SA.\n" -"\n" -"It is recommended that you remove or rename these files." +#: Client/core/CSettings.cpp:2351 +msgid "Allow server to flash the window" msgstr "" -#: Client/loader/Dialogs.cpp:167 -msgid "Keep these files, but also show this warning on next start" +#: Client/core/CSettings.cpp:2356 +msgid "Allow tray balloon notifications" msgstr "" -#: Client/loader/Dialogs.cpp:168 -msgid "Do not remind me about these files again" +#: Client/core/CSettings.cpp:2361 +msgid "Chat text black/white outline" msgstr "" -#: Client/loader/Dialogs.cpp:169 -msgid "Rename these files from *.dll to *.dll.bak" +#. Create a messagebox to notify the user +#. 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:2610 Client/core/CSettings.cpp:2617 +msgid "Press a key to bind, or escape to clear" msgstr "" -#: Client/loader/Dialogs.cpp:170 -msgid "Show me these files" +#: Client/core/CSettings.cpp:2611 +msgid "Binding a primary key" msgstr "" -#: Client/loader/Dialogs.cpp:171 -msgid "Play MTA:SA" +#: Client/core/CSettings.cpp:2618 +msgid "Binding a secondary key" msgstr "" -#: Client/loader/Dialogs.cpp:177 -msgid "MTA: San Andreas - Confusing options" +#: Client/core/CSettings.cpp:2694 +msgid "GTA GAME CONTROLS" msgstr "" -#: Client/loader/Dialogs.cpp:178 -msgid "NVidia Optimus detected!" +#: Client/core/CSettings.cpp:2696 +msgid "MULTIPLAYER CONTROLS" msgstr "" -#: Client/loader/Dialogs.cpp:179 -msgid "Try each option and see what works:" +#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 +msgid "Your nickname contains invalid characters!" msgstr "" -#: Client/loader/Dialogs.cpp:180 -msgid "A - Standard NVidia" +#: Client/core/CSettings.cpp:3778 +msgid "Red:" msgstr "" -#: Client/loader/Dialogs.cpp:181 -msgid "B - Alternate NVidia" +#: Client/core/CSettings.cpp:3778 +msgid "Green:" msgstr "" -#: Client/loader/Dialogs.cpp:182 -msgid "C - Standard Intel" +#: Client/core/CSettings.cpp:3778 +msgid "Blue:" msgstr "" -#: Client/loader/Dialogs.cpp:183 -msgid "D - Alternate Intel" +#: Client/core/CSettings.cpp:3778 +msgid "Transparency:" msgstr "" -#: Client/loader/Dialogs.cpp:184 -msgid "If you get desperate, this might help:" +#: Client/core/CSettings.cpp:3781 +msgid "Color" msgstr "" -#: Client/loader/Dialogs.cpp:185 -msgid "If you have already selected an option that works, this might help:" +#: Client/core/CSettings.cpp:3858 +msgid "Preview" msgstr "" -#: Client/loader/Dialogs.cpp:186 -msgid "Force windowed mode" +#: Client/core/CSettings.cpp:4166 +msgid "Please disconnect before changing language" msgstr "" -#: Client/loader/Dialogs.cpp:187 -msgid "Don't show again" +#: Client/core/CSettings.cpp:4194 +msgid "Please disconnect before changing skin" msgstr "" -#: Client/loader/Dialogs.cpp:194 Client/game_sa/CSettingsSA.cpp:831 -msgid "MTA: San Andreas" +#: Client/core/CSettings.cpp:4482 +msgid "" +"Volmetric shadows can cause some systems to slow down.\n" +"\n" +"Are you sure you want to enable them?" msgstr "" -#: Client/loader/Dialogs.cpp:195 -msgid "Warning: Could not detect anti-virus product" +#: Client/core/CSettings.cpp:4486 +msgid "PERFORMANCE WARNING" msgstr "" -#: Client/loader/Dialogs.cpp:197 +#: Client/core/CSettings.cpp:4506 msgid "" -"MTA could not detect an anti-virus on your PC.\n" -"\n" -"Viruses interfere with MTA and degrade your gameplay experience.\n" +"Screen upload is required by some servers for anti-cheat purposes.\n" "\n" -"Press 'Help' for more information." +"(The chat box and GUI is excluded from the upload)\n" msgstr "" -#: Client/loader/Dialogs.cpp:200 -msgid "I have already installed an anti-virus" +#: Client/core/CSettings.cpp:4508 +msgid "SCREEN UPLOAD INFORMATION" msgstr "" -#: Client/loader/Dialogs.cpp:202 +#: Client/core/CSettings.cpp:4523 msgid "" -"I will not install an anti-virus.\n" -"I want my PC to lag and be part of a botnet." +"Some scripts may play sounds, such as radio, from the internet.\n" +"\n" +"Disabling this setting may decrease network\n" +"bandwidth consumption.\n" msgstr "" -#: Client/loader/Dialogs.cpp:890 Client/loader/Utils.cpp:534 -msgid "Searching for Grand Theft Auto San Andreas" +#: Client/core/CSettings.cpp:4526 +msgid "EXTERNAL SOUNDS" +msgstr "" + +#: Client/core/CSettings.cpp:4555 +msgid "" +"It seems that you have the Rich Presence connection option enabled.\n" +"Do you want to allow servers to share their data?\n" +"\n" +"This includes yours unique ID identifier." msgstr "" -#: Client/loader/Dialogs.cpp:893 Client/loader/Utils.cpp:536 -msgid "Please start Grand Theft Auto San Andreas" +#: Client/core/CSettings.cpp:4560 +msgid "CONSENT TO ALLOW DATA SHARING" msgstr "" -#: Client/loader/Dialogs.cpp:914 Client/loader/Utils.cpp:1394 -msgid "Copying files..." +#: Client/core/CSettings.cpp:4584 +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" +"\n" +"However, CUSTOMIZED GTA:SA FILES ARE BLOCKED BY MANY SERVERS\n" +"\n" +"Are you sure you want to use them?" msgstr "" -#: Client/loader/Dialogs.cpp:919 Client/loader/Utils.cpp:1454 -msgid "Copy finished early. Everything OK." +#: Client/core/CSettings.cpp:4633 +msgid "" +"Enabling DPI awareness is an experimental feature and\n" +"we only recommend it when you play MTA:SA on a scaled monitor.\n" +"You may experience graphical issues if you enable this option.\n" +"\n" +"Are you sure you want to enable this option?" msgstr "" -#: Client/loader/Dialogs.cpp:924 Client/loader/Utils.cpp:1460 -msgid "Finishing..." +#: Client/core/CSettings.cpp:4639 +msgid "EXPERIMENTAL FEATURE" msgstr "" -#: Client/loader/Dialogs.cpp:928 Client/loader/Utils.cpp:1462 -msgid "Done!" +#: Client/core/CSettings.cpp:4782 +msgid "Please enter a nickname" msgstr "" -#: Client/loader/Utils.cpp:600 -msgid "Select your Grand Theft Auto: San Andreas Installation Directory" +#: Client/core/CSettings.cpp:4783 +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/loader/Utils.cpp:968 Client/loader/CInstallManager.cpp:361 -#, c-format -msgid "" -"MTA:SA needs Administrator access for the following task:\n" -"\n" -" '%s'\n" -"\n" -"Please confirm in the next window." +#: Client/core/CSettings.cpp:4801 +msgid "Very experimental feature." msgstr "" -#: Client/loader/Utils.cpp:1069 -#, c-format -msgid "Error loading %s module! (%s)" +#: Client/core/CSettings.cpp:4803 +msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" msgstr "" -#: Client/loader/Utils.cpp:1502 -#, c-format -msgid "" -"New installation of %s detected.\n" -"\n" -"Do you want to copy your settings from %s ?" +#: Client/core/CSettings.cpp:4805 +msgid "Older routers may require a slower scan speed." msgstr "" -#: Client/loader/Utils.cpp:1541 -#, c-format -msgid "GTA:SA had trouble opening the file '%s'" +#: Client/core/CSettings.cpp:4807 +msgid "Switch on to use only one connection when downloading." msgstr "" -#: Client/loader/Utils.cpp:1563 -#, c-format -msgid "GTA:SA is missing the file '%s'." +#: Client/core/CSettings.cpp:4809 +msgid "Tag network packets to help ISPs identify MTA traffic." msgstr "" -#: Client/loader/Utils.cpp:1588 -msgid "GTA:SA had trouble loading a model." +#: Client/core/CSettings.cpp:4811 +msgid "Spinning circle animation at the bottom of the screen" msgstr "" -#: Client/loader/Utils.cpp:1590 -msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." +#: Client/core/CSettings.cpp:4813 +msgid "Select default always. (This setting is not saved)" msgstr "" -#: Client/loader/Utils.cpp:1615 -msgid "GTA:SA had trouble adding an upgrade to a vehicle." +#: Client/core/CSettings.cpp:4815 +msgid "Maximum is usually best" msgstr "" -#: Client/loader/Utils.cpp:1634 -#, c-format -msgid "GTA:SA found errors in the file '%s'" +#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 +msgid "Auto updater:" msgstr "" -#: Client/loader/Utils.cpp:1716 -msgid "Did your computer restart when playing MTA:SA?" +#: Client/core/CSettings.cpp:4817 +msgid "Select default unless you like filling out bug reports." msgstr "" -#: Client/loader/Utils.cpp:1781 -msgid "Please terminate the following programs before continuing:" +#: Client/core/CSettings.cpp:4819 +msgid "Select default to automatically install important updates." msgstr "" -#: Client/loader/MainFunctions.cpp:248 -msgid "" -"Trouble restarting MTA:SA\n" -"\n" -"If the problem persists, open Task Manager and\n" -"stop the 'gta_sa.exe' and 'Multi Theft Auto.exe' processes\n" -"\n" -"\n" -"Try to launch MTA:SA again?" +#: Client/core/CSettings.cpp:4821 +msgid "16-bit color:" msgstr "" -#: Client/loader/MainFunctions.cpp:266 -msgid "" -"Another instance of MTA is already running.\n" -"\n" -"If this problem persists, please restart your computer" +#: Client/core/CSettings.cpp:4821 +msgid "Enable 16 bit color modes - Requires MTA restart" msgstr "" -#: Client/loader/MainFunctions.cpp:269 -msgid "" -"Another instance of MTA is already running.\n" -"\n" -"Do you want to terminate it?" +#: Client/core/CSettings.cpp:4823 +msgid "Mouse fix:" msgstr "" -#: Client/loader/MainFunctions.cpp:294 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to revert to an earlier version?" +#: Client/core/CSettings.cpp:4823 +msgid "Mouse movement fix - May need PC restart" msgstr "" -#: Client/loader/MainFunctions.cpp:324 -msgid "" -"There seems to be a problem launching MTA:SA.\n" -"Resetting GTA settings can sometimes fix this problem.\n" -"\n" -"Do you want to reset GTA settings now?" +#. Create queue window +#: Client/core/ServerBrowser/CServerInfo.cpp:32 +#: Client/core/ServerBrowser/CServerInfo.cpp:302 +msgid "SERVER IS FULL" msgstr "" -#: Client/loader/MainFunctions.cpp:339 -msgid "" -"GTA settings have been reset.\n" -"\n" -"Press OK to continue." +#. Determine our label draw position for L10n +#. Start position +#. Server Name +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:53 +msgid "Name:" msgstr "" -#: Client/loader/MainFunctions.cpp:344 -#, c-format -msgid "File could not be deleted: '%s'" +#. Server IP +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:64 +msgid "Server Address:" msgstr "" -#. No settings to delete, or can't find them -#: Client/loader/MainFunctions.cpp:352 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to see some online help?" +#. Gamemode +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:75 +msgid "Gamemode:" msgstr "" -#. Inform user -#: Client/loader/MainFunctions.cpp:388 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to change the following setting?" +#. Map +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:86 +msgid "Map:" msgstr "" -#: Client/loader/MainFunctions.cpp:431 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Try disabling the following products for GTA and MTA:" +#. Players +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:97 +msgid "Players:" msgstr "" -#: Client/loader/MainFunctions.cpp:465 -msgid "" -"WARNING\n" -"\n" -"MTA:SA has detected unusual activity.\n" -"Please run a virus scan to ensure your system is secure.\n" -"\n" +#. Passworded +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:108 +msgid "Passworded:" msgstr "" -#: Client/loader/MainFunctions.cpp:468 -#, c-format -msgid "The detected file was: %s\n" +#. Latency +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:119 +msgid "Latency:" msgstr "" -#: Client/loader/MainFunctions.cpp:602 -msgid "" -"An instance of GTA: San Andreas is already running. It needs to be " -"terminated before MTA:SA can be started. Do you want to do that now?" +#. Column for player names +#. Player List Columns +#: Client/core/ServerBrowser/CServerInfo.cpp:138 +#: Client/core/ServerBrowser/CServerBrowser.cpp:478 +msgid "Player list" msgstr "" -#: Client/loader/MainFunctions.cpp:609 -msgid "" -"Unable to terminate GTA: San Andreas. If the problem persists, please " -"restart your computer." +#. Close button +#: Client/core/ServerBrowser/CServerInfo.cpp:144 +msgid "Close" msgstr "" -#: Client/loader/MainFunctions.cpp:632 -msgid "" -"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." +#. Join Game button +#: Client/core/ServerBrowser/CServerInfo.cpp:152 +msgid "Join Game" msgstr "" -#: Client/loader/MainFunctions.cpp:638 -msgid "" -"The path to your installation of GTA: San Andreas contains unsupported " -"(unicode) characters. Please move your Grand Theft Auto: San Andreas " -"installation to a compatible path that contains only standard ASCII " -"characters and reinstall Multi Theft Auto: San Andreas." +#. Please enter password label +#: Client/core/ServerBrowser/CServerInfo.cpp:166 +msgid "Please enter the password to the server:" msgstr "" -#: Client/loader/MainFunctions.cpp:648 -msgid "" -"The path to your installation of 'MTA:SA' or 'GTA: San Andreas'\n" -"contains a ';' (semicolon).\n" -"\n" -" If you experience problems when running MTA:SA,\n" -" move your installation(s) to a path that does not contain a semicolon." +#: Client/core/ServerBrowser/CServerInfo.cpp:177 +msgid "Join the server as soon as a player slot is available." msgstr "" -#: Client/loader/MainFunctions.cpp:810 -msgid "" -"Load failed. Please ensure that the latest data files have been installed " -"correctly." +#: Client/core/ServerBrowser/CServerInfo.cpp:310 +msgid "PLEASE ENTER SERVER PASSWORD" msgstr "" -#: Client/loader/MainFunctions.cpp:819 -#, c-format -msgid "Load failed. Please ensure that %s is installed correctly." +#. The server has timed out +#: Client/core/ServerBrowser/CServerInfo.cpp:402 +msgid "Timed Out" msgstr "" -#: Client/loader/MainFunctions.cpp:826 -#, c-format -msgid "Load failed. Could not find gta_sa.exe in %s." +#. Set every GUI elements text to blank +#: Client/core/ServerBrowser/CServerInfo.cpp:431 +msgid "Querying..." msgstr "" -#: Client/loader/MainFunctions.cpp:836 -#, c-format -msgid "" -"Load failed. %s exists in the GTA directory. Please delete before continuing." +#. Create the window +#: Client/core/ServerBrowser/CServerBrowser.cpp:85 +msgid "SERVER BROWSER" msgstr "" -#: Client/loader/MainFunctions.cpp:845 -#, c-format -msgid "Main file has an incorrect name (%s)" +#: Client/core/ServerBrowser/CServerBrowser.cpp:134 +msgid "Local" msgstr "" -#: Client/loader/MainFunctions.cpp:856 -msgid "" -"Main file is unsigned. Possible virus activity.\n" -"\n" -"See online help if MTA does not work correctly." +#: Client/core/ServerBrowser/CServerBrowser.cpp:135 +msgid "Favourites" msgstr "" -#: Client/loader/MainFunctions.cpp:882 -#, c-format -msgid "" -"Data file %s is missing. Possible virus activity.\n" -"\n" -"Consider reinstalling Multi Theft Auto for your security.\n" -"See online help if MTA does not work correctly." +#: Client/core/ServerBrowser/CServerBrowser.cpp:136 +msgid "Recent" msgstr "" -#: Client/loader/MainFunctions.cpp:893 -#, c-format +#: Client/core/ServerBrowser/CServerBrowser.cpp:191 msgid "" -"Data file %s is modified. Possible virus activity.\n" +"FOR QUICK CONNECT:\n" "\n" -"Consider reinstalling Multi Theft Auto for your security.\n" -"See online help if MTA does not work correctly." +"Type the address and port into the address bar.\n" +"Or select a server from the history list and press 'Connect'" msgstr "" -#: Client/loader/MainFunctions.cpp:907 -msgid "" -".asi files are in the 'MTA:SA' or 'GTA: San Andreas' installation " -"directory.\n" -"\n" -"Remove these .asi files if you experience problems with MTA:SA." +#: Client/core/ServerBrowser/CServerBrowser.cpp:203 +msgid "HELP" msgstr "" -#: Client/loader/MainFunctions.cpp:1009 -msgid "" -"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:252 +msgid "Refresh" msgstr "" -#: Client/loader/MainFunctions.cpp:1018 -msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:253 +msgid "Add Favorite" msgstr "" -#: Client/loader/MainFunctions.cpp:1030 -msgid "" -"MTA:SA is not compatible with Windows 'Safe Mode'.\n" -"\n" -"Please restart your PC.\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:254 +#: Client/core/ServerBrowser/CServerBrowser.cpp:301 +#: Client/core/ServerBrowser/CServerBrowser.cpp:372 +msgid "Connect" msgstr "" -#: Client/loader/MainFunctions.cpp:1123 -msgid "Fix configuration issue" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:255 +msgid "Server information" msgstr "" -#. Try to relaunch as admin if not done so already -#: Client/loader/MainFunctions.cpp:1157 -msgid "Fix elevation required error" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:256 +msgid "Search servers" msgstr "" -#: Client/loader/MainFunctions.cpp:1164 -#, c-format -msgid "" -"Could not start Grand Theft Auto: San Andreas. Please try restarting, or if " -"the problem persists,contact MTA at www.multitheftauto.com. \n" -"\n" -"[%s]" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:257 +msgid "Search players" msgstr "" -#: Client/loader/MainFunctions.cpp:1219 -msgid "" -"GTA: San Andreas may not have launched correctly. Do you want to terminate " -"it?" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:258 +msgid "Start search" msgstr "" -#: Client/loader/CInstallManager.cpp:376 -#, c-format -msgid "" -"MTA:SA could not complete the following task:\n" -"\n" -" '%s'\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:299 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1697 +msgid "Search players..." msgstr "" -#: Client/loader/CInstallManager.cpp:426 -msgid "" -"** The crash was caused by a graphics driver error **\n" -"\n" -"** Please update your graphics drivers **" +#: Client/core/ServerBrowser/CServerBrowser.cpp:422 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1695 +msgid "Search servers..." msgstr "" -#: Client/loader/CInstallManager.cpp:532 -msgid "Install updated MTA:SA files" +#: Client/core/ServerBrowser/CServerBrowser.cpp:453 +msgid "Name" msgstr "" -#: Client/loader/CInstallManager.cpp:552 -msgid "" -"Could not update due to file conflicts. Please close other applications and " -"retry" +#: Client/core/ServerBrowser/CServerBrowser.cpp:454 +msgid "Players" msgstr "" -#: Client/loader/CInstallManager.cpp:561 -#, c-format -msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" +#: Client/core/ServerBrowser/CServerBrowser.cpp:455 +msgid "Ping" msgstr "" -#: Client/loader/CInstallManager.cpp:613 -msgid "Create GTA:SA junctions" +#: Client/core/ServerBrowser/CServerBrowser.cpp:456 +msgid "Gamemode" msgstr "" -#: Client/loader/CInstallManager.cpp:657 -msgid "MTA:SA cannot launch because copying a file failed:" +#. Include label +#: Client/core/ServerBrowser/CServerBrowser.cpp:486 +msgid "Include:" msgstr "" -#: Client/loader/CInstallManager.cpp:663 Client/loader/CInstallManager.cpp:703 -msgid "MTA:SA cannot launch because an MTA:SA file is incorrect or missing:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:492 +msgid "Empty" msgstr "" -#: Client/loader/CInstallManager.cpp:672 -msgid "Copy MTA:SA files" +#: Client/core/ServerBrowser/CServerBrowser.cpp:498 +msgid "Full" msgstr "" -#: Client/loader/CInstallManager.cpp:695 Client/loader/CInstallManager.cpp:773 -msgid "MTA:SA cannot launch because a GTA:SA file is incorrect or missing:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:504 +msgid "Locked" msgstr "" -#: Client/loader/CInstallManager.cpp:780 -msgid "Patch GTA:SA dependency" +#: Client/core/ServerBrowser/CServerBrowser.cpp:516 +msgid "Offline" msgstr "" -#: Client/loader/CInstallManager.cpp:828 -msgid "" -"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:529 +msgid "Other Versions" msgstr "" -#: Client/loader/CInstallManager.cpp:832 -msgid "" -"Please check your anti-virus for a false-positive detection, try to add an " -"exception for the GTA:SA executable and restart MTA:SA." +#: Client/core/ServerBrowser/CServerBrowser.cpp:550 +msgid "Back" msgstr "" -#: Client/loader/CInstallManager.cpp:838 -msgid "Generate GTA:SA" +#: Client/core/ServerBrowser/CServerBrowser.cpp:741 +msgid "Loading..." msgstr "" -#: Client/loader/CInstallManager.cpp:853 -msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1240 +#: Client/core/ServerBrowser/CServerBrowser.cpp:2182 +msgid " ..loading.." msgstr "" -#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 -msgid "Patch GTA:SA" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 +msgid "No address specified!" msgstr "" -#: Client/loader/CInstallManager.cpp:876 -msgid "MTA:SA cannot launch because patching GTA:SA has failed:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 +msgid "Unknown protocol" msgstr "" -#: Client/loader/CInstallManager.cpp:1113 -msgid "Missing file:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 +msgid "Please use the mtasa:// protocol!" msgstr "" -#: Client/loader/CInstallManager.cpp:1117 -msgid "If MTA fails to load, please re-install GTA:SA" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 +msgid "You have to select a server to connect to." msgstr "" -#: Client/loader/CInstallManager.cpp:1152 -msgid "Update install settings" +#: Client/core/ServerBrowser/CServerList.cpp:25 +msgid "Idle" msgstr "" -#: Client/loader/CInstallManager.cpp:1305 -msgid "Update compatibility settings" -msgstr "" +#: Client/core/ServerBrowser/CServerList.cpp:150 +msgid "player" +msgid_plural "players" +msgstr[0] "" +msgstr[1] "" -#. Couldn't create render target for CPostEffects -#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 -msgid "Problem with graphics driver" +#: Client/core/ServerBrowser/CServerList.cpp:151 +msgid "on" msgstr "" -#: Client/game_sa/CSettingsSA.cpp:753 -msgid "Can't find valid screen resolution." +#: Client/core/ServerBrowser/CServerList.cpp:154 +msgid "server" +msgid_plural "servers" +msgstr[0] "" +msgstr[1] "" + +#. We are polling for the master server list (first pass) +#: Client/core/ServerBrowser/CServerList.cpp:238 +#, c-format +msgid "Requesting master server list (%lu ms elapsed)" msgstr "" -#. Confirm that res should be used -#: Client/game_sa/CSettingsSA.cpp:829 -msgid "Are you sure you want to use this screen resolution?" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:254 +msgid "Master server list could not be parsed." msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:19 -msgid "Website requests" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:264 +msgid "Master server list could not be retrieved." msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:27 -msgid "" -"The server requests the following websites in order to load them (later):" +#: Client/core/ServerBrowser/CServerList.cpp:274 +msgid "(Backup server list)" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:33 -msgid "NEVER ENTER SENSITIVE DATA TO PROTECT THEM FROM BEING STOLEN" +#: Client/core/ServerBrowser/CServerList.cpp:326 +msgid "Cannot bind LAN-broadcast socket" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:46 -msgid "Remember decision" +#: Client/core/ServerBrowser/CServerList.cpp:345 +msgid "Attempting to discover LAN servers" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:57 -msgid "Deny" +#: Client/core/DXHook/CDirect3DHook9.cpp:124 +msgid "" +"Could not initialize Direct3D9.\n" +"\n" +"Please ensure the DirectX End-User Runtime and\n" +"latest Windows Service Packs are installed correctly." msgstr "" #. Populate the message and show the box diff --git a/Shared/data/launchers/CEFLauncher.exe b/Shared/data/launchers/CEFLauncher.exe index 8c8babb2856edbc9abf36965796cdbdb21712d7a..3b206474d1d1e8ebb2779902a031368dcb83b2f6 100644 GIT binary patch delta 1436 zcmX|>dpOg39LM*=T+ha|Hp@wlOAj8G&1J(lojs^d8j;M}7;{@LIY=bTrA$tQ(Uf~M zgyY^S9E&_ITT&F&O0J!RgJcfp;S8s~&+~p>pZDkeexA>N-^5LD;wCuD29VFTwPUs# zkJ~RhHzL335v~cbDe;eREePf=TM;u7nhKl#XDecA*S8=>C7cvAAXavJ4TvuiE;~0M z%XjxJh^1XRA@|t4>s`2gwZI5gGu&4}8yf&yc_bpfYWJse}@zfQq`}1Zl50LE^kI2U5Z2AS)1#<8J}r_C{Wr1uz8H%nar0)Wt+~qbLDugMtI> zkedl|N6Hk8_mK!}g*)2@yzCPI1jW2UqN^9*Fe217nsBi?+g+Z4UFfR2qzH(}yNbsO z3`Ij^6%103r-~r}0DwU<$v|RyxD(3_ypiD=t-A4Ht=bpwNGte>?7I|gMy0kWTOB4Z zySjCD4vtXanolUOW>#8h@&z|N-Orr!*vM5%E9V`#G5lT@{b&v@T$Xu_KCUSqJvXNW zSIi!$H=Q2lp43G|%SPEHRWt^=v(jth{8wFaUYZU69hH(OPK{blQYHA6a0}z)Ma3qo ziB_n$g7~42K_dK1Czu)0fQEc`p`iS1T!o?Ky2m}zlsLUe+yA((&44=+I$iy|M@U~u zIgNW>J*Vum=eIGxhe6-0j;#Pkd$aa~XFg6gy*RmW{a7hi<8f$GPNiHJ zBu)ANv4_p+iv?PlmoBZ+_Un-iUQ9bZl&bXzH*#w|p?d${Ggn?I655L1?bmaZQuhV)vdX%89?5?VM+8>Q#%4kExkAw%IglP-Cf_ zE9t)8)X5~$Z^P2IjMORURt>oP#!cr4zlgG>IX}mrl^Kz$*2}!I(M4zKLSRSeRkaIo zU4qkiou^8bW1p^m4y2ZRwllNwtl1Wjw=n3HXPICqL~OYfArFh8Yz?#vxXqp<= K&w3IhU)XX zrdwKCrqCV*EgwH(-N!JXm~-7!R2C6Nk{7!Tg}i=|5K)gnukztJ_BS;9O z2Q0?}WQ%~X0V9Km6kKlmd2z;vi~_Bji>(j#W_s*yE2~_%%D-*<0ZB#yX|DVTh{F7c z>9oYnbek_N?HiABEo3Ul+PHQ7W-0wS4vde>JbJICYCu?cLXUYx2(fC7zk@ z&Ygd~%q``Uib?ksyDyf7pYE6F?EGFejo`+D}%((vCFG6j)gu^V;jH6NXlJ@EQgWYL5>5owzyT`@QCY}hA@knn;{9?wtt#7cHun5{nFwBqTnb1Qd-CRPLg_6^-kXn}wBq10Jq- zw=fFYc67_P%t^n$$i}bo`tUXL*}^}%d+xMvG}c_6sW|;a730==zM~UDous3M?=rfH ztvV{(F1(QYhm4XOBU?#oda_G#(-~6_+vVZ+x7>Dr)Vk99{OU`~eiJkdHlYMMD=Wl-Ev&e0>i`q*Y{q57Qi7Om< zXOp-`Kj^L1`d$OaU5mP>ggmboNfY^+Kd+`&wny{&7lF3j++ryc*;V-LpIg*P%hpIt zpJedzmEN8CnRylLf*zjghgV+S70Xh0@!PKD&8}ffZ72S$i4SA^pZ#a8wPsiSrgf(O zr?C2WtIuwhbZ@z|ZmrDP3F*z}UOap&;46G1J2t>!|KpB4hwrD?IF#j``?~oI^MBpBcrQon~VBw;N;Kp9EMO?8y{ za8q4WrF-1eI@x|LFd-v1^^~-(jdH&nK#?8?{qx*xL7>1&1rT1z|E4}bkb4+i7YXFZ zZ0007#X8?3) zPD_kDOGw;hzO`0dglruj{xNG<iSB zKI*&1ZC{6et~XpgpIk~SLXVuC5wCmfa)F$>-npos&v`6oqy8Qq^UB!A_}wP$ts_kk zGJOZuDq4Z9tT)5@$R-0F>*^V2*ySSdoJil(>m{)#afS1XMyEpGlI0KWhsyZWvd7}P z?r1Z2r#d9~STm}lC*VEu`T6JA2MvuM2`7x-MU)qvIOuleW7g*;!60#_dVNVS0(G9p z`ArlZzX)bp20yY(-r+pY3jf1oOS5qtA+mKx5maUb+hRY;Z=4TYth7Mpm?w#KiF7`G za0d=a^mr3XEuMQvN%nc&mhxb!o_)FiLdAPlK;PUZP!4?V;^~usuaM9r8xW9anC-4) z(?SYHF33UQ6$xhI3Kkl91akz7F~OJ|#veI~#R{N>5OX!f|8h2=65@>cJ*Yi!7Cmav zHL%KXd$6oC-u!h$3x`R8Q9DZ3FbKf_p|HTH%YI$V+c%9HHtbtNa2A)vK`8m3+&&D&Bh4*jWr%NHOsf%?8v zx-27+PL%DYNu+$HCvFj&<2O(MkKj|G-PGmpRm7mNkip4Mc2?`!Po5D{6gUcQufX1q z_-{kfM!B`2PxkYyz%&HLTQ90f+0a9M%JkgPE%U9UzQiy>Z9rLco`o0rO|RCdg_baW zNjqRQ!`G|pBoiJ`?MGQqcYxDKTyf;?FiZm7H{y%yrTE#<%{uWomfgWbtwNjCmuqyhy8ahy{bX`1!bOW_3}s`h87avy(kI z4yl?nzOr(c#zGhDv34Gb;!MMA5^IdR>88V%1$6s}Fk!|acxiD{#g09Tp`T{Fo(Kmbk<_P|2j%mI?G!}|?(Qzzz>%WFBA!o31zv?F6^H-)@P5Q9S qt_3UQKci^F@Gb7U$AmqJo#nTSKd=lHgI-+I`Va%1L(WP6v%dfmB6&yv delta 1482 zcmZ9MdpOg39LM)Fqq)xJaqHqz;aFlb<}ySGnfoD>qY);Od(4_Jmt1m*EhM)NL(*|< z5m9aKNm=PR?n0CkU5*L0GtTXK&i8rV&+Bu2fByR>jmssC%jMw!g?!WFlq-H}7979< z{*Q9woe;f(JU8ABLE5D)f-9g%@;x|vmrjVmUE2OlJH*Z1IXq%WKn{S1`v^EfwcGU> zp*kRT_C}~JyZanqe3v6s$DR5ixGT{=c;`6if6v((1PZ7Z0fkB5F5C;?g{;oDgaElh zRl+vlMairbuzfn%9uP=~1-1u&bTSdl1@2e~2^1hub|)B=%>eI|c06`_5`tJ(pfy2n z?Y|yNrv!Xf8ix901)-uC_*|;F&-uo;#PkXVm{q|L_IoTAehS#}0fnEUiG@PaAO;{k zkP)pY6oUOLWIYdsR7k4)9CjsLzUH_|vrXek0ssI32`2+d zuw>NBJDjvw@r)#XXgKo4$B1t{Uq`)ugu$1DxTwnR)EToRPRMDuaDTvm(XDL(5mQsv z{N$c@gWiJ`b$TFms*?h9(bv=-wmFHVoO<3wnPa+Sx^4JbPt&vNFhfsM&d;?bQy(py zn_V#v-}HcFD=84w-ke@F(9O^=T9uTU>W^CDyE2zHxQpg)9%8+h*xs!E9PPbu$45i+ ziw7$7jFkB^(~U=GW-H^o9W$NU<|}7X_(9W$n=O#AIb+3V)%kq(n(W1{RLn93X1F50 znB^Yvhhog|j~M;pBZTwiW1~4GNQ@H=zrOnr~!R ztz_t`zj!Wb?RU5Px=nZ&LVsW&bt}GPD}FhWeP1kWda;=~DU6@EJKRPxb0!mtOylzM zq8}~y^b{I~tp7yfA=}Ii&|}zxcWEv~5VFy8{{x|#b2wUGW(4(>MZ!`d%VcAaHFQ5z zsS&ARiK7UKiq$2W&95aZNTYSp7+owHi_%AjW{rO;Dww*30q z4w?AJxCVCF7uPArY0WL5|VEdNK z`ASWi%qo}UR|(JMNDfeX#eC}`KhsS|wf1)fsZgZDF>uzV`Yo4kk^@pvPpe!fkxuKg z9QWewssC=~S@5;2He|c}kjl34W%4G0s7fs3wG?0xYewJn#HI7v@>J$+-tRwFdtLGN zT7XU@Kg;&(;d!=GMrV6>#9*!wxf6O-Yqrr9W(l>mle|m%R zfE44?`<00^(8`H9Ge(Ps6YV4aKEm8Bdf`ScUs;R#uV$yq(u2Rjg6qqu>9 z;l>`#R|;ZQ$SAHV*~)QEzCfZ~>GT&Cl}B zI&`e&JyY-c84^XcZ#tEc|6k%9LIMt#+anWa@6RN$P9DyAfd4E6mrfL9X!e-HuIair^%6HJQALVlF0oi z8IKM*<|uiJgvr?wS~It2Jg@q`UZ27?()iLezI3`V7@c8a3Dkh47I;2D^LMqN zqnWFMxCKpS>h6-l92b!AF|PUBE~A^NDHp7I1o!%;fJ9 zVD8LKPttbhc|NndoSvlafVxgfsDbV+txWL~lkd6uzq$B&I)~F}} ztwEr`)I*t_&3A3e64e6UiJ;b!$I;NnaWqVcj$pfhclLnTE(}BoEJ;WQWB}4*WS7A7 z{&yQ+mB5OyO4MmPvV+yk8<)_W6B25BR`+Sw+ha5X>anCRWri!UM;kLbU`ScuIwOy| zpc@t^IrBWN=Pqv9rr%4GW0Ah(%?+y@=NGi#kiw#BNj6D*Bp3`90>R?Iv3utq9xu}_O<&_w2C{kEsB`@>r?iK!zvz{%PHA13@-UiOtB5$%G`V0iA7!i;^fEFR zkp8*F=}tw6um2@X4kwIER|Z&XK%`O%tLx9eap2}|kR&*!|c&kCmWHd}uY$ zG_nD7PerEBjSu82Y@9bqwa@PF$)Cd>S#4CDM?M=(TKSUk1Pn*oniaSi5Q9XP++=)P zp{A(fI`>Sx#C*z-*`ifbVUO2`cV~-*Sc$!&YJGAwG+$e6nS#Os;H|u+9;#vaZ#W`T zI%_V~{#Gn$HV~-j)GDy9>hlbjNb)G%9L-cxxEC$PLJ&_`mpf|NW$T}-tb{`uojfP% z^Y^dMSbU-^t4I29&q}h>YJI1l3=cUX{=uyN#tth=&2@Y|pr9R6USJEGA2i>dLgI^| zzD=2*p_*mzq9+uBY@rJMTKL#Gq`6asFe~qL)G`=PSaK5I3mizXL2i2lc1v`E+8;eQ zy6rA?`tlg|V_nhZ-eiX3M;O&$028_%!0Z)XMJGIdA$bzkPo{JrEW8!3Myb7W^b)=X zfg{SIjfT!((UN!^UI$0O5w!HR^mPf1@JX1-UeO;h!+r&J3OAt|`fPvILE;U&?j?^4 zYF=3!nT)Hq$JLL!DL8+sQ-_q^^>;W;m-s8!-1inyF5jHdu>xxVW}j!yPP*B)qMPNtCy+RN!8 z=Z}?n*4c$R^+w45v3PxGdAN;w2z3!FmL+qfpO%-XufvynJ8Jo$0&nBhQ4wd2gonr( z%2l1876*iuhp98UyDUVM(`m~(r3MvGh22%&FfHIb~9UX-LFhV%5F z@-TLtXcnRA7JgOVs#JKUPT})|jb^Pd&SQ&J)htbqeNuse>2H$fZq^4x7cg8jeCV|J n*N)ll-N3RK(zWg23CN2s3~!OXheI35VUI?^D@jmi!8iI3vxBN3 delta 1466 zcmX|>c{mhk9LMK!3?@0+W@H?R5@Lpo5n>FL+vKi>aXmz)CC8#>WHD0i8f|i9(8}hR zWr%S#&Zc$Ex^k5xm2;VpU3S=Kd!Og~e16CKeSgpIpO?BRL*0}~Hv%eU7@JdU0a7ba z5~cBf;SjNGAwiBqM6#W=;s>O#_kHqn)B``1v~WQAx!e17Xd@xeCt!bghB92-!2$rV0SW=;_ZV3!KwD6) zDKiw92&#r0GX#;{;*lmvNE09nX#(o(Jtw&14-g!XKz;&oPk;ejIC#Ib??32C2x3`* z^i;tBJ;e7OOYso6O6+hs)Hi3U)Wj}6Lhrr)j(btkG#t#DhC`H6#K>;I{dWLlH@X-D zk|?AP&;?-W4;c{5e<7=%0Vz;XvgdDtOVFY&RT_5rA>KOx&id^7uGXuXR~6JY`+>b6 zRz?>DhM-8}3AUuSMs=m~mXI@A3KD9#jjc!g9|sYdCWBYG?UOn%Vd&|^i;0^sAW*P9 z{p6{i;;-b|Pv{juYUc7@XSSxk z&eUI*%Suxn5y~O0k6+6@_g0UE88#@NFo5$~@T9)ZKug({DZJ zGNJct1%mgqbe`N9dFVwruT1Qua7$E)6~XD#?z4+*<)EsNf?M*z{OT${6;~{wGZ3kC ziQ<*Te8a?rx6)h{zO6{;@K)-D2I*<4ykN8WhAVvr(sV{n*<}~Zqt-RU0YmITyakdNldffi9FRI)EYK#{6!)&-KU{4kX{Va4*R9aiZ!y4 zGngSyyI!8O`8tkXL#wVG1CXMJj(Ac5TcXL=-A#Swum@x;hA{XLS9}fl4Vk71= zQwWI=g`v#?{non>u7q6AnA(Ch4=&*g-EjtT8%v65fIjx%Ob#YIa#^?$hF6amf``VD z$45)dkvz=SN05lv^H>wE8wDTv6M2wos#P>e@sqoXWw#@QTP+9vS$3>=M|d3Rn+80^KqY()%PnKF`rb6zG&D7< zLpI9Ua754puq=C3&hV!Alkr%;CaG(V$J<|8t~FO*PUslX?^_7mrKzj1S{4hXb15b# zlZq~U4Ng$@ima&N4CRcXiKEk$r>vvm!rR!{=sFE6XOv8=tpcwt&TtVFQ194|?Klt8 zVBjkqF;^(Iw2bQA$*R7msRpR3@IP;IkBB!F*5tLDSrBJqpBZ|e>d>X4_h!D9J=iFa zWokv`SCU1?js{@zp`ZUI0vNso-9?PX@PIuN;@avFFL`4RKQy{pe3lYce$?NjgVqe( zGw)tbS#EQa$#0oK%iaeU`j5Ldh(5XRs9kH*gRX&WgkatIWk2U++nL`(hg{z_%Ie+< zQ1z7@%vu=6bB>|Hd#-Xq<9qwIUPcbIxG46@s$I~}xjS80n#0^XA%TZabX694>kO4! zga63kw)MZDiMbu9HSdpHw%7{_-pw=4`9BDXH0jN~@=Z7zq|$wF=wk|QEYbfme=rqWo<=JGJ1@wl{2 zYbNEAgQ%z6FQ**DiAqE+4{OdiPrc9ceLnB|ec$)@`|nLDRZS^X&9MQ(skSIWlWwo7 z2vv#xDIW46Wf5tcPzlqo}4&W7R$0946tnc z)#GPZg56*W1I=wk#R5~$k}-8-ne-W1@*E$`pW{owhh?XHfjjR2rhMtL6bK1o2CxEH z&}kHi#s4Y4j{;#rwP`Ao)y?CbCD6VF_Hs&{J+eme>~Ox*O2LyY&*gIsa6Yvd0#zf3 z+-wZSK7n;FBtvio_LoCcGdAcvT`{j|MtPiBZ)1popQ}@Dm9S`JumFh zq8rZgWlh%)8ge+Rns;J78?W=??HB}=Nb?z9R6sfC&>owF7?_^l53LEc@3ozu+o7Sk zE`fM{wmX}3m8`_iQo&CIMUKr%P3A3ECTSe3E>*jQ-5kySR>P{<)L+V!9;`QB8)K;* zrtW**lpvTu7Wm+XW3Fl^sT@mc?bCA50mtoy<~^DsfkMAU+fA|yX6z;~6$HkSWuG8K z^OhW}5vpe3aoIA(+gh!timjo*YdE+4X$T8^ioau`F^M}bYhbnIRv%BY(iaf*>^@OB z!mOzKk{_%c{UV=`y^LLN`XtYQIz+*Ku#Twn#AAuKTvzIPasKv2Ri33gV844_u}dF3md> z7HqLaPE70g`3?MB>0c|eQ&m`z8)Jc07Y2#j8>`PKeugGD-y5fQzk=`xI-8m1`z1~b zWK?EOonGZU27fRhZIt9-^%*U^s70on1?^~~(^@{~<5!T3=-&3M(PH@ISy2r-dNd}^ zYgWry=b<|I0yN@FYNYaG4~Bc05Y}c{GHv7{)LLyboR=PLxep-Ui&0 zfB_KpoT{?DkhW|au~yDaE2e2pM1zgGQFzHTik3Q3#rdR-qU#+z%x?)34kNON6`W{A zc>$_gltL8LvL295B^NIw{}ULk8!GhGWGP0XdJrbQPuYhFy|;xSaT~xqm}&11I~r{vNbtL(-K93kOVx$v&G@ z;|xeZxRM$6V*bQH#NR>c{tR09LMK0%{WFw?$Nko(YQ^n@Eb}jIY(ApU?Yq{r8P$NXIjzv&_M`Yzteer&^yh24Dd{ zys%DNrIHqJv2kKOl>^ zKZoczcQB6u^bd&WDBt&yfNNOb#r@;iN;1MOL=Y&5CIr$GVck~&J3&@#>#u-mkUE&t zNeG#g=nSMd17Lw59A^Lu_cs&tg@6PPB2a)pW5ZC;7zesye4uU0sz z22Byc-YK)hAk;%wS+(gexv0y7kp#@F&kiqxnTx(gHs-Q&QfpO!p@pgF zOQ=KNRIzpAicg-uFeGnb7IT?J)a?A4tM*$%WUjVY{5$6`%e6YH-O9}=CLk#$={Zi> z>1-_;Y14gy-5X>V$R&xzWwd*hPUb(ZaKld{u_tsQb-B6AYRTR^>ja}Na%jZojw#2b z!|sJo6fC3t=o00-nkbSkEp5-rT20e#GaZ;TF5~irMY>CP^6g7AcB<5gR2z2JL-w{g zmY%`AMo}$Au#Pi|$8Gg3BMq8$R6g-cp%zEAnx%djSLE5;sUHt@FA z{)@I4(MGHPvoDC5y$5ILr!rQOfo^Mcd_EKt761NkPHcb7udRa6y|fA{tCQzl=$ z{`ZvdC1o3ioYhq~h3yM|d1pEBn}mf=@e*W->6v%j{b5p@(qakkbt zN&*Cds))1fS8*Mte@h18vdPaDHp&kd(2)B?#{><~7xbQRhB-eCakyK6Sdy#_D z8FN^oqDT7eFZ_)pA2dDqXn1>Xs!$8Esuio)ZTala+U5redA(ftQ!3h7(zpKfH_}IX zJVVppwfe#W!YOvqY^~bxCF|OeqBwUoYsQ;%^4wWT5A@p9WDKQsp{wcNE)CfTbsY9f zr^X&_wY{U7Xob&GqT*2);?v^f&zE%0sZ1NUE4s$m=;e#dj zk-L$jtjpKdewv}S zJptAhJ#dkiD5aN3rwp3PWm7J1HfzTOabN{e6UHZUR<-lH{V%;u^Xg0B&#hgyPX{qW ztG>PO)LDMQ-kzS{DxjZiGTd!WI82mnW2kmz^^3G7de>v6F>QsR$F2Su$f$h96ef^1 zd+vT8Qorv@UBoBU4q+4z)jJUI-axq9O4+H!!0=-stNb~9CCCB`>xF4$l9TKf){jT* z$_vjl1eeLwNKnhDx?@YYGmS5;3wZ;oI3?Dc8U0l8aEA)d!*N5&_ehd-C4)C^r=H$s qq_cA<7Z>nu*I(Bl(rDPYQ|MAQS}rw1^x-auVv6YRB{T_sqyGTn{e%wy diff --git a/Shared/data/launchers/Multi Theft Auto.exe b/Shared/data/launchers/Multi Theft Auto.exe index 64ecb98eabf2976f16267d2126a5bbbb38de6712..1c1e86757d757bd2a75d21195457c35da3f07721 100644 GIT binary patch delta 1481 zcmX|>c{~$*9LKk@scDZRIl|M-(H>VDYmS*Ccarvav$M35bnbAuS20 z3g#0rd*l&!eX3yCo*x_MPx@Y8+N~>)oGY2j@nlvtib_I5aP9l619eaOsyf1$YGpd?Ch=+Bv6n*L*hb!q4nJiu)AWfcR&zJ z31lH51hCln(PNT%pkRo&muGeq^7z%0MgI&O(CqD!PUNnG1QHTRn8{rSb3~yN1mNyI zzyyKbDGZ^3F#rRA9^DNL(fb}U)4`CB>TpD0lhk~60B;cQ9McF5SScwl6LUKLa&)V!_o`8B>b`jMGla(enSDc`E*d0|A46$_$O;Wr7wj*F{7BAj@lK!y&s);4fuPbMEjv)@~&DFZ8sM`-ngAwYuWEJ)Z z1s<7YQ?a2Cuh%F0rENmq7E#tf^syX%a=0B+vBP(M}Cg(U&UW&jmE#!0ps2}hPg`grnve!-o}Y=8a(FaVl&^rC?C_Jsfj-04TkgGgnis_(qFeoevi`GXQp!Jy|ryzK#{XcTLy%)p| zwJ|{EjD>`9`xYh{!wIh_SxpU8LuIxop^1EDe%!*Qf2Bgsn^81P%S)M`N#B;Hv%MhC zsL2OCl#LZ}o6;f)hBFNv1x7mjMlzPjbLd2EvMf_<7P|@qH|1xwYx*?xb&Lbx*GW=} z$Rk_6ue;$Ipt3&|n%CMk#V##2PsLR{kRcjWsI0mvL@A|j)rX586OyIv8^BE2l8&o7 zn_PB(rU~fIF>D|eoFvao|0;W@_#g!)qg^o2CfHt>WBc*5Xt9VVm zz+Fojpxya`j9W-m3%cJdZWM?Hwk}8_B4#y?xuOxwD$65q`lcGUj>k(G1;MKJcJ4l9aI@EoxcAW3`KzB&fv;exrW@ DeYB!; delta 1486 zcmZ9MXHe5w6vdN}1QS4%7Md=MEE1X_K_b!=Q87V~I{#2JbQl~2LlK0~A@s5uMO-No zg_UN2geK^MfPflA0R@2wQX+_xX?aXMXqG`_6ka@577fl#A(<%Qghd<`|u$ z9vm+~5@PwJ{{-In0h|?h@WvXjyU$g?RX`d#l5}?$;Qvackgo0|JIfBAdm$Z2BPge%u@hg zh9pii{lS@#r%;UnNFWfeHI%G11ZHUsL4@TE1be*q;t+uX1R6Rd1R7f3bD+Ka{!CO* zO9^ClSO{dc@oUBk9vHWH*RgfyT7!3+%|&E zNuZcjZgswtrRt9Riya==%EdLR|nx^b9gmQiHsHe!{xCY3E(m zr(M}Gdj!=!<7;Zbcwf7sH>=UM`wS$0BSLMY^g9=)KB^sTwi%A5rzA@IZR$~LuC-UD zFF4r!MzA%tDE5iM;1yR7<{kC4{Z8ZC|KPky#4iTtH{`G~JClSAb8L0^HT7`1JzS+75MWQ~X&Yqg|VOPr!x6X8+%GF4{D_~+-IYoO|zRbste z)4UVpOE`BO{7PW?Y-+7BL>T$_rg1MYEGv%1V0AHgEM7-fM<0h{30uI8q!7P6{W2L& z#88fGas~snc-tRZ#=|R_!@mu@w}jj@}plWPKdnJzdNdS~wCG)Satj)31=xFm>F0 zVN^S*DWZMUIQW)?N2pl258HBumT!Hh^~v&|fu}tsr<*SH=`$bU(r&N%C|9h_XWd4) zUw4$&Qo3EqSMSp8lrHXET+lXSeG9 z;1bYx(D+GL_oedN46y$OsQo zKBu1?MX;~)$}_zpd;MhjBRN@VX_!}WNor_SeqdkuovsB~6KV+QQatex{9Wl&{4vSCQ+U*iHJvMRLnbUXE ztnz_(aj84HH(euZ@_FZ=V>;Y*hfh zSWBbk$YS7DF|4OKIKOk|MEE7TMN6_MY=SpXd8N&+~o%dzrgx%w4qt2Pl%` z=*-xs0oV~~XDR;)jff}vNIe=sCeO)8A%{p=EH0psWQ_mUQ^*9FCzHvtxj1sLltfw_ zg)1dqL?-*oc$U1khZhyf_VJ9*DZ!5g$5Y!X4d7?2H zng`=x6nS#*@56+o%$26>l_n^Er3q%pwwI2@>?OdYqDeIn4nPLnfW51|2w6`>T5Cw< z5&=M5PJZd}y}t)8Dj|owoEMS#%dRcRYWVa4ODq128?Z`M7LuTQ84w`}6m$YCc`U>h zVgp8Z0XF}X{E9AMP({xrz|P3_1~u8Ij?T@C{0h9rEE!5%T@Hz75TZv6*6aD40RVww z_}AwKfr=*EtRD_>-BEe(KKB_GdQnb~HRkK=c;Hho7zAADTb3(Jf`CGy@({U8P$ue> z_meS-U7_K6iP!hyGiN2Sa^j;0a6u6BCP6o+Y5-8ZNqZ$KUzKpHvMq-`!cw02+i>eF z*V^7mrY_{P6`-97>*@^0v?{U1pNw7Y;LT;&yM(SlgoaJsqvuRu2W&uCTb@*4oEHp^ z_=dv5CY_!S2@R6UfV(Jd+r50F!LxegQ9p;UP+qw%*>H%g{Nt)NrnOJruFYueo}!^~ub07)QmSJFV>UCJvIIxI z!EQe=)iA7|7l>2J`)B8p;UOOE;v+>kY`>XJV8{`N$>+zDHhq^6lk~>wCJkbW&vnvj zGaE@7E8IYKV*`F~#8i@EaF@*$M+3;+y5F2iHA81LOvlz-LM5xw+@7_`5gl+jZb$E? z%cbjGzT%I}N!6>pe}Xz z+Pu8s$LQ|K582xAc`G0-r-Q!pK)UTMPUuqCnNJI?xhXEWaBV|jO-am;2@+Q;>+$px zLvhbw3d+?N>_vPhZ8Zyw1r}qCu{Ot9V6fJFg$2M-L+OhLJ+}dO3>*1^zHGV(`j`!3 zK5XL?2n4UkN}+64t`l+Rd`^wzw^zCMOzho#8cKidLgH&@z}{`3nUTQM4@OrEWXAPD zH6M3aN!GxI#;f&0vyT~$*IQ$Ph-Jep2ejf6X0Ulli_um;>C7IiA}z*x+^nEM;{%^`&=>Esnnnk?Nymu zjMU5^Owre~hG7MPATPG$XYT{8X|>e%c~>Fv6^RzvJO(Fmq#R}L0hg->bMCi=AAtvL z@@Dq;Op0N#w|d^+kLpQW@-#8n>g9p5Y|b4LHQ@NE zei~}Q(2Lljm(QA&X}@XjUG8Ur7t&U|wwrrkISQqy6Z&$7)~ej{ns@K3Ma?-cmjp8J)Ph m8<;+dZbzrZZC4Tz@TZ9`M+wG`#jJ}xclio)b`=@Y-{^19`H~g@ delta 1450 zcmX|>c{G%J7{}-Jj%6?rlP%m77bA=@mh2)+VXTAONTJNwrj$Z>M?xV>Tu!oN3mN+$ zC8olmM(SG9SkkRx(nkN?WG;LX5TglM0+ zVtZP}1BaCNkCyw7UZk{4+JcLh1SuZCj~OtEM-HnUOyJdpX~T}>ob3Sh{tH`*I>6V$ z2TT~(O!{leZ6)rd4Hisl4$oooL<=JiB)Yv?wYzoUUT#YU6GTcw&PIQwGiV{Md)owOVAE=Mk$(%C>ZB22WE$UVRM1~)oD6`qSoG^k2Vb0-k}vDQ5k zc9|A?&!(dF@?29CKZDzut7l8*bXImG9gG|Hd`qAONy92W7!<|Se^JtT7CZ6X@!Fzq z80|{S})Nkq%JNcRdKRfqLUaavi#51W*gEh zDGpDWz%Q8RI8B4mM-tmt{q3v7{o=OsH8;_p>Pv=A5~B)7x8&eeGdI&s19zcCx>I#8Y~TB8zwGjp~~HRU^?nD#@T3g$i+w+U_2mU^f4)!-x8_S z0YFr5$%HvUn@#tg_YSdEBwXBN57x#ig$W(*J$7n9@dNZpD0?NMRljsa94{YVjq-4? zyvbXT;@E1O*t-vNyL>*ItWY>raK8HLASIWfob5&puM&Mn|XVNC)@`XyS z`NtD#nzm^VyT0-C795XcdS+3rvqBUzrcbNR4&}*fH;$2y_>FaVfrIh1J#!DO^tL?% z!>}?36J%$4L#G7HX@k6l2zK+~D;3&9DSWNiy)JoQ@kL%6(ypDpeJW5=hMN!rQnNU} zv^l6Vl^s9p$XCJ|FqVw*_LT8s?;ENU(`M!Hj>sBf+Yck1cxN-?mMuIE8l^W4HOHZE zFqI|cUvD*s)_x2==;L)B)g|D*^jmUM*TPdY?`SS{oW%xS#9*XS$!%(@jVR3vs^0Vo f6Dl9 Date: Fri, 16 Aug 2024 15:05:05 +0300 Subject: [PATCH 11/14] Reapply "Merge remote-tracking branch 'upstream/master' into shadow" This reverts commit d026afc33c46a0e7b1a08692993ac93aadd5c942. --- Client/core/CCommands.cpp | 13 +- Client/core/CKeyBinds.cpp | 3 +- Client/game_sa/CCameraSA.cpp | 22 +- Client/game_sa/CCameraSA.h | 1 + Client/game_sa/CCarEnterExitSA.cpp | 13 + Client/game_sa/CCarEnterExitSA.h | 2 + Client/game_sa/CClockSA.cpp | 16 + Client/game_sa/CClockSA.h | 7 + Client/game_sa/CGameSA.cpp | 8 +- Client/game_sa/CGameSA.h | 2 +- Client/game_sa/CHandlingEntrySA.cpp | 84 +- Client/game_sa/CHandlingEntrySA.h | 153 +- Client/game_sa/CHandlingManagerSA.cpp | 134 +- Client/game_sa/CHandlingManagerSA.h | 33 +- Client/game_sa/CModelInfoSA.cpp | 12 +- Client/game_sa/CModelInfoSA.h | 1 + Client/game_sa/CPoolsSA.cpp | 2 + Client/game_sa/CVehicleSA.cpp | 51 +- Client/game_sa/CVehicleSA.h | 1 + Client/game_sa/CWeatherSA.h | 1 - Client/mods/deathmatch/ClientCommands.cpp | 14 +- Client/mods/deathmatch/ClientCommands.h | 2 +- .../mods/deathmatch/logic/CClientBuilding.cpp | 4 +- .../logic/CClientBuildingManager.cpp | 33 +- .../mods/deathmatch/logic/CClientCamera.cpp | 5 + Client/mods/deathmatch/logic/CClientCamera.h | 1 + Client/mods/deathmatch/logic/CClientGame.cpp | 14 +- Client/mods/deathmatch/logic/CClientGame.h | 2 +- Client/mods/deathmatch/logic/CClientIMG.cpp | 2 +- Client/mods/deathmatch/logic/CClientModel.cpp | 3 + .../mods/deathmatch/logic/CClientVehicle.cpp | 15 + Client/mods/deathmatch/logic/CClientVehicle.h | 2 + Client/mods/deathmatch/logic/CResource.cpp | 3 + Client/mods/deathmatch/logic/CResource.h | 5 + .../logic/CResourceModelStreamer.cpp | 122 + .../deathmatch/logic/CResourceModelStreamer.h | 30 + .../logic/CStaticFunctionDefinitions.cpp | 7 +- .../logic/lua/CLuaFunctionParseHelpers.cpp | 8 + .../logic/lua/CLuaFunctionParseHelpers.h | 2 + Client/mods/deathmatch/logic/lua/CLuaMain.h | 2 +- .../logic/luadefs/CLuaCameraDefs.cpp | 7 + .../deathmatch/logic/luadefs/CLuaCameraDefs.h | 1 + .../logic/luadefs/CLuaEngineDefs.cpp | 60 +- .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 6 +- .../logic/luadefs/CLuaVehicleDefs.cpp | 99 + .../logic/luadefs/CLuaVehicleDefs.h | 3 + .../logic/luadefs/CLuaWorldDefs.cpp | 20 +- .../deathmatch/logic/luadefs/CLuaWorldDefs.h | 6 + Client/multiplayer_sa/CMultiplayerSA.cpp | 103 +- Client/multiplayer_sa/CMultiplayerSA.h | 4 +- Client/sdk/core/CCommandsInterface.h | 2 +- Client/sdk/game/CCamera.h | 3 +- Client/sdk/game/CCarEnterExit.h | 2 + Client/sdk/game/CClock.h | 4 + Client/sdk/game/CGame.h | 2 +- Client/sdk/game/CHandlingEntry.h | 29 +- Client/sdk/game/CHandlingManager.h | 14 +- Client/sdk/game/CModelInfo.h | 1 + Client/sdk/game/CStreaming.h | 23 +- Client/sdk/multiplayer/CMultiplayer.h | 3 +- .../logic/CStaticFunctionDefinitions.cpp | 24 +- .../logic/luadefs/CLuaHandlingDefs.cpp | 58 +- .../MTA/locale/en_US/client.pot | 3786 ++++++++--------- Shared/data/launchers/CEFLauncher.exe | Bin 97664 -> 97664 bytes Shared/data/launchers/MTA Server ARM64.exe | Bin 372096 -> 372096 bytes Shared/data/launchers/MTA Server.exe | Bin 326528 -> 326528 bytes Shared/data/launchers/MTA Server64.exe | Bin 380800 -> 380800 bytes Shared/data/launchers/Multi Theft Auto.exe | Bin 418688 -> 418688 bytes Shared/data/launchers/wow64_helper.exe | Bin 262016 -> 262016 bytes utils/buildactions/install_cef.lua | 4 +- 70 files changed, 2782 insertions(+), 2317 deletions(-) create mode 100644 Client/mods/deathmatch/logic/CResourceModelStreamer.cpp create mode 100644 Client/mods/deathmatch/logic/CResourceModelStreamer.h diff --git a/Client/core/CCommands.cpp b/Client/core/CCommands.cpp index bec794abbe5..fecc85c3c61 100644 --- a/Client/core/CCommands.cpp +++ b/Client/core/CCommands.cpp @@ -125,6 +125,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Grab the command tagCOMMANDENTRY* pEntry = Get(szCommand); + bool wasHandled = false; if (pEntry) { // If its a core command, or if its enabled @@ -133,7 +134,8 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Execute it if (!bIsScriptedBind || pEntry->bAllowScriptedBind) ExecuteHandler(pEntry->pfnCmdFunc, szParameters); - return true; + + wasHandled = true; } } @@ -141,6 +143,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool std::string val = std::string(szCommand) + " " + std::string(szParameters ? szParameters : ""); // Is it a cvar? (syntax: cvar[ = value]) + if (!wasHandled) { // Check to see if '=' exists unsigned int nOpIndex = val.find('='); @@ -188,7 +191,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // HACK: if its a 'nick' command, save it here bool bIsNickCommand = !stricmp(szCommand, "nick"); - if (bIsNickCommand && szParameters && !bIsScriptedBind) + if (!wasHandled && bIsNickCommand && szParameters && !bIsScriptedBind) { if (CCore::GetSingleton().IsValidNick(szParameters)) { @@ -208,10 +211,14 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool // Try to execute the handler if (m_pfnExecuteHandler) { - if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, (pEntry != NULL), bIsScriptedBind)) + bool bAllowScriptedBind = (!pEntry || pEntry->bAllowScriptedBind); + if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, wasHandled, bIsScriptedBind, bAllowScriptedBind)) return true; } + if (wasHandled) + return true; + // Unknown command val = _("Unknown command or cvar: ") + szCommand; if (!bIsScriptedBind && !bIsNickCommand && pEntry == nullptr) diff --git a/Client/core/CKeyBinds.cpp b/Client/core/CKeyBinds.cpp index 78b354bd00d..0a1eee4a1ef 100644 --- a/Client/core/CKeyBinds.cpp +++ b/Client/core/CKeyBinds.cpp @@ -841,7 +841,8 @@ CCommandBind* CKeyBinds::FindCommandMatch(const char* szKey, const char* szComma NullEmptyStrings(szKey, szArguments, szResource, szOriginalScriptKey); std::string arguments = szArguments ? szArguments : ""; - szArguments = SharedUtil::Trim(arguments.data()); + if (!arguments.empty()) + szArguments = SharedUtil::Trim(arguments.data()); for (KeyBindPtr& bind : m_binds) { diff --git a/Client/game_sa/CCameraSA.cpp b/Client/game_sa/CCameraSA.cpp index 11326803b78..960ec7cfa7b 100644 --- a/Client/game_sa/CCameraSA.cpp +++ b/Client/game_sa/CCameraSA.cpp @@ -446,15 +446,15 @@ float CCameraSA::GetShakeForce() void CCameraSA::ShakeCamera(float radius, float x, float y, float z) noexcept { - DWORD dwFunc = FUNC_ShakeCam; - CCameraSAInterface* cameraInterface = GetInterface(); - _asm - { - mov ecx, cameraInterface - push z - push y - push x - push radius - call dwFunc - } + static CCameraSAInterface* cameraInterface = GetInterface(); + if (radius <= 0.0f) + return ResetShakeCamera(); + + using ShakeCamera_t = void(__thiscall*)(CCameraSAInterface*, float radius, float x, float y, float z); + ((ShakeCamera_t)FUNC_ShakeCam)(cameraInterface, radius, x, y, z); +} + +void CCameraSA::ResetShakeCamera() noexcept +{ + GetInterface()->m_fCamShakeForce = 0.0f; } diff --git a/Client/game_sa/CCameraSA.h b/Client/game_sa/CCameraSA.h index bfe431c2cdb..246f3362d8d 100644 --- a/Client/game_sa/CCameraSA.h +++ b/Client/game_sa/CCameraSA.h @@ -429,4 +429,5 @@ class CCameraSA : public CCamera float GetShakeForce(); void ShakeCamera(float radius, float x, float y, float z) noexcept override; + void ResetShakeCamera() noexcept override; }; diff --git a/Client/game_sa/CCarEnterExitSA.cpp b/Client/game_sa/CCarEnterExitSA.cpp index 5e0f8cd373f..a3001c75d25 100644 --- a/Client/game_sa/CCarEnterExitSA.cpp +++ b/Client/game_sa/CCarEnterExitSA.cpp @@ -78,6 +78,19 @@ bool CCarEnterExitSA::GetNearestCarPassengerDoor(CPed* pPed, CVehicle* pVehicle, return bReturn; } +void CCarEnterExitSA::GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept +{ + CVehicleSA* vehicleSA = dynamic_cast(vehicle); + + if (!vehicleSA) + return; + + CVehicleSAInterface* vehicleInterface = vehicleSA->GetVehicleInterface(); + + auto CCarEnterExit_GetPositionToOpenCarDoor = (void(__cdecl*)(CVector&, CVehicleSAInterface*, int))FUNC_GetPositionToOpenCarDoor; + CCarEnterExit_GetPositionToOpenCarDoor(position, vehicleInterface, door); +} + int CCarEnterExitSA::ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle) { DWORD dwFunc = FUNC_ComputeTargetDoorToExit; diff --git a/Client/game_sa/CCarEnterExitSA.h b/Client/game_sa/CCarEnterExitSA.h index e1f657b264a..3e35691bd8d 100644 --- a/Client/game_sa/CCarEnterExitSA.h +++ b/Client/game_sa/CCarEnterExitSA.h @@ -17,12 +17,14 @@ #define FUNC_GetNearestCarPassengerDoor 0x650BB0 #define FUNC_ComputeTargetDoorToExit 0x64F110 #define FUNC_IsRoomForPedToLeaveCar 0x6504C0 +#define FUNC_GetPositionToOpenCarDoor 0x64E740 class CCarEnterExitSA : public CCarEnterExit { public: bool GetNearestCarDoor(CPed* pPed, CVehicle* pVehicle, CVector* pVector, int* pDoor); bool GetNearestCarPassengerDoor(CPed* pPed, CVehicle* pVehicle, CVector* pVector, int* pDoor, bool bUnknown, bool bUnknown2, bool bCheckIfRoomToGetIn); + void GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept; int ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle); bool IsRoomForPedToLeaveCar(CVehicle* pVehicle, int iDoor, CVector* pUnknown = 0); }; diff --git a/Client/game_sa/CClockSA.cpp b/Client/game_sa/CClockSA.cpp index d8d0f5668a2..5ab106609d0 100644 --- a/Client/game_sa/CClockSA.cpp +++ b/Client/game_sa/CClockSA.cpp @@ -30,3 +30,19 @@ void CClockSA::Get(BYTE* bHour, BYTE* bMinute) *bMinute = *(BYTE*)VAR_TimeMinutes; *bHour = *(BYTE*)VAR_TimeHours; } + +bool CClockSA::SetTimeFrozen(bool value) noexcept +{ + if (value) + MemSet((void*)0x53BFBD, 0x90, 5); + else + MemCpy((void*)0x53BFBD, "\xE8\x4E\x0F\xFF\xFF", 5); + + m_bTimeCycleFrozen = value; + return true; +} + +bool CClockSA::ResetTimeFrozen() noexcept +{ + return SetTimeFrozen(false); +} diff --git a/Client/game_sa/CClockSA.h b/Client/game_sa/CClockSA.h index fd392e9ecfd..4d424ba8c5e 100644 --- a/Client/game_sa/CClockSA.h +++ b/Client/game_sa/CClockSA.h @@ -22,4 +22,11 @@ class CClockSA : public CClock public: void Set(BYTE bHour, BYTE bMinute); void Get(BYTE* bHour, BYTE* bMinute); + + bool SetTimeFrozen(bool value) noexcept; + bool IsTimeFrozen() const noexcept { return m_bTimeCycleFrozen; }; + bool ResetTimeFrozen() noexcept; + +private: + bool m_bTimeCycleFrozen; }; diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index abfb822816f..5d4a8300996 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -1005,7 +1005,7 @@ void CGameSA::GetShaderReplacementStats(SShaderReplacementStats& outStats) m_pRenderWare->GetShaderReplacementStats(outStats); } -void CGameSA::RemoveAllBuildings(bool clearBuildingRemoval) +void CGameSA::RemoveAllBuildings() { m_pIplStore->SetDynamicIplStreamingEnabled(false); @@ -1013,10 +1013,6 @@ void CGameSA::RemoveAllBuildings(bool clearBuildingRemoval) m_pPools->GetBuildingsPool().RemoveAllBuildings(); auto pBuildingRemoval = static_cast(m_pBuildingRemoval); - if (clearBuildingRemoval) - { - pBuildingRemoval->ClearRemovedBuildingLists(); - } pBuildingRemoval->DropCaches(); m_isBuildingsRemoved = true; @@ -1036,7 +1032,7 @@ bool CGameSA::SetBuildingPoolSize(size_t size) const bool shouldRemoveBuilding = !m_isBuildingsRemoved; if (shouldRemoveBuilding) { - RemoveAllBuildings(false); + RemoveAllBuildings(); } else { diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index f22b5748f71..976c1d5db0a 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -303,7 +303,7 @@ class CGameSA : public CGame PostWeaponFireHandler* m_pPostWeaponFireHandler; TaskSimpleBeHitHandler* m_pTaskSimpleBeHitHandler; - void RemoveAllBuildings(bool clearBuildingRemoval = true); + void RemoveAllBuildings(); void RestoreGameBuildings(); bool SetBuildingPoolSize(size_t size); diff --git a/Client/game_sa/CHandlingEntrySA.cpp b/Client/game_sa/CHandlingEntrySA.cpp index 40e8b86423a..1ebb1471e3f 100644 --- a/Client/game_sa/CHandlingEntrySA.cpp +++ b/Client/game_sa/CHandlingEntrySA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory - * FILE: game_sa/CHandlingEntrySA.cpp + * FILE: Client/game_sa/CHandlingEntrySA.cpp * PURPOSE: Vehicle handling data entry * - * Multi Theft Auto is available from http://www.multitheftauto.com/ + * Multi Theft Auto is available from https://multitheftauto.com/ * *****************************************************************************/ @@ -22,91 +22,89 @@ CHandlingEntrySA::CHandlingEntrySA() m_pHandlingSA = new tHandlingDataSA; memset(m_pHandlingSA, 0, sizeof(tHandlingDataSA)); m_bDeleteInterface = true; - - // We have no original data - m_pOriginalData = NULL; - m_bChanged = true; } CHandlingEntrySA::CHandlingEntrySA(tHandlingDataSA* pOriginal) { // Store gta's pointer - m_pHandlingSA = NULL; - m_pOriginalData = NULL; + m_pHandlingSA = nullptr; m_bDeleteInterface = false; memcpy(&m_Handling, pOriginal, sizeof(tHandlingDataSA)); - m_bChanged = true; } CHandlingEntrySA::~CHandlingEntrySA() { - if (m_bChanged) - { - pGame->GetHandlingManager()->RemoveChangedVehicle(); - } if (m_bDeleteInterface) { - delete m_pHandlingSA; + SAFE_DELETE(m_pHandlingSA); } } // Apply the handlingdata from another data -void CHandlingEntrySA::Assign(const CHandlingEntry* pData) +void CHandlingEntrySA::Assign(const CHandlingEntry* pEntry) { + if (!pEntry) + return; + // Copy the data - const CHandlingEntrySA* pEntrySA = static_cast(pData); + const CHandlingEntrySA* pEntrySA = static_cast(pEntry); m_Handling = pEntrySA->m_Handling; - if (m_bChanged) - { - pGame->GetHandlingManager()->RemoveChangedVehicle(); - } - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::Recalculate(unsigned short usModel) +void CHandlingEntrySA::Recalculate() { // Real GTA class? - if (m_pHandlingSA) - { - // Copy our stored field to GTA's - memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling)); - ((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA); - } + if (!m_pHandlingSA) + return; + + // Copy our stored field to GTA's + memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling)); + ((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA); } -// Moved to cpp to check suspension changes against default values to make sure the handling hasn't changed. -void CHandlingEntrySA::SetSuspensionForceLevel(float fForce) +void CHandlingEntrySA::SetSuspensionForceLevel(float fForce) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionForceLevel = fForce; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionDamping(float fDamping) + +void CHandlingEntrySA::SetSuspensionDamping(float fDamping) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionDamping = fDamping; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping) + +void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionHighSpdDamping = fDamping; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit) + +void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionUpperLimit = fUpperLimit; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit) + +void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionLowerLimit = fLowerLimit; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias) + +void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionFrontRearBias = fBias; - pGame->GetHandlingManager()->CheckSuspensionChanges(this); } -void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive) + +void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept { + CheckSuspensionChanges(); m_Handling.fSuspensionAntiDiveMultiplier = fAntidive; +} + +void CHandlingEntrySA::CheckSuspensionChanges() noexcept +{ pGame->GetHandlingManager()->CheckSuspensionChanges(this); } diff --git a/Client/game_sa/CHandlingEntrySA.h b/Client/game_sa/CHandlingEntrySA.h index ede72766f86..d1836f461ee 100644 --- a/Client/game_sa/CHandlingEntrySA.h +++ b/Client/game_sa/CHandlingEntrySA.h @@ -1,17 +1,18 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory - * FILE: game_sa/CHandlingEntrySA.h + * FILE: Client/game_sa/CHandlingEntrySA.h * PURPOSE: Header file for vehicle handling data entry class * - * Multi Theft Auto is available from http://www.multitheftauto.com/ + * Multi Theft Auto is available from https://multitheftauto.com/ * *****************************************************************************/ #pragma once #include + #define FUNC_HandlingDataMgr_ConvertDataToGameUnits 0x6F5080 // http://www.gtamodding.com/index.php?title=Handling.cfg#GTA_San_Andreas @@ -95,111 +96,107 @@ class CHandlingEntrySA : public CHandlingEntry virtual ~CHandlingEntrySA(); // Use this to copy data from an another handling class to this - void Assign(const CHandlingEntry* pData); + void Assign(const CHandlingEntry* pEntry); // Get functions - float GetMass() const { return m_Handling.fMass; }; - float GetTurnMass() const { return m_Handling.fTurnMass; }; - float GetDragCoeff() const { return m_Handling.fDragCoeff; }; - const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; }; + float GetMass() const { return m_Handling.fMass; } + float GetTurnMass() const { return m_Handling.fTurnMass; } + float GetDragCoeff() const { return m_Handling.fDragCoeff; } + const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; } - unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; }; - float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; }; + unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; } + float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; } - eDriveType GetCarDriveType() const { return static_cast(m_Handling.Transmission.ucDriveType); }; - eEngineType GetCarEngineType() const { return static_cast(m_Handling.Transmission.ucEngineType); }; - unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; }; + eDriveType GetCarDriveType() const { return static_cast(m_Handling.Transmission.ucDriveType); } + eEngineType GetCarEngineType() const { return static_cast(m_Handling.Transmission.ucEngineType); } + unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; } - float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; }; - float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; }; - float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; }; + float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; } + float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; } + float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; } - float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; }; - float GetBrakeBias() const { return m_Handling.fBrakeBias; }; - bool GetABS() const { return m_Handling.bABS; }; + float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; } + float GetBrakeBias() const { return m_Handling.fBrakeBias; } + bool GetABS() const { return m_Handling.bABS; } - float GetSteeringLock() const { return m_Handling.fSteeringLock; }; - float GetTractionLoss() const { return m_Handling.fTractionLoss; }; - float GetTractionBias() const { return m_Handling.fTractionBias; }; + float GetSteeringLock() const { return m_Handling.fSteeringLock; } + float GetTractionLoss() const { return m_Handling.fTractionLoss; } + float GetTractionBias() const { return m_Handling.fTractionBias; } - float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; }; - float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; }; - float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; }; - float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; }; - float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; }; - float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; }; - float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; }; + float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; } + float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; } + float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; } + float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; } + float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; } + float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; } + float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; } - float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; }; + float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; } - unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; }; - unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; }; - float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; }; - unsigned int GetMonetary() const { return m_Handling.uiMonetary; }; + unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; } + unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; } + float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; } + unsigned int GetMonetary() const { return m_Handling.uiMonetary; } - eLightType GetHeadLight() const { return static_cast(m_Handling.ucHeadLight); }; - eLightType GetTailLight() const { return static_cast(m_Handling.ucTailLight); }; - unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; }; + eLightType GetHeadLight() const { return static_cast(m_Handling.ucHeadLight); } + eLightType GetTailLight() const { return static_cast(m_Handling.ucTailLight); } + unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; } - eVehicleTypes GetModel() const { return static_cast(m_Handling.iVehicleID); }; - bool HasSuspensionChanged() const { return true; }; + std::uint16_t GetVehicleID() const { return static_cast(m_Handling.iVehicleID); } // Set functions - void SetMass(float fMass) { m_Handling.fMass = fMass; }; - void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; }; - void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; }; - void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; }; + void SetMass(float fMass) { m_Handling.fMass = fMass; } + void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; } + void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; } + void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; } - void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; }; - void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; }; + void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; } + void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; } - void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; }; - void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; }; - void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; }; + void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; } + void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; } + void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; } - void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; }; - void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; }; - void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; }; + void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; } + void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; } + void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; } - void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; }; - void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; }; - void SetABS(bool bABS) { m_Handling.bABS = bABS; }; + void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; } + void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; } + void SetABS(bool bABS) { m_Handling.bABS = bABS; } - void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; }; - void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; }; - void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; }; + void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; } + void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; } + void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; } - void SetSuspensionForceLevel(float fForce); - void SetSuspensionDamping(float fDamping); - void SetSuspensionHighSpeedDamping(float fDamping); - void SetSuspensionUpperLimit(float fUpperLimit); - void SetSuspensionLowerLimit(float fLowerLimit); - void SetSuspensionFrontRearBias(float fBias); - void SetSuspensionAntiDiveMultiplier(float fAntidive); + void SetSuspensionForceLevel(float fForce) noexcept; + void SetSuspensionDamping(float fDamping) noexcept; + void SetSuspensionHighSpeedDamping(float fDamping) noexcept; + void SetSuspensionUpperLimit(float fUpperLimit) noexcept; + void SetSuspensionLowerLimit(float fLowerLimit) noexcept; + void SetSuspensionFrontRearBias(float fBias) noexcept; + void SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept; - void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; }; + void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; } - void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; }; - void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; }; - void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; }; - void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; }; + void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; } + void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; } + void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; } + void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; } - void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; }; - void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; }; - void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; }; + void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; } + void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; } + void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; } - void Recalculate(unsigned short usModel); + void CheckSuspensionChanges() noexcept; - tHandlingDataSA* GetInterface() { return m_pHandlingSA; }; + void Recalculate(); - void SetSuspensionChanged(bool bChanged) { m_bChanged = bChanged; }; + tHandlingDataSA* GetInterface() const { return m_pHandlingSA; } private: tHandlingDataSA* m_pHandlingSA; bool m_bDeleteInterface; tHandlingDataSA m_Handling; - - tHandlingDataSA* m_pOriginalData; - bool m_bChanged; }; diff --git a/Client/game_sa/CHandlingManagerSA.cpp b/Client/game_sa/CHandlingManagerSA.cpp index cf37268e961..e7e3a43bd01 100644 --- a/Client/game_sa/CHandlingManagerSA.cpp +++ b/Client/game_sa/CHandlingManagerSA.cpp @@ -10,10 +10,10 @@ *****************************************************************************/ #include "StdInc.h" +#include "CGameSA.h" +#include "CHandlingManagerSA.h" #include #include -#include "CHandlingManagerSA.h" -#include "CGameSA.h" extern CCoreInterface* g_pCore; extern CGameSA* pGame; @@ -24,27 +24,28 @@ extern CGameSA* pGame; #define Var_fTurnMassMultiplier 0x858B8C #define Var_fBasicDragCoeff 0x858C58 -DWORD CHandlingManagerSA::m_dwStore_LoadHandlingCfg = 0; +#define DUMP_HANDLING_DATA 0 + +// Original handling data unaffected by handling.cfg changes +tHandlingDataSA m_OriginalHandlingData[HT_MAX]; +CHandlingEntrySA* m_pOriginalEntries[HT_MAX]; -tHandlingDataSA CHandlingManagerSA::m_OriginalHandlingData[HT_MAX]; -CHandlingEntrySA* CHandlingManagerSA::m_pOriginalEntries[HT_MAX]; +tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24]; +CFlyingHandlingEntrySA* m_pOriginalFlyingEntries[24]; -tFlyingHandlingDataSA CHandlingManagerSA::m_OriginalFlyingHandlingData[24]; -CFlyingHandlingEntrySA* CHandlingManagerSA::m_pOriginalFlyingEntries[24]; +tBoatHandlingDataSA m_OriginalBoatHandlingData[12]; +CBoatHandlingEntrySA* m_pOriginalBoatEntries[12]; -tBoatHandlingDataSA CHandlingManagerSA::m_OriginalBoatHandlingData[12]; -CBoatHandlingEntrySA* CHandlingManagerSA::m_pOriginalBoatEntries[12]; +tBikeHandlingDataSA m_OriginalBikeHandlingData[14]; +CBikeHandlingEntrySA* m_pOriginalBikeEntries[14]; -tBikeHandlingDataSA CHandlingManagerSA::m_OriginalBikeHandlingData[14]; -CBikeHandlingEntrySA* CHandlingManagerSA::m_pOriginalBikeEntries[14]; +std::map m_HandlingNames; // TODO We need install a hook in 0x6F52D0 to make some stuff work corrently // Use the following code to dump handling data unrecalculated on GTA load. // NB: You need to disable the other hook in the constructor of the manager and uncomment the other -DWORD m_dwStore_Calculate = 0; - __declspec(noinline) void DumpHandlingData(tHandlingDataSA* pData) { unsigned int iCounter = pData->iVehicleID; @@ -100,17 +101,17 @@ __declspec(noinline) void DumpHandlingData(tHandlingDataSA* pData) fclose(pFile); } -__declspec(naked) void Hook_Calculate() +static __declspec(naked) void Hook_Calculate() { tHandlingDataSA* pData; - DWORD dwHandlingData; + DWORD dwHandlingData; _asm { mov eax, [esp+4] mov dwHandlingData, eax } - pData = (tHandlingDataSA*)(dwHandlingData); + pData = reinterpret_cast(dwHandlingData); DumpHandlingData(pData); _asm @@ -131,28 +132,30 @@ CHandlingManagerSA::CHandlingManagerSA() InitializeDefaultHandlings(); // Create a handling entry for every original handling data. - for (int i = 0; i < HT_MAX; i++) + for (std::size_t i = 0; i < HT_MAX; i++) { m_pOriginalEntries[i] = new CHandlingEntrySA(&m_OriginalHandlingData[i]); } - for (int i = 0; i < 24; i++) + for (std::size_t i = 0; i < 24; i++) { m_pOriginalFlyingEntries[i] = new CFlyingHandlingEntrySA(&m_OriginalFlyingHandlingData[i]); } - for (int i = 0; i < 12; i++) + for (std::size_t i = 0; i < 12; i++) { m_pOriginalBoatEntries[i] = new CBoatHandlingEntrySA(&m_OriginalBoatHandlingData[i]); } - for (int i = 0; i < 14; i++) + for (std::size_t i = 0; i < 14; i++) { m_pOriginalBikeEntries[i] = new CBikeHandlingEntrySA(&m_OriginalBikeHandlingData[i]); } - // Uncomment this to dump - // HookInstall ( Func_Calculate, (DWORD) Hook_Calculate, 11 ); +#if DUMP_HANDLING_DATA + HookInstall(Func_Calculate, (DWORD)Hook_Calculate, 11); +#endif + m_HandlingNames["mass"] = HANDLING_MASS; // works (mass > 0) m_HandlingNames["turnMass"] = HANDLING_TURNMASS; // works m_HandlingNames["dragCoeff"] = HANDLING_DRAGCOEFF; // works @@ -186,35 +189,33 @@ CHandlingManagerSA::CHandlingManagerSA() m_HandlingNames["headLight"] = HANDLING_HEADLIGHT; // doesn't work m_HandlingNames["tailLight"] = HANDLING_TAILLIGHT; // doesn't seem to work* m_HandlingNames["animGroup"] = HANDLING_ANIMGROUP; // works model based - - iChangedVehicles = 0; } CHandlingManagerSA::~CHandlingManagerSA() { // Destroy all original handling entries - for (int i = 0; i < HT_MAX; i++) + for (std::size_t i = 0; i < HT_MAX; i++) { delete m_pOriginalEntries[i]; } - for (int i = 0; i < 24; i++) + for (std::size_t i = 0; i < 24; i++) { delete m_pOriginalFlyingEntries[i]; } - for (int i = 0; i < 12; i++) + for (std::size_t i = 0; i < 12; i++) { delete m_pOriginalBoatEntries[i]; } - for (int i = 0; i < 14; i++) + for (std::size_t i = 0; i < 14; i++) { delete m_pOriginalBikeEntries[i]; } } -eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& strName) +eHandlingProperty CHandlingManagerSA::GetPropertyEnumFromName(const std::string& strName) const { const auto it = m_HandlingNames.find(strName); return it != m_HandlingNames.end() ? it->second : HANDLING_MAX; @@ -240,26 +241,26 @@ CBikeHandlingEntry* CHandlingManagerSA::CreateBikeHandlingData() return new CBikeHandlingEntrySA; } -const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(eVehicleTypes eModel) +const CHandlingEntry* CHandlingManagerSA::GetOriginalHandlingData(eVehicleTypes eModel) const { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - eHandlingTypes eHandling = GetHandlingID(eModel); + const eHandlingTypes eHandling = GetHandlingID(eModel); // Return it return m_pOriginalEntries[eHandling]; } -const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eVehicleTypes eModel) +const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eVehicleTypes eModel) const { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - eHandlingTypes eHandling = GetHandlingID(eModel); + const eHandlingTypes eHandling = GetHandlingID(eModel); // Original GTA:SA behavior if (eHandling < HT_SEAPLANE || eHandling > HT_RCRAIDER) return m_pOriginalFlyingEntries[0]; @@ -267,14 +268,14 @@ const CFlyingHandlingEntry* CHandlingManagerSA::GetOriginalFlyingHandlingData(eV return m_pOriginalFlyingEntries[eHandling - HT_SEAPLANE]; } -const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehicleTypes eModel) +const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehicleTypes eModel) const { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - eHandlingTypes eHandling = GetHandlingID(eModel); + const eHandlingTypes eHandling = GetHandlingID(eModel); // Original GTA:SA behavior if (eHandling < HT_PREDATOR || eHandling > HT_SEAPLANE) return m_pOriginalBoatEntries[0]; @@ -282,14 +283,14 @@ const CBoatHandlingEntry* CHandlingManagerSA::GetOriginalBoatHandlingData(eVehic return m_pOriginalBoatEntries[eHandling - HT_PREDATOR]; } -const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehicleTypes eModel) +const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehicleTypes eModel) const { // Vehicle? if (!IsVehicleModel(eModel)) return nullptr; // Get our Handling ID, the default value will be HT_LANDSTAL - eHandlingTypes eHandling = GetHandlingID(eModel); + const eHandlingTypes eHandling = GetHandlingID(eModel); if (eHandling >= HT_BIKE && eHandling <= HT_FREEWAY) return m_pOriginalBikeEntries[eHandling - HT_BIKE]; else if (eHandling == HT_FAGGIO) @@ -299,7 +300,7 @@ const CBikeHandlingEntry* CHandlingManagerSA::GetOriginalBikeHandlingData(eVehic } // Return the handling manager id -eHandlingTypes CHandlingManagerSA::GetHandlingID(eVehicleTypes eModel) +eHandlingTypes CHandlingManagerSA::GetHandlingID(eVehicleTypes eModel) const { switch (eModel) { @@ -9153,17 +9154,29 @@ void CHandlingManagerSA::InitializeDefaultHandlings() m_OriginalBikeHandlingData[13].iVehicleID = 214; } -void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) +void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept { + // Valid? + if (!pEntry) + return; + // Grab us a multiplayer_sa pointer - CMultiplayer* pMultiplayer = g_pCore->GetMultiplayer(); - eVehicleTypes eModel = pEntry->GetModel(); - // Find our original data - CHandlingEntrySA* pOriginal = m_pOriginalEntries[eModel]; + CMultiplayer* const pMultiplayer = g_pCore->GetMultiplayer(); + if (!pMultiplayer) + return; + + // Get Handling ID + const eHandlingTypes eHandling = static_cast(pEntry->GetVehicleID()); + if (eHandling > HT_MAX) + return; + + const CHandlingEntrySA* pOriginal = m_pOriginalEntries[eHandling]; + if (!pOriginal) + return; + // Default bChanged to false bool bChanged = false; - // loads of if statements because I'm pro like that... na j/k // Set bChanged to true if we find ANY change. if (pEntry->GetSuspensionAntiDiveMultiplier() != pOriginal->GetSuspensionAntiDiveMultiplier()) bChanged = true; @@ -9186,35 +9199,8 @@ void CHandlingManagerSA::CheckSuspensionChanges(CHandlingEntry* pEntry) if (pEntry->GetSuspensionUpperLimit() != pOriginal->GetSuspensionUpperLimit()) bChanged = true; - // Is bChanged true and the suspension flag changed marker false - if (bChanged && !pEntry->HasSuspensionChanged()) - { - // Is our hook uninstalled? - if (!pMultiplayer->IsSuspensionEnabled()) - // Install the hook - pMultiplayer->SetSuspensionEnabled(true); - - // Increment iChangedVehicles - iChangedVehicles++; - // Set our Suspension Changed flag - pEntry->SetSuspensionChanged(true); - } - // is bChanged false and is this model supposed to contain non-default info? (i.e. they just reverted) - else if (!bChanged && pEntry->HasSuspensionChanged()) - { - // Decrement iChangedVehicles - iChangedVehicles--; - // Set the suspension Changed flag to false - pEntry->SetSuspensionChanged(false); - } - - // if we hit 0 vehicles installed and it's installed uninstall the hook - if (iChangedVehicles == 0 && pMultiplayer->IsSuspensionEnabled()) - pMultiplayer->SetSuspensionEnabled(false); -} + if (!bChanged) + return; -void CHandlingManagerSA::RemoveChangedVehicle() -{ - // Decrement the count - iChangedVehicles--; + pMultiplayer->UpdateVehicleSuspension(); } diff --git a/Client/game_sa/CHandlingManagerSA.h b/Client/game_sa/CHandlingManagerSA.h index fe024b1041e..52ce90c9f34 100644 --- a/Client/game_sa/CHandlingManagerSA.h +++ b/Client/game_sa/CHandlingManagerSA.h @@ -28,36 +28,17 @@ class CHandlingManagerSA : public CHandlingManager CBoatHandlingEntry* CreateBoatHandlingData(); CBikeHandlingEntry* CreateBikeHandlingData(); - const CHandlingEntry* GetOriginalHandlingData(eVehicleTypes eModel); - const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(eVehicleTypes eModel); - const CBoatHandlingEntry* GetOriginalBoatHandlingData(eVehicleTypes eModel); - const CBikeHandlingEntry* GetOriginalBikeHandlingData(eVehicleTypes eModel); + const CHandlingEntry* GetOriginalHandlingData(eVehicleTypes eModel) const; + const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(eVehicleTypes eModel) const; + const CBoatHandlingEntry* GetOriginalBoatHandlingData(eVehicleTypes eModel) const; + const CBikeHandlingEntry* GetOriginalBikeHandlingData(eVehicleTypes eModel) const; - eHandlingTypes GetHandlingID(eVehicleTypes eModel); + eHandlingProperty GetPropertyEnumFromName(const std::string& strName) const; - eHandlingProperty GetPropertyEnumFromName(const std::string& strName); - - void CheckSuspensionChanges(CHandlingEntry* pEntry); - void RemoveChangedVehicle(); + void CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept; private: void InitializeDefaultHandlings(); - static DWORD m_dwStore_LoadHandlingCfg; - - // Original handling data unaffected by handling.cfg changes - static tHandlingDataSA m_OriginalHandlingData[HT_MAX]; - static CHandlingEntrySA* m_pOriginalEntries[HT_MAX]; - - static tFlyingHandlingDataSA m_OriginalFlyingHandlingData[24]; - static CFlyingHandlingEntrySA* m_pOriginalFlyingEntries[24]; - - static tBoatHandlingDataSA m_OriginalBoatHandlingData[12]; - static CBoatHandlingEntrySA* m_pOriginalBoatEntries[12]; - - static tBikeHandlingDataSA m_OriginalBikeHandlingData[14]; - static CBikeHandlingEntrySA* m_pOriginalBikeEntries[14]; - - std::map m_HandlingNames; - int iChangedVehicles; + eHandlingTypes GetHandlingID(eVehicleTypes eModel) const; }; diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 5dc00712daa..483615d3e14 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -440,6 +440,16 @@ void CModelInfoSA::Remove() } } +bool CModelInfoSA::UnloadUnused() +{ + if (m_pInterface->usNumberOfRefs == 0 && !m_pCustomClump && !m_pCustomColModel) + { + pGame->GetStreaming()->RemoveModel(m_dwModelID); + return true; + } + return false; +} + bool CModelInfoSA::IsLoaded() { if (DoIsLoaded()) @@ -1035,7 +1045,7 @@ void CModelInfoSA::StaticFlushPendingRestreamIPL() for (it = removedModels.begin(); it != removedModels.end(); it++) { pGame->GetStreaming()->RemoveModel(*it); - pGame->GetStreaming()->GetStreamingInfo(*it)->loadState = 0; + pGame->GetStreaming()->GetStreamingInfo(*it)->loadState = eModelLoadState::LOADSTATE_NOT_LOADED; } } diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 329d2e3e50f..b261bcc04a1 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -362,6 +362,7 @@ class CModelInfoSA : public CModelInfo BYTE GetVehicleType(); void Request(EModelRequestType requestType, const char* szTag); void Remove(); + bool UnloadUnused(); bool IsLoaded(); bool DoIsLoaded(); unsigned short GetFlags(); diff --git a/Client/game_sa/CPoolsSA.cpp b/Client/game_sa/CPoolsSA.cpp index 2be6742617c..42c534dcaae 100644 --- a/Client/game_sa/CPoolsSA.cpp +++ b/Client/game_sa/CPoolsSA.cpp @@ -128,6 +128,8 @@ CVehicle* CPoolsSA::AddVehicle(CClientVehicle* pClientVehicle, eVehicleTypes eVe { pVehicle->m_ucVariant = ucVariation; pVehicle->m_ucVariant2 = ucVariation2; + + pVehicle->DumpVehicleFrames(); } else { diff --git a/Client/game_sa/CVehicleSA.cpp b/Client/game_sa/CVehicleSA.cpp index c2c612d5c7a..91fb5440e02 100644 --- a/Client/game_sa/CVehicleSA.cpp +++ b/Client/game_sa/CVehicleSA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory - * FILE: game_sa/CVehicleSA.cpp + * FILE: Client/game_sa/CVehicleSA.cpp * PURPOSE: Vehicle base entity * - * Multi Theft Auto is available from http://www.multitheftauto.com/ + * Multi Theft Auto is available from https://multitheftauto.com/ * *****************************************************************************/ @@ -186,12 +186,6 @@ void CVehicleSA::Init() } CopyGlobalSuspensionLinesToPrivate(); - - // clear our rw frames list - m_ExtraFrames.clear(); - // dump the frames - VehicleDump(this); - FinalizeFramesList(); } CVehicleSA::~CVehicleSA() @@ -1320,7 +1314,7 @@ void CVehicleSA::RecalculateHandling() if (!m_pHandlingData) return; - m_pHandlingData->Recalculate(GetModelIndex()); + m_pHandlingData->Recalculate(); // Recalculate the suspension lines RecalculateSuspensionLines(); @@ -1699,11 +1693,6 @@ void CVehicleSA::CopyGlobalSuspensionLinesToPrivate() void CVehicleSA::RecalculateSuspensionLines() { CHandlingEntry* pHandlingEntry = GetHandlingData(); - // if suspension is master disabled or suspension hasn't changed return. - // if ( g_pCore->GetMultiplayer ()->IsSuspensionEnabled () == false || pHandlingEntry->HasSuspensionChanged ( ) == false ) - //{ - // return; - //} DWORD dwModel = GetModelIndex(); CModelInfo* pModelInfo = pGame->GetModelInfo(dwModel); @@ -1954,6 +1943,7 @@ void CVehicleSA::AddComponent(RwFrame* pFrame, bool bReadOnly) // if the frame is invalid we don't want to be here if (!pFrame) return; + // if the frame already exists ignore it if (IsComponentPresent(pFrame->szName) || pFrame->szName == "") return; @@ -1962,23 +1952,22 @@ void CVehicleSA::AddComponent(RwFrame* pFrame, bool bReadOnly) // variants have no name field. if (strName == "") { + // In MTA variant 255 means no variant + if ((m_ucVariantCount == 0 && m_ucVariant == 255) || (m_ucVariantCount == 1 && m_ucVariant2 == 255)) + return; + // name starts with extra strName = "extra_"; - if (m_ucVariantCount == 0) - { - // variants are extra_a, extra_b and so on - strName += ('a' - 1) + m_ucVariant; - } - if (m_ucVariantCount == 1) - { - // variants are extra_a, extra_b and so on - strName += ('a' - 1) + m_ucVariant2; - } + + // variants are extra_a - extra_f + strName += 'a' + (m_ucVariantCount == 0 ? m_ucVariant : m_ucVariant2); + // increment the variant count ( we assume that the first variant created is variant1 and the second is variant2 ) m_ucVariantCount++; } - SVehicleFrame frame = SVehicleFrame(pFrame, bReadOnly); + // insert our new frame + SVehicleFrame frame = SVehicleFrame(pFrame, bReadOnly); m_ExtraFrames.insert(std::pair(strName, frame)); } @@ -2006,6 +1995,16 @@ void CVehicleSA::FinalizeFramesList() } } +void CVehicleSA::DumpVehicleFrames() +{ + // clear our rw frames list + m_ExtraFrames.clear(); + + // dump the frames + VehicleDump(this); + FinalizeFramesList(); +} + bool CVehicleSA::SetComponentVisible(const SString& vehicleComponent, bool bRequestVisible) { SVehicleFrame* pComponent = GetVehicleComponent(vehicleComponent); diff --git a/Client/game_sa/CVehicleSA.h b/Client/game_sa/CVehicleSA.h index f9847d4c33f..58632dabbf3 100644 --- a/Client/game_sa/CVehicleSA.h +++ b/Client/game_sa/CVehicleSA.h @@ -687,4 +687,5 @@ class CVehicleSA : public virtual CVehicle, public virtual CPhysicalSA void CopyGlobalSuspensionLinesToPrivate(); SVehicleFrame* GetVehicleComponent(const SString& vehicleComponent); void FinalizeFramesList(); + void DumpVehicleFrames(); }; diff --git a/Client/game_sa/CWeatherSA.h b/Client/game_sa/CWeatherSA.h index 8e6d970d1d5..31898204fa6 100644 --- a/Client/game_sa/CWeatherSA.h +++ b/Client/game_sa/CWeatherSA.h @@ -60,5 +60,4 @@ class CWeatherSA : public CWeather static unsigned char* VAR_CWeather__OldWeatherType; static unsigned char* VAR_CWeather__NewWeatherType; static float* VAR_CWeather__Rain; - }; diff --git a/Client/mods/deathmatch/ClientCommands.cpp b/Client/mods/deathmatch/ClientCommands.cpp index d2db3905df9..6ca4d736253 100644 --- a/Client/mods/deathmatch/ClientCommands.cpp +++ b/Client/mods/deathmatch/ClientCommands.cpp @@ -29,7 +29,7 @@ using std::vector; extern CClientGame* g_pClientGame; -bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind) +bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind, bool bAllowScriptedBind) { // Has the core already handled this command? if (!bHandled) @@ -95,8 +95,16 @@ bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHand } else { - // Call our comand-handlers for core-executed commands too - g_pClientGame->GetRegisteredCommands()->ProcessCommand(szCommand, szArguments); + // Call the onClientCoreCommand event + CLuaArguments Arguments; + Arguments.PushString(szCommand); + + auto pLocalPlayer = g_pClientGame->GetLocalPlayer(); + pLocalPlayer->CallEvent("onClientCoreCommand", Arguments, true); + + // Call our comand-handlers for core-executed commands too, if allowed + if (bAllowScriptedBind) + g_pClientGame->GetRegisteredCommands()->ProcessCommand(szCommand, szArguments); } return false; } diff --git a/Client/mods/deathmatch/ClientCommands.h b/Client/mods/deathmatch/ClientCommands.h index d2bb6ea71a4..c6aa7550996 100644 --- a/Client/mods/deathmatch/ClientCommands.h +++ b/Client/mods/deathmatch/ClientCommands.h @@ -11,7 +11,7 @@ #pragma once -bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind); +bool COMMAND_Executed(const char* szCommand, const char* szArguments, bool bHandleRemotely, bool bHandled, bool bIsScriptedBind, bool bAllowScriptedBind); void COMMAND_Help(const char* szCmdLine); void COMMAND_Disconnect(const char* szCmdLine); diff --git a/Client/mods/deathmatch/logic/CClientBuilding.cpp b/Client/mods/deathmatch/logic/CClientBuilding.cpp index 68d435011c0..61947a6bab3 100644 --- a/Client/mods/deathmatch/logic/CClientBuilding.cpp +++ b/Client/mods/deathmatch/logic/CClientBuilding.cpp @@ -24,6 +24,7 @@ CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, u m_pLowBuilding(nullptr) { m_pManager = pManager; + m_pModelInfo = g_pGame->GetModelInfo(usModelId); SetTypeName("building"); m_pBuildingManager->AddToList(this); Create(); @@ -99,6 +100,7 @@ void CClientBuilding::SetModel(uint16_t model) if (CClientBuildingManager::IsValidModel(model)) { m_usModelId = model; + m_pModelInfo = g_pGame->GetModelInfo(model); Recreate(); } } @@ -143,7 +145,7 @@ void CClientBuilding::Destroy() if (!m_pBuilding) return; - if (m_pHighBuilding) + if (m_pHighBuilding && m_pHighBuilding->IsValid()) { m_pHighBuilding->GetBuildingEntity()->SetLod(nullptr); } diff --git a/Client/mods/deathmatch/logic/CClientBuildingManager.cpp b/Client/mods/deathmatch/logic/CClientBuildingManager.cpp index 198fd23ed2c..243917b89f0 100644 --- a/Client/mods/deathmatch/logic/CClientBuildingManager.cpp +++ b/Client/mods/deathmatch/logic/CClientBuildingManager.cpp @@ -98,9 +98,38 @@ void CClientBuildingManager::DestroyAllForABit() void CClientBuildingManager::RestoreDestroyed() { - for (CClientBuilding* building : GetBuildings()) + bool hasInvalidLods = true; + while (hasInvalidLods) { - building->Create(); + hasInvalidLods = false; + for (CClientBuilding* building : GetBuildings()) + { + const CClientBuilding* highLodBuilding = building->GetHighLodBuilding(); + if (highLodBuilding && !highLodBuilding->IsValid()) + { + hasInvalidLods = true; + } + else + { + CModelInfo* modelInfo = building->GetModelInfo(); + const uint16_t physicalGroup = modelInfo->GetObjectPropertiesGroup(); + + if (physicalGroup == -1) + { + building->Create(); + } + else + { + // GTA creates dynamic models as dummies. + // It's possible that the physical group was changes after + // creating a new building. We can avoid crashes in this case. + modelInfo->SetObjectPropertiesGroup(-1); + building->Create(); + modelInfo->SetObjectPropertiesGroup(physicalGroup); + } + + } + } } } diff --git a/Client/mods/deathmatch/logic/CClientCamera.cpp b/Client/mods/deathmatch/logic/CClientCamera.cpp index 292b7dbeeee..663d52828e3 100644 --- a/Client/mods/deathmatch/logic/CClientCamera.cpp +++ b/Client/mods/deathmatch/logic/CClientCamera.cpp @@ -639,3 +639,8 @@ void CClientCamera::ShakeCamera(float radius, float x, float y, float z) noexcep { m_pCamera->ShakeCamera(radius, x, y, z); } + +void CClientCamera::ResetShakeCamera() noexcept +{ + m_pCamera->ResetShakeCamera(); +} \ No newline at end of file diff --git a/Client/mods/deathmatch/logic/CClientCamera.h b/Client/mods/deathmatch/logic/CClientCamera.h index 7fa36ce0490..c49246098cf 100644 --- a/Client/mods/deathmatch/logic/CClientCamera.h +++ b/Client/mods/deathmatch/logic/CClientCamera.h @@ -65,6 +65,7 @@ class CClientCamera final : public CClientEntity void Reset(); void ShakeCamera(float radius, float x, float y, float z) noexcept; + void ResetShakeCamera() noexcept; void SetCameraVehicleViewMode(eVehicleCamMode eMode); void SetCameraPedViewMode(ePedCamMode eMode); diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index f3fe9e2f66c..51ac6b2c4ab 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -33,6 +33,7 @@ #include #include #include +#include "game/CClock.h" #include #include "CServerInfo.h" @@ -2705,6 +2706,7 @@ void CClientGame::AddBuiltInEvents() // Console events m_Events.AddEvent("onClientConsole", "text", NULL, false); + m_Events.AddEvent("onClientCoreCommand", "command", NULL, false); // Chat events m_Events.AddEvent("onClientChatMessage", "text, r, g, b, messageType", NULL, false); @@ -5407,6 +5409,7 @@ void CClientGame::ResetMapInfo() // Hud g_pGame->GetHud()->SetComponentVisible(HUD_ALL, true); + // Disable area names as they are on load until camera unfades g_pGame->GetHud()->SetComponentVisible(HUD_AREA_NAME, false); g_pGame->GetHud()->SetComponentVisible(HUD_VITAL_STATS, false); @@ -5548,6 +5551,9 @@ void CClientGame::ResetMapInfo() // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); + // Reset Frozen Time + g_pGame->GetClock()->ResetTimeFrozen(); + // Close all garages CGarage* pGarage = NULL; CGarages* pGarages = g_pCore->GetGame()->GetGarages(); @@ -5590,7 +5596,7 @@ void CClientGame::ResetMapInfo() if (pPlayerInfo) pPlayerInfo->SetCamDrunkLevel(static_cast(0)); - RestreamWorld(true); + RestreamWorld(); ReinitMarkers(); } @@ -6813,7 +6819,7 @@ void CClientGame::RestreamModel(unsigned short usModel) m_pManager->GetVehicleManager()->RestreamVehicleUpgrades(usModel); } -void CClientGame::RestreamWorld(bool removeBigBuildings) +void CClientGame::RestreamWorld() { unsigned int numberOfFileIDs = g_pGame->GetCountOfAllFileIDs(); @@ -6826,9 +6832,7 @@ void CClientGame::RestreamWorld(bool removeBigBuildings) m_pManager->GetPedManager()->RestreamAllPeds(); m_pManager->GetPickupManager()->RestreamAllPickups(); - if (removeBigBuildings) - g_pGame->GetStreaming()->RemoveBigBuildings(); - + g_pGame->GetStreaming()->RemoveBigBuildings(); g_pGame->GetStreaming()->ReinitStreaming(); } diff --git a/Client/mods/deathmatch/logic/CClientGame.h b/Client/mods/deathmatch/logic/CClientGame.h index 9d884a69f9e..f2c290d94ca 100644 --- a/Client/mods/deathmatch/logic/CClientGame.h +++ b/Client/mods/deathmatch/logic/CClientGame.h @@ -441,7 +441,7 @@ class CClientGame bool TriggerBrowserRequestResultEvent(const std::unordered_set& newPages); void RestreamModel(unsigned short usModel); - void RestreamWorld(bool removeBigBuildings); + void RestreamWorld(); void ReinitMarkers(); void OnWindowFocusChange(bool state); diff --git a/Client/mods/deathmatch/logic/CClientIMG.cpp b/Client/mods/deathmatch/logic/CClientIMG.cpp index 61ff89fa4c1..5abd8b07e66 100644 --- a/Client/mods/deathmatch/logic/CClientIMG.cpp +++ b/Client/mods/deathmatch/logic/CClientIMG.cpp @@ -191,7 +191,7 @@ bool CClientIMG::StreamDisable() m_pImgManager->UpdateStreamerBufferSize(); - g_pClientGame->RestreamWorld(true); + g_pClientGame->RestreamWorld(); return true; } diff --git a/Client/mods/deathmatch/logic/CClientModel.cpp b/Client/mods/deathmatch/logic/CClientModel.cpp index 795bc08579c..2a9eeb0c8d3 100644 --- a/Client/mods/deathmatch/logic/CClientModel.cpp +++ b/Client/mods/deathmatch/logic/CClientModel.cpp @@ -84,6 +84,9 @@ bool CClientModel::Deallocate() if (!m_bAllocatedByUs) return false; + if (m_pParentResource) + m_pParentResource->GetResourceModelStreamer()->FullyReleaseModel(m_iModelID); + SetParentResource(nullptr); CModelInfo* pModelInfo = g_pGame->GetModelInfo(m_iModelID, true); diff --git a/Client/mods/deathmatch/logic/CClientVehicle.cpp b/Client/mods/deathmatch/logic/CClientVehicle.cpp index 42b2215adcf..b1b00cfba33 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.cpp +++ b/Client/mods/deathmatch/logic/CClientVehicle.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -5031,3 +5032,17 @@ void CClientVehicle::ResetWheelScale() m_bWheelScaleChanged = false; } + +CVector CClientVehicle::GetEntryPoint(std::uint32_t entryPointIndex) +{ + static const uint32_t lookup[4] = {10, 8, 11, 9}; + assert(entryPointIndex < 4); + const std::uint32_t saDoorIndex = lookup[entryPointIndex]; + + CVector entryPoint; + CVehicle* gameVehicle = GetGameVehicle(); + + g_pGame->GetCarEnterExit()->GetPositionToOpenCarDoor(entryPoint, gameVehicle, saDoorIndex); + + return entryPoint; +} diff --git a/Client/mods/deathmatch/logic/CClientVehicle.h b/Client/mods/deathmatch/logic/CClientVehicle.h index ff87ef00dc2..e2c83c618ef 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.h +++ b/Client/mods/deathmatch/logic/CClientVehicle.h @@ -543,6 +543,8 @@ class CClientVehicle : public CClientStreamElement bool SetDummyPosition(eVehicleDummies dummy, const CVector& position); bool ResetDummyPositions(); + CVector GetEntryPoint(std::uint32_t entryPointIndex); + protected: void ConvertComponentRotationBase(const SString& vehicleComponent, CVector& vecInOutRotation, EComponentBaseType inputBase, EComponentBaseType outputBase); void ConvertComponentPositionBase(const SString& vehicleComponent, CVector& vecInOutPosition, EComponentBaseType inputBase, EComponentBaseType outputBase); diff --git a/Client/mods/deathmatch/logic/CResource.cpp b/Client/mods/deathmatch/logic/CResource.cpp index c1b5fdf9e7b..dcf119ce468 100644 --- a/Client/mods/deathmatch/logic/CResource.cpp +++ b/Client/mods/deathmatch/logic/CResource.cpp @@ -94,6 +94,9 @@ CResource::CResource(unsigned short usNetID, const char* szResourceName, CClient CResource::~CResource() { + // Remove refrences from requested models + m_modelStreamer.ReleaseAll(); + // Deallocate all models that this resource allocated earlier g_pClientGame->GetManager()->GetModelManager()->DeallocateModelsAllocatedByResource(this); diff --git a/Client/mods/deathmatch/logic/CResource.h b/Client/mods/deathmatch/logic/CResource.h index 99df87fc3c3..8100d3fc79e 100644 --- a/Client/mods/deathmatch/logic/CResource.h +++ b/Client/mods/deathmatch/logic/CResource.h @@ -15,6 +15,7 @@ #include "CClientEntity.h" #include "CResourceConfigItem.h" #include "CResourceFile.h" +#include "CResourceModelStreamer.h" #include "CElementGroup.h" #include @@ -79,6 +80,8 @@ class CResource CClientEntity* GetResourceIFPRoot() { return m_pResourceIFPRoot; }; CClientEntity* GetResourceIMGRoot() { return m_pResourceIMGRoot; }; + CResourceModelStreamer* GetResourceModelStreamer() { return &m_modelStreamer; }; + // This is to delete all the elements created in this resource that are created locally in this client void DeleteClientChildren(); @@ -145,4 +148,6 @@ class CResource CFastHashSet m_exportedFunctions; CElementGroup* m_pDefaultElementGroup; // stores elements created by scripts in this resource std::list m_NoClientCacheScriptList; + + CResourceModelStreamer m_modelStreamer{}; }; diff --git a/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp b/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp new file mode 100644 index 00000000000..9c58219d8b3 --- /dev/null +++ b/Client/mods/deathmatch/logic/CResourceModelStreamer.cpp @@ -0,0 +1,122 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto + * LICENSE: See LICENSE in the top level directory + * FILE: mods/deathmatch/logic/CResourceModelStreamer.cpp + * PURPOSE: Resource model manager + * + * Multi Theft Auto is available from https://www.multitheftauto.com/ + * + *****************************************************************************/ + +#include "StdInc.h" + +#include "CResourceModelStreamer.h" +#include "CClientGame.h" +#include + +bool CResourceModelStreamer::RequestModel(std::uint16_t modelId, bool addRef, bool blocking) +{ + CModelInfo* model = g_pGame->GetModelInfo(modelId); + + if (!model) + return false; + + if (addRef) + { + std::uint16_t refsCount = ++m_requestedModels[modelId]; + if (refsCount == 1) + { + model->ModelAddRef(blocking ? EModelRequestType::BLOCKING : EModelRequestType::NON_BLOCKING, "CResourceModelStreamer::RequestModel With reference"); + return true; + } + return false; + } + else + { + if (model->IsLoaded()) + { + return false; + } + else + { + model->Request(blocking ? EModelRequestType::BLOCKING : EModelRequestType::NON_BLOCKING, "CResourceModelStreamer::RequestModel With out reference"); + return true; + } + } +} + +// Return true if model was unloaded +bool CResourceModelStreamer::ReleaseModel(std::uint16_t modelId, bool removeRef) +{ + if (removeRef) + { + auto refs = m_requestedModels.find(modelId); + if (refs == m_requestedModels.end()) + return false; + + std::uint16_t& refsCount = (*refs).second; + + if (refsCount == 0) + return false; + + refsCount--; + + if (refsCount != 0) + return false; + + CModelInfo* model = g_pGame->GetModelInfo(modelId); + + if (!model) + return false; + + // Hack + // This check will update models pending references + model->IsLoaded(); + + // This call can unload the model + model->RemoveRef(); + + return !model->IsLoaded(); + } + else + { + CModelInfo* model = g_pGame->GetModelInfo(modelId); + + if (!model) + return false; + + return model->UnloadUnused(); + } +} + +void CResourceModelStreamer::ReleaseAll() +{ + for (const auto &modelRefs : m_requestedModels) + { + if (modelRefs.second > 0) + { + CModelInfo* model = g_pGame->GetModelInfo(modelRefs.first); + model->RemoveRef(); + } + } + + m_requestedModels.clear(); +} + +void CResourceModelStreamer::FullyReleaseModel(std::uint16_t modelId) +{ + std::uint16_t &refsCount = m_requestedModels[modelId]; + + if (refsCount > 0) + { + refsCount = 0; + + CModelInfo* model = g_pGame->GetModelInfo(modelId); + + if (!model) + return; + + model->RemoveRef(); + } +} diff --git a/Client/mods/deathmatch/logic/CResourceModelStreamer.h b/Client/mods/deathmatch/logic/CResourceModelStreamer.h new file mode 100644 index 00000000000..fa72720b37e --- /dev/null +++ b/Client/mods/deathmatch/logic/CResourceModelStreamer.h @@ -0,0 +1,30 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto + * LICENSE: See LICENSE in the top level directory + * FILE: mods/deathmatch/logic/CResourceModelStreamer.h + * PURPOSE: Resource model manager + * + * Multi Theft Auto is available from https://www.multitheftauto.com/ + * + *****************************************************************************/ + +#pragma once + +#include + +class CResourceModelStreamer +{ +public: + CResourceModelStreamer() = default; + ~CResourceModelStreamer() = default; + + bool RequestModel(std::uint16_t modelId, bool addRef = false, bool blocking = false); + bool ReleaseModel(std::uint16_t modelId, bool removeRef = false); + + void ReleaseAll(); + void FullyReleaseModel(std::uint16_t modelId); + +private: + std::unordered_map m_requestedModels; +}; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 7aa792bf398..4fae81c6c2e 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -1465,13 +1465,8 @@ bool CStaticFunctionDefinitions::SetElementHealth(CClientEntity& Entity, float f // Grab the model CClientPed& Ped = static_cast(Entity); - // Limit to max health - float fMaxHealth = Ped.GetMaxHealth(); - if (fHealth > fMaxHealth) - fHealth = fMaxHealth; - // Set the new health - Ped.SetHealth(fHealth); + Ped.SetHealth(Clamp(0.0f, fHealth, Ped.GetMaxHealth())); return true; break; } diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 70902037048..8d2d3a891d6 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -896,6 +896,14 @@ ADD_ENUM(WEATHER_SANDSTORM, "Sandstorm") ADD_ENUM(WEATHER_RAINBOW, "Rainbow") IMPLEMENT_ENUM_END("world-property") +IMPLEMENT_ENUM_CLASS_BEGIN(eModelLoadState) +ADD_ENUM(eModelLoadState::LOADSTATE_NOT_LOADED, "unloaded") +ADD_ENUM(eModelLoadState::LOADSTATE_LOADED, "loaded") +ADD_ENUM(eModelLoadState::LOADSTATE_REQUESTED, "requested") +ADD_ENUM(eModelLoadState::LOADSTATE_READING, "reading") +ADD_ENUM(eModelLoadState::LOADSTATE_FINISHING, "finishing") +IMPLEMENT_ENUM_CLASS_END("model-load-state") + // // CResource from userdata // diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 9b93980d85e..1b75369d02d 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -13,6 +13,7 @@ #include #include #include +#include #include enum eLuaType @@ -85,6 +86,7 @@ DECLARE_ENUM_CLASS(eRenderStage); DECLARE_ENUM_CLASS(eFxParticleSystems); DECLARE_ENUM(ePools); DECLARE_ENUM(eWorldProperty); +DECLARE_ENUM_CLASS(eModelLoadState); class CRemoteCall; diff --git a/Client/mods/deathmatch/logic/lua/CLuaMain.h b/Client/mods/deathmatch/logic/lua/CLuaMain.h index abe2c96cf10..3839e5995e8 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaMain.h +++ b/Client/mods/deathmatch/logic/lua/CLuaMain.h @@ -59,7 +59,7 @@ class CLuaMain //: public CClient void ResetInstructionCount(); - class CResource* GetResource() { return m_pResource; } + class CResource* GetResource() const { return m_pResource; } CXMLFile* CreateXML(const char* szFilename, bool bUseIDs = true, bool bReadOnly = false); CXMLNode* ParseString(const char* strXmlContent); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp index 163aee9daf5..2d9c268dc36 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.cpp @@ -43,6 +43,7 @@ void CLuaCameraDefs::LoadFunctions() {"setCameraDrunkLevel", ArgumentParserWarn}, {"shakeCamera", ArgumentParser}, + {"resetShakeCamera", ArgumentParser}, }; // Add functions @@ -561,3 +562,9 @@ bool CLuaCameraDefs::ShakeCamera(float radius, std::optional x, std::opti return true; } + +bool CLuaCameraDefs::ResetShakeCamera() noexcept +{ + m_pManager->GetCamera()->ResetShakeCamera(); + return true; +} \ No newline at end of file diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h index b772e5183c2..b233d4e39c8 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaCameraDefs.h @@ -45,6 +45,7 @@ class CLuaCameraDefs : public CLuaDefs // Cam do funcs static bool ShakeCamera(float radius, std::optional x, std::optional y, std::optional z) noexcept; + static bool ResetShakeCamera() noexcept; // For OOP only LUA_DECLARE(OOP_GetCameraPosition); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 415227890f9..530b6e58a31 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -14,6 +14,7 @@ #include #include #include +#include "CLuaEngineDefs.h" //! Set the CModelCacheManager limits //! By passing `nil`/no value the original values are restored @@ -135,6 +136,9 @@ void CLuaEngineDefs::LoadFunctions() {"engineStreamingSetBufferSize", ArgumentParser}, {"engineStreamingGetBufferSize", ArgumentParser}, {"engineStreamingRestoreBufferSize", ArgumentParser}, + {"engineStreamingRequestModel", ArgumentParser}, + {"engineStreamingReleaseModel", ArgumentParser}, + {"engineStreamingGetModelLoadState", ArgumentParser}, {"engineRequestTXD", ArgumentParser}, {"engineFreeTXD", ArgumentParser}, {"engineGetPoolCapacity", ArgumentParser}, @@ -1046,12 +1050,14 @@ int CLuaEngineDefs::EngineGetModelLODDistance(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelLODDistance(lua_State* luaVM) { - // bool engineSetModelLODDistance ( int/string modelID, float distance ) + // bool engineSetModelLODDistance ( int/string modelID, float distance [, bool extendedLod = false ]) SString strModelId; float fDistance; + bool extendedLod; CScriptArgReader argStream(luaVM); argStream.ReadString(strModelId); argStream.ReadNumber(fDistance); + argStream.ReadBool(extendedLod, false); if (!argStream.HasErrors()) { @@ -1062,7 +1068,7 @@ int CLuaEngineDefs::EngineSetModelLODDistance(lua_State* luaVM) CModelInfo* pModelInfo = g_pGame->GetModelInfo(usModelID); if (pModelInfo && fDistance > 0.0f) { - pModelInfo->SetLODDistance(fDistance); + pModelInfo->SetLODDistance(fDistance, extendedLod); lua_pushboolean(luaVM, true); return 1; } @@ -2428,14 +2434,9 @@ bool CLuaEngineDefs::EngineResetModelFlags(uint uiModelID) return false; } -bool CLuaEngineDefs::EngineRestreamWorld(lua_State* const luaVM) +bool CLuaEngineDefs::EngineRestreamWorld() { - bool restreamLODs{}; - - CScriptArgReader argStream(luaVM); - argStream.ReadBool(restreamLODs, false); - - g_pClientGame->RestreamWorld(restreamLODs); + g_pClientGame->RestreamWorld(); return true; } @@ -2505,3 +2506,44 @@ bool CLuaEngineDefs::EngineSetPoolCapacity(lua_State* luaVM, ePools pool, size_t } return true; } + +bool CLuaEngineDefs::EngineStreamingRequestModel(lua_State* const luaVM, std::uint16_t modelId, std::optional addReference, std::optional blocking) +{ + // Grab the lua main and the resource belonging to this script + CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); + + CModelInfo* pModelInfo = g_pGame->GetModelInfo(modelId); + + if (modelId >= g_pGame->GetBaseIDforCOL() || !pModelInfo) + throw std::invalid_argument("Expected a valid model ID at argument 1"); + + // Get the resource we belong to + CResource* pResource = pLuaMain->GetResource(); + + return pResource->GetResourceModelStreamer()->RequestModel(modelId, addReference.value_or(false), blocking.value_or(false)); +} + +bool CLuaEngineDefs::EngineStreamingReleaseModel(lua_State* const luaVM, std::uint16_t modelId, std::optional removeReference) +{ + // Grab the lua main and the resource belonging to this script + CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); + + CModelInfo* pModelInfo = g_pGame->GetModelInfo(modelId); + + if (modelId >= g_pGame->GetBaseIDforCOL() || !pModelInfo) + throw std::invalid_argument("Expected a valid model ID at argument 1"); + + // Get the resource we belong to + CResource* pResource = pLuaMain->GetResource(); + + return pResource->GetResourceModelStreamer()->ReleaseModel(modelId, removeReference.value_or(false)); +} + +eModelLoadState CLuaEngineDefs::EngineStreamingGetModelLoadState(std::uint16_t modelId) +{ + const auto allCount = g_pGame->GetCountOfAllFileIDs(); + if (modelId >= g_pGame->GetCountOfAllFileIDs()) + throw std::invalid_argument("Expected a valid model ID at argument 1"); + + return g_pGame->GetStreaming()->GetStreamingInfo(modelId)->loadState; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index 5426c310151..8346f6ef0b9 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -76,7 +76,7 @@ class CLuaEngineDefs : public CLuaDefs static bool EngineRestoreTXDImage(uint uiModelID); static std::vector EngineImageGetFileList(CClientIMG* pImg); static std::string EngineImageGetFile(CClientIMG* pImg, std::variant file); - static bool EngineRestreamWorld(lua_State* const luaVM); + static bool EngineRestreamWorld(); static bool EngineSetModelVisibleTime(std::string strModelId, char cHourOn, char cHourOff); static std::variant> EngineGetModelVisibleTime(std::string strModelId); @@ -88,6 +88,10 @@ class CLuaEngineDefs : public CLuaDefs static uint EngineRequestTXD(lua_State* const luaVM, std::string strTxdName); static bool EngineFreeTXD(uint txdID); + static bool EngineStreamingRequestModel(lua_State* const luaVM, std::uint16_t modelId, std::optional addReference, std::optional blocking); + static bool EngineStreamingReleaseModel(lua_State* const luaVM, std::uint16_t modelId, std::optional removeReference); + static eModelLoadState EngineStreamingGetModelLoadState(std::uint16_t modelId); + private: static void AddEngineColClass(lua_State* luaVM); static void AddEngineTxdClass(lua_State* luaVM); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index b26b2163e42..b35bfee24b9 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -91,6 +91,7 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehicleWheelScale", ArgumentParser}, {"getVehicleModelWheelSize", ArgumentParser}, {"getVehicleWheelFrictionState", ArgumentParser}, + {"getVehicleEntryPoints", ArgumentParser}, // Vehicle set funcs {"createVehicle", CreateVehicle}, @@ -241,6 +242,7 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getWheelScale", "getVehicleWheelScale"); lua_classfunction(luaVM, "getModelWheelSize", "getVehicleModelWheelSize"); lua_classfunction(luaVM, "getWheelFrictionState", "getVehicleWheelFrictionState"); + lua_classfunction(luaVM, "getEntryPoints", ArgumentParser); lua_classfunction(luaVM, "setComponentVisible", "setVehicleComponentVisible"); lua_classfunction(luaVM, "setSirensOn", "setVehicleSirensOn"); @@ -2647,12 +2649,69 @@ int CLuaVehicleDefs::SetVehicleHandling(lua_State* luaVM) int CLuaVehicleDefs::GetVehicleHandling(lua_State* luaVM) { + // table getVehicleHandling ( element theVehicle, [ string property ] ) CClientVehicle* pVehicle = NULL; CScriptArgReader argStream(luaVM); argStream.ReadUserData(pVehicle); if (!argStream.HasErrors()) { + if (argStream.NextIsString()) + { + SString strProperty; + argStream.ReadString(strProperty); + + eHandlingProperty eProperty = g_pGame->GetHandlingManager()->GetPropertyEnumFromName(strProperty); + if (eProperty == HANDLING_MAX) + { + argStream.SetCustomError("Invalid property"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + return 1; + } + + float fValue = 0.0f; + CVector vecValue = CVector(0.0f, 0.0f, 0.0f); + SString strValue = ""; + unsigned int uiValue = 0; + unsigned char ucValue = 0; + if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, fValue)) + { + lua_pushnumber(luaVM, fValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, uiValue)) + { + lua_pushnumber(luaVM, uiValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, ucValue)) + { + lua_pushnumber(luaVM, ucValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, strValue)) + { + lua_pushstring(luaVM, strValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, vecValue)) + { + lua_createtable(luaVM, 3, 0); + lua_pushnumber(luaVM, 1); + lua_pushnumber(luaVM, vecValue.fX); + lua_settable(luaVM, -3); + lua_pushnumber(luaVM, 2); + lua_pushnumber(luaVM, vecValue.fY); + lua_settable(luaVM, -3); + lua_pushnumber(luaVM, 3); + lua_pushnumber(luaVM, vecValue.fZ); + lua_settable(luaVM, -3); + } + else + { + argStream.SetCustomError("Invalid property"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + } + return 1; + } CHandlingEntry* pEntry = pVehicle->GetHandlingData(); lua_newtable(luaVM); @@ -4174,3 +4233,43 @@ bool CLuaVehicleDefs::BlowVehicle(CClientEntity* entity, std::optional wit { return CStaticFunctionDefinitions::BlowVehicle(*entity, withExplosion); } + +std::variant, 4>> CLuaVehicleDefs::GetVehicleEntryPoints(CClientVehicle* vehicle) +{ + auto entryPointVectors = OOP_GetVehicleEntryPoints(vehicle); + + if (std::holds_alternative(entryPointVectors)) + { + return false; + } + + std::array, 4> entryPoints; + std::array vectorArray = std::get>(entryPointVectors); + + std::uint32_t i = 0; + for (auto& entryPoint : entryPoints) + { + entryPoints[i] = {vectorArray[i].fX, vectorArray[i].fY, vectorArray[i].fZ}; + i++; + } + + return entryPoints; +} + +std::variant> CLuaVehicleDefs::OOP_GetVehicleEntryPoints(CClientVehicle* vehicle) +{ + if (CClientVehicleManager::GetMaxPassengerCount(vehicle->GetModel()) == 255) + { + return false; + } + + std::array entryPoints; + + std::uint32_t i = 0; + for (auto& entryPoint : entryPoints) + { + entryPoint = vehicle->GetEntryPoint(i++); + } + + return entryPoints; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index cf73032a7f8..5c2e908d586 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -152,6 +152,9 @@ class CLuaVehicleDefs : public CLuaDefs static std::variant OOP_GetVehicleDummyPosition(CClientVehicle* vehicle, eVehicleDummies dummy); static bool ResetVehicleDummyPositions(CClientVehicle* vehicle); + static std::variant, 4>> GetVehicleEntryPoints(CClientVehicle* vehicle); + static std::variant> OOP_GetVehicleEntryPoints(CClientVehicle* vehicle); + LUA_DECLARE(SetVehicleModelExhaustFumesPosition); LUA_DECLARE_OOP(GetVehicleModelExhaustFumesPosition); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 529cb8174f5..ccb06c7a556 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include "lua/CLuaFunctionParser.h" void CLuaWorldDefs::LoadFunctions() @@ -103,7 +104,6 @@ void CLuaWorldDefs::LoadFunctions() {"removeWorldModel", RemoveWorldBuilding}, {"restoreAllWorldModels", RestoreWorldBuildings}, {"restoreWorldModel", RestoreWorldBuilding}, - {"setVolumetricShadowsEnabled", ArgumentParser}, // World create funcs {"createSWATRope", CreateSWATRope}, @@ -126,6 +126,7 @@ void CLuaWorldDefs::LoadFunctions() {"resetMoonSize", ResetMoonSize}, {"resetBlurLevel", ResetBlurLevel}, {"resetWorldProperty", ArgumentParserWarn}, + {"resetTimeFrozen", ArgumentParser}, // World check funcs {"areTrafficLightsLocked", AreTrafficLightsLocked}, @@ -133,6 +134,8 @@ void CLuaWorldDefs::LoadFunctions() {"isLineOfSightClear", IsLineOfSightClear}, {"isWorldSpecialPropertyEnabled", ArgumentParserWarn}, {"isGarageOpen", IsGarageOpen}, + {"isTimeFrozen", ArgumentParser}}; + {"isGarageOpen", IsGarageOpen}, {"isVolumetricShadowsEnabled", ArgumentParser}}; // Add functions @@ -2237,6 +2240,21 @@ bool CLuaWorldDefs::ResetWorldProperty(eWorldProperty property) return false; } +bool CLuaWorldDefs::SetTimeFrozen(bool value) noexcept +{ + return g_pGame->GetClock()->SetTimeFrozen(value); +} + +bool CLuaWorldDefs::IsTimeFrozen() noexcept +{ + return g_pGame->GetClock()->IsTimeFrozen(); +} + +bool CLuaWorldDefs::ResetTimeFrozen() noexcept +{ + return g_pGame->GetClock()->ResetTimeFrozen(); +} + bool CLuaWorldDefs::SetVolumetricShadowsEnabled(bool enable) noexcept { g_pGame->GetSettings()->SetVolumetricShadowsEnabled(enable); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index 547db464690..cab5880f1d5 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -130,6 +130,12 @@ class CLuaWorldDefs : public CLuaDefs static std::variant> GetWorldProperty(eWorldProperty property); static bool SetWorldProperty(eWorldProperty property, float arg1, std::optional arg2, std::optional arg3); static bool ResetWorldProperty(eWorldProperty property); + + static bool SetTimeFrozen(bool value) noexcept; + static bool IsTimeFrozen() noexcept; + static bool ResetTimeFrozen() noexcept; + }; + static bool SetVolumetricShadowsEnabled(bool enable) noexcept; static bool IsVolumetricShadowsEnabled() noexcept; }; diff --git a/Client/multiplayer_sa/CMultiplayerSA.cpp b/Client/multiplayer_sa/CMultiplayerSA.cpp index f87296a6108..28d5b1f551c 100644 --- a/Client/multiplayer_sa/CMultiplayerSA.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory - * FILE: multiplayer_sa/CMultiplayerSA.cpp + * FILE: Client/multiplayer_sa/CMultiplayerSA.cpp * PURPOSE: Multiplayer module class * - * Multi Theft Auto is available from http://www.multitheftauto.com/ + * Multi Theft Auto is available from https://multitheftauto.com/ * *****************************************************************************/ @@ -190,8 +190,6 @@ DWORD RETURN_CHandlingData_isNotRWD = 0x6A0493; DWORD RETURN_CHandlingData_isNotFWD = 0x6A04C3; // end of handling fix #define CALL_CAutomobile_ProcessEntityCollision 0x6AD053 -#define CALL_CBike_ProcessEntityCollision1 0x6BDF82 -#define CALL_CBike_ProcessEntityCollision2 0x6BE0D1 #define CALL_CMonsterTruck_ProcessEntityCollision 0x6C8B9E DWORD RETURN_ProcessEntityCollision = 0x4185C0; @@ -559,7 +557,6 @@ void HOOK_CObject_ProcessBreak(); void HOOK_CObject_ProcessCollision(); void HOOK_CGlass_WindowRespondsToCollision(); void HOOK_CGlass__BreakGlassPhysically(); -void HOOK_CGlass_WindowRespondsToExplosion(); // get attacker & object void HOOK_FxManager_c__DestroyFxSystem(); @@ -600,7 +597,6 @@ CMultiplayerSA::CMultiplayerSA() MemSetFast(&localStatsData, 0, sizeof(CStatsData)); localStatsData.StatTypesFloat[24] = 569.0f; // Max Health - m_bSuspensionEnabled = true; m_fAircraftMaxHeight = 800.0f; @@ -754,7 +750,6 @@ void CMultiplayerSA::InitHooks() HookInstall(HOOKPOS_CObject_ProcessCollision, (DWORD)HOOK_CObject_ProcessCollision, 10); HookInstall(HOOKPOS_CGlass_WindowRespondsToCollision, (DWORD)HOOK_CGlass_WindowRespondsToCollision, 8); HookInstall(HOOKPOS_CGlass__BreakGlassPhysically, (DWORD)HOOK_CGlass__BreakGlassPhysically, 5); - HookInstall(HOOKPOS_CGlass_WindowRespondsToExplosion, (DWORD)HOOK_CGlass_WindowRespondsToExplosion, 5); // Post-destruction hook for FxSystems HookInstall(HOOKPOS_FxManager_c__DestroyFxSystem, (DWORD)HOOK_FxManager_c__DestroyFxSystem, 5); @@ -1457,7 +1452,7 @@ void CMultiplayerSA::InitHooks() // Disable CStreaming::StreamVehiclesAndPeds_Always MemPut(0x40B650, 0xC3); - SetSuspensionEnabled(true); + UpdateVehicleSuspension(); // Aircraft Max Height checks are at 0x6D2614 and 0x6D2625 edit the check to use our own float. MemPut(0x6D2614, &m_fAircraftMaxHeight); @@ -6118,7 +6113,7 @@ bool CheckHasSuspensionChanged() CModelInfo* pModelInfo = pGameInterface->GetModelInfo(pVehicle->GetModelIndex()); if (pModelInfo && (pModelInfo->IsCar() || pModelInfo->IsMonsterTruck())) - return pVehicle->GetHandlingData()->HasSuspensionChanged(); + return true; else return false; } @@ -6183,26 +6178,10 @@ void _declspec(naked) HOOK_ProcessVehicleCollision() } } -void CMultiplayerSA::SetSuspensionEnabled(bool bEnabled) +void CMultiplayerSA::UpdateVehicleSuspension() noexcept { - // if ( bEnabled ) - { - // Hook Install - m_bSuspensionEnabled = true; - HookInstallCall(CALL_CAutomobile_ProcessEntityCollision, (DWORD)HOOK_ProcessVehicleCollision); - // HookInstallCall ( CALL_CBike_ProcessEntityCollision1, (DWORD)HOOK_ProcessVehicleCollision ); - // HookInstallCall ( CALL_CBike_ProcessEntityCollision2, (DWORD)HOOK_ProcessVehicleCollision ); - HookInstallCall(CALL_CMonsterTruck_ProcessEntityCollision, (DWORD)HOOK_ProcessVehicleCollision); - } - // else - // { - // // Hook Uninstall - // m_bSuspensionEnabled = false; - // HookInstallCall ( CALL_CAutomobile_ProcessEntityCollision, RETURN_ProcessEntityCollision ); - // HookInstallCall ( CALL_CBike_ProcessEntityCollision1, RETURN_ProcessEntityCollision ); - // HookInstallCall ( CALL_CBike_ProcessEntityCollision2, RETURN_ProcessEntityCollision ); - // HookInstallCall ( CALL_CMonsterTruck_ProcessEntityCollision, RETURN_ProcessEntityCollision ); - // } + HookInstallCall(CALL_CAutomobile_ProcessEntityCollision, reinterpret_cast(HOOK_ProcessVehicleCollision)); + HookInstallCall(CALL_CMonsterTruck_ProcessEntityCollision, reinterpret_cast(HOOK_ProcessVehicleCollision)); } // Variables @@ -6827,6 +6806,8 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision() pop eax } + pObjectAttacker = nullptr; + if (WindowRespondsToCollision_CalledFrom != CALL_FROM_CGlass_WindowRespondsToExplosion) { _asm @@ -6836,45 +6817,42 @@ void _declspec(naked) HOOK_CGlass_WindowRespondsToCollision() } // Get attacker for the glass break - switch (WindowRespondsToCollision_CalledFrom) + if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision || + WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplyCollision_2 || + WindowRespondsToCollision_CalledFrom == CALL_FROM_CPhysical_ApplySoftCollision) { - case CALL_FROM_CPhysical_ApplyCollision: - case CALL_FROM_CPhysical_ApplyCollision_2: - case CALL_FROM_CPhysical_ApplySoftCollision: + _asm { - _asm - { - mov pObjectAttacker, edi - } + mov pObjectAttacker, edi + } + } - break; + if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WasGlassHitByBullet) + { + _asm + { + mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact } - case CALL_FROM_CGlass_WasGlassHitByBullet: + + if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update { _asm { - mov pObjectAttacker, ebx // WasGlassHitByBullet called from CWeapon::DoBulletImpact - } - - if (!pObjectAttacker || (pObjectAttacker && !pObjectAttacker->m_pRwObject)) // WasGlassHitByBullet called from CBulletInfo::Update - { - _asm - { - push ecx - mov ecx, [edi] - mov pObjectAttacker, ecx - pop ecx - } + push ecx + mov ecx, [edi] + mov pObjectAttacker, ecx + pop ecx } - - break; } - case CALL_FROM_CGlass_WindowRespondsToExplosion: + } + + if (WindowRespondsToCollision_CalledFrom == CALL_FROM_CGlass_WindowRespondsToExplosion) + { + _asm { - break; + mov pDamagedObject, edx + mov pObjectAttacker, ebp } - default: - pObjectAttacker = nullptr; } if (pObjectAttacker && !pObjectAttacker->m_pRwObject) // Still wrong? @@ -6936,17 +6914,6 @@ void _declspec(naked) HOOK_CGlass__BreakGlassPhysically() } } -void _declspec(naked) HOOK_CGlass_WindowRespondsToExplosion() -{ - _asm { - push 1 - sub esp, 0Ch - mov pDamagedObject, edx - mov pObjectAttacker, ebp - jmp RETURN_CGlass_WindowRespondsToExplosion - } -} - void* pFxSystemToBeDestroyed; void FxManager_c__DestroyFxSystem() { diff --git a/Client/multiplayer_sa/CMultiplayerSA.h b/Client/multiplayer_sa/CMultiplayerSA.h index 65a7afb715f..f725f37b639 100644 --- a/Client/multiplayer_sa/CMultiplayerSA.h +++ b/Client/multiplayer_sa/CMultiplayerSA.h @@ -310,8 +310,7 @@ class CMultiplayerSA : public CMultiplayer CLimits* GetLimits() { return &m_limits; } - void SetSuspensionEnabled(bool bEnabled); - bool IsSuspensionEnabled() { return m_bSuspensionEnabled; }; + void UpdateVehicleSuspension() noexcept; virtual void FlushClothesCache(); virtual void SetFastClothesLoading(EFastClothesLoading fastClothesLoading); @@ -362,7 +361,6 @@ class CMultiplayerSA : public CMultiplayer bool m_bBadDrivebyHitboxesDisabled; private: - bool m_bSuspensionEnabled; std::vector m_PlayerImgCache; EFastClothesLoading m_FastClothesLoading; CLimitsSA m_limits; diff --git a/Client/sdk/core/CCommandsInterface.h b/Client/sdk/core/CCommandsInterface.h index 849e3a07da2..2820bec69b4 100644 --- a/Client/sdk/core/CCommandsInterface.h +++ b/Client/sdk/core/CCommandsInterface.h @@ -14,7 +14,7 @@ #include typedef void (*PFNCOMMANDHANDLER)(const char*); -typedef bool (*pfnExecuteCommandHandler)(const char*, const char*, bool, bool, bool); +typedef bool (*pfnExecuteCommandHandler)(const char*, const char*, bool, bool, bool, bool); typedef void (*PFNCOMMAND)(const char*); diff --git a/Client/sdk/game/CCamera.h b/Client/sdk/game/CCamera.h index 5990966d908..7dc104e3c09 100644 --- a/Client/sdk/game/CCamera.h +++ b/Client/sdk/game/CCamera.h @@ -144,5 +144,6 @@ class CCamera virtual void SetShakeForce(float fShakeForce) = 0; virtual float GetShakeForce() = 0; - virtual void ShakeCamera(float radius, float x, float y, float z) noexcept = 0; + virtual void ShakeCamera(float radius, float x, float y, float z) noexcept = 0; + virtual void ResetShakeCamera() noexcept = 0; }; diff --git a/Client/sdk/game/CCarEnterExit.h b/Client/sdk/game/CCarEnterExit.h index 741758750c1..e88a9b6e1ca 100644 --- a/Client/sdk/game/CCarEnterExit.h +++ b/Client/sdk/game/CCarEnterExit.h @@ -23,4 +23,6 @@ class CCarEnterExit bool bCheckIfRoomToGetIn) = 0; virtual int ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle) = 0; virtual bool IsRoomForPedToLeaveCar(CVehicle* pVehicle, int iDoor, CVector* pUnknown = 0) = 0; + + virtual void GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept = 0; }; diff --git a/Client/sdk/game/CClock.h b/Client/sdk/game/CClock.h index 2348564c8af..6f795f59199 100644 --- a/Client/sdk/game/CClock.h +++ b/Client/sdk/game/CClock.h @@ -16,4 +16,8 @@ class CClock public: virtual void Set(BYTE bHour, BYTE bMinute) = 0; virtual void Get(BYTE* bHour, BYTE* bMinute) = 0; + + virtual bool SetTimeFrozen(bool value) noexcept = 0; + virtual bool IsTimeFrozen() const noexcept = 0; + virtual bool ResetTimeFrozen() noexcept = 0; }; diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index 215141ee23a..a1d792813e1 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -268,7 +268,7 @@ class __declspec(novtable) CGame virtual int32_t GetBaseIDforSCM() = 0; virtual int32_t GetCountOfAllFileIDs() = 0; - virtual void RemoveAllBuildings(bool clearBuildingRemoval = true) = 0; + virtual void RemoveAllBuildings() = 0; virtual void RestoreGameBuildings() = 0; virtual bool SetBuildingPoolSize(size_t size) = 0; diff --git a/Client/sdk/game/CHandlingEntry.h b/Client/sdk/game/CHandlingEntry.h index 356741e6d8c..a2da6167c98 100644 --- a/Client/sdk/game/CHandlingEntry.h +++ b/Client/sdk/game/CHandlingEntry.h @@ -1,11 +1,11 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory - * FILE: sdk/game/CHandlingEntry.h + * FILE: Client/sdk/game/CHandlingEntry.h * PURPOSE: Vehicle handling entry interface * - * Multi Theft Auto is available from http://www.multitheftauto.com/ + * Multi Theft Auto is available from https://multitheftauto.com/ * *****************************************************************************/ @@ -91,7 +91,7 @@ class CHandlingEntry virtual ~CHandlingEntry(){}; // Use this to copy data from an another handling class to this - virtual void Assign(const CHandlingEntry* pData) = 0; + virtual void Assign(const CHandlingEntry* pEntry) = 0; // Get functions virtual float GetMass() const = 0; @@ -137,8 +137,7 @@ class CHandlingEntry virtual eLightType GetTailLight() const = 0; virtual unsigned char GetAnimGroup() const = 0; - virtual eVehicleTypes GetModel() const = 0; - virtual bool HasSuspensionChanged() const = 0; + virtual std::uint16_t GetVehicleID() const = 0; // Set functions virtual void SetMass(float fMass) = 0; @@ -165,13 +164,13 @@ class CHandlingEntry virtual void SetTractionLoss(float fTractionLoss) = 0; virtual void SetTractionBias(float fTractionBias) = 0; - virtual void SetSuspensionForceLevel(float fForce) = 0; - virtual void SetSuspensionDamping(float fDamping) = 0; - virtual void SetSuspensionHighSpeedDamping(float fDamping) = 0; - virtual void SetSuspensionUpperLimit(float fUpperLimit) = 0; - virtual void SetSuspensionLowerLimit(float fLowerLimit) = 0; - virtual void SetSuspensionFrontRearBias(float fBias) = 0; - virtual void SetSuspensionAntiDiveMultiplier(float fAntiDive) = 0; + virtual void SetSuspensionForceLevel(float fForce) noexcept = 0; + virtual void SetSuspensionDamping(float fDamping) noexcept = 0; + virtual void SetSuspensionHighSpeedDamping(float fDamping) noexcept = 0; + virtual void SetSuspensionUpperLimit(float fUpperLimit) noexcept = 0; + virtual void SetSuspensionLowerLimit(float fLowerLimit) noexcept = 0; + virtual void SetSuspensionFrontRearBias(float fBias) noexcept = 0; + virtual void SetSuspensionAntiDiveMultiplier(float fAntiDive) noexcept = 0; virtual void SetCollisionDamageMultiplier(float fMultiplier) = 0; @@ -184,9 +183,7 @@ class CHandlingEntry virtual void SetTailLight(eLightType Style) = 0; virtual void SetAnimGroup(unsigned char ucGroup) = 0; - virtual void SetSuspensionChanged(bool bChanged) = 0; - // Call this every time you're done changing something. This will recalculate // all transmission/handling values according to the new values. - virtual void Recalculate(unsigned short usModel) = 0; + virtual void Recalculate() = 0; }; diff --git a/Client/sdk/game/CHandlingManager.h b/Client/sdk/game/CHandlingManager.h index d57959b3def..25d706220e1 100644 --- a/Client/sdk/game/CHandlingManager.h +++ b/Client/sdk/game/CHandlingManager.h @@ -27,12 +27,12 @@ class CHandlingManager virtual CBoatHandlingEntry* CreateBoatHandlingData() = 0; virtual CBikeHandlingEntry* CreateBikeHandlingData() = 0; - virtual const CHandlingEntry* GetOriginalHandlingData(enum eVehicleTypes eModel) = 0; - virtual const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(enum eVehicleTypes eModel) = 0; - virtual const CBoatHandlingEntry* GetOriginalBoatHandlingData(enum eVehicleTypes eModel) = 0; - virtual const CBikeHandlingEntry* GetOriginalBikeHandlingData(enum eVehicleTypes eModel) = 0; + virtual const CHandlingEntry* GetOriginalHandlingData(enum eVehicleTypes eModel) const = 0; + virtual const CFlyingHandlingEntry* GetOriginalFlyingHandlingData(enum eVehicleTypes eModel) const = 0; + virtual const CBoatHandlingEntry* GetOriginalBoatHandlingData(enum eVehicleTypes eModel) const = 0; + virtual const CBikeHandlingEntry* GetOriginalBikeHandlingData(enum eVehicleTypes eModel) const = 0; - virtual eHandlingProperty GetPropertyEnumFromName(const std::string& strName) = 0; - virtual void RemoveChangedVehicle() = 0; - virtual void CheckSuspensionChanges(CHandlingEntry* pEntry) = 0; + virtual eHandlingProperty GetPropertyEnumFromName(const std::string& strName) const = 0; + + virtual void CheckSuspensionChanges(CHandlingEntry* pEntry) noexcept = 0; }; diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index 440f079be67..af9fa1bdf3f 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -179,6 +179,7 @@ class CModelInfo virtual void RemoveRef(bool bRemoveExtraGTARef = false) = 0; virtual int GetRefCount() = 0; virtual bool ForceUnload() = 0; + virtual bool UnloadUnused() = 0; virtual void DeallocateModel() = 0; virtual float GetDistanceFromCentreOfMassToBaseOfModel() = 0; diff --git a/Client/sdk/game/CStreaming.h b/Client/sdk/game/CStreaming.h index c8ff17c5581..6eb47f13a65 100644 --- a/Client/sdk/game/CStreaming.h +++ b/Client/sdk/game/CStreaming.h @@ -16,6 +16,27 @@ #define INVALID_ARCHIVE_ID 0xFF #define INVALID_STREAM_ID 0xFF +enum class eModelLoadState : std::uint32_t +{ + // Model isn't loaded + LOADSTATE_NOT_LOADED = 0, + + // Model is loaded + LOADSTATE_LOADED = 1, + + // Model in request list, but not yet in loading channel (TODO: Verify this) + LOADSTATE_REQUESTED = 2, + + // Model is being read + LOADSTATE_READING = 3, + + // If the model is a `big` one this state is used to indicate + // that the model's first half has been loaded and is yet to be + // finished by loading the second half. + // When it has been loaded the state is set to `LOADED` + LOADSTATE_FINISHING = 4 +}; + struct CStreamingInfo { uint16_t prevId = (uint16_t)-1; @@ -25,7 +46,7 @@ struct CStreamingInfo uint8_t archiveId = 0u; uint32_t offsetInBlocks = 0u; uint32_t sizeInBlocks = 0u; - uint32_t loadState = 0u; + eModelLoadState loadState = eModelLoadState::LOADSTATE_NOT_LOADED; }; static_assert(sizeof(CStreamingInfo) == 0x14, "Invalid size for CStreamingInfo"); diff --git a/Client/sdk/multiplayer/CMultiplayer.h b/Client/sdk/multiplayer/CMultiplayer.h index 3d977e3f137..c8b043a37fa 100644 --- a/Client/sdk/multiplayer/CMultiplayer.h +++ b/Client/sdk/multiplayer/CMultiplayer.h @@ -427,8 +427,7 @@ class CMultiplayer virtual CLimits* GetLimits() = 0; - virtual bool IsSuspensionEnabled() = 0; - virtual void SetSuspensionEnabled(bool bEnabled) = 0; + virtual void UpdateVehicleSuspension() noexcept = 0; virtual void FlushClothesCache() = 0; virtual void SetFastClothesLoading(EFastClothesLoading fastClothesLoading) = 0; diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index c7ce99d91ea..ab24fe0d66c 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -1654,27 +1654,15 @@ bool CStaticFunctionDefinitions::SetElementHealth(CElement* pElement, float fHea case CElement::PLAYER: { CPed* pPed = static_cast(pElement); - if (pPed->IsSpawned()) - { - // Limit their max health to what the stat says - float fMaxHealth = pPed->GetMaxHealth(); - if (fHealth > fMaxHealth) - fHealth = fMaxHealth; + if (!pPed->IsSpawned()) + return false; - // Do not set the health below zero - if (fHealth < 0.0f) - fHealth = 0.0f; + fHealth = Clamp(0.0f, fHealth, pPed->GetMaxHealth()); + pPed->SetHealth(fHealth); - // This makes sure the health is set to what will get reported - unsigned char ucHealth = static_cast(fHealth * 1.25f); - fHealth = static_cast(ucHealth) / 1.25f; - pPed->SetHealth(fHealth); + if (pPed->IsDead() && fHealth > 0.0f) + pPed->SetIsDead(false); - if (pPed->IsDead() && fHealth > 0.0f) - pPed->SetIsDead(false); - } - else - return false; break; } case CElement::VEHICLE: diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp index 9152e4dabe0..4a80b4acfdc 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaHandlingDefs.cpp @@ -390,7 +390,7 @@ int CLuaHandlingDefs::SetModelHandling(lua_State* luaVM) int CLuaHandlingDefs::GetVehicleHandling(lua_State* luaVM) { - // table getVehicleHandling ( element theVehicle ) + // table getVehicleHandling ( element theVehicle, [ string property ] ) CVehicle* pVehicle; CScriptArgReader argStream(luaVM); @@ -398,6 +398,62 @@ int CLuaHandlingDefs::GetVehicleHandling(lua_State* luaVM) if (!argStream.HasErrors()) { + if (argStream.NextIsString()) + { + SString strProperty; + argStream.ReadString(strProperty); + + eHandlingProperty eProperty = m_pHandlingManager->GetPropertyEnumFromName(strProperty); + if (eProperty == HANDLING_MAX) + { + argStream.SetCustomError("Invalid property"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + return 1; + } + + float fValue = 0.0f; + CVector vecValue = CVector(0.0f, 0.0f, 0.0f); + SString strValue = ""; + unsigned int uiValue = 0; + unsigned char ucValue = 0; + if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, fValue)) + { + lua_pushnumber(luaVM, fValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, uiValue)) + { + lua_pushnumber(luaVM, uiValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, ucValue)) + { + lua_pushnumber(luaVM, ucValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, strValue)) + { + lua_pushstring(luaVM, strValue); + } + else if (CStaticFunctionDefinitions::GetVehicleHandling(pVehicle, eProperty, vecValue)) + { + lua_createtable(luaVM, 3, 0); + lua_pushnumber(luaVM, 1); + lua_pushnumber(luaVM, vecValue.fX); + lua_settable(luaVM, -3); + lua_pushnumber(luaVM, 2); + lua_pushnumber(luaVM, vecValue.fY); + lua_settable(luaVM, -3); + lua_pushnumber(luaVM, 3); + lua_pushnumber(luaVM, vecValue.fZ); + lua_settable(luaVM, -3); + } + else + { + argStream.SetCustomError("Invalid property"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + } + return 1; + } CHandlingEntry* pEntry = pVehicle->GetHandlingData(); lua_newtable(luaVM); 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 b9999c834e6..986344b426f 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-07-27 11:57+0000\n" +"POT-Creation-Date: 2024-08-14 19:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,3267 +18,3267 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: Client/loader/Install.cpp:265 -msgid "Unknown" +#: Client/mods/deathmatch/CClient.cpp:36 +msgid "This version has expired." msgstr "" -#: Client/loader/Install.cpp:272 -#, c-format -msgid "" -"The file '%s' is currently locked by %zu processes.\n" -"\n" -"Do you want to terminate the following processes and continue updating?\n" -"\n" -"%s" +#: Client/mods/deathmatch/CClient.cpp:56 +msgid "disconnect from the game" msgstr "" -#: Client/loader/Install.cpp:479 -#, c-format -msgid "" -"Your installation may be corrupt now.\n" -"\n" -"%zu out of %zu files could not be restored from the backup.\n" -"\n" -"You should reinstall Multi Theft Auto from www.multitheftauto.com\n" -"or try running the update with administrator rights." +#: Client/mods/deathmatch/CClient.cpp:57 +msgid "shows the nametags" msgstr "" -#: Client/loader/Install.cpp:852 Client/loader/Dialogs.cpp:901 -msgid "Installing update..." +#: Client/mods/deathmatch/CClient.cpp:58 +msgid "shows the chatbox" msgstr "" -#: Client/loader/Install.cpp:934 Client/loader/Dialogs.cpp:909 -msgid "Extracting files..." +#: Client/mods/deathmatch/CClient.cpp:59 +msgid "shows the network statistics" msgstr "" -#. ///////////////////////////////////////////////////////////////////////// -#. -#. Dialog strings -#. -#. -#. ///////////////////////////////////////////////////////////////////////// -#: Client/loader/Dialogs.cpp:131 Client/gui/CGUIMessageBox_Impl.cpp:72 -#: 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:1200 -#: Client/core/CSettings.cpp:1389 Client/core/CSettings.cpp:1413 -#: Client/core/CSettings.cpp:4489 Client/core/CSettings.cpp:4563 -#: Client/core/CSettings.cpp:4593 Client/core/CSettings.cpp:4642 -#: Client/core/ServerBrowser/CServerInfo.cpp:479 -msgid "Yes" +#. Key commands (registered as 'mod commands', can be disabled) +#: Client/mods/deathmatch/CClient.cpp:62 +msgid "open the chat input" 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:1199 Client/core/CSettings.cpp:1388 -#: Client/core/CSettings.cpp:1412 Client/core/CSettings.cpp:4488 -#: Client/core/CSettings.cpp:4562 Client/core/CSettings.cpp:4592 -#: Client/core/CSettings.cpp:4641 Client/core/ServerBrowser/CServerInfo.cpp:479 -msgid "No" +#: Client/mods/deathmatch/CClient.cpp:63 +msgid "transmits voice to other players" msgstr "" -#. Create buttons -#. OK button -#: Client/loader/Dialogs.cpp:133 Client/gui/CGUIMessageBox_Impl.cpp:64 -#: Client/core/CVersionUpdater.cpp:1607 Client/core/CVersionUpdater.cpp:1823 -#: Client/core/CVersionUpdater.cpp:1916 Client/core/CVersionUpdater.cpp:1938 -#: 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:4785 -msgid "OK" +#: Client/mods/deathmatch/CClient.cpp:64 +msgid "enters a car as passenger" msgstr "" -#: Client/loader/Dialogs.cpp:134 -msgid "Quit" +#: Client/mods/deathmatch/CClient.cpp:65 +msgid "next radio channel" msgstr "" -#: Client/loader/Dialogs.cpp:135 -#: Client/core/ServerBrowser/CServerBrowser.cpp:556 -msgid "Help" +#: Client/mods/deathmatch/CClient.cpp:66 +msgid "previous radio channel" msgstr "" -#. Cancel button -#: Client/loader/Dialogs.cpp:136 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 -#: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/core/CVersionUpdater.cpp:1790 -#: Client/core/CVersionUpdater.cpp:1806 Client/core/CVersionUpdater.cpp:1841 -#: Client/core/CSettings.cpp:132 Client/core/CSettings.cpp:4784 -msgid "Cancel" +#: Client/mods/deathmatch/CClient.cpp:67 +msgid "enables the radar view" msgstr "" -#: Client/loader/Dialogs.cpp:151 -msgid "MTA: San Andreas has encountered a problem" +#: Client/mods/deathmatch/CClient.cpp:68 +msgid "zooms the radar in" msgstr "" -#: Client/loader/Dialogs.cpp:152 -msgid "Crash information" +#: Client/mods/deathmatch/CClient.cpp:69 +msgid "zooms the radar out" msgstr "" -#: Client/loader/Dialogs.cpp:153 -msgid "" -"Tick the check box to send this crash info to MTA devs using the 'internet'" +#: Client/mods/deathmatch/CClient.cpp:70 +msgid "moves the radar north" msgstr "" -#: Client/loader/Dialogs.cpp:154 -msgid "Doing so will increase the chance of this crash being fixed." +#: Client/mods/deathmatch/CClient.cpp:71 +msgid "moves the radar south" msgstr "" -#: Client/loader/Dialogs.cpp:155 -msgid "Do you want to restart MTA: San Andreas ?" +#: Client/mods/deathmatch/CClient.cpp:72 +msgid "moves the radar east" msgstr "" -#: Client/loader/Dialogs.cpp:162 -msgid "MTA: San Andreas - Warning" +#: Client/mods/deathmatch/CClient.cpp:73 +msgid "moves the radar west" msgstr "" -#: Client/loader/Dialogs.cpp:163 -msgid "" -"Your Grand Theft Auto: San Andreas install directory contains these files:" +#: Client/mods/deathmatch/CClient.cpp:74 +msgid "attaches the radar" msgstr "" -#: Client/loader/Dialogs.cpp:165 -msgid "" -"These files are not required and may interfere with the graphical features " -"in this version of MTA:SA.\n" -"\n" -"It is recommended that you remove or rename these files." +#: Client/mods/deathmatch/CClient.cpp:75 +msgid "reduces radar opacity" msgstr "" -#: Client/loader/Dialogs.cpp:167 -msgid "Keep these files, but also show this warning on next start" +#: Client/mods/deathmatch/CClient.cpp:76 +msgid "increases radar opacity" msgstr "" -#: Client/loader/Dialogs.cpp:168 -msgid "Do not remind me about these files again" +#: Client/mods/deathmatch/CClient.cpp:77 +msgid "toggles radar help text" msgstr "" -#: Client/loader/Dialogs.cpp:169 -msgid "Rename these files from *.dll to *.dll.bak" +#: Client/mods/deathmatch/CClient.cpp:78 +msgid "sends a message to the targetted player" msgstr "" -#: Client/loader/Dialogs.cpp:170 -msgid "Show me these files" +#: Client/mods/deathmatch/CClient.cpp:79 +msgid "changes to the next weapon whilst in a vehicle" msgstr "" -#: Client/loader/Dialogs.cpp:171 -msgid "Play MTA:SA" +#: Client/mods/deathmatch/CClient.cpp:80 +msgid "changes to the previous weapon whilst in a vehicle" msgstr "" -#: Client/loader/Dialogs.cpp:177 -msgid "MTA: San Andreas - Confusing options" +#: Client/mods/deathmatch/CClient.cpp:81 +msgid "outputs info about the current server" msgstr "" -#: Client/loader/Dialogs.cpp:178 -msgid "NVidia Optimus detected!" +#. ACHTUNG" Should this be handled by the atomic cvar setter? +#: Client/mods/deathmatch/CClient.cpp:84 +msgid "defines the scale multiplier of all text-displays" msgstr "" -#: Client/loader/Dialogs.cpp:179 -msgid "Try each option and see what works:" +#. Development mode +#: Client/mods/deathmatch/CClient.cpp:91 +msgid "(Development mode) shows the colshapes" msgstr "" -#: Client/loader/Dialogs.cpp:180 -msgid "A - Standard NVidia" +#: Client/mods/deathmatch/CClient.cpp:92 +msgid "(Development mode) prints world sound ids into the debug window" msgstr "" -#: Client/loader/Dialogs.cpp:181 -msgid "B - Alternate NVidia" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:37 +msgid "HOST GAME" msgstr "" -#: Client/loader/Dialogs.cpp:182 -msgid "C - Standard Intel" +#. * +#. * Webbrowser tab +#. * +#: Client/mods/deathmatch/logic/CLocalServer.cpp:51 +#: Client/core/CSettings.cpp:442 Client/core/CSettings.cpp:630 +#: Client/core/CSettings.cpp:904 Client/core/CSettings.cpp:2018 +msgid "General" msgstr "" -#: Client/loader/Dialogs.cpp:183 -msgid "D - Alternate Intel" +#. m_pTabs->CreateTab ( "Gamemode" ); +#: Client/mods/deathmatch/logic/CLocalServer.cpp:53 +msgid "Resources" msgstr "" -#: Client/loader/Dialogs.cpp:184 -msgid "If you get desperate, this might help:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:55 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:57 +msgid "Server name:" msgstr "" -#: Client/loader/Dialogs.cpp:185 -msgid "If you have already selected an option that works, this might help:" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:64 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:66 +msgid "Password:" msgstr "" -#: Client/loader/Dialogs.cpp:186 -msgid "Force windowed mode" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:73 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:75 +msgid "Max players:" msgstr "" -#: Client/loader/Dialogs.cpp:187 -msgid "Don't show again" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:82 +#: Client/mods/deathmatch/logic/CLocalServer.cpp:84 +msgid "Broadcast:" msgstr "" -#: Client/loader/Dialogs.cpp:194 Client/game_sa/CSettingsSA.cpp:831 -msgid "MTA: San Andreas" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:86 +msgid "LAN" msgstr "" -#: Client/loader/Dialogs.cpp:195 -msgid "Warning: Could not detect anti-virus product" +#. Create the tabs +#: Client/mods/deathmatch/logic/CLocalServer.cpp:90 +#: Client/core/ServerBrowser/CServerBrowser.cpp:133 +msgid "Internet" msgstr "" -#: Client/loader/Dialogs.cpp:197 -msgid "" -"MTA could not detect an anti-virus on your PC.\n" -"\n" -"Viruses interfere with MTA and degrade your gameplay experience.\n" -"\n" -"Press 'Help' for more information." +#: Client/mods/deathmatch/logic/CLocalServer.cpp:99 +msgid "Selected" msgstr "" -#: Client/loader/Dialogs.cpp:200 -msgid "I have already installed an anti-virus" +#: Client/mods/deathmatch/logic/CLocalServer.cpp:116 +msgid "All" msgstr "" -#: Client/loader/Dialogs.cpp:202 -msgid "" -"I will not install an anti-virus.\n" -"I want my PC to lag and be part of a botnet." +#: Client/mods/deathmatch/logic/CLocalServer.cpp:118 +msgid "Start" msgstr "" -#: Client/loader/Dialogs.cpp:890 Client/loader/Utils.cpp:534 -msgid "Searching for Grand Theft Auto San Andreas" +#. Cancel button +#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 +#: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/core/CSettings.cpp:132 +#: Client/core/CSettings.cpp:4784 Client/core/CVersionUpdater.cpp:1790 +#: Client/core/CVersionUpdater.cpp:1806 Client/core/CVersionUpdater.cpp:1841 +#: Client/loader/Dialogs.cpp:136 +msgid "Cancel" msgstr "" -#: Client/loader/Dialogs.cpp:893 Client/loader/Utils.cpp:536 -msgid "Please start Grand Theft Auto San Andreas" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:506 +msgid "Disconnected: Invalid nickname" msgstr "" -#: Client/loader/Dialogs.cpp:914 Client/loader/Utils.cpp:1394 -msgid "Copying files..." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 +msgid "Disconnect from server" msgstr "" -#: Client/loader/Dialogs.cpp:919 Client/loader/Utils.cpp:1454 -msgid "Copy finished early. Everything OK." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 +#, c-format +msgid "" +"Disconnected: Serial is banned.\n" +"Reason: %s" msgstr "" -#: Client/loader/Dialogs.cpp:924 Client/loader/Utils.cpp:1460 -msgid "Finishing..." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 +#, c-format +msgid "" +"Disconnected: You are banned.\n" +"Reason: %s" msgstr "" -#: Client/loader/Dialogs.cpp:928 Client/loader/Utils.cpp:1462 -msgid "Done!" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 +#, c-format +msgid "" +"Disconnected: Account is banned.\n" +"Reason: %s" msgstr "" -#: Client/loader/MainFunctions.cpp:248 -msgid "" -"Trouble restarting MTA:SA\n" -"\n" -"If the problem persists, open Task Manager and\n" -"stop the 'gta_sa.exe' and 'Multi Theft Auto.exe' processes\n" -"\n" -"\n" -"Try to launch MTA:SA again?" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 +msgid "Disconnected: Version mismatch" msgstr "" -#. Show timeout message and disconnect -#. Display an error, reset the error status and exit -#. Show a message that the connection timed out and abort -#. Show failed message and abort the attempt -#: Client/loader/MainFunctions.cpp:252 Client/loader/MainFunctions.cpp:267 -#: Client/loader/MainFunctions.cpp:269 Client/loader/MainFunctions.cpp:846 -#: Client/loader/CInstallManager.cpp:552 Client/loader/CInstallManager.cpp:561 -#: Client/mods/deathmatch/logic/CClientGame.cpp:635 -#: Client/mods/deathmatch/logic/CClientGame.cpp:709 -#: Client/mods/deathmatch/logic/CClientGame.cpp:733 -#: Client/mods/deathmatch/logic/CClientGame.cpp:755 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1168 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1248 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1258 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1327 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1364 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1413 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1425 -#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:145 -#: Client/core/CCore.cpp:1275 Client/core/CCore.cpp:1288 -#: Client/core/CGUI.cpp:87 Client/core/CConnectManager.cpp:80 -#: Client/core/CConnectManager.cpp:111 Client/core/CConnectManager.cpp:127 -#: Client/core/CConnectManager.cpp:263 Client/core/CConnectManager.cpp:321 -#: Client/core/CConnectManager.cpp:404 Client/core/CConnectManager.cpp:411 -#: Client/core/CConnectManager.cpp:421 Client/core/CSettings.cpp:2941 -#: Client/core/CSettings.cpp:4166 Client/core/CSettings.cpp:4194 -#: Client/core/CSettings.cpp:4764 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 -#: Client/core/DXHook/CDirect3DHook9.cpp:127 -#: Shared/mods/deathmatch/logic/CLatentTransferManager.cpp:378 -#: Shared/sdk/SharedUtil.Misc.hpp:137 -msgid "Error" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 +msgid "Disconnected: Join flood. Please wait a minute, then reconnect." msgstr "" -#: Client/loader/MainFunctions.cpp:266 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 +#, c-format msgid "" -"Another instance of MTA is already running.\n" -"\n" -"If this problem persists, please restart your computer" +"Disconnected: Server from different branch.\n" +"Information: %s" msgstr "" -#: Client/loader/MainFunctions.cpp:269 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 +#, c-format msgid "" -"Another instance of MTA is already running.\n" -"\n" -"Do you want to terminate it?" +"Disconnected: Bad version.\n" +"Information: %s" msgstr "" -#: Client/loader/MainFunctions.cpp:294 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 +#, c-format msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to revert to an earlier version?" +"Disconnected: Server is running a newer build.\n" +"Information: %s" msgstr "" -#: Client/loader/MainFunctions.cpp:324 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 +#, c-format msgid "" -"There seems to be a problem launching MTA:SA.\n" -"Resetting GTA settings can sometimes fix this problem.\n" -"\n" -"Do you want to reset GTA settings now?" +"Disconnected: Server is running an older build.\n" +"Information: %s" msgstr "" -#: Client/loader/MainFunctions.cpp:339 -msgid "" -"GTA settings have been reset.\n" -"\n" -"Press OK to continue." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 +msgid "Disconnected: Nick already in use" msgstr "" -#: Client/loader/MainFunctions.cpp:344 -#, c-format -msgid "File could not be deleted: '%s'" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 +msgid "Disconnected: Player element could not be created." msgstr "" -#. No settings to delete, or can't find them -#: Client/loader/MainFunctions.cpp:352 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to see some online help?" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:567 +#, c-format +msgid "Disconnected: Server refused the connection: %s" msgstr "" -#. Inform user -#: Client/loader/MainFunctions.cpp:388 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Do you want to change the following setting?" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 +msgid "Disconnected: Serial verification failed" msgstr "" -#: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:662 -#: Client/core/CSettings.cpp:1004 -msgid "Fullscreen mode:" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 +#, c-format +msgid "Disconnected: Connection desync %s" msgstr "" -#: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:670 -#: Client/core/CSettings.cpp:1615 -msgid "Borderless window" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 +#, c-format +msgid "Disconnected: You were kicked by %s" msgstr "" -#: Client/loader/MainFunctions.cpp:431 -msgid "" -"Are you having problems running MTA:SA?.\n" -"\n" -"Try disabling the following products for GTA and MTA:" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 +#, c-format +msgid "Disconnected: You were banned by %s" msgstr "" -#: Client/loader/MainFunctions.cpp:465 -msgid "" -"WARNING\n" -"\n" -"MTA:SA has detected unusual activity.\n" -"Please run a virus scan to ensure your system is secure.\n" -"\n" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 +msgid "Disconnected: Server shutdown or restarting" msgstr "" -#: Client/loader/MainFunctions.cpp:468 -#, c-format -msgid "The detected file was: %s\n" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 +msgid "You were kicked from the game" msgstr "" -#: Client/loader/MainFunctions.cpp:602 -msgid "" -"An instance of GTA: San Andreas is already running. It needs to be " -"terminated before MTA:SA can be started. Do you want to do that now?" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:622 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:633 +msgid "This server requires a non-modifed gta_sa.exe" msgstr "" -#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 -#: Client/loader/MainFunctions.cpp:1219 -#: Client/core/ServerBrowser/CServerInfo.cpp:319 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -msgid "Information" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 +msgid "Please replace gta_sa.exe" msgstr "" -#: Client/loader/MainFunctions.cpp:609 -msgid "" -"Unable to terminate GTA: San Andreas. If the problem persists, please " -"restart your computer." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 +msgid "This server does not allow custom D3D9.DLLs" msgstr "" -#: Client/loader/MainFunctions.cpp:632 -msgid "" -"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 +msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" msgstr "" -#: Client/loader/MainFunctions.cpp:638 -msgid "" -"The path to your installation of GTA: San Andreas contains unsupported " -"(unicode) characters. Please move your Grand Theft Auto: San Andreas " -"installation to a compatible path that contains only standard ASCII " -"characters and reinstall Multi Theft Auto: San Andreas." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 +msgid "This server does not allow virtual machines" msgstr "" -#: Client/loader/MainFunctions.cpp:648 -msgid "" -"The path to your installation of 'MTA:SA' or 'GTA: San Andreas'\n" -"contains a ';' (semicolon).\n" -"\n" -" If you experience problems when running MTA:SA,\n" -" move your installation(s) to a path that does not contain a semicolon." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 +msgid "This server requires driver signing to be enabled" msgstr "" -#: Client/loader/MainFunctions.cpp:810 -msgid "" -"Load failed. Please ensure that the latest data files have been installed " -"correctly." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 +msgid "Please restart your PC" msgstr "" -#: Client/loader/MainFunctions.cpp:819 -#, c-format -msgid "Load failed. Please ensure that %s is installed correctly." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 +msgid "This server has detected missing anti-cheat components" msgstr "" -#: Client/loader/MainFunctions.cpp:826 -#, c-format -msgid "Load failed. Could not find gta_sa.exe in %s." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 +msgid "Try restarting MTA" msgstr "" -#: Client/loader/MainFunctions.cpp:836 -#, c-format -msgid "" -"Load failed. %s exists in the GTA directory. Please delete before continuing." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 +msgid "This server requires a non-modifed gta3.img and gta_int.img" msgstr "" -#: Client/loader/MainFunctions.cpp:845 -#, c-format -msgid "Main file has an incorrect name (%s)" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 +msgid "Please replace gta3.img or gta_int.img" msgstr "" -#: Client/loader/MainFunctions.cpp:856 -msgid "" -"Main file is unsigned. Possible virus activity.\n" -"\n" -"See online help if MTA does not work correctly." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 +msgid "This server does not allow Wine" msgstr "" -#: Client/loader/MainFunctions.cpp:882 -#, c-format -msgid "" -"Data file %s is missing. Possible virus activity.\n" -"\n" -"Consider reinstalling Multi Theft Auto for your security.\n" -"See online help if MTA does not work correctly." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 +msgid "Ensure no other program is modifying MTA:SA" msgstr "" -#: Client/loader/MainFunctions.cpp:893 -#, c-format -msgid "" -"Data file %s is modified. Possible virus activity.\n" -"\n" -"Consider reinstalling Multi Theft Auto for your security.\n" -"See online help if MTA does not work correctly." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 +msgid "Time Remaining: " msgstr "" -#: Client/loader/MainFunctions.cpp:907 -msgid "" -".asi files are in the 'MTA:SA' or 'GTA: San Andreas' installation " -"directory.\n" -"\n" -"Remove these .asi files if you experience problems with MTA:SA." -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:660 +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" -#: Client/loader/MainFunctions.cpp:1009 -msgid "" -"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:662 +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" -#: Client/loader/MainFunctions.cpp:1018 -msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:664 +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" -#: Client/loader/MainFunctions.cpp:1030 -msgid "" -"MTA:SA is not compatible with Windows 'Safe Mode'.\n" -"\n" -"Please restart your PC.\n" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:666 +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" -#: Client/loader/MainFunctions.cpp:1123 -msgid "Fix configuration issue" +#. Display the error +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:670 +msgid "Disconnected" msgstr "" -#. Try to relaunch as admin if not done so already -#: Client/loader/MainFunctions.cpp:1157 -msgid "Fix elevation required error" +#: Client/mods/deathmatch/logic/CClientGame.cpp:370 +msgid "Flying a UFO around" msgstr "" -#: Client/loader/MainFunctions.cpp:1164 -#, c-format -msgid "" -"Could not start Grand Theft Auto: San Andreas. Please try restarting, or if " -"the problem persists,contact MTA at www.multitheftauto.com. \n" -"\n" -"[%s]" +#: Client/mods/deathmatch/logic/CClientGame.cpp:370 +msgid "Cruising around" msgstr "" -#: Client/loader/MainFunctions.cpp:1219 -msgid "" -"GTA: San Andreas may not have launched correctly. Do you want to terminate " -"it?" +#: Client/mods/deathmatch/logic/CClientGame.cpp:370 +msgid "Riding the waves of" msgstr "" -#: Client/loader/Utils.cpp:600 -msgid "Select your Grand Theft Auto: San Andreas Installation Directory" +#: Client/mods/deathmatch/logic/CClientGame.cpp:371 +msgid "Riding the train in" msgstr "" -#: Client/loader/Utils.cpp:968 Client/loader/CInstallManager.cpp:361 -#, c-format -msgid "" -"MTA:SA needs Administrator access for the following task:\n" -"\n" -" '%s'\n" -"\n" -"Please confirm in the next window." +#: Client/mods/deathmatch/logic/CClientGame.cpp:371 +msgid "Flying around" msgstr "" -#: Client/loader/Utils.cpp:1069 -#, c-format -msgid "Error loading %s module! (%s)" +#: Client/mods/deathmatch/logic/CClientGame.cpp:372 +msgid "Riding around" msgstr "" -#: Client/loader/Utils.cpp:1502 -#, c-format -msgid "" -"New installation of %s detected.\n" -"\n" -"Do you want to copy your settings from %s ?" +#: Client/mods/deathmatch/logic/CClientGame.cpp:372 +msgid "Monster truckin' around" msgstr "" -#: Client/loader/Utils.cpp:1541 -#, c-format -msgid "GTA:SA had trouble opening the file '%s'" +#: Client/mods/deathmatch/logic/CClientGame.cpp:372 +msgid "Quaddin' around" msgstr "" -#: Client/loader/Utils.cpp:1563 -#, c-format -msgid "GTA:SA is missing the file '%s'." +#: Client/mods/deathmatch/logic/CClientGame.cpp:373 +msgid "Bunny hopping around" msgstr "" -#: Client/loader/Utils.cpp:1588 -msgid "GTA:SA had trouble loading a model." +#: Client/mods/deathmatch/logic/CClientGame.cpp:373 +msgid "Doing weird stuff in" msgstr "" -#: Client/loader/Utils.cpp:1590 -msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." +#: Client/mods/deathmatch/logic/CClientGame.cpp:377 +msgid "Climbing around in" msgstr "" -#: Client/loader/Utils.cpp:1615 -msgid "GTA:SA had trouble adding an upgrade to a vehicle." +#: Client/mods/deathmatch/logic/CClientGame.cpp:378 +#: Client/mods/deathmatch/logic/CClientGame.cpp:379 +msgid "Doing a drive-by in" msgstr "" -#: Client/loader/Utils.cpp:1634 -#, c-format -msgid "GTA:SA found errors in the file '%s'" +#: Client/mods/deathmatch/logic/CClientGame.cpp:380 +msgid "Blub blub..." msgstr "" -#: Client/loader/Utils.cpp:1716 -msgid "Did your computer restart when playing MTA:SA?" +#: Client/mods/deathmatch/logic/CClientGame.cpp:381 +msgid "Breathing water" msgstr "" -#: Client/loader/Utils.cpp:1781 -msgid "Please terminate the following programs before continuing:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:382 +msgid "Drowning in" msgstr "" -#: Client/loader/CInstallManager.cpp:376 -#, c-format -msgid "" -"MTA:SA could not complete the following task:\n" -"\n" -" '%s'\n" +#: Client/mods/deathmatch/logic/CClientGame.cpp:383 +msgid "Ducking for cover in" msgstr "" -#: Client/loader/CInstallManager.cpp:426 -msgid "" -"** The crash was caused by a graphics driver error **\n" -"\n" -"** Please update your graphics drivers **" +#: Client/mods/deathmatch/logic/CClientGame.cpp:384 +msgid "Fighting in" msgstr "" -#: Client/loader/CInstallManager.cpp:532 -msgid "Install updated MTA:SA files" +#: Client/mods/deathmatch/logic/CClientGame.cpp:385 +msgid "Throwing fists in" msgstr "" -#: Client/loader/CInstallManager.cpp:552 -msgid "" -"Could not update due to file conflicts. Please close other applications and " -"retry" +#: Client/mods/deathmatch/logic/CClientGame.cpp:386 +msgid "Blastin' fools in" msgstr "" -#: Client/loader/CInstallManager.cpp:561 -#, c-format -msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" +#: Client/mods/deathmatch/logic/CClientGame.cpp:387 +msgid "Shooting up" msgstr "" -#: Client/loader/CInstallManager.cpp:613 -msgid "Create GTA:SA junctions" +#: Client/mods/deathmatch/logic/CClientGame.cpp:388 +msgid "Jetpacking in" msgstr "" -#: Client/loader/CInstallManager.cpp:657 -msgid "MTA:SA cannot launch because copying a file failed:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:389 +msgid "Literally on fire in" msgstr "" -#: Client/loader/CInstallManager.cpp:663 Client/loader/CInstallManager.cpp:703 -msgid "MTA:SA cannot launch because an MTA:SA file is incorrect or missing:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:390 +msgid "Burning up in" msgstr "" -#: Client/loader/CInstallManager.cpp:672 -msgid "Copy MTA:SA files" +#: Client/mods/deathmatch/logic/CClientGame.cpp:391 +msgid "Swimming in" msgstr "" -#: Client/loader/CInstallManager.cpp:695 Client/loader/CInstallManager.cpp:773 -msgid "MTA:SA cannot launch because a GTA:SA file is incorrect or missing:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:392 +msgid "Floating around in" msgstr "" -#: Client/loader/CInstallManager.cpp:780 -msgid "Patch GTA:SA dependency" +#: Client/mods/deathmatch/logic/CClientGame.cpp:393 +msgid "Being chased by a shark" msgstr "" -#: Client/loader/CInstallManager.cpp:828 -msgid "" -"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:394 +msgid "Choking to death in" msgstr "" -#: Client/loader/CInstallManager.cpp:832 -msgid "" -"Please check your anti-virus for a false-positive detection, try to add an " -"exception for the GTA:SA executable and restart MTA:SA." +#: Client/mods/deathmatch/logic/CClientGame.cpp:528 +#: Client/core/CSettings.cpp:3479 Client/core/CMainMenu.cpp:304 +#: Client/core/CCore.cpp:674 +msgid "Main menu" msgstr "" -#: Client/loader/CInstallManager.cpp:838 -msgid "Generate GTA:SA" +#. Show timeout message and disconnect +#. Display an error, reset the error status and exit +#. Show a message that the connection timed out and abort +#. Show failed message and abort the attempt +#: Client/mods/deathmatch/logic/CClientGame.cpp:636 +#: Client/mods/deathmatch/logic/CClientGame.cpp:710 +#: Client/mods/deathmatch/logic/CClientGame.cpp:734 +#: Client/mods/deathmatch/logic/CClientGame.cpp:756 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1169 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1249 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1259 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1328 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1365 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1414 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1426 +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:145 +#: Client/core/CConnectManager.cpp:80 Client/core/CConnectManager.cpp:111 +#: Client/core/CConnectManager.cpp:127 Client/core/CConnectManager.cpp:263 +#: Client/core/CConnectManager.cpp:321 Client/core/CConnectManager.cpp:404 +#: Client/core/CConnectManager.cpp:411 Client/core/CConnectManager.cpp:421 +#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4166 +#: Client/core/CSettings.cpp:4194 Client/core/CSettings.cpp:4764 +#: Client/core/CCore.cpp:1275 Client/core/CCore.cpp:1288 +#: Client/core/CGUI.cpp:87 Client/core/DXHook/CDirect3DHook9.cpp:127 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 +#: Client/loader/MainFunctions.cpp:252 Client/loader/MainFunctions.cpp:267 +#: Client/loader/MainFunctions.cpp:269 Client/loader/MainFunctions.cpp:846 +#: Client/loader/CInstallManager.cpp:552 Client/loader/CInstallManager.cpp:561 +#: Shared/mods/deathmatch/logic/CLatentTransferManager.cpp:378 +#: Shared/sdk/SharedUtil.Misc.hpp:137 +msgid "Error" msgstr "" -#: Client/loader/CInstallManager.cpp:853 -msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:636 +#: Client/mods/deathmatch/logic/CClientGame.cpp:734 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 +msgid "Invalid nickname! Please go to Settings and set a new one!" msgstr "" -#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 -msgid "Patch GTA:SA" +#. Display the status box +#: Client/mods/deathmatch/logic/CClientGame.cpp:652 +#: Client/core/CConnectManager.cpp:148 +msgid "CONNECTING" msgstr "" -#: Client/loader/CInstallManager.cpp:876 -msgid "MTA:SA cannot launch because patching GTA:SA has failed:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:652 +msgid "Entering the game ..." msgstr "" -#: Client/loader/CInstallManager.cpp:1057 Client/core/CCore.cpp:811 -#, c-format -msgid "MTA:SA cannot continue because drive %s does not have enough space." +#: Client/mods/deathmatch/logic/CClientGame.cpp:710 +msgid "" +"Not connected; please use Quick Connect or the 'connect' command to connect " +"to a server." msgstr "" -#: Client/loader/CInstallManager.cpp:1113 -msgid "Missing file:" +#: Client/mods/deathmatch/logic/CClientGame.cpp:756 +msgid "Could not start the local server. See console for details." msgstr "" -#: Client/loader/CInstallManager.cpp:1117 -msgid "If MTA fails to load, please re-install GTA:SA" +#: Client/mods/deathmatch/logic/CClientGame.cpp:766 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1238 +msgid "Local Server" msgstr "" -#: Client/loader/CInstallManager.cpp:1152 -msgid "Update install settings" +#: Client/mods/deathmatch/logic/CClientGame.cpp:766 +msgid "Starting local server ..." msgstr "" -#: Client/loader/CInstallManager.cpp:1305 -msgid "Update compatibility settings" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1014 +msgid "Area 51" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:36 -msgid "This version has expired." +#: Client/mods/deathmatch/logic/CClientGame.cpp:1023 +msgid "Walking around " msgstr "" -#: Client/mods/deathmatch/CClient.cpp:56 -msgid "disconnect from the game" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1084 +#: Client/mods/deathmatch/logic/CResource.cpp:375 +#: Client/core/CSettings.cpp:3483 Client/core/CCore.cpp:674 +msgid "In-game" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:57 -msgid "shows the nametags" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1169 +#, c-format +msgid "You were kicked from the game ( %s )" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:58 -msgid "shows the chatbox" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1238 +msgid "Connecting to local server..." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:59 -msgid "shows the network statistics" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1249 +msgid "Error connecting to server." msgstr "" -#. Key commands (registered as 'mod commands', can be disabled) -#: Client/mods/deathmatch/CClient.cpp:62 -msgid "open the chat input" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1259 +msgid "Connecting to local server timed out. See console for details." msgstr "" -#: Client/mods/deathmatch/CClient.cpp:63 -msgid "transmits voice to other players" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1328 +#: Client/core/CConnectManager.cpp:263 +msgid "Connection timed out" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:64 -msgid "enters a car as passenger" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1365 +msgid "Connection with the server was lost" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:65 -msgid "next radio channel" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1376 +#: Client/core/CConnectManager.cpp:277 Client/core/CConnectManager.cpp:281 +msgid "Disconnected: unknown protocol error" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:66 -msgid "previous radio channel" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1380 +#: Client/core/CConnectManager.cpp:285 +msgid "Disconnected: disconnected remotely" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:67 -msgid "enables the radar view" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1384 +#: Client/core/CConnectManager.cpp:289 +msgid "Disconnected: connection lost remotely" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:68 -msgid "zooms the radar in" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1388 +#: Client/core/CConnectManager.cpp:293 +msgid "Disconnected: you are banned from this server" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:69 -msgid "zooms the radar out" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1392 +msgid "Disconnected: the server is currently full" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:70 -msgid "moves the radar north" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1396 +#: Client/core/CConnectManager.cpp:300 +msgid "Disconnected: disconnected from the server" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:71 -msgid "moves the radar south" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1400 +#: Client/core/CConnectManager.cpp:304 +msgid "Disconnected: connection to the server was lost" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:72 -msgid "moves the radar east" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1404 +msgid "Disconnected: invalid password specified" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:73 -msgid "moves the radar west" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1408 +#: Client/core/CConnectManager.cpp:311 +msgid "Disconnected: connection was refused" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:74 -msgid "attaches the radar" +#: Client/mods/deathmatch/logic/CClientGame.cpp:1426 +msgid "MTA Client verification failed!" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:75 -msgid "reduces radar opacity" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 +msgid "In a ditch" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:76 -msgid "increases radar opacity" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 +msgid "En-route to hospital" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:77 -msgid "toggles radar help text" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5713 +msgid "Meeting their maker" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:78 -msgid "sends a message to the targetted player" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5714 +msgid "Regretting their decisions" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:79 -msgid "changes to the next weapon whilst in a vehicle" +#: Client/mods/deathmatch/logic/CClientGame.cpp:5714 +msgid "Wasted" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:80 -msgid "changes to the previous weapon whilst in a vehicle" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:25 +msgid "Map download progress:" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:81 -msgid "outputs info about the current server" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:28 +msgid "Download Progress:" msgstr "" -#. ACHTUNG" Should this be handled by the atomic cvar setter? -#: Client/mods/deathmatch/CClient.cpp:84 -msgid "defines the scale multiplier of all text-displays" +#. Find our largest piece of text, so we can size accordingly +#: Client/mods/deathmatch/logic/CTransferBox.cpp:42 +#: Client/mods/deathmatch/logic/CTransferBox.cpp:105 +#, c-format +msgid "%s of %s" msgstr "" -#. Development mode -#: Client/mods/deathmatch/CClient.cpp:91 -msgid "(Development mode) shows the colshapes" +#: Client/mods/deathmatch/logic/CTransferBox.cpp:44 +#: Client/mods/deathmatch/logic/CTransferBox.cpp:65 +msgid "Disconnect to cancel download" msgstr "" -#: Client/mods/deathmatch/CClient.cpp:92 -msgid "(Development mode) prints world sound ids into the debug window" +#. Throw the error and disconnect +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 +#, c-format +msgid "Download error: %s" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:506 -msgid "Disconnected: Invalid nickname" +#. Create buttons +#. OK button +#: Client/gui/CGUIMessageBox_Impl.cpp:64 Client/core/CSettings.cpp:127 +#: Client/core/CSettings.cpp:4785 Client/core/CVersionUpdater.cpp:1607 +#: Client/core/CVersionUpdater.cpp:1823 Client/core/CVersionUpdater.cpp:1916 +#: Client/core/CVersionUpdater.cpp:1938 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/loader/Dialogs.cpp:133 +msgid "OK" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 -msgid "Disconnect from server" +#. ///////////////////////////////////////////////////////////////////////// +#. +#. Dialog strings +#. +#. +#. ///////////////////////////////////////////////////////////////////////// +#: Client/gui/CGUIMessageBox_Impl.cpp:72 Client/core/CQuestionBox.cpp:195 +#: Client/core/CSettings.cpp:1389 Client/core/CSettings.cpp:1413 +#: Client/core/CSettings.cpp:4489 Client/core/CSettings.cpp:4563 +#: Client/core/CSettings.cpp:4593 Client/core/CSettings.cpp:4642 +#: Client/core/CMainMenu.cpp:1200 Client/core/CVersionUpdater.cpp:1572 +#: Client/core/CVersionUpdater.cpp:1590 Client/core/CVersionUpdater.cpp:1859 +#: Client/core/CVersionUpdater.cpp:1878 +#: Client/core/ServerBrowser/CServerInfo.cpp:479 Client/loader/Dialogs.cpp:131 +msgid "Yes" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 -#, c-format -msgid "" -"Disconnected: Serial is banned.\n" -"Reason: %s" +#: Client/core/CCommandFuncs.cpp:24 +msgid "***[ COMMAND HELP ]***\n" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 +#: Client/core/CCommandFuncs.cpp:158 #, c-format -msgid "" -"Disconnected: You are banned.\n" -"Reason: %s" +msgid "* The time is %d:%02d:%02d" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 -#, c-format -msgid "" -"Disconnected: Account is banned.\n" -"Reason: %s" +#: Client/core/CCommandFuncs.cpp:242 +msgid "connect: Syntax is 'connect [ ]'" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 -msgid "Disconnected: Version mismatch" +#: Client/core/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 +msgid "connect: Bad port number" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 -msgid "Disconnected: Join flood. Please wait a minute, then reconnect." +#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 +#, c-format +msgid "connect: Connecting to %s:%u..." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 +#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 #, c-format -msgid "" -"Disconnected: Server from different branch.\n" -"Information: %s" +msgid "connect: could not connect to %s:%u!" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 -#, c-format -msgid "" -"Disconnected: Bad version.\n" -"Information: %s" +#: Client/core/CCommandFuncs.cpp:281 +msgid "connect: Failed to unload current mod" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 -#, c-format -msgid "" -"Disconnected: Server is running a newer build.\n" -"Information: %s" +#: Client/core/CCommandFuncs.cpp:371 +msgid "Bound all controls from GTA" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 +#: Client/core/CCommandFuncs.cpp:385 +msgid "Saved configuration file" +msgstr "" + +#. Print it +#: Client/core/CCommandFuncs.cpp:451 #, c-format -msgid "" -"Disconnected: Server is running an older build.\n" -"Information: %s" +msgid "* Your serial is: %s" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 -msgid "Disconnected: Nick already in use" +#. Unknown command +#: Client/core/CCommands.cpp:223 +msgid "Unknown command or cvar: " msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 -msgid "Disconnected: Player element could not be created." +#. Create window +#: Client/core/CConsole.cpp:417 +msgid "CONSOLE" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:567 -#, c-format -msgid "Disconnected: Server refused the connection: %s" +#: Client/core/CConnectManager.cpp:79 +msgid "Connecting failed. Invalid nick provided!" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 -msgid "Disconnected: Serial verification failed" +#: Client/core/CConnectManager.cpp:110 +msgid "Connecting failed. Invalid host provided!" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 +#: Client/core/CConnectManager.cpp:126 #, c-format -msgid "Disconnected: Connection desync %s" +msgid "Connecting to %s at port %u failed!" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 +#. Display the status box +#: Client/core/CConnectManager.cpp:147 #, c-format -msgid "Disconnected: You were kicked by %s" +msgid "Connecting to %s:%u ..." msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 +#. Failed loading the mod +#: Client/core/CConnectManager.cpp:403 #, c-format -msgid "Disconnected: You were banned by %s" +msgid "No such mod installed (%s)" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 -msgid "Disconnected: Server shutdown or restarting" +#: Client/core/CConnectManager.cpp:411 +msgid "Bad server response (2)" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 -msgid "You were kicked from the game" +#: Client/core/CConnectManager.cpp:421 +msgid "Bad server response (1)" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:622 -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:633 -msgid "This server requires a non-modifed gta_sa.exe" +#: Client/core/CQuestionBox.cpp:192 Shared/sdk/SharedUtil.Misc.hpp:688 +msgid "Do you want to see some on-line help about this problem ?" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 -msgid "Please replace gta_sa.exe" +#: Client/core/CQuestionBox.cpp:194 Client/core/CSettings.cpp:1388 +#: Client/core/CSettings.cpp:1412 Client/core/CSettings.cpp:4488 +#: Client/core/CSettings.cpp:4562 Client/core/CSettings.cpp:4592 +#: Client/core/CSettings.cpp:4641 Client/core/CMainMenu.cpp:1199 +#: Client/core/CVersionUpdater.cpp:1571 Client/core/CVersionUpdater.cpp:1589 +#: Client/core/CVersionUpdater.cpp:1858 Client/core/CVersionUpdater.cpp:1877 +#: Client/core/ServerBrowser/CServerInfo.cpp:479 Client/loader/Dialogs.cpp:132 +msgid "No" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 -msgid "This server does not allow custom D3D9.DLLs" +#: Client/core/CJoystickManager.cpp:1578 +msgid "Accelerate Axis" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 -msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" +#: Client/core/CJoystickManager.cpp:1580 +msgid "Brake Axis" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 -msgid "This server does not allow virtual machines" +#: Client/core/CKeyBinds.cpp:186 +msgid "Fire" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 -msgid "This server requires driver signing to be enabled" +#: Client/core/CKeyBinds.cpp:187 +msgid "Next weapon" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 -msgid "Please restart your PC" +#: Client/core/CKeyBinds.cpp:188 +msgid "Previous weapon" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 -msgid "This server has detected missing anti-cheat components" +#: Client/core/CKeyBinds.cpp:189 +msgid "Forwards" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 -msgid "Try restarting MTA" +#: Client/core/CKeyBinds.cpp:190 +msgid "Backwards" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 -msgid "This server requires a non-modifed gta3.img and gta_int.img" +#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2240 +#: Client/core/CSettings.cpp:2268 +msgid "Left" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 -msgid "Please replace gta3.img or gta_int.img" +#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2242 +#: Client/core/CSettings.cpp:2269 +msgid "Right" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 -msgid "This server does not allow Wine" +#: Client/core/CKeyBinds.cpp:193 +msgid "Zoom in" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 -msgid "Ensure no other program is modifying MTA:SA" +#: Client/core/CKeyBinds.cpp:194 +msgid "Zoom out" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 -msgid "Time Remaining: " +#: Client/core/CKeyBinds.cpp:195 +msgid "Enter/Exit" msgstr "" -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:660 -#, c-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:662 -#, c-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:664 -#, c-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:666 -#, c-format -msgid "%d second" -msgid_plural "%d seconds" -msgstr[0] "" -msgstr[1] "" - -#. Display the error -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:670 -msgid "Disconnected" +#: Client/core/CKeyBinds.cpp:196 +msgid "Change camera" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:369 -msgid "Flying a UFO around" +#. 10 +#: Client/core/CKeyBinds.cpp:197 +msgid "Jump" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:369 -msgid "Cruising around" +#: Client/core/CKeyBinds.cpp:198 +msgid "Sprint" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:369 -msgid "Riding the waves of" +#: Client/core/CKeyBinds.cpp:199 +msgid "Look behind" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:370 -msgid "Riding the train in" +#: Client/core/CKeyBinds.cpp:200 +msgid "Crouch" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:370 -msgid "Flying around" +#: Client/core/CKeyBinds.cpp:201 +msgid "Action" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:371 -msgid "Riding around" +#: Client/core/CKeyBinds.cpp:202 +msgid "Walk" msgstr "" - -#: Client/mods/deathmatch/logic/CClientGame.cpp:371 -msgid "Monster truckin' around" + +#: Client/core/CKeyBinds.cpp:203 +msgid "Vehicle fire" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:371 -msgid "Quaddin' around" +#: Client/core/CKeyBinds.cpp:204 +msgid "Vehicle secondary fire" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:372 -msgid "Bunny hopping around" +#: Client/core/CKeyBinds.cpp:205 +msgid "Vehicle left" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:372 -msgid "Doing weird stuff in" +#: Client/core/CKeyBinds.cpp:206 +msgid "Vehicle right" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:376 -msgid "Climbing around in" +#. 20 +#: Client/core/CKeyBinds.cpp:207 +msgid "Steer forwards/down" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:377 -#: Client/mods/deathmatch/logic/CClientGame.cpp:378 -msgid "Doing a drive-by in" +#: Client/core/CKeyBinds.cpp:208 +msgid "Steer backwards/up" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:379 -msgid "Blub blub..." +#: Client/core/CKeyBinds.cpp:209 +msgid "Accelerate" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:380 -msgid "Breathing water" +#: Client/core/CKeyBinds.cpp:210 +msgid "Brake/Reverse" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:381 -msgid "Drowning in" +#: Client/core/CKeyBinds.cpp:211 +msgid "Radio next" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:382 -msgid "Ducking for cover in" +#: Client/core/CKeyBinds.cpp:212 +msgid "Radio previous" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:383 -msgid "Fighting in" +#: Client/core/CKeyBinds.cpp:213 +msgid "Radio user track skip" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:384 -msgid "Throwing fists in" +#: Client/core/CKeyBinds.cpp:214 +msgid "Horn" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:385 -msgid "Blastin' fools in" +#: Client/core/CKeyBinds.cpp:215 +msgid "Sub-mission" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:386 -msgid "Shooting up" +#: Client/core/CKeyBinds.cpp:216 +msgid "Handbrake" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:387 -msgid "Jetpacking in" +#. 30 +#: Client/core/CKeyBinds.cpp:217 +msgid "Vehicle look left" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:388 -msgid "Literally on fire in" +#: Client/core/CKeyBinds.cpp:218 +msgid "Vehicle look right" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:389 -msgid "Burning up in" +#: Client/core/CKeyBinds.cpp:219 +msgid "Vehicle look behind" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:390 -msgid "Swimming in" +#: Client/core/CKeyBinds.cpp:220 +msgid "Vehicle mouse look" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:391 -msgid "Floating around in" +#: Client/core/CKeyBinds.cpp:221 +msgid "Special control left" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:392 -msgid "Being chased by a shark" +#: Client/core/CKeyBinds.cpp:222 +msgid "Special control right" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:393 -msgid "Choking to death in" +#: Client/core/CKeyBinds.cpp:223 +msgid "Special control down" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:527 Client/core/CCore.cpp:674 -#: Client/core/CMainMenu.cpp:304 Client/core/CSettings.cpp:3479 -msgid "Main menu" +#: Client/core/CKeyBinds.cpp:224 +msgid "Special control up" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:635 -#: Client/mods/deathmatch/logic/CClientGame.cpp:733 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1300 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1357 -msgid "Invalid nickname! Please go to Settings and set a new one!" +#: Client/core/CKeyBinds.cpp:225 +msgid "Aim weapon" msgstr "" -#. Display the status box -#: Client/mods/deathmatch/logic/CClientGame.cpp:651 -#: Client/core/CConnectManager.cpp:148 -msgid "CONNECTING" +#: Client/core/CKeyBinds.cpp:226 +msgid "Conversation yes" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:651 -msgid "Entering the game ..." +#. 40 +#: Client/core/CKeyBinds.cpp:227 +msgid "Conversation no" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:709 -msgid "" -"Not connected; please use Quick Connect or the 'connect' command to connect " -"to a server." +#: Client/core/CKeyBinds.cpp:228 +msgid "Group control forwards" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:755 -msgid "Could not start the local server. See console for details." +#: Client/core/CKeyBinds.cpp:229 +msgid "Group control backwards" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:765 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1237 -msgid "Local Server" +#. TRANSLATORS: Replace with your language native name +#: Client/core/CLocalization.cpp:16 +msgid "English" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:765 -msgid "Starting local server ..." +#. Create window (with frame) if it will fit inside the screen resolution +#: Client/core/CSettings.cpp:84 +msgid "SETTINGS" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1013 -msgid "Area 51" +#: Client/core/CSettings.cpp:116 +msgid "Multiplayer" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1022 -msgid "Walking around " +#: Client/core/CSettings.cpp:117 +msgid "Video" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1083 -#: Client/mods/deathmatch/logic/CResource.cpp:372 Client/core/CCore.cpp:674 -#: Client/core/CSettings.cpp:3483 -msgid "In-game" +#: Client/core/CSettings.cpp:118 +msgid "Audio" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1168 -#, c-format -msgid "You were kicked from the game ( %s )" +#: Client/core/CSettings.cpp:119 +msgid "Binds" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1237 -msgid "Connecting to local server..." +#: Client/core/CSettings.cpp:120 +msgid "Controls" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1248 -msgid "Error connecting to server." +#: Client/core/CSettings.cpp:121 +msgid "Interface" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1258 -msgid "Connecting to local server timed out. See console for details." +#: Client/core/CSettings.cpp:122 +msgid "Web Browser" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1327 -#: Client/core/CConnectManager.cpp:263 -msgid "Connection timed out" +#: Client/core/CSettings.cpp:123 +msgid "Advanced" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1364 -msgid "Connection with the server was lost" +#: Client/core/CSettings.cpp:147 Client/core/CSettings.cpp:338 +#: Client/core/CSettings.cpp:617 Client/core/CSettings.cpp:889 +msgid "Load defaults" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1375 -#: Client/core/CConnectManager.cpp:277 Client/core/CConnectManager.cpp:281 -msgid "Disconnected: unknown protocol error" +#. * +#. * Controls tab +#. * +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 +msgid "Mouse sensitivity:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1379 -#: Client/core/CConnectManager.cpp:285 -msgid "Disconnected: disconnected remotely" +#. VerticalAimSensitivity +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 +msgid "Vertical aim sensitivity:" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1383 -#: Client/core/CConnectManager.cpp:289 -msgid "Disconnected: connection lost remotely" +#. Mouse Options +#: Client/core/CSettings.cpp:160 +msgid "Mouse options" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1387 -#: Client/core/CConnectManager.cpp:293 -msgid "Disconnected: you are banned from this server" +#: Client/core/CSettings.cpp:167 +msgid "Invert mouse vertically" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1391 -msgid "Disconnected: the server is currently full" +#: Client/core/CSettings.cpp:171 +msgid "Steer with mouse" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1395 -#: Client/core/CConnectManager.cpp:300 -msgid "Disconnected: disconnected from the server" +#: Client/core/CSettings.cpp:175 +msgid "Fly with mouse" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1399 -#: Client/core/CConnectManager.cpp:304 -msgid "Disconnected: connection to the server was lost" +#. Joypad options +#: Client/core/CSettings.cpp:217 +msgid "Joypad options" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1403 -msgid "Disconnected: invalid password specified" +#: Client/core/CSettings.cpp:230 +msgid "Standard controls (Mouse + Keyboard)" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1407 -#: Client/core/CConnectManager.cpp:311 -msgid "Disconnected: connection was refused" +#: Client/core/CSettings.cpp:237 +msgid "Classic controls (Joypad)" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:1425 -msgid "MTA Client verification failed!" +#: Client/core/CSettings.cpp:274 +msgid "Dead Zone" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 -msgid "In a ditch" +#: Client/core/CSettings.cpp:279 +msgid "Saturation" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 -msgid "En-route to hospital" +#: Client/core/CSettings.cpp:285 +msgid "Use the 'Binds' tab for joypad buttons." msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5707 -msgid "Meeting their maker" +#: Client/core/CSettings.cpp:324 +msgid "Left Stick" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5708 -msgid "Regretting their decisions" +#: Client/core/CSettings.cpp:330 +msgid "Right Stick" msgstr "" -#: Client/mods/deathmatch/logic/CClientGame.cpp:5708 -msgid "Wasted" +#: Client/core/CSettings.cpp:345 +msgid "DESCRIPTION" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:25 -msgid "Map download progress:" +#: Client/core/CSettings.cpp:346 +msgid "KEY" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:28 -msgid "Download Progress:" +#: Client/core/CSettings.cpp:348 +msgid "ALT. KEY" msgstr "" -#. Find our largest piece of text, so we can size accordingly -#: Client/mods/deathmatch/logic/CTransferBox.cpp:42 -#: Client/mods/deathmatch/logic/CTransferBox.cpp:105 -#, c-format -msgid "%s of %s" +#. * +#. * Multiplayer tab +#. * +#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 +msgid "Nick:" msgstr "" -#: Client/mods/deathmatch/logic/CTransferBox.cpp:44 -#: Client/mods/deathmatch/logic/CTransferBox.cpp:65 -msgid "Disconnect to cancel download" +#: Client/core/CSettings.cpp:378 +msgid "Save server passwords" msgstr "" -#. Throw the error and disconnect -#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 -#, c-format -msgid "Download error: %s" +#: Client/core/CSettings.cpp:383 +msgid "Auto-refresh server browser" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:37 -msgid "HOST GAME" +#: Client/core/CSettings.cpp:388 +msgid "Allow screen upload" msgstr "" -#. * -#. * Webbrowser tab -#. * -#: Client/mods/deathmatch/logic/CLocalServer.cpp:51 -#: Client/core/CSettings.cpp:442 Client/core/CSettings.cpp:630 -#: Client/core/CSettings.cpp:904 Client/core/CSettings.cpp:2018 -msgid "General" +#: Client/core/CSettings.cpp:393 +msgid "Allow external sounds" msgstr "" -#. m_pTabs->CreateTab ( "Gamemode" ); -#: Client/mods/deathmatch/logic/CLocalServer.cpp:53 -msgid "Resources" +#: Client/core/CSettings.cpp:398 +msgid "Always show download window" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:55 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:57 -msgid "Server name:" +#: Client/core/CSettings.cpp:403 +msgid "Allow connecting with Discord Rich Presence" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:64 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:66 -msgid "Password:" +#: Client/core/CSettings.cpp:408 +msgid "Use customized GTA:SA files" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:73 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:75 -msgid "Max players:" +#: Client/core/CSettings.cpp:413 +msgid "Map rendering options" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:82 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:84 -msgid "Broadcast:" +#: Client/core/CSettings.cpp:419 Client/core/CSettings.cpp:628 +msgid "Opacity:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:86 -msgid "LAN" +#. * +#. * Audio tab +#. * +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:448 +msgid "Master volume:" msgstr "" -#. Create the tabs -#: Client/mods/deathmatch/logic/CLocalServer.cpp:90 -#: Client/core/ServerBrowser/CServerBrowser.cpp:133 -msgid "Internet" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:467 +msgid "Radio volume:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:99 -msgid "Selected" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:486 +msgid "SFX volume:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:116 -msgid "All" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:505 +msgid "MTA volume:" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:118 -msgid "Start" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:524 +msgid "Voice volume:" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:19 -msgid "Website requests" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:565 +msgid "Play mode:" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:27 -msgid "" -"The server requests the following websites in order to load them (later):" +#: Client/core/CSettings.cpp:543 +msgid "Radio options" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:33 -msgid "NEVER ENTER SENSITIVE DATA TO PROTECT THEM FROM BEING STOLEN" +#: Client/core/CSettings.cpp:549 +msgid "Radio Equalizer" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:46 -msgid "Remember decision" +#: Client/core/CSettings.cpp:554 +msgid "Radio Auto-tune" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:51 Client/core/CSettings.cpp:974 -msgid "Allow" +#: Client/core/CSettings.cpp:559 +msgid "Usertrack options" msgstr "" -#: Client/cefweb/CWebsiteRequests.cpp:57 -msgid "Deny" +#: Client/core/CSettings.cpp:573 Client/core/CSettings.cpp:3087 +msgid "Radio" msgstr "" -#: Client/game_sa/CSettingsSA.cpp:753 -msgid "Can't find valid screen resolution." +#: Client/core/CSettings.cpp:574 Client/core/CSettings.cpp:3089 +msgid "Random" msgstr "" -#. Confirm that res should be used -#: Client/game_sa/CSettingsSA.cpp:829 -msgid "Are you sure you want to use this screen resolution?" +#: Client/core/CSettings.cpp:575 Client/core/CSettings.cpp:3091 +msgid "Sequential" msgstr "" -#. Couldn't create render target for CPostEffects -#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 -msgid "Problem with graphics driver" +#: Client/core/CSettings.cpp:578 +msgid "Automatic Media Scan" msgstr "" -#: Client/core/CJoystickManager.cpp:1578 -msgid "Accelerate Axis" +#: Client/core/CSettings.cpp:585 +msgid "Mute options" msgstr "" -#: Client/core/CJoystickManager.cpp:1580 -msgid "Brake Axis" +#: Client/core/CSettings.cpp:591 +msgid "Mute All sounds when minimized" msgstr "" -#. Create the window -#: Client/core/CNewsBrowser.cpp:153 -msgid "NEWS" +#: Client/core/CSettings.cpp:596 +msgid "Mute Radio sounds when minimized" msgstr "" -#. News link -#: Client/core/CNewsBrowser.cpp:171 Client/core/CNewsBrowser.cpp:172 -msgid "Visit latest news article" +#: Client/core/CSettings.cpp:601 +msgid "Mute SFX sounds when minimized" msgstr "" -#. TRANSLATORS: Replace with your language native name -#: Client/core/CLocalization.cpp:16 -msgid "English" +#: Client/core/CSettings.cpp:606 +msgid "Mute MTA sounds when minimized" msgstr "" -#: Client/core/CKeyBinds.cpp:186 -msgid "Fire" +#: Client/core/CSettings.cpp:611 +msgid "Mute Voice sounds when minimized" msgstr "" -#: Client/core/CKeyBinds.cpp:187 -msgid "Next weapon" +#. * +#. * Video tab +#. * +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 +msgid "Resolution:" msgstr "" -#: Client/core/CKeyBinds.cpp:188 -msgid "Previous weapon" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:683 +msgid "FOV:" msgstr "" -#: Client/core/CKeyBinds.cpp:189 -msgid "Forwards" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:699 +msgid "Draw Distance:" msgstr "" -#: Client/core/CKeyBinds.cpp:190 -msgid "Backwards" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 +msgid "Brightness:" msgstr "" -#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2240 -#: Client/core/CSettings.cpp:2268 -msgid "Left" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 +msgid "FX Quality:" msgstr "" -#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2242 -#: Client/core/CSettings.cpp:2269 -msgid "Right" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 +msgid "Anisotropic filtering:" msgstr "" -#: Client/core/CKeyBinds.cpp:193 -msgid "Zoom in" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 +msgid "Anti-aliasing:" msgstr "" -#: Client/core/CKeyBinds.cpp:194 -msgid "Zoom out" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 +msgid "Aspect Ratio:" msgstr "" -#: Client/core/CKeyBinds.cpp:195 -msgid "Enter/Exit" +#: Client/core/CSettings.cpp:648 +msgid "Windowed" msgstr "" -#: Client/core/CKeyBinds.cpp:196 -msgid "Change camera" +#: Client/core/CSettings.cpp:654 +msgid "DPI aware" msgstr "" -#. 10 -#: Client/core/CKeyBinds.cpp:197 -msgid "Jump" +#: Client/core/CSettings.cpp:662 Client/core/CSettings.cpp:1004 +#: Client/loader/MainFunctions.cpp:389 +msgid "Fullscreen mode:" msgstr "" -#: Client/core/CKeyBinds.cpp:198 -msgid "Sprint" +#: Client/core/CSettings.cpp:669 Client/core/CSettings.cpp:1613 +msgid "Standard" msgstr "" -#: Client/core/CKeyBinds.cpp:199 -msgid "Look behind" +#: Client/core/CSettings.cpp:670 Client/core/CSettings.cpp:1615 +#: Client/loader/MainFunctions.cpp:389 +msgid "Borderless window" msgstr "" -#: Client/core/CKeyBinds.cpp:200 -msgid "Crouch" +#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 +msgid "Borderless keep res" msgstr "" -#: Client/core/CKeyBinds.cpp:201 -msgid "Action" +#: Client/core/CSettings.cpp:675 +msgid "Mip Mapping" msgstr "" -#: Client/core/CKeyBinds.cpp:202 -msgid "Walk" +#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 +msgid "Low" msgstr "" -#: Client/core/CKeyBinds.cpp:203 -msgid "Vehicle fire" +#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 +msgid "Medium" msgstr "" -#: Client/core/CKeyBinds.cpp:204 -msgid "Vehicle secondary fire" +#: Client/core/CSettings.cpp:745 Client/core/CSettings.cpp:1086 +#: Client/core/CSettings.cpp:1521 Client/core/CSettings.cpp:3145 +msgid "High" msgstr "" -#: Client/core/CKeyBinds.cpp:205 -msgid "Vehicle left" +#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 +msgid "Very high" msgstr "" -#: Client/core/CKeyBinds.cpp:206 -msgid "Vehicle right" +#: Client/core/CSettings.cpp:761 Client/core/CSettings.cpp:784 +#: Client/core/CSettings.cpp:1017 Client/core/CSettings.cpp:1071 +#: Client/core/CSettings.cpp:1201 Client/core/CSettings.cpp:1527 +#: Client/core/CSettings.cpp:3152 Client/core/CSettings.cpp:3184 +#: Client/core/CSettings.cpp:3206 Client/core/CSettings.cpp:4234 +msgid "Off" msgstr "" -#. 20 -#: Client/core/CKeyBinds.cpp:207 -msgid "Steer forwards/down" +#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 +msgid "1x" msgstr "" -#: Client/core/CKeyBinds.cpp:208 -msgid "Steer backwards/up" +#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 +msgid "2x" msgstr "" -#: Client/core/CKeyBinds.cpp:209 -msgid "Accelerate" +#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 +msgid "3x" msgstr "" -#: Client/core/CKeyBinds.cpp:210 -msgid "Brake/Reverse" +#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1019 +#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 +msgid "Auto" msgstr "" -#: Client/core/CKeyBinds.cpp:211 -msgid "Radio next" +#: Client/core/CSettings.cpp:801 Client/core/CSettings.cpp:1541 +msgid "4:3" msgstr "" -#: Client/core/CKeyBinds.cpp:212 -msgid "Radio previous" +#: Client/core/CSettings.cpp:802 Client/core/CSettings.cpp:1543 +msgid "16:10" msgstr "" -#: Client/core/CKeyBinds.cpp:213 -msgid "Radio user track skip" +#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 +msgid "16:9" msgstr "" -#: Client/core/CKeyBinds.cpp:214 -msgid "Horn" +#: Client/core/CSettings.cpp:806 +msgid "HUD Match Aspect Ratio" msgstr "" -#: Client/core/CKeyBinds.cpp:215 -msgid "Sub-mission" +#: Client/core/CSettings.cpp:812 +msgid "Volumetric Shadows" msgstr "" -#: Client/core/CKeyBinds.cpp:216 -msgid "Handbrake" +#: Client/core/CSettings.cpp:816 +msgid "Grass effect" msgstr "" -#. 30 -#: Client/core/CKeyBinds.cpp:217 -msgid "Vehicle look left" +#: Client/core/CSettings.cpp:820 +msgid "Heat haze" msgstr "" -#: Client/core/CKeyBinds.cpp:218 -msgid "Vehicle look right" +#: Client/core/CSettings.cpp:824 +msgid "Tyre Smoke etc" msgstr "" -#: Client/core/CKeyBinds.cpp:219 -msgid "Vehicle look behind" +#: Client/core/CSettings.cpp:828 +msgid "Dynamic ped shadows" msgstr "" -#: Client/core/CKeyBinds.cpp:220 -msgid "Vehicle mouse look" +#: Client/core/CSettings.cpp:832 +msgid "Motion blur" +msgstr "" + +#: Client/core/CSettings.cpp:837 +msgid "Full Screen Minimize" msgstr "" -#: Client/core/CKeyBinds.cpp:221 -msgid "Special control left" +#: Client/core/CSettings.cpp:849 +msgid "Enable Device Selection Dialog" msgstr "" -#: Client/core/CKeyBinds.cpp:222 -msgid "Special control right" +#: Client/core/CSettings.cpp:861 +msgid "Show unsafe resolutions" msgstr "" -#: Client/core/CKeyBinds.cpp:223 -msgid "Special control down" +#: Client/core/CSettings.cpp:873 +msgid "Render vehicles always in high detail" msgstr "" -#: Client/core/CKeyBinds.cpp:224 -msgid "Special control up" +#: Client/core/CSettings.cpp:877 +msgid "Render peds always in high detail" msgstr "" -#: Client/core/CKeyBinds.cpp:225 -msgid "Aim weapon" +#: Client/core/CSettings.cpp:881 +msgid "Corona rain reflections" msgstr "" -#: Client/core/CKeyBinds.cpp:226 -msgid "Conversation yes" +#: Client/core/CSettings.cpp:910 +msgid "Enable remote websites" msgstr "" -#. 40 -#: Client/core/CKeyBinds.cpp:227 -msgid "Conversation no" +#: Client/core/CSettings.cpp:915 +msgid "Enable Javascript on remote websites" msgstr "" -#: Client/core/CKeyBinds.cpp:228 -msgid "Group control forwards" +#: Client/core/CSettings.cpp:920 +msgid "Custom blacklist" msgstr "" -#: Client/core/CKeyBinds.cpp:229 -msgid "Group control backwards" +#: Client/core/CSettings.cpp:931 Client/core/CSettings.cpp:966 +msgid "Enter a domain e.g. google.com" msgstr "" -#: Client/core/CCommandFuncs.cpp:24 -msgid "***[ COMMAND HELP ]***\n" +#: Client/core/CSettings.cpp:939 +msgid "Block" msgstr "" -#: Client/core/CCommandFuncs.cpp:158 -#, c-format -msgid "* The time is %d:%02d:%02d" +#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 +msgid "Domain" msgstr "" -#: Client/core/CCommandFuncs.cpp:242 -msgid "connect: Syntax is 'connect [ ]'" +#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 +msgid "Remove domain" msgstr "" -#: Client/core/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 -msgid "connect: Bad port number" +#. Reset vecTemp +#: Client/core/CSettings.cpp:955 +msgid "Custom whitelist" msgstr "" -#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 -#, c-format -msgid "connect: Connecting to %s:%u..." +#: Client/core/CSettings.cpp:974 Client/cefweb/CWebsiteRequests.cpp:51 +msgid "Allow" msgstr "" -#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 -#, c-format -msgid "connect: could not connect to %s:%u!" +#. Misc section label +#: Client/core/CSettings.cpp:997 +msgid "Misc" msgstr "" -#: Client/core/CCommandFuncs.cpp:281 -msgid "connect: Failed to unload current mod" +#. Fast clothes loading +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1010 +#: Client/core/CSettings.cpp:4803 +msgid "Fast CJ clothes loading:" msgstr "" -#: Client/core/CCommandFuncs.cpp:371 -msgid "Bound all controls from GTA" +#. Browser scan speed +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 +#: Client/core/CSettings.cpp:4805 +msgid "Browser speed:" msgstr "" -#: Client/core/CCommandFuncs.cpp:385 -msgid "Saved configuration file" +#. Single download +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 +#: Client/core/CSettings.cpp:4807 +msgid "Single connection:" msgstr "" -#. Print it -#: Client/core/CCommandFuncs.cpp:451 -#, c-format -msgid "* Your serial is: %s" +#. Packet tag +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 +#: Client/core/CSettings.cpp:4809 +msgid "Packet tag:" msgstr "" -#. Unknown command -#: Client/core/CCommands.cpp:216 -msgid "Unknown command or cvar: " +#. Progress animation +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1064 +#: Client/core/CSettings.cpp:4811 +msgid "Progress animation:" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Busy" +#. Process priority +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1077 +#: Client/core/CSettings.cpp:4801 +msgid "Process priority:" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Can't check for updates right now" +#. Debug setting +#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1091 +#: Client/core/CSettings.cpp:4813 +msgid "Debug setting:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1567 Client/core/CVersionUpdater.cpp:1587 -#: Client/core/CVersionUpdater.cpp:1605 -#, c-format -msgid "MTA:SA %s required" +#. Streaming memory +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1114 +#: Client/core/CSettings.cpp:4815 +msgid "Streaming memory:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1568 -#, c-format -msgid "" -"An updated version of MTA:SA %s is required to join the selected server.\n" -"\n" -"Do you want to download and install MTA:SA %s ?" +#. Update build type +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 +msgid "Update build type:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1588 -#, c-format -msgid "Do you want to launch MTA:SA %s and connect to this server ?" +#. UpdateAutoInstall +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 +msgid "Install important updates:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1606 -msgid "" -"It is not possible to connect at this time.\n" -"\n" -"Please try later." +#: Client/core/CSettings.cpp:1018 Client/core/CSettings.cpp:1046 +#: Client/core/CSettings.cpp:1059 Client/core/CSettings.cpp:3156 +#: Client/core/CSettings.cpp:3172 Client/core/CSettings.cpp:3179 +msgid "On" msgstr "" -#: Client/core/CVersionUpdater.cpp:1788 -msgid "Connecting" +#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 +msgid "Very slow" msgstr "" -#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 -msgid "Please wait..." +#: Client/core/CSettings.cpp:1032 Client/core/CSettings.cpp:1045 +#: Client/core/CSettings.cpp:1058 Client/core/CSettings.cpp:1072 +#: Client/core/CSettings.cpp:1098 Client/core/CSettings.cpp:1110 +#: Client/core/CSettings.cpp:1202 Client/core/CSettings.cpp:1222 +#: Client/core/CSettings.cpp:3163 Client/core/CSettings.cpp:3170 +#: Client/core/CSettings.cpp:3177 Client/core/CSettings.cpp:3186 +#: Client/core/CSettings.cpp:3199 +msgid "Default" msgstr "" -#: Client/core/CVersionUpdater.cpp:1804 -msgid "CHECKING" +#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 +msgid "Fast" msgstr "" -#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 -msgid "UPDATE CHECK" +#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 +msgid "Normal" msgstr "" -#: Client/core/CVersionUpdater.cpp:1822 -msgid "No update needed" +#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 +msgid "Above normal" msgstr "" -#: Client/core/CVersionUpdater.cpp:1839 -msgid "DOWNLOADING" +#: Client/core/CSettings.cpp:1121 +msgid "Min" msgstr "" -#: Client/core/CVersionUpdater.cpp:1840 -msgid "waiting..." +#: Client/core/CSettings.cpp:1134 +msgid "Max" msgstr "" -#: Client/core/CVersionUpdater.cpp:1856 -msgid "MANDATORY UPDATE" +#. Windows 8 compatibility +#: Client/core/CSettings.cpp:1141 +msgid "Windows 8 compatibility:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1857 -msgid "" -"To join this server, you must update MTA.\n" -"\n" -" Do you want to update now ?" +#: Client/core/CSettings.cpp:1145 +msgid "16-bit color" msgstr "" -#: Client/core/CVersionUpdater.cpp:1875 -msgid "OPTIONAL UPDATE" +#: Client/core/CSettings.cpp:1150 +msgid "Mouse fix" msgstr "" -#: Client/core/CVersionUpdater.cpp:1876 -msgid "" -"Server says an update is recommended, but not essential.\n" -"\n" -" Do you want to update now ?" +#. Cache path info +#: Client/core/CSettings.cpp:1168 +msgid "Client resource files:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1915 -msgid "" -"Update not currently avalable.\n" -"\n" -"Please check www.mtasa.com" +#: Client/core/CSettings.cpp:1172 +msgid "Show in Explorer" msgstr "" -#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 -msgid "ERROR SAVING" +#. Auto updater section label +#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 +msgid "Auto updater" msgstr "" -#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 -msgid "Unable to create the file." +#. Check for updates +#: Client/core/CSettings.cpp:1228 +msgid "Check for update now" msgstr "" -#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 -#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 -msgid "ERROR DOWNLOADING" +#: Client/core/CSettings.cpp:1382 +msgid "Some settings will be changed when you next start MTA" msgstr "" -#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 -msgid "The downloaded file appears to be incorrect." +#: Client/core/CSettings.cpp:1383 +msgid "" +"\n" +"\n" +"Do you want to restart now?" msgstr "" -#: Client/core/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 -msgid "For some reason." +#: Client/core/CSettings.cpp:1386 +msgid "RESTART REQUIRED" msgstr "" -#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 -msgid "DOWNLOAD COMPLETE" +#: Client/core/CSettings.cpp:1406 +msgid "Some settings will be changed when you disconnect the current server" msgstr "" -#: Client/core/CVersionUpdater.cpp:1990 -msgid " - Unknown problem in _DialogUpdateResult" +#: Client/core/CSettings.cpp:1407 +msgid "" +"\n" +"\n" +"Do you want to disconnect now?" msgstr "" -#: Client/core/CVersionUpdater.cpp:2081 Client/core/CSettings.cpp:4590 -msgid "CUSTOMIZED GTA:SA FILES" +#: Client/core/CSettings.cpp:1410 +msgid "DISCONNECT REQUIRED" msgstr "" -#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 -msgid "Ok" +#. Update the joystick name +#: Client/core/CSettings.cpp:1737 +msgid "Joypad not detected - Check connections and restart game" msgstr "" -#: Client/core/CVersionUpdater.cpp:2096 -msgid "ERROR" +#: Client/core/CSettings.cpp:1932 +msgid "Binding axis" msgstr "" -#: Client/core/CVersionUpdater.cpp:2097 -msgid "" -"Some MTA:SA data files are missing.\n" -"\n" -"\n" -"Please reinstall MTA:SA" +#: Client/core/CSettings.cpp:1932 +msgid "Move an axis to bind, or escape to clear" msgstr "" -#: Client/core/CVersionUpdater.cpp:2774 -#, c-format -msgid "%3d %% completed" +#: Client/core/CSettings.cpp:2009 +msgid "Language:" msgstr "" -#: Client/core/CVersionUpdater.cpp:2777 -#, c-format -msgid "" -"\n" -"\n" -"Waiting for response - %-3d" +#: Client/core/CSettings.cpp:2009 +msgid "Skin:" msgstr "" -#: Client/core/CCore.cpp:813 Shared/mods/deathmatch/logic/Utils.cpp:129 -msgid "Fatal error" +#: Client/core/CSettings.cpp:2009 +msgid "Presets:" msgstr "" -#: Client/core/CCore.cpp:938 -msgid "TO FIX, REMOVE THIS FILE:" +#: Client/core/CSettings.cpp:2058 +msgid "Chat" msgstr "" -#: Client/core/CCore.cpp:970 -#, c-format -msgid "%s module is incorrect!" +#: Client/core/CSettings.cpp:2075 +msgid "Load" msgstr "" -#: Client/core/CCore.cpp:1275 -msgid "Error executing URL" +#: Client/core/CSettings.cpp:2087 +msgid "Colors" msgstr "" -#: Client/core/CCore.cpp:1287 -#, c-format -msgid "Error running mod specified in command line ('%s')" +#: Client/core/CSettings.cpp:2088 +msgid "Layout" msgstr "" -#. m_pCommands->Add ( "e", CCommandFuncs::Editor ); -#. m_pCommands->Add ( "clear", CCommandFuncs::Clear ); -#: Client/core/CCore.cpp:1389 -msgid "this help screen" +#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 +msgid "Options" msgstr "" -#: Client/core/CCore.cpp:1390 Client/core/CCore.cpp:1391 -msgid "exits the application" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Background" msgstr "" -#: Client/core/CCore.cpp:1392 -msgid "shows the version" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Text" msgstr "" -#: Client/core/CCore.cpp:1393 -msgid "shows the time" +#: Client/core/CSettings.cpp:2095 +msgid "Input Background" msgstr "" -#: Client/core/CCore.cpp:1394 -msgid "shows the hud" +#: Client/core/CSettings.cpp:2095 +msgid "Input Text" msgstr "" -#: Client/core/CCore.cpp:1395 -msgid "shows all the binds" +#: Client/core/CSettings.cpp:2118 +msgid "Lines:" msgstr "" -#: Client/core/CCore.cpp:1396 -msgid "shows your serial" +#: Client/core/CSettings.cpp:2118 +msgid "Scale:" msgstr "" -#: Client/core/CCore.cpp:1405 -msgid "connects to a server (host port nick pass)" +#: Client/core/CSettings.cpp:2118 +msgid "Width:" msgstr "" -#: Client/core/CCore.cpp:1406 -msgid "connects to a previous server" +#: Client/core/CSettings.cpp:2121 +msgid "Size" msgstr "" -#: Client/core/CCore.cpp:1407 -msgid "binds a key (key control)" +#: Client/core/CSettings.cpp:2170 +msgid "after" msgstr "" -#: Client/core/CCore.cpp:1408 -msgid "unbinds a key (key)" +#: Client/core/CSettings.cpp:2170 +msgid "for" msgstr "" -#: Client/core/CCore.cpp:1409 -msgid "copies the default gta controls" +#: Client/core/CSettings.cpp:2170 +msgid "sec" msgstr "" -#: Client/core/CCore.cpp:1410 -msgid "outputs a screenshot" +#: Client/core/CSettings.cpp:2173 +msgid "Fading" msgstr "" -#: Client/core/CCore.cpp:1411 -msgid "immediately saves the config" +#: Client/core/CSettings.cpp:2179 +msgid "Fade out old lines" msgstr "" -#: Client/core/CCore.cpp:1413 -msgid "clears the debug view" +#: Client/core/CSettings.cpp:2219 +msgid "Horizontal:" msgstr "" -#: Client/core/CCore.cpp:1414 -msgid "scrolls the chatbox upwards" +#: Client/core/CSettings.cpp:2219 +msgid "Vertical:" msgstr "" -#: Client/core/CCore.cpp:1415 -msgid "scrolls the chatbox downwards" +#: Client/core/CSettings.cpp:2219 +msgid "Text-Align:" msgstr "" -#: Client/core/CCore.cpp:1416 -msgid "scrolls the debug view upwards" +#: Client/core/CSettings.cpp:2219 +msgid "X-Offset:" msgstr "" -#: Client/core/CCore.cpp:1417 -msgid "scrolls the debug view downwards" +#: Client/core/CSettings.cpp:2220 +msgid "Y-Offset:" msgstr "" -#: Client/core/CCore.cpp:1420 -msgid "shows the memory statistics" +#: Client/core/CSettings.cpp:2226 +msgid "Position" msgstr "" -#: Client/core/CCore.cpp:1421 -msgid "shows the frame timing graph" +#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 +msgid "Center" msgstr "" -#: Client/core/CCore.cpp:1425 -msgid "for developers: reload news" +#: Client/core/CSettings.cpp:2254 +msgid "Top" msgstr "" -#: Client/core/CQuestionBox.cpp:192 Shared/sdk/SharedUtil.Misc.hpp:688 -msgid "Do you want to see some on-line help about this problem ?" +#: Client/core/CSettings.cpp:2256 +msgid "Bottom" msgstr "" -#. Even the default skin doesn't work, so give up -#: Client/core/CGUI.cpp:86 -msgid "" -"The skin you selected could not be loaded, and the default skin also could " -"not be loaded, please reinstall MTA." +#: Client/core/CSettings.cpp:2304 +msgid "Font" msgstr "" -#: Client/core/CScreenShot.cpp:104 -#, c-format -msgid "Screenshot got %d bytes, but expected %d" +#: Client/core/CSettings.cpp:2341 +msgid "Hide background when not typing" msgstr "" -#: Client/core/CScreenShot.cpp:110 -msgid "Screenshot failed" +#: Client/core/CSettings.cpp:2346 +msgid "Nickname completion using the \"Tab\" key" msgstr "" -#: Client/core/CScreenShot.cpp:160 -#, c-format -msgid "Screenshot taken: '%s'" +#: Client/core/CSettings.cpp:2351 +msgid "Allow server to flash the window" msgstr "" -#: Client/core/CCredits.cpp:34 -msgid "Programming" +#: Client/core/CSettings.cpp:2356 +msgid "Allow tray balloon notifications" msgstr "" -#: Client/core/CCredits.cpp:63 -msgid "Contributors" +#: Client/core/CSettings.cpp:2361 +msgid "Chat text black/white outline" msgstr "" -#: Client/core/CCredits.cpp:84 -msgid "Game Design / Scripting" +#. Create a messagebox to notify the user +#. 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:2610 Client/core/CSettings.cpp:2617 +msgid "Press a key to bind, or escape to clear" msgstr "" -#: Client/core/CCredits.cpp:104 -msgid "Language Localization" +#: Client/core/CSettings.cpp:2611 +msgid "Binding a primary key" msgstr "" -#: Client/core/CCredits.cpp:110 -msgid "Patch contributors" +#: Client/core/CSettings.cpp:2618 +msgid "Binding a secondary key" msgstr "" -#: Client/core/CCredits.cpp:234 -msgid "Special Thanks" +#: Client/core/CSettings.cpp:2694 +msgid "GTA GAME CONTROLS" msgstr "" -#: Client/core/CCredits.cpp:265 -msgid "" -"This software and project makes use of the following libraries and software:" +#: Client/core/CSettings.cpp:2696 +msgid "MULTIPLAYER CONTROLS" msgstr "" -#: Client/core/CMainMenu.cpp:333 -msgid "" -"You are using a feature-branch build! This is a test build only which cannot " -"be used to connect to public servers!" +#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 +msgid "Your nickname contains invalid characters!" msgstr "" -#: Client/core/CMainMenu.cpp:352 -msgid "" -"MTA will not receive updates on XP/Vista after July 2019.\n" -"\n" -"Upgrade Windows to play on the latest servers." +#: Client/core/CSettings.cpp:3778 +msgid "Red:" msgstr "" -#: Client/core/CMainMenu.cpp:1193 -msgid "" -"This will disconnect you from the current server.\n" -"\n" -"Are you sure you want to disconnect?" +#: Client/core/CSettings.cpp:3778 +msgid "Green:" msgstr "" -#: Client/core/CMainMenu.cpp:1197 -msgid "DISCONNECT WARNING" +#: Client/core/CSettings.cpp:3778 +msgid "Blue:" msgstr "" -#. Create window -#: Client/core/CConsole.cpp:417 -msgid "CONSOLE" +#: Client/core/CSettings.cpp:3778 +msgid "Transparency:" msgstr "" -#: Client/core/CConnectManager.cpp:79 -msgid "Connecting failed. Invalid nick provided!" +#: Client/core/CSettings.cpp:3781 +msgid "Color" msgstr "" -#: Client/core/CConnectManager.cpp:110 -msgid "Connecting failed. Invalid host provided!" +#: Client/core/CSettings.cpp:3858 +msgid "Preview" msgstr "" -#: Client/core/CConnectManager.cpp:126 -#, c-format -msgid "Connecting to %s at port %u failed!" +#: Client/core/CSettings.cpp:4166 +msgid "Please disconnect before changing language" msgstr "" -#. Display the status box -#: Client/core/CConnectManager.cpp:147 -#, c-format -msgid "Connecting to %s:%u ..." +#: Client/core/CSettings.cpp:4194 +msgid "Please disconnect before changing skin" msgstr "" -#. Failed loading the mod -#: Client/core/CConnectManager.cpp:403 -#, c-format -msgid "No such mod installed (%s)" +#: Client/core/CSettings.cpp:4482 +msgid "" +"Volmetric shadows can cause some systems to slow down.\n" +"\n" +"Are you sure you want to enable them?" msgstr "" -#: Client/core/CConnectManager.cpp:411 -msgid "Bad server response (2)" +#: Client/core/CSettings.cpp:4486 +msgid "PERFORMANCE WARNING" msgstr "" -#: Client/core/CConnectManager.cpp:421 -msgid "Bad server response (1)" +#: Client/core/CSettings.cpp:4506 +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 "" -#. Create window (with frame) if it will fit inside the screen resolution -#: Client/core/CSettings.cpp:84 -msgid "SETTINGS" +#: Client/core/CSettings.cpp:4508 +msgid "SCREEN UPLOAD INFORMATION" msgstr "" -#: Client/core/CSettings.cpp:116 -msgid "Multiplayer" +#: Client/core/CSettings.cpp:4523 +msgid "" +"Some scripts may play sounds, such as radio, from the internet.\n" +"\n" +"Disabling this setting may decrease network\n" +"bandwidth consumption.\n" msgstr "" -#: Client/core/CSettings.cpp:117 -msgid "Video" +#: Client/core/CSettings.cpp:4526 +msgid "EXTERNAL SOUNDS" msgstr "" -#: Client/core/CSettings.cpp:118 -msgid "Audio" +#: Client/core/CSettings.cpp:4555 +msgid "" +"It seems that you have the Rich Presence connection option enabled.\n" +"Do you want to allow servers to share their data?\n" +"\n" +"This includes yours unique ID identifier." msgstr "" -#: Client/core/CSettings.cpp:119 -msgid "Binds" +#: Client/core/CSettings.cpp:4560 +msgid "CONSENT TO ALLOW DATA SHARING" msgstr "" -#: Client/core/CSettings.cpp:120 -msgid "Controls" +#: Client/core/CSettings.cpp:4584 +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" +"\n" +"However, CUSTOMIZED GTA:SA FILES ARE BLOCKED BY MANY SERVERS\n" +"\n" +"Are you sure you want to use them?" msgstr "" -#: Client/core/CSettings.cpp:121 -msgid "Interface" +#: Client/core/CSettings.cpp:4590 Client/core/CVersionUpdater.cpp:2081 +msgid "CUSTOMIZED GTA:SA FILES" msgstr "" -#: Client/core/CSettings.cpp:122 -msgid "Web Browser" +#: Client/core/CSettings.cpp:4633 +msgid "" +"Enabling DPI awareness is an experimental feature and\n" +"we only recommend it when you play MTA:SA on a scaled monitor.\n" +"You may experience graphical issues if you enable this option.\n" +"\n" +"Are you sure you want to enable this option?" msgstr "" -#: Client/core/CSettings.cpp:123 -msgid "Advanced" +#: Client/core/CSettings.cpp:4639 +msgid "EXPERIMENTAL FEATURE" msgstr "" -#: Client/core/CSettings.cpp:147 Client/core/CSettings.cpp:338 -#: Client/core/CSettings.cpp:617 Client/core/CSettings.cpp:889 -msgid "Load defaults" +#: Client/core/CSettings.cpp:4782 +msgid "Please enter a nickname" msgstr "" -#. * -#. * Controls tab -#. * -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 -msgid "Mouse sensitivity:" +#: Client/core/CSettings.cpp:4783 +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 "" -#. VerticalAimSensitivity -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 -msgid "Vertical aim sensitivity:" +#: Client/core/CSettings.cpp:4801 +msgid "Very experimental feature." msgstr "" -#. Mouse Options -#: Client/core/CSettings.cpp:160 -msgid "Mouse options" +#: Client/core/CSettings.cpp:4803 +msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" msgstr "" -#: Client/core/CSettings.cpp:167 -msgid "Invert mouse vertically" +#: Client/core/CSettings.cpp:4805 +msgid "Older routers may require a slower scan speed." msgstr "" -#: Client/core/CSettings.cpp:171 -msgid "Steer with mouse" +#: Client/core/CSettings.cpp:4807 +msgid "Switch on to use only one connection when downloading." msgstr "" -#: Client/core/CSettings.cpp:175 -msgid "Fly with mouse" +#: Client/core/CSettings.cpp:4809 +msgid "Tag network packets to help ISPs identify MTA traffic." msgstr "" -#. Joypad options -#: Client/core/CSettings.cpp:217 -msgid "Joypad options" +#: Client/core/CSettings.cpp:4811 +msgid "Spinning circle animation at the bottom of the screen" msgstr "" -#: Client/core/CSettings.cpp:230 -msgid "Standard controls (Mouse + Keyboard)" +#: Client/core/CSettings.cpp:4813 +msgid "Select default always. (This setting is not saved)" msgstr "" -#: Client/core/CSettings.cpp:237 -msgid "Classic controls (Joypad)" +#: Client/core/CSettings.cpp:4815 +msgid "Maximum is usually best" msgstr "" -#: Client/core/CSettings.cpp:274 -msgid "Dead Zone" +#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 +msgid "Auto updater:" msgstr "" -#: Client/core/CSettings.cpp:279 -msgid "Saturation" +#: Client/core/CSettings.cpp:4817 +msgid "Select default unless you like filling out bug reports." msgstr "" -#: Client/core/CSettings.cpp:285 -msgid "Use the 'Binds' tab for joypad buttons." +#: Client/core/CSettings.cpp:4819 +msgid "Select default to automatically install important updates." msgstr "" -#: Client/core/CSettings.cpp:324 -msgid "Left Stick" +#: Client/core/CSettings.cpp:4821 +msgid "16-bit color:" msgstr "" -#: Client/core/CSettings.cpp:330 -msgid "Right Stick" +#: Client/core/CSettings.cpp:4821 +msgid "Enable 16 bit color modes - Requires MTA restart" msgstr "" -#: Client/core/CSettings.cpp:345 -msgid "DESCRIPTION" +#: Client/core/CSettings.cpp:4823 +msgid "Mouse fix:" msgstr "" -#: Client/core/CSettings.cpp:346 -msgid "KEY" +#: Client/core/CSettings.cpp:4823 +msgid "Mouse movement fix - May need PC restart" msgstr "" -#: Client/core/CSettings.cpp:348 -msgid "ALT. KEY" +#: Client/core/CMainMenu.cpp:333 +msgid "" +"You are using a feature-branch build! This is a test build only which cannot " +"be used to connect to public servers!" msgstr "" -#. * -#. * Multiplayer tab -#. * -#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 -msgid "Nick:" +#: Client/core/CMainMenu.cpp:352 +msgid "" +"MTA will not receive updates on XP/Vista after July 2019.\n" +"\n" +"Upgrade Windows to play on the latest servers." msgstr "" -#: Client/core/CSettings.cpp:378 -msgid "Save server passwords" +#: Client/core/CMainMenu.cpp:1193 +msgid "" +"This will disconnect you from the current server.\n" +"\n" +"Are you sure you want to disconnect?" msgstr "" -#: Client/core/CSettings.cpp:383 -msgid "Auto-refresh server browser" +#: Client/core/CMainMenu.cpp:1197 +msgid "DISCONNECT WARNING" msgstr "" -#: Client/core/CSettings.cpp:388 -msgid "Allow screen upload" +#: Client/core/CScreenShot.cpp:104 +#, c-format +msgid "Screenshot got %d bytes, but expected %d" msgstr "" -#: Client/core/CSettings.cpp:393 -msgid "Allow external sounds" +#: Client/core/CScreenShot.cpp:110 +msgid "Screenshot failed" msgstr "" -#: Client/core/CSettings.cpp:398 -msgid "Always show download window" +#: Client/core/CScreenShot.cpp:160 +#, c-format +msgid "Screenshot taken: '%s'" msgstr "" -#: Client/core/CSettings.cpp:403 -msgid "Allow connecting with Discord Rich Presence" +#: Client/core/CCore.cpp:811 Client/loader/CInstallManager.cpp:1057 +#, c-format +msgid "MTA:SA cannot continue because drive %s does not have enough space." msgstr "" -#: Client/core/CSettings.cpp:408 -msgid "Use customized GTA:SA files" +#: Client/core/CCore.cpp:813 Shared/mods/deathmatch/logic/Utils.cpp:129 +msgid "Fatal error" msgstr "" -#: Client/core/CSettings.cpp:413 -msgid "Map rendering options" +#: Client/core/CCore.cpp:938 +msgid "TO FIX, REMOVE THIS FILE:" msgstr "" -#: Client/core/CSettings.cpp:419 Client/core/CSettings.cpp:628 -msgid "Opacity:" +#: Client/core/CCore.cpp:970 +#, c-format +msgid "%s module is incorrect!" msgstr "" -#. * -#. * Audio tab -#. * -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:448 -msgid "Master volume:" +#: Client/core/CCore.cpp:1275 +msgid "Error executing URL" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:467 -msgid "Radio volume:" +#: Client/core/CCore.cpp:1287 +#, c-format +msgid "Error running mod specified in command line ('%s')" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:486 -msgid "SFX volume:" +#. m_pCommands->Add ( "e", CCommandFuncs::Editor ); +#. m_pCommands->Add ( "clear", CCommandFuncs::Clear ); +#: Client/core/CCore.cpp:1389 +msgid "this help screen" msgstr "" -#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:505 -msgid "MTA volume:" +#: Client/core/CCore.cpp:1390 Client/core/CCore.cpp:1391 +msgid "exits the application" msgstr "" -#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:524 -msgid "Voice volume:" +#: Client/core/CCore.cpp:1392 +msgid "shows the version" msgstr "" -#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:565 -msgid "Play mode:" +#: Client/core/CCore.cpp:1393 +msgid "shows the time" msgstr "" -#: Client/core/CSettings.cpp:543 -msgid "Radio options" +#: Client/core/CCore.cpp:1394 +msgid "shows the hud" msgstr "" -#: Client/core/CSettings.cpp:549 -msgid "Radio Equalizer" +#: Client/core/CCore.cpp:1395 +msgid "shows all the binds" msgstr "" -#: Client/core/CSettings.cpp:554 -msgid "Radio Auto-tune" +#: Client/core/CCore.cpp:1396 +msgid "shows your serial" msgstr "" -#: Client/core/CSettings.cpp:559 -msgid "Usertrack options" +#: Client/core/CCore.cpp:1405 +msgid "connects to a server (host port nick pass)" msgstr "" -#: Client/core/CSettings.cpp:573 Client/core/CSettings.cpp:3087 -msgid "Radio" +#: Client/core/CCore.cpp:1406 +msgid "connects to a previous server" msgstr "" -#: Client/core/CSettings.cpp:574 Client/core/CSettings.cpp:3089 -msgid "Random" +#: Client/core/CCore.cpp:1407 +msgid "binds a key (key control)" msgstr "" -#: Client/core/CSettings.cpp:575 Client/core/CSettings.cpp:3091 -msgid "Sequential" +#: Client/core/CCore.cpp:1408 +msgid "unbinds a key (key)" msgstr "" -#: Client/core/CSettings.cpp:578 -msgid "Automatic Media Scan" +#: Client/core/CCore.cpp:1409 +msgid "copies the default gta controls" msgstr "" -#: Client/core/CSettings.cpp:585 -msgid "Mute options" +#: Client/core/CCore.cpp:1410 +msgid "outputs a screenshot" msgstr "" -#: Client/core/CSettings.cpp:591 -msgid "Mute All sounds when minimized" +#: Client/core/CCore.cpp:1411 +msgid "immediately saves the config" msgstr "" -#: Client/core/CSettings.cpp:596 -msgid "Mute Radio sounds when minimized" +#: Client/core/CCore.cpp:1413 +msgid "clears the debug view" msgstr "" -#: Client/core/CSettings.cpp:601 -msgid "Mute SFX sounds when minimized" +#: Client/core/CCore.cpp:1414 +msgid "scrolls the chatbox upwards" msgstr "" -#: Client/core/CSettings.cpp:606 -msgid "Mute MTA sounds when minimized" +#: Client/core/CCore.cpp:1415 +msgid "scrolls the chatbox downwards" msgstr "" -#: Client/core/CSettings.cpp:611 -msgid "Mute Voice sounds when minimized" +#: Client/core/CCore.cpp:1416 +msgid "scrolls the debug view upwards" msgstr "" -#. * -#. * Video tab -#. * -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 -msgid "Resolution:" +#: Client/core/CCore.cpp:1417 +msgid "scrolls the debug view downwards" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:683 -msgid "FOV:" +#: Client/core/CCore.cpp:1420 +msgid "shows the memory statistics" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:699 -msgid "Draw Distance:" +#: Client/core/CCore.cpp:1421 +msgid "shows the frame timing graph" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 -msgid "Brightness:" +#: Client/core/CCore.cpp:1425 +msgid "for developers: reload news" msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 -msgid "FX Quality:" +#. Even the default skin doesn't work, so give up +#: Client/core/CGUI.cpp:86 +msgid "" +"The skin you selected could not be loaded, and the default skin also could " +"not be loaded, please reinstall MTA." msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 -msgid "Anisotropic filtering:" +#: Client/core/CCredits.cpp:34 +msgid "Programming" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 -msgid "Anti-aliasing:" +#: Client/core/CCredits.cpp:63 +msgid "Contributors" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 -msgid "Aspect Ratio:" +#: Client/core/CCredits.cpp:84 +msgid "Game Design / Scripting" msgstr "" -#: Client/core/CSettings.cpp:648 -msgid "Windowed" +#: Client/core/CCredits.cpp:104 +msgid "Language Localization" msgstr "" -#: Client/core/CSettings.cpp:654 -msgid "DPI aware" +#: Client/core/CCredits.cpp:110 +msgid "Patch contributors" msgstr "" -#: Client/core/CSettings.cpp:669 Client/core/CSettings.cpp:1613 -msgid "Standard" +#: Client/core/CCredits.cpp:234 +msgid "Special Thanks" msgstr "" -#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 -msgid "Borderless keep res" +#: Client/core/CCredits.cpp:265 +msgid "" +"This software and project makes use of the following libraries and software:" msgstr "" -#: Client/core/CSettings.cpp:675 -msgid "Mip Mapping" +#. Create the window +#: Client/core/CNewsBrowser.cpp:153 +msgid "NEWS" msgstr "" -#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 -msgid "Low" +#. News link +#: Client/core/CNewsBrowser.cpp:171 Client/core/CNewsBrowser.cpp:172 +msgid "Visit latest news article" msgstr "" -#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 -msgid "Medium" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Busy" msgstr "" -#: Client/core/CSettings.cpp:745 Client/core/CSettings.cpp:1086 -#: Client/core/CSettings.cpp:1521 Client/core/CSettings.cpp:3145 -msgid "High" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Can't check for updates right now" msgstr "" -#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 -msgid "Very high" +#: Client/core/CVersionUpdater.cpp:1567 Client/core/CVersionUpdater.cpp:1587 +#: Client/core/CVersionUpdater.cpp:1605 +#, c-format +msgid "MTA:SA %s required" msgstr "" -#: Client/core/CSettings.cpp:761 Client/core/CSettings.cpp:784 -#: Client/core/CSettings.cpp:1017 Client/core/CSettings.cpp:1071 -#: Client/core/CSettings.cpp:1201 Client/core/CSettings.cpp:1527 -#: Client/core/CSettings.cpp:3152 Client/core/CSettings.cpp:3184 -#: Client/core/CSettings.cpp:3206 Client/core/CSettings.cpp:4234 -msgid "Off" +#: Client/core/CVersionUpdater.cpp:1568 +#, c-format +msgid "" +"An updated version of MTA:SA %s is required to join the selected server.\n" +"\n" +"Do you want to download and install MTA:SA %s ?" msgstr "" -#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 -msgid "1x" +#: Client/core/CVersionUpdater.cpp:1588 +#, c-format +msgid "Do you want to launch MTA:SA %s and connect to this server ?" msgstr "" -#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 -msgid "2x" +#: Client/core/CVersionUpdater.cpp:1606 +msgid "" +"It is not possible to connect at this time.\n" +"\n" +"Please try later." msgstr "" -#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 -msgid "3x" +#: Client/core/CVersionUpdater.cpp:1788 +msgid "Connecting" msgstr "" -#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1019 -#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 -msgid "Auto" +#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 +msgid "Please wait..." msgstr "" -#: Client/core/CSettings.cpp:801 Client/core/CSettings.cpp:1541 -msgid "4:3" +#: Client/core/CVersionUpdater.cpp:1804 +msgid "CHECKING" msgstr "" -#: Client/core/CSettings.cpp:802 Client/core/CSettings.cpp:1543 -msgid "16:10" +#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 +msgid "UPDATE CHECK" msgstr "" -#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 -msgid "16:9" +#: Client/core/CVersionUpdater.cpp:1822 +msgid "No update needed" msgstr "" -#: Client/core/CSettings.cpp:806 -msgid "HUD Match Aspect Ratio" +#: Client/core/CVersionUpdater.cpp:1839 +msgid "DOWNLOADING" msgstr "" -#: Client/core/CSettings.cpp:812 -msgid "Volumetric Shadows" +#: Client/core/CVersionUpdater.cpp:1840 +msgid "waiting..." msgstr "" -#: Client/core/CSettings.cpp:816 -msgid "Grass effect" +#: Client/core/CVersionUpdater.cpp:1856 +msgid "MANDATORY UPDATE" msgstr "" -#: Client/core/CSettings.cpp:820 -msgid "Heat haze" +#: Client/core/CVersionUpdater.cpp:1857 +msgid "" +"To join this server, you must update MTA.\n" +"\n" +" Do you want to update now ?" msgstr "" -#: Client/core/CSettings.cpp:824 -msgid "Tyre Smoke etc" +#: Client/core/CVersionUpdater.cpp:1875 +msgid "OPTIONAL UPDATE" msgstr "" -#: Client/core/CSettings.cpp:828 -msgid "Dynamic ped shadows" +#: Client/core/CVersionUpdater.cpp:1876 +msgid "" +"Server says an update is recommended, but not essential.\n" +"\n" +" Do you want to update now ?" msgstr "" -#: Client/core/CSettings.cpp:832 -msgid "Motion blur" +#: Client/core/CVersionUpdater.cpp:1915 +msgid "" +"Update not currently avalable.\n" +"\n" +"Please check www.mtasa.com" msgstr "" -#: Client/core/CSettings.cpp:837 -msgid "Full Screen Minimize" +#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 +msgid "ERROR SAVING" msgstr "" -#: Client/core/CSettings.cpp:849 -msgid "Enable Device Selection Dialog" +#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 +msgid "Unable to create the file." msgstr "" -#: Client/core/CSettings.cpp:861 -msgid "Show unsafe resolutions" +#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 +#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 +msgid "ERROR DOWNLOADING" msgstr "" -#: Client/core/CSettings.cpp:873 -msgid "Render vehicles always in high detail" +#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 +msgid "The downloaded file appears to be incorrect." msgstr "" -#: Client/core/CSettings.cpp:877 -msgid "Render peds always in high detail" +#: Client/core/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 +msgid "For some reason." msgstr "" -#: Client/core/CSettings.cpp:881 -msgid "Corona rain reflections" +#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 +msgid "DOWNLOAD COMPLETE" msgstr "" -#: Client/core/CSettings.cpp:910 -msgid "Enable remote websites" +#: Client/core/CVersionUpdater.cpp:1990 +msgid " - Unknown problem in _DialogUpdateResult" msgstr "" -#: Client/core/CSettings.cpp:915 -msgid "Enable Javascript on remote websites" +#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 +msgid "Ok" msgstr "" -#: Client/core/CSettings.cpp:920 -msgid "Custom blacklist" +#: Client/core/CVersionUpdater.cpp:2096 +msgid "ERROR" msgstr "" -#: Client/core/CSettings.cpp:931 Client/core/CSettings.cpp:966 -msgid "Enter a domain e.g. google.com" +#: Client/core/CVersionUpdater.cpp:2097 +msgid "" +"Some MTA:SA data files are missing.\n" +"\n" +"\n" +"Please reinstall MTA:SA" msgstr "" -#: Client/core/CSettings.cpp:939 -msgid "Block" +#: Client/core/CVersionUpdater.cpp:2774 +#, c-format +msgid "%3d %% completed" msgstr "" -#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 -msgid "Domain" +#: Client/core/CVersionUpdater.cpp:2777 +#, c-format +msgid "" +"\n" +"\n" +"Waiting for response - %-3d" msgstr "" -#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 -msgid "Remove domain" +#: Client/core/DXHook/CDirect3DHook9.cpp:124 +msgid "" +"Could not initialize Direct3D9.\n" +"\n" +"Please ensure the DirectX End-User Runtime and\n" +"latest Windows Service Packs are installed correctly." msgstr "" -#. Reset vecTemp -#: Client/core/CSettings.cpp:955 -msgid "Custom whitelist" +#. Create the window +#: Client/core/ServerBrowser/CServerBrowser.cpp:85 +msgid "SERVER BROWSER" msgstr "" -#. Misc section label -#: Client/core/CSettings.cpp:997 -msgid "Misc" +#: Client/core/ServerBrowser/CServerBrowser.cpp:134 +msgid "Local" msgstr "" -#. Fast clothes loading -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1010 -#: Client/core/CSettings.cpp:4803 -msgid "Fast CJ clothes loading:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:135 +msgid "Favourites" msgstr "" -#. Browser scan speed -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 -#: Client/core/CSettings.cpp:4805 -msgid "Browser speed:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:136 +msgid "Recent" msgstr "" -#. Single download -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 -#: Client/core/CSettings.cpp:4807 -msgid "Single connection:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:191 +msgid "" +"FOR QUICK CONNECT:\n" +"\n" +"Type the address and port into the address bar.\n" +"Or select a server from the history list and press 'Connect'" msgstr "" -#. Packet tag -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 -#: Client/core/CSettings.cpp:4809 -msgid "Packet tag:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:203 +msgid "HELP" msgstr "" -#. Progress animation -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1064 -#: Client/core/CSettings.cpp:4811 -msgid "Progress animation:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:252 +msgid "Refresh" msgstr "" -#. Process priority -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1077 -#: Client/core/CSettings.cpp:4801 -msgid "Process priority:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:253 +msgid "Add Favorite" msgstr "" -#. Debug setting -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1091 -#: Client/core/CSettings.cpp:4813 -msgid "Debug setting:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:254 +#: Client/core/ServerBrowser/CServerBrowser.cpp:301 +#: Client/core/ServerBrowser/CServerBrowser.cpp:372 +msgid "Connect" msgstr "" -#. Streaming memory -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1114 -#: Client/core/CSettings.cpp:4815 -msgid "Streaming memory:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:255 +msgid "Server information" msgstr "" -#. Update build type -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 -msgid "Update build type:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:256 +msgid "Search servers" msgstr "" -#. UpdateAutoInstall -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 -msgid "Install important updates:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:257 +msgid "Search players" msgstr "" -#: Client/core/CSettings.cpp:1018 Client/core/CSettings.cpp:1046 -#: Client/core/CSettings.cpp:1059 Client/core/CSettings.cpp:3156 -#: Client/core/CSettings.cpp:3172 Client/core/CSettings.cpp:3179 -msgid "On" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:258 +msgid "Start search" msgstr "" -#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 -msgid "Very slow" +#: Client/core/ServerBrowser/CServerBrowser.cpp:299 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1697 +msgid "Search players..." msgstr "" -#: Client/core/CSettings.cpp:1032 Client/core/CSettings.cpp:1045 -#: Client/core/CSettings.cpp:1058 Client/core/CSettings.cpp:1072 -#: Client/core/CSettings.cpp:1098 Client/core/CSettings.cpp:1110 -#: Client/core/CSettings.cpp:1202 Client/core/CSettings.cpp:1222 -#: Client/core/CSettings.cpp:3163 Client/core/CSettings.cpp:3170 -#: Client/core/CSettings.cpp:3177 Client/core/CSettings.cpp:3186 -#: Client/core/CSettings.cpp:3199 -msgid "Default" +#: Client/core/ServerBrowser/CServerBrowser.cpp:422 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1695 +msgid "Search servers..." msgstr "" -#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 -msgid "Fast" +#: Client/core/ServerBrowser/CServerBrowser.cpp:453 +msgid "Name" msgstr "" -#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 -msgid "Normal" +#: Client/core/ServerBrowser/CServerBrowser.cpp:454 +msgid "Players" msgstr "" -#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 -msgid "Above normal" +#: Client/core/ServerBrowser/CServerBrowser.cpp:455 +msgid "Ping" msgstr "" -#: Client/core/CSettings.cpp:1121 -msgid "Min" +#: Client/core/ServerBrowser/CServerBrowser.cpp:456 +msgid "Gamemode" msgstr "" -#: Client/core/CSettings.cpp:1134 -msgid "Max" +#. Player List Columns +#. Column for player names +#: Client/core/ServerBrowser/CServerBrowser.cpp:478 +#: Client/core/ServerBrowser/CServerInfo.cpp:138 +msgid "Player list" msgstr "" -#. Windows 8 compatibility -#: Client/core/CSettings.cpp:1141 -msgid "Windows 8 compatibility:" +#. Include label +#: Client/core/ServerBrowser/CServerBrowser.cpp:486 +msgid "Include:" msgstr "" -#: Client/core/CSettings.cpp:1145 -msgid "16-bit color" +#: Client/core/ServerBrowser/CServerBrowser.cpp:492 +msgid "Empty" msgstr "" -#: Client/core/CSettings.cpp:1150 -msgid "Mouse fix" +#: Client/core/ServerBrowser/CServerBrowser.cpp:498 +msgid "Full" msgstr "" -#. Cache path info -#: Client/core/CSettings.cpp:1168 -msgid "Client resource files:" +#: Client/core/ServerBrowser/CServerBrowser.cpp:504 +msgid "Locked" msgstr "" -#: Client/core/CSettings.cpp:1172 -msgid "Show in Explorer" +#: Client/core/ServerBrowser/CServerBrowser.cpp:516 +msgid "Offline" msgstr "" -#. Auto updater section label -#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 -msgid "Auto updater" +#: Client/core/ServerBrowser/CServerBrowser.cpp:529 +msgid "Other Versions" msgstr "" -#. Check for updates -#: Client/core/CSettings.cpp:1228 -msgid "Check for update now" +#: Client/core/ServerBrowser/CServerBrowser.cpp:550 +msgid "Back" msgstr "" -#: Client/core/CSettings.cpp:1382 -msgid "Some settings will be changed when you next start MTA" +#: Client/core/ServerBrowser/CServerBrowser.cpp:556 +#: Client/loader/Dialogs.cpp:135 +msgid "Help" msgstr "" -#: Client/core/CSettings.cpp:1383 -msgid "" -"\n" -"\n" -"Do you want to restart now?" +#: Client/core/ServerBrowser/CServerBrowser.cpp:741 +msgid "Loading..." msgstr "" -#: Client/core/CSettings.cpp:1386 -msgid "RESTART REQUIRED" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1240 +#: Client/core/ServerBrowser/CServerBrowser.cpp:2182 +msgid " ..loading.." msgstr "" -#: Client/core/CSettings.cpp:1406 -msgid "Some settings will be changed when you disconnect the current server" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 +msgid "No address specified!" msgstr "" -#: Client/core/CSettings.cpp:1407 -msgid "" -"\n" -"\n" -"Do you want to disconnect now?" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 +msgid "Unknown protocol" msgstr "" -#: Client/core/CSettings.cpp:1410 -msgid "DISCONNECT REQUIRED" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 +msgid "Please use the mtasa:// protocol!" msgstr "" -#. Update the joystick name -#: Client/core/CSettings.cpp:1737 -msgid "Joypad not detected - Check connections and restart game" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 +#: Client/core/ServerBrowser/CServerInfo.cpp:319 +#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 +#: Client/loader/MainFunctions.cpp:1219 +msgid "Information" msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Binding axis" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 +msgid "You have to select a server to connect to." msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Move an axis to bind, or escape to clear" +#. Create queue window +#: Client/core/ServerBrowser/CServerInfo.cpp:32 +#: Client/core/ServerBrowser/CServerInfo.cpp:302 +msgid "SERVER IS FULL" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Language:" +#. Determine our label draw position for L10n +#. Start position +#. Server Name +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:53 +msgid "Name:" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Skin:" +#. Server IP +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:64 +msgid "Server Address:" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Presets:" +#. Gamemode +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:75 +msgid "Gamemode:" msgstr "" -#: Client/core/CSettings.cpp:2058 -msgid "Chat" +#. Map +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:86 +msgid "Map:" msgstr "" -#: Client/core/CSettings.cpp:2075 -msgid "Load" +#. Players +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:97 +msgid "Players:" msgstr "" -#: Client/core/CSettings.cpp:2087 -msgid "Colors" +#. Passworded +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:108 +msgid "Passworded:" msgstr "" -#: Client/core/CSettings.cpp:2088 -msgid "Layout" +#. Latency +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:119 +msgid "Latency:" msgstr "" -#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 -msgid "Options" +#. Close button +#: Client/core/ServerBrowser/CServerInfo.cpp:144 +msgid "Close" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Background" +#. Join Game button +#: Client/core/ServerBrowser/CServerInfo.cpp:152 +msgid "Join Game" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Text" +#. Please enter password label +#: Client/core/ServerBrowser/CServerInfo.cpp:166 +msgid "Please enter the password to the server:" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Background" +#: Client/core/ServerBrowser/CServerInfo.cpp:177 +msgid "Join the server as soon as a player slot is available." msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Text" +#: Client/core/ServerBrowser/CServerInfo.cpp:310 +msgid "PLEASE ENTER SERVER PASSWORD" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Lines:" +#. The server has timed out +#: Client/core/ServerBrowser/CServerInfo.cpp:402 +msgid "Timed Out" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Scale:" +#. Set every GUI elements text to blank +#: Client/core/ServerBrowser/CServerInfo.cpp:431 +msgid "Querying..." msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Width:" +#: Client/core/ServerBrowser/CServerList.cpp:25 +msgid "Idle" msgstr "" -#: Client/core/CSettings.cpp:2121 -msgid "Size" +#: Client/core/ServerBrowser/CServerList.cpp:150 +msgid "player" +msgid_plural "players" +msgstr[0] "" +msgstr[1] "" + +#: Client/core/ServerBrowser/CServerList.cpp:151 +msgid "on" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "after" +#: Client/core/ServerBrowser/CServerList.cpp:154 +msgid "server" +msgid_plural "servers" +msgstr[0] "" +msgstr[1] "" + +#. We are polling for the master server list (first pass) +#: Client/core/ServerBrowser/CServerList.cpp:238 +#, c-format +msgid "Requesting master server list (%lu ms elapsed)" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "for" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:254 +msgid "Master server list could not be parsed." msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "sec" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:264 +msgid "Master server list could not be retrieved." msgstr "" -#: Client/core/CSettings.cpp:2173 -msgid "Fading" +#: Client/core/ServerBrowser/CServerList.cpp:274 +msgid "(Backup server list)" msgstr "" -#: Client/core/CSettings.cpp:2179 -msgid "Fade out old lines" +#: Client/core/ServerBrowser/CServerList.cpp:326 +msgid "Cannot bind LAN-broadcast socket" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Horizontal:" +#: Client/core/ServerBrowser/CServerList.cpp:345 +msgid "Attempting to discover LAN servers" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Vertical:" +#: Client/loader/Install.cpp:265 +msgid "Unknown" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Text-Align:" +#: Client/loader/Install.cpp:272 +#, c-format +msgid "" +"The file '%s' is currently locked by %zu processes.\n" +"\n" +"Do you want to terminate the following processes and continue updating?\n" +"\n" +"%s" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "X-Offset:" +#: Client/loader/Install.cpp:479 +#, c-format +msgid "" +"Your installation may be corrupt now.\n" +"\n" +"%zu out of %zu files could not be restored from the backup.\n" +"\n" +"You should reinstall Multi Theft Auto from www.multitheftauto.com\n" +"or try running the update with administrator rights." msgstr "" -#: Client/core/CSettings.cpp:2220 -msgid "Y-Offset:" +#: Client/loader/Install.cpp:852 Client/loader/Dialogs.cpp:901 +msgid "Installing update..." msgstr "" -#: Client/core/CSettings.cpp:2226 -msgid "Position" +#: Client/loader/Install.cpp:934 Client/loader/Dialogs.cpp:909 +msgid "Extracting files..." msgstr "" -#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 -msgid "Center" +#: Client/loader/Dialogs.cpp:134 +msgid "Quit" msgstr "" -#: Client/core/CSettings.cpp:2254 -msgid "Top" +#: Client/loader/Dialogs.cpp:151 +msgid "MTA: San Andreas has encountered a problem" msgstr "" -#: Client/core/CSettings.cpp:2256 -msgid "Bottom" +#: Client/loader/Dialogs.cpp:152 +msgid "Crash information" msgstr "" -#: Client/core/CSettings.cpp:2304 -msgid "Font" +#: Client/loader/Dialogs.cpp:153 +msgid "" +"Tick the check box to send this crash info to MTA devs using the 'internet'" msgstr "" -#: Client/core/CSettings.cpp:2341 -msgid "Hide background when not typing" +#: Client/loader/Dialogs.cpp:154 +msgid "Doing so will increase the chance of this crash being fixed." msgstr "" -#: Client/core/CSettings.cpp:2346 -msgid "Nickname completion using the \"Tab\" key" +#: Client/loader/Dialogs.cpp:155 +msgid "Do you want to restart MTA: San Andreas ?" msgstr "" -#: Client/core/CSettings.cpp:2351 -msgid "Allow server to flash the window" +#: Client/loader/Dialogs.cpp:162 +msgid "MTA: San Andreas - Warning" msgstr "" -#: Client/core/CSettings.cpp:2356 -msgid "Allow tray balloon notifications" +#: Client/loader/Dialogs.cpp:163 +msgid "" +"Your Grand Theft Auto: San Andreas install directory contains these files:" msgstr "" -#: Client/core/CSettings.cpp:2361 -msgid "Chat text black/white outline" +#: Client/loader/Dialogs.cpp:165 +msgid "" +"These files are not required and may interfere with the graphical features " +"in this version of MTA:SA.\n" +"\n" +"It is recommended that you remove or rename these files." msgstr "" -#. Create a messagebox to notify the user -#. 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:2610 Client/core/CSettings.cpp:2617 -msgid "Press a key to bind, or escape to clear" +#: Client/loader/Dialogs.cpp:167 +msgid "Keep these files, but also show this warning on next start" msgstr "" -#: Client/core/CSettings.cpp:2611 -msgid "Binding a primary key" +#: Client/loader/Dialogs.cpp:168 +msgid "Do not remind me about these files again" msgstr "" -#: Client/core/CSettings.cpp:2618 -msgid "Binding a secondary key" +#: Client/loader/Dialogs.cpp:169 +msgid "Rename these files from *.dll to *.dll.bak" msgstr "" -#: Client/core/CSettings.cpp:2694 -msgid "GTA GAME CONTROLS" +#: Client/loader/Dialogs.cpp:170 +msgid "Show me these files" msgstr "" -#: Client/core/CSettings.cpp:2696 -msgid "MULTIPLAYER CONTROLS" +#: Client/loader/Dialogs.cpp:171 +msgid "Play MTA:SA" msgstr "" -#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 -msgid "Your nickname contains invalid characters!" +#: Client/loader/Dialogs.cpp:177 +msgid "MTA: San Andreas - Confusing options" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Red:" +#: Client/loader/Dialogs.cpp:178 +msgid "NVidia Optimus detected!" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Green:" +#: Client/loader/Dialogs.cpp:179 +msgid "Try each option and see what works:" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Blue:" +#: Client/loader/Dialogs.cpp:180 +msgid "A - Standard NVidia" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Transparency:" +#: Client/loader/Dialogs.cpp:181 +msgid "B - Alternate NVidia" msgstr "" -#: Client/core/CSettings.cpp:3781 -msgid "Color" +#: Client/loader/Dialogs.cpp:182 +msgid "C - Standard Intel" msgstr "" -#: Client/core/CSettings.cpp:3858 -msgid "Preview" +#: Client/loader/Dialogs.cpp:183 +msgid "D - Alternate Intel" msgstr "" -#: Client/core/CSettings.cpp:4166 -msgid "Please disconnect before changing language" +#: Client/loader/Dialogs.cpp:184 +msgid "If you get desperate, this might help:" msgstr "" -#: Client/core/CSettings.cpp:4194 -msgid "Please disconnect before changing skin" +#: Client/loader/Dialogs.cpp:185 +msgid "If you have already selected an option that works, this might help:" msgstr "" -#: Client/core/CSettings.cpp:4482 -msgid "" -"Volmetric shadows can cause some systems to slow down.\n" -"\n" -"Are you sure you want to enable them?" +#: Client/loader/Dialogs.cpp:186 +msgid "Force windowed mode" msgstr "" -#: Client/core/CSettings.cpp:4486 -msgid "PERFORMANCE WARNING" +#: Client/loader/Dialogs.cpp:187 +msgid "Don't show again" msgstr "" -#: Client/core/CSettings.cpp:4506 -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" +#: Client/loader/Dialogs.cpp:194 Client/game_sa/CSettingsSA.cpp:831 +msgid "MTA: San Andreas" msgstr "" -#: Client/core/CSettings.cpp:4508 -msgid "SCREEN UPLOAD INFORMATION" +#: Client/loader/Dialogs.cpp:195 +msgid "Warning: Could not detect anti-virus product" msgstr "" -#: Client/core/CSettings.cpp:4523 +#: Client/loader/Dialogs.cpp:197 msgid "" -"Some scripts may play sounds, such as radio, from the internet.\n" +"MTA could not detect an anti-virus on your PC.\n" "\n" -"Disabling this setting may decrease network\n" -"bandwidth consumption.\n" +"Viruses interfere with MTA and degrade your gameplay experience.\n" +"\n" +"Press 'Help' for more information." msgstr "" -#: Client/core/CSettings.cpp:4526 -msgid "EXTERNAL SOUNDS" +#: Client/loader/Dialogs.cpp:200 +msgid "I have already installed an anti-virus" msgstr "" -#: Client/core/CSettings.cpp:4555 +#: Client/loader/Dialogs.cpp:202 msgid "" -"It seems that you have the Rich Presence connection option enabled.\n" -"Do you want to allow servers to share their data?\n" -"\n" -"This includes yours unique ID identifier." +"I will not install an anti-virus.\n" +"I want my PC to lag and be part of a botnet." +msgstr "" + +#: Client/loader/Dialogs.cpp:890 Client/loader/Utils.cpp:534 +msgid "Searching for Grand Theft Auto San Andreas" msgstr "" -#: Client/core/CSettings.cpp:4560 -msgid "CONSENT TO ALLOW DATA SHARING" +#: Client/loader/Dialogs.cpp:893 Client/loader/Utils.cpp:536 +msgid "Please start Grand Theft Auto San Andreas" msgstr "" -#: Client/core/CSettings.cpp:4584 -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" -"\n" -"However, CUSTOMIZED GTA:SA FILES ARE BLOCKED BY MANY SERVERS\n" -"\n" -"Are you sure you want to use them?" +#: Client/loader/Dialogs.cpp:914 Client/loader/Utils.cpp:1394 +msgid "Copying files..." msgstr "" -#: Client/core/CSettings.cpp:4633 -msgid "" -"Enabling DPI awareness is an experimental feature and\n" -"we only recommend it when you play MTA:SA on a scaled monitor.\n" -"You may experience graphical issues if you enable this option.\n" -"\n" -"Are you sure you want to enable this option?" +#: Client/loader/Dialogs.cpp:919 Client/loader/Utils.cpp:1454 +msgid "Copy finished early. Everything OK." msgstr "" -#: Client/core/CSettings.cpp:4639 -msgid "EXPERIMENTAL FEATURE" +#: Client/loader/Dialogs.cpp:924 Client/loader/Utils.cpp:1460 +msgid "Finishing..." msgstr "" -#: Client/core/CSettings.cpp:4782 -msgid "Please enter a nickname" +#: Client/loader/Dialogs.cpp:928 Client/loader/Utils.cpp:1462 +msgid "Done!" msgstr "" -#: Client/core/CSettings.cpp:4783 -msgid "" -"Please enter a nickname to be used ingame. \n" -"This will be your name when you connect to and play in a server" +#: Client/loader/Utils.cpp:600 +msgid "Select your Grand Theft Auto: San Andreas Installation Directory" msgstr "" -#: Client/core/CSettings.cpp:4801 -msgid "Very experimental feature." +#: Client/loader/Utils.cpp:968 Client/loader/CInstallManager.cpp:361 +#, c-format +msgid "" +"MTA:SA needs Administrator access for the following task:\n" +"\n" +" '%s'\n" +"\n" +"Please confirm in the next window." msgstr "" -#: Client/core/CSettings.cpp:4803 -msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" +#: Client/loader/Utils.cpp:1069 +#, c-format +msgid "Error loading %s module! (%s)" msgstr "" -#: Client/core/CSettings.cpp:4805 -msgid "Older routers may require a slower scan speed." +#: Client/loader/Utils.cpp:1502 +#, c-format +msgid "" +"New installation of %s detected.\n" +"\n" +"Do you want to copy your settings from %s ?" msgstr "" -#: Client/core/CSettings.cpp:4807 -msgid "Switch on to use only one connection when downloading." +#: Client/loader/Utils.cpp:1541 +#, c-format +msgid "GTA:SA had trouble opening the file '%s'" msgstr "" -#: Client/core/CSettings.cpp:4809 -msgid "Tag network packets to help ISPs identify MTA traffic." +#: Client/loader/Utils.cpp:1563 +#, c-format +msgid "GTA:SA is missing the file '%s'." msgstr "" -#: Client/core/CSettings.cpp:4811 -msgid "Spinning circle animation at the bottom of the screen" +#: Client/loader/Utils.cpp:1588 +msgid "GTA:SA had trouble loading a model." msgstr "" -#: Client/core/CSettings.cpp:4813 -msgid "Select default always. (This setting is not saved)" +#: Client/loader/Utils.cpp:1590 +msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." msgstr "" -#: Client/core/CSettings.cpp:4815 -msgid "Maximum is usually best" +#: Client/loader/Utils.cpp:1615 +msgid "GTA:SA had trouble adding an upgrade to a vehicle." msgstr "" -#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 -msgid "Auto updater:" +#: Client/loader/Utils.cpp:1634 +#, c-format +msgid "GTA:SA found errors in the file '%s'" msgstr "" -#: Client/core/CSettings.cpp:4817 -msgid "Select default unless you like filling out bug reports." +#: Client/loader/Utils.cpp:1716 +msgid "Did your computer restart when playing MTA:SA?" msgstr "" -#: Client/core/CSettings.cpp:4819 -msgid "Select default to automatically install important updates." +#: Client/loader/Utils.cpp:1781 +msgid "Please terminate the following programs before continuing:" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "16-bit color:" +#: Client/loader/MainFunctions.cpp:248 +msgid "" +"Trouble restarting MTA:SA\n" +"\n" +"If the problem persists, open Task Manager and\n" +"stop the 'gta_sa.exe' and 'Multi Theft Auto.exe' processes\n" +"\n" +"\n" +"Try to launch MTA:SA again?" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "Enable 16 bit color modes - Requires MTA restart" +#: Client/loader/MainFunctions.cpp:266 +msgid "" +"Another instance of MTA is already running.\n" +"\n" +"If this problem persists, please restart your computer" msgstr "" -#: Client/core/CSettings.cpp:4823 -msgid "Mouse fix:" +#: Client/loader/MainFunctions.cpp:269 +msgid "" +"Another instance of MTA is already running.\n" +"\n" +"Do you want to terminate it?" msgstr "" -#: Client/core/CSettings.cpp:4823 -msgid "Mouse movement fix - May need PC restart" +#: Client/loader/MainFunctions.cpp:294 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to revert to an earlier version?" msgstr "" -#. Create queue window -#: Client/core/ServerBrowser/CServerInfo.cpp:32 -#: Client/core/ServerBrowser/CServerInfo.cpp:302 -msgid "SERVER IS FULL" +#: Client/loader/MainFunctions.cpp:324 +msgid "" +"There seems to be a problem launching MTA:SA.\n" +"Resetting GTA settings can sometimes fix this problem.\n" +"\n" +"Do you want to reset GTA settings now?" msgstr "" -#. Determine our label draw position for L10n -#. Start position -#. Server Name -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:53 -msgid "Name:" +#: Client/loader/MainFunctions.cpp:339 +msgid "" +"GTA settings have been reset.\n" +"\n" +"Press OK to continue." msgstr "" -#. Server IP -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:64 -msgid "Server Address:" +#: Client/loader/MainFunctions.cpp:344 +#, c-format +msgid "File could not be deleted: '%s'" msgstr "" -#. Gamemode -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:75 -msgid "Gamemode:" +#. No settings to delete, or can't find them +#: Client/loader/MainFunctions.cpp:352 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to see some online help?" msgstr "" -#. Map -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:86 -msgid "Map:" +#. Inform user +#: Client/loader/MainFunctions.cpp:388 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Do you want to change the following setting?" msgstr "" -#. Players -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:97 -msgid "Players:" +#: Client/loader/MainFunctions.cpp:431 +msgid "" +"Are you having problems running MTA:SA?.\n" +"\n" +"Try disabling the following products for GTA and MTA:" msgstr "" -#. Passworded -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:108 -msgid "Passworded:" +#: Client/loader/MainFunctions.cpp:465 +msgid "" +"WARNING\n" +"\n" +"MTA:SA has detected unusual activity.\n" +"Please run a virus scan to ensure your system is secure.\n" +"\n" msgstr "" -#. Latency -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:119 -msgid "Latency:" +#: Client/loader/MainFunctions.cpp:468 +#, c-format +msgid "The detected file was: %s\n" msgstr "" -#. Column for player names -#. Player List Columns -#: Client/core/ServerBrowser/CServerInfo.cpp:138 -#: Client/core/ServerBrowser/CServerBrowser.cpp:478 -msgid "Player list" +#: Client/loader/MainFunctions.cpp:602 +msgid "" +"An instance of GTA: San Andreas is already running. It needs to be " +"terminated before MTA:SA can be started. Do you want to do that now?" msgstr "" -#. Close button -#: Client/core/ServerBrowser/CServerInfo.cpp:144 -msgid "Close" +#: Client/loader/MainFunctions.cpp:609 +msgid "" +"Unable to terminate GTA: San Andreas. If the problem persists, please " +"restart your computer." msgstr "" -#. Join Game button -#: Client/core/ServerBrowser/CServerInfo.cpp:152 -msgid "Join Game" +#: Client/loader/MainFunctions.cpp:632 +msgid "" +"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." msgstr "" -#. Please enter password label -#: Client/core/ServerBrowser/CServerInfo.cpp:166 -msgid "Please enter the password to the server:" +#: Client/loader/MainFunctions.cpp:638 +msgid "" +"The path to your installation of GTA: San Andreas contains unsupported " +"(unicode) characters. Please move your Grand Theft Auto: San Andreas " +"installation to a compatible path that contains only standard ASCII " +"characters and reinstall Multi Theft Auto: San Andreas." msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:177 -msgid "Join the server as soon as a player slot is available." +#: Client/loader/MainFunctions.cpp:648 +msgid "" +"The path to your installation of 'MTA:SA' or 'GTA: San Andreas'\n" +"contains a ';' (semicolon).\n" +"\n" +" If you experience problems when running MTA:SA,\n" +" move your installation(s) to a path that does not contain a semicolon." msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:310 -msgid "PLEASE ENTER SERVER PASSWORD" +#: Client/loader/MainFunctions.cpp:810 +msgid "" +"Load failed. Please ensure that the latest data files have been installed " +"correctly." msgstr "" -#. The server has timed out -#: Client/core/ServerBrowser/CServerInfo.cpp:402 -msgid "Timed Out" +#: Client/loader/MainFunctions.cpp:819 +#, c-format +msgid "Load failed. Please ensure that %s is installed correctly." msgstr "" -#. Set every GUI elements text to blank -#: Client/core/ServerBrowser/CServerInfo.cpp:431 -msgid "Querying..." +#: Client/loader/MainFunctions.cpp:826 +#, c-format +msgid "Load failed. Could not find gta_sa.exe in %s." msgstr "" -#. Create the window -#: Client/core/ServerBrowser/CServerBrowser.cpp:85 -msgid "SERVER BROWSER" +#: Client/loader/MainFunctions.cpp:836 +#, c-format +msgid "" +"Load failed. %s exists in the GTA directory. Please delete before continuing." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:134 -msgid "Local" +#: Client/loader/MainFunctions.cpp:845 +#, c-format +msgid "Main file has an incorrect name (%s)" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:135 -msgid "Favourites" +#: Client/loader/MainFunctions.cpp:856 +msgid "" +"Main file is unsigned. Possible virus activity.\n" +"\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:136 -msgid "Recent" +#: Client/loader/MainFunctions.cpp:882 +#, c-format +msgid "" +"Data file %s is missing. Possible virus activity.\n" +"\n" +"Consider reinstalling Multi Theft Auto for your security.\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:191 +#: Client/loader/MainFunctions.cpp:893 +#, c-format msgid "" -"FOR QUICK CONNECT:\n" +"Data file %s is modified. Possible virus activity.\n" "\n" -"Type the address and port into the address bar.\n" -"Or select a server from the history list and press 'Connect'" +"Consider reinstalling Multi Theft Auto for your security.\n" +"See online help if MTA does not work correctly." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:203 -msgid "HELP" +#: Client/loader/MainFunctions.cpp:907 +msgid "" +".asi files are in the 'MTA:SA' or 'GTA: San Andreas' installation " +"directory.\n" +"\n" +"Remove these .asi files if you experience problems with MTA:SA." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:252 -msgid "Refresh" +#: Client/loader/MainFunctions.cpp:1009 +msgid "" +"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:253 -msgid "Add Favorite" +#: Client/loader/MainFunctions.cpp:1018 +msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:254 -#: Client/core/ServerBrowser/CServerBrowser.cpp:301 -#: Client/core/ServerBrowser/CServerBrowser.cpp:372 -msgid "Connect" +#: Client/loader/MainFunctions.cpp:1030 +msgid "" +"MTA:SA is not compatible with Windows 'Safe Mode'.\n" +"\n" +"Please restart your PC.\n" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:255 -msgid "Server information" +#: Client/loader/MainFunctions.cpp:1123 +msgid "Fix configuration issue" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:256 -msgid "Search servers" +#. Try to relaunch as admin if not done so already +#: Client/loader/MainFunctions.cpp:1157 +msgid "Fix elevation required error" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:257 -msgid "Search players" +#: Client/loader/MainFunctions.cpp:1164 +#, c-format +msgid "" +"Could not start Grand Theft Auto: San Andreas. Please try restarting, or if " +"the problem persists,contact MTA at www.multitheftauto.com. \n" +"\n" +"[%s]" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:258 -msgid "Start search" +#: Client/loader/MainFunctions.cpp:1219 +msgid "" +"GTA: San Andreas may not have launched correctly. Do you want to terminate " +"it?" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:299 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1697 -msgid "Search players..." +#: Client/loader/CInstallManager.cpp:376 +#, c-format +msgid "" +"MTA:SA could not complete the following task:\n" +"\n" +" '%s'\n" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:422 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1695 -msgid "Search servers..." +#: Client/loader/CInstallManager.cpp:426 +msgid "" +"** The crash was caused by a graphics driver error **\n" +"\n" +"** Please update your graphics drivers **" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:453 -msgid "Name" +#: Client/loader/CInstallManager.cpp:532 +msgid "Install updated MTA:SA files" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:454 -msgid "Players" +#: Client/loader/CInstallManager.cpp:552 +msgid "" +"Could not update due to file conflicts. Please close other applications and " +"retry" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:455 -msgid "Ping" +#: Client/loader/CInstallManager.cpp:561 +#, c-format +msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:456 -msgid "Gamemode" +#: Client/loader/CInstallManager.cpp:613 +msgid "Create GTA:SA junctions" msgstr "" -#. Include label -#: Client/core/ServerBrowser/CServerBrowser.cpp:486 -msgid "Include:" +#: Client/loader/CInstallManager.cpp:657 +msgid "MTA:SA cannot launch because copying a file failed:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:492 -msgid "Empty" +#: Client/loader/CInstallManager.cpp:663 Client/loader/CInstallManager.cpp:703 +msgid "MTA:SA cannot launch because an MTA:SA file is incorrect or missing:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:498 -msgid "Full" +#: Client/loader/CInstallManager.cpp:672 +msgid "Copy MTA:SA files" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:504 -msgid "Locked" +#: Client/loader/CInstallManager.cpp:695 Client/loader/CInstallManager.cpp:773 +msgid "MTA:SA cannot launch because a GTA:SA file is incorrect or missing:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:516 -msgid "Offline" +#: Client/loader/CInstallManager.cpp:780 +msgid "Patch GTA:SA dependency" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:529 -msgid "Other Versions" +#: Client/loader/CInstallManager.cpp:828 +msgid "" +"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:550 -msgid "Back" +#: Client/loader/CInstallManager.cpp:832 +msgid "" +"Please check your anti-virus for a false-positive detection, try to add an " +"exception for the GTA:SA executable and restart MTA:SA." msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:741 -msgid "Loading..." +#: Client/loader/CInstallManager.cpp:838 +msgid "Generate GTA:SA" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1240 -#: Client/core/ServerBrowser/CServerBrowser.cpp:2182 -msgid " ..loading.." +#: Client/loader/CInstallManager.cpp:853 +msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 -msgid "No address specified!" +#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 +msgid "Patch GTA:SA" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Unknown protocol" +#: Client/loader/CInstallManager.cpp:876 +msgid "MTA:SA cannot launch because patching GTA:SA has failed:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Please use the mtasa:// protocol!" +#: Client/loader/CInstallManager.cpp:1113 +msgid "Missing file:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -msgid "You have to select a server to connect to." +#: Client/loader/CInstallManager.cpp:1117 +msgid "If MTA fails to load, please re-install GTA:SA" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:25 -msgid "Idle" +#: Client/loader/CInstallManager.cpp:1152 +msgid "Update install settings" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:150 -msgid "player" -msgid_plural "players" -msgstr[0] "" -msgstr[1] "" - -#: Client/core/ServerBrowser/CServerList.cpp:151 -msgid "on" +#: Client/loader/CInstallManager.cpp:1305 +msgid "Update compatibility settings" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:154 -msgid "server" -msgid_plural "servers" -msgstr[0] "" -msgstr[1] "" +#. Couldn't create render target for CPostEffects +#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 +msgid "Problem with graphics driver" +msgstr "" -#. We are polling for the master server list (first pass) -#: Client/core/ServerBrowser/CServerList.cpp:238 -#, c-format -msgid "Requesting master server list (%lu ms elapsed)" +#: Client/game_sa/CSettingsSA.cpp:753 +msgid "Can't find valid screen resolution." msgstr "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:254 -msgid "Master server list could not be parsed." +#. Confirm that res should be used +#: Client/game_sa/CSettingsSA.cpp:829 +msgid "Are you sure you want to use this screen resolution?" msgstr "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:264 -msgid "Master server list could not be retrieved." +#: Client/cefweb/CWebsiteRequests.cpp:19 +msgid "Website requests" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:274 -msgid "(Backup server list)" +#: Client/cefweb/CWebsiteRequests.cpp:27 +msgid "" +"The server requests the following websites in order to load them (later):" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:326 -msgid "Cannot bind LAN-broadcast socket" +#: Client/cefweb/CWebsiteRequests.cpp:33 +msgid "NEVER ENTER SENSITIVE DATA TO PROTECT THEM FROM BEING STOLEN" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:345 -msgid "Attempting to discover LAN servers" +#: Client/cefweb/CWebsiteRequests.cpp:46 +msgid "Remember decision" msgstr "" -#: Client/core/DXHook/CDirect3DHook9.cpp:124 -msgid "" -"Could not initialize Direct3D9.\n" -"\n" -"Please ensure the DirectX End-User Runtime and\n" -"latest Windows Service Packs are installed correctly." +#: Client/cefweb/CWebsiteRequests.cpp:57 +msgid "Deny" msgstr "" #. Populate the message and show the box diff --git a/Shared/data/launchers/CEFLauncher.exe b/Shared/data/launchers/CEFLauncher.exe index 3b206474d1d1e8ebb2779902a031368dcb83b2f6..8c8babb2856edbc9abf36965796cdbdb21712d7a 100644 GIT binary patch delta 1440 zcmZqp&D!vrb%G6}z(iZ;dQZdqF1!I7#bMY@W0M#=kng6kMXVW2ZxxdS(&sL3g3?>X zrdwKCrqCV*EgwH(-N!JXm~-7!R2C6Nk{7!Tg}i=|5K)gnukztJ_BS;9O z2Q0?}WQ%~X0V9Km6kKlmd2z;vi~_Bji>(j#W_s*yE2~_%%D-*<0ZB#yX|DVTh{F7c z>9oYnbek_N?HiABEo3Ul+PHQ7W-0wS4vde>JbJICYCu?cLXUYx2(fC7zk@ z&Ygd~%q``Uib?ksyDyf7pYE6F?EGFejo`+D}%((vCFG6j)gu^V;jH6NXlJ@EQgWYL5>5owzyT`@QCY}hA@knn;{9?wtt#7cHun5{nFwBqTnb1Qd-CRPLg_6^-kXn}wBq10Jq- zw=fFYc67_P%t^n$$i}bo`tUXL*}^}%d+xMvG}c_6sW|;a730==zM~UDous3M?=rfH ztvV{(F1(QYhm4XOBU?#oda_G#(-~6_+vVZ+x7>Dr)Vk99{OU`~eiJkdHlYMMD=Wl-Ev&e0>i`q*Y{q57Qi7Om< zXOp-`Kj^L1`d$OaU5mP>ggmboNfY^+Kd+`&wny{&7lF3j++ryc*;V-LpIg*P%hpIt zpJedzmEN8CnRylLf*zjghgV+S70Xh0@!PKD&8}ffZ72S$i4SA^pZ#a8wPsiSrgf(O zr?C2WtIuwhbZ@z|ZmrDP3F*z}UOap&;46G1J2t>!|KpB4hwrD?IF#j``?~oI^MdpOg39LM*=T+ha|Hp@wlOAj8G&1J(lojs^d8j;M}7;{@LIY=bTrA$tQ(Uf~M zgyY^S9E&_ITT&F&O0J!RgJcfp;S8s~&+~p>pZDkeexA>N-^5LD;wCuD29VFTwPUs# zkJ~RhHzL335v~cbDe;eREePf=TM;u7nhKl#XDecA*S8=>C7cvAAXavJ4TvuiE;~0M z%XjxJh^1XRA@|t4>s`2gwZI5gGu&4}8yf&yc_bpfYWJse}@zfQq`}1Zl50LE^kI2U5Z2AS)1#<8J}r_C{Wr1uz8H%nar0)Wt+~qbLDugMtI> zkedl|N6Hk8_mK!}g*)2@yzCPI1jW2UqN^9*Fe217nsBi?+g+Z4UFfR2qzH(}yNbsO z3`Ij^6%103r-~r}0DwU<$v|RyxD(3_ypiD=t-A4Ht=bpwNGte>?7I|gMy0kWTOB4Z zySjCD4vtXanolUOW>#8h@&z|N-Orr!*vM5%E9V`#G5lT@{b&v@T$Xu_KCUSqJvXNW zSIi!$H=Q2lp43G|%SPEHRWt^=v(jth{8wFaUYZU69hH(OPK{blQYHA6a0}z)Ma3qo ziB_n$g7~42K_dK1Czu)0fQEc`p`iS1T!o?Ky2m}zlsLUe+yA((&44=+I$iy|M@U~u zIgNW>J*Vum=eIGxhe6-0j;#Pkd$aa~XFg6gy*RmW{a7hi<8f$GPNiHJ zBu)ANv4_p+iv?PlmoBZ+_Un-iUQ9bZl&bXzH*#w|p?d${Ggn?I655L1?bmaZQuhV)vdX%89?5?VM+8>Q#%4kExkAw%IglP-Cf_ zE9t)8)X5~$Z^P2IjMORURt>oP#!cr4zlgG>IX}mrl^Kz$*2}!I(M4zKLSRSeRkaIo zU4qkiou^8bW1p^m4y2ZRwllNwtl1Wjw=n3HXPICqL~OYfArFh8Yz?#vxXqp<= K&w3IhU)XqY);Od(4_Jmt1m*EhM)NL(*|< z5m9aKNm=PR?n0CkU5*L0GtTXK&i8rV&+Bu2fByR>jmssC%jMw!g?!WFlq-H}7979< z{*Q9woe;f(JU8ABLE5D)f-9g%@;x|vmrjVmUE2OlJH*Z1IXq%WKn{S1`v^EfwcGU> zp*kRT_C}~JyZanqe3v6s$DR5ixGT{=c;`6if6v((1PZ7Z0fkB5F5C;?g{;oDgaElh zRl+vlMairbuzfn%9uP=~1-1u&bTSdl1@2e~2^1hub|)B=%>eI|c06`_5`tJ(pfy2n z?Y|yNrv!Xf8ix901)-uC_*|;F&-uo;#PkXVm{q|L_IoTAehS#}0fnEUiG@PaAO;{k zkP)pY6oUOLWIYdsR7k4)9CjsLzUH_|vrXek0ssI32`2+d zuw>NBJDjvw@r)#XXgKo4$B1t{Uq`)ugu$1DxTwnR)EToRPRMDuaDTvm(XDL(5mQsv z{N$c@gWiJ`b$TFms*?h9(bv=-wmFHVoO<3wnPa+Sx^4JbPt&vNFhfsM&d;?bQy(py zn_V#v-}HcFD=84w-ke@F(9O^=T9uTU>W^CDyE2zHxQpg)9%8+h*xs!E9PPbu$45i+ ziw7$7jFkB^(~U=GW-H^o9W$NU<|}7X_(9W$n=O#AIb+3V)%kq(n(W1{RLn93X1F50 znB^Yvhhog|j~M;pBZTwiW1~4GNQ@H=zrOnr~!R ztz_t`zj!Wb?RU5Px=nZ&LVsW&bt}GPD}FhWeP1kWda;=~DU6@EJKRPxb0!mtOylzM zq8}~y^b{I~tp7yfA=}Ii&|}zxcWEv~5VFy8{{x|#b2wUGW(4(>MZ!`d%VcAaHFQ5z zsS&ARiK7UKiq$2W&95aZNTYSp7+owHi_%AjW{rO;Dww*30q z4w?AJxCVCF7uPArY0WL5|VEdNK z`ASWi%qo}UR|(JMNDfeX#eC}`KhsS|wf1)fsZgZDF>uzV`Yo4kk^@pvPpe!fkxuKg z9QWewssC=~S@5;2He|c}kjl34W%4G0s7fs3wG?0xYewJn#HI7v@>J$+-tRwFdtLGN zT7XU@Kg;&(;d!=GMrV6>#9*!wxf6O-Yqrr9W(l>mle|m%R zfE44?`<00^(8`H9Ge(Ps6YV4aKEm8Bdf`ScUs;R#uV$yq(u2Rjg6qqu>9 z;l>`#R|;ZQ$SAHV*~)QEzCfZ~>GT&Cl}B zI&`e&JyY-c84^XcZ#tEBpBcrQon~VBw;N;Kp9EMO?8y{ za8q4WrF-1eI@x|LFd-v1^^~-(jdH&nK#?8?{qx*xL7>1&1rT1z|E4}bkb4+i7YXFZ zZ0007#X8?3) zPD_kDOGw;hzO`0dglruj{xNG<iSB zKI*&1ZC{6et~XpgpIk~SLXVuC5wCmfa)F$>-npos&v`6oqy8Qq^UB!A_}wP$ts_kk zGJOZuDq4Z9tT)5@$R-0F>*^V2*ySSdoJil(>m{)#afS1XMyEpGlI0KWhsyZWvd7}P z?r1Z2r#d9~STm}lC*VEu`T6JA2MvuM2`7x-MU)qvIOuleW7g*;!60#_dVNVS0(G9p z`ArlZzX)bp20yY(-r+pY3jf1oOS5qtA+mKx5maUb+hRY;Z=4TYth7Mpm?w#KiF7`G za0d=a^mr3XEuMQvN%nc&mhxb!o_)FiLdAPlK;PUZP!4?V;^~usuaM9r8xW9anC-4) z(?SYHF33UQ6$xhI3Kkl91akz7F~OJ|#veI~#R{N>5OX!f|8h2=65@>cJ*Yi!7Cmav zHL%KXd$6oC-u!h$3x`R8Q9DZ3FbKf_p|HTH%YI$V+c%9HHtbtNa2A)vK`8m3+&&D&Bh4*jWr%NHOsf%?8v zx-27+PL%DYNu+$HCvFj&<2O(MkKj|G-PGmpRm7mNkip4Mc2?`!Po5D{6gUcQufX1q z_-{kfM!B`2PxkYyz%&HLTQ90f+0a9M%JkgPE%U9UzQiy>Z9rLco`o0rO|RCdg_baW zNjqRQ!`G|pBoiJ`?MGQqcYxDKTyf;?FiZm7H{y%yrTE#<%{uWomfgWbtwNjCmuqyhy8ahy{bX`1!bOW_3}s`h87avy(kI z4yl?nzOr(c#zGhDv34Gb;!MMA5^IdR>88V%1$6s}Fk!|acxiD{#g09Tp`T{Fo(Kmbk<_P|2j%mI?G!}|?(Qzzz>%WFBA!o31zv?F6^H-)@P5Q9S qt_3UQKci^F@Gb7U$AmqJo#nTSKd=lHgI-+I`Va%1L(WP6v%dfmB6&yv diff --git a/Shared/data/launchers/MTA Server.exe b/Shared/data/launchers/MTA Server.exe index c997fb91d1f261e1768a9d9e739424a379d38e34..be07ece63d15a66cc6779f5bff0bea8e3ede242e 100644 GIT binary patch delta 1466 zcmX|>c{mhk9LMK!3?@0+W@H?R5@Lpo5n>FL+vKi>aXmz)CC8#>WHD0i8f|i9(8}hR zWr%S#&Zc$Ex^k5xm2;VpU3S=Kd!Og~e16CKeSgpIpO?BRL*0}~Hv%eU7@JdU0a7ba z5~cBf;SjNGAwiBqM6#W=;s>O#_kHqn)B``1v~WQAx!e17Xd@xeCt!bghB92-!2$rV0SW=;_ZV3!KwD6) zDKiw92&#r0GX#;{;*lmvNE09nX#(o(Jtw&14-g!XKz;&oPk;ejIC#Ib??32C2x3`* z^i;tBJ;e7OOYso6O6+hs)Hi3U)Wj}6Lhrr)j(btkG#t#DhC`H6#K>;I{dWLlH@X-D zk|?AP&;?-W4;c{5e<7=%0Vz;XvgdDtOVFY&RT_5rA>KOx&id^7uGXuXR~6JY`+>b6 zRz?>DhM-8}3AUuSMs=m~mXI@A3KD9#jjc!g9|sYdCWBYG?UOn%Vd&|^i;0^sAW*P9 z{p6{i;;-b|Pv{juYUc7@XSSxk z&eUI*%Suxn5y~O0k6+6@_g0UE88#@NFo5$~@T9)ZKug({DZJ zGNJct1%mgqbe`N9dFVwruT1Qua7$E)6~XD#?z4+*<)EsNf?M*z{OT${6;~{wGZ3kC ziQ<*Te8a?rx6)h{zO6{;@K)-D2I*<4ykN8WhAVvr(sV{n*<}~Zqt-RU0YmITyakdNldffi9FRI)EYK#{6!)&-KU{4kX{Va4*R9aiZ!y4 zGngSyyI!8O`8tkXL#wVG1CXMJj(Ac5TcXL=-A#Swum@x;hA{XLS9}fl4Vk71= zQwWI=g`v#?{non>u7q6AnA(Ch4=&*g-EjtT8%v65fIjx%Ob#YIa#^?$hF6amf``VD z$45)dkvz=SN05lv^H>wE8wDTv6M2wos#P>e@sqoXWw#@QTP+9vS$3>=M|d3Rn+80^KqY()%PnKF`rb6zG&D7< zLpI9Ua754puq=C3&hV!Alkr%;CaG(V$J<|8t~FO*PUslX?^_7mrKzj1S{4hXb15b# zlZq~U4Ng$@ima&N4CRcXiKEk$r>vvm!rR!{=sFE6XOv8=tpcwt&TtVFQ194|?Klt8 zVBjkqF;^(Iw2bQA$*R7msRpR3@IP;IkBB!F*5tLDSrBJqpBZ|e>d>X4_h!D9J=iFa zWokv`SCU1?js{@zp`ZUI0vNso-9?PX@PIuN;@avFFL`4RKQy{pe3lYce$?NjgVqe( zGw)tbS#EQa$#0oK%iaeU`j5Ldh(5XRs9kH*gRX&WgkatIWk2U++nL`(hg{z_%Ie+< zQ1z7@%vu=6bB>|Hd#-Xq<9qwIUPcbIxG46@s$I~}xjS80n#0^XA%TZabX694>kO4! zga63kw)MZDiMbu9HSc|6k%9LIMt#+anWa@6RN$P9DyAfd4E6mrfL9X!e-HuIair^%6HJQALVlF0oi z8IKM*<|uiJgvr?wS~It2Jg@q`UZ27?()iLezI3`V7@c8a3Dkh47I;2D^LMqN zqnWFMxCKpS>h6-l92b!AF|PUBE~A^NDHp7I1o!%;fJ9 zVD8LKPttbhc|NndoSvlafVxgfsDbV+txWL~lkd6uzq$B&I)~F}} ztwEr`)I*t_&3A3e64e6UiJ;b!$I;NnaWqVcj$pfhclLnTE(}BoEJ;WQWB}4*WS7A7 z{&yQ+mB5OyO4MmPvV+yk8<)_W6B25BR`+Sw+ha5X>anCRWri!UM;kLbU`ScuIwOy| zpc@t^IrBWN=Pqv9rr%4GW0Ah(%?+y@=NGi#kiw#BNj6D*Bp3`90>R?Iv3utq9xu}_O<&_w2C{kEsB`@>r?iK!zvz{%PHA13@-UiOtB5$%G`V0iA7!i;^fEFR zkp8*F=}tw6um2@X4kwIER|Z&XK%`O%tLx9eap2}|kR&*!|c&kCmWHd}uY$ zG_nD7PerEBjSu82Y@9bqwa@PF$)Cd>S#4CDM?M=(TKSUk1Pn*oniaSi5Q9XP++=)P zp{A(fI`>Sx#C*z-*`ifbVUO2`cV~-*Sc$!&YJGAwG+$e6nS#Os;H|u+9;#vaZ#W`T zI%_V~{#Gn$HV~-j)GDy9>hlbjNb)G%9L-cxxEC$PLJ&_`mpf|NW$T}-tb{`uojfP% z^Y^dMSbU-^t4I29&q}h>YJI1l3=cUX{=uyN#tth=&2@Y|pr9R6USJEGA2i>dLgI^| zzD=2*p_*mzq9+uBY@rJMTKL#Gq`6asFe~qL)G`=PSaK5I3mizXL2i2lc1v`E+8;eQ zy6rA?`tlg|V_nhZ-eiX3M;O&$028_%!0Z)XMJGIdA$bzkPo{JrEW8!3Myb7W^b)=X zfg{SIjfT!((UN!^UI$0O5w!HR^mPf1@JX1-UeO;h!+r&J3OAt|`fPvILE;U&?j?^4 zYF=3!nT)Hq$JLL!DL8+sQ-_q^^>;W;m-s8!-1inyF5jHdu>xxVW}j!yPP*B)qMPNtCy+RN!8 z=Z}?n*4c$R^+w45v3PxGdAN;w2z3!FmL+qfpO%-XufvynJ8Jo$0&nBhQ4wd2gonr( z%2l1876*iuhp98UyDUVM(`m~(r3MvGh22%&FfHIb~9UX-LFhV%5F z@-TLtXcnRA7JgOVs#JKUPT})|jb^Pd&SQ&J)htbqeNuse>2H$fZq^4x7cg8jeCV|J n*N)ll-N3RK(zWg23CN2s3~!OXheI35VUI?^D@jmi!8iI3vxBN3 diff --git a/Shared/data/launchers/MTA Server64.exe b/Shared/data/launchers/MTA Server64.exe index c2acfcfc44d66a3c8254db68654f2144f0da2bf2..daa94651681542d0efdc326f6029c2c0d7e8237d 100644 GIT binary patch delta 1470 zcmX|>c{tR09LMK0%{WFw?$Nko(YQ^n@Eb}jIY(ApU?Yq{r8P$NXIjzv&_M`Yzteer&^yh24Dd{ zys%DNrIHqJv2kKOl>^ zKZoczcQB6u^bd&WDBt&yfNNOb#r@;iN;1MOL=Y&5CIr$GVck~&J3&@#>#u-mkUE&t zNeG#g=nSMd17Lw59A^Lu_cs&tg@6PPB2a)pW5ZC;7zesye4uU0sz z22Byc-YK)hAk;%wS+(gexv0y7kp#@F&kiqxnTx(gHs-Q&QfpO!p@pgF zOQ=KNRIzpAicg-uFeGnb7IT?J)a?A4tM*$%WUjVY{5$6`%e6YH-O9}=CLk#$={Zi> z>1-_;Y14gy-5X>V$R&xzWwd*hPUb(ZaKld{u_tsQb-B6AYRTR^>ja}Na%jZojw#2b z!|sJo6fC3t=o00-nkbSkEp5-rT20e#GaZ;TF5~irMY>CP^6g7AcB<5gR2z2JL-w{g zmY%`AMo}$Au#Pi|$8Gg3BMq8$R6g-cp%zEAnx%djSLE5;sUHt@FA z{)@I4(MGHPvoDC5y$5ILr!rQOfo^Mcd_EKt761NkPHcb7udRa6y|fA{tCQzl=$ z{`ZvdC1o3ioYhq~h3yM|d1pEBn}mf=@e*W->6v%j{b5p@(qakkbt zN&*Cds))1fS8*Mte@h18vdPaDHp&kd(2)B?#{><~7xbQRhB-eCakyK6Sdy#_D z8FN^oqDT7eFZ_)pA2dDqXn1>Xs!$8Esuio)ZTala+U5redA(ftQ!3h7(zpKfH_}IX zJVVppwfe#W!YOvqY^~bxCF|OeqBwUoYsQ;%^4wWT5A@p9WDKQsp{wcNE)CfTbsY9f zr^X&_wY{U7Xob&GqT*2);?v^f&zE%0sZ1NUE4s$m=;e#dj zk-L$jtjpKdewv}S zJptAhJ#dkiD5aN3rwp3PWm7J1HfzTOabN{e6UHZUR<-lH{V%;u^Xg0B&#hgyPX{qW ztG>PO)LDMQ-kzS{DxjZiGTd!WI82mnW2kmz^^3G7de>v6F>QsR$F2Su$f$h96ef^1 zd+vT8Qorv@UBoBU4q+4z)jJUI-axq9O4+H!!0=-stNb~9CCCB`>xF4$l9TKf){jT* z$_vjl1eeLwNKnhDx?@YYGmS5;3wZ;oI3?Dc8U0l8aEA)d!*N5&_ehd-C4)C^r=H$s qq_cA<7Z>nu*I(Bl(rDPYQ|MAQS}rw1^x-auVv6YRB{T_sqyGTn{e%wy delta 1466 zcmX|>dpHw%7{_-pw=4`9BDXH0jN~@=Z7zq|$wF=wk|QEYbfme=rqWo<=JGJ1@wl{2 zYbNEAgQ%z6FQ**DiAqE+4{OdiPrc9ceLnB|ec$)@`|nLDRZS^X&9MQ(skSIWlWwo7 z2vv#xDIW46Wf5tcPzlqo}4&W7R$0946tnc z)#GPZg56*W1I=wk#R5~$k}-8-ne-W1@*E$`pW{owhh?XHfjjR2rhMtL6bK1o2CxEH z&}kHi#s4Y4j{;#rwP`Ao)y?CbCD6VF_Hs&{J+eme>~Ox*O2LyY&*gIsa6Yvd0#zf3 z+-wZSK7n;FBtvio_LoCcGdAcvT`{j|MtPiBZ)1popQ}@Dm9S`JumFh zq8rZgWlh%)8ge+Rns;J78?W=??HB}=Nb?z9R6sfC&>owF7?_^l53LEc@3ozu+o7Sk zE`fM{wmX}3m8`_iQo&CIMUKr%P3A3ECTSe3E>*jQ-5kySR>P{<)L+V!9;`QB8)K;* zrtW**lpvTu7Wm+XW3Fl^sT@mc?bCA50mtoy<~^DsfkMAU+fA|yX6z;~6$HkSWuG8K z^OhW}5vpe3aoIA(+gh!timjo*YdE+4X$T8^ioau`F^M}bYhbnIRv%BY(iaf*>^@OB z!mOzKk{_%c{UV=`y^LLN`XtYQIz+*Ku#Twn#AAuKTvzIPasKv2Ri33gV844_u}dF3md> z7HqLaPE70g`3?MB>0c|eQ&m`z8)Jc07Y2#j8>`PKeugGD-y5fQzk=`xI-8m1`z1~b zWK?EOonGZU27fRhZIt9-^%*U^s70on1?^~~(^@{~<5!T3=-&3M(PH@ISy2r-dNd}^ zYgWry=b<|I0yN@FYNYaG4~Bc05Y}c{GHv7{)LLyboR=PLxep-Ui&0 zfB_KpoT{?DkhW|au~yDaE2e2pM1zgGQFzHTik3Q3#rdR-qU#+z%x?)34kNON6`W{A zc>$_gltL8LvL295B^NIw{}ULk8!GhGWGP0XdJrbQPuYhFy|;xSaT~xqm}&11I~r{vNbtL(-K93kOVx$v&G@ z;|xeZxRM$6V*bQH#NR>xX?aXMXqG`_6ka@577fl#A(<%Qghd<`|u$ z9vm+~5@PwJ{{-In0h|?h@WvXjyU$g?RX`d#l5}?$;Qvackgo0|JIfBAdm$Z2BPge%u@hg zh9pii{lS@#r%;UnNFWfeHI%G11ZHUsL4@TE1be*q;t+uX1R6Rd1R7f3bD+Ka{!CO* zO9^ClSO{dc@oUBk9vHWH*RgfyT7!3+%|&E zNuZcjZgswtrRt9Riya==%EdLR|nx^b9gmQiHsHe!{xCY3E(m zr(M}Gdj!=!<7;Zbcwf7sH>=UM`wS$0BSLMY^g9=)KB^sTwi%A5rzA@IZR$~LuC-UD zFF4r!MzA%tDE5iM;1yR7<{kC4{Z8ZC|KPky#4iTtH{`G~JClSAb8L0^HT7`1JzS+75MWQ~X&Yqg|VOPr!x6X8+%GF4{D_~+-IYoO|zRbste z)4UVpOE`BO{7PW?Y-+7BL>T$_rg1MYEGv%1V0AHgEM7-fM<0h{30uI8q!7P6{W2L& z#88fGas~snc-tRZ#=|R_!@mu@w}jj@}plWPKdnJzdNdS~wCG)Satj)31=xFm>F0 zVN^S*DWZMUIQW)?N2pl258HBumT!Hh^~v&|fu}tsr<*SH=`$bU(r&N%C|9h_XWd4) zUw4$&Qo3EqSMSp8lrHXET+lXSeG9 z;1bYx(D+GL_oedN46y$OsQo zKBu1?MX;~)$}_zpd;MhjBRN@VX_!}WNor_SeqdkuovsB~6KV+QQatex{9Wl&{4vSCQ+U*iHJvMRLnbUXE ztnz_(aj84HH(euZ@_FZ=V>;Y*hfh zSWBc{~$*9LKk@scDZRIl|M-(H>VDYmS*Ccarvav$M35bnbAuS20 z3g#0rd*l&!eX3yCo*x_MPx@Y8+N~>)oGY2j@nlvtib_I5aP9l619eaOsyf1$YGpd?Ch=+Bv6n*L*hb!q4nJiu)AWfcR&zJ z31lH51hCln(PNT%pkRo&muGeq^7z%0MgI&O(CqD!PUNnG1QHTRn8{rSb3~yN1mNyI zzyyKbDGZ^3F#rRA9^DNL(fb}U)4`CB>TpD0lhk~60B;cQ9McF5SScwl6LUKLa&)V!_o`8B>b`jMGla(enSDc`E*d0|A46$_$O;Wr7wj*F{7BAj@lK!y&s);4fuPbMEjv)@~&DFZ8sM`-ngAwYuWEJ)Z z1s<7YQ?a2Cuh%F0rENmq7E#tf^syX%a=0B+vBP(M}Cg(U&UW&jmE#!0ps2}hPg`grnve!-o}Y=8a(FaVl&^rC?C_Jsfj-04TkgGgnis_(qFeoevi`GXQp!Jy|ryzK#{XcTLy%)p| zwJ|{EjD>`9`xYh{!wIh_SxpU8LuIxop^1EDe%!*Qf2Bgsn^81P%S)M`N#B;Hv%MhC zsL2OCl#LZ}o6;f)hBFNv1x7mjMlzPjbLd2EvMf_<7P|@qH|1xwYx*?xb&Lbx*GW=} z$Rk_6ue;$Ipt3&|n%CMk#V##2PsLR{kRcjWsI0mvL@A|j)rX586OyIv8^BE2l8&o7 zn_PB(rU~fIF>D|eoFvao|0;W@_#g!)qg^o2CfHt>WBc*5Xt9VVm zz+Fojpxya`j9W-m3%cJdZWM?Hwk}8_B4#y?xuOxwD$65q`lcGUj>k(G1;MKJcJ4l9aI@EoxcAW3`KzB&fv;exrW@ DeYB!; diff --git a/Shared/data/launchers/wow64_helper.exe b/Shared/data/launchers/wow64_helper.exe index 7e7d456fd7ec5b2d21fc88c15af6d95685154505..c6fcaeefa150f6c753957346d179d4c00d82c771 100644 GIT binary patch delta 1450 zcmX|>c{G%J7{}-Jj%6?rlP%m77bA=@mh2)+VXTAONTJNwrj$Z>M?xV>Tu!oN3mN+$ zC8olmM(SG9SkkRx(nkN?WG;LX5TglM0+ zVtZP}1BaCNkCyw7UZk{4+JcLh1SuZCj~OtEM-HnUOyJdpX~T}>ob3Sh{tH`*I>6V$ z2TT~(O!{leZ6)rd4Hisl4$oooL<=JiB)Yv?wYzoUUT#YU6GTcw&PIQwGiV{Md)owOVAE=Mk$(%C>ZB22WE$UVRM1~)oD6`qSoG^k2Vb0-k}vDQ5k zc9|A?&!(dF@?29CKZDzut7l8*bXImG9gG|Hd`qAONy92W7!<|Se^JtT7CZ6X@!Fzq z80|{S})Nkq%JNcRdKRfqLUaavi#51W*gEh zDGpDWz%Q8RI8B4mM-tmt{q3v7{o=OsH8;_p>Pv=A5~B)7x8&eeGdI&s19zcCx>I#8Y~TB8zwGjp~~HRU^?nD#@T3g$i+w+U_2mU^f4)!-x8_S z0YFr5$%HvUn@#tg_YSdEBwXBN57x#ig$W(*J$7n9@dNZpD0?NMRljsa94{YVjq-4? zyvbXT;@E1O*t-vNyL>*ItWY>raK8HLASIWfob5&puM&Mn|XVNC)@`XyS z`NtD#nzm^VyT0-C795XcdS+3rvqBUzrcbNR4&}*fH;$2y_>FaVfrIh1J#!DO^tL?% z!>}?36J%$4L#G7HX@k6l2zK+~D;3&9DSWNiy)JoQ@kL%6(ypDpeJW5=hMN!rQnNU} zv^l6Vl^s9p$XCJ|FqVw*_LT8s?;ENU(`M!Hj>sBf+Yck1cxN-?mMuIE8l^W4HOHZE zFqI|cUvD*s)_x2==;L)B)g|D*^jmUM*TPdY?`SS{oW%xS#9*XS$!%(@jVR3vs^0Vo f6Dl9bk$YS7DF|4OKIKOk|MEE7TMN6_MY=SpXd8N&+~o%dzrgx%w4qt2Pl%` z=*-xs0oV~~XDR;)jff}vNIe=sCeO)8A%{p=EH0psWQ_mUQ^*9FCzHvtxj1sLltfw_ zg)1dqL?-*oc$U1khZhyf_VJ9*DZ!5g$5Y!X4d7?2H zng`=x6nS#*@56+o%$26>l_n^Er3q%pwwI2@>?OdYqDeIn4nPLnfW51|2w6`>T5Cw< z5&=M5PJZd}y}t)8Dj|owoEMS#%dRcRYWVa4ODq128?Z`M7LuTQ84w`}6m$YCc`U>h zVgp8Z0XF}X{E9AMP({xrz|P3_1~u8Ij?T@C{0h9rEE!5%T@Hz75TZv6*6aD40RVww z_}AwKfr=*EtRD_>-BEe(KKB_GdQnb~HRkK=c;Hho7zAADTb3(Jf`CGy@({U8P$ue> z_meS-U7_K6iP!hyGiN2Sa^j;0a6u6BCP6o+Y5-8ZNqZ$KUzKpHvMq-`!cw02+i>eF z*V^7mrY_{P6`-97>*@^0v?{U1pNw7Y;LT;&yM(SlgoaJsqvuRu2W&uCTb@*4oEHp^ z_=dv5CY_!S2@R6UfV(Jd+r50F!LxegQ9p;UP+qw%*>H%g{Nt)NrnOJruFYueo}!^~ub07)QmSJFV>UCJvIIxI z!EQe=)iA7|7l>2J`)B8p;UOOE;v+>kY`>XJV8{`N$>+zDHhq^6lk~>wCJkbW&vnvj zGaE@7E8IYKV*`F~#8i@EaF@*$M+3;+y5F2iHA81LOvlz-LM5xw+@7_`5gl+jZb$E? z%cbjGzT%I}N!6>pe}Xz z+Pu8s$LQ|K582xAc`G0-r-Q!pK)UTMPUuqCnNJI?xhXEWaBV|jO-am;2@+Q;>+$px zLvhbw3d+?N>_vPhZ8Zyw1r}qCu{Ot9V6fJFg$2M-L+OhLJ+}dO3>*1^zHGV(`j`!3 zK5XL?2n4UkN}+64t`l+Rd`^wzw^zCMOzho#8cKidLgH&@z}{`3nUTQM4@OrEWXAPD zH6M3aN!GxI#;f&0vyT~$*IQ$Ph-Jep2ejf6X0Ulli_um;>C7IiA}z*x+^nEM;{%^`&=>Esnnnk?Nymu zjMU5^Owre~hG7MPATPG$XYT{8X|>e%c~>Fv6^RzvJO(Fmq#R}L0hg->bMCi=AAtvL z@@Dq;Op0N#w|d^+kLpQW@-#8n>g9p5Y|b4LHQ@NE zei~}Q(2Lljm(QA&X}@XjUG8Ur7t&U|wwrrkISQqy6Z&$7)~ej{ns@K3Ma?-cmjp8J)Ph m8<;+dZbzrZZC4Tz@TZ9`M+wG`#jJ}xclio)b`=@Y-{^19`H~g@ diff --git a/utils/buildactions/install_cef.lua b/utils/buildactions/install_cef.lua index 6ae0ba2086b..f01f92af475 100644 --- a/utils/buildactions/install_cef.lua +++ b/utils/buildactions/install_cef.lua @@ -9,8 +9,8 @@ local CEF_URL_PREFIX = "https://cef-builds.spotifycdn.com/cef_binary_" local CEF_URL_SUFFIX = "_windows32_minimal.tar.bz2" -- Change here to update CEF version -local CEF_VERSION = "126.2.18+g3647d39+chromium-126.0.6478.183" -local CEF_HASH = "e944a4f5bda50528b73345433292df848e255f188e94c12f0b64086d130c029d" +local CEF_VERSION = "127.3.5+g114ea2a+chromium-127.0.6533.120" +local CEF_HASH = "ad91d535873bdd2b6f36135d42a383f92ab2f2959be33db0a6f0f4178cf49436" function make_cef_download_url() return CEF_URL_PREFIX..http.escapeUrlParam(CEF_VERSION)..CEF_URL_SUFFIX From b6369971182259e73356c5d9038ae8aebd293a64 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:10:00 +0300 Subject: [PATCH 12/14] conflicts --- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index ccb06c7a556..d97e4961a6f 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -104,6 +104,7 @@ void CLuaWorldDefs::LoadFunctions() {"removeWorldModel", RemoveWorldBuilding}, {"restoreAllWorldModels", RestoreWorldBuildings}, {"restoreWorldModel", RestoreWorldBuilding}, + {"setTimeFrozen", ArgumentParser}, // World create funcs {"createSWATRope", CreateSWATRope}, From fe278807625a1efcc3fbc424dd30c0bc8d5f17d1 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:23:57 +0300 Subject: [PATCH 13/14] conflicts fixes --- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 4 ++-- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index d97e4961a6f..570dbc0dab3 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -105,6 +105,7 @@ void CLuaWorldDefs::LoadFunctions() {"restoreAllWorldModels", RestoreWorldBuildings}, {"restoreWorldModel", RestoreWorldBuilding}, {"setTimeFrozen", ArgumentParser}, + {"setVolumetricShadowsEnabled", ArgumentParser}, // World create funcs {"createSWATRope", CreateSWATRope}, @@ -135,8 +136,7 @@ void CLuaWorldDefs::LoadFunctions() {"isLineOfSightClear", IsLineOfSightClear}, {"isWorldSpecialPropertyEnabled", ArgumentParserWarn}, {"isGarageOpen", IsGarageOpen}, - {"isTimeFrozen", ArgumentParser}}; - {"isGarageOpen", IsGarageOpen}, + {"isTimeFrozen", ArgumentParser}, {"isVolumetricShadowsEnabled", ArgumentParser}}; // Add functions diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index cab5880f1d5..d19234636d8 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -134,8 +134,8 @@ class CLuaWorldDefs : public CLuaDefs static bool SetTimeFrozen(bool value) noexcept; static bool IsTimeFrozen() noexcept; static bool ResetTimeFrozen() noexcept; - }; static bool SetVolumetricShadowsEnabled(bool enable) noexcept; static bool IsVolumetricShadowsEnabled() noexcept; -}; + }; + From b84946fb4cac91ae38db70f1a8c7f321c6345b23 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:14:56 +0300 Subject: [PATCH 14/14] review fixes adding resetVolumetricShadows() function --- Client/game_sa/CSettingsSA.cpp | 10 ++++++++-- Client/game_sa/CSettingsSA.h | 6 ++++-- Client/mods/deathmatch/logic/CClientGame.cpp | 2 +- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp | 8 +++++++- Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h | 1 + Client/sdk/game/CSettings.h | 5 +++-- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Client/game_sa/CSettingsSA.cpp b/Client/game_sa/CSettingsSA.cpp index ea7d85f657d..4ce70b5eed9 100644 --- a/Client/game_sa/CSettingsSA.cpp +++ b/Client/game_sa/CSettingsSA.cpp @@ -273,7 +273,7 @@ void CSettingsSA::Save() } } -bool CSettingsSA::IsVolumetricShadowsEnabled() +bool CSettingsSA::IsVolumetricShadowsEnabled() const noexcept { return m_bVolumetricShadowsEnabled && !m_bVolumetricShadowsSuspended; } @@ -288,13 +288,19 @@ void CSettingsSA::SetVolumetricShadowsEnabled(bool bEnable) } -bool CSettingsSA::GetVolumetricShadowsEnabledByVideoSetting() +bool CSettingsSA::GetVolumetricShadowsEnabledByVideoSetting() const noexcept { bool volumetricShadow; g_pCore->GetCVars()->Get("volumetric_shadows", volumetricShadow); return volumetricShadow; } +bool CSettingsSA::ResetVolumetricShadows() noexcept +{ + pGame->GetSettings()->SetVolumetricShadowsEnabled(pGame->GetSettings()->GetVolumetricShadowsEnabledByVideoSetting()); + return true; +} + void CSettingsSA::SetVolumetricShadowsSuspended(bool bSuspended) { m_bVolumetricShadowsSuspended = bSuspended; diff --git a/Client/game_sa/CSettingsSA.h b/Client/game_sa/CSettingsSA.h index f304f745a3b..7947c94929a 100644 --- a/Client/game_sa/CSettingsSA.h +++ b/Client/game_sa/CSettingsSA.h @@ -138,8 +138,10 @@ class CSettingsSA : public CGameSettings bool IsMipMappingEnabled(); void SetMipMappingEnabled(bool bEnable); - bool IsVolumetricShadowsEnabled(); - bool GetVolumetricShadowsEnabledByVideoSetting(); + bool IsVolumetricShadowsEnabled() const noexcept; + bool GetVolumetricShadowsEnabledByVideoSetting() const noexcept; + bool ResetVolumetricShadows() noexcept; + void SetVolumetricShadowsEnabled(bool bEnable); void SetVolumetricShadowsSuspended(bool bSuspended); diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index b78dae76e59..d9a7e7c2d06 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -5558,7 +5558,7 @@ void CClientGame::ResetMapInfo() g_pGame->GetWeather()->ResetWaterFog(); g_pGame->GetWeather()->ResetSandstorm(); g_pGame->GetWeather()->ResetRainbow(); - g_pGame->GetSettings()->SetVolumetricShadowsEnabled(g_pGame->GetSettings()->GetVolumetricShadowsEnabledByVideoSetting()); + g_pGame->GetSettings()->ResetVolumetricShadows(); // Disable the change of any player stats g_pMultiplayer->SetLocalStatsStatic(true); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp index 570dbc0dab3..8f508a7fab6 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.cpp @@ -129,7 +129,8 @@ void CLuaWorldDefs::LoadFunctions() {"resetBlurLevel", ResetBlurLevel}, {"resetWorldProperty", ArgumentParserWarn}, {"resetTimeFrozen", ArgumentParser}, - + {"resetVolumetricShadows", ArgumentParser}, + // World check funcs {"areTrafficLightsLocked", AreTrafficLightsLocked}, {"isPedTargetingMarkerEnabled", IsPedTargetingMarkerEnabled}, @@ -2266,3 +2267,8 @@ bool CLuaWorldDefs::IsVolumetricShadowsEnabled() noexcept { return g_pGame->GetSettings()->IsVolumetricShadowsEnabled(); } + +bool CLuaWorldDefs::ResetVolumetricShadows() noexcept +{ + return g_pGame->GetSettings()->ResetVolumetricShadows(); +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h index d19234636d8..6ac901a1054 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWorldDefs.h @@ -137,5 +137,6 @@ class CLuaWorldDefs : public CLuaDefs static bool SetVolumetricShadowsEnabled(bool enable) noexcept; static bool IsVolumetricShadowsEnabled() noexcept; + static bool ResetVolumetricShadows() noexcept; }; diff --git a/Client/sdk/game/CSettings.h b/Client/sdk/game/CSettings.h index 544a52d6070..d5ef10a05b4 100644 --- a/Client/sdk/game/CSettings.h +++ b/Client/sdk/game/CSettings.h @@ -132,10 +132,11 @@ class CGameSettings virtual bool IsMipMappingEnabled() = 0; virtual void SetMipMappingEnabled(bool bEnable) = 0; - virtual bool IsVolumetricShadowsEnabled() = 0; - virtual bool GetVolumetricShadowsEnabledByVideoSetting() = 0; + virtual bool IsVolumetricShadowsEnabled() const noexcept = 0; + virtual bool GetVolumetricShadowsEnabledByVideoSetting() const noexcept = 0; virtual void SetVolumetricShadowsEnabled(bool bEnable) = 0; virtual void SetVolumetricShadowsSuspended(bool bSuspended) = 0; + virtual bool ResetVolumetricShadows() noexcept = 0; virtual bool IsDynamicPedShadowsEnabled() = 0; virtual void SetDynamicPedShadowsEnabled(bool bEnable) = 0;