void EQPlayer::updateLevel(const levelUpStruct *levelup) { QString totalExp; QString gainedExp; QString leftExp; QString needKills; QString tempStr; totalExp = Commanate(levelup->exp); gainedExp = Commanate((uint32_t) (levelup->exp - m_currentExp)); needKills = Commanate(((calc_exp( levelup->level, getPlayerRace (), getPlayerClass () ) - levelup->exp ) / ( levelup->exp > m_currentExp ? levelup->exp - m_currentExp : 1 ) ) ); tempStr = QString("Exp: %1 (%2) [%3]").arg(totalExp).arg(gainedExp).arg(needKills); emit expChangedStr (tempStr); m_defaultLevel = levelup->level; m_playerLevel = levelup->level; m_maxExp = calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ); emit expChangedInt( levelup->exp, calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ), calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ); m_currentExp = levelup->exp; m_validExp = true; // update the con table fillConTable(); }
void EQStatList::expAltChanged (int val, int min, int max) { if (!m_showStat[LIST_ALTEXP]) return; QString buf; m_statList[LIST_ALTEXP]->setText (1, Commanate((uint32_t) (val - min))); m_statList[LIST_ALTEXP]->setText (2, Commanate((uint32_t) (max - min))); buf = Commanate((uint32_t) ((val - min) / ((max - min)/100))) + " %"; m_statList[LIST_ALTEXP]->setText (3, buf); }
void MessageShell::player(const uint8_t* data) { const charProfileStruct* player = (const charProfileStruct*)data; QString message; message.sprintf("Name: '%s' Last: '%s'", player->name, player->lastName); m_messages->addMessage(MT_Player, message); message.sprintf("Level: %d", player->level); m_messages->addMessage(MT_Player, message); message.sprintf("PlayerMoney: P=%d G=%d S=%d C=%d", player->platinum, player->gold, player->silver, player->copper); m_messages->addMessage(MT_Player, message); message.sprintf("BankMoney: P=%d G=%d S=%d C=%d", player->platinum_bank, player->gold_bank, player->silver_bank, player->copper_bank); m_messages->addMessage(MT_Player, message); message.sprintf("CursorMoney: P=%d G=%d S=%d C=%d", player->platinum_cursor, player->gold_cursor, player->silver_cursor, player->copper_cursor); m_messages->addMessage(MT_Player, message); message.sprintf("SharedMoney: P=%d", player->platinum_shared); m_messages->addMessage(MT_Player, message); message = "Exp: " + Commanate(player->exp); m_messages->addMessage(MT_Player, message); message = "ExpAA: " + Commanate(player->altexp); m_messages->addMessage(MT_Player, message); int buffnumber; for (buffnumber=0;buffnumber<15;buffnumber++) { if (player->buffs[buffnumber].spellid && player->buffs[buffnumber].duration) { message.sprintf("You have buff %s duration left is %d in ticks.", (const char*)spell_name(player->buffs[buffnumber].spellid), player->buffs[buffnumber].duration); m_messages->addMessage(MT_Player, message); } } }
void MessageShell::player(const uint8_t* data) { const charProfileStruct* player = (const charProfileStruct*)data; QString message; message.sprintf("Name: '%s' Last: '%s'", player->name, player->lastName); m_messages->addMessage(MT_Player, message); message.sprintf("Level: %d", player->profile.level); m_messages->addMessage(MT_Player, message); message.sprintf("PlayerMoney: P=%d G=%d S=%d C=%d", player->profile.platinum, player->profile.gold, player->profile.silver, player->profile.copper); m_messages->addMessage(MT_Player, message); message.sprintf("BankMoney: P=%d G=%d S=%d C=%d", player->platinum_bank, player->gold_bank, player->silver_bank, player->copper_bank); m_messages->addMessage(MT_Player, message); message.sprintf("CursorMoney: P=%d G=%d S=%d C=%d", player->profile.platinum_cursor, player->profile.gold_cursor, player->profile.silver_cursor, player->profile.copper_cursor); m_messages->addMessage(MT_Player, message); message.sprintf("SharedMoney: P=%d", player->platinum_shared); m_messages->addMessage(MT_Player, message); message.sprintf("DoN Crystals: Radiant=%d Ebon=%d", player->currentRadCrystals, player->currentEbonCrystals); m_messages->addMessage(MT_Player, message); message = "Exp: " + Commanate(player->exp); m_messages->addMessage(MT_Player, message); message = "ExpAA: " + Commanate(player->expAA) + " (aa spent: " + Commanate(player->profile.aa_spent) + ", aa unspent: " + Commanate(player->profile.aa_unspent) + ")"; m_messages->addMessage(MT_Player, message); #if 0 // Format for the aa values used to 0-1000 for group, 0-2000 for raid, // but now it's different. Just drop it for now. %%% message = "GroupLeadAA: " + Commanate(player->expGroupLeadAA) + " (unspent: " + Commanate(player->groupLeadAAUnspent) + ")"; m_messages->addMessage(MT_Player, message); message = "RaidLeadAA: " + Commanate(player->expRaidLeadAA) + " (unspent: " + Commanate(player->raidLeadAAUnspent) + ")"; m_messages->addMessage(MT_Player, message); #endif message.sprintf("Group: %s %s %s %s %s %s", player->groupMembers[0], player->groupMembers[1], player->groupMembers[2], player->groupMembers[3], player->groupMembers[4], player->groupMembers[5]); m_messages->addMessage(MT_Player, message); int buffnumber; for (buffnumber=0;buffnumber<MAX_BUFFS;buffnumber++) { if (player->profile.buffs[buffnumber].spellid && player->profile.buffs[buffnumber].duration) { message.sprintf("You have buff %s duration left is %d in ticks.", (const char*)spell_name(player->profile.buffs[buffnumber].spellid), player->profile.buffs[buffnumber].duration); m_messages->addMessage(MT_Player, message); } } message = "LDoN Earned Guk Points: " + Commanate(player->ldon_guk_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Mira Points: " + Commanate(player->ldon_mir_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned MMC Points: " + Commanate(player->ldon_mmc_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Ruj Points: " + Commanate(player->ldon_ruj_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Tak Points: " + Commanate(player->ldon_tak_points); m_messages->addMessage(MT_Player, message); message = "LDoN Unspent Points: " + Commanate(player->ldon_avail_points); m_messages->addMessage(MT_Player, message); }
void ExperienceWindow::updateAverage( ) { static bool force = true; // don't worry about updating the window if it's not even visible, // unless if ( !force && !isVisible() ) return; force = false; // calculate the earliest time to accept time_t time_cutoff = 0; double total_exp = 0; if (m_timeframe) time_cutoff = time(0) - (m_timeframe*60); // start at the end, add up the xp & mob count until we hit the // beginning of list // or the time cutoff QListIterator<ExperienceRecord> it(m_exp_list); int mob_count = 0; time_t first_kill_time = 0; it.toLast(); while ( it.current() && it.current()->getTime() >= time_cutoff ) { total_exp+=it.current()->getExpGained(); mob_count++; if ( it.current()->getTime() < first_kill_time || !first_kill_time ) first_kill_time = it.current()->getTime(); --it; } // calculate the number of minutes that have passed double minutes = ( time(0) - first_kill_time ) / 60; if (!first_kill_time || minutes < 1) minutes = 0; // calculate and display the averages QString s_avg_exp; QString s_play_time; double avg_exp; if (!m_timeframe) { avg_exp = ( minutes ? total_exp/minutes : 0 ); s_avg_exp=Commanate( (uint32_t)(avg_exp * m_ratio) ); s_play_time.setNum( minutes ); s_play_time+=" min"; } else { avg_exp = total_exp/m_timeframe; s_avg_exp=Commanate( (uint32_t)(avg_exp * m_ratio) ); s_play_time.setNum( m_timeframe ); s_play_time+=" min"; } if (m_ratio == 1) m_experience_rate_label->setText( "Experience Rate (per minute):" ); else if (m_ratio == 60) m_experience_rate_label->setText( "Experience Rate (per hour):" ); QString s_total_exp; s_total_exp=Commanate( (uint32_t)total_exp ); QString s_mob_count; s_mob_count.setNum( (uint32_t)mob_count ); QString s_mob_avg_exp; if (mob_count) s_mob_avg_exp=Commanate( (uint32_t)(total_exp/mob_count) ); else s_mob_avg_exp="0"; int exp_remaining; if ( (m_player->getMaxExp() > m_player->getCurrentExp()) && (m_player->getCurrentExp() > 0)) { /* since currentExp is calculated before maxExp when the decoder is broken, sometimes maxExp ends up set to zero or undefined. This can result in strange exp_remaining values, so some sanity checks have been added. cpphack */ exp_remaining = m_player->getMaxExp() - m_player->getCurrentExp(); } else exp_remaining = 0; QString s_exp_remaining; /* This now checks if the exp value is sensible, and if not it is displayed as "unknown". cpphack */ if (exp_remaining > 0) s_exp_remaining=Commanate( exp_remaining ); else s_exp_remaining="unknown"; QString s_kills_to_level; if (mob_count) s_kills_to_level.setNum( exp_remaining / (total_exp/mob_count) ); else s_kills_to_level="unknown"; int time_to_level; (!avg_exp) ? time_to_level = 0 : time_to_level = (int)(exp_remaining / avg_exp); QString s_time_to_level; if ( avg_exp ) { if (time_to_level > 120) s_time_to_level = QString("%1 hours, %2 minutes") .arg( (int)(time_to_level/60)).arg( time_to_level % 60 ); else if (time_to_level > 60) s_time_to_level = QString("1 hour, %2 minutes") .arg( time_to_level % 60 ); else s_time_to_level = QString("%1 minutes").arg( (int)time_to_level ); } else s_time_to_level="unknown"; m_total_received->setText( s_total_exp ); m_mob_count->setText( s_mob_count ); m_average_per_mob->setText( s_mob_avg_exp ); m_experience_remaining->setText( s_exp_remaining ); m_play_time->setText( s_play_time ); m_experience_rate->setText( s_avg_exp ); m_kills_to_level->setText( s_kills_to_level ); m_time_to_level->setText( s_time_to_level ); }
void EQPlayer::updateExp(const expUpdateStruct* exp) { QString totalExp; QString gainedExp; QString leftExp; QString needKills; QString tempStr; if (m_currentExp > 0) { totalExp = Commanate(exp->exp); gainedExp = Commanate((uint32_t) (exp->exp - m_currentExp)); needKills = Commanate((( calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) - exp->exp ) / ( exp->exp > m_currentExp ? exp->exp - m_currentExp : 1 ) ) + 1 ); leftExp = Commanate((( calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ) - ( calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ) ) ) - ( exp->exp - ( calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ) ) ) ); tempStr = QString("Exp: %1 (%2) [%3]").arg(totalExp).arg(gainedExp).arg(needKills); emit expChangedStr (tempStr); tempStr = QString("Exp: %1 (%2)(%3) left %4").arg(totalExp).arg(gainedExp).arg(needKills).arg(leftExp); emit msgReceived(tempStr); if (m_freshKill) { emit expGained( m_lastSpawnPlayerKilled.name, m_lastSpawnPlayerKilled.level, exp->exp - m_currentExp, m_longZoneName); // have gained experience for the kill, it's no longer fresh m_freshKill = false; } else if ((m_lastSpellOnId == 0x0184) || // Resuscitate (m_lastSpellOnId == 0x0187) || // Revive (does it or don't it?) (m_lastSpellOnId == 0x0188) || // Resurrection (m_lastSpellOnId == 0x02f4) || // Resurrection Effects (m_lastSpellOnId == 0x02f5) || // Resurrection Effect (m_lastSpellOnId == 0x03e2) || // Customer Service Resurrection (m_lastSpellOnId == 0x05f4)) // Reviviscence { emit expGained( spell_name(m_lastSpellOnId), 0, // level of caster would only confuse things further exp->exp - m_currentExp, m_longZoneName); } else emit expGained( "Unknown", // Randomly blessed with xp? 0, // don't know what gave it so, level 0 exp->exp - m_currentExp, m_longZoneName ); emit stsMessage(tempStr); } emit expChangedInt ( exp->exp, calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ), calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ); m_currentExp = exp->exp; m_validExp = true; }
void EQPlayer::backfill(const playerProfileStruct* player) { QString messag; printf("EQPlayer::backfill():\n"); messag.sprintf("Zone: Name='%s' Last='%s'\n", player->name, player->lastName); emit msgReceived(messag); messag.sprintf("Zone: Level: %d\n", player->level); emit msgReceived(messag); messag.sprintf("Zone: PlayerMoney: P=%d G=%d S=%d C=%d\n", player->platinum, player->gold, player->silver, player->copper); emit msgReceived(messag); messag.sprintf("Zone: BankMoney: P=%d G=%d S=%d C=%d\n", player->platinumBank, player->goldBank, player->silverBank, player->copperBank); emit msgReceived(messag); memcpy(&m_thePlayer, player, sizeof(playerProfileStruct)); m_playerLevel = player->level; m_playerRace = player->race; m_playerClass = player->class_; setUseDefaults(false); setPlayerName(player->name); setPlayerLastName(player->lastName); setPlayerLevel(player->level); setPlayerRace(player->race); setPlayerClass(player->class_); messag = "Exp: " + Commanate(player->exp); // Due to the delayed decode, we must reset // maxplayer on zone and accumulate all totals. m_maxSTR += player->STR; m_maxSTA += player->STA; m_maxCHA += player->CHA; m_maxDEX += player->DEX; m_maxINT += player->INT; m_maxAGI += player->AGI; m_maxWIS += player->WIS; emit statChanged (LIST_STR, m_maxSTR, m_maxSTR); emit statChanged (LIST_STA, m_maxSTA, m_maxSTA); emit statChanged (LIST_CHA, m_maxCHA, m_maxCHA); emit statChanged (LIST_DEX, m_maxDEX, m_maxDEX); emit statChanged (LIST_INT, m_maxINT, m_maxINT); emit statChanged (LIST_AGI, m_maxAGI, m_maxAGI); emit statChanged (LIST_WIS, m_maxWIS, m_maxWIS); m_maxMana = calcMaxMana( m_maxINT, m_maxWIS, m_playerClass, m_playerLevel ) + m_plusMana; emit manaChanged(m_thePlayer.MANA, m_maxMana); // need max mana uint32_t playerExp = player->exp; if (playerExp > m_currentExp) m_currentExp = playerExp; else playerExp = m_currentExp; m_maxExp = calc_exp(m_playerLevel,m_playerRace,m_playerClass); emit expChangedStr (messag); emit expChangedInt ( playerExp, calc_exp(m_playerLevel-1, m_playerRace, m_playerClass), calc_exp(m_playerLevel, m_playerRace, m_playerClass) ); // Merge in our new skills... for (int a = 0; a < MAX_KNOWN_SKILLS; a++) { if ((m_playerSkills[a] == 255) || // not valid (player->skills[a] > m_playerSkills[a])) // or a higher value m_playerSkills[a] = player->skills[a]; emit addSkill (a, m_playerSkills[a]); } // Merge in our new languages... for (int a = 0; a < MAX_KNOWN_LANGS; a++) { if ((m_playerLanguages[a] == 255) || (player->languages[a] > m_playerLanguages[a])) m_playerLanguages[a] = player->languages[a]; emit addLanguage (a, m_playerLanguages[a]); } m_validAttributes = true; m_validMana = true; m_validExp = true; // update the con table fillConTable(); }
void MessageShell::player(const uint8_t* data) { const charProfileStruct* player = (const charProfileStruct*)data; QString message; message.sprintf("Name: '%s' Last: '%s' Title: '%s' Suffix: '%s'", player->name, player->lastName, player->title, player->suffix); m_messages->addMessage(MT_Player, message); message.sprintf("Level: %d", player->level); m_messages->addMessage(MT_Player, message); message.sprintf("PlayerMoney: P=%d G=%d S=%d C=%d", player->platinum, player->gold, player->silver, player->copper); m_messages->addMessage(MT_Player, message); message.sprintf("BankMoney: P=%d G=%d S=%d C=%d", player->platinum_bank, player->gold_bank, player->silver_bank, player->copper_bank); m_messages->addMessage(MT_Player, message); message.sprintf("CursorMoney: P=%d G=%d S=%d C=%d", player->platinum_cursor, player->gold_cursor, player->silver_cursor, player->copper_cursor); m_messages->addMessage(MT_Player, message); message.sprintf("SharedMoney: P=%d", player->platinum_shared); m_messages->addMessage(MT_Player, message); message.sprintf("DoN Crystals: Radiant=%d Ebon=%d", player->currentRadCrystals, player->currentEbonCrystals); m_messages->addMessage(MT_Player, message); message = "Exp: " + Commanate(player->exp); m_messages->addMessage(MT_Player, message); message = "ExpAA: " + Commanate(player->expAA) + " (aa spent: " + Commanate(player->aa_spent) + ", aa unspent: " + Commanate(player->aa_unspent) + ")"; m_messages->addMessage(MT_Player, message); message.sprintf("GroupLeadAA: %.1f%% (unspent: %d)", (player->expGroupLeadAA)/10.0, player->groupLeadAAUnspent); m_messages->addMessage(MT_Player, message); message.sprintf("RaidLeadAA: %.1f%% (unspent: %d)", (player->expRaidLeadAA)/20.0, player->raidLeadAAUnspent); m_messages->addMessage(MT_Player, message); message.sprintf("Group: %s %s %s %s %s %s", player->groupMembers[0], player->groupMembers[1], player->groupMembers[2], player->groupMembers[3], player->groupMembers[4], player->groupMembers[5]); m_messages->addMessage(MT_Player, message); int buffnumber; for (buffnumber=0;buffnumber<MAX_BUFFS;buffnumber++) { if (player->buffs[buffnumber].spellid && player->buffs[buffnumber].duration) { message.sprintf("You have buff %s duration left is %d in ticks.", (const char*)spell_name(player->buffs[buffnumber].spellid), player->buffs[buffnumber].duration); m_messages->addMessage(MT_Player, message); } } message = "LDoN Earned Guk Points: " + Commanate(player->ldon_guk_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Mira Points: " + Commanate(player->ldon_mir_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned MMC Points: " + Commanate(player->ldon_mmc_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Ruj Points: " + Commanate(player->ldon_ruj_points); m_messages->addMessage(MT_Player, message); message = "LDoN Earned Tak Points: " + Commanate(player->ldon_tak_points); m_messages->addMessage(MT_Player, message); message = "LDoN Unspent Points: " + Commanate(player->ldon_avail_points); m_messages->addMessage(MT_Player, message); }