DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ SelectRandomBunkers()

BunkerComponentsArray BunkerBroadcastHandler::SelectRandomBunkers ( BunkerComponentsArray bunkers,
int amount )
inlineprivate

См. определение в файле BunkerBroadcastHandler.c строка 628

629 {
631
632 // Build list of available elements
633 bunkers.ShuffleArray();
634 #ifdef ENABLE_LOGGING
635 Log("Random bunker selection:");
636 #endif
637 foreach (BunkerBroadcastComponentBase bunker : bunkers)
638 {
639 if (!bunker)
640 continue;
641 if (m_ActiveBunkersHistory.GetValues().Find(bunker.GetId()) == INDEX_NOT_FOUND)
642 available.Insert(bunker);
643 #ifdef ENABLE_LOGGING
644 else
645 Log(string.Format("Bunker was already used (%1)", bunker.GetId()), true);
646 #endif
647 }
648
649 int n = available.Count();
650 if (amount > n)
651 amount = n; // Or handle error/return empty
652
654 TIntArray used = new TIntArray();
655
656 while (selected.Count() < amount)
657 {
658 int randomIndex = Math.RandomInt(0, n);
659 // Ensure unique selection
660 bool alreadyUsed = false;
661 foreach (int u : used)
662 {
663 if (u == randomIndex)
664 {
665 alreadyUsed = true;
666 break;
667 }
668 }
669
670 if (!alreadyUsed)
671 {
672 selected.Insert(available[randomIndex]);
673 #ifdef ENABLE_LOGGING
674 Log(string.Format("Selecting bunker (%1)", available[randomIndex].GetId()), true);
675 #endif
676 used.Insert(randomIndex);
677 }
678 }
679
680 return selected;
681 }
void BunkerBroadcastComponentBase(notnull EntityAI parent)
Определения BunkerBroadcastComponent.c:171
array< ref BunkerBroadcastComponentBase > BunkerComponentsArray
Определения BunkerBroadcastHandler.c:91
int GetId()
Определения ConstructionPart.c:725
class LogTemplates Log(string message, LogTemplateID template_id=0)
Creates debug log (optional) from LogTemplate which are registred.
Определения LogTemplates.c:75
ref SimpleCircularBuffer< int > m_ActiveBunkersHistory
Определения BunkerBroadcastHandler.c:117
const int INDEX_NOT_FOUND
Определения gameplay.c:13
array< int > TIntArray
Определения EnScript.c:733

Перекрестные ссылки GetId(), INDEX_NOT_FOUND, Log(), m_ActiveBunkersHistory и Math::RandomInt().

Используется в Activate().