void CombatWindow::addOffenseRecord(int iType, int iDamage) { #ifdef DEBUGCOMBAT printf("CombatWindow::addOffenseRecord starting...\n"); #endif bool bFoundRecord = false; CombatOffenseRecord *pRecord; for(pRecord = m_combat_offense_list.first(); pRecord != 0; pRecord = m_combat_offense_list.next()) { if(pRecord->getType() == iType) { bFoundRecord = true; break; } } if(!bFoundRecord) { pRecord = new CombatOffenseRecord(iType, m_player); m_combat_offense_list.append(pRecord); } if(iDamage > 0) { pRecord->addHit(iDamage); } else { pRecord->addMiss(iDamage); } #ifdef DEBUGCOMBAT printf("CombatWindow::addOffenseRecord finished...\n"); #endif }
void CombatWindow::addOffenseRecord(int iType, int iDamage, int iSpell) { #ifdef DEBUGCOMBAT seqDebug("CombatWindow::addOffenseRecord starting..."); #endif bool bFoundRecord = false; CombatOffenseRecord *pRecord; for(pRecord = m_combat_offense_list.first(); pRecord != 0; pRecord = m_combat_offense_list.next()) { // Belith -- Lets match spells up as well if(pRecord->getType() == iType && pRecord->getType() != 231) { bFoundRecord = true; break; } if(pRecord->getType() == iType && pRecord->getType() == 231 && pRecord->getSpell() == iSpell) { bFoundRecord = true; break; } } if(!bFoundRecord) { // Belith -- Again lets skip buffs, etc if ((iDamage > 0 && iType == 231) || iType != 231) { pRecord = new CombatOffenseRecord(iType, m_player, iSpell); m_combat_offense_list.append(pRecord); } } if(iDamage > 0) { pRecord->addHit(iDamage); } else if (iType != 231) { pRecord->addMiss(iDamage); } #ifdef DEBUGCOMBAT seqDebug("CombatWindow::addOffenseRecord finished..."); #endif }
void CombatWindow::updateOffense() { #ifdef DEBUGCOMBAT seqDebug("CombatWindow::updateOffense starting..."); #endif QString s_totaldamage; QString s_percentspecial; QString s_percentnonmelee; QString s_avgmelee; QString s_avgspecial; QString s_avgnonmelee; int iTotalDamage = 0; int iTotalHits = 0; double dPercentSpecial = 0.0; double dPercentNonmelee = 0.0; double dAvgMelee = 0.0; double dAvgSpecial = 0.0; double dAvgNonmelee = 0.0; int iMeleeDamage = 0; int iMeleeHits = 0; int iSpecialDamage = 0; int iSpecialHits = 0; int iNonmeleeDamage = 0; int iNonmeleeHits = 0; // empty the list so we can repopulate m_offenseListView->clear(); CombatOffenseRecord *pRecord; for (pRecord = m_combat_offense_list.first(); pRecord != 0; pRecord = m_combat_offense_list.next()) { int iType = pRecord->getType(); int iSpell = pRecord->getSpell(); int iHits = pRecord->getHits(); int iMisses = pRecord->getMisses(); int iMinDamage = pRecord->getMinDamage(); int iMaxDamage = pRecord->getMaxDamage(); int iDamage = pRecord->getTotalDamage(); double dAvgDamage, dRatio; if (iHits != 0) dAvgDamage = (double)iDamage / (double)iHits; else dAvgDamage = 0.0; if (iMisses != 0) dRatio = (double)iHits / (double)iMisses; else dRatio = 0.0; QString s_type; // Belith -- Damage shields are strange! switch (iType) { case 0: // 1H Blunt case 1: // 1H Slashing case 2: // 2H Blunt case 3: // 2H Slashing case 28: // Hand To Hand case 36: // Piercing case 7: // Archery case 8: // Backstab case 10: // Bash case 21: // Dragon Punch case 23: // Eagle Strike case 26: // Flying Kick case 30: // Kick case 38: // Round Kick case 51: // Throwing case 52: // Tiger Claw // this is a normal skill s_type.sprintf("%s(%d)", (const char*)skill_name(iType), iType); break; case 231: // Non Melee Damage s_type.sprintf("Spell: %s(%d)", (const char*)spell_name(iSpell), iSpell); break; default: // Damage Shield? // 245 Mark of Retribution // 248 Flameshield of Ro? (45pt) (mage) // -11 Killing Blow with MoR // -8 Killing Blow with Ro? (45pt) (mage) s_type.sprintf("Damage Shield: (%d)", iType); break; } QString s_hits; s_hits.setNum(iHits); QString s_misses; s_misses.setNum(iMisses); QString s_ratio; s_ratio = QString("%1 to 1").arg(dRatio); QString s_avgdamage; s_avgdamage.setNum(dAvgDamage); QString s_mindamage; s_mindamage.setNum(iMinDamage); QString s_maxdamage; s_maxdamage.setNum(iMaxDamage); QString s_damage; s_damage.setNum(iDamage); Q3ListViewItem *pItem = new Q3ListViewItem(m_offenseListView, s_type, s_hits, s_misses, s_ratio, s_avgdamage, s_mindamage, s_maxdamage, s_damage); m_offenseListView->insertItem(pItem); switch (iType) { case 0: // 1H Blunt case 1: // 1H Slashing case 2: // 2H Blunt case 3: // 2H Slashing case 28: // Hand To Hand case 36: // Piercing iMeleeDamage += iDamage; iMeleeHits += iHits; break; case 7: // Archery case 8: // Backstab case 10: // Bash case 21: // Dragon Punch case 23: // Eagle Strike case 26: // Flying Kick case 30: // Kick case 38: // Round Kick case 51: // Throwing case 52: // Tiger Claw iSpecialDamage += iDamage; iSpecialHits += iHits; break; default: iNonmeleeDamage += iDamage; iNonmeleeHits += iHits; break; } } iTotalDamage = iMeleeDamage + iSpecialDamage + iNonmeleeDamage; iTotalHits = iMeleeHits + iSpecialHits + iNonmeleeHits; if (iTotalDamage != 0) { dPercentSpecial = ((double)iSpecialDamage / (double)iTotalDamage) * 100.0; dPercentNonmelee = ((double)iNonmeleeDamage / (double)iTotalDamage) * 100.0; } else { dPercentSpecial = 0.0; dPercentNonmelee = 0.0; } if (iMeleeHits != 0) dAvgMelee = (double)iMeleeDamage / (double)iMeleeHits; else dAvgMelee = 0.0; if (iSpecialHits != 0) dAvgSpecial = (double)iSpecialDamage / (double)iSpecialHits; else dAvgSpecial = 0.0; if (iNonmeleeHits != 0) dAvgNonmelee = (double)iNonmeleeDamage / (double)iNonmeleeHits; else dAvgNonmelee = 0.0; s_totaldamage.setNum(iTotalDamage); s_percentspecial.setNum(dPercentSpecial); s_percentnonmelee.setNum(dPercentNonmelee); s_avgmelee.setNum(dAvgMelee); s_avgspecial.setNum(dAvgSpecial); s_avgnonmelee.setNum(dAvgNonmelee); m_offenseTotalDamage->setText(s_totaldamage); m_offensePercentSpecial->setText(s_percentspecial); m_offensePercentNonMelee->setText(s_percentnonmelee); m_offenseAvgMelee->setText(s_avgmelee); m_offenseAvgSpecial->setText(s_avgspecial); m_offenseAvgNonMelee->setText(s_avgnonmelee); #ifdef DEBUGCOMBAT seqDebug("CombatWindow::updateOffense finished..."); #endif }
void CombatWindow::updateOffense() { #ifdef DEBUGCOMBAT printf("CombatWindow::updateOffense starting...\n"); #endif QString s_totaldamage; QString s_percentspecial; QString s_percentnonmelee; QString s_avgmelee; QString s_avgspecial; QString s_avgnonmelee; int iTotalDamage = 0; int iTotalHits = 0; double dPercentSpecial = 0.0; double dPercentNonmelee = 0.0; double dAvgMelee = 0.0; double dAvgSpecial = 0.0; double dAvgNonmelee = 0.0; int iMeleeDamage = 0; int iMeleeHits = 0; int iSpecialDamage = 0; int iSpecialHits = 0; int iNonmeleeDamage = 0; int iNonmeleeHits = 0; // empty the list so we can repopulate m_listview_offense->clear(); CombatOffenseRecord *pRecord; for(pRecord = m_combat_offense_list.first(); pRecord != 0; pRecord = m_combat_offense_list.next()) { int iType = pRecord->getType(); int iHits = pRecord->getHits(); int iMisses = pRecord->getMisses(); int iMinDamage = pRecord->getMinDamage(); int iMaxDamage = pRecord->getMaxDamage(); int iDamage = pRecord->getTotalDamage(); double dAvgDamage = (double)iDamage / (double)iHits; double dRatio = (double)iHits / (double)iMisses; QString s_type; s_type.sprintf("%s(%d)", (const char*)skill_name(iType), iType); QString s_hits; s_hits.setNum(iHits); QString s_misses; s_misses.setNum(iMisses); QString s_ratio; s_ratio = QString("%1 to 1").arg(dRatio); QString s_avgdamage; s_avgdamage.setNum(dAvgDamage); QString s_mindamage; s_mindamage.setNum(iMinDamage); QString s_maxdamage; s_maxdamage.setNum(iMaxDamage); QString s_damage; s_damage.setNum(iDamage); QListViewItem *pItem = new QListViewItem(m_listview_offense, s_type, s_hits, s_misses, s_ratio, s_avgdamage, s_mindamage, s_maxdamage, s_damage); m_listview_offense->insertItem(pItem); switch(iType) { case 0: // 1H Blunt case 1: // 1H Slashing case 2: // 2H Blunt case 3: // 2H Slashing case 28: // Hand To Hand case 36: // Piercing { iMeleeDamage += iDamage; iMeleeHits += iHits; break; } case 7: // Archery case 8: // Backstab case 10: // Bash case 21: // Dragon Punch case 23: // Eagle Strike case 26: // Flying Kick case 30: // Kick case 38: // Round Kick case 51: // Throwing case 52: // Tiger Claw { iSpecialDamage += iDamage; iSpecialHits += iHits; break; } default: { iNonmeleeDamage += iDamage; iNonmeleeHits += iHits; break; } } } iTotalDamage = iMeleeDamage + iSpecialDamage + iNonmeleeDamage; iTotalHits = iMeleeHits + iSpecialHits + iNonmeleeHits; dPercentSpecial = ((double)iSpecialDamage / (double)iTotalDamage) * 100.0; dPercentNonmelee = ((double)iNonmeleeDamage / (double)iTotalDamage) * 100.0; dAvgMelee = (double)iMeleeDamage / (double)iMeleeHits; dAvgSpecial = (double)iSpecialDamage / (double)iSpecialHits; dAvgNonmelee = (double)iNonmeleeDamage / (double)iNonmeleeHits; s_totaldamage.setNum(iTotalDamage); s_percentspecial.setNum(dPercentSpecial); s_percentnonmelee.setNum(dPercentNonmelee); s_avgmelee.setNum(dAvgMelee); s_avgspecial.setNum(dAvgSpecial); s_avgnonmelee.setNum(dAvgNonmelee); m_label_offense_totaldamage->setText(s_totaldamage); m_label_offense_percentspecial->setText(s_percentspecial); m_label_offense_percentnonmelee->setText(s_percentnonmelee); m_label_offense_avgmelee->setText(s_avgmelee); m_label_offense_avgspecial->setText(s_avgspecial); m_label_offense_avgnonmelee->setText(s_avgnonmelee); #ifdef DEBUGCOMBAT printf("CombatWindow::updateOffense finished...\n"); #endif }