@@ -190,12 +190,14 @@ void CC_PutActionEx_ForGroupConditionBegin(DWORD This, DWORD OutClass, char* nam
190
190
switch (*(uint32_t *)(This+0x138 ))
191
191
{
192
192
case CC_GUIID_GetUnitsInRangeOfLocMatching:
193
+ CC_PutSearchCondition (GetGUIVar_Class (This, 2 ), OutClass, name);
193
194
PUT_CONST (" if (" , 0 );
194
195
CC_PutVar_Code (This, OutClass, name, 2 , CC_GUI_TYPE_CONDITION);
195
196
PUT_CONST (" ) then" , 1 );
196
197
return ;
197
198
case CC_GUIID_GetUnitsInRectMatching:
198
199
case CC_GUIID_GetUnitsOfPlayerMatching:
200
+ CC_PutSearchCondition (GetGUIVar_Class (This, 1 ), OutClass, name);
199
201
PUT_CONST (" if (" , 0 );
200
202
CC_PutVar_Code (This, OutClass, name, 1 , CC_GUI_TYPE_CONDITION);
201
203
PUT_CONST (" ) then" , 1 );
@@ -303,17 +305,21 @@ void CC_PutActionEx_ForGroupMatching(DWORD This, DWORD OutClass, char* name)
303
305
PUT_CONST (" set ydl_unit = FirstOfGroup(ydl_tmp_group)" , 1 );
304
306
PUT_CONST (" exitwhen ydl_unit == null" , 1 );
305
307
PUT_CONST (" call GroupRemoveUnit(ydl_tmp_group, ydl_unit)" , 1 );
306
- PUT_CONST (" if (" , 0 );
307
308
if (ui_type == CC_GUIID_GetUnitsInRangeOfLocMatching)
308
309
{
310
+ CC_PutSearchCondition (GetGUIVar_Class (This, 2 ), OutClass, name);
311
+ PUT_CONST (" if (" , 0 );
309
312
CC_PutVar_Code (This, OutClass, name, 2 , CC_GUI_TYPE_CONDITION);
313
+ PUT_CONST (" ) then" , 1 );
310
314
}
311
315
else
312
316
{
317
+ CC_PutSearchCondition (GetGUIVar_Class (This, 1 ), OutClass, name);
318
+ PUT_CONST (" if (" , 0 );
313
319
CC_PutVar_Code (This, OutClass, name, 1 , CC_GUI_TYPE_CONDITION);
320
+ PUT_CONST (" ) then" , 1 );
314
321
}
315
322
316
- PUT_CONST (" ) then" , 1 );
317
323
CC_PutBegin ();
318
324
PUT_CONST (" call GroupAddUnit(ydl_group, ydl_unit)" , 1 );
319
325
CC_PutEnd ();
@@ -344,6 +350,7 @@ void CC_PutActionEx_ForForce(DWORD This, DWORD OutClass, char* name)
344
350
PUT_CONST (" loop" , 1 );
345
351
CC_PutBegin ();
346
352
PUT_CONST (" exitwhen ydl_index >= 16" , 1 );
353
+ CC_PutSearchCondition (GetGUIVar_Class (This, 0 ), OutClass, name);
347
354
PUT_CONST (" if (GetPlayerSlotState(Player(ydl_index)) != PLAYER_SLOT_STATE_EMPTY) and (" , 0 );
348
355
CC_PutVar_Code (GetGUIVar_Class (This, 0 ), OutClass, name, 0 , CC_GUI_TYPE_CONDITION);
349
356
PUT_CONST (" ) then" , 1 );
@@ -413,6 +420,7 @@ void CC_PutActionEx_ForForceMatching(DWORD This, DWORD OutClass, char* name)
413
420
PUT_CONST (" loop" , 1 );
414
421
CC_PutBegin ();
415
422
PUT_CONST (" exitwhen ydl_index >= 16" , 1 );
423
+ CC_PutSearchCondition (GetGUIVar_Class (This, 0 ), OutClass, name);
416
424
PUT_CONST (" if (GetPlayerSlotState(Player(ydl_index)) != PLAYER_SLOT_STATE_EMPTY) and (" , 0 );
417
425
CC_PutVar_Code (This, OutClass, name, 0 , CC_GUI_TYPE_CONDITION);
418
426
PUT_CONST (" ) then" , 1 );
@@ -429,6 +437,62 @@ void CC_PutActionEx_ForForceMatching(DWORD This, DWORD OutClass, char* name)
429
437
}
430
438
}
431
439
440
+ void CC_PutSearchCondition (DWORD This, DWORD OutClass, char * name)
441
+ {
442
+ cc_search_var (This, [&](uint32_t var_ptr)
443
+ {
444
+ switch (*(uint32_t *)(var_ptr+0x138 ))
445
+ {
446
+ case CC_GUIID_GetUnitsInRectMatching:
447
+ case CC_GUIID_GetUnitsInRangeOfLocMatching:
448
+ case CC_GUIID_GetUnitsOfPlayerMatching:
449
+ {
450
+ CC_PutActionEx_ForGroupMatching (var_ptr, OutClass, name);
451
+ }
452
+ break ;
453
+ case CC_GUIID_GetPlayersMatching:
454
+ {
455
+ CC_PutActionEx_ForForceMatching (var_ptr, OutClass, name);
456
+ }
457
+ break ;
458
+ }
459
+ });
460
+ }
461
+
462
+ void CC_PutSearchCondition2 (DWORD This, DWORD OutClass, char * name)
463
+ {
464
+ DWORD nItemCount = *(DWORD*)(This+0xC );
465
+ for (DWORD i = 0 ; i < nItemCount; i++)
466
+ {
467
+ DWORD nItemClass = ((DWORD*)(*(DWORD*)(This+0x10 )))[i];
468
+ if (Proc_GetGUIType (nItemClass) == CC_GUI_TYPE_CONDITION)
469
+ {
470
+ if (*(DWORD*)(nItemClass+0x13C ) != 0 )
471
+ {
472
+ CC_PutSearchCondition (nItemClass, OutClass, name);
473
+ }
474
+ }
475
+ }
476
+ }
477
+
478
+ void CC_PutSearchCondition3 (DWORD This, DWORD OutClass, char * name, DWORD index)
479
+ {
480
+ DWORD nItemCount = *(DWORD*)(This+0xC );
481
+
482
+ for (DWORD i = 0 ; i < nItemCount; i++)
483
+ {
484
+ DWORD nItemClass = ((DWORD*)(*(DWORD*)(This+0x10 )))[i];
485
+ if (*(DWORD*)(nItemClass+0x13C ) != 0 )
486
+ {
487
+ if ((index ) == -1 || (*(DWORD*)(nItemClass+0x154 ) == index ))
488
+ {
489
+ CC_PutSearchCondition (nItemClass, OutClass, name);
490
+ }
491
+ }
492
+ }
493
+ }
494
+
495
+
432
496
void _fastcall
433
497
CC_PutActionEx_Hook (DWORD This, DWORD EDX, DWORD OutClass, char * name, DWORD Type, DWORD Endl)
434
498
{
@@ -448,30 +512,14 @@ void _fastcall
448
512
}
449
513
else
450
514
{
451
- cc_search_var (This, [&](uint32_t var_ptr)
452
- {
453
- switch (*(uint32_t *)(var_ptr+0x138 ))
454
- {
455
- case CC_GUIID_GetUnitsInRectMatching:
456
- case CC_GUIID_GetUnitsInRangeOfLocMatching:
457
- case CC_GUIID_GetUnitsOfPlayerMatching:
458
- {
459
- CC_PutActionEx_ForGroupMatching (var_ptr, OutClass, name);
460
- }
461
- break ;
462
- case CC_GUIID_GetPlayersMatching:
463
- {
464
- CC_PutActionEx_ForForceMatching (var_ptr, OutClass, name);
465
- }
466
- break ;
467
- }
468
- });
515
+ CC_PutSearchCondition (This, OutClass, name);
469
516
}
470
517
471
518
switch (*(DWORD*)(This+0x138 ))
472
519
{
473
520
case CC_GUIID_IfThenElse:
474
521
{
522
+ CC_PutSearchCondition (GetGUIVar_Class (This, 0 ), OutClass, name);
475
523
CC_PutBegin ();
476
524
PUT_CONST (" if (" , 0 );
477
525
CC_PutVar_Code (This, OutClass, name, 0 , CC_GUI_TYPE_CONDITION);
@@ -486,6 +534,7 @@ void _fastcall
486
534
}
487
535
case CC_GUIID_IfThenElseMultiple:
488
536
{
537
+ CC_PutSearchCondition3 (This, OutClass, name, 0 );
489
538
CC_PutBegin ();
490
539
PUT_CONST (" if (" , 0 );
491
540
CC_PutBlock_Condition_And (This, OutClass, name, 0 );
@@ -543,17 +592,21 @@ void _fastcall
543
592
PUT_CONST (" set ydl_unit = FirstOfGroup(ydl_tmp_group)" , 1 );
544
593
PUT_CONST (" exitwhen ydl_unit == null" , 1 );
545
594
PUT_CONST (" call GroupRemoveUnit(ydl_tmp_group, ydl_unit)" , 1 );
546
- PUT_CONST (" if (" , 0 );
547
595
if (ui_type == CC_GUIID_GroupEnumUnitsInRangeOfLoc
548
596
|| ui_type == CC_GUIID_GroupEnumUnitsInRangeOfLocCounted)
549
597
{
598
+ CC_PutSearchCondition (GetGUIVar_Class (This, 3 ), OutClass, name);
599
+ PUT_CONST (" if (" , 0 );
550
600
CC_PutVar_Code (This, OutClass, name, 3 , CC_GUI_TYPE_CONDITION);
601
+ PUT_CONST (" ) then" , 1 );
551
602
}
552
603
else
553
604
{
605
+ CC_PutSearchCondition (GetGUIVar_Class (This, 4 ), OutClass, name);
606
+ PUT_CONST (" if (" , 0 );
554
607
CC_PutVar_Code (This, OutClass, name, 4 , CC_GUI_TYPE_CONDITION);
608
+ PUT_CONST (" ) then" , 1 );
555
609
}
556
- PUT_CONST (" ) then" , 1 );
557
610
CC_PutBegin ();
558
611
PUT_CONST (" call GroupAddUnit(ydl_group, ydl_unit)" , 1 );
559
612
CC_PutEnd ();
0 commit comments