/** * Reads Elemental DB lines * ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion */ static bool read_elementaldb_sub(char* str[], int columns, int current) { uint16 class_ = atoi(str[0]), i, ele; struct s_elemental_db *db; struct status_data *status; //Find the ID, already exist or not in elemental_db ARR_FIND(0,elemental_count,i,elemental_db[i].class_ == class_); if (i >= elemental_count) db = &elemental_db[elemental_count]; else db = &elemental_db[i]; db->class_ = atoi(str[0]); safestrncpy(db->sprite, str[1], NAME_LENGTH); safestrncpy(db->name, str[2], NAME_LENGTH); db->lv = atoi(str[3]); status = &db->status; db->vd.class_ = db->class_; status->max_hp = atoi(str[4]); status->max_sp = atoi(str[5]); status->rhw.range = atoi(str[6]); status->rhw.atk = atoi(str[7]); status->rhw.atk2 = atoi(str[8]); status->def = atoi(str[9]); status->mdef = atoi(str[10]); status->str = atoi(str[11]); status->agi = atoi(str[12]); status->vit = atoi(str[13]); status->int_ = atoi(str[14]); status->dex = atoi(str[15]); status->luk = atoi(str[16]); db->range2 = atoi(str[17]); db->range3 = atoi(str[18]); status->size = atoi(str[19]); status->race = atoi(str[20]); ele = atoi(str[21]); status->def_ele = ele%20; status->ele_lv = (unsigned char)floor(ele/20.); if( !CHK_ELEMENT(status->def_ele) ) { ShowWarning("read_elementaldb_sub: Elemental %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1); status->def_ele = ELE_NEUTRAL; } if( !CHK_ELEMENT_LEVEL(status->ele_lv) ) { ShowWarning("read_elementaldb_sub: Elemental %d has invalid element level %d (max is %d)\n", db->class_, status->ele_lv, MAX_ELE_LEVEL); status->ele_lv = 1; } status->aspd_rate = 1000; status->speed = atoi(str[22]); status->adelay = atoi(str[23]); status->amotion = atoi(str[24]); status->dmotion = atoi(str[25]); if (i >= elemental_count) elemental_count++; return true; }
/** * Read each line of Mercenary's database */ static bool mercenary_readdb_sub(char *str[], int columns, int current) { int ele; struct s_mercenary_db *db; struct status_data *status; db = &mercenary_db[current]; db->class_ = atoi(str[0]); safestrncpy(db->sprite, str[1], NAME_LENGTH); safestrncpy(db->name, str[2], NAME_LENGTH); db->lv = atoi(str[3]); status = &db->status; db->vd.class_ = db->class_; status->max_hp = atoi(str[4]); status->max_sp = atoi(str[5]); status->rhw.range = atoi(str[6]); status->rhw.atk = atoi(str[7]); status->rhw.atk2 = status->rhw.atk + atoi(str[8]); status->def = atoi(str[9]); status->mdef = atoi(str[10]); status->str = atoi(str[11]); status->agi = atoi(str[12]); status->vit = atoi(str[13]); status->int_ = atoi(str[14]); status->dex = atoi(str[15]); status->luk = atoi(str[16]); db->range2 = atoi(str[17]); db->range3 = atoi(str[18]); status->size = atoi(str[19]); status->race = atoi(str[20]); ele = atoi(str[21]); status->def_ele = ele%20; status->ele_lv = (unsigned char)floor(ele / 20.); if( !CHK_ELEMENT(status->def_ele) ) { ShowWarning("mercenary_readdb_sub: Mercenary %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1); status->def_ele = ELE_NEUTRAL; } if( !CHK_ELEMENT_LEVEL(status->ele_lv) ) { ShowWarning("mercenary_readdb_sub: Mercenary %d has invalid element level %d (max is %d)\n", db->class_, status->ele_lv, MAX_ELE_LEVEL); status->ele_lv = 1; } status->aspd_rate = 1000; status->speed = atoi(str[22]); status->adelay = atoi(str[23]); status->amotion = atoi(str[24]); status->dmotion = atoi(str[25]); return true; }