fix crash in 997: re-introduce cfindhash.

this prevents duplicate curse.no values.
This commit is contained in:
Enno Rehling 2016-10-22 22:35:10 +02:00
parent a4498f8b43
commit 34a6dd8d54
3 changed files with 11 additions and 0 deletions

View File

@ -98,6 +98,15 @@ static void cunhash(curse * c)
} }
} }
curse *cfindhash(int i)
{
curse *old;
for (old = cursehash[i % MAXENTITYHASH]; old; old = old->nexthash)
if (old->no == i)
return old;
return NULL;
}
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* at_curse */ /* at_curse */
void curse_init(attrib * a) void curse_init(attrib * a)

View File

@ -285,6 +285,7 @@ extern "C" {
void ct_register(const curse_type *); void ct_register(const curse_type *);
void ct_checknames(void); void ct_checknames(void);
curse *cfindhash(int i);
curse *findcurse(int curseid); curse *findcurse(int curseid);
void curse_init(struct attrib *a); void curse_init(struct attrib *a);

View File

@ -1876,6 +1876,7 @@ int newunitid(void)
start_random_no = random_unit_no; start_random_no = random_unit_no;
while (ufindhash(random_unit_no) || dfindhash(random_unit_no) while (ufindhash(random_unit_no) || dfindhash(random_unit_no)
|| cfindhash(random_unit_no)
|| forbiddenid(random_unit_no)) { || forbiddenid(random_unit_no)) {
random_unit_no++; random_unit_no++;
if (random_unit_no == MAX_UNIT_NR + 1) { if (random_unit_no == MAX_UNIT_NR + 1) {