From bade7420494f653e1df1fcfb597678129e8bd277 Mon Sep 17 00:00:00 2001 From: Zero Fanker Date: Sun, 7 Apr 2024 11:45:35 -0400 Subject: [PATCH] ++ --- MissionEditor/MapValidator.cpp | 171 +++++++++++++++------------------ MissionEditor/functions.cpp | 28 ++++-- MissionEditor/functions.h | 2 +- 3 files changed, 98 insertions(+), 103 deletions(-) diff --git a/MissionEditor/MapValidator.cpp b/MissionEditor/MapValidator.cpp index fbf4ec2..47ec824 100644 --- a/MissionEditor/MapValidator.cpp +++ b/MissionEditor/MapValidator.cpp @@ -132,36 +132,30 @@ BOOL CMapValidator::CheckMap() Map->UpdateIniFile(MAPDATA_UPDATE_TO_INI); CIniFile& ini=Map->GetIniFile(); - if(ini.sections.find("Map")==ini.sections.end() ) - { - bAllow=FALSE; + if (!ini.TryGetSection("Map")) { + bAllow = FALSE; AddItemWithNewLine(m_MapProblemList, GetLanguageStringACP("MV_NoMap"), 0); } - if(ini.sections.find("Basic")==ini.sections.end() || ini.sections["Basic"].values.size()==0) - { - bAllow=FALSE; + if (ini["Basic"].Size() == 0) { + bAllow = FALSE; AddItemWithNewLine(m_MapProblemList, GetLanguageStringACP("MV_NoBasic"), 0); - - } - else - { - if(ini.sections["Basic"].values["Name"].GetLength()==0) + } else { + if (ini.GetString("Basic","Name").IsEmpty()) { AddItemWithNewLine(m_MapProblemList, GetLanguageStringACP("MV_NoName"), 1); + } - if(ini.sections["Basic"].values.find("Player")==ini.sections["Basic"].values.end()) - { #ifdef TS_MODE + if (ini.GetString("Basic", "Player").IsEmpty()) { if(ini.sections.find(MAPHOUSES)!=ini.sections.end() && ini.sections["Houses"].values.size()>0) { AddItemWithNewLine(m_MapProblemList, GetLanguageStringACP("MV_HousesButNoPlayer"), 1); AddItemWithNewLine(m_MapProblemList, GetLanguageStringACP("MV_HousesInMultiplayer"), 1); } -#endif } - - if(ini.sections.find(MAPHOUSES)==ini.sections.end()) - { - int d=Map->GetWaypointCount(); +#endif + + if (!ini.TryGetSection(MAPHOUSES)) { + int d = Map->GetWaypointCount(); int below8found=0; int i; for(i=0;i0 && ini.sections["TaskForces"].FindValue(taskforce)<0) - { - CString error; - error=GetLanguageStringACP("MV_TaskForceMissing"); - error=TranslateStringVariables(1, error, taskforce); - error=TranslateStringVariables(2, error, *ini.sections["TeamTypes"].GetValue(i)); - AddItemWithNewLine(m_MapProblemList, error, 1); - } - } - for(i=0;i0 && ini.sections["ScriptTypes"].FindValue(scripttype)<0) - { - CString error; - error=GetLanguageStringACP("MV_ScripttypeMissing"); - error=TranslateStringVariables(1, error, scripttype); - error=TranslateStringVariables(2, error, *ini.sections["TeamTypes"].GetValue(i)); - AddItemWithNewLine(m_MapProblemList, error, 1); - } - } - for(i=0;i=0) - { - CString tag=sec.values["Tag"]; - if(ini.sections["Tags"].FindName(tag)<0) - { + if (auto pTriggerSec = ini.TryGetSection("Triggers")) { + for (auto& [id, def] : *pTriggerSec) { + auto defCopy = def; + if (RepairTrigger(defCopy)) { + pTriggerSec->SetString(id, defCopy); + } + // check linked trigger + auto const trigger = GetParam(defCopy, 1); + if (!pTriggerSec->Exists(trigger) && trigger != "") { CString error; - error=GetLanguageStringACP("MV_TagMissing"); - error=TranslateStringVariables(1, error, tag); - error=TranslateStringVariables(2, error, "Teamtype"); - error=TranslateStringVariables(3, error, *ini.sections["TeamTypes"].GetValue(i)); + error = GetLanguageStringACP("MV_TriggerMissing"); + error = TranslateStringVariables(1, error, trigger); + error = TranslateStringVariables(2, error, "Trigger"); + error = TranslateStringVariables(3, error, id); AddItemWithNewLine(m_MapProblemList, error, 1); } } } - for(i=0;iGetCelltagCount();i++) - { + + for (auto const& [seq, id] : ini["TeamTypes"]) { + auto const& sec = ini[id]; + // check taskforce + auto const taskforce = sec.GetString("TaskForce"); + if (!taskforce.IsEmpty() && !ini["TaskForces"].HasValue(taskforce)) { + CString error; + error = GetLanguageStringACP("MV_TaskForceMissing"); + error = TranslateStringVariables(1, error, taskforce); + error = TranslateStringVariables(2, error, id); + AddItemWithNewLine(m_MapProblemList, error, 1); + } + // check script + CString scripttype = sec.GetString("Script"); + if (!scripttype.IsEmpty() && !ini["ScriptTypes"].HasValue(scripttype)) { + CString error; + error = GetLanguageStringACP("MV_ScripttypeMissing"); + error = TranslateStringVariables(1, error, scripttype); + error = TranslateStringVariables(2, error, id); + AddItemWithNewLine(m_MapProblemList, error, 1); + } + // check tag + auto const& tag = sec.GetString("Tag"); + if (!tag.IsEmpty()) { + if (!ini["Tags"].Exists(tag)) { + CString error; + error = GetLanguageStringACP("MV_TagMissing"); + error = TranslateStringVariables(1, error, tag); + error = TranslateStringVariables(2, error, "Teamtype"); + error = TranslateStringVariables(3, error, id); + AddItemWithNewLine(m_MapProblemList, error, 1); + } + } + } + + for (auto i = 0; i < Map->GetCelltagCount(); i++) { CString tag; DWORD pos; Map->GetCelltagData(i, &tag, &pos); @@ -283,8 +265,7 @@ BOOL CMapValidator::CheckMap() CString p=cx; p+="/"; p+=cy; - if(ini.sections["Tags"].FindName(tag)<0) - { + if (!ini["Tags"].Exists(tag)) { CString error; error=GetLanguageStringACP("MV_TagMissing"); error=TranslateStringVariables(1, error, tag); diff --git a/MissionEditor/functions.cpp b/MissionEditor/functions.cpp index 370e46b..7a0fe25 100644 --- a/MissionEditor/functions.cpp +++ b/MissionEditor/functions.cpp @@ -182,15 +182,29 @@ void SetMainStatusBarReady() } // Should not be required anymore -void RepairTrigger(CString& triggerdata) +bool RepairTrigger(CString& triggerdata) { - if(GetParam(triggerdata, 3).GetLength()==0) triggerdata=SetParam(triggerdata, 3, "0"); - if(GetParam(triggerdata, 4).GetLength()==0) triggerdata=SetParam(triggerdata, 4, "1"); - if(GetParam(triggerdata, 5).GetLength()==0) triggerdata=SetParam(triggerdata, 5, "1"); - if(GetParam(triggerdata, 6).GetLength()==0) triggerdata=SetParam(triggerdata, 6, "1"); - if(GetParam(triggerdata, 7).GetLength()==0) { - triggerdata=SetParam(triggerdata, 7, "0"); + if (GetParam(triggerdata, 3).IsEmpty()) { + triggerdata = SetParam(triggerdata, 3, "0"); + return true; } + if (GetParam(triggerdata, 4).IsEmpty()) { + triggerdata = SetParam(triggerdata, 4, "1"); + return true; + } + if (GetParam(triggerdata, 5).IsEmpty()) { + triggerdata = SetParam(triggerdata, 5, "1"); + return true; + } + if (GetParam(triggerdata, 6).IsEmpty()) { + triggerdata = SetParam(triggerdata, 6, "1"); + return true; + } + if (GetParam(triggerdata, 7).IsEmpty()) { + triggerdata = SetParam(triggerdata, 7, "0"); + return true; + } + return false; } // make some UI noise diff --git a/MissionEditor/functions.h b/MissionEditor/functions.h index e61a3b0..669196a 100644 --- a/MissionEditor/functions.h +++ b/MissionEditor/functions.h @@ -42,7 +42,7 @@ CString TranslateHouse(CString original, BOOL bToUI=FALSE); void ShowOptionsDialog(); // repairs a trigger (sets flags correctly) -void RepairTrigger(CString& triggerdata); +bool RepairTrigger(CString& triggerdata); // coordinate functions void PosToXY(const char* pos, int* X, int* Y);