[etc] > player2.weight=player.weight; > player2.height=player.height; > strcpy(player2.title,player.title); > player2.hometown=player.hometown; > strcpy(player2.description,player.description); > player2.last_logon=player.last_logon; [etc] I like mine better: /* ************************************************************************ * file: plrconv.c Part of CircleMUD * * Usage: Convert the player file By Gekke Eekhoorn, 4/95 * * All Rights Reserved * * Copyright (C) 1992, 1993 The Trustees of The Johns Hopkins University * ************************************************************************* */ #include <stdio.h> #include <ctype.h> #include <string.h> #include "../structs.h" /* Insert your new structs here */ struct player_special_data_saved2 { byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */ byte spells_to_learn; /* How many can you learn yet this level*/ bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */ int wimp_level; /* Below this # of hit points, flee! */ byte freeze_level; /* Level of god who froze char, if any */ sh_int invis_level; /* level of invisibility */ room_num load_room; /* Which room to place char in */ long pref; /* preference flags for PC's. */ ubyte bad_pws; /* number of bad password attemps */ sbyte conditions[3]; /* Drunk, full, thirsty */ }; struct t1 { char name[MAX_NAME_LENGTH+1]; char description[EXDSCR_LENGTH]; char title[MAX_TITLE_LENGTH+1]; byte sex; byte class; }; struct t2 { byte level; sh_int hometown; time_t birth; /* Time of birth of character */ int played; /* Number of secs played in total */ }; struct t3 { /* password */ char pwd[MAX_PWD_LENGTH+1]; struct char_special_data_saved char_specials_saved; }; struct t4 { struct char_ability_data abilities; struct char_point_data points; struct affected_type affected[MAX_AFFECT]; time_t last_logon; /* Time (in secs) of last logon */ char host[HOST_LENGTH+1]; /* host of last logon */ }; struct char_file_u2 { /* char_player_data */ struct t1 tmp1; byte race; struct t2 tmp2; sh_int weight; sh_int height; struct t3 tmp3; struct player_special_data_saved2 player_specials_saved; struct t4 tmp4; }; void convert(char *filename) { FILE * fl; FILE * outfile; struct char_file_u oldpl; struct char_file_u2 newpl; if (!(fl = fopen(filename, "r+"))) { printf("Can't open %s.", filename); exit(); } outfile = fopen("players.new", "w"); printf("Converting.\n"); for (; ; ) { fread(&oldpl, sizeof(struct char_file_u), 1, fl); if (feof(fl)) { fclose(fl); fclose(outfile); puts("Done."); exit(); } /* Here, the conversion takes place. */ /* The memcpys are for not having to type the lot :] */ memcpy(&newpl.tmp1, oldpl.name, sizeof(struct t1)); memcpy(&newpl.tmp2, &oldpl.level, sizeof(struct t2)); memcpy(&newpl.tmp3, oldpl.pwd, sizeof(struct t3)); memcpy(&newpl.tmp4, &oldpl.abilities, sizeof(struct t4)); /* Move race to char_data */ newpl.race=oldpl.player_specials_saved.race; /* Convert them to sh_int */ newpl.weight=oldpl.weight; newpl.height=oldpl.height; /* Here, I cut all the unnecessary junk away */ memcpy(&newpl.player_specials_saved, &oldpl.player_specials_saved, sizeof(struct player_special_data_saved)); /* And here we write it */ fwrite(&newpl, sizeof(struct char_file_u2 ), 1, outfile); } } void main(int argc, char *argv[]) { if (argc != 2) printf("Usage: %s playerfile-name\n", argv[0]); else convert(argv[1]); } ---------------------------- Never /really/ tested it tho... Wrote it this Easter... Take a good look at the struct copying code :)
This archive was generated by hypermail 2b30 : 12/07/00 PST