// Compile with // gcc -m32 -I src/char -I src/common charfrob.c -o charfrob src/common/timer.o src/common/malloc.o src/common/socket.o src/common/lock.o src/common/db.o src/char/int_pet.o src/char/int_storage.o src/char/inter.o src/char/int_party.o src/char/int_guild.o #include #include #include "../common/mmo.h" #include "../char/char.c" // Well, this is not terribly elegant, but I don't have that much time. #define MAX_MAP 1024 #define MAP_NAME_SIZE 32 int maps_nr = 0; struct { char old[MAP_NAME_SIZE], new[MAP_NAME_SIZE]; } maps[MAX_MAP]; void transform_point(struct point *p) { int k; if (!p->map[0]) return; for (k = 0; k < maps_nr; k++) if (!strcmp(p->map, maps[k].old)) { strcpy(p->map, maps[k].new); return; } fprintf(stderr, "Warning: untranslated map `%s'\n", p->map); } void transform_char(struct mmo_charstatus *p) { int i; transform_point(&p->last_point); transform_point(&p->save_point); for (i = 0; i < 10; i++) transform_point(&p->memo_point[i]); } int mmo_char_convert() { char line[965536]; int ret; struct mmo_charstatus char_dat; FILE *ifp,*ofp; ifp=stdin; ofp=stdout; while(fgets(line,65535,ifp)){ memset(&char_dat,0,sizeof(struct mmo_charstatus)); ret=mmo_char_fromstr(line,&char_dat); if(ret){ transform_char(&char_dat); mmo_char_tostr(line,&char_dat); fprintf(ofp,"%s" RETCODE,line); } } fcloseall(); return 0; } #define PARSE_MODE_NEXTNUM 0 #define PARSE_MODE_RANGE 1 int init(int count, char **translates) { int i; char *suffix = ".gat"; for (i = 0; i < count; i++) { char *src = translates[i]; char *dest = strchr(src, ':'); if (!dest) { fprintf(stderr, "Missing colon in: `%s'\n", src); return 1; } *dest++ = 0; if (strlen(src) + strlen(suffix) >= MAP_NAME_SIZE) { fprintf(stderr, "Map name prefix too long: `%s'\n", src); return 1; } if (strlen(dest) + strlen(suffix) >= MAP_NAME_SIZE) { fprintf(stderr, "Map name prefix too long: `%s'\n", dest); return 1; } strncpy(maps[maps_nr].old, src, MAP_NAME_SIZE); strcat(maps[maps_nr].old, suffix); strncpy(maps[maps_nr].new, dest, MAP_NAME_SIZE); strcat(maps[maps_nr].new, suffix); ++maps_nr; } return 0; } int main(int argc,char *argv[]) { if(argc < 2) { printf("Usage: %s oldmap0:newmap0 oldmap1:newmap1 ...\n", argv[0]); printf("e.g., %s new_1-1:001-2 new_2-1:001-1\n", argv[0]); puts("The extension `.gat' is appended implicitly."); exit(0); } if (init(argc - 1, argv + 1)) return 1; mmo_char_convert(); return 0; } /* satisfy linker */ void set_termfunc(void (*termfunc)(void)) {};