diff --git a/src/fight.c b/src/fight.c index d325011..cfa53e8 100644 --- a/src/fight.c +++ b/src/fight.c @@ -930,8 +930,11 @@ void perform_violence(void) continue; } - if (GROUP(ch)) { - while ((tch = (struct char_data *) simple_list(GROUP(ch)->members)) != NULL) { + if (GROUP(ch) && GROUP(ch)->members && GROUP(ch)->members->iSize) { + struct iterator_data Iterator; + + tch = (struct char_data *) merge_iterator(&Iterator, GROUP(ch)->members); + for (; tch ; tch = next_in_list(&Iterator)) { if (tch == ch) continue; if (!IS_NPC(tch) && !PRF_FLAGGED(tch, PRF_AUTOASSIST)) diff --git a/src/lists.c b/src/lists.c index 34b4f9f..3a61209 100644 --- a/src/lists.c +++ b/src/lists.c @@ -268,6 +268,7 @@ void * simple_list(struct list_data * pList) void * random_from_list(struct list_data * pList) { + struct iterator_data localIterator; void * pFoundItem; bool found; int number; @@ -278,17 +279,17 @@ void * random_from_list(struct list_data * pList) else number = rand_number(1, pList->iSize); - pFoundItem = merge_iterator(&Iterator, pList); + pFoundItem = merge_iterator(&localIterator, pList); - for (found = FALSE; pFoundItem != NULL; pFoundItem = next_in_list(&Iterator), count++) { + for (found = FALSE; pFoundItem != NULL; pFoundItem = next_in_list(&localIterator), count++) { if (count == number) { found = TRUE; break; } } - remove_iterator(&Iterator); - + remove_iterator(&localIterator); + if (found) return (pFoundItem); else