Пример #1
0
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;
}
Пример #2
0
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;
}