D_MOBILE *load_player(char *player) { D_MOBILE *dMob = NULL; char sql[MAX_BUFFER]; char pName[MAX_BUFFER]; sqlite3_stmt *rSet = NULL; int i, size; memset(sql, '\0', MAX_BUFFER); pName[0] = toupper(player[0]); size = strlen(player); for (i = 1; i < size && i < MAX_BUFFER - 1; i++) pName[i] = tolower(player[i]); pName[i] = '\0'; /* prepare sql to query player table */ snprintf(sql, MAX_BUFFER, "select * from players where name = ?"); sqlite3_prepare_v2(db, sql, sizeof(sql), &rSet, NULL); sqlite3_bind_text(rSet, 1, pName, strlen(pName), 0); /* execute query and return NULL if player isn't found*/ if (sqlite3_step(rSet) != SQLITE_ROW) { sqlite3_reset(rSet); sqlite3_finalize(rSet); return NULL; } /* create new mobile data */ if (StackSize(dmobile_free) <= 0) { if ((dMob = malloc(sizeof(*dMob))) == NULL) { bug("Load_player: Cannot allocate memory."); abort(); } } else { dMob = (D_MOBILE *) PopStack(dmobile_free); } clear_mobile(dMob); /* load data */ dMob->name = strdup((const char *)sqlite3_column_text(rSet,3)); dMob->password = strdup((const char *)sqlite3_column_text(rSet,4)); dMob->level = sqlite3_column_int(rSet,2); dMob->room = find_room(sqlite3_column_int(rSet,0)); /* clear result set */ sqlite3_reset(rSet); sqlite3_finalize(rSet); if (dMob->room == NULL) dMob->room = find_room(START_ROOM); return dMob; }
D_MOBILE *load_player(char *player) { FILE *fp; D_MOBILE *dMob = NULL; char pfile[MAX_BUFFER]; char pName[MAX_BUFFER]; char *word; bool done = FALSE, found; int i, size; pName[0] = toupper(player[0]); size = strlen(player); for (i = 1; i < size && i < MAX_BUFFER - 1; i++) pName[i] = tolower(player[i]); pName[i] = '\0'; /* open the pfile so we can write to it */ snprintf(pfile, MAX_BUFFER, "players/%s.pfile", pName); if ((fp = fopen(pfile, "r")) == NULL) return NULL; /* create new mobile data */ if (StackSize(dmobile_free) <= 0) { if ((dMob = malloc(sizeof(*dMob))) == NULL) { bug("Load_player: Cannot allocate memory."); abort(); } } else { dMob = (D_MOBILE *) PopStack(dmobile_free); } clear_mobile(dMob); /* load data */ word = fread_word(fp); while (!done) { found = FALSE; switch (word[0]) { case 'E': if (!strcasecmp(word, "EOF")) {done = TRUE; found = TRUE; break;} break; case 'L': IREAD( "Level", dMob->level ); break; case 'N': SREAD( "Name", dMob->name ); break; case 'P': SREAD( "Password", dMob->password ); break; } if (!found) { bug("Load_player: unexpected '%s' in %s's pfile.", word, player); free_mobile(dMob); return NULL; } /* read one more */ if (!done) word = fread_word(fp); } fclose(fp); return dMob; }
D_MOBILE *load_player(char *player) { FILE *fp; D_MOBILE *dMob = NULL; char pfile[256]; char pName[20]; char *word; bool done = FALSE, found; int i, size; pName[0] = toupper(player[0]); size = strlen(player); for (i = 1; i < size; i++) pName[i] = tolower(player[i]); pName[i] = '\0'; /* open the pfile so we can write to it */ sprintf(pfile, "../players/%s.pfile", pName); if ((fp = fopen(pfile, "r")) == NULL) return NULL; /* create new mobile data */ if (StackSize(dmobile_free) <= 0) { if ((dMob = malloc(sizeof(*dMob))) == NULL) { bug("Load_player: Cannot allocate memory."); abort(); } } else { dMob = (D_MOBILE *) PopStack(dmobile_free); } clear_mobile(dMob); #ifdef IMC imc_initchar( dMob ); #endif /* load data */ word = fread_word(fp); while (!done) { found = FALSE; switch (word[0]) { case 'C': if (compares(word, "Coordx")) { IREAD( "Coordx", dMob->coordx ); } if (compares(word, "Coordy")) { IREAD( "Coordy", dMob->coordy ); } if (compares(word, "Coordz")) { IREAD( "Coordz", dMob->coordz ); } break; case 'E': if (!strcasecmp(word, "EOF")) {done = TRUE; found = TRUE; break;} break; case 'I': #ifdef IMC if( ( found = imc_loadchar( dMob, fp, word ) ) ) break; #endif break; case 'L': IREAD( "Level", dMob->level ); break; case 'N': SREAD( "Name", dMob->name ); break; case 'P': SREAD( "Password", dMob->password ); break; case 'T': SREAD( "Title", dMob->title ); break; } if (!found) { bug("Load_player: unexpected '%s' in %s's pfile.", word, player); free_mobile(dMob); return NULL; } /* read one more */ if (!done) word = fread_word(fp); } fclose(fp); return dMob; }