diff --git a/Tactical/LogicalBodyTypes/Filter.cpp b/Tactical/LogicalBodyTypes/Filter.cpp index 1c303a03c..519289c56 100644 --- a/Tactical/LogicalBodyTypes/Filter.cpp +++ b/Tactical/LogicalBodyTypes/Filter.cpp @@ -2,6 +2,21 @@ namespace LogicalBodyTypes { +INT32 CompareAttachment(SOLDIERTYPE* pSoldier, INVENTORY_SLOT slot, UINT8 index) +{ + INT32 cmp_val = 0; + + if (pSoldier->inv[slot].objectStack.size() > 0) + { + OBJECTTYPE* const attachment = pSoldier->inv[slot].objectStack.front().GetAttachmentAtIndex(index); + if (attachment) { cmp_val = attachment->usItem; } + else { cmp_val = 0; } + } + else { cmp_val = 0; } + + return cmp_val; +} + Filter::Filter(void) { } @@ -210,6 +225,18 @@ bool Filter::Match(SOLDIERTYPE* pSoldier) { case REQ_WEARING_BACKPACK: cmp_val = pSoldier->inv[BPACKPOCKPOS].exists(); break; + case REQ_HELMETPOSATTACHMENT0: + cmp_val = CompareAttachment(pSoldier, HELMETPOS, 0); + break; + case REQ_HELMETPOSATTACHMENT1: + cmp_val = CompareAttachment(pSoldier, HELMETPOS, 1); + break; + case REQ_HELMETPOSATTACHMENT2: + cmp_val = CompareAttachment(pSoldier, HELMETPOS, 2); + break; + case REQ_HELMETPOSATTACHMENT3: + cmp_val = CompareAttachment(pSoldier, HELMETPOS, 3); + break; default: if (q < NUM_REQTYPESINV) { cmp_val = pSoldier->inv[q].usItem; diff --git a/Tactical/LogicalBodyTypes/Filter.h b/Tactical/LogicalBodyTypes/Filter.h index ac6870870..9649d7b71 100644 --- a/Tactical/LogicalBodyTypes/Filter.h +++ b/Tactical/LogicalBodyTypes/Filter.h @@ -64,6 +64,10 @@ class Filter { REQ_HELMET_AMOR_PROTECTION, REQ_HELMET_AMOR_COVERAGE, REQ_WEARING_BACKPACK, + REQ_HELMETPOSATTACHMENT0, + REQ_HELMETPOSATTACHMENT1, + REQ_HELMETPOSATTACHMENT2, + REQ_HELMETPOSATTACHMENT3, NUM_REQTYPES, // 3rd byte is for operator flags _REQ_BTWN = 0x20000, @@ -86,7 +90,7 @@ class Filter { }; typedef std::pair NumberPair; typedef std::list StringList; - typedef std::list NumberList; + typedef std::vector NumberList; union criterionVariant { INT32 number; std::wstring* string; diff --git a/Tactical/LogicalBodyTypes/FilterDB.cpp b/Tactical/LogicalBodyTypes/FilterDB.cpp index 4cb3030e5..3c5a3d4b8 100644 --- a/Tactical/LogicalBodyTypes/FilterDB.cpp +++ b/Tactical/LogicalBodyTypes/FilterDB.cpp @@ -270,7 +270,7 @@ namespace LogicalBodyTypes { /***************************************** Filter enum criterion types ******************************************/ - LOGBT_ENUMDB_ADD("IntegerFilterCriterionTypes", 33, + LOGBT_ENUMDB_ADD("IntegerFilterCriterionTypes", 37, Filter::REQ_HELMETPOS, Filter::REQ_VESTPOS, Filter::REQ_LEGPOS, @@ -303,7 +303,11 @@ namespace LogicalBodyTypes { Filter::REQ_VEST_AMOR_COVERAGE, Filter::REQ_HELMET_AMOR_PROTECTION, Filter::REQ_HELMET_AMOR_COVERAGE, - Filter::REQ_WEARING_BACKPACK + Filter::REQ_WEARING_BACKPACK, + Filter::REQ_HELMETPOSATTACHMENT0, + Filter::REQ_HELMETPOSATTACHMENT1, + Filter::REQ_HELMETPOSATTACHMENT2, + Filter::REQ_HELMETPOSATTACHMENT3 ); /*****************************************