/* * Adjust the internal values of other objects as if something was inserted at the given array index. * Might also be useful to make 'holes' in the array for some reason. */ int adjust_objects(obj_rnum refpt) { int shop, i, zone, cmd_no; struct obj_data *obj; if (refpt < 0 || refpt >= top_of_objt) return refpt; /* * Renumber live objects. */ for (obj = object_list; obj; obj = obj->next) GET_OBJ_RNUM(obj) += (GET_OBJ_RNUM(obj) >= refpt); /* * Renumber zone table. */ for (zone = 0; zone <= top_of_zone_table; zone++) { for (cmd_no = 0; ZCMD(zone, cmd_no).command != 'S'; cmd_no++) { switch (ZCMD(zone, cmd_no).command) { case 'P': ZCMD(zone, cmd_no).arg3 += (ZCMD(zone, cmd_no).arg3 >= refpt); /* * No break here - drop into next case. */ case 'O': case 'G': case 'E': ZCMD(zone, cmd_no).arg1 += (ZCMD(zone, cmd_no).arg1 >= refpt); break; case 'R': ZCMD(zone, cmd_no).arg2 += (ZCMD(zone, cmd_no).arg2 >= refpt); break; } } } /* * Renumber notice boards. */ for (i = 0; i < NUM_OF_BOARDS; i++) BOARD_RNUM(i) += (BOARD_RNUM(i) >= refpt); /* * Renumber shop produce. */ for (shop = 0; shop <= top_shop; shop++) for (i = 0; SHOP_PRODUCT(shop, i) != NOTHING; i++) SHOP_PRODUCT(shop, i) += (SHOP_PRODUCT(shop, i) >= refpt); return refpt; }
void init_boards(void) { int i, j, fatal_error = 0; for (i = 0; i < INDEX_SIZE; i++) { msg_storage[i] = 0; msg_storage_taken[i] = 0; } for (i = 0; i < NUM_OF_BOARDS; i++) { if ((BOARD_RNUM(i) = real_object(BOARD_VNUM(i))) == NOTHING) { log("SYSERR: Fatal board error: board vnum %d does not exist!", BOARD_VNUM(i)); fatal_error = 1; } num_of_msgs[i] = 0; for (j = 0; j < MAX_BOARD_MESSAGES; j++) { memset((char *) &(msg_index[i][j]), 0, sizeof(struct board_msginfo)); msg_index[i][j].slot_num = -1; } Board_load_board(i); } ACMD_READ = find_command("read"); ACMD_WRITE = find_command("write"); ACMD_REMOVE = find_command("remove"); ACMD_LOOK = find_command("look"); ACMD_EXAMINE = find_command("examine"); if (fatal_error) exit(1); }
void init_boards(void) { int i, j, fatal_error = 0; char buf[256]; for (i = 0; i < INDEX_SIZE; i++) { msg_storage[i] = 0; msg_storage_taken[i] = 0; } for (i = 0; i < NUM_OF_BOARDS; i++) { if ((BOARD_RNUM(i) = real_object(BOARD_VNUM(i))) == -1) { sprintf(buf, "SYSERR: Fatal board error: board vnum %d does not exist!", BOARD_VNUM(i)); stderr_log(buf); fatal_error = 1; } num_of_msgs[i] = 0; for (j = 0; j < MAX_BOARD_MESSAGES; j++) { memset((char *) &(msg_index[i][j]), 0, sizeof(struct board_msginfo)); msg_index[i][j].slot_num = -1; } Board_load_board(i); } CMD_READ = find_command("read"); CMD_WRITE = find_command("write"); CMD_REMOVE = find_command("remove"); CMD_LOOK = find_command("look"); if (fatal_error) { fprintf(stderr, "Received fatal error shutting down.\n"); fflush(NULL); exit(1); } }
static void init_boards(void) { int i, j, fatal_error = 0; for (i = 0; i < INDEX_SIZE; i++) { msg_storage[i] = 0; msg_storage_taken[i] = 0; } for (i = 0; i < NUM_OF_BOARDS; i++) { if ((BOARD_RNUM(i) = real_object(BOARD_VNUM(i))) == NOTHING) { log("SYSERR: Fatal board error: board vnum %d does not exist!", BOARD_VNUM(i)); fatal_error = 1; } num_of_msgs[i] = 0; for (j = 0; j < MAX_BOARD_MESSAGES; j++) { memset((char *) &(msg_index[i][j]), 0, sizeof(struct board_msginfo)); msg_index[i][j].slot_num = -1; } board_load_board(i); } if (fatal_error) exit(1); }
/* search the room ch is standing in to find which board he's looking at */ int find_board(struct char_data *ch) { struct obj_data *obj; int i; for (obj = world[IN_ROOM(ch)].contents; obj; obj = obj->next_content) for (i = 0; i < NUM_OF_BOARDS; i++) if (BOARD_RNUM(i) == GET_OBJ_RNUM(obj)) return (i); if (GET_LEVEL(ch) >= LVL_IMMORT) for (obj = ch->carrying; obj; obj = obj->next_content) for (i = 0; i < NUM_OF_BOARDS; i++) if (BOARD_RNUM(i) == GET_OBJ_RNUM(obj)) return (i); return (-1); }
/* search the room ch is standing in to find which board he's looking at */ int find_board(struct char_data * ch) { struct obj_data *obj; int i; for (obj = world[ch->in_room].contents; obj; obj = obj->next_content) for (i = 0; i < NUM_OF_BOARDS; i++) if (BOARD_RNUM(i) == GET_OBJ_RNUM(obj)) return i; return -1; }
int delete_object(obj_rnum rnum) { obj_rnum i; zone_rnum zrnum; struct obj_data *obj, *tmp, *next_tmp; int shop, j, zone, cmd_no; if (rnum == NOTHING || rnum > top_of_objt) return NOTHING; obj = &obj_proto[rnum]; zrnum = real_zone_by_thing(GET_OBJ_VNUM(obj)); /* This is something you might want to read about in the logs. */ log("GenOLC: delete_object: Deleting object #%d (%s).", GET_OBJ_VNUM(obj), obj->short_description); for (tmp = object_list; tmp; tmp = next_tmp) { next_tmp = tmp->next; if (tmp->item_number != obj->item_number) continue; /* extract_obj() will just axe contents. */ if (tmp->contains) { struct obj_data *this_content, *next_content; for (this_content = tmp->contains; this_content; this_content = next_content) { next_content = this_content->next_content; if (IN_ROOM(tmp)) { /* Transfer stuff from object to room. */ obj_from_obj(this_content); obj_to_room(this_content, IN_ROOM(tmp)); } else if (tmp->worn_by || tmp->carried_by) { /* Transfer stuff from object to person inventory. */ obj_from_char(this_content); obj_to_char(this_content, tmp->carried_by); } else if (tmp->in_obj) { /* Transfer stuff from object to containing object. */ obj_from_obj(this_content); obj_to_obj(this_content, tmp->in_obj); } } } /* Remove from object_list, etc. - handles weightchanges, and similar. */ extract_obj(tmp); } /* Make sure all are removed. */ assert(obj_index[rnum].number == 0); /* Adjust rnums of all other objects. */ for (tmp = object_list; tmp; tmp = tmp->next) { GET_OBJ_RNUM(tmp) -= (GET_OBJ_RNUM(tmp) > rnum); } for (i = rnum; i < top_of_objt; i++) { obj_index[i] = obj_index[i + 1]; obj_proto[i] = obj_proto[i + 1]; obj_proto[i].item_number = i; } top_of_objt--; RECREATE(obj_index, struct index_data, top_of_objt + 1); RECREATE(obj_proto, struct obj_data, top_of_objt + 1); /* Renumber notice boards. */ for (j = 0; j < NUM_OF_BOARDS; j++) BOARD_RNUM(j) -= (BOARD_RNUM(j) > rnum); /* Renumber shop produce. */ for (shop = 0; shop <= top_shop; shop++) for (j = 0; SHOP_PRODUCT(shop, j) != NOTHING; j++) SHOP_PRODUCT(shop, j) -= (SHOP_PRODUCT(shop, j) > rnum); /* Renumber zone table. */ for (zone = 0; zone <= top_of_zone_table; zone++) { for (cmd_no = 0; ZCMD(zone, cmd_no).command != 'S'; cmd_no++) { switch (ZCMD(zone, cmd_no).command) { case 'P': if (ZCMD(zone, cmd_no).arg3 == rnum) { delete_command(&zone_table[zone], cmd_no); } else ZCMD(zone, cmd_no).arg3 -= (ZCMD(zone, cmd_no).arg3 > rnum); break; case 'O': case 'G': case 'E': if (ZCMD(zone, cmd_no).arg1 == rnum) { delete_command(&zone_table[zone], cmd_no); } else ZCMD(zone, cmd_no).arg1 -= (ZCMD(zone, cmd_no).arg1 > rnum); break; case 'R': if (ZCMD(zone, cmd_no).arg2 == rnum) { delete_command(&zone_table[zone], cmd_no); } else ZCMD(zone, cmd_no).arg2 -= (ZCMD(zone, cmd_no).arg2 > rnum); break; } } } save_objects(zrnum); return rnum; }