diff --git a/Tactical/CMakeLists.txt b/Tactical/CMakeLists.txt index ebecb65d..86810e0d 100644 --- a/Tactical/CMakeLists.txt +++ b/Tactical/CMakeLists.txt @@ -93,6 +93,7 @@ set(TacticalSrc "${CMAKE_CURRENT_SOURCE_DIR}/VehicleMenu.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Weapons.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/World Items.cpp" +"${CMAKE_CURRENT_SOURCE_DIR}/XML.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/XML_AmmoStrings.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/XML_AmmoTypes.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/XML_Armour.cpp" diff --git a/Tactical/XML.cpp b/Tactical/XML.cpp new file mode 100644 index 00000000..4cb460be --- /dev/null +++ b/Tactical/XML.cpp @@ -0,0 +1,9 @@ +#include "XML.h" + +const XML_Char* GetAttribute(const XML_Char* name, const XML_Char** atts) { + for (const XML_Char** pIter = atts; *pIter != NULL; pIter++) { + const XML_Char* key = *pIter++; + if (strcmp(key, name) == 0) return *pIter; + } + return NULL; +} diff --git a/Tactical/XML.h b/Tactical/XML.h index efa28c25..963417ef 100644 --- a/Tactical/XML.h +++ b/Tactical/XML.h @@ -1,6 +1,7 @@ #ifndef __XML_H #define __XML_H +#include "expat.h" #include "armsdealerinvinit.h" #include "EnemyItemDrops.h" #include "Loading Screen.h" @@ -581,4 +582,6 @@ extern BOOLEAN ReadInAimOldArchive(STR fileName, BOOLEAN localizedVersion); extern BOOLEAN ReadInHistorys(STR fileName, BOOLEAN localizedVersion ); extern BOOLEAN ReadInDifficultySettings(STR fileName, BOOLEAN localizedVersion); +extern const XML_Char* GetAttribute(const XML_Char* name, const XML_Char** atts); + #endif diff --git a/Tactical/XML_Opinions.cpp b/Tactical/XML_Opinions.cpp index 5c808441..a82c5fda 100644 --- a/Tactical/XML_Opinions.cpp +++ b/Tactical/XML_Opinions.cpp @@ -70,21 +70,21 @@ opinionStartElementHandle(void *userData, const XML_Char *name, const XML_Char * pData->maxReadDepth++; //we are not skipping this element } - else if(pData->curElement == ELEMENT) + else if (pData->curElement == ELEMENT && strcmp(name, "AnOpinion") == 0) { - for(UINT8 i = 0; i < NUMBER_OF_OPINIONS; ++i) + pData->curElement = ELEMENT; + pData->maxReadDepth++; //we are not skipping this element + + XML_Char const* anID = GetAttribute("id", atts); + XML_Char const* modifier = GetAttribute("modifier", atts); + + INT32 id, value; + id = atoi(anID); + value = atoi(modifier); + + if (id >= 0 && id < NUMBER_OF_OPINIONS) { - XML_Char bla[12]; - sprintf(bla, "Opinion%d", i); - - if(strcmp(name, bla) == 0) - { - pData->curElement = ELEMENT_PROPERTY; - - pData->maxReadDepth++; //we are not skipping this element - - break; - } + pData->curProfile.bMercOpinion[id] = value; } } @@ -92,9 +92,9 @@ opinionStartElementHandle(void *userData, const XML_Char *name, const XML_Char * } pData->currentDepth++; - } + static void XMLCALL opinionCharacterDataHandle(void *userData, const XML_Char *str, int len) { @@ -149,24 +149,6 @@ opinionEndElementHandle(void *userData, const XML_Char *name) pData->curIndex = (UINT32) strtoul(pData->szCharData, NULL, 0); } - else - { - for(UINT8 i = 0; i < NUMBER_OF_OPINIONS; ++i) - { - XML_Char bla[12]; - sprintf(bla, "Opinion%d", i); - - if(strcmp(name, bla) == 0) - { - pData->curElement = ELEMENT; - - pData->curProfile.bMercOpinion[i] = (INT8) atol(pData->szCharData); - - break; - } - } - } - pData->maxReadDepth--; } @@ -315,7 +297,10 @@ BOOLEAN WriteMercOpinions() UINT8 cnt_b = 0; for (cnt_b = 0; cnt_b < NUMBER_OF_OPINIONS; ++cnt_b) { - FilePrintf(hFile,"\t\t%d\r\n", cnt_b, gMercProfiles[ cnt ].bMercOpinion[cnt_b], cnt_b); + if (gMercProfiles[cnt].bMercOpinion[cnt_b] != 0) + { + FilePrintf(hFile, "\t\t\r\n", cnt_b, gMercProfiles[cnt].bMercOpinion[cnt_b]); + } }