mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Add possibility to match against helmet attachments (#77)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
/*****************************************
|
||||
|
||||
Reference in New Issue
Block a user