Add possibility to match against helmet attachments (#77)

This commit is contained in:
Asdow
2023-01-15 23:02:28 +02:00
committed by GitHub
parent bcdd44726b
commit a32e276e4d
3 changed files with 38 additions and 3 deletions
+27
View File
@@ -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;
+5 -1
View File
@@ -64,6 +64,10 @@ public:
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 @@ public:
};
typedef std::pair <INT32, INT32> NumberPair;
typedef std::list <std::wstring> StringList;
typedef std::list <INT32> NumberList;
typedef std::vector <INT32> NumberList;
union criterionVariant {
INT32 number;
std::wstring* string;
+6 -2
View File
@@ -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
);
/*****************************************