int func_table_key_index(func_t *f, const char *name) { int i,k,n; if(f==NULL || !func_is_table(f) || func_asize(f)<=0 || name==NULL){ FUNC_ERROR_ARG1("func_table_key_index",f); } n=PJWHash(name); i=(n % func_asize(f)); if(f->a[i]==NULL || char_eq(func_key_name(f->a[i]),name)){ return i; } k=i; do{ if(++i>=func_asize(f)){ i=0; } if(f->a[i]==NULL || char_eq(func_key_name(f->a[i]),name)){ return i; } }while(k!=i); return -1; }
int get_player(char *name) { for ( int i = 0; i < player_database_n; i++ ) { if ( char_eq(player_database[i].name, name) ) { return i; } } return -1; }
int player_create(char *name, char *password) { if ( char_eq(name, "admin") || char_eq(name, "root") || strlen(name) >= 16 ) { return 1; } for ( int i = 0; name[i]; i++ ) { char c = name[i]; if ( !RANGE(c, 'a', 'z') && !RANGE(c, 'A', 'Z') && !RANGE(c, '0', '9') && c != '_' && c != '-' && c != '.' ) { return 1; } } player_database_t *new_player = &player_database[player_database_n]; strcpy(new_player->name, name); memcpy(new_player->password_hash, password, sizeof(char) * 16); // fill up properties double r = 100 + 400 * (double)rand() / RAND_MAX; double fi = 2 * 3.14159265359 * (double) rand() / RAND_MAX; new_player->x = (int)( r * cos(fi) ); new_player->y = (int)( r * sin(fi) ); new_player->hp = 100; new_player->movement_speed = 1; player_database_n++; return database_backup(); }