bool Tribe::CheckMembers(const csString &type, int number) { // Handle special case where name is 'number' if(type == "number") { // Check if total number is correct (we don't care if their idle or not if(number < 0 || (size_t)number <= members.GetSize()) { return true; } return false; } for(size_t i=0; i<members.GetSize(); i++) { NPC* member = members[i]; if(!member->GetCurrentBehavior()) { // Discard Members with no Behavior // This shouldn't happen but... ermm just in case continue; } if((member->GetTribeMemberType() != type) && (type != "any")) { // Just skip any members of wrong type. continue; } if(strcasecmp(member->GetCurrentBehavior()->GetName(), npcIdleBehavior.GetDataSafe()) == 0) { number--; } if(number <= 0) { return true; } } // We don't have enough members return false; }
csArray<NPC*> Tribe::SelectNPCs(const csString &type, const char* number) { int count = atoi(number); csArray<NPC*> npcs; bool selectAny = type.CompareNoCase("any"); // Loop all members. Check for type and if they are idle. for(size_t i=0; i<members.GetSize(); i++) { NPC* member = members[i]; if((member->GetTribeMemberType() != type) && !selectAny) { // Just skip any members of wrong type. continue; } Behavior* currentBehavior = member->GetCurrentBehavior(); if(!currentBehavior) { // Newly created NPC or some malfunction. // Just skip and try this npc next loop. continue; } if(strcasecmp(currentBehavior->GetName(),npcIdleBehavior.GetDataSafe())==0) { count--; npcs.Push(member); } // Check if we found the number requested if(count == 0) return npcs; } // Return what we found return npcs; }