void FightStateNormal::OnSkillUsed(CMonster *monster)
	{
		if (monster == NULL)
		{
			LogError(AI_MODULE, "monster object is null.");
			return;
		}
        std::vector<CMonster::tagSkillRecord> &skillList = GetSkillList(monster, m_SelSkill.type);

		CMonster::tagSkillRecord &record = skillList[m_SelSkill.index];
		record.dwCoolDownTime = timeGetTime() + record.dwCool;
		ClearSelSkill();
	}
    bool FightStateNormal::SearchSkill(int type, CMonster *monster, long dis)
    {
		if (monster == NULL)
		{
			LogError(AI_MODULE, "monster object is null.");
			return false;
		}
        std::vector<CMonster::tagSkillRecord> &skillList = GetSkillList(monster, type);
        if(skillList.size() == 0)
        {
            return false;
        }
		unsigned long thisTime = timeGetTime();
		std::vector<SkillInfo> selSkillList;
		for(size_t i = 0; i < skillList.size(); ++ i)
		{
			if(skillList[i].dwCoolDownTime > thisTime)
			{
				continue;
			}
            if(!CheckSkill(monster, skillList[i].wID, skillList[i].wLevel, type, dis))
            {
                continue;
            }
			SkillInfo info;
			info.id = skillList[i].wID;
			info.level = skillList[i].wLevel;
			info.index = (long)i;
			info.type = type;
			selSkillList.push_back(info);
		}

		if(selSkillList.size() == 0)
		{
			return false;
		}

		size_t i = random((int)selSkillList.size());
		m_SelSkill = selSkillList[i];
		return true;
    }
void Player::StepSkillWindow()
{
	//スキルウィンドウトグル
	if(CheckKeyDown(KEY_INPUT_LALT))SkillWindow.Visible = 1 - SkillWindow.Visible;

	//スキルウィンドウが有効であるかどうか確認
	if(!SkillWindow.Visible)return;

	for(int i=0;i<3;i++)
	{//装備中武器に合わせたスキルセットを取得
		EnableSkillList[i] = GetSkillList(GetEquipmentNameforEquipment(Equipments[i]));
	}

	//操作
	if(!SkillChangeFlag)
	{//カーソルが左にあり、変更操作をおこなっていない状態
		if(CheckKeyDown(KEY_INPUT_LEFT))SkillCursorPoint.x--;
		if(CheckKeyDown(KEY_INPUT_RIGHT))SkillCursorPoint.x++;
		if(CheckKeyDown(KEY_INPUT_UP))SkillCursorPoint.y--;
		if(CheckKeyDown(KEY_INPUT_DOWN))SkillCursorPoint.y++;
	
		if(SkillCursorPoint.x < 0)SkillCursorPoint.x = 2;
		else if(SkillCursorPoint.x > 2)SkillCursorPoint.x = 0;
		if(SkillCursorPoint.y < 0)SkillCursorPoint.y = 3;
		else if(SkillCursorPoint.y > 3)SkillCursorPoint.y = 0;
	}else
	{//スキル変更を行おうとしている状態
		if(CheckKeyDown(KEY_INPUT_LEFT))ChangeSkillPoint.x--;
		if(CheckKeyDown(KEY_INPUT_RIGHT))ChangeSkillPoint.x++;

		if(SkillCursorPoint.y != 0)
		{//スキル変更
			if(CheckKeyDown(KEY_INPUT_UP))
			{
				ChangeSkillPoint.x = 0;
				ChangeSkillPoint.y--;
			}
			if(CheckKeyDown(KEY_INPUT_DOWN))
			{
				ChangeSkillPoint.x = 0;
				ChangeSkillPoint.y++;
			}

			int Length = EnableSkillList[ChangeSkillPoint.y-1].size()-1;

			if(Length < ChangeSkillPoint.x)ChangeSkillPoint.x = 0;
			else if(0 > ChangeSkillPoint.x)ChangeSkillPoint.x = Length;

			if(ChangeSkillPoint.y < 1)ChangeSkillPoint.y = 3;
			else if(ChangeSkillPoint.y > 3)ChangeSkillPoint.y = 1;
		}else
		{//装備変更
			int Length = GetArrayLength(EquipmentNames)-1;
			if(ChangeSkillPoint.x < 0)ChangeSkillPoint.x = Length;
			else if(ChangeSkillPoint.x > Length)ChangeSkillPoint.x = 0;
		}
	}

	if(CheckKeyDown(KEY_INPUT_RETURN))
	{//変更決定
		if(!SkillChangeFlag)
		{
			ChangeSkillPoint.x = 0;
			ChangeSkillPoint.y = SkillCursorPoint.y;
		}else
		{
			if(SkillCursorPoint.y != 0)
			{
				SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][0] = EnableSkillList[ChangeSkillPoint.y-1][ChangeSkillPoint.x];
				SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][3] = 0;
			}else Equipments[SkillCursorPoint.x] = ChangeSkillPoint.x;

			for(int i=0;i<3;i++)
			{//装備中武器に合わせたスキルセットを取得
				EnableSkillList[i] = GetSkillList(GetEquipmentNameforEquipment(Equipments[i]));
			}

			#pragma region 使用できないスキルを検索し、無効にする
			vector<POINT> Points;

			int Skill[3][3];
			for(int i=0;i<3;i++)
			{
				for(int j=0;j<3;j++)
				{
					Skill[i][j] = 0;
				}
			}
			
			for(int i=0;i<3;i++)
			{
				int Length = EnableSkillList[i].size();
				for(int j=0;j<Length;j++)
				{
					for(int x=0;x<3;x++)
					{
						for(int y=0;y<3;y++)
						{
							if(SkillSet[x][y][0] == EnableSkillList[i][j])
							{
								Skill[x][y] = 1;
							}
						}
					}
				}
			}

			for(int i=0;i<3;i++)
			{
				for(int j=0;j<3;j++)
				{
					if(!Skill[i][j])
					{
						SkillSet[i][j][0] = 0;
					}
				}
			}
			#pragma endregion
		}

		if(SkillChangeFlag)ChangeSkillPoint.x = ChangeSkillPoint.y = -1;
		SkillChangeFlag = 1 - SkillChangeFlag;
	}

	//描画
	SkillWindow.ReWindow();
	SkillWindow.SetDrawThisWindow();

	//DrawBox(15,10,110,35,Black,false);
	
	//パネルの制作
	int Length = AnimeGraphs.size();
	for(int i=0;i<Length;i++)
	{
		SkillPanels[i].ReWindow();
		SkillPanels[i].SetDrawThisWindow();

		SkillImages[i].x = SkillPanels[i].GetWidth()/2;
		SkillImages[i].y = SkillPanels[i].GetHeight()/2+24;
		SkillImages[i].Draw(true);
	}

	Length = EquipmentGraphs.size();
	for(int i=0;i<Length;i++)
	{
		EquipmentPanels[i].ReWindow();
		EquipmentPanels[i].SetDrawThisWindow();

		EquipmentImages[i].x = EquipmentPanels[i].GetWidth()/2;
		EquipmentImages[i].y = EquipmentPanels[i].GetHeight()/2+24;
		EquipmentImages[i].Draw(true);
	}

	SkillWindow.SetDrawThisWindow();

	for(int i=0;i<4;i++)
	{
		for(int j=0;j<3;j++)
		{
			int Select1 = 0,Select2 = 0;
			if(SkillCursorPoint.x == j && SkillCursorPoint.y == i)Select1 = 10;
			if(ChangeSkillPoint.x == j && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10;
			if(i>0)
			{//スキル窓の描画
				//DrawRotaGraph2(15+j*70+32,50+i*70+32,64,40,1,0,AnimeGraphs[SkillSet[j][i-1][0]][0],true);
				if(i < 4)
				{//使用中スキル
					SkillPanels[SkillSet[j][i-1][0]].x = 15+j*70;
					SkillPanels[SkillSet[j][i-1][0]].y = 50+i*70-Select1;
					SkillPanels[SkillSet[j][i-1][0]].Draw();
				}
				/*
				if(EnableSkillList[i-1].size() > j)
				{
					SkillPanels[EnableSkillList[i-1][j]].x = 15+j*70 + SkillWindow.GetWidth()/2;
					SkillPanels[EnableSkillList[i-1][j]].y = 50+i*70-Select2;
					SkillPanels[EnableSkillList[i-1][j]].Draw();
				}
				*/
			}else
			{//装備窓の描画
				//使用中装備
				EquipmentPanels[Equipments[j]].x = 15+j*70;
				EquipmentPanels[Equipments[j]].y = 50+i*70-Select1;
				EquipmentPanels[Equipments[j]].Draw();

			}
			//DrawBox(15+j*70,50+i*70,15+j*70+64,50+i*70+64,Black,false);
		}
	}

	for(int i=0;i<4;i++)
	{
		for(int j=0;j<5;j++)
		{
			int Select2 = 0;
			if(i>0)
			{//スキル窓の描画
				int ShowSkill = j + ChangeSkillPoint.x - 2;
				if(ChangeSkillPoint.x < 2)ShowSkill += 2 - ChangeSkillPoint.x;
				else if(ChangeSkillPoint.x >= EnableSkillList[i-1].size()-2)ShowSkill -= ChangeSkillPoint.x - (EnableSkillList[i-1].size()-3);
				if(ChangeSkillPoint.x == ShowSkill && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10;
				if(EnableSkillList[i-1].size() <= j)continue;
				SkillPanels[EnableSkillList[i-1][ShowSkill]].x = 15+j*70 + SkillWindow.GetWidth()/2;
				SkillPanels[EnableSkillList[i-1][ShowSkill]].y = 50+i*70-Select2;
				SkillPanels[EnableSkillList[i-1][ShowSkill]].Draw();
			}else
			{//装備窓の描画
				int ShowEquip = j;
				if(ChangeSkillPoint.x >= 5 && ChangeSkillPoint.y == i)ShowEquip += ChangeSkillPoint.x - 4;
				if(ChangeSkillPoint.x == ShowEquip && ChangeSkillPoint.y == i && SkillChangeFlag)Select2 = 10;
				if(GetArrayLength(EquipmentValueNames) > ShowEquip)
				{
					EquipmentPanels[ShowEquip].x = 15+j*70 + SkillWindow.GetWidth()/2;
					EquipmentPanels[ShowEquip].y = 50+i*70-Select2;
					EquipmentPanels[ShowEquip].Draw();
				}
			}
		}
	}

	InfoPanel.ReWindow();
	InfoPanel2.ReWindow();

	//装備、スキル説明の描画
	string StrInfo;
	if(SkillCursorPoint.y != 0)StrInfo = SkillInfo[SkillSet[SkillCursorPoint.x][SkillCursorPoint.y-1][0]];
	else StrInfo = EquipmentInfo[Equipments[SkillCursorPoint.x]];
	InfoPanel.DrawStringInWindow(5,5,DrawString_Left,StrInfo,FontSmall,White);
	SkillWindow.SetDrawThisWindow();
	InfoPanel.Draw();

	StrInfo = "";
	if(SkillChangeFlag)
	{
		if(SkillCursorPoint.y != 0)StrInfo = SkillInfo[EnableSkillList[ChangeSkillPoint.y-1][ChangeSkillPoint.x]];
		else StrInfo = EquipmentInfo[ChangeSkillPoint.x];
		InfoPanel2.DrawStringInWindow(5,5,DrawString_Left,StrInfo,FontSmall,White);
	}
	SkillWindow.SetDrawThisWindow();
	InfoPanel2.Draw();

	SetDrawScreen(DX_SCREEN_BACK);
	SkillWindow.Draw();
}