Skip to content

Commit

Permalink
Fixed 'upgrade' command not updating <min_mta_version>
Browse files Browse the repository at this point in the history
  • Loading branch information
ccw808 committed Jul 7, 2019
1 parent e77c8cd commit a487b09
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 37 deletions.
34 changes: 19 additions & 15 deletions Server/mods/deathmatch/logic/CResource.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -141,19 +141,21 @@ bool CResource::Load()
m_pNodeSettings = pNodeSettings->CopyNode(nullptr); m_pNodeSettings = pNodeSettings->CopyNode(nullptr);


// Find the client and server version requirements // Find the client and server version requirements
m_strMinClientReqFromMetaXml = ""; m_strMinClientFromMetaXml = "";
m_strMinServerReqFromMetaXml = ""; m_strMinServerFromMetaXml = "";
CXMLNode* pNodeMinMtaVersion = pRoot->FindSubNode("min_mta_version", 0); CXMLNode* pNodeMinMtaVersion = pRoot->FindSubNode("min_mta_version", 0);


if (pNodeMinMtaVersion && MTASA_VERSION_TYPE == VERSION_TYPE_RELEASE) if (pNodeMinMtaVersion)
{ {
if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("server")) if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("server"))
m_strMinServerReqFromMetaXml = pAttr->GetValue(); m_strMinServerFromMetaXml = pAttr->GetValue();
if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("client")) if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("client"))
m_strMinClientReqFromMetaXml = pAttr->GetValue(); m_strMinClientFromMetaXml = pAttr->GetValue();
if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("both")) if (CXMLAttribute* pAttr = pNodeMinMtaVersion->GetAttributes().Find("both"))
m_strMinServerReqFromMetaXml = m_strMinClientReqFromMetaXml = pAttr->GetValue(); m_strMinServerFromMetaXml = m_strMinClientFromMetaXml = pAttr->GetValue();
} }
m_strMinServerRequirement = m_strMinServerFromMetaXml;
m_strMinClientRequirement = m_strMinClientFromMetaXml;


// Find the acl requets // Find the acl requets
CXMLNode* pNodeAclRequest = pRoot->FindSubNode("aclrequest", 0); CXMLNode* pNodeAclRequest = pRoot->FindSubNode("aclrequest", 0);
Expand Down Expand Up @@ -653,17 +655,18 @@ void CResource::LogUpgradeWarnings()
bool CResource::GetCompatibilityStatus(SString& strOutStatus) bool CResource::GetCompatibilityStatus(SString& strOutStatus)
{ {
// Check declared version strings are valid // Check declared version strings are valid
if (!IsValidVersionString(m_strMinServerReqFromMetaXml) || !IsValidVersionString(m_strMinClientReqFromMetaXml)) if (!IsValidVersionString(m_strMinServerRequirement) || !IsValidVersionString(m_strMinClientRequirement))
{ {
strOutStatus = "<min_mta_version> section in the meta.xml contains invalid version strings"; strOutStatus = "<min_mta_version> section in the meta.xml contains invalid version strings";
return false; return false;
} }


// Check this server can run this resource // Check this server can run this resource
#if MTASA_VERSION_BUILD != 0
CMtaVersion strServerVersion = CStaticFunctionDefinitions::GetVersionSortable(); CMtaVersion strServerVersion = CStaticFunctionDefinitions::GetVersionSortable();
if (m_strMinServerReqFromMetaXml > strServerVersion) if (m_strMinServerRequirement > strServerVersion)
{ {
strOutStatus = SString("this server version is too low (%s required)", *m_strMinServerReqFromMetaXml); strOutStatus = SString("this server version is too low (%s required)", *m_strMinServerRequirement);
return false; return false;
} }


Expand All @@ -673,15 +676,16 @@ bool CResource::GetCompatibilityStatus(SString& strOutStatus)
strOutStatus = "server has come back from the future"; strOutStatus = "server has come back from the future";
return false; return false;
} }
#endif


// Check if calculated version is higher than declared version // Check if calculated version is higher than declared version
if (m_strMinClientReqFromSource > m_strMinClientReqFromMetaXml) if (m_strMinClientReqFromSource > m_strMinClientFromMetaXml)
{ {
strOutStatus = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least "; strOutStatus = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least ";
strOutStatus += SString("client %s because of '%s')", *m_strMinClientReqFromSource, *m_strMinClientReason); strOutStatus += SString("client %s because of '%s')", *m_strMinClientReqFromSource, *m_strMinClientReason);
m_strMinClientReqFromMetaXml = m_strMinClientReqFromSource; // Apply higher version requirement m_strMinClientRequirement = m_strMinClientReqFromSource; // Apply higher version requirement
} }
else if (m_strMinServerReqFromSource > m_strMinServerReqFromMetaXml) else if (m_strMinServerReqFromSource > m_strMinServerFromMetaXml)
{ {
strOutStatus = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least "; strOutStatus = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least ";
strOutStatus += SString("server %s because of '%s')", *m_strMinServerReqFromSource, *m_strMinServerReason); strOutStatus += SString("server %s because of '%s')", *m_strMinServerReqFromSource, *m_strMinServerReason);
Expand All @@ -691,12 +695,12 @@ bool CResource::GetCompatibilityStatus(SString& strOutStatus)
{ {
uint uiNumIncompatiblePlayers = 0; uint uiNumIncompatiblePlayers = 0;
for (std::list<CPlayer*>::const_iterator iter = g_pGame->GetPlayerManager()->IterBegin(); iter != g_pGame->GetPlayerManager()->IterEnd(); iter++) for (std::list<CPlayer*>::const_iterator iter = g_pGame->GetPlayerManager()->IterBegin(); iter != g_pGame->GetPlayerManager()->IterEnd(); iter++)
if ((*iter)->IsJoined() && m_strMinClientReqFromMetaXml > (*iter)->GetPlayerVersion() && !(*iter)->ShouldIgnoreMinClientVersionChecks()) if ((*iter)->IsJoined() && m_strMinClientRequirement > (*iter)->GetPlayerVersion() && !(*iter)->ShouldIgnoreMinClientVersionChecks())
uiNumIncompatiblePlayers++; uiNumIncompatiblePlayers++;


if (uiNumIncompatiblePlayers > 0) if (uiNumIncompatiblePlayers > 0)
{ {
strOutStatus = SString("%d connected player(s) below required client version %s", uiNumIncompatiblePlayers, *m_strMinClientReqFromMetaXml); strOutStatus = SString("%d connected player(s) below required client version %s", uiNumIncompatiblePlayers, *m_strMinClientRequirement);
return false; return false;
} }
} }
Expand Down Expand Up @@ -940,7 +944,7 @@ bool CResource::Start(std::list<CResource*>* pDependents, bool bManualStart, con
m_bClientScripts = StartOptions.bClientScripts; m_bClientScripts = StartOptions.bClientScripts;
m_bClientFiles = StartOptions.bClientFiles; m_bClientFiles = StartOptions.bClientFiles;


m_pResourceManager->ApplyMinClientRequirement(this, m_strMinClientReqFromMetaXml); m_pResourceManager->ApplyMinClientRequirement(this, m_strMinClientRequirement);


// Broadcast new resourceelement that is loaded and tell the players that a new resource was started // Broadcast new resourceelement that is loaded and tell the players that a new resource was started
g_pGame->GetMapManager()->BroadcastResourceElements(m_pResourceElement, m_pDefaultElementGroup); g_pGame->GetMapManager()->BroadcastResourceElements(m_pResourceElement, m_pDefaultElementGroup);
Expand Down
16 changes: 10 additions & 6 deletions Server/mods/deathmatch/logic/CResource.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -310,8 +310,10 @@ class CResource : public EHS
bool HandleAclRequestChangeCommand(const SString& strRightName, bool bAccess, const SString& strWho); bool HandleAclRequestChangeCommand(const SString& strRightName, bool bAccess, const SString& strWho);
bool HandleAclRequestChange(const CAclRightName& strRightName, bool bAccess, const SString& strWho); bool HandleAclRequestChange(const CAclRightName& strRightName, bool bAccess, const SString& strWho);


const CMtaVersion& GetMinServerReqFromMetaXml() const noexcept { return m_strMinServerReqFromMetaXml; } const CMtaVersion& GetMinServerRequirement() const noexcept { return m_strMinServerRequirement; }
const CMtaVersion& GetMinClientReqFromMetaXml() const noexcept { return m_strMinClientReqFromMetaXml; } const CMtaVersion& GetMinClientRequirement() const noexcept { return m_strMinClientRequirement; }
const CMtaVersion& GetMinServerFromMetaXml() const noexcept { return m_strMinServerFromMetaXml; }
const CMtaVersion& GetMinClientFromMetaXml() const noexcept { return m_strMinClientFromMetaXml; }


bool IsOOPEnabledInMetaXml() const noexcept { return m_bOOPEnabledInMetaXml; } bool IsOOPEnabledInMetaXml() const noexcept { return m_bOOPEnabledInMetaXml; }


Expand Down Expand Up @@ -426,10 +428,12 @@ class CResource : public EHS
CXMLNode* m_pNodeSettings = nullptr; // Settings XML node, read from meta.xml and copied into it's own instance CXMLNode* m_pNodeSettings = nullptr; // Settings XML node, read from meta.xml and copied into it's own instance
CXMLNode* m_pNodeStorage = nullptr; // Dummy XML node used for temporary storage of stuff returned by CSettings::Get CXMLNode* m_pNodeStorage = nullptr; // Dummy XML node used for temporary storage of stuff returned by CSettings::Get


CMtaVersion m_strMinClientReqFromMetaXml; // Min MTA client version as declared in meta.xml CMtaVersion m_strMinClientRequirement; // Min MTA client version
CMtaVersion m_strMinServerReqFromMetaXml; // Min MTA server version as declared in meta.xml CMtaVersion m_strMinServerRequirement; // Min MTA server version
CMtaVersion m_strMinClientReqFromSource; // Min MTA client version as calculated by scanning the script source CMtaVersion m_strMinClientFromMetaXml; // Min MTA client version as declared in meta.xml
CMtaVersion m_strMinServerReqFromSource; // Min MTA server version as calculated by scanning the script source CMtaVersion m_strMinServerFromMetaXml; // Min MTA server version as declared in meta.xml
CMtaVersion m_strMinClientReqFromSource; // Min MTA client version as calculated by scanning the script source
CMtaVersion m_strMinServerReqFromSource; // Min MTA server version as calculated by scanning the script source
SString m_strMinClientReason; SString m_strMinClientReason;
SString m_strMinServerReason; SString m_strMinServerReason;


Expand Down
19 changes: 8 additions & 11 deletions Server/mods/deathmatch/logic/CResourceChecker.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ extern CNetServer* g_pRealNetServer;
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
void CResourceChecker::CheckResourceForIssues(CResource* pResource, const string& strResourceZip) void CResourceChecker::CheckResourceForIssues(CResource* pResource, const string& strResourceZip)
{ {
m_strMinClientReqFromMetaXml = pResource->GetMinClientReqFromMetaXml(); m_strMinClientFromMetaXml = pResource->GetMinClientFromMetaXml();
m_strMinServerReqFromMetaXml = pResource->GetMinServerReqFromMetaXml(); m_strMinServerFromMetaXml = pResource->GetMinServerFromMetaXml();
m_strReqClientVersion = ""; m_strReqClientVersion = "";
m_strReqServerVersion = ""; m_strReqServerVersion = "";
m_strReqClientReason = ""; m_strReqClientReason = "";
Expand Down Expand Up @@ -321,15 +321,15 @@ void CResourceChecker::CheckMetaSourceForIssues(CXMLNode* pRootNode, const strin
bool* pbOutHasChanged) bool* pbOutHasChanged)
{ {
// Check min_mta_version is correct // Check min_mta_version is correct
if (m_strReqClientVersion > m_strMinClientReqFromMetaXml || m_strReqServerVersion > m_strMinServerReqFromMetaXml) if (m_strReqClientVersion > m_strMinClientFromMetaXml || m_strReqServerVersion > m_strMinServerFromMetaXml)
{ {
// It's not right. What to do? // It's not right. What to do?
if (checkerMode == ECheckerMode::WARNINGS) if (checkerMode == ECheckerMode::WARNINGS)
{ {
SString strTemp = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least "; SString strTemp = "<min_mta_version> section in the meta.xml is incorrect or missing (expected at least ";
if (m_strReqClientVersion > m_strMinClientReqFromMetaXml) if (m_strReqClientVersion > m_strMinClientFromMetaXml)
strTemp += SString("client %s because of '%s')", *m_strReqClientVersion, *m_strReqClientReason); strTemp += SString("client %s because of '%s')", *m_strReqClientVersion, *m_strReqClientReason);
else if (m_strReqServerVersion > m_strMinServerReqFromMetaXml) else if (m_strReqServerVersion > m_strMinServerFromMetaXml)
strTemp += SString("server %s because of '%s')", *m_strReqServerVersion, *m_strReqServerReason); strTemp += SString("server %s because of '%s')", *m_strReqServerVersion, *m_strReqServerReason);


CLogger::LogPrint(SString("WARNING: %s %s\n", strResourceName.c_str(), *strTemp)); CLogger::LogPrint(SString("WARNING: %s %s\n", strResourceName.c_str(), *strTemp));
Expand All @@ -339,7 +339,7 @@ void CResourceChecker::CheckMetaSourceForIssues(CXMLNode* pRootNode, const strin
// Create min_mta_version node if required // Create min_mta_version node if required
CXMLNode* pNodeMinMtaVersion = pRootNode->FindSubNode("min_mta_version", 0); CXMLNode* pNodeMinMtaVersion = pRootNode->FindSubNode("min_mta_version", 0);
if (!pNodeMinMtaVersion) if (!pNodeMinMtaVersion)
pNodeMinMtaVersion = pRootNode->CreateSubNode("min_mta_version"); pNodeMinMtaVersion = pRootNode->CreateSubNode("min_mta_version", pRootNode->FindSubNode("info"));


CXMLAttributes& attributes = pNodeMinMtaVersion->GetAttributes(); CXMLAttributes& attributes = pNodeMinMtaVersion->GetAttributes();
attributes.Delete("server"); attributes.Delete("server");
Expand Down Expand Up @@ -747,8 +747,8 @@ ECheckerWhatType CResourceChecker::GetLuaFunctionNameUpgradeInfo(const string& s
if (!strOutVersion.empty()) if (!strOutVersion.empty())
{ {
// Function behaviour depends on min_mta_version setting // Function behaviour depends on min_mta_version setting
const CMtaVersion& strMinReqFromMetaXml = bClientScript ? m_strMinClientReqFromMetaXml : m_strMinServerReqFromMetaXml; const CMtaVersion& strMinFromMetaXml = bClientScript ? m_strMinClientFromMetaXml : m_strMinServerFromMetaXml;
if (strMinReqFromMetaXml < strOutVersion) if (strMinFromMetaXml < strOutVersion)
return ECheckerWhat::MODIFIED; return ECheckerWhat::MODIFIED;
return ECheckerWhat::NONE; return ECheckerWhat::NONE;
} }
Expand All @@ -765,9 +765,6 @@ ECheckerWhatType CResourceChecker::GetLuaFunctionNameUpgradeInfo(const string& s
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
void CResourceChecker::CheckVersionRequirements(const string& strIdentifierName, bool bClientScript) void CResourceChecker::CheckVersionRequirements(const string& strIdentifierName, bool bClientScript)
{ {
// if ( MTASA_VERSION_TYPE < VERSION_TYPE_RELEASE )
// return;

static CHashMap<SString, CMtaVersion> clientFunctionMap; static CHashMap<SString, CMtaVersion> clientFunctionMap;
static CHashMap<SString, CMtaVersion> serverFunctionMap; static CHashMap<SString, CMtaVersion> serverFunctionMap;


Expand Down
4 changes: 2 additions & 2 deletions Server/mods/deathmatch/logic/CResourceChecker.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ class CResourceChecker
bool m_bUpgradeScripts; bool m_bUpgradeScripts;
unsigned long m_ulDeprecatedWarningCount; unsigned long m_ulDeprecatedWarningCount;
vector<string> m_upgradedFullPathList; vector<string> m_upgradedFullPathList;
CMtaVersion m_strMinClientReqFromMetaXml; CMtaVersion m_strMinClientFromMetaXml;
CMtaVersion m_strMinServerReqFromMetaXml; CMtaVersion m_strMinServerFromMetaXml;
CMtaVersion m_strReqClientVersion; CMtaVersion m_strReqClientVersion;
CMtaVersion m_strReqServerVersion; CMtaVersion m_strReqServerVersion;
SString m_strReqClientReason; SString m_strReqClientReason;
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ void MinServerReqCheck(CScriptArgReader& argStream, const char* szVersionReq, co
CResource* pResource = pLuaMain->GetResource(); CResource* pResource = pLuaMain->GetResource();
if (pResource) if (pResource)
{ {
if (pResource->GetMinServerReqFromMetaXml() < szVersionReq) if (pResource->GetMinServerRequirement() < szVersionReq)
{ {
#if MTASA_VERSION_TYPE == VERSION_TYPE_RELEASE #if MTASA_VERSION_TYPE == VERSION_TYPE_RELEASE
argStream.SetVersionWarning(szVersionReq, "server", szReason); argStream.SetVersionWarning(szVersionReq, "server", szReason);
Expand Down
4 changes: 2 additions & 2 deletions Server/mods/deathmatch/logic/packets/CResourceStartPacket.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ bool CResourceStartPacket::Write(NetBitStreamInterface& BitStream) const
// Write the declared min client version for this resource // Write the declared min client version for this resource
if (BitStream.Version() >= 0x32) if (BitStream.Version() >= 0x32)
{ {
BitStream.WriteString(m_pResource->GetMinServerReqFromMetaXml()); BitStream.WriteString(m_pResource->GetMinServerRequirement());
BitStream.WriteString(m_pResource->GetMinClientReqFromMetaXml()); BitStream.WriteString(m_pResource->GetMinClientRequirement());
} }
if (BitStream.Version() >= 0x45) if (BitStream.Version() >= 0x45)
{ {
Expand Down

0 comments on commit a487b09

Please sign in to comment.