Esempio n. 1
0
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();
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
    }
  }
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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 );

}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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();
}
Esempio n. 8
0
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);
}