/* Legt eine neue Verzauberung an. Sollte es schon einen Zauber * dieses Typs geben, gibt es den bestehenden zurück. */ static curse *make_curse(unit * mage, attrib ** ap, const curse_type * ct, float vigour, int duration, float effect, int men) { curse *c; attrib *a; a = a_new(&at_curse); a_add(ap, a); c = (curse *) a->data.v; c->type = ct; c->flags = 0; c->vigour = vigour; c->duration = duration; c->effect = effect; c->magician = mage; c->no = newunitid(); chash(c); switch (c->type->typ) { case CURSETYP_NORM: break; case CURSETYP_UNIT: { c->data.i = men; break; } } return c; }
static void createunitid(unit * u, int id) { if (id <= 0 || id > MAX_UNIT_NR || ufindhash(id) || dfindhash(id) || forbiddenid(id)) u->no = newunitid(); else u->no = id; uhash(u); }