bool Data_DollParam_Each::Load(LPTSTR fileName){ CsvReader reader; // ファイルを開く if(!reader.Open(fileName)){ return false; } // 名前を読み込む reader.Read(); reader.GetValue(0, typeName, DOLL_TYPENAME_BYTES); // 空行を読む reader.Read(); // パラメータの上昇率を読み込む for(int n=0; n<DOLL_PARAM_MAX; n++){ // 一行読む reader.Read(); // 係数3つを取得する // 見やすさのために0番目の要素は能力値名を使用。 LvToP[n].a = reader.GetFloatValue(1); LvToP[n].b = reader.GetFloatValue(2); LvToP[n].c = reader.GetFloatValue(3); } // 空行を読む reader.Read(); // レベルアップボーナスを読み込む for(int n=0; n<DOLL_LEVEL_MAX; n++){ // 一行読む reader.Read(); // 各パラメータを取得する for(int m=0; m<DOLL_PARAM_MAX; m++){ LvBonus[n].growth[m] = reader.GetIntValue(m+1, 0); } LvBonus[n].skillID = reader.GetIntValue(DOLL_PARAM_MAX+1, 0); } return true; }
bool Data_EnemyParam::LoadDataFromCsv(){ // リストの解放 enemyList.Release(); // Csvを読み込むクラス CsvReader reader; // ファイル名を保持する TCHAR fileName[MAX_PATH]; // グループの内容を一時的に保持する変数 Data_EnemyParam_Each tmpEnemy; // ファイルが存在しない場合が何度か続いたらループを抜ける int nEmptyFile = 0; // 何番目の敵インデックスまで埋まっているか int index = 0; int actionIndex = 0; for(int n=1; n<=MAX_ENEMYPARAMFILE; n++){ sprintf_s(fileName, MAX_PATH-1, CSVFILE_ENEMYPARAM, n); // csvファイルを読み込んでグループに格納する if(reader.Open(fileName)){ tmpEnemy = Data_EnemyParam_Each(); nEmptyFile = 0; // 空ファイル数のリセット index = 0; // ダミー行 reader.NextLine(); // レファレンス用IDを取得する if(reader.Read() == CSV_READ_NOERROR){ if(reader.GetIntValue(0, 0) == 0){ continue; } tmpEnemy.data.refID = (WORD)reader.GetIntValue(0, 0); } // ダミー行 reader.NextLine(); // 敵の名前と属性と経験値を取得する if(reader.Read() == CSV_READ_NOERROR){ // バッファに直接値を入れる reader.GetValue(0, tmpEnemy.data.name, BATTLEUNIT_NAME_BYTES-1); // 属性を読み取る tmpEnemy.data.attr = (BYTE)reader.GetIntValue(1, DOLL_ATTR_NONE); // 経験値を読み取る tmpEnemy.data.exp = (DWORD)reader.GetIntValue(2, 0); // レベルを読み取る tmpEnemy.data.level = (WORD)reader.GetIntValue(3, 1); } // ダミー行 reader.NextLine(); // 敵の各パラメータを取得する reader.Read(); for(int i=0; i<NUM_ENEMYPARAM_DATA; i++){ tmpEnemy.data.param[i] = reader.GetIntValue(i, 0); } reader.NextLine(); // ステートの配列を取得する for(int i=0; i<MAX_INITIALSTATE; i++){ reader.Read(); tmpEnemy.SetInitialState( i, reader.GetIntValue(0, 0), reader.GetIntValue(1, 0), reader.GetIntValue(2, 0)); } reader.NextLine(); // 敵の攻撃パターンを取得する for(int i=0; i<MAX_ACTIONPATTERN; i++){ // 各行動は三行に分けて記述する。 // 一行目:攻撃パターン名、スキルID、ターゲットのタイプ、優先度 // 二行目、三行目:条件、条件に関するパラメータ(3つ) reader.Read(); // 一行目 tmpEnemy.SetActionPattern(i, 0, (DWORD)reader.GetIntValue(0, 0)); tmpEnemy.SetActionPattern(i, 1, (BYTE)reader.GetIntValue(1, 0)); tmpEnemy.SetActionPattern(i, 2, (WORD)reader.GetIntValue(2, 0)); // 二行目、三行目 for(int j=0; j<MAX_CONDITION; j++){ reader.Read(); tmpEnemy.SetActConditionPattern( i, j, reader.GetIntValue(0, 0)); for(int k=0; k<MAX_CONDITIONPARAM; k++){ tmpEnemy.SetActConditionParam( i, j, k, reader.GetIntValue(1+k, 0)); } } // ダミー行 reader.NextLine(); } // 取得したグループをデータベースにセットする enemyList.AddData(tmpEnemy); }else{ nEmptyFile++; if(nEmptyFile > 100){ // 空ファイルが続いた場合、ループを抜ける break; } } } return true; }