Esempio n. 1
0
static int createunit_read(trigger * t, gamedata *data)
{
    createunit_data *td = (createunit_data *)t->data.v;
    variant var;
    int result = AT_READ_OK;
    var = read_faction_reference(data);
    if (var.i > 0) {
        td->f = findfaction(var.i);
        if (!td->f) {
            ur_add(var, &td->f, resolve_faction);
        }
    }
    else {
        result = AT_READ_FAIL;
    }
    // read_reference(&td->f, store, read_faction_reference, resolve_faction);

    read_reference(&td->r, data, read_region_reference,
        RESOLVE_REGION(data->version));
    td->race = (const struct race *)read_race_reference(data->store).v;
    if (!td->race) {
        result = AT_READ_FAIL;
    }
    READ_INT(data->store, &td->number);
    return result;
}
Esempio n. 2
0
void read_groups(struct storage *store, faction * f)
{
    for (;;) {
        ally **pa;
        group *g;
        int gid;
        char buf[1024];

        READ_INT(store, &gid);
        if (gid == 0)
            break;
        READ_STR(store, buf, sizeof(buf));
        g = new_group(f, buf, gid);
        pa = &g->allies;
        for (;;) {
            ally *a;
            variant fid;

            READ_INT(store, &fid.i);
            if (fid.i <= 0)
                break;
            a = ally_add(pa, findfaction(fid.i));
            READ_INT(store, &a->status);
            if (!a->faction)
                ur_add(fid, &a->faction, resolve_faction);
        }
        a_read(store, &g->attribs, g);
    }
}
Esempio n. 3
0
void read_groups(struct storage *store, faction * f)
{
  for (;;) {
    ally **pa;
    group *g;
    int gid;
    char buf[1024];

    READ_INT(store, &gid);
    if (gid == 0)
      break;
    READ_STR(store, buf, sizeof(buf));
    g = new_group(f, buf, gid);
    pa = &g->allies;
    for (;;) {
      ally *a;
      variant fid;
      READ_INT(store, &fid.i);
      if (fid.i <= 0)
        break;
      if (global.data_version < STORAGE_VERSION && fid.i == 0)
        break;
      a = malloc(sizeof(ally));
      *pa = a;
      pa = &a->next;
      READ_INT(store, &a->status);

      a->faction = findfaction(fid.i);
      if (!a->faction)
        ur_add(fid, &a->faction, resolve_faction);
    }
    *pa = 0;
    a_read(store, &g->attribs, g);
  }
}
Esempio n. 4
0
static int cw_read(attrib * a, void *target, storage * store)
{
  bresolve *br = calloc(sizeof(bresolve), 1);
  curse *c = (curse *) a->data.v;
  wallcurse *wc = (wallcurse *) c->data.v;
  variant var;

  curse_read(a, store, target);
  br->self = c;
  READ_INT(store, &br->id);

  var.i = br->id;
  ur_add(var, &wc->wall, resolve_borderid);

  var.v = br;
  ur_add(var, &wc->buddy, resolve_buddy);
  return AT_READ_OK;
}
Esempio n. 5
0
int
read_reference(void *address, storage * store, read_fun reader,
resolve_fun resolver)
{
    variant var = reader(store);
    int result = resolver(var, address);
    if (result != 0) {
        ur_add(var, address, resolver);
    }
    return result;
}
Esempio n. 6
0
static void wall_read(connection * b, storage * store)
{
  static wall_data dummy;
  wall_data *fd = b->data.v ? (wall_data *) b->data.v : &dummy;
  variant mno;

  if (global.data_version < STORAGE_VERSION) {
    READ_INT(store, &mno.i);
    fd->mage = findunit(mno.i);
    if (!fd->mage && b->data.v) {
      ur_add(mno, &fd->mage, resolve_unit);
    }
  } else {
    read_reference(&fd->mage, store, read_unit_reference, resolve_unit);
  }
  READ_INT(store, &fd->force);
  if (global.data_version >= NOBORDERATTRIBS_VERSION) {
    READ_INT(store, &fd->countdown);
  }
  fd->active = true;
}