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(); }