From 5f21c32fb0725140d6d03476e08de330d429b55a Mon Sep 17 00:00:00 2001 From: FileEX Date: Wed, 2 Oct 2024 15:04:49 +0200 Subject: [PATCH 01/26] Fix #3760 isPlayerCrosshairVisible returns true at the start of aiming (#3762) --- Client/game_sa/CCameraSA.cpp | 5 +++ Client/game_sa/CCameraSA.h | 13 ++---- Client/game_sa/CEntitySA.h | 2 +- Client/game_sa/CHudSA.cpp | 62 +++++++++++++++++---------- Client/game_sa/CPedIntelligenceSA.cpp | 14 ++++++ Client/game_sa/CPedIntelligenceSA.h | 1 + Client/game_sa/CPedSA.h | 13 +++++- Client/game_sa/CPlayerInfoSA.h | 7 ++- Client/sdk/game/CCamera.h | 2 + Client/sdk/game/CPed.h | 3 ++ Client/sdk/game/CPedIntelligence.h | 2 + Client/sdk/game/TaskAttack.h | 2 + 12 files changed, 87 insertions(+), 39 deletions(-) diff --git a/Client/game_sa/CCameraSA.cpp b/Client/game_sa/CCameraSA.cpp index 960ec7cfa7..2e8f6b6eb8 100644 --- a/Client/game_sa/CCameraSA.cpp +++ b/Client/game_sa/CCameraSA.cpp @@ -458,3 +458,8 @@ void CCameraSA::ResetShakeCamera() noexcept { GetInterface()->m_fCamShakeForce = 0.0f; } + +std::uint8_t CCameraSA::GetTransitionState() +{ + return GetInterface()->m_uiTransitionState; +} diff --git a/Client/game_sa/CCameraSA.h b/Client/game_sa/CCameraSA.h index 246f3362d8..6ccf5fe471 100644 --- a/Client/game_sa/CCameraSA.h +++ b/Client/game_sa/CCameraSA.h @@ -82,6 +82,7 @@ class CCameraSAInterface public: // CPlaceable CPlaceableSAInterface Placeable; + std::uint8_t specialPadding[4]; // Temporary padding due to incorrect CPlaceableSAInterface class // End CPlaceable // move these out the class, have decided to set up a mirrored enumerated type thingy at the top @@ -131,16 +132,6 @@ class CCameraSAInterface bool m_bCooperativeCamMode; bool m_bAllowShootingWith2PlayersInCar; bool m_bDisableFirstPersonInCar; - static bool m_bUseMouse3rdPerson; -#ifndef FINALBUILD - bool bStaticFrustum; -#endif - - // for debug keyboard stuff -#ifndef MASTER - unsigned char display_kbd_debug; - float kbd_fov_value; -#endif // MASTER // The following fields allow the level designers to specify the camera for 2 player games. short m_ModeForTwoPlayersSeparateCars; @@ -430,4 +421,6 @@ class CCameraSA : public CCamera void ShakeCamera(float radius, float x, float y, float z) noexcept override; void ResetShakeCamera() noexcept override; + + std::uint8_t GetTransitionState(); }; diff --git a/Client/game_sa/CEntitySA.h b/Client/game_sa/CEntitySA.h index 548cb657f6..fe0f2d77ae 100644 --- a/Client/game_sa/CEntitySA.h +++ b/Client/game_sa/CEntitySA.h @@ -123,7 +123,7 @@ class CPlaceableSAInterface // 20 bytes class CEntitySAInterface { public: - CEntitySAInterfaceVTBL* vtbl; // the virtual table + CEntitySAInterfaceVTBL* vtbl; // the virtual table it should be in the CPlaceableSAInterface CPlaceableSAInterface Placeable; // 4 diff --git a/Client/game_sa/CHudSA.cpp b/Client/game_sa/CHudSA.cpp index a63f470349..6b9c2ff770 100644 --- a/Client/game_sa/CHudSA.cpp +++ b/Client/game_sa/CHudSA.cpp @@ -13,6 +13,8 @@ #include "CHudSA.h" #include "CGameSA.h" #include "CCameraSA.h" +#include "CPlayerInfoSA.h" +#include "TaskAttackSA.h" extern CGameSA* pGame; @@ -178,35 +180,51 @@ void CHudSA::ResetComponentAdjustment() bool CHudSA::IsCrosshairVisible() { - if (!IsComponentVisible(HUD_CROSSHAIR)) - return false; + bool specialAiming = false; + bool simpleAiming = false; + // Get camera view mode CCamera* camera = pGame->GetCamera(); eCamMode cameraViewMode = static_cast(camera->GetCam(camera->GetActiveCam())->GetMode()); - switch (cameraViewMode) + // Get player + CPed* playerPed = pGame->GetPedContext(); + CWeapon* weapon = nullptr; + eWeaponType weaponType; + + // Get player current weapon + if (playerPed) + { + weapon = playerPed->GetWeapon(playerPed->GetCurrentWeaponSlot()); + if (weapon) + weaponType = weapon->GetType(); + } + + // Special aiming + if (cameraViewMode == MODE_SNIPER || cameraViewMode == MODE_1STPERSON || cameraViewMode == MODE_ROCKETLAUNCHER || cameraViewMode == MODE_ROCKETLAUNCHER_HS || cameraViewMode == MODE_M16_1STPERSON || cameraViewMode == MODE_HELICANNON_1STPERSON || cameraViewMode == MODE_CAMERA) + { + if (weapon && cameraViewMode != MODE_1STPERSON && pGame->GetWeaponInfo(weaponType, WEAPONSKILL_STD)->GetFireType() != FIRETYPE_MELEE) + specialAiming = true; + } + + // Simple aiming + if (cameraViewMode == MODE_M16_1STPERSON_RUNABOUT || cameraViewMode == MODE_ROCKETLAUNCHER_RUNABOUT || cameraViewMode == MODE_ROCKETLAUNCHER_RUNABOUT_HS || cameraViewMode == MODE_SNIPER_RUNABOUT) + simpleAiming = true; + + if ((playerPed && weapon) && !playerPed->GetTargetedObject() && playerPed->GetPedInterface()->pPlayerData->m_bFreeAiming) { - case MODE_SNIPER_RUNABOUT: - case MODE_ROCKETLAUNCHER_RUNABOUT: - case MODE_ROCKETLAUNCHER_RUNABOUT_HS: - case MODE_M16_1STPERSON_RUNABOUT: - case MODE_1STPERSON_RUNABOUT: - case MODE_AIMWEAPON: - case MODE_AIMWEAPON_ATTACHED: - case MODE_AIMWEAPON_FROMCAR: - case MODE_M16_1STPERSON: - case MODE_HELICANNON_1STPERSON: - case MODE_SNIPER: - case MODE_ROCKETLAUNCHER: - case MODE_ROCKETLAUNCHER_HS: - case MODE_AIMING: - case MODE_CAMERA: - return true; - default: - break; + CTaskSimpleUseGun* taskUseGun = playerPed->GetPedIntelligence()->GetTaskUseGun(); + if ((!taskUseGun || !taskUseGun->GetSkipAim()) && (cameraViewMode == MODE_AIMWEAPON || cameraViewMode == MODE_AIMWEAPON_FROMCAR || cameraViewMode == MODE_AIMWEAPON_ATTACHED)) + { + if (playerPed->GetPedState() != PED_ENTER_CAR && playerPed->GetPedState() != PED_CARJACK) + { + if ((weaponType >= WEAPONTYPE_PISTOL && weaponType <= WEAPONTYPE_M4) || weaponType == WEAPONTYPE_TEC9 || weaponType == WEAPONTYPE_COUNTRYRIFLE || weaponType == WEAPONTYPE_MINIGUN || weaponType == WEAPONTYPE_FLAMETHROWER) + simpleAiming = cameraViewMode != MODE_AIMWEAPON || camera->GetTransitionState() == 0; + } + } } // Check CTheScripts::bDrawCrossHair std::uint8_t crossHairType = *reinterpret_cast(VAR_CTheScripts_bDrawCrossHair); - return crossHairType > 0; + return specialAiming || simpleAiming || crossHairType > 0; } diff --git a/Client/game_sa/CPedIntelligenceSA.cpp b/Client/game_sa/CPedIntelligenceSA.cpp index 3c5b1359d0..e6752a96da 100644 --- a/Client/game_sa/CPedIntelligenceSA.cpp +++ b/Client/game_sa/CPedIntelligenceSA.cpp @@ -14,6 +14,7 @@ #include "CPedSA.h" #include "CTaskManagementSystemSA.h" #include "CTaskManagerSA.h" +#include "TaskAttackSA.h" CPedIntelligenceSA::CPedIntelligenceSA(CPedIntelligenceSAInterface* pedIntelligenceSAInterface, CPed* ped) { @@ -55,3 +56,16 @@ CTaskSAInterface* CPedIntelligenceSA::SetTaskDuckSecondary(unsigned short nLengt auto SetTaskDuckSecondary = (CTaskSAInterface * (__thiscall*)(CPedIntelligenceSAInterface*, unsigned short))0x601230; return SetTaskDuckSecondary(internalInterface, nLengthOfDuck); } + +CTaskSimpleUseGun* CPedIntelligenceSA::GetTaskUseGun() +{ + CTaskManager* taskMgr = GetTaskManager(); + if (!taskMgr) + return nullptr; + + CTask* secondaryTask = taskMgr->GetTaskSecondary(TASK_SECONDARY_ATTACK); + if (secondaryTask && secondaryTask->GetTaskType() == TASK_SIMPLE_USE_GUN) + return dynamic_cast(secondaryTask); + + return nullptr; +} diff --git a/Client/game_sa/CPedIntelligenceSA.h b/Client/game_sa/CPedIntelligenceSA.h index 7e813193c0..10cfe322ce 100644 --- a/Client/game_sa/CPedIntelligenceSA.h +++ b/Client/game_sa/CPedIntelligenceSA.h @@ -54,4 +54,5 @@ class CPedIntelligenceSA : public CPedIntelligence CTaskManager* GetTaskManager(); bool TestForStealthKill(CPed* pPed, bool bUnk); CTaskSAInterface* SetTaskDuckSecondary(unsigned short nLengthOfDuck); + CTaskSimpleUseGun* GetTaskUseGun(); }; diff --git a/Client/game_sa/CPedSA.h b/Client/game_sa/CPedSA.h index fee84fd651..668d2367c7 100644 --- a/Client/game_sa/CPedSA.h +++ b/Client/game_sa/CPedSA.h @@ -230,7 +230,12 @@ class CPedSAInterface : public CPhysicalSAInterface // +1420 = curre int iMoveAnimGroup; // 1236 BYTE bPad4b[52]; CPedIKSAInterface pedIK; // 1292 (length 32 bytes) - int bPad5[5]; + + std::uint32_t field_52C; + ePedState pedState; + eMoveState moveState; + eMoveState swimmingMoveState; + std::uint32_t field_53C; float fHealth; int iUnknown121; @@ -258,7 +263,8 @@ class CPedSAInterface : public CPhysicalSAInterface // +1420 = curre // weapons at +1440 ends at +1804 BYTE bPad4[12]; BYTE bCurrentWeaponSlot; // is actually here - BYTE bPad6[20]; + BYTE bPad6[3]; + CEntitySAInterface* pTargetedObject; BYTE bFightingStyle; // 1837 BYTE bFightingStyleExtra; BYTE bPad7[1]; @@ -408,5 +414,8 @@ class CPedSA : public virtual CPed, public virtual CPhysicalSA std::unique_ptr GetPedIK() { return std::make_unique(GetPedIKInterface()); } static void StaticSetHooks(); + CEntitySAInterface* GetTargetedObject() { return GetPedInterface()->pTargetedObject; } + ePedState GetPedState() { return GetPedInterface()->pedState; } + void GetAttachedSatchels(std::vector &satchelsList) const override; }; diff --git a/Client/game_sa/CPlayerInfoSA.h b/Client/game_sa/CPlayerInfoSA.h index a8b3a84f44..fd73385f05 100644 --- a/Client/game_sa/CPlayerInfoSA.h +++ b/Client/game_sa/CPlayerInfoSA.h @@ -41,8 +41,9 @@ class CPlayerPedDataSAInterface CVector2D m_vecFightMovement; // 12 float m_moveBlendRatio; // 20 - float m_fSprintEnergy; // 24 - // FLOAT m_fSprintControlCounter; // Removed arbitatrily to aligned next byte, should be here really + float m_fTimeCanRun; + float m_fSprintEnergy; + BYTE m_nChosenWeapon; // 28 BYTE m_nCarDangerCounter; // 29 BYTE m_pad0; // 30 @@ -68,8 +69,6 @@ class CPlayerPedDataSAInterface DWORD m_bInVehicleDontAllowWeaponChange : 1; // stop weapon change once driveby weapon has been given DWORD m_bRenderWeapon : 1; // set to false during cutscenes so that knuckledusters are not rendered - DWORD m_pad2; // 56 - long m_PlayerGroup; // 60 DWORD m_AdrenalineEndTime; // 64 diff --git a/Client/sdk/game/CCamera.h b/Client/sdk/game/CCamera.h index 7dc104e3c0..57ede01f01 100644 --- a/Client/sdk/game/CCamera.h +++ b/Client/sdk/game/CCamera.h @@ -146,4 +146,6 @@ class CCamera virtual void ShakeCamera(float radius, float x, float y, float z) noexcept = 0; virtual void ResetShakeCamera() noexcept = 0; + + virtual std::uint8_t GetTransitionState() = 0; }; diff --git a/Client/sdk/game/CPed.h b/Client/sdk/game/CPed.h index 4e91cdb8b4..22fb276923 100644 --- a/Client/sdk/game/CPed.h +++ b/Client/sdk/game/CPed.h @@ -285,5 +285,8 @@ class CPed : public virtual CPhysical virtual void* GetPedNodeInterface(std::int32_t nodeId) = 0; virtual std::unique_ptr GetPedIK() = 0; + virtual CEntitySAInterface* GetTargetedObject() = 0; + virtual ePedState GetPedState() = 0; + virtual void GetAttachedSatchels(std::vector &satchelsList) const = 0; }; diff --git a/Client/sdk/game/CPedIntelligence.h b/Client/sdk/game/CPedIntelligence.h index 37704ed893..f9d662e94d 100644 --- a/Client/sdk/game/CPedIntelligence.h +++ b/Client/sdk/game/CPedIntelligence.h @@ -14,6 +14,7 @@ class CPed; class CTaskSAInterface; class CTaskManager; +class CTaskSimpleUseGun; class CPedIntelligence { @@ -21,4 +22,5 @@ class CPedIntelligence virtual CTaskManager* GetTaskManager() = 0; virtual bool TestForStealthKill(CPed* pPed, bool bUnk) = 0; virtual CTaskSAInterface* SetTaskDuckSecondary(unsigned short nLengthOfDuck) = 0; + virtual CTaskSimpleUseGun* GetTaskUseGun() = 0; }; diff --git a/Client/sdk/game/TaskAttack.h b/Client/sdk/game/TaskAttack.h index 9a63e8da20..c98d062848 100644 --- a/Client/sdk/game/TaskAttack.h +++ b/Client/sdk/game/TaskAttack.h @@ -44,6 +44,8 @@ class CTaskSimpleUseGun : public virtual CTaskSimple virtual bool ControlGun(CPed* pPed, CEntity* pTargetEntity, char nCommand) = 0; virtual bool ControlGunMove(CVector2D* pMoveVec) = 0; virtual void Reset(CPed* pPed, CEntity* pTargetEntity, CVector vecTarget, char nCommand, short nBurstLength = 1) = 0; + + virtual bool GetSkipAim() = 0; }; class CTaskSimpleFight : public virtual CTaskSimple From a550bbfff308eea5a41950a3342d11a55814663f Mon Sep 17 00:00:00 2001 From: Uladzislau Nikalayevich Date: Wed, 2 Oct 2024 23:59:55 +0300 Subject: [PATCH 02/26] Fix building crash (PR #3753) --- Client/game_sa/CBuildingsPoolSA.cpp | 3 +++ Client/game_sa/CEntitySA.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Client/game_sa/CBuildingsPoolSA.cpp b/Client/game_sa/CBuildingsPoolSA.cpp index caa392c132..50ae14bb3c 100644 --- a/Client/game_sa/CBuildingsPoolSA.cpp +++ b/Client/game_sa/CBuildingsPoolSA.cpp @@ -151,6 +151,9 @@ void CBuildingsPoolSA::RemoveAllBuildings() RemoveBuildingFromWorld(building); + if (building->HasMatrix()) + building->RemoveMatrix(); + pBuildsingsPool->Release(i); (*m_pOriginalBuildingsBackup)[i].first = true; diff --git a/Client/game_sa/CEntitySA.h b/Client/game_sa/CEntitySA.h index fe0f2d77ae..205d5415f7 100644 --- a/Client/game_sa/CEntitySA.h +++ b/Client/game_sa/CEntitySA.h @@ -242,6 +242,10 @@ class CEntitySAInterface using vtbl_DeleteRwObject = void(__thiscall*)(CEntitySAInterface * pEntity); ((vtbl_DeleteRwObject)this->vtbl->DeleteRwObject)(this); }; + + bool HasMatrix() const noexcept { return Placeable.matrix != nullptr; } + + void RemoveMatrix() { ((void(__thiscall*)(void*))0x54F3B0)(this); } }; static_assert(sizeof(CEntitySAInterface) == 0x38, "Invalid size for CEntitySAInterface"); From 3084934b3bcd1bea104228f2f33eb7f5d19118e7 Mon Sep 17 00:00:00 2001 From: FileEX Date: Thu, 3 Oct 2024 19:34:00 +0200 Subject: [PATCH 03/26] Addendum to 5f21c32fb0725140d6d03476e08de330d429b55a (#3765) --- Client/game_sa/CPedSA.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Client/game_sa/CPedSA.h b/Client/game_sa/CPedSA.h index 668d2367c7..ab16ea28f8 100644 --- a/Client/game_sa/CPedSA.h +++ b/Client/game_sa/CPedSA.h @@ -265,6 +265,7 @@ class CPedSAInterface : public CPhysicalSAInterface // +1420 = curre BYTE bCurrentWeaponSlot; // is actually here BYTE bPad6[3]; CEntitySAInterface* pTargetedObject; + BYTE tempPad[13]; BYTE bFightingStyle; // 1837 BYTE bFightingStyleExtra; BYTE bPad7[1]; From 9f579f3e92bf75242ff40b1f015391709c2c5503 Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Thu, 3 Oct 2024 20:17:29 +0000 Subject: [PATCH 04/26] Update CEF to 129.0.11+g57354b8+chromium-129.0.6668.90 --- utils/buildactions/install_cef.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/buildactions/install_cef.lua b/utils/buildactions/install_cef.lua index 9dc4ccdc71..8430fc68f8 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 = "129.0.6+ga918aa7+chromium-129.0.6668.29" -local CEF_HASH = "989b267d6c2eed6feed4ef304664763612619f1d4ca7f21d95a524c139870d36" +local CEF_VERSION = "129.0.11+g57354b8+chromium-129.0.6668.90" +local CEF_HASH = "a3e3e7add2235d1865a8570522ff87dba392e7b2d15bca0983ed2ebe19ea048b" function make_cef_download_url() return CEF_URL_PREFIX..http.escapeUrlParam(CEF_VERSION)..CEF_URL_SUFFIX From f96836397a075585d4d112eb7d0240f1abf361d4 Mon Sep 17 00:00:00 2001 From: FileEX Date: Thu, 3 Oct 2024 23:40:09 +0200 Subject: [PATCH 05/26] Fix Hydraulics stops working when using setVehicleHandling with player inside vehicle (#3647) --- Client/game_sa/CVehicleSA.cpp | 73 ++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Client/game_sa/CVehicleSA.cpp b/Client/game_sa/CVehicleSA.cpp index 91fb5440e0..ab1635c91d 100644 --- a/Client/game_sa/CVehicleSA.cpp +++ b/Client/game_sa/CVehicleSA.cpp @@ -684,6 +684,17 @@ void CVehicleSA::RemoveVehicleUpgrade(DWORD dwModelID) push dwModelID call dwFunc } + + // GTA SA only does this when CVehicle::ClearVehicleUpgradeFlags returns false. + // In the case of hydraulics and nitro, this function does not return false and the upgrade is never removed from the array + for (std::int16_t& upgrade : GetVehicleInterface()->m_upgrades) + { + if (upgrade == dwModelID) + { + upgrade = -1; + break; + } + } } bool CVehicleSA::DoesSupportUpgrade(const SString& strFrameName) @@ -1322,49 +1333,41 @@ void CVehicleSA::RecalculateHandling() // Put it in our interface CVehicleSAInterface* pInt = GetVehicleInterface(); unsigned int uiHandlingFlags = m_pHandlingData->GetInterface()->uiHandlingFlags; - // user error correction - NOS_INST = NOS Installed t/f - // if nos is installed we need the flag set - if (pInt->m_upgrades[0] && pInt->m_upgrades[0] >= 1008 && pInt->m_upgrades[0] <= 1010) + bool hydralicsInstalled = false, nitroInstalled = false; + + // We check whether the user has not set incorrect flags via handlingFlags in the case of nitro and hydraulics + // If this happened, we need to correct it + for (const std::int16_t& upgradeID : pInt->m_upgrades) { - // Flag not enabled? - if (uiHandlingFlags | HANDLING_NOS_Flag) + // Empty upgrades value is -1 + if (upgradeID < 0) + continue; + + // If NOS is installed we need set the flag + if ((upgradeID >= 1008 && upgradeID <= 1010) && !(uiHandlingFlags & HANDLING_NOS_Flag)) { - // Set zee flag uiHandlingFlags |= HANDLING_NOS_Flag; - m_pHandlingData->SetHandlingFlags(uiHandlingFlags); - } - } - else - { - // Flag Enabled? - if (uiHandlingFlags & HANDLING_NOS_Flag) - { - // Unset the flag - uiHandlingFlags &= ~HANDLING_NOS_Flag; - m_pHandlingData->SetHandlingFlags(uiHandlingFlags); + nitroInstalled = true; } - } - // Hydraulics Flag fixing - if (pInt->m_upgrades[1] && pInt->m_upgrades[1] == 1087) - { - // Flag not enabled? - if (uiHandlingFlags | HANDLING_Hydraulics_Flag) + + // If hydraulics is installed we need set the flag + if ((upgradeID == 1087) && !(uiHandlingFlags & HANDLING_Hydraulics_Flag)) { - // Set zee flag uiHandlingFlags |= HANDLING_Hydraulics_Flag; - m_pHandlingData->SetHandlingFlags(uiHandlingFlags); - } - } - else - { - // Flag Enabled? - if (uiHandlingFlags & HANDLING_Hydraulics_Flag) - { - // Unset the flag - uiHandlingFlags &= ~HANDLING_Hydraulics_Flag; - m_pHandlingData->SetHandlingFlags(uiHandlingFlags); + hydralicsInstalled = true; } } + + // If hydraulics isn't installed we need unset the flag + if ((!hydralicsInstalled) && (uiHandlingFlags & HANDLING_Hydraulics_Flag)) + uiHandlingFlags &= ~HANDLING_Hydraulics_Flag; + + // If NOS isn't installed we need unset the flag + if ((!nitroInstalled) && (uiHandlingFlags & HANDLING_NOS_Flag)) + uiHandlingFlags &= ~HANDLING_NOS_Flag; + + m_pHandlingData->SetHandlingFlags(uiHandlingFlags); + pInt->dwHandlingFlags = uiHandlingFlags; pInt->m_fMass = m_pHandlingData->GetInterface()->fMass; pInt->m_fTurnMass = m_pHandlingData->GetInterface()->fTurnMass; // * pGame->GetHandlingManager()->GetTurnMassMultiplier(); From 5220344eb50ad36ac04e23758a72973f0ac03113 Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Thu, 3 Oct 2024 23:08:44 +0000 Subject: [PATCH 06/26] Force rebuild From 52848571e392f5e4ab2475d07278c749c6445630 Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Thu, 3 Oct 2024 23:15:58 +0000 Subject: [PATCH 07/26] Force rebuild #2 For version control purposes From abffd8744e13fe1ee7c6a95c38b42ac3d5788201 Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Thu, 3 Oct 2024 23:30:05 +0000 Subject: [PATCH 08/26] Force rebuild #3 For version management purposes; this is the final one. From c87ff84b64d9293a3f97db64ce815ab370f48d2e Mon Sep 17 00:00:00 2001 From: FileEX Date: Sat, 5 Oct 2024 03:37:35 +0200 Subject: [PATCH 09/26] Another minor fix after #3760 (#3767) --- Client/game_sa/CPlayerPedSA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/game_sa/CPlayerPedSA.cpp b/Client/game_sa/CPlayerPedSA.cpp index ad555041d0..534f8376c6 100644 --- a/Client/game_sa/CPlayerPedSA.cpp +++ b/Client/game_sa/CPlayerPedSA.cpp @@ -75,7 +75,7 @@ CPlayerPedSA::CPlayerPedSA(unsigned int nModelIndex) // Set default stuff m_pData->m_bRenderWeapon = true; m_pData->m_Wanted = pLocalWanted; - m_pData->m_fSprintEnergy = 1000.0f; + m_pData->m_fTimeCanRun = 1000.0f; // Clothes pointers or we'll crash later (TODO: Wrap up with some cloth classes and make it unique per player) m_pData->m_pClothes = pLocalClothes; From 1fdfdb8b8a693c8ac5270585fb3c407983b460ca Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Sat, 5 Oct 2024 02:40:09 +0000 Subject: [PATCH 10/26] Addendum to 47c2b89 --- Client/launch/Multi Theft Auto.manifest | 74 +++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/Client/launch/Multi Theft Auto.manifest b/Client/launch/Multi Theft Auto.manifest index 159fa06d34..c29803733a 100644 --- a/Client/launch/Multi Theft Auto.manifest +++ b/Client/launch/Multi Theft Auto.manifest @@ -1,5 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ea6300de7ff5de4afd15a6559368365e243543a4 Mon Sep 17 00:00:00 2001 From: Dutchman101 Date: Sat, 5 Oct 2024 05:08:27 +0200 Subject: [PATCH 11/26] Update launcher --- Shared/data/launchers/Multi Theft Auto.exe | Bin 416136 -> 421256 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Shared/data/launchers/Multi Theft Auto.exe b/Shared/data/launchers/Multi Theft Auto.exe index 99fcb3c6bf6af71e9a6bd69a50a13ea8d8b7a667..0fd7e719d4b648c267b4afc1c91735a1603d494f 100644 GIT binary patch delta 6735 zcmcgx3piA1A3rmgLKhL$7KY-J&=|@k_nlI*<(5n7pPF zr){g7c7{p&>ic5=ANX)J0Cbu)lmQ^2o{@&rEOp+#phiAk z90ss$HuVykmQTB_);|=g1OV-6d+9S(L#c^+)Sz+pH9AyHYu;p5lVDaulbY4g$A0DT zan(LF0d?1CC;>H{@3B9QjibI#rf$w8C4kfQ_n1`FP8TpV+zRMlUp}X^B+Go`x*O~t z(xfe&bX8^bW;$Sj;TU%oi=ApPJ)K#sq#|YZ(5)BHJ*Ox5+bU7Fvee&JC9+JlIgm!d z13+_ni83QmX+B_?zCwjz*Y_YzRbhBC$Z%KyF;NhK91UY&R3s)WL#!-#0)Zh@AOv}f zFd^b-XyhA<6ADN5B?J$P#t9(? z$&B$O1TK(O0&-9#a4sl<6H5?QI;W)^L zQT_lNQXc1mB2fe+5DkEk2Z4ZMi2f)G$Ec8#2r+Vv0%$xKgSbQt4A{@jC z5hjfJQUuEWa#YsAG30`vDhm3E7^J)f9wiVEBfw7}cqBUND4_gqVN@3g{um1c>lckILr`($SC`&PVu|6_!BEGk#z-)P6f)+&_nZ}BFai^Bv_duM^SUf|{^9drD|Wb8pa^G#0_dYT$WiTb zaEKcr#AWI4hpGsei1Mqo1&o$Eegmss0-Q1#p}K)bHEvi9)CZFggsf zf9Huqgjm5MPf1|K7RxO}U;g>9{iQ0Sf<$|tHso^27x}NRS&<82U;^zYh|G2vWdDue zTq0a%fG;=SlqU#GEF(L}!H*I8q6$-lUwDK-B1;(=rvK&&!nhz2rGO>+JA~n#Nse%y zLZvEDObm}P0>t~M93r$yS=&!MLcvl9Bgi0Xkg^{w!3fn_P@4e-9D)*5yZ70AgAtFn zq;={HBL?Zp;VfC^9vJBL{^7&VKlV=k(+dt*PsP3OL#`$xN{?x&T(Run&XnUs@?rlI z`0Kc|b*)f zlc)1ex`=ifZPnisTwLO8J16YL!VR6jb8W6*d=t*rjC0PlexcvS=(PI$IX+4=p#HZu zoyrOOzkYJ!sqQ%DBcCXv#|>D?8FpHoIC1X}MYSHunl8r5l}V_@u6XoeExR}U ze==An*=A>E^<&%<)cN-PdXj#f>!qG`)1>fpRK@<=c7-+@+_fkEs&BF7wXyXDBX@^G z5C6@0+?C?@N80#`Oq0@$oXPOGNjJxKC9=vo7H7Bp@7BpiYt7?}Qyy<8Iev|+R|b4n z+8)d!dpneX-3c1Bf^LU2`20I--KUi=k`2`+NGvmKbXBaUOk7nOcF=q6KJ6)QSH}94LS|VxB4)_UV(3ua z8(w=sa>8RpYy^1A9x)hgF?)M{iDgl{o3Dq^G$uxXtv{yQ~nk^cAj*^>#K#+~T5QL-ZH@ z=CeZ2Acq#eYf46u^Zl+xGsZ}}nMOP4W7LkXbE_||oH~)sVq06XSo2uydDfO}sk$4( zVY1raAJV=38B19?s|&-d7d+K@P@4BnxvRnZzH8{gUzS~2Ta)@>;J=N3;lvh?>X$9gX?S1;&V{LC8t*oX-KS@u0C_1m4* z%HqsDezA;l$f|7%=uWdw+VRaL;gpLukoU>L4vslJG7dA}_tZm7I>nx74X+-zb|U4ik|Cv9nn@Q*W4gEu8bG^76}9 zYqEFwX;eovzTkTnJG`rEx^SU;DGEA;R~g-T>?6sICL;@Pn*L;h?$Ky9Y_gy2{%UGI z#B6MJO~<^4zATU*G(wn$cuSlI@GmmuEo7pOt)D zKBo8ee9knTa)Y@Y$4qh%ur_+m5<~hWhbG_rM-|>$zyak=PjG}_CK-2cv#u`AOjuf7 zdN!kJ)2n1{qo!v8b>Cd#6Sp?^v@B!^bf)c(+?^HrhOssC33%0cY(dc7>e4e_+3sgG dA~L;pIN9uVK3h>TJ+4B1xoyyv{{K$^;Qxi8jKKf^ delta 1575 zcmYL}dpOez7{`CVU4D#0TD75?D62*@w=JApD@PYRZb{=%F0;ZA3Oh|>nOvGop`&=p zC32)jE0^Sw%h8M|6>5|sDz+l)tj_7_eV*_0yzlq(yx;e~motpz+{9MnK&`kJ13|$5 zH44B$RZwj+5Df!>I^K40n~FaK00;oMYo)}C0*zM#FBIfw5g~xHSuxn~?tqU~ejtB1 z0KDK`gz2Gd6pQN=Q1fOR?8pFEl}s2)B@BTA!VpYZ%j)OV?`d>}hBV;7(C7cMf3jr? zAFYtX3OL~KLj!N=l-=DkHQ>XA1XG`3D1_=`7+}PRVg%|FN!hyE zd|WFWDZnkkOf6yil~X;*aD@;8Pco9$jjHkn74ZO2#eax^&cKNPiSL1gDBl}FHWJzc z37)Ql^q||DpvZN&nlLw^-s1Cmp|E5GL8^G*|NOYcoB%&oQKW_*LkThj*$z;)8nZND zK;$iUsI{R=p4~75!eY-SmKbj7@1+doxXoz3hZC1Ws4XeGQ)J6Q5JUn977W<`m^F9N zm4WSD^&3h^K*7;%(T9q3E^WoXI@OIAURrRS@_}VIh-4u%Y2=s3^4N5{efP@Hw#lE2 z+y+0$0uo}9M4>`&&+z%*>F1g8b=TImPvx)7(iiVyY1e6sH&h8TWSi~FtI}sr?ZrmO zv29LKyu=I5J2M^G=TeH2ZFcq?nV?5S*pgZ9qsi)K&)dl+yIQ*PbIKFp;mf2NJ6k5u z5Xwl3A4+ZAljNV4|Hh16SI(F|F?THEdUF<}dpMX@%fm5++i;)UK<4YEMNwj)O#90O z&C0Ft_Gxo>9iD3BuJWTsF%u0-$gf_5cWk|F!Eghzk<#5c|JDX#!a261lqEJ9ZR^*T z7g-1kYZ|$!r1Jd?!gRb~#CyB8W_wQeypc}Zv_)m;H3Ef*@ikYsqLw&3Gsg+dYeLNC zx+c4l-c`%@Ntvn48*}nMA_rBH7@H}#W}S_D-VUbZJy|v}YX!14>I4Z0iFZb&Gh>!D`95h$+)6 zm`2NBy-b5DN`cy&Fe6?+(?loUo8ub;1j;gQU+Sd3kyKjD9nR!?ctD91RLl6$v(T%Y zuLnbx(&FM`$6WM3Dent&yn6ZB+1|Q4-(X5Ar3p5o9fvULBqGU_NFkDp&51-aV}YtC zWQA7wW$;~TkTda1`bn3iBbJ{{Mt44394OgK*X!jrEejYYt>q{I_0{v=g0G}I$#d+L zV(M=?Yc}8HchjI-Oxl41Yc8t=8ydSOdz{!RPOG+m;+DIbRZlHZzNk0sR~V>E)QXeH z^p87NAn$7#-VK;}>%<(5UBk;HUKrUJZHenEr*_H)xod~lZ}B8Mr|N#q>r$zxXl^^-7IbdVBu{%GAGOFa`O48|9^qKOkLKCAZ>V0kUhC_Jj@)=+fU=Oy*X*YTLMb>m zy7TPz#q4c5m75v^j(lV*b0*UhGpCnZHie4HC~WmZnUb;%et5e5$w|yZrQy{(_MS&w5~WlV;(wST^QSo*&{TYl`@+CLC2nsC>Z10oyG9L7p&dbPH${p$IDKZ&OQz; zC|NF@&#L;2+)AolXxfnx?-lARc5ge8b$^^`tByOHcwL##vxsRY`z1f}e^RxYn6|#K z@_B*~=sa%I!MTmjyDDAvcU>11PQ%ps4A8+3oz8eBEo#j*`^g3|KJ%6VlE*B3G|Gj^ zyISrGA6_FB<7}ie3+K@)jSQVtj(&fxO)(rLV5;p)R~C!@;`^G2XMJSvB;17+_t}L# z@92F#Mx9e?xYF_1vMYTW4Yd|Q+@#-p=R-3R Date: Sat, 5 Oct 2024 06:00:16 +0200 Subject: [PATCH 12/26] Revert ea6300d & 1fdfdb8 for now --- Client/launch/Multi Theft Auto.manifest | 74 --------------------- Shared/data/launchers/Multi Theft Auto.exe | Bin 421256 -> 416136 bytes 2 files changed, 74 deletions(-) diff --git a/Client/launch/Multi Theft Auto.manifest b/Client/launch/Multi Theft Auto.manifest index c29803733a..159fa06d34 100644 --- a/Client/launch/Multi Theft Auto.manifest +++ b/Client/launch/Multi Theft Auto.manifest @@ -1,79 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Shared/data/launchers/Multi Theft Auto.exe b/Shared/data/launchers/Multi Theft Auto.exe index 0fd7e719d4b648c267b4afc1c91735a1603d494f..99fcb3c6bf6af71e9a6bd69a50a13ea8d8b7a667 100644 GIT binary patch delta 1575 zcmYL}dpOez7{`CVU4D#0TD75?D62*@w=JApD@PYRZb{=%F0;ZA3Oh|>nOvGop`&=p zC32)jE0^Sw%h8M|6>5|sDz+l)tj_7_eV*_0yzlq(yx;e~motpz+{9MnK&`kJ13|$5 zH44B$RZwj+5Df!>I^K40n~FaK00;oMYo)}C0*zM#FBIfw5g~xHSuxn~?tqU~ejtB1 z0KDK`gz2Gd6pQN=Q1fOR?8pFEl}s2)B@BTA!VpYZ%j)OV?`d>}hBV;7(C7cMf3jr? zAFYtX3OL~KLj!N=l-=DkHQ>XA1XG`3D1_=`7+}PRVg%|FN!hyE zd|WFWDZnkkOf6yil~X;*aD@;8Pco9$jjHkn74ZO2#eax^&cKNPiSL1gDBl}FHWJzc z37)Ql^q||DpvZN&nlLw^-s1Cmp|E5GL8^G*|NOYcoB%&oQKW_*LkThj*$z;)8nZND zK;$iUsI{R=p4~75!eY-SmKbj7@1+doxXoz3hZC1Ws4XeGQ)J6Q5JUn977W<`m^F9N zm4WSD^&3h^K*7;%(T9q3E^WoXI@OIAURrRS@_}VIh-4u%Y2=s3^4N5{efP@Hw#lE2 z+y+0$0uo}9M4>`&&+z%*>F1g8b=TImPvx)7(iiVyY1e6sH&h8TWSi~FtI}sr?ZrmO zv29LKyu=I5J2M^G=TeH2ZFcq?nV?5S*pgZ9qsi)K&)dl+yIQ*PbIKFp;mf2NJ6k5u z5Xwl3A4+ZAljNV4|Hh16SI(F|F?THEdUF<}dpMX@%fm5++i;)UK<4YEMNwj)O#90O z&C0Ft_Gxo>9iD3BuJWTsF%u0-$gf_5cWk|F!Eghzk<#5c|JDX#!a261lqEJ9ZR^*T z7g-1kYZ|$!r1Jd?!gRb~#CyB8W_wQeypc}Zv_)m;H3Ef*@ikYsqLw&3Gsg+dYeLNC zx+c4l-c`%@Ntvn48*}nMA_rBH7@H}#W}S_D-VUbZJy|v}YX!14>I4Z0iFZb&Gh>!D`95h$+)6 zm`2NBy-b5DN`cy&Fe6?+(?loUo8ub;1j;gQU+Sd3kyKjD9nR!?ctD91RLl6$v(T%Y zuLnbx(&FM`$6WM3Dent&yn6ZB+1|Q4-(X5Ar3p5o9fvULBqGU_NFkDp&51-aV}YtC zWQA7wW$;~TkTda1`bn3iBbJ{{Mt44394OgK*X!jrEejYYt>q{I_0{v=g0G}I$#d+L zV(M=?Yc}8HchjI-Oxl41Yc8t=8ydSOdz{!RPOG+m;+DIbRZlHZzNk0sR~V>E)QXeH z^p87NAn$7#-VK;}>%<(5UBk;HUKrUJZHenEr*_H)xod~lZ}B8Mr|N#q>r$zxXl^^-7IbdVBu{%GAGOFa`O48|9^qKOkLKCAZ>V0kUhC_Jj@)=+fU=Oy*X*YTLMb>m zy7TPz#q4c5m75v^j(lV*b0*UhGpCnZHie4HC~WmZnUb;%et5e5$w|yZrQy{(_MS&w5~WlV;(wST^QSo*&{TYl`@+CLC2nsC>Z10oyG9L7p&dbPH${p$IDKZ&OQz; zC|NF@&#L;2+)AolXxfnx?-lARc5ge8b$^^`tByOHcwL##vxsRY`z1f}e^RxYn6|#K z@_B*~=sa%I!MTmjyDDAvcU>11PQ%ps4A8+3oz8eBEo#j*`^g3|KJ%6VlE*B3G|Gj^ zyISrGA6_FB<7}ie3+K@)jSQVtj(&fxO)(rLV5;p)R~C!@;`^G2XMJSvB;17+_t}L# z@92F#Mx9e?xYF_1vMYTW4Yd|Q+@#-p=R-3RpPF zr){g7c7{p&>ic5=ANX)J0Cbu)lmQ^2o{@&rEOp+#phiAk z90ss$HuVykmQTB_);|=g1OV-6d+9S(L#c^+)Sz+pH9AyHYu;p5lVDaulbY4g$A0DT zan(LF0d?1CC;>H{@3B9QjibI#rf$w8C4kfQ_n1`FP8TpV+zRMlUp}X^B+Go`x*O~t z(xfe&bX8^bW;$Sj;TU%oi=ApPJ)K#sq#|YZ(5)BHJ*Ox5+bU7Fvee&JC9+JlIgm!d z13+_ni83QmX+B_?zCwjz*Y_YzRbhBC$Z%KyF;NhK91UY&R3s)WL#!-#0)Zh@AOv}f zFd^b-XyhA<6ADN5B?J$P#t9(? z$&B$O1TK(O0&-9#a4sl<6H5?QI;W)^L zQT_lNQXc1mB2fe+5DkEk2Z4ZMi2f)G$Ec8#2r+Vv0%$xKgSbQt4A{@jC z5hjfJQUuEWa#YsAG30`vDhm3E7^J)f9wiVEBfw7}cqBUND4_gqVN@3g{um1c>lckILr`($SC`&PVu|6_!BEGk#z-)P6f)+&_nZ}BFai^Bv_duM^SUf|{^9drD|Wb8pa^G#0_dYT$WiTb zaEKcr#AWI4hpGsei1Mqo1&o$Eegmss0-Q1#p}K)bHEvi9)CZFggsf zf9Huqgjm5MPf1|K7RxO}U;g>9{iQ0Sf<$|tHso^27x}NRS&<82U;^zYh|G2vWdDue zTq0a%fG;=SlqU#GEF(L}!H*I8q6$-lUwDK-B1;(=rvK&&!nhz2rGO>+JA~n#Nse%y zLZvEDObm}P0>t~M93r$yS=&!MLcvl9Bgi0Xkg^{w!3fn_P@4e-9D)*5yZ70AgAtFn zq;={HBL?Zp;VfC^9vJBL{^7&VKlV=k(+dt*PsP3OL#`$xN{?x&T(Run&XnUs@?rlI z`0Kc|b*)f zlc)1ex`=ifZPnisTwLO8J16YL!VR6jb8W6*d=t*rjC0PlexcvS=(PI$IX+4=p#HZu zoyrOOzkYJ!sqQ%DBcCXv#|>D?8FpHoIC1X}MYSHunl8r5l}V_@u6XoeExR}U ze==An*=A>E^<&%<)cN-PdXj#f>!qG`)1>fpRK@<=c7-+@+_fkEs&BF7wXyXDBX@^G z5C6@0+?C?@N80#`Oq0@$oXPOGNjJxKC9=vo7H7Bp@7BpiYt7?}Qyy<8Iev|+R|b4n z+8)d!dpneX-3c1Bf^LU2`20I--KUi=k`2`+NGvmKbXBaUOk7nOcF=q6KJ6)QSH}94LS|VxB4)_UV(3ua z8(w=sa>8RpYy^1A9x)hgF?)M{iDgl{o3Dq^G$uxXtv{yQ~nk^cAj*^>#K#+~T5QL-ZH@ z=CeZ2Acq#eYf46u^Zl+xGsZ}}nMOP4W7LkXbE_||oH~)sVq06XSo2uydDfO}sk$4( zVY1raAJV=38B19?s|&-d7d+K@P@4BnxvRnZzH8{gUzS~2Ta)@>;J=N3;lvh?>X$9gX?S1;&V{LC8t*oX-KS@u0C_1m4* z%HqsDezA;l$f|7%=uWdw+VRaL;gpLukoU>L4vslJG7dA}_tZm7I>nx74X+-zb|U4ik|Cv9nn@Q*W4gEu8bG^76}9 zYqEFwX;eovzTkTnJG`rEx^SU;DGEA;R~g-T>?6sICL;@Pn*L;h?$Ky9Y_gy2{%UGI z#B6MJO~<^4zATU*G(wn$cuSlI@GmmuEo7pOt)D zKBo8ee9knTa)Y@Y$4qh%ur_+m5<~hWhbG_rM-|>$zyak=PjG}_CK-2cv#u`AOjuf7 zdN!kJ)2n1{qo!v8b>Cd#6Sp?^v@B!^bf)c(+?^HrhOssC33%0cY(dc7>e4e_+3sgG dA~L;pIN9uVK3h>TJ+4B1xoyyv{{K$^;Qxi8jKKf^ From 9f54cfcd7a584f413db731052ebed921acfc71ea Mon Sep 17 00:00:00 2001 From: FileEX Date: Tue, 8 Oct 2024 03:44:41 +0200 Subject: [PATCH 13/26] Add new function spawnVehicleFlyingComponent (#3592) --- Client/game_sa/CAutomobileSA.h | 35 +----- Client/game_sa/CBikeSA.h | 18 ++- Client/game_sa/CBmxSA.h | 16 +++ Client/game_sa/CBoatSA.h | 20 +++- Client/game_sa/CTrainSA.h | 44 ++++--- Client/game_sa/CVehicleSA.cpp | 109 +++++++++++++++--- Client/game_sa/CVehicleSA.h | 16 ++- .../mods/deathmatch/logic/CClientVehicle.cpp | 8 ++ Client/mods/deathmatch/logic/CClientVehicle.h | 2 + .../logic/luadefs/CLuaVehicleDefs.cpp | 69 ++++++++++- .../logic/luadefs/CLuaVehicleDefs.h | 2 + .../deathmatch/logic/rpc/CVehicleRPCs.cpp | 14 +++ .../mods/deathmatch/logic/rpc/CVehicleRPCs.h | 1 + Client/sdk/game/CDamageManager.h | 43 +++++++ Client/sdk/game/CVehicle.h | 2 +- .../logic/CPerfStat.RPCPacketUsage.cpp | 1 + .../logic/CStaticFunctionDefinitions.cpp | 11 ++ .../logic/CStaticFunctionDefinitions.h | 1 + Server/mods/deathmatch/logic/CVehicle.h | 43 +++++++ .../logic/luadefs/CLuaVehicleDefs.cpp | 64 ++++++++++ .../logic/luadefs/CLuaVehicleDefs.h | 2 + Shared/sdk/net/rpc_enums.h | 2 + 22 files changed, 442 insertions(+), 81 deletions(-) diff --git a/Client/game_sa/CAutomobileSA.h b/Client/game_sa/CAutomobileSA.h index 701030a5a9..921c6638b3 100644 --- a/Client/game_sa/CAutomobileSA.h +++ b/Client/game_sa/CAutomobileSA.h @@ -21,39 +21,6 @@ #define MAX_PASSENGER_COUNT 8 #define MAX_DOORS 6 // also in CDamageManager -namespace eCarNode -{ - enum - { - NONE = 0, - CHASSIS = 1, - WHEEL_RF = 2, - WHEEL_RM = 3, - WHEEL_RB = 4, - WHEEL_LF = 5, - WHEEL_LM = 6, - WHEEL_LB = 7, - DOOR_RF = 8, - DOOR_RR = 9, - DOOR_LF = 10, - DOOR_LR = 11, - BUMP_FRONT = 12, - BUMP_REAR = 13, - WING_RF = 14, - WING_LF = 15, - BONNET = 16, - BOOT = 17, - WINDSCREEN = 18, - EXHAUST = 19, - MISC_A = 20, - MISC_B = 21, - MISC_C = 22, - MISC_D = 23, - MISC_E = 24, - NUM_NODES - }; -}; - class CBouncingPanelSAInterface { public: @@ -70,7 +37,7 @@ class CAutomobileSAInterface : public CVehicleSAInterface public: CDamageManagerSAInterface m_damageManager; CDoorSAInterface m_doors[MAX_DOORS]; - RwFrame* m_aCarNodes[eCarNode::NUM_NODES]; + RwFrame* m_aCarNodes[static_cast(eCarNodes::NUM_NODES)]; CBouncingPanelSAInterface m_panels[3]; CDoorSAInterface m_swingingChassis; CColPointSAInterface m_wheelColPoint[MAX_WHEELS]; diff --git a/Client/game_sa/CBikeSA.h b/Client/game_sa/CBikeSA.h index 65602ae525..083592e5fd 100644 --- a/Client/game_sa/CBikeSA.h +++ b/Client/game_sa/CBikeSA.h @@ -14,6 +14,22 @@ #include #include "CVehicleSA.h" +enum class eBikeNodes +{ + NONE = 0, + CHASSIS, + FORKS_FRONT, + FORKS_REAR, + WHEEL_FRONT, + WHEEL_REAR, + MUDGUARD, + HANDLEBARS, + MISC_A, + MISC_B, + + NUM_NODES +}; + struct sRideAnimData { int32 iAnimGroup; @@ -29,7 +45,7 @@ static_assert(sizeof(sRideAnimData) == 0x1C, "Invalid size for sRideAnimData"); class CBikeSAInterface : public CVehicleSAInterface { public: - int32 m_apModelNodes[10]; + RwFrame* m_apModelNodes[static_cast(eBikeNodes::NUM_NODES)]; int8 m_bLeanMatrixCalculated; int8 pad0[3]; // Maybe prev value is int32 int8 m_mLeanMatrix[72]; diff --git a/Client/game_sa/CBmxSA.h b/Client/game_sa/CBmxSA.h index 250a8bd5e6..dd64755c6d 100644 --- a/Client/game_sa/CBmxSA.h +++ b/Client/game_sa/CBmxSA.h @@ -14,6 +14,22 @@ #include #include "CBikeSA.h" +enum class eBmxNodes +{ + NONE = 0, + CHASSIS, + FORKS_FRONT, + FORKS_REAR, + WHEEL_FRONT, + WHEEL_REAR, + HANDLEBARS, + CHAINSET, + PEDAL_R, + PEDAL_L, + + NUM_NODES +}; + class CBmxSAInterface : public CBikeSAInterface { // fill this diff --git a/Client/game_sa/CBoatSA.h b/Client/game_sa/CBoatSA.h index 34f90003c7..6df3268bf0 100644 --- a/Client/game_sa/CBoatSA.h +++ b/Client/game_sa/CBoatSA.h @@ -14,12 +14,30 @@ #include #include "CVehicleSA.h" +enum class eBoatNodes +{ + NONE = 0, + MOVING, + WINDSCREEN, + RUDDER, + FLAP_LEFT, + FLAP_RIGHT, + REARFLAP_LEFT, + REARFLAP_RIGHT, + STATIC_PROP, + MOVING_PROP, + STATIC_PROP2, + MOVING_PROP2, + + NUM_NODES +}; + class CBoatSAInterface : public CVehicleSAInterface { public: uint32 pad1[3]; // 1440 uint32 BoatFlags; // 1452 - RwFrame* pBoatParts[11]; // 1456 [[ find out correct size + RwFrame* pBoatParts[static_cast(eBoatNodes::NUM_NODES)]; // 1456 uint32 pad2[3]; // 1500 uint16 pad3; // 1512 uint8 pad4[2]; // 1514 diff --git a/Client/game_sa/CTrainSA.h b/Client/game_sa/CTrainSA.h index 969fa907ee..84b25a6108 100644 --- a/Client/game_sa/CTrainSA.h +++ b/Client/game_sa/CTrainSA.h @@ -14,29 +14,27 @@ #include "CVehicleSA.h" #include "CDoorSA.h" -namespace eTrainNode +enum class eTrainNodes { - enum - { - NONE = 0, - DOOR_LF = 1, - DOOR_RF = 2, - WHEEL_RF1 = 3, - WHEEL_RF2 = 4, - WHEEL_RF3 = 5, - WHEEL_RB1 = 6, - WHEEL_RB2 = 7, - WHEEL_RB3 = 8, - WHEEL_LF1 = 9, - WHEEL_LF2 = 10, - WHEEL_LF3 = 11, - WHEEL_LB1 = 12, - WHEEL_LB2 = 13, - WHEEL_LB3 = 14, - BOGIE_FRONT = 15, - BOGIE_REAR = 16, - NUM_NODES - }; + NONE = 0, + DOOR_LF, + DOOR_RF, + WHEEL_RF1, + WHEEL_RF2, + WHEEL_RF3, + WHEEL_RB1, + WHEEL_RB2, + WHEEL_RB3, + WHEEL_LF1, + WHEEL_LF2, + WHEEL_LF3, + WHEEL_LB1, + WHEEL_LB2, + WHEEL_LB3, + BOGIE_FRONT, + BOGIE_REAR, + + NUM_NODES }; enum class eTrainPassengersGenerationState : unsigned char @@ -101,7 +99,7 @@ class CTrainSAInterface : public CVehicleSAInterface CTrainSAInterface* m_prevCarriage; CTrainSAInterface* m_nextCarriage; CDoorSAInterface m_aDoors[MAX_DOORS]; - RwFrame* m_aTrainNodes[eTrainNode::NUM_NODES]; + RwFrame* m_aTrainNodes[static_cast(eTrainNodes::NUM_NODES)]; }; static_assert(sizeof(CTrainSAInterface) == 0x6AC, "Invalid size for CTrainSAInterface"); diff --git a/Client/game_sa/CVehicleSA.cpp b/Client/game_sa/CVehicleSA.cpp index ab1635c91d..779661ed8a 100644 --- a/Client/game_sa/CVehicleSA.cpp +++ b/Client/game_sa/CVehicleSA.cpp @@ -21,6 +21,7 @@ #include "CTrainSA.h" #include "CPlaneSA.h" #include "CVehicleSA.h" +#include "CBoatSA.h" #include "CVisibilityPluginsSA.h" #include "CWorldSA.h" #include "gamesa_renderware.h" @@ -1504,27 +1505,97 @@ void CVehicleSA::SetGravity(const CVector* pvecGravity) m_vecGravity = *pvecGravity; } -CObject* CVehicleSA::SpawnFlyingComponent(int i_1, unsigned int ui_2) +bool CVehicleSA::SpawnFlyingComponent(const eCarNodes& nodeIndex, const eCarComponentCollisionTypes& collisionType, std::int32_t removalTime) { - DWORD dwReturn; - DWORD dwThis = (DWORD)GetInterface(); - DWORD dwFunc = FUNC_CAutomobile__SpawnFlyingComponent; - _asm + if (nodeIndex == eCarNodes::NONE) + return false; + + DWORD nodesOffset = OFFSET_CAutomobile_Nodes; + RwFrame* defaultBikeChassisFrame = nullptr; + + // CBike, CBmx, CBoat and CTrain don't inherit CAutomobile so let's do it manually! + switch (static_cast(GetVehicleInterface()->m_vehicleClass)) { - mov ecx, dwThis - push ui_2 - push i_1 - call dwFunc - mov dwReturn, eax + case VehicleClass::AUTOMOBILE: + case VehicleClass::MONSTER_TRUCK: + case VehicleClass::PLANE: + case VehicleClass::HELI: + case VehicleClass::TRAILER: + case VehicleClass::QUAD: + { + nodesOffset = OFFSET_CAutomobile_Nodes; + break; + } + case VehicleClass::TRAIN: + { + if (static_cast(nodeIndex) >= eTrainNodes::NUM_NODES) + return false; + + nodesOffset = OFFSET_CTrain_Nodes; + break; + } + case VehicleClass::BIKE: + case VehicleClass::BMX: + { + auto* bikeInterface = static_cast(GetVehicleInterface()); + if (!bikeInterface) + return false; + + if (static_cast(nodeIndex) >= eBikeNodes::NUM_NODES) + return false; + + nodesOffset = OFFSET_CBike_Nodes; + if (static_cast(nodeIndex) != eBikeNodes::CHASSIS) + break; + + // Set the correct "bike_chassis" frame for bikes + defaultBikeChassisFrame = bikeInterface->m_apModelNodes[1]; + if (defaultBikeChassisFrame && std::strcmp(defaultBikeChassisFrame->szName, "chassis_dummy") == 0) + { + RwFrame* correctChassisFrame = RwFrameFindFrame(RpGetFrame(bikeInterface->m_pRwObject), "chassis"); + if (correctChassisFrame) + bikeInterface->m_apModelNodes[1] = correctChassisFrame; + } + break; + } + case VehicleClass::BOAT: + { + if (static_cast(nodeIndex) >= eBoatNodes::NUM_NODES) + return false; + + nodesOffset = OFFSET_CBoat_Nodes; + break; + } + default: + return false; } - CObject* pObject = NULL; - if (dwReturn) + // Patch nodes array in CAutomobile::SpawnFlyingComponent + MemPut(0x6A85B3, nodesOffset); + MemPut(0x6A8631, nodesOffset); + + auto* componentObject = ((CObjectSAInterface * (__thiscall*)(CVehicleSAInterface*, int, int)) FUNC_CAutomobile__SpawnFlyingComponent)(GetVehicleInterface(), static_cast(nodeIndex), static_cast(collisionType)); + + // Restore default nodes array in CAutomobile::SpawnFlyingComponent + // CAutomobile::m_aCarNodes offset + MemPut(0x6A85B3, 0x648); + MemPut(0x6A8631, 0x648); + + // Restore default chassis frame for bikes + if (static_cast(nodeIndex) == eBikeNodes::CHASSIS && defaultBikeChassisFrame) { - SClientEntity* pObjectClientEntity = pGame->GetPools()->GetObject((DWORD*)dwReturn); - pObject = pObjectClientEntity ? pObjectClientEntity->pEntity : nullptr; + auto* bikeInterface = static_cast(GetVehicleInterface()); + if (bikeInterface && bikeInterface->m_apModelNodes) + bikeInterface->m_apModelNodes[1] = defaultBikeChassisFrame; } - return pObject; + + if (removalTime <= -1 || !componentObject) + return true; + + std::uint32_t CTimer_ms = *reinterpret_cast(VAR_CTimer_snTimeInMilliseconds); + componentObject->uiObjectRemovalTime = CTimer_ms + static_cast(removalTime); + + return true; } void CVehicleSA::SetWheelVisibility(eWheelPosition wheel, bool bVisible) @@ -1534,16 +1605,16 @@ void CVehicleSA::SetWheelVisibility(eWheelPosition wheel, bool bVisible) switch (wheel) { case FRONT_LEFT_WHEEL: - pFrame = vehicle->m_aCarNodes[eCarNode::WHEEL_LF]; + pFrame = vehicle->m_aCarNodes[static_cast(eCarNodes::WHEEL_LF)]; break; case REAR_LEFT_WHEEL: - pFrame = vehicle->m_aCarNodes[eCarNode::WHEEL_LB]; + pFrame = vehicle->m_aCarNodes[static_cast(eCarNodes::WHEEL_LB)]; break; case FRONT_RIGHT_WHEEL: - pFrame = vehicle->m_aCarNodes[eCarNode::WHEEL_RF]; + pFrame = vehicle->m_aCarNodes[static_cast(eCarNodes::WHEEL_RF)]; break; case REAR_RIGHT_WHEEL: - pFrame = vehicle->m_aCarNodes[eCarNode::WHEEL_RB]; + pFrame = vehicle->m_aCarNodes[static_cast(eCarNodes::WHEEL_RB)]; break; default: break; diff --git a/Client/game_sa/CVehicleSA.h b/Client/game_sa/CVehicleSA.h index 58632dabbf..382a071ac1 100644 --- a/Client/game_sa/CVehicleSA.h +++ b/Client/game_sa/CVehicleSA.h @@ -94,6 +94,20 @@ struct RwTexture; #define FUNC_CAutomobile_OnVehiclePreRender 0x6ABCFD #define FUNC_CVehicle_DoSunGlare 0x6DD6F0 +// CClumpModelInfo::GetFrameFromName +#define FUNC_CClumpModelInfo_GetFrameFromName 0x4C5400 + +// CAutomobile::m_aCarNodes +// CTrain::m_aTrainNodes +// CBike::m_apModelNodes +// CBoat::pBoatParts +#define OFFSET_CAutomobile_Nodes 0x648 +#define OFFSET_CTrain_Nodes 0x668 +#define OFFSET_CBike_Nodes 0x5A0 +#define OFFSET_CBoat_Nodes 0x5B0 + +#define VAR_CTimer_snTimeInMilliseconds 0xB7CB84 + struct SRailNodeSA { short sX; // x coordinate times 8 @@ -604,7 +618,7 @@ class CVehicleSA : public virtual CVehicle, public virtual CPhysicalSA SharedUtil::SColor GetHeadLightColor() { return m_HeadLightColor; } void SetHeadLightColor(const SharedUtil::SColor color) { m_HeadLightColor = color; } - CObject* SpawnFlyingComponent(int i_1, unsigned int ui_2); + bool SpawnFlyingComponent(const eCarNodes& nodeIndex, const eCarComponentCollisionTypes& collisionType, std::int32_t removalTime = -1); void SetWheelVisibility(eWheelPosition wheel, bool bVisible); CVector GetWheelPosition(eWheelPosition wheel); diff --git a/Client/mods/deathmatch/logic/CClientVehicle.cpp b/Client/mods/deathmatch/logic/CClientVehicle.cpp index e0e27dd417..a45d850a30 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.cpp +++ b/Client/mods/deathmatch/logic/CClientVehicle.cpp @@ -5037,6 +5037,14 @@ void CClientVehicle::ResetWheelScale() m_bWheelScaleChanged = false; } +bool CClientVehicle::SpawnFlyingComponent(const eCarNodes& nodeID, const eCarComponentCollisionTypes& collisionType, std::int32_t removalTime) +{ + if (!m_pVehicle) + return false; + + return m_pVehicle->SpawnFlyingComponent(nodeID, collisionType, removalTime); +} + CVector CClientVehicle::GetEntryPoint(std::uint32_t entryPointIndex) { static const uint32_t lookup[4] = {10, 8, 11, 9}; diff --git a/Client/mods/deathmatch/logic/CClientVehicle.h b/Client/mods/deathmatch/logic/CClientVehicle.h index e2c83c618e..76ec08eff1 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(); + bool SpawnFlyingComponent(const eCarNodes& nodeID, const eCarComponentCollisionTypes& collisionType, std::int32_t removalTime); + CVector GetEntryPoint(std::uint32_t entryPointIndex); protected: diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index b35bfee24b..6ac42bf386 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -155,6 +155,7 @@ void CLuaVehicleDefs::LoadFunctions() {"setVehicleVariant", ArgumentParser}, {"setVehicleWheelScale", ArgumentParser}, {"setVehicleModelWheelSize", ArgumentParser}, + {"spawnVehicleFlyingComponent", ArgumentParser}, }; // Add functions @@ -301,6 +302,8 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "addUpgrade", "addVehicleUpgrade"); lua_classfunction(luaVM, "removeUpgrade", "removeVehicleUpgrade"); + lua_classfunction(luaVM, "spawnFlyingComponent", "spawnVehicleFlyingComponent"); + lua_classvariable(luaVM, "locked", "setVehicleLocked", "isVehicleLocked"); lua_classvariable(luaVM, "controller", NULL, "getVehicleController"); lua_classvariable(luaVM, "occupants", NULL, "getVehicleOccupants"); @@ -4233,7 +4236,7 @@ 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); @@ -4273,3 +4276,67 @@ std::variant> CLuaVehicleDefs::OOP_GetVehicleEntryP return entryPoints; } + +bool CLuaVehicleDefs::SpawnVehicleFlyingComponent(CClientVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, + std::optional removalTime) +{ + auto partNodeIndex = static_cast(nodeIndex); + auto collisionType = componentCollisionType.has_value() ? static_cast(componentCollisionType.value()) + : eCarComponentCollisionTypes::COL_NODE_PANEL; + + if (nodeIndex < 1 || partNodeIndex >= eCarNodes::NUM_NODES) + throw std::invalid_argument("Invalid component index"); + + if (collisionType >= eCarComponentCollisionTypes::COL_NODES_NUM) + throw std::invalid_argument("Invalid collision type index"); + + if (!componentCollisionType.has_value()) + { + switch (partNodeIndex) + { + case eCarNodes::WHEEL_RF: + case eCarNodes::WHEEL_RB: + case eCarNodes::WHEEL_LF: + case eCarNodes::WHEEL_LB: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_WHEEL; + break; + } + case eCarNodes::DOOR_RF: + case eCarNodes::DOOR_RR: + case eCarNodes::DOOR_LF: + case eCarNodes::DOOR_LR: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_DOOR; + break; + } + case eCarNodes::BUMP_FRONT: + case eCarNodes::BUMP_REAR: + case eCarNodes::WHEEL_LM: + case eCarNodes::WHEEL_RM: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BUMPER; + break; + } + case eCarNodes::BOOT: + case eCarNodes::CHASSIS: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BOOT; + break; + } + case eCarNodes::BONNET: + case eCarNodes::WINDSCREEN: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BONNET; + break; + } + default: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_PANEL; + break; + } + } + } + + return vehicle->SpawnFlyingComponent(partNodeIndex, collisionType, removalTime.value_or(-1)); +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index 5c2e908d58..28c2f5e372 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -179,4 +179,6 @@ class CLuaVehicleDefs : public CLuaDefs LUA_DECLARE(SetVehicleComponentVisible); LUA_DECLARE(GetVehicleComponentVisible); LUA_DECLARE(GetVehicleComponents); + + static bool SpawnVehicleFlyingComponent(CClientVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime); }; diff --git a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp index be586965db..7915c2c7d4 100644 --- a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp +++ b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.cpp @@ -52,6 +52,7 @@ void CVehicleRPCs::LoadFunctions() AddHandler(REMOVE_VEHICLE_SIRENS, RemoveVehicleSirens, "removeVehicleSirens"); AddHandler(SET_VEHICLE_SIRENS, SetVehicleSirens, "setVehicleSirens"); AddHandler(SET_VEHICLE_PLATE_TEXT, SetVehiclePlateText, "setVehiclePlateText"); + AddHandler(SPAWN_VEHICLE_FLYING_COMPONENT, SpawnVehicleFlyingComponent, "spawnVehicleFlyingComponent"); } void CVehicleRPCs::DestroyAllVehicles(NetBitStreamInterface& bitStream) @@ -653,3 +654,16 @@ void CVehicleRPCs::SetVehiclePlateText(CClientEntity* pSourceEntity, NetBitStrea } } } + +void CVehicleRPCs::SpawnVehicleFlyingComponent(CClientEntity* const sourceEntity, NetBitStreamInterface& bitStream) +{ + CClientVehicle* vehicle = m_pVehicleManager->Get(sourceEntity->GetID()); + if (!vehicle) + return; + + std::uint8_t nodeIndex, collisionType; + std::int32_t removalTime; + + if (bitStream.Read(nodeIndex) && bitStream.Read(collisionType) && bitStream.Read(removalTime)) + vehicle->SpawnFlyingComponent(static_cast(nodeIndex), static_cast(collisionType), removalTime); +} diff --git a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h index e63d609fdf..6d4e9f5d19 100644 --- a/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h +++ b/Client/mods/deathmatch/logic/rpc/CVehicleRPCs.h @@ -57,4 +57,5 @@ class CVehicleRPCs : public CRPCFunctions DECLARE_ELEMENT_RPC(RemoveVehicleSirens); DECLARE_ELEMENT_RPC(SetVehicleSirens); DECLARE_ELEMENT_RPC(SetVehiclePlateText); + DECLARE_ELEMENT_RPC(SpawnVehicleFlyingComponent); }; diff --git a/Client/sdk/game/CDamageManager.h b/Client/sdk/game/CDamageManager.h index 81fda71267..9c4fcc2348 100644 --- a/Client/sdk/game/CDamageManager.h +++ b/Client/sdk/game/CDamageManager.h @@ -121,6 +121,49 @@ enum eLights MAX_LIGHTS // MUST BE 16 OR LESS }; +enum class eCarNodes +{ + NONE = 0, + CHASSIS, + WHEEL_RF, + WHEEL_RM, + WHEEL_RB, + WHEEL_LF, + WHEEL_LM, + WHEEL_LB, + DOOR_RF, + DOOR_RR, + DOOR_LF, + DOOR_LR, + BUMP_FRONT, + BUMP_REAR, + WING_RF, + WING_LF, + BONNET, + BOOT, + WINDSCREEN, + EXHAUST, + MISC_A, + MISC_B, + MISC_C, + MISC_D, + MISC_E, + + NUM_NODES +}; + +enum class eCarComponentCollisionTypes +{ + COL_NODE_BUMPER = 0, + COL_NODE_WHEEL, + COL_NODE_DOOR, + COL_NODE_BONNET, + COL_NODE_BOOT, + COL_NODE_PANEL, + + COL_NODES_NUM +}; + class CDamageManager { public: diff --git a/Client/sdk/game/CVehicle.h b/Client/sdk/game/CVehicle.h index 356fe40470..a5a4f1cdd4 100644 --- a/Client/sdk/game/CVehicle.h +++ b/Client/sdk/game/CVehicle.h @@ -264,7 +264,7 @@ class CVehicle : public virtual CPhysical virtual SColor GetHeadLightColor() = 0; virtual void SetHeadLightColor(const SColor color) = 0; - virtual CObject* SpawnFlyingComponent(int i_1, unsigned int ui_2) = 0; + virtual bool SpawnFlyingComponent(const eCarNodes& nodeIndex, const eCarComponentCollisionTypes& collisionType, std::int32_t removalTime = -1) = 0; virtual void SetWheelVisibility(eWheelPosition wheel, bool bVisible) = 0; virtual CVector GetWheelPosition(eWheelPosition wheel) = 0; diff --git a/Server/mods/deathmatch/logic/CPerfStat.RPCPacketUsage.cpp b/Server/mods/deathmatch/logic/CPerfStat.RPCPacketUsage.cpp index 6a0604b65b..fd4bd0b8bc 100644 --- a/Server/mods/deathmatch/logic/CPerfStat.RPCPacketUsage.cpp +++ b/Server/mods/deathmatch/logic/CPerfStat.RPCPacketUsage.cpp @@ -230,6 +230,7 @@ ADD_ENUM1(SET_MARKER_TARGET_ARROW_PROPERTIES) ADD_ENUM1(RESPAWN_OBJECT) ADD_ENUM1(TOGGLE_OBJECT_RESPAWN) ADD_ENUM1(RESET_WORLD_PROPERTIES) +ADD_ENUM1(SPAWN_VEHICLE_FLYING_COMPONENT) IMPLEMENT_ENUM_END("eElementRPCFunctions") DECLARE_ENUM(CRPCFunctions::eRPCFunctions); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index ad06e54a70..67764f8057 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -12488,3 +12488,14 @@ bool CStaticFunctionDefinitions::SetColPolygonHeight(CColPolygon* pColPolygon, f return false; } + +bool CStaticFunctionDefinitions::SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::uint8_t collisionType, std::int32_t removalTime) +{ + CBitStream bitStream; + bitStream.pBitStream->Write(nodeIndex); + bitStream.pBitStream->Write(collisionType); + bitStream.pBitStream->Write(removalTime); + m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(vehicle, SPAWN_VEHICLE_FLYING_COMPONENT, *bitStream.pBitStream)); + + return true; +} diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index bb0e99c0ee..dd6202208f 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -241,6 +241,7 @@ class CStaticFunctionDefinitions // Vehicle create/destroy functions static CVehicle* CreateVehicle(CResource* pResource, unsigned short usModel, const CVector& vecPosition, const CVector& vecRotation, const char* szRegPlate, unsigned char ucVariant, unsigned char ucVariant2, bool bSynced); + static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::uint8_t collisionType, std::int32_t removalTime = -1); // Vehicle get functions static bool GetVehicleVariant(CVehicle* pVehicle, unsigned char& ucVariant, unsigned char& ucVariant2); diff --git a/Server/mods/deathmatch/logic/CVehicle.h b/Server/mods/deathmatch/logic/CVehicle.h index 10de01e625..d5dbb43243 100644 --- a/Server/mods/deathmatch/logic/CVehicle.h +++ b/Server/mods/deathmatch/logic/CVehicle.h @@ -111,6 +111,49 @@ enum eVehicleType VEHICLE_TRAILER }; +enum class eCarNodes +{ + NONE = 0, + CHASSIS, + WHEEL_RF, + WHEEL_RM, + WHEEL_RB, + WHEEL_LF, + WHEEL_LM, + WHEEL_LB, + DOOR_RF, + DOOR_RR, + DOOR_LF, + DOOR_LR, + BUMP_FRONT, + BUMP_REAR, + WING_RF, + WING_LF, + BONNET, + BOOT, + WINDSCREEN, + EXHAUST, + MISC_A, + MISC_B, + MISC_C, + MISC_D, + MISC_E, + + NUM_NODES +}; + +enum class eCarComponentCollisionTypes +{ + COL_NODE_BUMPER = 0, + COL_NODE_WHEEL, + COL_NODE_DOOR, + COL_NODE_BONNET, + COL_NODE_BOOT, + COL_NODE_PANEL, + + COL_NODES_NUM +}; + #define SIREN_TYPE_FIRST 1 #define SIREN_TYPE_LAST 6 #define SIREN_ID_MAX 7 diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 294ea7310c..d34d8fe579 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -22,6 +22,7 @@ void CLuaVehicleDefs::LoadFunctions() constexpr static const std::pair functions[]{ // Vehicle create/destroy funcs {"createVehicle", CreateVehicle}, + {"spawnVehicleFlyingComponent", ArgumentParser}, // Vehicle get funcs {"getVehicleType", GetVehicleType}, @@ -241,6 +242,7 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) // lua_classfunction(luaVM, "setTrack", "setTrainTrack"); lua_classfunction(luaVM, "setTrainPosition", "setTrainPosition"); lua_classfunction(luaVM, "setTrainSpeed", "setTrainSpeed"); // Reduce confusion + lua_classfunction(luaVM, "spawnFlyingComponent", "spawnVehicleFlyingComponent"); lua_classvariable(luaVM, "damageProof", "setVehicleDamageProof", "isVehicleDamageProof"); lua_classvariable(luaVM, "locked", "setVehicleLocked", "isVehicleLocked"); @@ -2982,3 +2984,65 @@ int CLuaVehicleDefs::SetVehiclePlateText(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } + +bool CLuaVehicleDefs::SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime) +{ + auto partNodeIndex = static_cast(nodeIndex); + auto collisionType = componentCollisionType.has_value() ? static_cast(componentCollisionType.value()) : eCarComponentCollisionTypes::COL_NODE_PANEL; + + if (nodeIndex < 1 || partNodeIndex >= eCarNodes::NUM_NODES) + throw std::invalid_argument("Invalid component index"); + + if (collisionType >= eCarComponentCollisionTypes::COL_NODES_NUM) + throw std::invalid_argument("Invalid collision type index"); + + if (!componentCollisionType.has_value()) + { + switch (partNodeIndex) + { + case eCarNodes::WHEEL_RF: + case eCarNodes::WHEEL_RB: + case eCarNodes::WHEEL_LF: + case eCarNodes::WHEEL_LB: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_WHEEL; + break; + } + case eCarNodes::DOOR_RF: + case eCarNodes::DOOR_RR: + case eCarNodes::DOOR_LF: + case eCarNodes::DOOR_LR: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_DOOR; + break; + } + case eCarNodes::BUMP_FRONT: + case eCarNodes::BUMP_REAR: + case eCarNodes::WHEEL_LM: + case eCarNodes::WHEEL_RM: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BUMPER; + break; + } + case eCarNodes::BOOT: + case eCarNodes::CHASSIS: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BOOT; + break; + } + case eCarNodes::BONNET: + case eCarNodes::WINDSCREEN: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_BONNET; + break; + } + default: + { + collisionType = eCarComponentCollisionTypes::COL_NODE_PANEL; + break; + } + } + } + + return CStaticFunctionDefinitions::SpawnVehicleFlyingComponent(vehicle, nodeIndex, static_cast(collisionType), removalTime.value_or(-1)); +} diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index 3200e2ada3..b349736113 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -125,4 +125,6 @@ class CLuaVehicleDefs : public CLuaDefs LUA_DECLARE(GetVehicleSirens); LUA_DECLARE(GetVehicleSirenParams); LUA_DECLARE(SetVehiclePlateText); + + static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime); }; diff --git a/Shared/sdk/net/rpc_enums.h b/Shared/sdk/net/rpc_enums.h index 6f63818b46..2318908f4e 100644 --- a/Shared/sdk/net/rpc_enums.h +++ b/Shared/sdk/net/rpc_enums.h @@ -288,5 +288,7 @@ enum eElementRPCFunctions RESET_WORLD_PROPERTIES, + SPAWN_VEHICLE_FLYING_COMPONENT, + NUM_RPC_FUNCS // Add above this line }; From 2318836b00cb7af03c3df0679fcefa33b6743caf Mon Sep 17 00:00:00 2001 From: Shady <68560906+shadylua@users.noreply.github.com> Date: Tue, 8 Oct 2024 05:28:35 +0300 Subject: [PATCH 14/26] Remove duplicate user names in CNickGen.cpp (#3777) * Update CNickGen.cpp * Apply clang-format --------- Co-authored-by: Uladzislau Nikalayevich --- Client/core/CNickGen.cpp | 340 +++++++++++++++++++-------------------- 1 file changed, 169 insertions(+), 171 deletions(-) diff --git a/Client/core/CNickGen.cpp b/Client/core/CNickGen.cpp index 13f38c470b..a4cb2738e2 100644 --- a/Client/core/CNickGen.cpp +++ b/Client/core/CNickGen.cpp @@ -22,180 +22,178 @@ const char* const CNickGen::m_szAdjectives[] = { "Awake", "Aware", "Awesome", "Awful", "Axiomatic", "Bad", "Barbarous", "Bashful", "Bawdy", "Beautiful", "Befitting", "Beneficial", "Bent", "Berserk", "Best", "Better", "Bewildered", "Big", "Billowy", "Bite-sized", "Bitter", "Bizarre", "Black", "Bloody", "Blue", "Blue-eyed", "Blushing", "Boiling", "Boorish", "Bored", "Boring", "Bouncy", "Boundless", - "Brainy", "Brash", "Brave", "Brawny", "Breakable", "Breezy", "Brief", "Bright", "Bright", "Broad", "Broken", - "Brown", "Bumpy", "Burly", "Bustling", "Busy", "Cagey", "Callous", "Calm", "Capable", "Capricious", "Careful", - "Careless", "Caring", "Cautious", "Ceaseless", "Certain", "Changeable", "Charming", "Cheap", "Cheerful", "Chemical", "Chief", - "Childlike", "Chilly", "Chivalrous", "Chubby", "Chunky", "Clammy", "Classy", "Clean", "Clear", "Clever", "Cloistered", - "Cloudy", "Closed", "Clumsy", "Cluttered", "Coherent", "Cold", "Colorful", "Colossal", "Combative", "Common", "Complete", - "Complex", "Concerned", "Condemned", "Confused", "Conscious", "Cooing", "Cool", "Courageous", "Cowardly", "Crabby", "Craven", - "Crazy", "Creepy", "Crooked", "Crowded", "Cruel", "Cuddly", "Cultured", "Cumbersome", "Curious", "Curly", "Curved", - "Curvy", "Cut", "Cute", "Cynical", "Daffy", "Daily", "Damaged", "Damaging", "Damp", "Dangerous", "Dapper", - "Dark", "Dashing", "Dazzling", "Dead", "Deadpan", "Deafening", "Dear", "Debonair", "Decisive", "Decorous", "Deep", - "Deeply", "Defeated", "Defective", "Defiant", "Delicate", "Delicious", "Delightful", "Demonic", "Delirious", "Dependent", "Depressed", - "Deranged", "Deserted", "Detailed", "Determined", "Devilish", "Didactic", "Different", "Difficult", "Diligent", "Direful", "Dirty", - "Disastrous", "Discreet", "Disgusted", "Disgusting", "Distinct", "Disturbed", "Divergent", "Dizzy", "Doubtful", "Drab", "Draconian", - "Dramatic", "Dreary", "Drunk", "Dry", "Dull", "Dusty", "Dusty", "Dynamic", "Eager", "Early", "Earthy", - "Easy", "Eatable", "Economic", "Educated", "Efficient", "Eight", "Elastic", "Elated", "Elderly", "Electric", "Elegant", - "Elfin", "Elite", "Eminent", "Empty", "Enchanted", "Enchanting", "Endurable", "Energetic", "Enormous", "Envious", "Equable", - "Equal", "Erect", "Erratic", "Ethereal", "Evanescent", "Evasive", "Even", "Excellent", "Excited", "Exciting", "Exclusive", - "Exotic", "Expensive", "Exuberant", "Exultant", "Fabulous", "Faded", "Faint", "Fair", "Faithful", "Fallacious", "False", - "Familiar", "Famous", "Fanatical", "Fancy", "Fantastic", "Far", "Far-flung", "Fascinated", "Fast", "Fat", "Faulty", - "Fearful", "Fearless", "Feeble", "Feigned", "Female", "Fertile", "Festive", "Few", "Fierce", "Filthy", "Fine", - "Finicky", "First", "Five", "Fixed", "Flagrant", "Flaky", "Flashy", "Flat", "Flawless", "Flimsy", "Flippant", - "Flowery", "Fluffy", "Fluttering", "Foamy", "Foolish", "Foregoing", "Forgetful", "Fortunate", "Four", "Frail", "Fragile", - "Frantic", "Free", "Freezing", "Frequent", "Fresh", "Fretful", "Friendly", "Frightened", "Full", "Fumbling", "Functional", - "Funny", "Furry", "Furtive", "Future", "Futuristic", "Fuzzy", "Gabby", "Gainful", "Gamy", "Gaping", "Garrulous", - "Gaudy", "General", "Gentle", "Giant", "Giddy", "Gifted", "Gigantic", "Glamorous", "Gleaming", "Glib", "Glistening", - "Glorious", "Glossy", "Godly", "Good", "Goofy", "Gorgeous", "Graceful", "Grandiose", "Grateful", "Gratis", "Gray", - "Greasy", "Great", "Greedy", "Green", "Grey", "Grieving", "Groovy", "Grotesque", "Grouchy", "Grubby", "Gruesome", - "Grumpy", "Guarded", "Guiltless", "Gullible", "Gusty", "Guttural", "Habitual", "Half", "Hallowed", "Halting", "Handsome", - "Handsomely", "Handy", "Hanging", "Hapless", "Happy", "Hard", "Harmonious", "Harsh", "Hateful", "Heady", "Healthy", - "Heavenly", "Heavy", "Hellish", "Helpful", "Helpless", "Hesitant", "Hideous", "High", "Hilarious", "Hissing", "Historical", - "Holistic", "Hollow", "Homeless", "Homely", "Honorable", "Horrible", "Hospitable", "Hot", "Huge", "Hulking", "Humdrum", - "Humorous", "Hungry", "Hurried", "Hurt", "Hushed", "Husky", "Hypnotic", "Hysterical", "Icky", "Icy", "Idiotic", - "Ignorant", "Ill", "Illegal", "Ill-fated", "Imaginary", "Immense", "Imminent", "Impartial", "Imperfect", "Impolite", "Important", - "Imported", "Impossible", "Incredible", "Infamous", "Innate", "Innocent", "Insidious", "Internal", "Invincible", "Irate", "Irritating", - "Itchy", "Jaded", "Jagged", "Jazzy", "Jealous", "Jittery", "Jobless", "Jolly", "Joyous", "Judicious", "Juicy", - "Jumbled", "Jumpy", "Juvenile", "Kaput", "Keen", "Kind", "Kindly", "Knotty", "Knowing", "Known", "Labored", - "Lacking", "Lame", "Lamentable", "Languid", "Large", "Last", "Late", "Laughable", "Lavish", "Lazy", "Lean", - "Learned", "Left", "Legal", "Lethal", "Level", "Lewd", "Light", "Like", "Likeable", "Limping", "Literate", - "Little", "Lively", "Lively", "Living", "Lonely", "Long", "Longing", "Long-term", "Loose", "Lopsided", "Loud", - "Loutish", "Lovely", "Loving", "Low", "Lowly", "Lucky", "Ludicrous", "Lumpy", "Lush", "Luxuriant", "Lying", - "Lyrical", "Macabre", "Macho", "Maddening", "Madly", "Magenta", "Magical", "Majestic", "Makeshift", "Male", "Malicious", - "Mammoth", "Maniacal", "Many", "Marked", "Massive", "Married", "Marvelous", "Material", "Mature", "Mean", "Measly", - "Meaty", "Medical", "Meek", "Mellow", "Melodic", "Melted", "Merciful", "Mere", "Messy", "Mighty", "Military", - "Milky", "Mindless", "Miniature", "Minor", "Miscreant", "Misty", "Mixed", "Moaning", "Modern", "Moldy", "Momentous", - "Motionless", "Muddled", "Mundane", "Murky", "Mushy", "Mute", "Mysterious", "Naive", "Nappy", "Narrow", "Nasty", - "Natural", "Naughty", "Nauseating", "Near", "Neat", "Nebulous", "Necessary", "Needless", "Needy", "Neighborly", "Nervous", - "New", "Next", "Nice", "Nifty", "Nimble", "Nine", "Nippy", "Noiseless", "Noisy", "Nonchalant", "Nonstop", - "Normal", "Nostalgic", "Nosy", "Noxious", "Null", "Numberless", "Numerous", "Nutritious", "Nutty", "Oafish", "Obedient", - "Obeisant", "Obese", "Obnoxious", "Obscene", "Obsequious", "Observant", "Obsolete", "Obtainable", "Oceanic", "Odd", "Offbeat", - "Old", "Omniscient", "One", "Onerous", "Open", "Opposite", "Optimal", "Orange", "Ordinary", "Organic", "Ossified", - "Outgoing", "Outrageous", "Oval", "Overjoyed", "Overrated", "Overt", "Painful", "Pale", "Paltry", "Panicky", "Panoramic", - "Parallel", "Parched", "Past", "Pastoral", "Pathetic", "Peaceful", "Penitent", "Perfect", "Periodic", "Perpetual", "Petite", - "Petite", "Phobic", "Physical", "Picayune", "Pink", "Piquant", "Placid", "Plain", "Plant", "Plastic", "Plausible", - "Pleasant", "Plucky", "Pointless", "Poised", "Polite", "Political", "Poor", "Possessive", "Possible", "Powerful", "Precious", - "Premium", "Present", "Pretty", "Previous", "Pricey", "Prickly", "Private", "Probable", "Productive", "Profuse", "Protective", - "Proud", "Psychotic", "Public", "Puffy", "Pumped", "Puny", "Purple", "Purring", "Pushy", "Puzzled", "Puzzling", - "Quack", "Quaint", "Quick", "Quickest", "Quiet", "Quirky", "Quixotic", "Quizzical", "Rabid", "Racial", "Ragged", - "Rainy", "Rampant", "Rapid", "Rare", "Raspy", "Ratty", "Ready", "Real", "Rebel", "Receptive", "Recondite", - "Red", "Redundant", "Reflective", "Regular", "Relieved", "Remarkable", "Repulsive", "Resolute", "Resonant", "Rhetorical", "Rich", - "Right", "Righteous", "Rightful", "Rigid", "Ripe", "Ritzy", "Roasted", "Robust", "Romantic", "Roomy", "Rotten", - "Rough", "Round", "Royal", "Ruddy", "Rude", "Rural", "Rustic", "Ruthless", "Sable", "Sad", "Safe", - "Salty", "Same", "Sassy", "Satisfying", "Savory", "Scandalous", "Scarce", "Scared", "Scary", "Scattered", "Scientific", - "Scrawny", "Screeching", "Second", "Secret", "Secretive", "Sedate", "Seemly", "Selective", "Selfish", "Separate", "Serious", - "Shaggy", "Shaky", "Shallow", "Sharp", "Shiny", "Shivering", "Shocking", "Short", "Shrill", "Shut", "Shy", - "Sick", "Silent", "Silent", "Silky", "Silly", "Simple", "Simplistic", "Sincere", "Six", "Skillful", "Skinny", - "Sleepy", "Slim", "Slimy", "Slippery", "Sloppy", "Slow", "Small", "Smart", "Smelly", "Smiling", "Smoggy", - "Smooth", "Sneaky", "Snobbish", "Snotty", "Soft", "Soggy", "Solid", "Somber", "Sordid", "Sore", "Sore", - "Sour", "Sparkling", "Special", "Spicy", "Spiffy", "Spiky", "Spiritual", "Spiteful", "Splendid", "Spooky", "Spotless", - "Spotted", "Spotty", "Spurious", "Squalid", "Square", "Squealing", "Squeamish", "Staking", "Stale", "Standing", "Statuesque", - "Steadfast", "Steady", "Stealthy", "Steep", "Sticky", "Stiff", "Stingy", "Stormy", "Straight", "Strange", "Striped", - "Strong", "Stupendous", "Stupid", "Sturdy", "Subdued", "Subsequent", "Successful", "Succinct", "Sudden", "Sulky", "Super", - "Superb", "Supreme", "Swanky", "Sweet", "Sweltering", "Swift", "Synonymous", "Taboo", "Tacit", "Tacky", "Talented", - "Tall", "Tame", "Tan", "Tangible", "Tangy", "Tart", "Tasteful", "Tasteless", "Tasty", "Tawdry", "Tearful", - "Tedious", "Teeny", "Teeny-tiny", "Telling", "Temporary", "Ten", "Tender", "Tense", "Tense", "Tenuous", "Terrible", - "Terrific", "Tested", "Testy", "Thankful", "Thick", "Thin", "Thinkable", "Third", "Thirsty", "Thirsty", "Thoughtful", - "Three", "Thundering", "Tidy", "Tight", "Tiny", "Tired", "Tiresome", "Toothsome", "Torpid", "Tough", "Towering", - "Tranquil", "Trashy", "Tremendous", "Tricky", "Trite", "Troubled", "Truculent", "True", "Truthful", "Two", "Typical", - "Ubiquitous", "Ugliest", "Ugly", "Ultra", "Unable", "Unadvised", "Unarmed", "Unbecoming", "Unbiased", "Uncovered", "Understood", - "Unequal", "Unequaled", "Uneven", "Unhealthy", "Unique", "Unkempt", "Unknown", "Unnatural", "Unruly", "Unsightly", "Unsuitable", - "Untidy", "Unused", "Unusual", "Unwieldy", "Unwritten", "Upbeat", "Uppity", "Upset", "Uptight", "Used", "Useful", - "Useless", "Utopian", "Utter", "Uttermost", "Vacuous", "Vagabond", "Vague", "Valuable", "Various", "Vast", "Vengeful", - "Venomous", "Verdant", "Versed", "Victorious", "Vigorous", "Violent", "Violet", "Vivacious", "Voiceless", "Volatile", "Voracious", - "Vulgar", "Wacky", "Waggish", "Waiting", "Wakeful", "Wandering", "Wanting", "Warlike", "Warm", "Wary", "Wasteful", - "Watery", "Weak", "Wealthy", "Weary", "Well-made", "Well-off", "Well-to-do", "Wet", "Whimsical", "Whispering", "White", - "Whole", "Wholesale", "Wicked", "Wide", "Wide-eyed", "Wiggly", "Wild", "Willing", "Windy", "Wiry", "Wise", - "Wistful", "Witty", "Woebegone", "Womanly", "Wonderful", "Wooden", "Woozy", "Workable", "Worried", "Worthless", "Wrathful", - "Wretched", "Wrong", "Wry", + "Brainy", "Brash", "Brave", "Brawny", "Breakable", "Breezy", "Brief", "Bright", "Broad", "Broken", "Brown", + "Bumpy", "Burly", "Bustling", "Busy", "Cagey", "Callous", "Calm", "Capable", "Capricious", "Careful", "Careless", + "Caring", "Cautious", "Ceaseless", "Certain", "Changeable", "Charming", "Cheap", "Cheerful", "Chemical", "Chief", "Childlike", + "Chilly", "Chivalrous", "Chubby", "Chunky", "Clammy", "Classy", "Clean", "Clear", "Clever", "Cloistered", "Cloudy", + "Closed", "Clumsy", "Cluttered", "Coherent", "Cold", "Colorful", "Colossal", "Combative", "Common", "Complete", "Complex", + "Concerned", "Condemned", "Confused", "Conscious", "Cooing", "Cool", "Courageous", "Cowardly", "Crabby", "Craven", "Crazy", + "Creepy", "Crooked", "Crowded", "Cruel", "Cuddly", "Cultured", "Cumbersome", "Curious", "Curly", "Curved", "Curvy", + "Cut", "Cute", "Cynical", "Daffy", "Daily", "Damaged", "Damaging", "Damp", "Dangerous", "Dapper", "Dark", + "Dashing", "Dazzling", "Dead", "Deadpan", "Deafening", "Dear", "Debonair", "Decisive", "Decorous", "Deep", "Deeply", + "Defeated", "Defective", "Defiant", "Delicate", "Delicious", "Delightful", "Demonic", "Delirious", "Dependent", "Depressed", "Deranged", + "Deserted", "Detailed", "Determined", "Devilish", "Didactic", "Different", "Difficult", "Diligent", "Direful", "Dirty", "Disastrous", + "Discreet", "Disgusted", "Disgusting", "Distinct", "Disturbed", "Divergent", "Dizzy", "Doubtful", "Drab", "Draconian", "Dramatic", + "Dreary", "Drunk", "Dry", "Dull", "Dusty", "Dynamic", "Eager", "Early", "Earthy", "Easy", "Eatable", + "Economic", "Educated", "Efficient", "Eight", "Elastic", "Elated", "Elderly", "Electric", "Elegant", "Elfin", "Elite", + "Eminent", "Empty", "Enchanted", "Enchanting", "Endurable", "Energetic", "Enormous", "Envious", "Equable", "Equal", "Erect", + "Erratic", "Ethereal", "Evanescent", "Evasive", "Even", "Excellent", "Excited", "Exciting", "Exclusive", "Exotic", "Expensive", + "Exuberant", "Exultant", "Fabulous", "Faded", "Faint", "Fair", "Faithful", "Fallacious", "False", "Familiar", "Famous", + "Fanatical", "Fancy", "Fantastic", "Far", "Far-flung", "Fascinated", "Fast", "Fat", "Faulty", "Fearful", "Fearless", + "Feeble", "Feigned", "Female", "Fertile", "Festive", "Few", "Fierce", "Filthy", "Fine", "Finicky", "First", + "Five", "Fixed", "Flagrant", "Flaky", "Flashy", "Flat", "Flawless", "Flimsy", "Flippant", "Flowery", "Fluffy", + "Fluttering", "Foamy", "Foolish", "Foregoing", "Forgetful", "Fortunate", "Four", "Frail", "Fragile", "Frantic", "Free", + "Freezing", "Frequent", "Fresh", "Fretful", "Friendly", "Frightened", "Full", "Fumbling", "Functional", "Funny", "Furry", + "Furtive", "Future", "Futuristic", "Fuzzy", "Gabby", "Gainful", "Gamy", "Gaping", "Garrulous", "Gaudy", "General", + "Gentle", "Giant", "Giddy", "Gifted", "Gigantic", "Glamorous", "Gleaming", "Glib", "Glistening", "Glorious", "Glossy", + "Godly", "Good", "Goofy", "Gorgeous", "Graceful", "Grandiose", "Grateful", "Gratis", "Gray", "Greasy", "Great", + "Greedy", "Green", "Grey", "Grieving", "Groovy", "Grotesque", "Grouchy", "Grubby", "Gruesome", "Grumpy", "Guarded", + "Guiltless", "Gullible", "Gusty", "Guttural", "Habitual", "Half", "Hallowed", "Halting", "Handsome", "Handsomely", "Handy", + "Hanging", "Hapless", "Happy", "Hard", "Harmonious", "Harsh", "Hateful", "Heady", "Healthy", "Heavenly", "Heavy", + "Hellish", "Helpful", "Helpless", "Hesitant", "Hideous", "High", "Hilarious", "Hissing", "Historical", "Holistic", "Hollow", + "Homeless", "Homely", "Honorable", "Horrible", "Hospitable", "Hot", "Huge", "Hulking", "Humdrum", "Humorous", "Hungry", + "Hurried", "Hurt", "Hushed", "Husky", "Hypnotic", "Hysterical", "Icky", "Icy", "Idiotic", "Ignorant", "Ill", + "Illegal", "Ill-fated", "Imaginary", "Immense", "Imminent", "Impartial", "Imperfect", "Impolite", "Important", "Imported", "Impossible", + "Incredible", "Infamous", "Innate", "Innocent", "Insidious", "Internal", "Invincible", "Irate", "Irritating", "Itchy", "Jaded", + "Jagged", "Jazzy", "Jealous", "Jittery", "Jobless", "Jolly", "Joyous", "Judicious", "Juicy", "Jumbled", "Jumpy", + "Juvenile", "Kaput", "Keen", "Kind", "Kindly", "Knotty", "Knowing", "Known", "Labored", "Lacking", "Lame", + "Lamentable", "Languid", "Large", "Last", "Late", "Laughable", "Lavish", "Lazy", "Lean", "Learned", "Left", + "Legal", "Lethal", "Level", "Lewd", "Light", "Like", "Likeable", "Limping", "Literate", "Little", "Lively", + "Living", "Lonely", "Long", "Longing", "Long-term", "Loose", "Lopsided", "Loud", "Loutish", "Lovely", "Loving", + "Low", "Lowly", "Lucky", "Ludicrous", "Lumpy", "Lush", "Luxuriant", "Lying", "Lyrical", "Macabre", "Macho", + "Maddening", "Madly", "Magenta", "Magical", "Majestic", "Makeshift", "Male", "Malicious", "Mammoth", "Maniacal", "Many", + "Marked", "Massive", "Married", "Marvelous", "Material", "Mature", "Mean", "Measly", "Meaty", "Medical", "Meek", + "Mellow", "Melodic", "Melted", "Merciful", "Mere", "Messy", "Mighty", "Military", "Milky", "Mindless", "Miniature", + "Minor", "Miscreant", "Misty", "Mixed", "Moaning", "Modern", "Moldy", "Momentous", "Motionless", "Muddled", "Mundane", + "Murky", "Mushy", "Mute", "Mysterious", "Naive", "Nappy", "Narrow", "Nasty", "Natural", "Naughty", "Nauseating", + "Near", "Neat", "Nebulous", "Necessary", "Needless", "Needy", "Neighborly", "Nervous", "New", "Next", "Nice", + "Nifty", "Nimble", "Nine", "Nippy", "Noiseless", "Noisy", "Nonchalant", "Nonstop", "Normal", "Nostalgic", "Nosy", + "Noxious", "Null", "Numberless", "Numerous", "Nutritious", "Nutty", "Oafish", "Obedient", "Obeisant", "Obese", "Obnoxious", + "Obscene", "Obsequious", "Observant", "Obsolete", "Obtainable", "Oceanic", "Odd", "Offbeat", "Old", "Omniscient", "One", + "Onerous", "Open", "Opposite", "Optimal", "Orange", "Ordinary", "Organic", "Ossified", "Outgoing", "Outrageous", "Oval", + "Overjoyed", "Overrated", "Overt", "Painful", "Pale", "Paltry", "Panicky", "Panoramic", "Parallel", "Parched", "Past", + "Pastoral", "Pathetic", "Peaceful", "Penitent", "Perfect", "Periodic", "Perpetual", "Petite", "Phobic", "Physical", "Picayune", + "Pink", "Piquant", "Placid", "Plain", "Plant", "Plastic", "Plausible", "Pleasant", "Plucky", "Pointless", "Poised", + "Polite", "Political", "Poor", "Possessive", "Possible", "Powerful", "Precious", "Premium", "Present", "Pretty", "Previous", + "Pricey", "Prickly", "Private", "Probable", "Productive", "Profuse", "Protective", "Proud", "Psychotic", "Public", "Puffy", + "Pumped", "Puny", "Purple", "Purring", "Pushy", "Puzzled", "Puzzling", "Quack", "Quaint", "Quick", "Quickest", + "Quiet", "Quirky", "Quixotic", "Quizzical", "Rabid", "Racial", "Ragged", "Rainy", "Rampant", "Rapid", "Rare", + "Raspy", "Ratty", "Ready", "Real", "Rebel", "Receptive", "Recondite", "Red", "Redundant", "Reflective", "Regular", + "Relieved", "Remarkable", "Repulsive", "Resolute", "Resonant", "Rhetorical", "Rich", "Right", "Righteous", "Rightful", "Rigid", + "Ripe", "Ritzy", "Roasted", "Robust", "Romantic", "Roomy", "Rotten", "Rough", "Round", "Royal", "Ruddy", + "Rude", "Rural", "Rustic", "Ruthless", "Sable", "Sad", "Safe", "Salty", "Same", "Sassy", "Satisfying", + "Savory", "Scandalous", "Scarce", "Scared", "Scary", "Scattered", "Scientific", "Scrawny", "Screeching", "Second", "Secret", + "Secretive", "Sedate", "Seemly", "Selective", "Selfish", "Separate", "Serious", "Shaggy", "Shaky", "Shallow", "Sharp", + "Shiny", "Shivering", "Shocking", "Short", "Shrill", "Shut", "Shy", "Sick", "Silent", "Silky", "Silly", + "Simple", "Simplistic", "Sincere", "Six", "Skillful", "Skinny", "Sleepy", "Slim", "Slimy", "Slippery", "Sloppy", + "Slow", "Small", "Smart", "Smelly", "Smiling", "Smoggy", "Smooth", "Sneaky", "Snobbish", "Snotty", "Soft", + "Soggy", "Solid", "Somber", "Sordid", "Sore", "Sour", "Sparkling", "Special", "Spicy", "Spiffy", "Spiky", + "Spiritual", "Spiteful", "Splendid", "Spooky", "Spotless", "Spotted", "Spotty", "Spurious", "Squalid", "Square", "Squealing", + "Squeamish", "Staking", "Stale", "Standing", "Statuesque", "Steadfast", "Steady", "Stealthy", "Steep", "Sticky", "Stiff", + "Stingy", "Stormy", "Straight", "Strange", "Striped", "Strong", "Stupendous", "Stupid", "Sturdy", "Subdued", "Subsequent", + "Successful", "Succinct", "Sudden", "Sulky", "Super", "Superb", "Supreme", "Swanky", "Sweet", "Sweltering", "Swift", + "Synonymous", "Taboo", "Tacit", "Tacky", "Talented", "Tall", "Tame", "Tan", "Tangible", "Tangy", "Tart", + "Tasteful", "Tasteless", "Tasty", "Tawdry", "Tearful", "Tedious", "Teeny", "Teeny-tiny", "Telling", "Temporary", "Ten", + "Tender", "Tense", "Tenuous", "Terrible", "Terrific", "Tested", "Testy", "Thankful", "Thick", "Thin", "Thinkable", + "Third", "Thirsty", "Thoughtful", "Three", "Thundering", "Tidy", "Tight", "Tiny", "Tired", "Tiresome", "Toothsome", + "Torpid", "Tough", "Towering", "Tranquil", "Trashy", "Tremendous", "Tricky", "Trite", "Troubled", "Truculent", "True", + "Truthful", "Two", "Typical", "Ubiquitous", "Ugliest", "Ugly", "Ultra", "Unable", "Unadvised", "Unarmed", "Unbecoming", + "Unbiased", "Uncovered", "Understood", "Unequal", "Unequaled", "Uneven", "Unhealthy", "Unique", "Unkempt", "Unknown", "Unnatural", + "Unruly", "Unsightly", "Unsuitable", "Untidy", "Unused", "Unusual", "Unwieldy", "Unwritten", "Upbeat", "Uppity", "Upset", + "Uptight", "Used", "Useful", "Useless", "Utopian", "Utter", "Uttermost", "Vacuous", "Vagabond", "Vague", "Valuable", + "Various", "Vast", "Vengeful", "Venomous", "Verdant", "Versed", "Victorious", "Vigorous", "Violent", "Violet", "Vivacious", + "Voiceless", "Volatile", "Voracious", "Vulgar", "Wacky", "Waggish", "Waiting", "Wakeful", "Wandering", "Wanting", "Warlike", + "Warm", "Wary", "Wasteful", "Watery", "Weak", "Wealthy", "Weary", "Well-made", "Well-off", "Well-to-do", "Wet", + "Whimsical", "Whispering", "White", "Whole", "Wholesale", "Wicked", "Wide", "Wide-eyed", "Wiggly", "Wild", "Willing", + "Windy", "Wiry", "Wise", "Wistful", "Witty", "Woebegone", "Womanly", "Wonderful", "Wooden", "Woozy", "Workable", + "Worried", "Worthless", "Wrathful", "Wretched", "Wrong", "Wry", }; const char* const CNickGen::m_szNouns[] = { - "Aardvark", "Buffalo", "Alligator", "Ant", "Anteater", "Antelope", "Ape", "Armadillo", "Donkey", "Baboon", "Badger", - "Barracuda", "Bat", "Bear", "Beaver", "Bee", "Bison", "Boar", "Bush", "Butterfly", "Camel", "Calf", - "Cat", "Kitten", "Cattle", "Chamois", "Cheetah", "Chicken", "Chick", "Chimpanzee", "Infant", "Empress", "Troop", - "Cobra", "Cockroach", "Cormorant", "Cougar", "Coyote", "Crab", "Crane", "Crocodile", "Crow", "Deer", "Dog", - "Dogfish", "Dolphin", "Donkey", "Dove", "Dragonfly", "Duck", "Dugong", "Eagle", "Eaglet", "Echidna", "Eel", - "Eland", "Elephant", "Elk", "Falcon", "Ferret", "Finch", "Fly", "Fox", "Frog", "Gaur", "Gazelle", - "Gerbil", "Giant", "Giraffe", "Gnu", "Goat", "Goose", "Gorilla", "Guanaco", "Guinea", "Guineapig", "Gull", - "Hamster", "Hare", "Hawk", "Hedgehog", "Heron", "Hornet", "Horse", "Human", "Hyena", "Iguana", "Jackal", - "Jaguar", "Jellyfish", "Kangaroo", "Koala", "Komodo", "Kouprey", "Kudu", "Lark", "Lemur", "Leopard", "Lion", - "Llama", "Loris", "Louse", "Lobster", "Lyrebird", "Magpie", "Mallard", "Manatee", "Meerkat", "Mink", "Mole", - "Monkey", "Moose", "Mouse", "Mosquito", "Mule", "Okapi", "Oryx", "Ostrich", "Otter", "Owl", "Ox", - "Oyster", "Panther", "Partridge", "Peafowl", "Pelican", "Penguin", "Pig", "Pigeon", "Pony", "Porcupine", "Quelea", - "Rabbit", "Bunny", "Raccoon", "Rail", "Ram", "Rat", "Raven", "Reindeer", "Rhino", "Salamander", "Sealion", - "Seal", "Seahorse", "Seastar", "Shark", "Sheep", "Shrew", "Skunk", "Snail", "Snake", "Spider", "Squid", - "Squirrel", "Stinkbug", "Swan", "Tapir", "Tarsier", "Tiger", "Toad", "Turkey", "Turtle", "Vicuna", "Walrus", - "Wasp", "Weasel", "Whale", "Wolf", "Worm", "Yak", "Zebra", "Hat", "Cap", "Beret", "Astrakhan", - "Beanie", "Hardhat", "Pillbox", "Monkeycap", "Operahat", "Bonnet", "Bowler", "Coonskin", "Fedora", "Derby", "Montero", - "Cowboyhat", "Sombrero", "Yarmulke", "Skullcap", "Tam", "Sunbonnet", "Toque", "Tophat", "Babushka", "Balaclava", "Turban", - "Diadem", "Earmuffs", "Visor", "Scarf", "Veil", "Warbonnet", "Pithhelmet", "Hood", "Miter", "Butter", "Icecream", - "Cakebatter", "Coffee", "Tea", "Soda", "Beer", "Wine", "Cappuccino", "Jell-o", "Nougats", "Lambchops", "Steaks", - "Chowder", "Fishsoup", "Spaghetti", "Lobster", "Sushi", "Fondue", "Crabslegs", "Shrimp", "Garlic", "Onions", "Bratwurst", - "Kielbasa", "Hotdog", "Hamburger", "Herbs", "Grains", "Legumes", "Zampone", "Casserole", "Beans", "Seeds", "Stew", - "Cereal", "Polenta", "Pudding", "Pasta", "Macaroni", "Ravioli", "Wafer", "Crackers", "Cookies", "Sandwich", "Gyro", - "Wrap", "Omelet", "Popcorn", "Walnuts", "Nuts", "Almonds", "Pizza", "Mousse", "Brulee", "Cakes", "Pancake", - "Waffles", "Toast", "Candy", "Pie", "Senator", "Governor", "Councilman", "Detective", "Sleuth", "Trooper", "Musician", - "Maestro", "Conductor", "Composer", "Singer", "Architect", "Physician", "Manager", "Usher", "Painter", "Model", "Designer", - "Guest", "Attorney", "Lawyer", "Judge", "Mayor", "Therapist", "Teacher", "Principal", "Professor", "Orator", "Man", - "Woman", "Teen", "Child", "Mother", "Father", "Sister", "Brother", "Uncle", "Aunt", "Son", "Daughter", - "In-laws", "Boy", "Girl", "Nurse", "Sibling", "Settler", "Pioneer", "Waiter", "Hostess", "Host", "Cashier", - "Attendant", "Publisher", "Agent", "Witch", "Warlock", "Ghost", "Knight", "Prince", "Princess", "Maiden", "Godmother", - "Fairy", "Petal", "Sepal", "Stamen", "Pineboughs", "Bud", "Branch", "Blossom", "Fruit", "Bloom", "Tree", - "Maple", "Elm", "Oak", "Palm", "Baobab", "Mangrove", "Cyprus", "Pine", "Dogwood", "Alder", "Flowers", - "Rose", "Tulip", "Cyclamen", "Lily", "Carnations", "Wisteria", "Flytrap", "Hoe", "Weeds", "Plants", "Canes", - "Palms", "Fruit", "Apple", "Lemon", "Orange", "Grapefruit", "Tangerine", "Peach", "Tomato", "Banana", "Vegetables", - "Artichokes", "Leeks", "Lettuce", "Eggplants", "Zucchini", "Squash", "Pumpkin", "Cabbage", "Pepper", "Onion", "Garlic", - "Poison", "Venom", "Fire", "Ship", "Ferryboat", "Oceanliner", "Oars", "Sails", "Dinghy", "Yacht", "Canoe", - "Catamaran", "Gondola", "Boat", "Battleship", "Clipper", "Dhow", "Flatboat", "Houseboat", "Galleon", "Frigate", "Hydrofoil", - "Junk", "Ketch", "Yawl", "Submarine", "Schooner", "Scow", "Flatbed", "Suv", "Van", "Caboose", "Train", - "Bullet", "Metro", "Subway", "Cart", "Taxi", "Car", "Racingcar", "Buggy", "Dunebuggy", "Dragster", "Motorcycle", - "Gokart", "Limo", "Stretch", "Wagon", "Trolley", "Tram", "Bus", "Parachute", "Tractor", "Trailer", "Golfkart", - "Jeep", "Bigrig", "Bulldozer", "Dumptruck", "Jeep", "Towtruck", "Engine", "Fireengine", "Policecar", "Tank", "Locomotive", - "Ocean", "Oasis", "Sea", "Lake", "Saltlake", "Seafoam", "Waves", "Bubbles", "Current", "Waterbasin", "Bridge", - "Harbor", "Pond", "Wharf", "Pier", "Dock", "Port", "Shore", "Beach", "Sandbar", "Coast", "River", - "Brook", "Rivulet", "Puddle", "Waterfall", "Cascades", "Canal", "Channel", "Stream", "Creek", "Marsh", "Bog", - "Swamp", "Bayou", "Estuary", "Whirlpool", "Eddy", "Geyser", "Well", "Monsoon", "Hurricane", "Typhoon", "Air", - "Snow", "Rain", "Sleet", "Storm", "Hail", "Blizzard", "Wind", "Breeze", "Gale", "Whirlwind", "Maelstrom", - "Duststorm", "Cloudburst", "Tornado", "Twister", "Clouds", "Fog", "Peasoup", "Floods", "Flashflood", "Acidrain", "Tremors", - "Lightning", "Avalanche", "Eclipse", "Alpenglow", "Tsunami", "Waterspout", "Smog", "Aneroid", "Barometer", "Radiosonde", "Station", - "Map", "Chalice", "Bijou", "Candelabra", "Menorah", "Curio", "Figurine", "Music-box", "Objetd'art", "Trinket", "Trims", - "Windchimes", "Birdcage", "Birdbath", "Cans", "Urn", "Bucket", "Arrow", "Bow", "Sword", "Dart", "Epee", - "Dagger", "Hatchet", "Pickax", "Dolls", "Broom", "Mop", "Pail", "Squeegee", "Caddy", "Telephone", "Pipe", - "Paints", "Brushes", "Easel", "Canvas", "Trunk", "Hook", "Gun", "Glue", "Tissue", "Toilet", "Kleenex", - "Papertowel", "Ropes", "Rubber", "Coil", "Toys", "Dogleash", "Balloon", "Vases", "Planters", "Pen", "Pad", - "Typewriter", "Computer", "Laptop", "Netbook", "Stylus", "Pencil", "Desk", "Backpack", "Shoerack", "Notebook", "Vellum", - "Chalk", "Badge", "Saddle", "Spurs", "Paper", "Rollbook", "Guestbook", "Pot", "Pen", "Plate", "Dishes", - "Fork", "Spoons", "Knives", "Knife", "Samovar", "Sky", "Forest", "Heaven", "Hell", "Earth", "Sun", - "Star", "Planet", "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Ceres", - "Pluto", "Haumea", "Makemake", "Eris", "Outerspace", "Town", "Village", "City", "Country", "Farm", "Suburb", - "Roads", "Streets", "Blocks", "Zoo", "Park", "Museum", "Cemetery", "Tunnels", "Caves", "Churches", "Temples", - "Mall", "Dresser", "Armoire", "Chiffonier", "Credenza", "Console", "Bookcase", "Buffet", "Armchair", "Recliner", "Easychair", - "Bench", "Banquette", "Chair", "Couch", "Davenport", "Sofa", "Armchair", "Ottoman", "Deckchair", "Loveseat", "Highseat", - "Divan", "Inglenook", "Pew", "Throne", "Sectional", "Stool", "Pottychair", "Workbench", "Nighttable", "Bed", "Daybed", - "Bassinet", "Crib", "Cradle", "Cot", "Futon", "Hammock", "Tatamimat", "Waterbed", "Trundlebed", "Hassock", "Hatrack", - "Stepstool", "Footrest", "Footstool", "Tripod", "Mirror", "Nightlight", "Torchiere", "Sunlamp", "Spotlight", "Ceilingfan", "Cupboard", - "Cardtable", "Hutch", "Locker", "Wetbar", "Vanity", "Rack", "Hopechest", "Sculpture", "Painting", "Eye", "Pupil", - "Iris", "Retina", "Eyeball", "Eyelids", "Eyelashes", "Eyebrows", "Lap", "Waist", "Belly", "Tummy", "Rearend", - "Crotch", "Abdomen", "Beard", "Mustache", "Sideburns", "Fingernail", "Hand", "Forearm", "Arm", "Knuckles", "Thumb", - "Wrist", "Elbow", "Leg", "Toes", "Knee", "Ankle", "Shin", "Thigh", "Hip", "Breast", "Chest", - "Torso", "Tongue", "Lips", "Gums", "Mouth", "Teeth", "Bones", "Spine", "Throat", "Lungs", "Kidneys", - "Intestines", "Colon", "Spleen", "Glands", "Blood", "Head", "Skull", "Brain", "Muscle", "Hair", "Xylophone", - "Clavier", "Virginal", "Lute", "Drum", "Frenchhorn", "Piano", "Violin", "Cello", "Guitar", "Flute", "Tuba", - "Harp", "Mariachi", "Orchestra", "Oboe", "Bassoon", "Woodwinds", "Brass", "Viola", "Kettledrum", "Peyotedrum", "Tambourine", - "Tambour", "Xylophone", "Saxophone", "Marimba", "Maracas", "Shofar", "Cymbals", "Kazoo", "Dulcimer", "Accordion", "Lyre", - "Fiddle", "Banjo", "Balalaika", "Sitar", "Ukulele", "Zither", "Bagpipes", "Piccolo", "Clarinet", "Cornet", "Panpipe", - "Tuningfork", "Metronome", "Castanets", "Woofer", "Sniper", "Marksman", "Cleaner", "Pyro", "Attacker", "Mechanic", "Janitor", - "Scrubber", "Garbageman", "Technician", "Ninja", "Medic", "Spy", "Assassin", "Gunman", "Triggerman", "Butcher", "Killer", - "Dodger", "Booger", "Mechanic", "Engineer", "Doctor", "Surgeon", "Fighter", "Shooter", "Gunner", "Soldier", "Officer", - "Veteran", "Scout", "Mercenary", "Commando", "Cadet", "Guard", "Warrior", "Trooper", "Gambler", "Specialist", "Shaper", - "Finisher", "Gladiator", "Boxer", "Wrestler", "Warlord", "Rival", "Armory", "Agent", "Rebel", "Brawler", "Bruiser", - "Bully", "Champion", "Hero", "Battler", "Combatant", "Fencer", "Swordsman", "Expert", "Gangster", "Gangsta", "Bandit", - "Hoodlum", "Mobster", "Robber", "Thief", "Burglar", "Pirate", "Thug", "Hitman", "Hitperson", "Dealer", "Desperado", - "Criminal", "Crook", "Hijacker", "Carjacker", "Villain", "Convict", "Fugitive", "Mug", "Outlaw", "Ruffian", "Cutthroat", - "Devil", "Murderer", "Psycho", "Punk", "ASBO", "Offender", "Drifter", "Rioter", "Goon", "Roughneck", "Brute", - "Hacker", "Cabbie", "Wheeler", "Driver", "Rider", "Cyclist", "Cowboy", "Operative", "Carrier", "Transporter", "Trucker", - "Conductor", "Wheelman", "Vampire", "Parasite", "Tramp", "Bum", "Hobo", "Hitchhiker", "Deadbeat", "Acrobat", + "Aardvark", "Buffalo", "Alligator", "Ant", "Anteater", "Antelope", "Ape", "Armadillo", "Donkey", "Baboon", "Badger", + "Barracuda", "Bat", "Bear", "Beaver", "Bee", "Bison", "Boar", "Bush", "Butterfly", "Camel", "Calf", + "Cat", "Kitten", "Cattle", "Chamois", "Cheetah", "Chicken", "Chick", "Chimpanzee", "Infant", "Empress", "Troop", + "Cobra", "Cockroach", "Cormorant", "Cougar", "Coyote", "Crab", "Crane", "Crocodile", "Crow", "Deer", "Dog", + "Dogfish", "Dolphin", "Dove", "Dragonfly", "Duck", "Dugong", "Eagle", "Eaglet", "Echidna", "Eel", "Eland", + "Elephant", "Elk", "Falcon", "Ferret", "Finch", "Fly", "Fox", "Frog", "Gaur", "Gazelle", "Gerbil", + "Giant", "Giraffe", "Gnu", "Goat", "Goose", "Gorilla", "Guanaco", "Guinea", "Guineapig", "Gull", "Hamster", + "Hare", "Hawk", "Hedgehog", "Heron", "Hornet", "Horse", "Human", "Hyena", "Iguana", "Jackal", "Jaguar", + "Jellyfish", "Kangaroo", "Koala", "Komodo", "Kouprey", "Kudu", "Lark", "Lemur", "Leopard", "Lion", "Llama", + "Loris", "Louse", "Lobster", "Lyrebird", "Magpie", "Mallard", "Manatee", "Meerkat", "Mink", "Mole", "Monkey", + "Moose", "Mouse", "Mosquito", "Mule", "Okapi", "Oryx", "Ostrich", "Otter", "Owl", "Ox", "Oyster", + "Panther", "Partridge", "Peafowl", "Pelican", "Penguin", "Pig", "Pigeon", "Pony", "Porcupine", "Quelea", "Rabbit", + "Bunny", "Raccoon", "Rail", "Ram", "Rat", "Raven", "Reindeer", "Rhino", "Salamander", "Sealion", "Seal", + "Seahorse", "Seastar", "Shark", "Sheep", "Shrew", "Skunk", "Snail", "Snake", "Spider", "Squid", "Squirrel", + "Stinkbug", "Swan", "Tapir", "Tarsier", "Tiger", "Toad", "Turkey", "Turtle", "Vicuna", "Walrus", "Wasp", + "Weasel", "Whale", "Wolf", "Worm", "Yak", "Zebra", "Hat", "Cap", "Beret", "Astrakhan", "Beanie", + "Hardhat", "Pillbox", "Monkeycap", "Operahat", "Bonnet", "Bowler", "Coonskin", "Fedora", "Derby", "Montero", "Cowboyhat", + "Sombrero", "Yarmulke", "Skullcap", "Tam", "Sunbonnet", "Toque", "Tophat", "Babushka", "Balaclava", "Turban", "Diadem", + "Earmuffs", "Visor", "Scarf", "Veil", "Warbonnet", "Pithhelmet", "Hood", "Miter", "Butter", "Icecream", "Cakebatter", + "Coffee", "Tea", "Soda", "Beer", "Wine", "Cappuccino", "Jell-o", "Nougats", "Lambchops", "Steaks", "Chowder", + "Fishsoup", "Spaghetti", "Sushi", "Fondue", "Crabslegs", "Shrimp", "Onions", "Bratwurst", "Kielbasa", "Hotdog", "Hamburger", + "Herbs", "Grains", "Legumes", "Zampone", "Casserole", "Beans", "Seeds", "Stew", "Cereal", "Polenta", "Pudding", + "Pasta", "Macaroni", "Ravioli", "Wafer", "Crackers", "Cookies", "Sandwich", "Gyro", "Wrap", "Omelet", "Popcorn", + "Walnuts", "Nuts", "Almonds", "Pizza", "Mousse", "Brulee", "Cakes", "Pancake", "Waffles", "Toast", "Candy", + "Pie", "Senator", "Governor", "Councilman", "Detective", "Sleuth", "Musician", "Maestro", "Conductor", "Composer", "Singer", + "Architect", "Physician", "Manager", "Usher", "Painter", "Model", "Designer", "Guest", "Attorney", "Lawyer", "Judge", + "Mayor", "Therapist", "Teacher", "Principal", "Professor", "Orator", "Man", "Woman", "Teen", "Child", "Mother", + "Father", "Sister", "Brother", "Uncle", "Aunt", "Son", "Daughter", "In-laws", "Boy", "Girl", "Nurse", + "Sibling", "Settler", "Pioneer", "Waiter", "Hostess", "Host", "Cashier", "Attendant", "Publisher", "Witch", "Warlock", + "Ghost", "Knight", "Prince", "Princess", "Maiden", "Godmother", "Fairy", "Petal", "Sepal", "Stamen", "Pineboughs", + "Bud", "Branch", "Blossom", "Fruit", "Bloom", "Tree", "Maple", "Elm", "Oak", "Palm", "Baobab", + "Mangrove", "Cyprus", "Pine", "Dogwood", "Alder", "Flowers", "Rose", "Tulip", "Cyclamen", "Lily", "Carnations", + "Wisteria", "Flytrap", "Hoe", "Weeds", "Plants", "Canes", "Palms", "Apple", "Lemon", "Orange", "Grapefruit", + "Tangerine", "Peach", "Tomato", "Banana", "Vegetables", "Artichokes", "Leeks", "Lettuce", "Eggplants", "Zucchini", "Squash", + "Pumpkin", "Cabbage", "Pepper", "Onion", "Garlic", "Poison", "Venom", "Fire", "Ship", "Ferryboat", "Oceanliner", + "Oars", "Sails", "Dinghy", "Yacht", "Canoe", "Catamaran", "Gondola", "Boat", "Battleship", "Clipper", "Dhow", + "Flatboat", "Houseboat", "Galleon", "Frigate", "Hydrofoil", "Junk", "Ketch", "Yawl", "Submarine", "Schooner", "Scow", + "Flatbed", "Suv", "Van", "Caboose", "Train", "Bullet", "Metro", "Subway", "Cart", "Taxi", "Car", + "Racingcar", "Buggy", "Dunebuggy", "Dragster", "Motorcycle", "Gokart", "Limo", "Stretch", "Wagon", "Trolley", "Tram", + "Bus", "Parachute", "Tractor", "Trailer", "Golfkart", "Jeep", "Bigrig", "Bulldozer", "Dumptruck", "Towtruck", "Engine", + "Fireengine", "Policecar", "Tank", "Locomotive", "Ocean", "Oasis", "Sea", "Lake", "Saltlake", "Seafoam", "Waves", + "Bubbles", "Current", "Waterbasin", "Bridge", "Harbor", "Pond", "Wharf", "Pier", "Dock", "Port", "Shore", + "Beach", "Sandbar", "Coast", "River", "Brook", "Rivulet", "Puddle", "Waterfall", "Cascades", "Canal", "Channel", + "Stream", "Creek", "Marsh", "Bog", "Swamp", "Bayou", "Estuary", "Whirlpool", "Eddy", "Geyser", "Well", + "Monsoon", "Hurricane", "Typhoon", "Air", "Snow", "Rain", "Sleet", "Storm", "Hail", "Blizzard", "Wind", + "Breeze", "Gale", "Whirlwind", "Maelstrom", "Duststorm", "Cloudburst", "Tornado", "Twister", "Clouds", "Fog", "Peasoup", + "Floods", "Flashflood", "Acidrain", "Tremors", "Lightning", "Avalanche", "Eclipse", "Alpenglow", "Tsunami", "Waterspout", "Smog", + "Aneroid", "Barometer", "Radiosonde", "Station", "Map", "Chalice", "Bijou", "Candelabra", "Menorah", "Curio", "Figurine", + "Music-box", "Objetd'art", "Trinket", "Trims", "Windchimes", "Birdcage", "Birdbath", "Cans", "Urn", "Bucket", "Arrow", + "Bow", "Sword", "Dart", "Epee", "Dagger", "Hatchet", "Pickax", "Dolls", "Broom", "Mop", "Pail", + "Squeegee", "Caddy", "Telephone", "Pipe", "Paints", "Brushes", "Easel", "Canvas", "Trunk", "Hook", "Gun", + "Glue", "Tissue", "Toilet", "Kleenex", "Papertowel", "Ropes", "Rubber", "Coil", "Toys", "Dogleash", "Balloon", + "Vases", "Planters", "Pen", "Pad", "Typewriter", "Computer", "Laptop", "Netbook", "Stylus", "Pencil", "Desk", + "Backpack", "Shoerack", "Notebook", "Vellum", "Chalk", "Badge", "Saddle", "Spurs", "Paper", "Rollbook", "Guestbook", + "Pot", "Plate", "Dishes", "Fork", "Spoons", "Knives", "Knife", "Samovar", "Sky", "Forest", "Heaven", + "Hell", "Earth", "Sun", "Star", "Planet", "Mercury", "Venus", "Mars", "Jupiter", "Saturn", "Uranus", + "Neptune", "Ceres", "Pluto", "Haumea", "Makemake", "Eris", "Outerspace", "Town", "Village", "City", "Country", + "Farm", "Suburb", "Roads", "Streets", "Blocks", "Zoo", "Park", "Museum", "Cemetery", "Tunnels", "Caves", + "Churches", "Temples", "Mall", "Dresser", "Armoire", "Chiffonier", "Credenza", "Console", "Bookcase", "Buffet", "Armchair", + "Recliner", "Easychair", "Bench", "Banquette", "Chair", "Couch", "Davenport", "Sofa", "Ottoman", "Deckchair", "Loveseat", + "Highseat", "Divan", "Inglenook", "Pew", "Throne", "Sectional", "Stool", "Pottychair", "Workbench", "Nighttable", "Bed", + "Daybed", "Bassinet", "Crib", "Cradle", "Cot", "Futon", "Hammock", "Tatamimat", "Waterbed", "Trundlebed", "Hassock", + "Hatrack", "Stepstool", "Footrest", "Footstool", "Tripod", "Mirror", "Nightlight", "Torchiere", "Sunlamp", "Spotlight", "Ceilingfan", + "Cupboard", "Cardtable", "Hutch", "Locker", "Wetbar", "Vanity", "Rack", "Hopechest", "Sculpture", "Painting", "Eye", + "Pupil", "Iris", "Retina", "Eyeball", "Eyelids", "Eyelashes", "Eyebrows", "Lap", "Waist", "Belly", "Tummy", + "Rearend", "Crotch", "Abdomen", "Beard", "Mustache", "Sideburns", "Fingernail", "Hand", "Forearm", "Arm", "Knuckles", + "Thumb", "Wrist", "Elbow", "Leg", "Toes", "Knee", "Ankle", "Shin", "Thigh", "Hip", "Breast", + "Chest", "Torso", "Tongue", "Lips", "Gums", "Mouth", "Teeth", "Bones", "Spine", "Throat", "Lungs", + "Kidneys", "Intestines", "Colon", "Spleen", "Glands", "Blood", "Head", "Skull", "Brain", "Muscle", "Hair", + "Xylophone", "Clavier", "Virginal", "Lute", "Drum", "Frenchhorn", "Piano", "Violin", "Cello", "Guitar", "Flute", + "Tuba", "Harp", "Mariachi", "Orchestra", "Oboe", "Bassoon", "Woodwinds", "Brass", "Viola", "Kettledrum", "Peyotedrum", + "Tambourine", "Tambour", "Saxophone", "Marimba", "Maracas", "Shofar", "Cymbals", "Kazoo", "Dulcimer", "Accordion", "Lyre", + "Fiddle", "Banjo", "Balalaika", "Sitar", "Ukulele", "Zither", "Bagpipes", "Piccolo", "Clarinet", "Cornet", "Panpipe", + "Tuningfork", "Metronome", "Castanets", "Woofer", "Sniper", "Marksman", "Cleaner", "Pyro", "Attacker", "Mechanic", "Janitor", + "Scrubber", "Garbageman", "Technician", "Ninja", "Medic", "Spy", "Assassin", "Gunman", "Triggerman", "Butcher", "Killer", + "Dodger", "Booger", "Engineer", "Doctor", "Surgeon", "Fighter", "Shooter", "Gunner", "Soldier", "Officer", "Veteran", + "Scout", "Mercenary", "Commando", "Cadet", "Guard", "Warrior", "Trooper", "Gambler", "Specialist", "Shaper", "Finisher", + "Gladiator", "Boxer", "Wrestler", "Warlord", "Rival", "Armory", "Agent", "Rebel", "Brawler", "Bruiser", "Bully", + "Champion", "Hero", "Battler", "Combatant", "Fencer", "Swordsman", "Expert", "Gangster", "Gangsta", "Bandit", "Hoodlum", + "Mobster", "Robber", "Thief", "Burglar", "Pirate", "Thug", "Hitman", "Hitperson", "Dealer", "Desperado", "Criminal", + "Crook", "Hijacker", "Carjacker", "Villain", "Convict", "Fugitive", "Mug", "Outlaw", "Ruffian", "Cutthroat", "Devil", + "Murderer", "Psycho", "Punk", "ASBO", "Offender", "Drifter", "Rioter", "Goon", "Roughneck", "Brute", "Hacker", + "Cabbie", "Wheeler", "Driver", "Rider", "Cyclist", "Cowboy", "Operative", "Carrier", "Transporter", "Trucker", "Wheelman", + "Vampire", "Parasite", "Tramp", "Bum", "Hobo", "Hitchhiker", "Deadbeat", "Acrobat", }; SString CNickGen::GetRandomNickname() From 78f6d669adc97c51a825250dd4dbf1a4a4a0ff15 Mon Sep 17 00:00:00 2001 From: FileEX Date: Tue, 8 Oct 2024 16:49:29 +0200 Subject: [PATCH 15/26] Fix #3770 Glob pattern in meta.xml should exclude meta.xml (#3779) Update CResource.cpp --- Server/mods/deathmatch/logic/CResource.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Server/mods/deathmatch/logic/CResource.cpp b/Server/mods/deathmatch/logic/CResource.cpp index 759c6288da..3dcf147c39 100644 --- a/Server/mods/deathmatch/logic/CResource.cpp +++ b/Server/mods/deathmatch/logic/CResource.cpp @@ -1371,6 +1371,9 @@ std::vector CResource::GetFilePaths(const char* szFilename) std::string strPath = std::filesystem::relative(path, strDirectory).string(); ReplaceSlashes(strPath); + if (strPath == "meta.xml") + continue; + vecFiles.push_back(std::move(strPath)); } From 026301168d2cd8239650a4f0aa33ff0be6d752dc Mon Sep 17 00:00:00 2001 From: TFP-dev <72511827+TFP-dev@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:05:07 +0200 Subject: [PATCH 16/26] Fix #2932 (Fix CEF hardware acceleration not working) (#2933) * Fix CEF hardware acceleration not working * Update Client/cefweb/CWebApp.cpp Co-authored-by: Uladzislau Nikalayevich * Update CWebApp.cpp --------- Co-authored-by: lopsi <40902730+Lpsd@users.noreply.github.com> Co-authored-by: Uladzislau Nikalayevich --- Client/cefweb/CWebApp.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Client/cefweb/CWebApp.cpp b/Client/cefweb/CWebApp.cpp index 886d0e109c..a6fe5397e5 100644 --- a/Client/cefweb/CWebApp.cpp +++ b/Client/cefweb/CWebApp.cpp @@ -21,8 +21,6 @@ CefRefPtr CWebApp::HandleError(const SString& strError, unsi void CWebApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr command_line) { - command_line->AppendSwitch("disable-gpu-compositing"); - command_line->AppendSwitch("disable-gpu"); // command_line->AppendSwitch("disable-d3d11"); command_line->AppendSwitch("enable-begin-frame-scheduling"); From 4e189281fd10e9c5cef73e18d08b02962e879fc3 Mon Sep 17 00:00:00 2001 From: MTABot Date: Wed, 9 Oct 2024 07:22:03 +0000 Subject: [PATCH 17/26] Visual Studio Update Build Tools 2022: 17.11.35327.3 This is an automated commit to keep track of toolchain changes on the build server. It applies to every MTA build after this commit until further notice. [skip ci] From 52d4f0c867f82569b8df04b0c34cb2d998ef35a9 Mon Sep 17 00:00:00 2001 From: Marek Kulik Date: Thu, 10 Oct 2024 22:54:54 +0200 Subject: [PATCH 18/26] Add support for unverified player count Your server implementation must encode the ping status as [0x728D, player count as uint16_t, 0xFFFF] --- Client/core/CQueryReceiver.cpp | 2 +- Client/core/CQueryReceiver.h | 2 ++ Client/core/ServerBrowser/CServerBrowser.cpp | 9 ++++++++- Client/core/ServerBrowser/CServerInfo.cpp | 6 ++++-- Client/core/ServerBrowser/CServerList.cpp | 1 + Client/core/ServerBrowser/CServerList.h | 2 ++ Client/sdk/net/CNet.h | 2 +- Shared/sdk/version.h | 2 +- 8 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Client/core/CQueryReceiver.cpp b/Client/core/CQueryReceiver.cpp index c0a1cf1125..059dd879e0 100644 --- a/Client/core/CQueryReceiver.cpp +++ b/Client/core/CQueryReceiver.cpp @@ -183,7 +183,7 @@ SQueryInfo CQueryReceiver::GetServerResponse() // Recover server ping status if present const SString strPingStatus = strBuildNumber.Right(strBuildNumber.length() - strlen(strBuildNumber) - 1); - CCore::GetSingleton().GetNetwork()->UpdatePingStatus(*strPingStatus, info.players); + CCore::GetSingleton().GetNetwork()->UpdatePingStatus(*strPingStatus, info.players, info.isStatusVerified); // Recover server http port if present const SString strNetRoute = strPingStatus.Right(strPingStatus.length() - strlen(strPingStatus) - 1); diff --git a/Client/core/CQueryReceiver.h b/Client/core/CQueryReceiver.h index f55e1004f4..4bc56b90d7 100644 --- a/Client/core/CQueryReceiver.h +++ b/Client/core/CQueryReceiver.h @@ -16,6 +16,7 @@ struct SQueryInfo { containingInfo = false; port = 0; + isStatusVerified = true; isPassworded = false; serials = false; players = 0; @@ -33,6 +34,7 @@ struct SQueryInfo SString gameType; SString mapName; SString versionText; + bool isStatusVerified; bool isPassworded; bool serials; ushort players; diff --git a/Client/core/ServerBrowser/CServerBrowser.cpp b/Client/core/ServerBrowser/CServerBrowser.cpp index 764078e563..1246276b70 100644 --- a/Client/core/ServerBrowser/CServerBrowser.cpp +++ b/Client/core/ServerBrowser/CServerBrowser.cpp @@ -1081,7 +1081,8 @@ void CServerBrowser::AddServerToList(CServerListItem* pServer, const ServerBrows const SString strVersion = !bIncludeOtherVersions ? "" : pServer->strVersion; const SString strVersionSortKey = pServer->strVersionSortKey + pServer->strTieBreakSortKey; - const SString strPlayers = pServer->nMaxPlayers == 0 ? "" : SString("%d / %d", pServer->nPlayers, pServer->nMaxPlayers); + const SString strVerified = pServer->isStatusVerified ? "" : "*"; + const SString strPlayers = pServer->nMaxPlayers == 0 ? "" : SString("%d / %d %s", pServer->nPlayers, pServer->nMaxPlayers, *strVerified); const SString strPlayersSortKey = SString("%04d-", pServer->nMaxPlayers ? pServer->nPlayers + 1 : 0) + pServer->strTieBreakSortKey; const SString strPing = pServer->nPing == 9999 ? "" : SString("%d", pServer->nPing); @@ -1125,6 +1126,12 @@ void CServerBrowser::AddServerToList(CServerListItem* pServer, const ServerBrows m_pServerList[Type]->SetItemColor(iIndex, m_hPing[Type], color.R, color.G, color.B, color.A); m_pServerList[Type]->SetItemColor(iIndex, m_hGame[Type], color.R, color.G, color.B, color.A); + if (!pServer->isStatusVerified) + { + SColor orange = SColorRGBA(230, 200, 180, color.A); + m_pServerList[Type]->SetItemColor(iIndex, m_hPlayers[Type], orange.R, orange.G, orange.B, orange.A); + } + // If the index was modified from the original, then update all indexes because it means there was some sort if (pServer->iRowIndex != iIndex) UpdateRowIndexMembers(Type); diff --git a/Client/core/ServerBrowser/CServerInfo.cpp b/Client/core/ServerBrowser/CServerInfo.cpp index 2b79599c8d..6571fedc32 100644 --- a/Client/core/ServerBrowser/CServerInfo.cpp +++ b/Client/core/ServerBrowser/CServerInfo.cpp @@ -469,13 +469,15 @@ void CServerInfo::Connect() void CServerInfo::ResetServerGUI(CServerListItem* pServer) { + const SString strVerified = pServer->isStatusVerified ? "" : "*"; + // Set our GUI elements to display the server information m_pServerNameLabel->SetText(pServer->strName.c_str()); m_pServerAddressLabel->SetText(pServer->strEndpoint.c_str()); m_pGamemodeLabel->SetText(pServer->strGameMode.c_str()); m_pMapLabel->SetText(pServer->strMap.c_str()); - m_pPlayersLabel->SetText(SString("%i/%i", pServer->nPlayers, pServer->nMaxPlayers).c_str()); - + m_pPlayersLabel->SetText(SString("%d / %d %s", pServer->nPlayers, pServer->nMaxPlayers, *strVerified).c_str()); + m_pPasswordedLabel->SetText(pServer->bPassworded ? _("Yes") : _("No")); m_pLatencyLabel->SetText(SString("%i", pServer->nPing)); diff --git a/Client/core/ServerBrowser/CServerList.cpp b/Client/core/ServerBrowser/CServerList.cpp index 021328d777..044f88e496 100644 --- a/Client/core/ServerBrowser/CServerList.cpp +++ b/Client/core/ServerBrowser/CServerList.cpp @@ -514,6 +514,7 @@ bool CServerListItem::ParseQuery() if ((uiMasterServerSaysRestrictions & RESTRICTION_PLAYER_LIST) == false) vecPlayers = info.playersPool; + isStatusVerified = info.isStatusVerified; bScanned = true; PostChange(); diff --git a/Client/core/ServerBrowser/CServerList.h b/Client/core/ServerBrowser/CServerList.h index e2f0b2864f..5d0e450873 100644 --- a/Client/core/ServerBrowser/CServerList.h +++ b/Client/core/ServerBrowser/CServerList.h @@ -139,6 +139,7 @@ class CServerListItem bScanned = false; bSkipped = false; bSerials = false; + isStatusVerified = true; bPassworded = false; bKeepFlag = false; iRowIndex = -1; @@ -182,6 +183,7 @@ class CServerListItem unsigned short nPlayers; // Current players unsigned short nMaxPlayers; // Maximum players unsigned short nPing; // Ping time + bool isStatusVerified; // Ping status verified bool bPassworded; // Password protected bool bSerials; // Serial verification on bool bScanned; diff --git a/Client/sdk/net/CNet.h b/Client/sdk/net/CNet.h index 36824b6ab3..cb38718f47 100644 --- a/Client/sdk/net/CNet.h +++ b/Client/sdk/net/CNet.h @@ -115,7 +115,7 @@ class CNet virtual const char* GetNextBuffer() = 0; virtual const char* GetDiagnosticStatus() = 0; - virtual void UpdatePingStatus(const char* szStatus, ushort& usDataRef) = 0; + virtual void UpdatePingStatus(const char* szStatus, ushort& usDataRef, bool& isVerified) = 0; virtual bool VerifySignature(const char* pData, unsigned long ulSize) = 0; diff --git a/Shared/sdk/version.h b/Shared/sdk/version.h index 9069c14d9b..12d10c80a5 100644 --- a/Shared/sdk/version.h +++ b/Shared/sdk/version.h @@ -108,7 +108,7 @@ #define _ASE_VERSION QUOTE_DEFINE(MTASA_VERSION_MAJOR) "." QUOTE_DEFINE(MTASA_VERSION_MINOR) #define _NETCODE_VERSION_BRANCH_ID 0x4 // Use 0x1 - 0xF to indicate an incompatible branch is being used (0x0 is reserved, 0x4 is trunk) -#define _CLIENT_NET_MODULE_VERSION 0x0AE // (0x000 - 0xfff) Lvl9 wizards only +#define _CLIENT_NET_MODULE_VERSION 0x0AF // (0x000 - 0xfff) Lvl9 wizards only #define _SERVER_NET_MODULE_VERSION 0x0AB // (0x000 - 0xfff) Lvl9 wizards only #define _NETCODE_VERSION 0x1DA // (0x000 - 0xfff) Increment when net messages change (pre-release) From 840b73c52ce1c6335837dac20d73e565c0f21085 Mon Sep 17 00:00:00 2001 From: Pot Bot <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:57:05 +0000 Subject: [PATCH 19/26] Update client en_US pot [ci skip] --- .../MTA/locale/en_US/client.pot | 3477 +++++++++-------- 1 file changed, 1739 insertions(+), 1738 deletions(-) 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 b19c565c3c..0947cb8c01 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-09-27 04:28+0000\n" +"POT-Creation-Date: 2024-10-10 20:57+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,19 +18,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: Client/game_sa/CSettingsSA.cpp:767 -msgid "Can't find valid screen resolution." -msgstr "" - -#. Confirm that res should be used -#: Client/game_sa/CSettingsSA.cpp:843 -msgid "Are you sure you want to use this screen resolution?" -msgstr "" - -#: Client/game_sa/CSettingsSA.cpp:845 Client/loader/Dialogs.cpp:194 -msgid "MTA: San Andreas" -msgstr "" - #: Client/cefweb/CWebsiteRequests.cpp:19 msgid "Website requests" msgstr "" @@ -56,11 +43,6 @@ msgstr "" msgid "Deny" msgstr "" -#. Couldn't create render target for CPostEffects -#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 -msgid "Problem with graphics driver" -msgstr "" - #: Client/mods/deathmatch/CClient.cpp:36 msgid "This version has expired." msgstr "" @@ -176,247 +158,9 @@ msgstr "" msgid "(Development mode) prints world sound ids into the debug window" msgstr "" -#. Throw the error and disconnect -#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 -#, c-format -msgid "Download error: %s" -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/CResourceFileDownloadManager.cpp:145 -#: Client/mods/deathmatch/logic/CClientGame.cpp:641 -#: Client/mods/deathmatch/logic/CClientGame.cpp:715 -#: Client/mods/deathmatch/logic/CClientGame.cpp:739 -#: Client/mods/deathmatch/logic/CClientGame.cpp:761 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1174 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1254 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1264 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1333 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1370 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1419 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1431 -#: 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/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/CGUI.cpp:87 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 -#: 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/mods/deathmatch/logic/CPacketHandler.cpp:506 -msgid "Disconnected: Invalid nickname" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 -msgid "Disconnect from server" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 -#, c-format -msgid "" -"Disconnected: Serial is banned.\n" -"Reason: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 -#, c-format -msgid "" -"Disconnected: You are banned.\n" -"Reason: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 -#, c-format -msgid "" -"Disconnected: Account is banned.\n" -"Reason: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 -msgid "Disconnected: Version mismatch" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 -msgid "Disconnected: Join flood. Please wait a minute, then reconnect." -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 -#, c-format -msgid "" -"Disconnected: Server from different branch.\n" -"Information: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 -#, c-format -msgid "" -"Disconnected: Bad version.\n" -"Information: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 -#, c-format -msgid "" -"Disconnected: Server is running a newer build.\n" -"Information: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 -#, c-format -msgid "" -"Disconnected: Server is running an older build.\n" -"Information: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 -msgid "Disconnected: Nick already in use" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 -msgid "Disconnected: Player element could not be created." -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:567 -#, c-format -msgid "Disconnected: Server refused the connection: %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 -msgid "Disconnected: Serial verification failed" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 -#, c-format -msgid "Disconnected: Connection desync %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 -#, c-format -msgid "Disconnected: You were kicked by %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 -#, c-format -msgid "Disconnected: You were banned by %s" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 -msgid "Disconnected: Server shutdown or restarting" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 -msgid "You were kicked from the game" -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" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 -msgid "Please replace gta_sa.exe" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 -msgid "This server does not allow custom D3D9.DLLs" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 -msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 -msgid "This server does not allow virtual machines" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 -msgid "This server requires driver signing to be enabled" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 -msgid "Please restart your PC" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 -msgid "This server has detected missing anti-cheat components" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 -msgid "Try restarting MTA" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 -msgid "This server requires a non-modifed gta3.img and gta_int.img" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 -msgid "Please replace gta3.img or gta_int.img" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 -msgid "This server does not allow Wine" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 -msgid "Ensure no other program is modifying MTA:SA" -msgstr "" - -#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 -msgid "Time Remaining: " -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" -msgstr "" - #: Client/mods/deathmatch/logic/CResource.cpp:375 -#: Client/mods/deathmatch/logic/CClientGame.cpp:1089 -#: Client/core/CSettings.cpp:3483 Client/core/CCore.cpp:674 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1089 Client/core/CCore.cpp:674 +#: Client/core/CSettings.cpp:3483 msgid "In-game" msgstr "" @@ -530,21 +274,58 @@ msgid "Choking to death in" msgstr "" #: Client/mods/deathmatch/logic/CClientGame.cpp:533 -#: Client/core/CSettings.cpp:3479 Client/core/CCore.cpp:674 -#: Client/core/CMainMenu.cpp:304 +#: Client/core/CMainMenu.cpp:304 Client/core/CCore.cpp:674 +#: Client/core/CSettings.cpp:3479 msgid "Main menu" 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:641 +#: Client/mods/deathmatch/logic/CClientGame.cpp:715 #: Client/mods/deathmatch/logic/CClientGame.cpp:739 -#: 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 "" - -#. Display the status box -#: Client/mods/deathmatch/logic/CClientGame.cpp:657 -#: Client/core/CConnectManager.cpp:148 +#: Client/mods/deathmatch/logic/CClientGame.cpp:761 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1174 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1254 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1264 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1333 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1370 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1419 +#: Client/mods/deathmatch/logic/CClientGame.cpp:1431 +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:145 +#: 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/core/CGUI.cpp:87 Client/core/CCore.cpp:1275 +#: Client/core/CCore.cpp:1288 Client/core/CSettings.cpp:2941 +#: Client/core/CSettings.cpp:4166 Client/core/CSettings.cpp:4194 +#: Client/core/CSettings.cpp:4764 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/DXHook/CDirect3DHook9.cpp:127 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1285 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1307 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1364 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1413 +#: Shared/mods/deathmatch/logic/CLatentTransferManager.cpp:378 +#: Shared/sdk/SharedUtil.Misc.hpp:137 +msgid "Error" +msgstr "" + +#: Client/mods/deathmatch/logic/CClientGame.cpp:641 +#: Client/mods/deathmatch/logic/CClientGame.cpp:739 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1307 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1364 +msgid "Invalid nickname! Please go to Settings and set a new one!" +msgstr "" + +#. Display the status box +#: Client/mods/deathmatch/logic/CClientGame.cpp:657 +#: Client/core/CConnectManager.cpp:148 msgid "CONNECTING" msgstr "" @@ -672,75 +453,6 @@ msgstr "" msgid "Wasted" msgstr "" -#: Client/mods/deathmatch/logic/CLocalServer.cpp:37 -msgid "HOST GAME" -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" -msgstr "" - -#. m_pTabs->CreateTab ( "Gamemode" ); -#: Client/mods/deathmatch/logic/CLocalServer.cpp:53 -msgid "Resources" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:55 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:57 -msgid "Server name:" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:64 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:66 -msgid "Password:" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:73 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:75 -msgid "Max players:" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:82 -#: Client/mods/deathmatch/logic/CLocalServer.cpp:84 -msgid "Broadcast:" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:86 -msgid "LAN" -msgstr "" - -#. Create the tabs -#: Client/mods/deathmatch/logic/CLocalServer.cpp:90 -#: Client/core/ServerBrowser/CServerBrowser.cpp:133 -msgid "Internet" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:99 -msgid "Selected" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:116 -msgid "All" -msgstr "" - -#: Client/mods/deathmatch/logic/CLocalServer.cpp:118 -msgid "Start" -msgstr "" - -#. Cancel button -#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 -#: 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 -#: Client/gui/CGUIMessageBox_Impl.cpp:68 -msgid "Cancel" -msgstr "" - #: Client/mods/deathmatch/logic/CTransferBox.cpp:25 msgid "Map download progress:" msgstr "" @@ -761,1043 +473,1413 @@ msgstr "" msgid "Disconnect to cancel download" msgstr "" -#: Client/core/CScreenShot.cpp:104 -#, c-format -msgid "Screenshot got %d bytes, but expected %d" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:506 +msgid "Disconnected: Invalid nickname" msgstr "" -#: Client/core/CScreenShot.cpp:110 -msgid "Screenshot failed" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:510 +msgid "Disconnect from server" msgstr "" -#: Client/core/CScreenShot.cpp:160 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:514 #, c-format -msgid "Screenshot taken: '%s'" +msgid "" +"Disconnected: Serial is banned.\n" +"Reason: %s" msgstr "" -#. Create window (with frame) if it will fit inside the screen resolution -#: Client/core/CSettings.cpp:84 -msgid "SETTINGS" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:520 +#, c-format +msgid "" +"Disconnected: You are banned.\n" +"Reason: %s" msgstr "" -#: Client/core/CSettings.cpp:116 -msgid "Multiplayer" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:526 +#, c-format +msgid "" +"Disconnected: Account is banned.\n" +"Reason: %s" msgstr "" -#: Client/core/CSettings.cpp:117 -msgid "Video" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:531 +msgid "Disconnected: Version mismatch" msgstr "" -#: Client/core/CSettings.cpp:118 -msgid "Audio" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:535 +msgid "Disconnected: Join flood. Please wait a minute, then reconnect." msgstr "" -#: Client/core/CSettings.cpp:119 -msgid "Binds" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:539 +#, c-format +msgid "" +"Disconnected: Server from different branch.\n" +"Information: %s" msgstr "" -#: Client/core/CSettings.cpp:120 -msgid "Controls" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:544 +#, c-format +msgid "" +"Disconnected: Bad version.\n" +"Information: %s" msgstr "" -#: Client/core/CSettings.cpp:121 -msgid "Interface" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:549 +#, c-format +msgid "" +"Disconnected: Server is running a newer build.\n" +"Information: %s" msgstr "" -#: Client/core/CSettings.cpp:122 -msgid "Web Browser" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:554 +#, c-format +msgid "" +"Disconnected: Server is running an older build.\n" +"Information: %s" msgstr "" -#: Client/core/CSettings.cpp:123 -msgid "Advanced" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:559 +msgid "Disconnected: Nick already in use" msgstr "" -#. Create buttons -#. OK button -#: 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 Client/gui/CGUIMessageBox_Impl.cpp:64 -msgid "OK" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:563 +msgid "Disconnected: Player element could not be created." 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/CPacketHandler.cpp:567 +#, c-format +msgid "Disconnected: Server refused the connection: %s" msgstr "" -#. * -#. * Controls tab -#. * -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 -msgid "Mouse sensitivity:" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:572 +msgid "Disconnected: Serial verification failed" msgstr "" -#. VerticalAimSensitivity -#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 -msgid "Vertical aim sensitivity:" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:576 +#, c-format +msgid "Disconnected: Connection desync %s" msgstr "" -#. Mouse Options -#: Client/core/CSettings.cpp:160 -msgid "Mouse options" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:585 +#, c-format +msgid "Disconnected: You were kicked by %s" msgstr "" -#: Client/core/CSettings.cpp:167 -msgid "Invert mouse vertically" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:590 +#, c-format +msgid "Disconnected: You were banned by %s" msgstr "" -#: Client/core/CSettings.cpp:171 -msgid "Steer with mouse" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:601 +msgid "Disconnected: Server shutdown or restarting" msgstr "" -#: Client/core/CSettings.cpp:175 -msgid "Fly with mouse" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:621 +msgid "You were kicked from the game" msgstr "" -#. Joypad options -#: Client/core/CSettings.cpp:217 -msgid "Joypad options" +#: 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/CSettings.cpp:230 -msgid "Standard controls (Mouse + Keyboard)" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:623 +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:634 +msgid "Please replace gta_sa.exe" msgstr "" -#: Client/core/CSettings.cpp:237 -msgid "Classic controls (Joypad)" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:624 +msgid "This server does not allow custom D3D9.DLLs" msgstr "" -#: Client/core/CSettings.cpp:274 -msgid "Dead Zone" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:625 +msgid "Remove D3D9.DLL from your GTA install directory and restart MTA" msgstr "" -#: Client/core/CSettings.cpp:279 -msgid "Saturation" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:626 +msgid "This server does not allow virtual machines" msgstr "" -#: Client/core/CSettings.cpp:285 -msgid "Use the 'Binds' tab for joypad buttons." +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:627 +msgid "This server requires driver signing to be enabled" msgstr "" -#: Client/core/CSettings.cpp:324 -msgid "Left Stick" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:628 +msgid "Please restart your PC" msgstr "" -#: Client/core/CSettings.cpp:330 -msgid "Right Stick" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:629 +msgid "This server has detected missing anti-cheat components" msgstr "" -#: Client/core/CSettings.cpp:345 -msgid "DESCRIPTION" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:630 +msgid "Try restarting MTA" msgstr "" -#: Client/core/CSettings.cpp:346 -msgid "KEY" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:631 +msgid "This server requires a non-modifed gta3.img and gta_int.img" msgstr "" -#: Client/core/CSettings.cpp:348 -msgid "ALT. KEY" -msgstr "" - -#. * -#. * Multiplayer tab -#. * -#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 -msgid "Nick:" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:632 +msgid "Please replace gta3.img or gta_int.img" msgstr "" -#: Client/core/CSettings.cpp:378 -msgid "Save server passwords" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:635 +msgid "This server does not allow Wine" msgstr "" -#: Client/core/CSettings.cpp:383 -msgid "Auto-refresh server browser" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:636 +msgid "Ensure no other program is modifying MTA:SA" msgstr "" -#: Client/core/CSettings.cpp:388 -msgid "Allow screen upload" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:650 +msgid "Time Remaining: " msgstr "" -#: Client/core/CSettings.cpp:393 -msgid "Allow external sounds" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:660 +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" -#: Client/core/CSettings.cpp:398 -msgid "Always show download window" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:662 +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" -#: Client/core/CSettings.cpp:403 -msgid "Allow connecting with Discord Rich Presence" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:664 +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" -#: Client/core/CSettings.cpp:408 -msgid "Use customized GTA:SA files" -msgstr "" +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:666 +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" -#: Client/core/CSettings.cpp:413 -msgid "Map rendering options" +#. Display the error +#: Client/mods/deathmatch/logic/CPacketHandler.cpp:670 +msgid "Disconnected" 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" +#. Cancel button +#: Client/mods/deathmatch/logic/CLocalServer.cpp:123 +#: Client/gui/CGUIMessageBox_Impl.cpp:68 Client/loader/Dialogs.cpp:136 +#: Client/core/CVersionUpdater.cpp:1790 Client/core/CVersionUpdater.cpp:1806 +#: Client/core/CVersionUpdater.cpp:1841 Client/core/CSettings.cpp:132 +#: Client/core/CSettings.cpp:4784 +msgid "Cancel" msgstr "" -#: Client/core/CSettings.cpp:575 Client/core/CSettings.cpp:3091 -msgid "Sequential" +#. Throw the error and disconnect +#: Client/mods/deathmatch/logic/CResourceFileDownloadManager.cpp:141 +#, c-format +msgid "Download error: %s" msgstr "" -#: Client/core/CSettings.cpp:578 -msgid "Automatic Media Scan" +#: Client/game_sa/CSettingsSA.cpp:767 +msgid "Can't find valid screen resolution." msgstr "" -#: Client/core/CSettings.cpp:585 -msgid "Mute options" +#. Confirm that res should be used +#: Client/game_sa/CSettingsSA.cpp:843 +msgid "Are you sure you want to use this screen resolution?" msgstr "" -#: Client/core/CSettings.cpp:591 -msgid "Mute All sounds when minimized" +#: Client/game_sa/CSettingsSA.cpp:845 Client/loader/Dialogs.cpp:194 +msgid "MTA: San Andreas" msgstr "" -#: Client/core/CSettings.cpp:596 -msgid "Mute Radio sounds when minimized" +#. Couldn't create render target for CPostEffects +#: Client/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp:1450 +msgid "Problem with graphics driver" msgstr "" -#: Client/core/CSettings.cpp:601 -msgid "Mute SFX sounds when minimized" +#. Create buttons +#. OK button +#: Client/gui/CGUIMessageBox_Impl.cpp:64 Client/loader/Dialogs.cpp:133 +#: 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/core/CSettings.cpp:606 -msgid "Mute MTA sounds when minimized" +#. ///////////////////////////////////////////////////////////////////////// +#. +#. Dialog strings +#. +#. +#. ///////////////////////////////////////////////////////////////////////// +#: Client/gui/CGUIMessageBox_Impl.cpp:72 Client/loader/Dialogs.cpp:131 +#: 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:481 +msgid "Yes" msgstr "" -#: Client/core/CSettings.cpp:611 -msgid "Mute Voice sounds when minimized" +#: Client/loader/Install.cpp:265 +msgid "Unknown" msgstr "" -#. * -#. * Video tab -#. * -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 -msgid "Resolution:" +#: 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:627 Client/core/CSettings.cpp:683 -msgid "FOV:" +#: 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:627 Client/core/CSettings.cpp:699 -msgid "Draw Distance:" +#: Client/loader/Install.cpp:852 Client/loader/Dialogs.cpp:901 +msgid "Installing update..." msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 -msgid "Brightness:" +#: Client/loader/Install.cpp:934 Client/loader/Dialogs.cpp:909 +msgid "Extracting files..." msgstr "" -#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 -msgid "FX Quality:" +#: Client/loader/Utils.cpp:534 Client/loader/Dialogs.cpp:890 +msgid "Searching for Grand Theft Auto San Andreas" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 -msgid "Anisotropic filtering:" +#: Client/loader/Utils.cpp:536 Client/loader/Dialogs.cpp:893 +msgid "Please start Grand Theft Auto San Andreas" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 -msgid "Anti-aliasing:" +#: Client/loader/Utils.cpp:600 +msgid "Select your Grand Theft Auto: San Andreas Installation Directory" msgstr "" -#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 -msgid "Aspect Ratio:" +#: 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:648 -msgid "Windowed" +#: Client/loader/Utils.cpp:1069 +#, c-format +msgid "Error loading %s module! (%s)" msgstr "" -#: Client/core/CSettings.cpp:654 -msgid "DPI aware" +#: Client/loader/Utils.cpp:1394 Client/loader/Dialogs.cpp:914 +msgid "Copying files..." msgstr "" -#: Client/core/CSettings.cpp:662 Client/core/CSettings.cpp:1004 -#: Client/loader/MainFunctions.cpp:389 -msgid "Fullscreen mode:" +#: Client/loader/Utils.cpp:1454 Client/loader/Dialogs.cpp:919 +msgid "Copy finished early. Everything OK." msgstr "" -#: Client/core/CSettings.cpp:669 Client/core/CSettings.cpp:1613 -msgid "Standard" +#: Client/loader/Utils.cpp:1460 Client/loader/Dialogs.cpp:924 +msgid "Finishing..." msgstr "" -#: Client/core/CSettings.cpp:670 Client/core/CSettings.cpp:1615 -#: Client/loader/MainFunctions.cpp:389 -msgid "Borderless window" +#: Client/loader/Utils.cpp:1462 Client/loader/Dialogs.cpp:928 +msgid "Done!" msgstr "" -#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 -msgid "Borderless keep res" +#: 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:675 -msgid "Mip Mapping" -msgstr "" - -#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 -msgid "Low" +#: Client/loader/Utils.cpp:1541 +#, c-format +msgid "GTA:SA had trouble opening the file '%s'" msgstr "" -#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 -msgid "Medium" +#: Client/loader/Utils.cpp:1563 +#, c-format +msgid "GTA:SA is missing the file '%s'." msgstr "" -#: Client/core/CSettings.cpp:745 Client/core/CSettings.cpp:1086 -#: Client/core/CSettings.cpp:1521 Client/core/CSettings.cpp:3145 -msgid "High" +#: Client/loader/Utils.cpp:1588 +msgid "GTA:SA had trouble loading a model." msgstr "" -#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 -msgid "Very high" +#: Client/loader/Utils.cpp:1590 +msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." 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/loader/Utils.cpp:1615 +msgid "GTA:SA had trouble adding an upgrade to a vehicle." msgstr "" -#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 -msgid "1x" +#: Client/loader/Utils.cpp:1634 +#, c-format +msgid "GTA:SA found errors in the file '%s'" msgstr "" -#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 -msgid "2x" +#: Client/loader/Utils.cpp:1716 +msgid "Did your computer restart when playing MTA:SA?" msgstr "" -#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 -msgid "3x" +#: Client/loader/Utils.cpp:1781 +msgid "Please terminate the following programs before continuing:" msgstr "" -#: Client/core/CSettings.cpp:800 Client/core/CSettings.cpp:1019 -#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 -msgid "Auto" +#: 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:481 +msgid "No" msgstr "" -#: Client/core/CSettings.cpp:801 Client/core/CSettings.cpp:1541 -msgid "4:3" +#: Client/loader/Dialogs.cpp:134 +msgid "Quit" msgstr "" -#: Client/core/CSettings.cpp:802 Client/core/CSettings.cpp:1543 -msgid "16:10" +#: Client/loader/Dialogs.cpp:135 +#: Client/core/ServerBrowser/CServerBrowser.cpp:556 +msgid "Help" msgstr "" -#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 -msgid "16:9" +#: Client/loader/Dialogs.cpp:151 +msgid "MTA: San Andreas has encountered a problem" msgstr "" -#: Client/core/CSettings.cpp:806 -msgid "HUD Match Aspect Ratio" +#: Client/loader/Dialogs.cpp:152 +msgid "Crash information" msgstr "" -#: Client/core/CSettings.cpp:812 -msgid "Volumetric Shadows" +#: 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:816 -msgid "Grass effect" +#: Client/loader/Dialogs.cpp:154 +msgid "Doing so will increase the chance of this crash being fixed." msgstr "" -#: Client/core/CSettings.cpp:820 -msgid "Heat haze" +#: Client/loader/Dialogs.cpp:155 +msgid "Do you want to restart MTA: San Andreas ?" msgstr "" -#: Client/core/CSettings.cpp:824 -msgid "Tyre Smoke etc" +#: Client/loader/Dialogs.cpp:162 +msgid "MTA: San Andreas - Warning" msgstr "" -#: Client/core/CSettings.cpp:828 -msgid "Dynamic ped shadows" +#: Client/loader/Dialogs.cpp:163 +msgid "" +"Your Grand Theft Auto: San Andreas install directory contains these files:" msgstr "" -#: Client/core/CSettings.cpp:832 -msgid "Motion blur" +#: 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/core/CSettings.cpp:837 -msgid "Full Screen Minimize" +#: Client/loader/Dialogs.cpp:167 +msgid "Keep these files, but also show this warning on next start" msgstr "" -#: Client/core/CSettings.cpp:849 -msgid "Enable Device Selection Dialog" +#: Client/loader/Dialogs.cpp:168 +msgid "Do not remind me about these files again" msgstr "" -#: Client/core/CSettings.cpp:861 -msgid "Show unsafe resolutions" +#: Client/loader/Dialogs.cpp:169 +msgid "Rename these files from *.dll to *.dll.bak" msgstr "" -#: Client/core/CSettings.cpp:873 -msgid "Render vehicles always in high detail" +#: Client/loader/Dialogs.cpp:170 +msgid "Show me these files" msgstr "" -#: Client/core/CSettings.cpp:877 -msgid "Render peds always in high detail" +#: Client/loader/Dialogs.cpp:171 +msgid "Play MTA:SA" msgstr "" -#: Client/core/CSettings.cpp:881 -msgid "Corona rain reflections" +#: Client/loader/Dialogs.cpp:177 +msgid "MTA: San Andreas - Confusing options" msgstr "" -#: Client/core/CSettings.cpp:910 -msgid "Enable remote websites" +#: Client/loader/Dialogs.cpp:178 +msgid "NVidia Optimus detected!" msgstr "" -#: Client/core/CSettings.cpp:915 -msgid "Enable Javascript on remote websites" +#: Client/loader/Dialogs.cpp:179 +msgid "Try each option and see what works:" msgstr "" -#: Client/core/CSettings.cpp:920 -msgid "Custom blacklist" +#: Client/loader/Dialogs.cpp:180 +msgid "A - Standard NVidia" msgstr "" -#: Client/core/CSettings.cpp:931 Client/core/CSettings.cpp:966 -msgid "Enter a domain e.g. google.com" +#: Client/loader/Dialogs.cpp:181 +msgid "B - Alternate NVidia" msgstr "" -#: Client/core/CSettings.cpp:939 -msgid "Block" +#: Client/loader/Dialogs.cpp:182 +msgid "C - Standard Intel" msgstr "" -#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 -msgid "Domain" +#: Client/loader/Dialogs.cpp:183 +msgid "D - Alternate Intel" msgstr "" -#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 -msgid "Remove domain" +#: Client/loader/Dialogs.cpp:184 +msgid "If you get desperate, this might help:" msgstr "" -#. Reset vecTemp -#: Client/core/CSettings.cpp:955 -msgid "Custom whitelist" +#: Client/loader/Dialogs.cpp:185 +msgid "If you have already selected an option that works, this might help:" msgstr "" -#. Misc section label -#: Client/core/CSettings.cpp:997 -msgid "Misc" +#: Client/loader/Dialogs.cpp:186 +msgid "Force windowed mode" 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/loader/Dialogs.cpp:187 +msgid "Don't show again" msgstr "" -#. Browser scan speed -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 -#: Client/core/CSettings.cpp:4805 -msgid "Browser speed:" +#: Client/loader/Dialogs.cpp:195 +msgid "Warning: Could not detect anti-virus product" msgstr "" -#. Single download -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 -#: Client/core/CSettings.cpp:4807 -msgid "Single connection:" +#: 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 "" -#. Packet tag -#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 -#: Client/core/CSettings.cpp:4809 -msgid "Packet tag:" +#: Client/loader/Dialogs.cpp:200 +msgid "I have already installed an anti-virus" msgstr "" -#. Progress animation -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1064 -#: Client/core/CSettings.cpp:4811 -msgid "Progress animation:" +#: 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 "" -#. Process priority -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1077 -#: Client/core/CSettings.cpp:4801 -msgid "Process priority:" +#: 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 "" -#. Debug setting -#: Client/core/CSettings.cpp:1004 Client/core/CSettings.cpp:1091 -#: Client/core/CSettings.cpp:4813 -msgid "Debug setting:" +#: Client/loader/MainFunctions.cpp:266 +msgid "" +"Another instance of MTA is already running.\n" +"\n" +"If this problem persists, please restart your computer" msgstr "" -#. Streaming memory -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1114 -#: Client/core/CSettings.cpp:4815 -msgid "Streaming memory:" +#: Client/loader/MainFunctions.cpp:269 +msgid "" +"Another instance of MTA is already running.\n" +"\n" +"Do you want to terminate it?" msgstr "" -#. Update build type -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 -msgid "Update build type:" +#: 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 "" -#. UpdateAutoInstall -#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 -msgid "Install important updates:" +#: 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/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/loader/MainFunctions.cpp:339 +msgid "" +"GTA settings have been reset.\n" +"\n" +"Press OK to continue." msgstr "" -#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 -msgid "Very slow" +#: Client/loader/MainFunctions.cpp:344 +#, c-format +msgid "File could not be deleted: '%s'" 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" +#. 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 "" + +#. 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/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:662 +#: Client/core/CSettings.cpp:1004 +msgid "Fullscreen mode:" +msgstr "" + +#: Client/loader/MainFunctions.cpp:389 Client/core/CSettings.cpp:670 +#: Client/core/CSettings.cpp:1615 +msgid "Borderless window" +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:" +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" +msgstr "" + +#: Client/loader/MainFunctions.cpp:468 +#, c-format +msgid "The detected file was: %s\n" +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?" +msgstr "" + +#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 +#: Client/loader/MainFunctions.cpp:1219 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1387 +#: Client/core/ServerBrowser/CServerInfo.cpp:319 +msgid "Information" +msgstr "" + +#: Client/loader/MainFunctions.cpp:609 +msgid "" +"Unable to terminate GTA: San Andreas. If the problem persists, please " +"restart your computer." +msgstr "" + +#: Client/loader/MainFunctions.cpp:632 +msgid "" +"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." +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." +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." +msgstr "" + +#: Client/loader/MainFunctions.cpp:810 +msgid "" +"Load failed. Please ensure that the latest data files have been installed " +"correctly." +msgstr "" + +#: Client/loader/MainFunctions.cpp:819 +#, c-format +msgid "Load failed. Please ensure that %s is installed correctly." +msgstr "" + +#: Client/loader/MainFunctions.cpp:826 +#, c-format +msgid "Load failed. Could not find gta_sa.exe in %s." +msgstr "" + +#: Client/loader/MainFunctions.cpp:836 +#, c-format +msgid "" +"Load failed. %s exists in the GTA directory. Please delete before continuing." +msgstr "" + +#: Client/loader/MainFunctions.cpp:845 +#, c-format +msgid "Main file has an incorrect name (%s)" +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." +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." +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." +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/loader/MainFunctions.cpp:1009 +msgid "" +"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" +msgstr "" + +#: Client/loader/MainFunctions.cpp:1018 +msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" +msgstr "" + +#: Client/loader/MainFunctions.cpp:1030 +msgid "" +"MTA:SA is not compatible with Windows 'Safe Mode'.\n" +"\n" +"Please restart your PC.\n" +msgstr "" + +#: Client/loader/MainFunctions.cpp:1123 +msgid "Fix configuration issue" +msgstr "" + +#. Try to relaunch as admin if not done so already +#: Client/loader/MainFunctions.cpp:1157 +msgid "Fix elevation required error" +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]" +msgstr "" + +#: Client/loader/MainFunctions.cpp:1219 +msgid "" +"GTA: San Andreas may not have launched correctly. Do you want to terminate " +"it?" +msgstr "" + +#: Client/loader/CInstallManager.cpp:376 +#, c-format +msgid "" +"MTA:SA could not complete the following task:\n" +"\n" +" '%s'\n" +msgstr "" + +#: Client/loader/CInstallManager.cpp:426 +msgid "" +"** The crash was caused by a graphics driver error **\n" +"\n" +"** Please update your graphics drivers **" +msgstr "" + +#: Client/loader/CInstallManager.cpp:532 +msgid "Install updated MTA:SA files" +msgstr "" + +#: Client/loader/CInstallManager.cpp:552 +msgid "" +"Could not update due to file conflicts. Please close other applications and " +"retry" +msgstr "" + +#: Client/loader/CInstallManager.cpp:561 +#, c-format +msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" +msgstr "" + +#: Client/loader/CInstallManager.cpp:613 +msgid "Create GTA:SA junctions" +msgstr "" + +#: Client/loader/CInstallManager.cpp:657 +msgid "MTA:SA cannot launch because copying a file failed:" +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:" +msgstr "" + +#: Client/loader/CInstallManager.cpp:672 +msgid "Copy MTA:SA files" +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:" +msgstr "" + +#: Client/loader/CInstallManager.cpp:780 +msgid "Patch GTA:SA dependency" +msgstr "" + +#: Client/loader/CInstallManager.cpp:828 +msgid "" +"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" +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." +msgstr "" + +#: Client/loader/CInstallManager.cpp:838 +msgid "Generate GTA:SA" +msgstr "" + +#: Client/loader/CInstallManager.cpp:853 +msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" +msgstr "" + +#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 +msgid "Patch GTA:SA" +msgstr "" + +#: Client/loader/CInstallManager.cpp:876 +msgid "MTA:SA cannot launch because patching GTA:SA has failed:" +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." +msgstr "" + +#: Client/loader/CInstallManager.cpp:1113 +msgid "Missing file:" +msgstr "" + +#: Client/loader/CInstallManager.cpp:1117 +msgid "If MTA fails to load, please re-install GTA:SA" +msgstr "" + +#: Client/loader/CInstallManager.cpp:1152 +msgid "Update install settings" +msgstr "" + +#: Client/loader/CInstallManager.cpp:1305 +msgid "Update compatibility settings" msgstr "" -#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 -msgid "Fast" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Busy" msgstr "" -#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 -msgid "Normal" +#: Client/core/CVersionUpdater.cpp:626 +msgid "Can't check for updates right now" msgstr "" -#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 -msgid "Above normal" +#: 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:1121 -msgid "Min" +#: 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:1134 -msgid "Max" +#: Client/core/CVersionUpdater.cpp:1588 +#, c-format +msgid "Do you want to launch MTA:SA %s and connect to this server ?" msgstr "" -#. Windows 8 compatibility -#: Client/core/CSettings.cpp:1141 -msgid "Windows 8 compatibility:" +#: 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:1145 -msgid "16-bit color" +#: Client/core/CVersionUpdater.cpp:1788 +msgid "Connecting" msgstr "" -#: Client/core/CSettings.cpp:1150 -msgid "Mouse fix" +#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 +msgid "Please wait..." msgstr "" -#. Cache path info -#: Client/core/CSettings.cpp:1168 -msgid "Client resource files:" +#: Client/core/CVersionUpdater.cpp:1804 +msgid "CHECKING" msgstr "" -#: Client/core/CSettings.cpp:1172 -msgid "Show in Explorer" +#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 +msgid "UPDATE CHECK" msgstr "" -#. Auto updater section label -#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 -msgid "Auto updater" +#: Client/core/CVersionUpdater.cpp:1822 +msgid "No update needed" msgstr "" -#. Check for updates -#: Client/core/CSettings.cpp:1228 -msgid "Check for update now" +#: Client/core/CVersionUpdater.cpp:1839 +msgid "DOWNLOADING" msgstr "" -#: Client/core/CSettings.cpp:1382 -msgid "Some settings will be changed when you next start MTA" +#: Client/core/CVersionUpdater.cpp:1840 +msgid "waiting..." msgstr "" -#: Client/core/CSettings.cpp:1383 +#: Client/core/CVersionUpdater.cpp:1856 +msgid "MANDATORY UPDATE" +msgstr "" + +#: Client/core/CVersionUpdater.cpp:1857 msgid "" +"To join this server, you must update MTA.\n" "\n" -"\n" -"Do you want to restart now?" +" Do you want to update now ?" msgstr "" -#: Client/core/CSettings.cpp:1386 -msgid "RESTART REQUIRED" +#: Client/core/CVersionUpdater.cpp:1875 +msgid "OPTIONAL UPDATE" msgstr "" -#: 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/CQuestionBox.cpp:194 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/core/CVersionUpdater.cpp:1876 +msgid "" +"Server says an update is recommended, but not essential.\n" +"\n" +" Do you want to update now ?" msgstr "" -#. ///////////////////////////////////////////////////////////////////////// -#. -#. Dialog strings -#. -#. -#. ///////////////////////////////////////////////////////////////////////// -#: 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/CQuestionBox.cpp:195 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 -#: Client/gui/CGUIMessageBox_Impl.cpp:72 -msgid "Yes" +#: Client/core/CVersionUpdater.cpp:1915 +msgid "" +"An update is currently not available.\n" +"\n" +"Please check www.mtasa.com" msgstr "" -#: Client/core/CSettings.cpp:1406 -msgid "Some settings will be changed when you disconnect the current server" +#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 +msgid "ERROR SAVING" msgstr "" -#: Client/core/CSettings.cpp:1407 -msgid "" -"\n" -"\n" -"Do you want to disconnect now?" +#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 +msgid "Unable to create the file." msgstr "" -#: Client/core/CSettings.cpp:1410 -msgid "DISCONNECT REQUIRED" +#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 +#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 +msgid "ERROR DOWNLOADING" msgstr "" -#. Update the joystick name -#: Client/core/CSettings.cpp:1737 -msgid "Joypad not detected - Check connections and restart game" +#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 +msgid "The downloaded file appears to be incorrect." msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Binding axis" +#: Client/core/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 +msgid "For some reason." msgstr "" -#: Client/core/CSettings.cpp:1932 -msgid "Move an axis to bind, or escape to clear" +#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 +msgid "DOWNLOAD COMPLETE" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Language:" +#: Client/core/CVersionUpdater.cpp:1990 +msgid " - Unknown problem in _DialogUpdateResult" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Skin:" +#: Client/core/CVersionUpdater.cpp:2081 Client/core/CSettings.cpp:4590 +msgid "CUSTOMIZED GTA:SA FILES" msgstr "" -#: Client/core/CSettings.cpp:2009 -msgid "Presets:" +#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 +msgid "Ok" msgstr "" -#: Client/core/CSettings.cpp:2058 -msgid "Chat" +#: Client/core/CVersionUpdater.cpp:2096 +msgid "ERROR" msgstr "" -#: Client/core/CSettings.cpp:2075 -msgid "Load" +#: 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:2087 -msgid "Colors" +#: Client/core/CVersionUpdater.cpp:2774 +#, c-format +msgid "%3d %% completed" msgstr "" -#: Client/core/CSettings.cpp:2088 -msgid "Layout" +#: Client/core/CVersionUpdater.cpp:2777 +#, c-format +msgid "" +"\n" +"\n" +"Waiting for response - %-3d" msgstr "" -#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 -msgid "Options" +#: Client/core/CKeyBinds.cpp:186 +msgid "Fire" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Background" +#: Client/core/CKeyBinds.cpp:187 +msgid "Next weapon" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Chat Text" +#: Client/core/CKeyBinds.cpp:188 +msgid "Previous weapon" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Background" +#: Client/core/CKeyBinds.cpp:189 +msgid "Forwards" msgstr "" -#: Client/core/CSettings.cpp:2095 -msgid "Input Text" +#: Client/core/CKeyBinds.cpp:190 +msgid "Backwards" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Lines:" +#: Client/core/CKeyBinds.cpp:191 Client/core/CSettings.cpp:2240 +#: Client/core/CSettings.cpp:2268 +msgid "Left" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Scale:" +#: Client/core/CKeyBinds.cpp:192 Client/core/CSettings.cpp:2242 +#: Client/core/CSettings.cpp:2269 +msgid "Right" msgstr "" -#: Client/core/CSettings.cpp:2118 -msgid "Width:" +#: Client/core/CKeyBinds.cpp:193 +msgid "Zoom in" msgstr "" -#: Client/core/CSettings.cpp:2121 -msgid "Size" +#: Client/core/CKeyBinds.cpp:194 +msgid "Zoom out" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "after" +#: Client/core/CKeyBinds.cpp:195 +msgid "Enter/Exit" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "for" +#: Client/core/CKeyBinds.cpp:196 +msgid "Change camera" msgstr "" -#: Client/core/CSettings.cpp:2170 -msgid "sec" +#. 10 +#: Client/core/CKeyBinds.cpp:197 +msgid "Jump" msgstr "" -#: Client/core/CSettings.cpp:2173 -msgid "Fading" +#: Client/core/CKeyBinds.cpp:198 +msgid "Sprint" msgstr "" -#: Client/core/CSettings.cpp:2179 -msgid "Fade out old lines" +#: Client/core/CKeyBinds.cpp:199 +msgid "Look behind" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Horizontal:" +#: Client/core/CKeyBinds.cpp:200 +msgid "Crouch" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Vertical:" +#: Client/core/CKeyBinds.cpp:201 +msgid "Action" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "Text-Align:" +#: Client/core/CKeyBinds.cpp:202 +msgid "Walk" msgstr "" -#: Client/core/CSettings.cpp:2219 -msgid "X-Offset:" +#: Client/core/CKeyBinds.cpp:203 +msgid "Vehicle fire" msgstr "" -#: Client/core/CSettings.cpp:2220 -msgid "Y-Offset:" +#: Client/core/CKeyBinds.cpp:204 +msgid "Vehicle secondary fire" msgstr "" -#: Client/core/CSettings.cpp:2226 -msgid "Position" +#: Client/core/CKeyBinds.cpp:205 +msgid "Vehicle left" msgstr "" -#: Client/core/CSettings.cpp:2240 Client/core/CSettings.cpp:2268 -#: Client/core/CKeyBinds.cpp:191 -msgid "Left" +#: Client/core/CKeyBinds.cpp:206 +msgid "Vehicle right" +msgstr "" + +#. 20 +#: Client/core/CKeyBinds.cpp:207 +msgid "Steer forwards/down" msgstr "" -#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 -msgid "Center" +#: Client/core/CKeyBinds.cpp:208 +msgid "Steer backwards/up" msgstr "" -#: Client/core/CSettings.cpp:2242 Client/core/CSettings.cpp:2269 -#: Client/core/CKeyBinds.cpp:192 -msgid "Right" +#: Client/core/CKeyBinds.cpp:209 +msgid "Accelerate" msgstr "" -#: Client/core/CSettings.cpp:2254 -msgid "Top" +#: Client/core/CKeyBinds.cpp:210 +msgid "Brake/Reverse" msgstr "" -#: Client/core/CSettings.cpp:2256 -msgid "Bottom" +#: Client/core/CKeyBinds.cpp:211 +msgid "Radio next" msgstr "" -#: Client/core/CSettings.cpp:2304 -msgid "Font" +#: Client/core/CKeyBinds.cpp:212 +msgid "Radio previous" msgstr "" -#: Client/core/CSettings.cpp:2341 -msgid "Hide background when not typing" +#: Client/core/CKeyBinds.cpp:213 +msgid "Radio user track skip" msgstr "" -#: Client/core/CSettings.cpp:2346 -msgid "Nickname completion using the \"Tab\" key" +#: Client/core/CKeyBinds.cpp:214 +msgid "Horn" msgstr "" -#: Client/core/CSettings.cpp:2351 -msgid "Allow server to flash the window" +#: Client/core/CKeyBinds.cpp:215 +msgid "Sub-mission" msgstr "" -#: Client/core/CSettings.cpp:2356 -msgid "Allow tray balloon notifications" +#: Client/core/CKeyBinds.cpp:216 +msgid "Handbrake" msgstr "" -#: Client/core/CSettings.cpp:2361 -msgid "Chat text black/white outline" +#. 30 +#: Client/core/CKeyBinds.cpp:217 +msgid "Vehicle look left" 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/CKeyBinds.cpp:218 +msgid "Vehicle look right" msgstr "" -#: Client/core/CSettings.cpp:2611 -msgid "Binding a primary key" +#: Client/core/CKeyBinds.cpp:219 +msgid "Vehicle look behind" msgstr "" -#: Client/core/CSettings.cpp:2618 -msgid "Binding a secondary key" +#: Client/core/CKeyBinds.cpp:220 +msgid "Vehicle mouse look" msgstr "" -#: Client/core/CSettings.cpp:2694 -msgid "GTA GAME CONTROLS" +#: Client/core/CKeyBinds.cpp:221 +msgid "Special control left" msgstr "" -#: Client/core/CSettings.cpp:2696 -msgid "MULTIPLAYER CONTROLS" +#: Client/core/CKeyBinds.cpp:222 +msgid "Special control right" msgstr "" -#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 -msgid "Your nickname contains invalid characters!" +#: Client/core/CKeyBinds.cpp:223 +msgid "Special control down" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Red:" +#: Client/core/CKeyBinds.cpp:224 +msgid "Special control up" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Green:" +#: Client/core/CKeyBinds.cpp:225 +msgid "Aim weapon" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Blue:" +#: Client/core/CKeyBinds.cpp:226 +msgid "Conversation yes" msgstr "" -#: Client/core/CSettings.cpp:3778 -msgid "Transparency:" +#. 40 +#: Client/core/CKeyBinds.cpp:227 +msgid "Conversation no" msgstr "" -#: Client/core/CSettings.cpp:3781 -msgid "Color" +#: Client/core/CKeyBinds.cpp:228 +msgid "Group control forwards" msgstr "" -#: Client/core/CSettings.cpp:3858 -msgid "Preview" +#: Client/core/CKeyBinds.cpp:229 +msgid "Group control backwards" msgstr "" -#: Client/core/CSettings.cpp:4166 -msgid "Please disconnect before changing language" +#: Client/core/CScreenShot.cpp:104 +#, c-format +msgid "Screenshot got %d bytes, but expected %d" msgstr "" -#: Client/core/CSettings.cpp:4194 -msgid "Please disconnect before changing skin" +#: Client/core/CScreenShot.cpp:110 +msgid "Screenshot failed" 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/CScreenShot.cpp:160 +#, c-format +msgid "Screenshot taken: '%s'" msgstr "" -#: Client/core/CSettings.cpp:4486 -msgid "PERFORMANCE WARNING" +#: Client/core/CCommandFuncs.cpp:24 +msgid "***[ COMMAND HELP ]***\n" 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/core/CCommandFuncs.cpp:158 +#, c-format +msgid "* The time is %d:%02d:%02d" msgstr "" -#: Client/core/CSettings.cpp:4508 -msgid "SCREEN UPLOAD INFORMATION" +#: Client/core/CCommandFuncs.cpp:242 +msgid "connect: Syntax is 'connect [ ]'" 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/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 +msgid "connect: Bad port number" msgstr "" -#: Client/core/CSettings.cpp:4526 -msgid "EXTERNAL SOUNDS" +#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 +#, c-format +msgid "connect: Connecting to %s:%u..." 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." +#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 +#, c-format +msgid "connect: could not connect to %s:%u!" msgstr "" -#: Client/core/CSettings.cpp:4560 -msgid "CONSENT TO ALLOW DATA SHARING" +#: Client/core/CCommandFuncs.cpp:281 +msgid "connect: Failed to unload current mod" 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/CCommandFuncs.cpp:371 +msgid "Bound all controls from GTA" msgstr "" -#: Client/core/CSettings.cpp:4590 Client/core/CVersionUpdater.cpp:2081 -msgid "CUSTOMIZED GTA:SA FILES" +#: Client/core/CCommandFuncs.cpp:385 +msgid "Saved configuration file" 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?" +#. Print it +#: Client/core/CCommandFuncs.cpp:451 +#, c-format +msgid "* Your serial is: %s" msgstr "" -#: Client/core/CSettings.cpp:4639 -msgid "EXPERIMENTAL FEATURE" +#. Create the window +#: Client/core/CNewsBrowser.cpp:153 +msgid "NEWS" msgstr "" -#: Client/core/CSettings.cpp:4782 -msgid "Please enter a nickname" +#. News link +#: Client/core/CNewsBrowser.cpp:171 Client/core/CNewsBrowser.cpp:172 +msgid "Visit latest news article" 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/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:4801 -msgid "Very experimental feature." +#: Client/core/CJoystickManager.cpp:1578 +msgid "Accelerate Axis" msgstr "" -#: Client/core/CSettings.cpp:4803 -msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" +#: Client/core/CJoystickManager.cpp:1580 +msgid "Brake Axis" msgstr "" -#: Client/core/CSettings.cpp:4805 -msgid "Older routers may require a slower scan speed." +#. TRANSLATORS: Replace with your language native name +#: Client/core/CLocalization.cpp:16 +msgid "English" msgstr "" -#: Client/core/CSettings.cpp:4807 -msgid "Switch on to use only one connection when downloading." +#. 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:4809 -msgid "Tag network packets to help ISPs identify MTA traffic." +#. Unknown command +#: Client/core/CCommands.cpp:223 +msgid "Unknown command or cvar: " msgstr "" -#: Client/core/CSettings.cpp:4811 -msgid "Spinning circle animation at the bottom of the screen" +#: Client/core/CCredits.cpp:34 +msgid "Programming" msgstr "" -#: Client/core/CSettings.cpp:4813 -msgid "Select default always. (This setting is not saved)" +#: Client/core/CCredits.cpp:63 +msgid "Contributors" msgstr "" -#: Client/core/CSettings.cpp:4815 -msgid "Maximum is usually best" +#: Client/core/CCredits.cpp:84 +msgid "Game Design / Scripting" msgstr "" -#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 -msgid "Auto updater:" +#: Client/core/CCredits.cpp:104 +msgid "Language Localization" msgstr "" -#: Client/core/CSettings.cpp:4817 -msgid "Select default unless you like filling out bug reports." +#: Client/core/CCredits.cpp:110 +msgid "Patch contributors" msgstr "" -#: Client/core/CSettings.cpp:4819 -msgid "Select default to automatically install important updates." +#: Client/core/CCredits.cpp:234 +msgid "Special Thanks" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "16-bit color:" +#: Client/core/CCredits.cpp:265 +msgid "" +"This software and project makes use of the following libraries and software:" msgstr "" -#: Client/core/CSettings.cpp:4821 -msgid "Enable 16 bit color modes - Requires MTA restart" +#: 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:4823 -msgid "Mouse fix:" +#: 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:4823 -msgid "Mouse movement fix - May need PC restart" +#: 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/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/CMainMenu.cpp:1197 +msgid "DISCONNECT WARNING" msgstr "" #: Client/core/CCore.cpp:813 Shared/mods/deathmatch/logic/Utils.cpp:129 @@ -1912,1373 +1994,1292 @@ msgstr "" msgid "for developers: reload news" msgstr "" -#: Client/core/CConnectManager.cpp:79 -msgid "Connecting failed. Invalid nick provided!" +#. Create window (with frame) if it will fit inside the screen resolution +#: Client/core/CSettings.cpp:84 +msgid "SETTINGS" msgstr "" -#: Client/core/CConnectManager.cpp:110 -msgid "Connecting failed. Invalid host provided!" +#: Client/core/CSettings.cpp:116 +msgid "Multiplayer" msgstr "" -#: Client/core/CConnectManager.cpp:126 -#, c-format -msgid "Connecting to %s at port %u failed!" +#: Client/core/CSettings.cpp:117 +msgid "Video" msgstr "" -#. Display the status box -#: Client/core/CConnectManager.cpp:147 -#, c-format -msgid "Connecting to %s:%u ..." +#: Client/core/CSettings.cpp:118 +msgid "Audio" msgstr "" -#. Failed loading the mod -#: Client/core/CConnectManager.cpp:403 -#, c-format -msgid "No such mod installed (%s)" +#: Client/core/CSettings.cpp:119 +msgid "Binds" msgstr "" -#: Client/core/CConnectManager.cpp:411 -msgid "Bad server response (2)" +#: Client/core/CSettings.cpp:120 +msgid "Controls" msgstr "" -#: Client/core/CConnectManager.cpp:421 -msgid "Bad server response (1)" +#: Client/core/CSettings.cpp:121 +msgid "Interface" msgstr "" -#: Client/core/CKeyBinds.cpp:186 -msgid "Fire" +#: Client/core/CSettings.cpp:122 +msgid "Web Browser" msgstr "" -#: Client/core/CKeyBinds.cpp:187 -msgid "Next weapon" +#: Client/core/CSettings.cpp:123 +msgid "Advanced" msgstr "" -#: Client/core/CKeyBinds.cpp:188 -msgid "Previous weapon" +#: 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/CKeyBinds.cpp:189 -msgid "Forwards" +#. * +#. * Controls tab +#. * +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:181 +msgid "Mouse sensitivity:" msgstr "" -#: Client/core/CKeyBinds.cpp:190 -msgid "Backwards" +#. VerticalAimSensitivity +#: Client/core/CSettings.cpp:157 Client/core/CSettings.cpp:199 +msgid "Vertical aim sensitivity:" msgstr "" -#: Client/core/CKeyBinds.cpp:193 -msgid "Zoom in" +#. Mouse Options +#: Client/core/CSettings.cpp:160 +msgid "Mouse options" msgstr "" -#: Client/core/CKeyBinds.cpp:194 -msgid "Zoom out" +#: Client/core/CSettings.cpp:167 +msgid "Invert mouse vertically" msgstr "" -#: Client/core/CKeyBinds.cpp:195 -msgid "Enter/Exit" +#: Client/core/CSettings.cpp:171 +msgid "Steer with mouse" msgstr "" -#: Client/core/CKeyBinds.cpp:196 -msgid "Change camera" +#: Client/core/CSettings.cpp:175 +msgid "Fly with mouse" msgstr "" -#. 10 -#: Client/core/CKeyBinds.cpp:197 -msgid "Jump" +#. Joypad options +#: Client/core/CSettings.cpp:217 +msgid "Joypad options" msgstr "" -#: Client/core/CKeyBinds.cpp:198 -msgid "Sprint" +#: Client/core/CSettings.cpp:230 +msgid "Standard controls (Mouse + Keyboard)" msgstr "" -#: Client/core/CKeyBinds.cpp:199 -msgid "Look behind" +#: Client/core/CSettings.cpp:237 +msgid "Classic controls (Joypad)" msgstr "" -#: Client/core/CKeyBinds.cpp:200 -msgid "Crouch" +#: Client/core/CSettings.cpp:274 +msgid "Dead Zone" msgstr "" -#: Client/core/CKeyBinds.cpp:201 -msgid "Action" +#: Client/core/CSettings.cpp:279 +msgid "Saturation" msgstr "" -#: Client/core/CKeyBinds.cpp:202 -msgid "Walk" +#: Client/core/CSettings.cpp:285 +msgid "Use the 'Binds' tab for joypad buttons." msgstr "" -#: Client/core/CKeyBinds.cpp:203 -msgid "Vehicle fire" +#: Client/core/CSettings.cpp:324 +msgid "Left Stick" msgstr "" -#: Client/core/CKeyBinds.cpp:204 -msgid "Vehicle secondary fire" +#: Client/core/CSettings.cpp:330 +msgid "Right Stick" msgstr "" -#: Client/core/CKeyBinds.cpp:205 -msgid "Vehicle left" +#: Client/core/CSettings.cpp:345 +msgid "DESCRIPTION" msgstr "" -#: Client/core/CKeyBinds.cpp:206 -msgid "Vehicle right" +#: Client/core/CSettings.cpp:346 +msgid "KEY" msgstr "" -#. 20 -#: Client/core/CKeyBinds.cpp:207 -msgid "Steer forwards/down" +#: Client/core/CSettings.cpp:348 +msgid "ALT. KEY" msgstr "" -#: Client/core/CKeyBinds.cpp:208 -msgid "Steer backwards/up" +#. * +#. * Multiplayer tab +#. * +#: Client/core/CSettings.cpp:353 Client/core/CSettings.cpp:356 +msgid "Nick:" msgstr "" -#: Client/core/CKeyBinds.cpp:209 -msgid "Accelerate" +#: Client/core/CSettings.cpp:378 +msgid "Save server passwords" msgstr "" -#: Client/core/CKeyBinds.cpp:210 -msgid "Brake/Reverse" +#: Client/core/CSettings.cpp:383 +msgid "Auto-refresh server browser" msgstr "" -#: Client/core/CKeyBinds.cpp:211 -msgid "Radio next" +#: Client/core/CSettings.cpp:388 +msgid "Allow screen upload" msgstr "" -#: Client/core/CKeyBinds.cpp:212 -msgid "Radio previous" +#: Client/core/CSettings.cpp:393 +msgid "Allow external sounds" msgstr "" -#: Client/core/CKeyBinds.cpp:213 -msgid "Radio user track skip" +#: Client/core/CSettings.cpp:398 +msgid "Always show download window" msgstr "" -#: Client/core/CKeyBinds.cpp:214 -msgid "Horn" +#: Client/core/CSettings.cpp:403 +msgid "Allow connecting with Discord Rich Presence" msgstr "" -#: Client/core/CKeyBinds.cpp:215 -msgid "Sub-mission" +#: Client/core/CSettings.cpp:408 +msgid "Use customized GTA:SA files" msgstr "" -#: Client/core/CKeyBinds.cpp:216 -msgid "Handbrake" +#: Client/core/CSettings.cpp:413 +msgid "Map rendering options" msgstr "" -#. 30 -#: Client/core/CKeyBinds.cpp:217 -msgid "Vehicle look left" +#: Client/core/CSettings.cpp:419 Client/core/CSettings.cpp:628 +msgid "Opacity:" msgstr "" -#: Client/core/CKeyBinds.cpp:218 -msgid "Vehicle look right" +#. * +#. * Audio tab +#. * +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:448 +msgid "Master volume:" msgstr "" -#: Client/core/CKeyBinds.cpp:219 -msgid "Vehicle look behind" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:467 +msgid "Radio volume:" msgstr "" -#: Client/core/CKeyBinds.cpp:220 -msgid "Vehicle mouse look" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:486 +msgid "SFX volume:" msgstr "" -#: Client/core/CKeyBinds.cpp:221 -msgid "Special control left" +#: Client/core/CSettings.cpp:439 Client/core/CSettings.cpp:505 +msgid "MTA volume:" msgstr "" -#: Client/core/CKeyBinds.cpp:222 -msgid "Special control right" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:524 +msgid "Voice volume:" msgstr "" -#: Client/core/CKeyBinds.cpp:223 -msgid "Special control down" +#: Client/core/CSettings.cpp:440 Client/core/CSettings.cpp:565 +msgid "Play mode:" msgstr "" -#: Client/core/CKeyBinds.cpp:224 -msgid "Special control up" +#: Client/core/CSettings.cpp:543 +msgid "Radio options" msgstr "" -#: Client/core/CKeyBinds.cpp:225 -msgid "Aim weapon" +#: Client/core/CSettings.cpp:549 +msgid "Radio Equalizer" msgstr "" -#: Client/core/CKeyBinds.cpp:226 -msgid "Conversation yes" +#: Client/core/CSettings.cpp:554 +msgid "Radio Auto-tune" msgstr "" -#. 40 -#: Client/core/CKeyBinds.cpp:227 -msgid "Conversation no" +#: Client/core/CSettings.cpp:559 +msgid "Usertrack options" msgstr "" -#: Client/core/CKeyBinds.cpp:228 -msgid "Group control forwards" +#: Client/core/CSettings.cpp:573 Client/core/CSettings.cpp:3087 +msgid "Radio" msgstr "" -#: Client/core/CKeyBinds.cpp:229 -msgid "Group control backwards" +#: Client/core/CSettings.cpp:574 Client/core/CSettings.cpp:3089 +msgid "Random" 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:575 Client/core/CSettings.cpp:3091 +msgid "Sequential" +msgstr "" + +#: Client/core/CSettings.cpp:578 +msgid "Automatic Media Scan" +msgstr "" + +#: Client/core/CSettings.cpp:585 +msgid "Mute options" +msgstr "" + +#: Client/core/CSettings.cpp:591 +msgid "Mute All sounds when minimized" +msgstr "" + +#: Client/core/CSettings.cpp:596 +msgid "Mute Radio sounds when minimized" msgstr "" -#. Create the window -#: Client/core/CNewsBrowser.cpp:153 -msgid "NEWS" +#: Client/core/CSettings.cpp:601 +msgid "Mute SFX 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:606 +msgid "Mute MTA sounds when minimized" msgstr "" -#: Client/core/CCommandFuncs.cpp:24 -msgid "***[ COMMAND HELP ]***\n" +#: Client/core/CSettings.cpp:611 +msgid "Mute Voice sounds when minimized" msgstr "" -#: Client/core/CCommandFuncs.cpp:158 -#, c-format -msgid "* The time is %d:%02d:%02d" +#. * +#. * Video tab +#. * +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:636 +msgid "Resolution:" msgstr "" -#: Client/core/CCommandFuncs.cpp:242 -msgid "connect: Syntax is 'connect [ ]'" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:683 +msgid "FOV:" msgstr "" -#: Client/core/CCommandFuncs.cpp:250 Client/core/CCommandFuncs.cpp:318 -msgid "connect: Bad port number" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:699 +msgid "Draw Distance:" msgstr "" -#: Client/core/CCommandFuncs.cpp:272 Client/core/CCommandFuncs.cpp:333 -#, c-format -msgid "connect: Connecting to %s:%u..." +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:717 +msgid "Brightness:" msgstr "" -#: Client/core/CCommandFuncs.cpp:276 Client/core/CCommandFuncs.cpp:337 -#, c-format -msgid "connect: could not connect to %s:%u!" +#: Client/core/CSettings.cpp:627 Client/core/CSettings.cpp:735 +msgid "FX Quality:" msgstr "" -#: Client/core/CCommandFuncs.cpp:281 -msgid "connect: Failed to unload current mod" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:749 +msgid "Anisotropic filtering:" msgstr "" -#: Client/core/CCommandFuncs.cpp:371 -msgid "Bound all controls from GTA" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:776 +msgid "Anti-aliasing:" msgstr "" -#: Client/core/CCommandFuncs.cpp:385 -msgid "Saved configuration file" +#: Client/core/CSettings.cpp:628 Client/core/CSettings.cpp:790 +msgid "Aspect Ratio:" msgstr "" -#. Print it -#: Client/core/CCommandFuncs.cpp:451 -#, c-format -msgid "* Your serial is: %s" +#: Client/core/CSettings.cpp:648 +msgid "Windowed" msgstr "" -#. Unknown command -#: Client/core/CCommands.cpp:223 -msgid "Unknown command or cvar: " +#: Client/core/CSettings.cpp:654 +msgid "DPI aware" 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:669 Client/core/CSettings.cpp:1613 +msgid "Standard" msgstr "" -#: Client/core/CCredits.cpp:34 -msgid "Programming" +#: Client/core/CSettings.cpp:671 Client/core/CSettings.cpp:1617 +msgid "Borderless keep res" msgstr "" -#: Client/core/CCredits.cpp:63 -msgid "Contributors" +#: Client/core/CSettings.cpp:675 +msgid "Mip Mapping" msgstr "" -#: Client/core/CCredits.cpp:84 -msgid "Game Design / Scripting" +#: Client/core/CSettings.cpp:743 Client/core/CSettings.cpp:1517 +msgid "Low" msgstr "" -#: Client/core/CCredits.cpp:104 -msgid "Language Localization" +#: Client/core/CSettings.cpp:744 Client/core/CSettings.cpp:1519 +msgid "Medium" msgstr "" -#: Client/core/CCredits.cpp:110 -msgid "Patch contributors" +#: 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/CCredits.cpp:234 -msgid "Special Thanks" +#: Client/core/CSettings.cpp:746 Client/core/CSettings.cpp:1523 +msgid "Very high" msgstr "" -#: Client/core/CCredits.cpp:265 -msgid "" -"This software and project makes use of the following libraries and software:" +#: 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/CJoystickManager.cpp:1578 -msgid "Accelerate Axis" +#: Client/core/CSettings.cpp:785 Client/core/CSettings.cpp:1529 +msgid "1x" msgstr "" -#: Client/core/CJoystickManager.cpp:1580 -msgid "Brake Axis" +#: Client/core/CSettings.cpp:786 Client/core/CSettings.cpp:1531 +msgid "2x" msgstr "" -#. TRANSLATORS: Replace with your language native name -#: Client/core/CLocalization.cpp:16 -msgid "English" +#: Client/core/CSettings.cpp:787 Client/core/CSettings.cpp:1533 +msgid "3x" 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:800 Client/core/CSettings.cpp:1019 +#: Client/core/CSettings.cpp:1539 Client/core/CSettings.cpp:3154 +msgid "Auto" 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:801 Client/core/CSettings.cpp:1541 +msgid "4:3" 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:802 Client/core/CSettings.cpp:1543 +msgid "16:10" msgstr "" -#: Client/core/CMainMenu.cpp:1197 -msgid "DISCONNECT WARNING" +#: Client/core/CSettings.cpp:803 Client/core/CSettings.cpp:1545 +msgid "16:9" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Busy" +#: Client/core/CSettings.cpp:806 +msgid "HUD Match Aspect Ratio" msgstr "" -#: Client/core/CVersionUpdater.cpp:626 -msgid "Can't check for updates right now" +#: Client/core/CSettings.cpp:812 +msgid "Volumetric Shadows" 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:816 +msgid "Grass effect" 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:820 +msgid "Heat haze" 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:824 +msgid "Tyre Smoke etc" 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:828 +msgid "Dynamic ped shadows" msgstr "" -#: Client/core/CVersionUpdater.cpp:1788 -msgid "Connecting" +#: Client/core/CSettings.cpp:832 +msgid "Motion blur" msgstr "" -#: Client/core/CVersionUpdater.cpp:1789 Client/core/CVersionUpdater.cpp:1805 -msgid "Please wait..." +#: Client/core/CSettings.cpp:837 +msgid "Full Screen Minimize" msgstr "" -#: Client/core/CVersionUpdater.cpp:1804 -msgid "CHECKING" +#: Client/core/CSettings.cpp:849 +msgid "Enable Device Selection Dialog" msgstr "" -#: Client/core/CVersionUpdater.cpp:1821 Client/core/CVersionUpdater.cpp:1914 -msgid "UPDATE CHECK" +#: Client/core/CSettings.cpp:861 +msgid "Show unsafe resolutions" msgstr "" -#: Client/core/CVersionUpdater.cpp:1822 -msgid "No update needed" +#: Client/core/CSettings.cpp:873 +msgid "Render vehicles always in high detail" msgstr "" -#: Client/core/CVersionUpdater.cpp:1839 -msgid "DOWNLOADING" +#: Client/core/CSettings.cpp:877 +msgid "Render peds always in high detail" msgstr "" -#: Client/core/CVersionUpdater.cpp:1840 -msgid "waiting..." +#: Client/core/CSettings.cpp:881 +msgid "Corona rain reflections" msgstr "" -#: Client/core/CVersionUpdater.cpp:1856 -msgid "MANDATORY UPDATE" +#: Client/core/CSettings.cpp:910 +msgid "Enable remote websites" 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:915 +msgid "Enable Javascript on remote websites" msgstr "" -#: Client/core/CVersionUpdater.cpp:1875 -msgid "OPTIONAL UPDATE" +#: Client/core/CSettings.cpp:920 +msgid "Custom blacklist" 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:931 Client/core/CSettings.cpp:966 +msgid "Enter a domain e.g. google.com" msgstr "" -#: Client/core/CVersionUpdater.cpp:1915 -msgid "" -"An update is currently not available.\n" -"\n" -"Please check www.mtasa.com" +#: Client/core/CSettings.cpp:939 +msgid "Block" msgstr "" -#: Client/core/CVersionUpdater.cpp:1936 Client/core/CVersionUpdater.cpp:2118 -msgid "ERROR SAVING" +#: Client/core/CSettings.cpp:947 Client/core/CSettings.cpp:982 +msgid "Domain" msgstr "" -#: Client/core/CVersionUpdater.cpp:1937 Client/core/CVersionUpdater.cpp:2119 -msgid "Unable to create the file." +#: Client/core/CSettings.cpp:949 Client/core/CSettings.cpp:984 +msgid "Remove domain" msgstr "" -#: Client/core/CVersionUpdater.cpp:1945 Client/core/CVersionUpdater.cpp:1954 -#: Client/core/CVersionUpdater.cpp:2127 Client/core/CVersionUpdater.cpp:2136 -msgid "ERROR DOWNLOADING" +#. Reset vecTemp +#: Client/core/CSettings.cpp:955 +msgid "Custom whitelist" msgstr "" -#: Client/core/CVersionUpdater.cpp:1946 Client/core/CVersionUpdater.cpp:2128 -msgid "The downloaded file appears to be incorrect." +#. Misc section label +#: Client/core/CSettings.cpp:997 +msgid "Misc" +msgstr "" + +#. 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/CVersionUpdater.cpp:1955 Client/core/CVersionUpdater.cpp:2137 -msgid "For some reason." +#. Browser scan speed +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1024 +#: Client/core/CSettings.cpp:4805 +msgid "Browser speed:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1966 Client/core/CVersionUpdater.cpp:2150 -msgid "DOWNLOAD COMPLETE" +#. Single download +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1038 +#: Client/core/CSettings.cpp:4807 +msgid "Single connection:" msgstr "" -#: Client/core/CVersionUpdater.cpp:1990 -msgid " - Unknown problem in _DialogUpdateResult" +#. Packet tag +#: Client/core/CSettings.cpp:1003 Client/core/CSettings.cpp:1051 +#: Client/core/CSettings.cpp:4809 +msgid "Packet tag:" msgstr "" -#: Client/core/CVersionUpdater.cpp:2088 Client/core/CVersionUpdater.cpp:2098 -msgid "Ok" +#. 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:2096 -msgid "ERROR" +#. 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:2097 -msgid "" -"Some MTA:SA data files are missing.\n" -"\n" -"\n" -"Please reinstall MTA:SA" +#. 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:2774 -#, c-format -msgid "%3d %% completed" +#. 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:2777 -#, c-format -msgid "" -"\n" -"\n" -"Waiting for response - %-3d" +#. Update build type +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1215 +msgid "Update build type:" msgstr "" -#. Create window -#: Client/core/CConsole.cpp:417 -msgid "CONSOLE" +#. UpdateAutoInstall +#: Client/core/CSettings.cpp:1005 Client/core/CSettings.cpp:1194 +msgid "Install important updates:" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:25 -msgid "Idle" +#: 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/CServerList.cpp:150 -msgid "player" -msgid_plural "players" -msgstr[0] "" -msgstr[1] "" - -#: Client/core/ServerBrowser/CServerList.cpp:151 -msgid "on" +#: Client/core/CSettings.cpp:1031 Client/core/CSettings.cpp:3161 +msgid "Very slow" msgstr "" -#: 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)" +#: 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 "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:254 -msgid "Master server list could not be parsed." +#: Client/core/CSettings.cpp:1033 Client/core/CSettings.cpp:3165 +msgid "Fast" msgstr "" -#. Abort -#: Client/core/ServerBrowser/CServerList.cpp:264 -msgid "Master server list could not be retrieved." +#: Client/core/CSettings.cpp:1084 Client/core/CSettings.cpp:3141 +msgid "Normal" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:274 -msgid "(Backup server list)" +#: Client/core/CSettings.cpp:1085 Client/core/CSettings.cpp:3143 +msgid "Above normal" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:326 -msgid "Cannot bind LAN-broadcast socket" +#: Client/core/CSettings.cpp:1121 +msgid "Min" msgstr "" -#: Client/core/ServerBrowser/CServerList.cpp:345 -msgid "Attempting to discover LAN servers" +#: Client/core/CSettings.cpp:1134 +msgid "Max" msgstr "" -#. Create queue window -#: Client/core/ServerBrowser/CServerInfo.cpp:32 -#: Client/core/ServerBrowser/CServerInfo.cpp:302 -msgid "SERVER IS FULL" +#. Windows 8 compatibility +#: Client/core/CSettings.cpp:1141 +msgid "Windows 8 compatibility:" 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/core/CSettings.cpp:1145 +msgid "16-bit color" msgstr "" -#. Server IP -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:64 -msgid "Server Address:" +#: Client/core/CSettings.cpp:1150 +msgid "Mouse fix" msgstr "" -#. Gamemode -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:75 -msgid "Gamemode:" +#. Cache path info +#: Client/core/CSettings.cpp:1168 +msgid "Client resource files:" msgstr "" -#. Map -#: Client/core/ServerBrowser/CServerInfo.cpp:44 -#: Client/core/ServerBrowser/CServerInfo.cpp:86 -msgid "Map:" +#: Client/core/CSettings.cpp:1172 +msgid "Show in Explorer" msgstr "" -#. Players -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:97 -msgid "Players:" +#. Auto updater section label +#: Client/core/CSettings.cpp:1187 Client/core/CSettings.cpp:1190 +msgid "Auto updater" msgstr "" -#. Passworded -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:108 -msgid "Passworded:" +#. Check for updates +#: Client/core/CSettings.cpp:1228 +msgid "Check for update now" msgstr "" -#. Latency -#: Client/core/ServerBrowser/CServerInfo.cpp:45 -#: Client/core/ServerBrowser/CServerInfo.cpp:119 -msgid "Latency:" +#: Client/core/CSettings.cpp:1382 +msgid "Some settings will be changed when you next start MTA" msgstr "" -#. Column for player names -#. Player List Columns -#: Client/core/ServerBrowser/CServerInfo.cpp:138 -#: Client/core/ServerBrowser/CServerBrowser.cpp:478 -msgid "Player list" +#: Client/core/CSettings.cpp:1383 +msgid "" +"\n" +"\n" +"Do you want to restart now?" msgstr "" -#. Close button -#: Client/core/ServerBrowser/CServerInfo.cpp:144 -msgid "Close" +#: Client/core/CSettings.cpp:1386 +msgid "RESTART REQUIRED" msgstr "" -#. Join Game button -#: Client/core/ServerBrowser/CServerInfo.cpp:152 -msgid "Join Game" +#: Client/core/CSettings.cpp:1406 +msgid "Some settings will be changed when you disconnect the current server" msgstr "" -#. Please enter password label -#: Client/core/ServerBrowser/CServerInfo.cpp:166 -msgid "Please enter the password to the server:" +#: Client/core/CSettings.cpp:1407 +msgid "" +"\n" +"\n" +"Do you want to disconnect now?" msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:177 -msgid "Join the server as soon as a player slot is available." +#: Client/core/CSettings.cpp:1410 +msgid "DISCONNECT REQUIRED" msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:310 -msgid "PLEASE ENTER SERVER PASSWORD" +#. Update the joystick name +#: Client/core/CSettings.cpp:1737 +msgid "Joypad not detected - Check connections and restart game" msgstr "" -#: Client/core/ServerBrowser/CServerInfo.cpp:319 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -#: Client/loader/MainFunctions.cpp:603 Client/loader/MainFunctions.cpp:610 -#: Client/loader/MainFunctions.cpp:1219 -msgid "Information" +#: Client/core/CSettings.cpp:1932 +msgid "Binding axis" msgstr "" -#. The server has timed out -#: Client/core/ServerBrowser/CServerInfo.cpp:402 -msgid "Timed Out" +#: Client/core/CSettings.cpp:1932 +msgid "Move an axis to bind, or escape to clear" msgstr "" -#. Set every GUI elements text to blank -#: Client/core/ServerBrowser/CServerInfo.cpp:431 -msgid "Querying..." +#: Client/core/CSettings.cpp:2009 +msgid "Language:" msgstr "" -#. Create the window -#: Client/core/ServerBrowser/CServerBrowser.cpp:85 -msgid "SERVER BROWSER" +#: Client/core/CSettings.cpp:2009 +msgid "Skin:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:134 -msgid "Local" +#: Client/core/CSettings.cpp:2009 +msgid "Presets:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:135 -msgid "Favourites" +#: Client/core/CSettings.cpp:2058 +msgid "Chat" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:136 -msgid "Recent" +#: Client/core/CSettings.cpp:2075 +msgid "Load" 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'" +#: Client/core/CSettings.cpp:2087 +msgid "Colors" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:203 -msgid "HELP" +#: Client/core/CSettings.cpp:2088 +msgid "Layout" +msgstr "" + +#: Client/core/CSettings.cpp:2089 Client/core/CSettings.cpp:2335 +msgid "Options" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:252 -msgid "Refresh" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Background" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:253 -msgid "Add Favorite" +#: Client/core/CSettings.cpp:2095 +msgid "Chat Text" 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/core/CSettings.cpp:2095 +msgid "Input Background" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:212 -#: Client/core/ServerBrowser/CServerBrowser.cpp:255 -msgid "Server information" +#: Client/core/CSettings.cpp:2095 +msgid "Input Text" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:256 -msgid "Search servers" +#: Client/core/CSettings.cpp:2118 +msgid "Lines:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:257 -msgid "Search players" +#: Client/core/CSettings.cpp:2118 +msgid "Scale:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:213 -#: Client/core/ServerBrowser/CServerBrowser.cpp:258 -msgid "Start search" +#: Client/core/CSettings.cpp:2118 +msgid "Width:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:299 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1697 -msgid "Search players..." +#: Client/core/CSettings.cpp:2121 +msgid "Size" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:422 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1695 -msgid "Search servers..." +#: Client/core/CSettings.cpp:2170 +msgid "after" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:453 -msgid "Name" +#: Client/core/CSettings.cpp:2170 +msgid "for" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:454 -msgid "Players" +#: Client/core/CSettings.cpp:2170 +msgid "sec" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:455 -msgid "Ping" +#: Client/core/CSettings.cpp:2173 +msgid "Fading" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:456 -msgid "Gamemode" +#: Client/core/CSettings.cpp:2179 +msgid "Fade out old lines" msgstr "" -#. Include label -#: Client/core/ServerBrowser/CServerBrowser.cpp:486 -msgid "Include:" +#: Client/core/CSettings.cpp:2219 +msgid "Horizontal:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:492 -msgid "Empty" +#: Client/core/CSettings.cpp:2219 +msgid "Vertical:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:498 -msgid "Full" +#: Client/core/CSettings.cpp:2219 +msgid "Text-Align:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:504 -msgid "Locked" +#: Client/core/CSettings.cpp:2219 +msgid "X-Offset:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:516 -msgid "Offline" +#: Client/core/CSettings.cpp:2220 +msgid "Y-Offset:" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:529 -msgid "Other Versions" +#: Client/core/CSettings.cpp:2226 +msgid "Position" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:550 -msgid "Back" +#: Client/core/CSettings.cpp:2241 Client/core/CSettings.cpp:2255 +msgid "Center" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:556 -#: Client/loader/Dialogs.cpp:135 -msgid "Help" +#: Client/core/CSettings.cpp:2254 +msgid "Top" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:741 -msgid "Loading..." +#: Client/core/CSettings.cpp:2256 +msgid "Bottom" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1240 -#: Client/core/ServerBrowser/CServerBrowser.cpp:2182 -msgid " ..loading.." +#: Client/core/CSettings.cpp:2304 +msgid "Font" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1278 -#: Client/core/ServerBrowser/CServerBrowser.cpp:1406 -msgid "No address specified!" +#: Client/core/CSettings.cpp:2341 +msgid "Hide background when not typing" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Unknown protocol" +#: Client/core/CSettings.cpp:2346 +msgid "Nickname completion using the \"Tab\" key" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1291 -msgid "Please use the mtasa:// protocol!" +#: Client/core/CSettings.cpp:2351 +msgid "Allow server to flash the window" msgstr "" -#: Client/core/ServerBrowser/CServerBrowser.cpp:1380 -msgid "You have to select a server to connect to." +#: Client/core/CSettings.cpp:2356 +msgid "Allow tray balloon notifications" 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:2361 +msgid "Chat text black/white outline" msgstr "" -#: Client/loader/Dialogs.cpp:134 -msgid "Quit" +#. 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:151 -msgid "MTA: San Andreas has encountered a problem" +#: Client/core/CSettings.cpp:2611 +msgid "Binding a primary key" msgstr "" -#: Client/loader/Dialogs.cpp:152 -msgid "Crash information" +#: Client/core/CSettings.cpp:2618 +msgid "Binding a secondary key" 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:2694 +msgid "GTA GAME CONTROLS" msgstr "" -#: Client/loader/Dialogs.cpp:154 -msgid "Doing so will increase the chance of this crash being fixed." +#: Client/core/CSettings.cpp:2696 +msgid "MULTIPLAYER CONTROLS" msgstr "" -#: Client/loader/Dialogs.cpp:155 -msgid "Do you want to restart MTA: San Andreas ?" +#: Client/core/CSettings.cpp:2941 Client/core/CSettings.cpp:4764 +msgid "Your nickname contains invalid characters!" msgstr "" -#: Client/loader/Dialogs.cpp:162 -msgid "MTA: San Andreas - Warning" +#: Client/core/CSettings.cpp:3778 +msgid "Red:" msgstr "" -#: Client/loader/Dialogs.cpp:163 -msgid "" -"Your Grand Theft Auto: San Andreas install directory contains these files:" +#: Client/core/CSettings.cpp:3778 +msgid "Green:" 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:3778 +msgid "Blue:" msgstr "" -#: Client/loader/Dialogs.cpp:167 -msgid "Keep these files, but also show this warning on next start" +#: Client/core/CSettings.cpp:3778 +msgid "Transparency:" msgstr "" -#: Client/loader/Dialogs.cpp:168 -msgid "Do not remind me about these files again" +#: Client/core/CSettings.cpp:3781 +msgid "Color" msgstr "" -#: Client/loader/Dialogs.cpp:169 -msgid "Rename these files from *.dll to *.dll.bak" +#: Client/core/CSettings.cpp:3858 +msgid "Preview" msgstr "" -#: Client/loader/Dialogs.cpp:170 -msgid "Show me these files" +#: Client/core/CSettings.cpp:4166 +msgid "Please disconnect before changing language" msgstr "" -#: Client/loader/Dialogs.cpp:171 -msgid "Play MTA:SA" +#: Client/core/CSettings.cpp:4194 +msgid "Please disconnect before changing skin" msgstr "" -#: Client/loader/Dialogs.cpp:177 -msgid "MTA: San Andreas - Confusing options" +#: 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:178 -msgid "NVidia Optimus detected!" +#: Client/core/CSettings.cpp:4486 +msgid "PERFORMANCE WARNING" msgstr "" -#: Client/loader/Dialogs.cpp:179 -msgid "Try each option and see what works:" +#: 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 "" -#: Client/loader/Dialogs.cpp:180 -msgid "A - Standard NVidia" +#: Client/core/CSettings.cpp:4508 +msgid "SCREEN UPLOAD INFORMATION" msgstr "" -#: Client/loader/Dialogs.cpp:181 -msgid "B - Alternate NVidia" +#: 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/loader/Dialogs.cpp:182 -msgid "C - Standard Intel" +#: Client/core/CSettings.cpp:4526 +msgid "EXTERNAL SOUNDS" msgstr "" -#: Client/loader/Dialogs.cpp:183 -msgid "D - Alternate Intel" +#: 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:184 -msgid "If you get desperate, this might help:" +#: Client/core/CSettings.cpp:4560 +msgid "CONSENT TO ALLOW DATA SHARING" msgstr "" -#: Client/loader/Dialogs.cpp:185 -msgid "If you have already selected an option that works, this might help:" +#: 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:186 -msgid "Force windowed mode" +#: 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:187 -msgid "Don't show again" +#: Client/core/CSettings.cpp:4639 +msgid "EXPERIMENTAL FEATURE" msgstr "" -#: Client/loader/Dialogs.cpp:195 -msgid "Warning: Could not detect anti-virus product" +#: Client/core/CSettings.cpp:4782 +msgid "Please enter a nickname" msgstr "" -#: Client/loader/Dialogs.cpp:197 +#: Client/core/CSettings.cpp:4783 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." +"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/Dialogs.cpp:200 -msgid "I have already installed an anti-virus" +#: Client/core/CSettings.cpp:4801 +msgid "Very experimental feature." 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/core/CSettings.cpp:4803 +msgid "Stops stalls with CJ variations (Uses 65MB more RAM)" msgstr "" -#: Client/loader/Dialogs.cpp:890 Client/loader/Utils.cpp:534 -msgid "Searching for Grand Theft Auto San Andreas" +#: Client/core/CSettings.cpp:4805 +msgid "Older routers may require a slower scan speed." msgstr "" -#: Client/loader/Dialogs.cpp:893 Client/loader/Utils.cpp:536 -msgid "Please start Grand Theft Auto San Andreas" +#: Client/core/CSettings.cpp:4807 +msgid "Switch on to use only one connection when downloading." msgstr "" -#: Client/loader/Dialogs.cpp:901 Client/loader/Install.cpp:852 -msgid "Installing update..." +#: Client/core/CSettings.cpp:4809 +msgid "Tag network packets to help ISPs identify MTA traffic." msgstr "" -#: Client/loader/Dialogs.cpp:909 Client/loader/Install.cpp:934 -msgid "Extracting files..." +#: Client/core/CSettings.cpp:4811 +msgid "Spinning circle animation at the bottom of the screen" msgstr "" -#: Client/loader/Dialogs.cpp:914 Client/loader/Utils.cpp:1394 -msgid "Copying files..." +#: Client/core/CSettings.cpp:4813 +msgid "Select default always. (This setting is not saved)" msgstr "" -#: Client/loader/Dialogs.cpp:919 Client/loader/Utils.cpp:1454 -msgid "Copy finished early. Everything OK." +#: Client/core/CSettings.cpp:4815 +msgid "Maximum is usually best" msgstr "" -#: Client/loader/Dialogs.cpp:924 Client/loader/Utils.cpp:1460 -msgid "Finishing..." +#: Client/core/CSettings.cpp:4817 Client/core/CSettings.cpp:4819 +msgid "Auto updater:" msgstr "" -#: Client/loader/Dialogs.cpp:928 Client/loader/Utils.cpp:1462 -msgid "Done!" +#: Client/core/CSettings.cpp:4817 +msgid "Select default unless you like filling out bug reports." msgstr "" -#: Client/loader/Utils.cpp:600 -msgid "Select your Grand Theft Auto: San Andreas Installation Directory" +#: Client/core/CSettings.cpp:4819 +msgid "Select default to automatically install important updates." 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:4821 +msgid "16-bit color:" msgstr "" -#: Client/loader/Utils.cpp:1069 -#, c-format -msgid "Error loading %s module! (%s)" +#: Client/core/CSettings.cpp:4821 +msgid "Enable 16 bit color modes - Requires MTA restart" 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:4823 +msgid "Mouse fix:" msgstr "" -#: Client/loader/Utils.cpp:1541 -#, c-format -msgid "GTA:SA had trouble opening the file '%s'" +#: Client/core/CSettings.cpp:4823 +msgid "Mouse movement fix - May need PC restart" msgstr "" -#: Client/loader/Utils.cpp:1563 -#, c-format -msgid "GTA:SA is missing the file '%s'." +#: Client/core/CConnectManager.cpp:79 +msgid "Connecting failed. Invalid nick provided!" msgstr "" -#: Client/loader/Utils.cpp:1588 -msgid "GTA:SA had trouble loading a model." +#: Client/core/CConnectManager.cpp:110 +msgid "Connecting failed. Invalid host provided!" msgstr "" -#: Client/loader/Utils.cpp:1590 -msgid "If you recently modified gta3.img, then try reinstalling GTA:SA." +#: Client/core/CConnectManager.cpp:126 +#, c-format +msgid "Connecting to %s at port %u failed!" msgstr "" -#: Client/loader/Utils.cpp:1615 -msgid "GTA:SA had trouble adding an upgrade to a vehicle." +#. Display the status box +#: Client/core/CConnectManager.cpp:147 +#, c-format +msgid "Connecting to %s:%u ..." msgstr "" -#: Client/loader/Utils.cpp:1634 +#. Failed loading the mod +#: Client/core/CConnectManager.cpp:403 #, c-format -msgid "GTA:SA found errors in the file '%s'" +msgid "No such mod installed (%s)" msgstr "" -#: Client/loader/Utils.cpp:1716 -msgid "Did your computer restart when playing MTA:SA?" +#: Client/core/CConnectManager.cpp:411 +msgid "Bad server response (2)" msgstr "" -#: Client/loader/Utils.cpp:1781 -msgid "Please terminate the following programs before continuing:" +#: Client/core/CConnectManager.cpp:421 +msgid "Bad server response (1)" msgstr "" -#: Client/loader/Install.cpp:265 -msgid "Unknown" +#. Create window +#: Client/core/CConsole.cpp:417 +msgid "CONSOLE" msgstr "" -#: Client/loader/Install.cpp:272 -#, c-format +#: Client/core/DXHook/CDirect3DHook9.cpp:124 msgid "" -"The file '%s' is currently locked by %zu processes.\n" -"\n" -"Do you want to terminate the following processes and continue updating?\n" +"Could not initialize Direct3D9.\n" "\n" -"%s" +"Please ensure the DirectX End-User Runtime and\n" +"latest Windows Service Packs are installed correctly." 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." +#. Create the window +#: Client/core/ServerBrowser/CServerBrowser.cpp:85 +msgid "SERVER BROWSER" 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/ServerBrowser/CServerBrowser.cpp:134 +msgid "Local" 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/ServerBrowser/CServerBrowser.cpp:135 +msgid "Favourites" msgstr "" -#: Client/loader/MainFunctions.cpp:269 -msgid "" -"Another instance of MTA is already running.\n" -"\n" -"Do you want to terminate it?" +#: Client/core/ServerBrowser/CServerBrowser.cpp:136 +msgid "Recent" msgstr "" -#: Client/loader/MainFunctions.cpp:294 +#: Client/core/ServerBrowser/CServerBrowser.cpp:191 msgid "" -"Are you having problems running MTA:SA?.\n" +"FOR QUICK CONNECT:\n" "\n" -"Do you want to revert to an earlier version?" +"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: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?" +#: Client/core/ServerBrowser/CServerBrowser.cpp:203 +msgid "HELP" msgstr "" -#: Client/loader/MainFunctions.cpp:339 -msgid "" -"GTA settings have been reset.\n" -"\n" -"Press OK to continue." +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:252 +msgid "Refresh" msgstr "" -#: Client/loader/MainFunctions.cpp:344 -#, c-format -msgid "File could not be deleted: '%s'" +#: Client/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:253 +msgid "Add Favorite" 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/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 "" -#. 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/core/ServerBrowser/CServerBrowser.cpp:212 +#: Client/core/ServerBrowser/CServerBrowser.cpp:255 +msgid "Server information" 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/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:256 +msgid "Search servers" 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/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:257 +msgid "Search players" msgstr "" -#: Client/loader/MainFunctions.cpp:468 -#, c-format -msgid "The detected file was: %s\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:213 +#: Client/core/ServerBrowser/CServerBrowser.cpp:258 +msgid "Start search" 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/core/ServerBrowser/CServerBrowser.cpp:299 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1704 +msgid "Search players..." msgstr "" -#: Client/loader/MainFunctions.cpp:609 -msgid "" -"Unable to terminate GTA: San Andreas. If the problem persists, please " -"restart your computer." +#: Client/core/ServerBrowser/CServerBrowser.cpp:422 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1702 +msgid "Search servers..." +msgstr "" + +#: Client/core/ServerBrowser/CServerBrowser.cpp:453 +msgid "Name" msgstr "" -#: Client/loader/MainFunctions.cpp:632 -msgid "" -"Registry entries are missing. Please reinstall Multi Theft Auto: San Andreas." +#: Client/core/ServerBrowser/CServerBrowser.cpp:454 +msgid "Players" 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/core/ServerBrowser/CServerBrowser.cpp:455 +msgid "Ping" 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/CServerBrowser.cpp:456 +msgid "Gamemode" msgstr "" -#: Client/loader/MainFunctions.cpp:810 -msgid "" -"Load failed. Please ensure that the latest data files have been installed " -"correctly." +#. Player List Columns +#. Column for player names +#: Client/core/ServerBrowser/CServerBrowser.cpp:478 +#: Client/core/ServerBrowser/CServerInfo.cpp:138 +msgid "Player list" msgstr "" -#: Client/loader/MainFunctions.cpp:819 -#, c-format -msgid "Load failed. Please ensure that %s is installed correctly." +#. Include label +#: Client/core/ServerBrowser/CServerBrowser.cpp:486 +msgid "Include:" msgstr "" -#: Client/loader/MainFunctions.cpp:826 -#, c-format -msgid "Load failed. Could not find gta_sa.exe in %s." +#: Client/core/ServerBrowser/CServerBrowser.cpp:492 +msgid "Empty" msgstr "" -#: Client/loader/MainFunctions.cpp:836 -#, c-format -msgid "" -"Load failed. %s exists in the GTA directory. Please delete before continuing." +#: Client/core/ServerBrowser/CServerBrowser.cpp:498 +msgid "Full" msgstr "" -#: Client/loader/MainFunctions.cpp:845 -#, c-format -msgid "Main file has an incorrect name (%s)" +#: Client/core/ServerBrowser/CServerBrowser.cpp:504 +msgid "Locked" 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:516 +msgid "Offline" 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:529 +msgid "Other Versions" 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/core/ServerBrowser/CServerBrowser.cpp:550 +msgid "Back" 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:741 +msgid "Loading..." msgstr "" -#: Client/loader/MainFunctions.cpp:1009 -msgid "" -"File version mismatch error. Reinstall MTA:SA if you experience problems.\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1247 +#: Client/core/ServerBrowser/CServerBrowser.cpp:2189 +msgid " ..loading.." msgstr "" -#: Client/loader/MainFunctions.cpp:1018 -msgid "Some files are missing. Reinstall MTA:SA if you experience problems.\n" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1285 +#: Client/core/ServerBrowser/CServerBrowser.cpp:1413 +msgid "No address specified!" 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:1298 +msgid "Unknown protocol" msgstr "" -#: Client/loader/MainFunctions.cpp:1123 -msgid "Fix configuration issue" +#: Client/core/ServerBrowser/CServerBrowser.cpp:1298 +msgid "Please use the mtasa:// protocol!" 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:1387 +msgid "You have to select a server to connect to." 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/CServerList.cpp:25 +msgid "Idle" msgstr "" -#: Client/loader/MainFunctions.cpp:1219 -msgid "" -"GTA: San Andreas may not have launched correctly. Do you want to terminate " -"it?" +#: 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/loader/CInstallManager.cpp:376 +#: 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 "" -"MTA:SA could not complete the following task:\n" -"\n" -" '%s'\n" +msgid "Requesting master server list (%lu ms elapsed)" msgstr "" -#: Client/loader/CInstallManager.cpp:426 -msgid "" -"** The crash was caused by a graphics driver error **\n" -"\n" -"** Please update your graphics drivers **" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:254 +msgid "Master server list could not be parsed." msgstr "" -#: Client/loader/CInstallManager.cpp:532 -msgid "Install updated MTA:SA files" +#. Abort +#: Client/core/ServerBrowser/CServerList.cpp:264 +msgid "Master server list could not be retrieved." msgstr "" -#: Client/loader/CInstallManager.cpp:552 -msgid "" -"Could not update due to file conflicts. Please close other applications and " -"retry" +#: Client/core/ServerBrowser/CServerList.cpp:274 +msgid "(Backup server list)" msgstr "" -#: Client/loader/CInstallManager.cpp:561 -#, c-format -msgid "Multi Theft Auto has not been installed properly, please reinstall. %s" +#: Client/core/ServerBrowser/CServerList.cpp:326 +msgid "Cannot bind LAN-broadcast socket" msgstr "" -#: Client/loader/CInstallManager.cpp:613 -msgid "Create GTA:SA junctions" +#: Client/core/ServerBrowser/CServerList.cpp:345 +msgid "Attempting to discover LAN servers" msgstr "" -#: Client/loader/CInstallManager.cpp:657 -msgid "MTA:SA cannot launch because copying a file failed:" +#. Create queue window +#: Client/core/ServerBrowser/CServerInfo.cpp:32 +#: Client/core/ServerBrowser/CServerInfo.cpp:302 +msgid "SERVER IS FULL" 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:" +#. 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/CInstallManager.cpp:672 -msgid "Copy MTA:SA files" +#. Server IP +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:64 +msgid "Server Address:" 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:" +#. Gamemode +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:75 +msgid "Gamemode:" msgstr "" -#: Client/loader/CInstallManager.cpp:780 -msgid "Patch GTA:SA dependency" +#. Map +#: Client/core/ServerBrowser/CServerInfo.cpp:44 +#: Client/core/ServerBrowser/CServerInfo.cpp:86 +msgid "Map:" msgstr "" -#: Client/loader/CInstallManager.cpp:828 -msgid "" -"MTA:SA cannot launch because the GTA:SA executable is incorrect or missing:" +#. Players +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:97 +msgid "Players:" 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." +#. Passworded +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:108 +msgid "Passworded:" msgstr "" -#: Client/loader/CInstallManager.cpp:838 -msgid "Generate GTA:SA" +#. Latency +#: Client/core/ServerBrowser/CServerInfo.cpp:45 +#: Client/core/ServerBrowser/CServerInfo.cpp:119 +msgid "Latency:" msgstr "" -#: Client/loader/CInstallManager.cpp:853 -msgid "MTA:SA cannot launch because the GTA:SA executable is not loadable:" +#. Close button +#: Client/core/ServerBrowser/CServerInfo.cpp:144 +msgid "Close" msgstr "" -#: Client/loader/CInstallManager.cpp:860 Client/loader/CInstallManager.cpp:883 -msgid "Patch GTA:SA" +#. Join Game button +#: Client/core/ServerBrowser/CServerInfo.cpp:152 +msgid "Join Game" msgstr "" -#: Client/loader/CInstallManager.cpp:876 -msgid "MTA:SA cannot launch because patching GTA:SA has failed:" +#. Please enter password label +#: Client/core/ServerBrowser/CServerInfo.cpp:166 +msgid "Please enter the password to the server:" msgstr "" -#: Client/loader/CInstallManager.cpp:1113 -msgid "Missing file:" +#: Client/core/ServerBrowser/CServerInfo.cpp:177 +msgid "Join the server as soon as a player slot is available." msgstr "" -#: Client/loader/CInstallManager.cpp:1117 -msgid "If MTA fails to load, please re-install GTA:SA" +#: Client/core/ServerBrowser/CServerInfo.cpp:310 +msgid "PLEASE ENTER SERVER PASSWORD" msgstr "" -#: Client/loader/CInstallManager.cpp:1152 -msgid "Update install settings" +#. The server has timed out +#: Client/core/ServerBrowser/CServerInfo.cpp:402 +msgid "Timed Out" msgstr "" -#: Client/loader/CInstallManager.cpp:1305 -msgid "Update compatibility settings" +#. Set every GUI elements text to blank +#: Client/core/ServerBrowser/CServerInfo.cpp:431 +msgid "Querying..." msgstr "" #. Populate the message and show the box From ca222607df8fc5e38763ed1ac277fb63e4413d9e Mon Sep 17 00:00:00 2001 From: Marek Kulik Date: Thu, 10 Oct 2024 23:45:57 +0200 Subject: [PATCH 20/26] Enforce player slot cap in server browser --- Client/core/CQueryReceiver.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Client/core/CQueryReceiver.cpp b/Client/core/CQueryReceiver.cpp index 059dd879e0..559691bcb3 100644 --- a/Client/core/CQueryReceiver.cpp +++ b/Client/core/CQueryReceiver.cpp @@ -213,7 +213,15 @@ SQueryInfo CQueryReceiver::GetServerResponse() return info; } } + InvalidateSocket(); + + if (info.players > info.playerSlot) + { + info.players = info.playerSlot; + info.isStatusVerified = false; + } + info.containingInfo = true; } From 55d39225254c0b9961c1423b0d5695beff20072b Mon Sep 17 00:00:00 2001 From: FileEX Date: Fri, 11 Oct 2024 05:59:06 +0200 Subject: [PATCH 21/26] Fix #523: Helicopter rotor unaffected by vehicle alpha (PR #3596) --- Client/multiplayer_sa/CMultiplayerSA.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Client/multiplayer_sa/CMultiplayerSA.cpp b/Client/multiplayer_sa/CMultiplayerSA.cpp index 28d5b1f551..1b21f79a23 100644 --- a/Client/multiplayer_sa/CMultiplayerSA.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA.cpp @@ -1569,6 +1569,10 @@ void CMultiplayerSA::InitHooks() // Fix invisible vehicle windows when lights are on (#2936) MemPut(0x6E1425, 1); + // Allow alpha change for helicopter rotor (#523) + MemSet((void*)0x6C444B, 0x90, 6); + MemSet((void*)0x6C4453, 0x90, 0x68); + InitHooks_CrashFixHacks(); // Init our 1.3 hooks. From d2f62b88f17a5fe0f1238f696ffbc953711d03ed Mon Sep 17 00:00:00 2001 From: Dutchman101 <12105539+Dutchman101@users.noreply.github.com> Date: Sun, 13 Oct 2024 10:38:50 +0000 Subject: [PATCH 22/26] Update CEF to 129.0.12+gf09539f+chromium-129.0.6668.101 --- utils/buildactions/install_cef.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/buildactions/install_cef.lua b/utils/buildactions/install_cef.lua index 8430fc68f8..65b686aa56 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 = "129.0.11+g57354b8+chromium-129.0.6668.90" -local CEF_HASH = "a3e3e7add2235d1865a8570522ff87dba392e7b2d15bca0983ed2ebe19ea048b" +local CEF_VERSION = "129.0.12+gf09539f+chromium-129.0.6668.101" +local CEF_HASH = "ec759dbfafafac2ae26f4960caad1c8464205a7787ec247e0fc21ab4620c8a5c" function make_cef_download_url() return CEF_URL_PREFIX..http.escapeUrlParam(CEF_VERSION)..CEF_URL_SUFFIX From f1991d0d0e0d47f5802e49db1bfe0aaf932fbb0b Mon Sep 17 00:00:00 2001 From: FileEX Date: Sun, 13 Oct 2024 12:40:43 +0200 Subject: [PATCH 23/26] Small improvements for #3592 (#3792) --- Client/game_sa/CVehicleSA.cpp | 5 +++-- Client/game_sa/CVehicleSA.h | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Client/game_sa/CVehicleSA.cpp b/Client/game_sa/CVehicleSA.cpp index 779661ed8a..b4e7a2c438 100644 --- a/Client/game_sa/CVehicleSA.cpp +++ b/Client/game_sa/CVehicleSA.cpp @@ -1592,9 +1592,10 @@ bool CVehicleSA::SpawnFlyingComponent(const eCarNodes& nodeIndex, const eCarComp if (removalTime <= -1 || !componentObject) return true; - std::uint32_t CTimer_ms = *reinterpret_cast(VAR_CTimer_snTimeInMilliseconds); - componentObject->uiObjectRemovalTime = CTimer_ms + static_cast(removalTime); + // Set double-sided + componentObject->bBackfaceCulled = true; + componentObject->uiObjectRemovalTime = pGame->GetSystemTime() + static_cast(removalTime); return true; } diff --git a/Client/game_sa/CVehicleSA.h b/Client/game_sa/CVehicleSA.h index 382a071ac1..9674a165cd 100644 --- a/Client/game_sa/CVehicleSA.h +++ b/Client/game_sa/CVehicleSA.h @@ -106,8 +106,6 @@ struct RwTexture; #define OFFSET_CBike_Nodes 0x5A0 #define OFFSET_CBoat_Nodes 0x5B0 -#define VAR_CTimer_snTimeInMilliseconds 0xB7CB84 - struct SRailNodeSA { short sX; // x coordinate times 8 From 3333a115f1a14f00378161681aeba609b4e993c0 Mon Sep 17 00:00:00 2001 From: FileEX Date: Sun, 13 Oct 2024 12:46:02 +0200 Subject: [PATCH 24/26] Fix missing states in getPedControlState (#3785) --- Client/mods/deathmatch/logic/CClientPad.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientPad.cpp b/Client/mods/deathmatch/logic/CClientPad.cpp index f8c802ccbb..2f68b90baf 100644 --- a/Client/mods/deathmatch/logic/CClientPad.cpp +++ b/Client/mods/deathmatch/logic/CClientPad.cpp @@ -336,11 +336,9 @@ bool CClientPad::GetControlState(const char* szName, CControllerState& State, bo return State.LeftShoulder2 == 255; break; // zoom out case 9: - return false; - break; // enter_exit + return State.ButtonTriangle == 255; // enter_exit case 10: - return false; - break; // change_cam + return State.Select == 255; // change_cam case 11: return State.ButtonSquare == 255; break; // jump @@ -432,8 +430,7 @@ bool CClientPad::GetControlState(const char* szName, CControllerState& State, bo return State.RightShoulder2 == 255; break; // look right case 33: - return false; - break; // look behind + return State.LeftShoulder2 == 255 && State.RightShoulder2 == 255; // look behind case 34: return false; break; // mouse look From 1fcd732ca9031060602c8e2425e40ce602d35253 Mon Sep 17 00:00:00 2001 From: FileEX Date: Sun, 13 Oct 2024 12:46:30 +0200 Subject: [PATCH 25/26] Fix #3026 Changing vehicle model can cause network trouble (#3784) --- Client/mods/deathmatch/logic/CClientPed.cpp | 4 ++++ Client/mods/deathmatch/logic/CClientVehicle.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Client/mods/deathmatch/logic/CClientPed.cpp b/Client/mods/deathmatch/logic/CClientPed.cpp index 5716bea120..28f4d4f94a 100644 --- a/Client/mods/deathmatch/logic/CClientPed.cpp +++ b/Client/mods/deathmatch/logic/CClientPed.cpp @@ -1394,6 +1394,10 @@ void CClientPed::WarpIntoVehicle(CClientVehicle* pVehicle, unsigned int uiSeat) } } + // Wrong seat or undefined passengers count? + if ((uiSeat > 0 && uiSeat > pVehicle->m_ucMaxPassengers) || (uiSeat > 0 && pVehicle->m_ucMaxPassengers == 255)) + return; + // Transfer WaitingForGroundToLoad state to vehicle if (m_bIsLocalPlayer) { diff --git a/Client/mods/deathmatch/logic/CClientVehicle.cpp b/Client/mods/deathmatch/logic/CClientVehicle.cpp index a45d850a30..537f9457dd 100644 --- a/Client/mods/deathmatch/logic/CClientVehicle.cpp +++ b/Client/mods/deathmatch/logic/CClientVehicle.cpp @@ -2656,7 +2656,12 @@ void CClientVehicle::Create() { if (m_pPassengers[i]) { - m_pPassengers[i]->WarpIntoVehicle(this, i + 1); + // Undefined passengers count? + if (m_ucMaxPassengers != 255) + m_pPassengers[i]->WarpIntoVehicle(this, i + 1); + else + m_pPassengers[i]->SetWarpInToVehicleRequired(false); + if (m_pPassengers[i]) m_pPassengers[i]->StreamIn(true); } From 7e6b4d02ec113b7ce3a6fd9937a6e8ad0a1ad9cb Mon Sep 17 00:00:00 2001 From: FileEX Date: Sun, 13 Oct 2024 12:50:20 +0200 Subject: [PATCH 26/26] Fix #3635 meta.xml file path patterns don't work on html files (#3780) Add patterns for html --- Server/mods/deathmatch/logic/CResource.cpp | 61 +++++++++++++--------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/Server/mods/deathmatch/logic/CResource.cpp b/Server/mods/deathmatch/logic/CResource.cpp index 3dcf147c39..1c2ebe3ea8 100644 --- a/Server/mods/deathmatch/logic/CResource.cpp +++ b/Server/mods/deathmatch/logic/CResource.cpp @@ -1465,44 +1465,55 @@ bool CResource::ReadIncludedHTML(CXMLNode* pRoot) if (!strFilename.empty()) { - std::string strFullFilename; ReplaceSlashes(strFilename); - if (IsFilenameUsed(strFilename, false)) + if (!IsValidFilePath(strFilename.c_str())) { - CLogger::LogPrintf("WARNING: Duplicate html file in resource '%s': '%s'\n", m_strResourceName.c_str(), strFilename.c_str()); + m_strFailureReason = SString("Couldn't find html %s for resource %s\n", strFilename.c_str(), m_strResourceName.c_str()); + CLogger::ErrorPrintf(m_strFailureReason); + return false; } - // Try to find the file - if (IsValidFilePath(strFilename.c_str()) && GetFilePath(strFilename.c_str(), strFullFilename)) + std::vector vecFiles = GetFilePaths(strFilename.c_str()); + if (vecFiles.empty()) { - // This one is supposed to be default, but there's already a default page - if (bFoundDefault && bIsDefault) + if (glob::has_magic(strFilename)) { - CLogger::LogPrintf("Only one html item can be default per resource, ignoring %s in %s\n", strFilename.c_str(), - m_strResourceName.c_str()); - bIsDefault = false; + m_ResourceFilesCountPerDir[strFilename] = vecFiles.size(); + continue; } - // If this is supposed to be default, we've now found our default page - if (bIsDefault) - bFoundDefault = true; - - // Create a new resource HTML file and add it to the list - auto pResourceFile = new CResourceHTMLItem(this, strFilename.c_str(), strFullFilename.c_str(), &Attributes, bIsDefault, bIsRaw, - bIsRestricted, m_bOOPEnabledInMetaXml); - m_ResourceFiles.push_back(pResourceFile); - - // This is the first HTML file? Remember it - if (!pFirstHTML) - pFirstHTML = pResourceFile; - } - else - { m_strFailureReason = SString("Couldn't find html %s for resource %s\n", strFilename.c_str(), m_strResourceName.c_str()); CLogger::ErrorPrintf(m_strFailureReason); return false; } + + for (const std::string& strFilePath : vecFiles) + { + std::string strFullFilename; + + if (GetFilePath(strFilePath.c_str(), strFullFilename)) + { + // This one is supposed to be default, but there's already a default page + if (bFoundDefault && bIsDefault) + { + CLogger::LogPrintf("Only one html item can be default per resource, ignoring %s in %s\n", strFilename.c_str(), m_strResourceName.c_str()); + bIsDefault = false; + } + + // If this is supposed to be default, we've now found our default page + if (bIsDefault) + bFoundDefault = true; + + // Create a new resource HTML file and add it to the list + auto pResourceFile = new CResourceHTMLItem(this, strFilename.c_str(), strFullFilename.c_str(), &Attributes, bIsDefault, bIsRaw, bIsRestricted, m_bOOPEnabledInMetaXml); + m_ResourceFiles.push_back(pResourceFile); + + // This is the first HTML file? Remember it + if (!pFirstHTML) + pFirstHTML = pResourceFile; + } + } } else {