PaDaS
							Camatar de Trib
							  Din: Bucuresti / Berceni 
							Inregistrat: acum 20 ani 
							Postari: 1501
						  
					 | 
				 
			 
		 | 
		
			
				
					
						asta e patchul nou de honor , e 3262 , acum pe server e ultima rev 3262.
  Index: src/game/Formulas.h =================================================================== --- src/game/Formulas.h    (revision 3262) +++ src/game/Formulas.h    (working copy) @@ -72,19 +72,42 @@          // then when player save, save it!!!          inline float HonorableKillPoints( Player *killer, Player *victim )          { -            int total_kills  = killer->CalculateTotalKills(victim); -            //int k_rank       = killer->CalculateHonorRank( killer->GetTotalHonor() ); -            uint32 v_rank    = victim->CalculateHonorRank( victim->GetTotalHonor() ); -            uint32 k_level   = killer->getLevel(); -            //int v_level      = victim->getLevel(); -            float diff_honor = (victim->GetTotalHonor() /(killer->GetTotalHonor()+1))+1; -            float diff_level = (victim->getLevel()*(1.0/( killer->getLevel() ))); +            //New formulas by Zhivoi (Greetings from Russia) +            int total_kills = killer->CalculateTotalKills(victim); +            float f; +            if(total_kills < 10) f = (10 - (float)total_kills)*0.1; +            else f = 0.0; +             +            uint32 k_grey = 0; +            uint32 k_level = killer->getLevel(); +            uint32 v_level = victim->getLevel(); +             +            if(k_level <= 5) +                 k_grey = 0; +            else if( k_level <= 39 ) +                k_grey = k_level - 5 - k_level/10; +            else +                k_grey = k_level - 1 - k_level/5;  +             +            float diff_level;  +            if((k_level - k_grey) != 0) +                diff_level = ((float)(v_level - k_grey)) / ((float)(k_level - k_grey)); +            else return 999;    //Check, in character_kill we will see, if working incorrectly +             +            if(diff_level > 2.0) diff_level = 2.0; +            if(diff_level <= 0.0) return 888; //For Debug +             +            int32 v_rank = (victim->GetHonorRank() - 4); //We cut all up to the first positive rank +            if(v_rank < 0) v_rank = 0; +            if(v_rank < 0) return 777;
  -            int f = (4 - total_kills) >= 0 ? (4 - total_kills) : 0; -            int honor_points = int(((float)(f * 0.25)*(float)((k_level+(v_rank*5+1))*(1+0.05*diff_honor)*diff_level))); -            return (honor_points <= 400 ? honor_points : 400); +            float honor_points = f * diff_level * (190 + v_rank*10);  +            //float honor_points = f * diff_level * (190);  +            honor_points *= ((float)k_level) / 60.0; //factor of dependence on levels of the killer + +            if(honor_points > 660) return 666; //For Debug +            else return honor_points;           } -      }
       namespace Combat Index: src/game/Level0.cpp =================================================================== --- src/game/Level0.cpp    (revision 3262) +++ src/game/Level0.cpp    (working copy) @@ -229,7 +229,7 @@ {      uint32 dishonorable_kills       = m_session->GetPlayer()->GetUInt32Value(PLAYER_FIELD_LIFETIME_DISHONORABLE_KILLS);      uint32 honorable_kills          = m_session->GetPlayer()->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS); -    uint32 highest_rank             = (m_session->GetPlayer()->GetHonorHighestRank() < 16)? m_session->GetPlayer()->GetHonorHighestRank() : 0; +    uint32 highest_rank             = (m_session->GetPlayer()->GetHonorHighestRank() > 4) ? m_session->GetPlayer()->GetHonorHighestRank() - 4 : 0;      uint32 today_honorable_kills    = (uint16)m_session->GetPlayer()->GetUInt32Value(PLAYER_FIELD_SESSION_KILLS);      uint32 today_dishonorable_kills = (uint16)(m_session->GetPlayer()->GetUInt32Value(PLAYER_FIELD_SESSION_KILLS)>>16);      uint32 yesterday_kills          = m_session->GetPlayer()->GetUInt32Value(PLAYER_FIELD_YESTERDAY_KILLS); @@ -283,13 +283,17 @@
       if ( m_session->GetPlayer()->GetTeam() == ALLIANCE )      { -        rank_name = alliance_ranks[ m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) ]; +        if (m_session->GetPlayer()->CalculateHonorRank(m_session->GetPlayer()->GetTotalHonor()) > 4) +            rank_name = alliance_ranks[ m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) - 4 ]; +        else rank_name = alliance_ranks[0];          hrank_name = alliance_ranks[ highest_rank ];      }      else      if ( m_session->GetPlayer()->GetTeam() == HORDE )      { -        rank_name = horde_ranks[ m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) ]; +        if (m_session->GetPlayer()->CalculateHonorRank(m_session->GetPlayer()->GetTotalHonor()) > 4) +            rank_name = horde_ranks[ m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) - 4 ]; +        else rank_name = horde_ranks[0];          hrank_name = horde_ranks[ highest_rank ];      }      else @@ -297,7 +301,8 @@          rank_name = LANG_NO_RANK;      }
  -    PSendSysMessage(LANG_RANK, rank_name.c_str(), m_session->GetPlayer()->GetName(), m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() )); +    PSendSysMessage(LANG_RANK, rank_name.c_str(), m_session->GetPlayer()->GetName(),  +        (m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) > 4)?m_session->GetPlayer()->CalculateHonorRank( m_session->GetPlayer()->GetTotalHonor() ) - 4 : 0);      PSendSysMessage(LANG_HONOR_TODAY, today_honorable_kills, today_dishonorable_kills);      PSendSysMessage(LANG_HONOR_YESTERDAY, yesterday_kills, yesterday_honor);      PSendSysMessage(LANG_HONOR_THIS_WEEK, this_week_kills, this_week_honor); Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp    (revision 3262) +++ src/game/Player.cpp    (working copy) @@ -4151,18 +4151,21 @@      uint32 thisWeekKills = 0;      uint32 lastWeekKills = 0;
  -    float total_honor = 0; -    float yesterdayHonor = 0; -    float thisWeekHonor = 0; -    float lastWeekHonor = 0; +    float total_honor = 0.0; +    float yesterdayHonor = 0.0; +    float thisWeekHonor = 0.0; +    float lastWeekHonor = 0.0; +    float total_last_weekend_honor = 0.0; //Total honor (until last weekend)
  +      time( &rawtime );      now = localtime( &rawtime );
       today = ((uint32)(now->tm_year << 16)|(uint32)(now->tm_yday));
       Yesterday     = today - 1; -    ThisWeekBegin = today - now->tm_wday; +    ThisWeekBegin = today - (now->tm_wday - 3); +    if(ThisWeekBegin > today) ThisWeekBegin -= 7;      ThisWeekEnd   = ThisWeekBegin + 7;      LastWeekBegin = ThisWeekBegin - 7;      LastWeekEnd   = LastWeekBegin + 7; @@ -4181,7 +4184,7 @@              if(fields[0].GetUInt32() == HONORABLE_KILL)              {                  lifetime_honorableKills++; -                //total_honor += fields[1].GetFloat(); +                total_honor += fields[1].GetFloat();
                   if( date == today)                  { @@ -4206,14 +4209,17 @@                  //All honor points until last week                  if( date < LastWeekEnd )                  { -                    total_honor += fields[1].GetFloat(); +                    total_last_weekend_honor += fields[1].GetFloat();                  }
               }              else if(fields[0].GetUInt32() == DISHONORABLE_KILL)              {                  lifetime_dishonorableKills++; -                //total_honor -= fields[1].GetFloat(); +                total_honor -= fields[1].GetFloat(); +                 +                if(total_honor < -2500.0) total_honor = -2500.0; +                if(total_honor > 64999.0) total_honor = 64999.0;
                   if( date == today)                  { @@ -4223,7 +4229,8 @@                  //All honor points until last week                  if( date < LastWeekEnd )                  { -                    total_honor -= fields[1].GetFloat(); +                    total_last_weekend_honor -= fields[1].GetFloat(); +                    if(total_last_weekend_honor < -2500.0) total_last_weekend_honor = -2500.0;                  }              }          } @@ -4232,14 +4239,15 @@          delete result;      }
  -    //Store Total Honor points... +    //Store Total Honor points...      SetTotalHonor(total_honor); +    SetWeekEndHonor(total_last_weekend_honor);
       //RIGHEST RANK      //If the new rank is highest then the old one, then m_highest_rank is updated -    if( CalculateHonorRank(total_honor) > GetHonorHighestRank() ) +    if( CalculateHonorRank(total_last_weekend_honor) > GetHonorHighestRank() )      { -        SetHonorHighestRank( CalculateHonorRank(total_honor) ); +        SetHonorHighestRank( CalculateHonorRank(total_last_weekend_honor) );      }
       //RATING @@ -4248,16 +4256,28 @@      //STANDING      SetHonorLastWeekStanding( MaNGOS::Honor::CalculeStanding(this) );
  -    //TODO Fix next rank bar... it is not working fine! For while it be set with the total honor points...      //NEXT RANK BAR      //PLAYER_FIELD_HONOR_BAR -    SetUInt32Value(PLAYER_FIELD_BYTES2, (uint32)( (total_honor < 0) ? 0: total_honor) ); +//    SetUInt32Value(PLAYER_FIELD_BYTES2, (uint32)( (total_honor < 0) ? 0: total_honor) );
  -    //RANK (Patent) -    if( CalculateHonorRank(total_honor) ) -        SetUInt32Value(PLAYER_BYTES_3, (( CalculateHonorRank(total_honor) << 24) + 0x04000000) + (m_drunk & 0xFFFE) + getGender()); -    else -        SetUInt32Value(PLAYER_BYTES_3, (m_drunk & 0xFFFE) + getGender()); +    if( total_honor <= 0.00 ) +    { +        SetUInt32Value(PLAYER_FIELD_BYTES2, 0 ); +    } +    else +    { +        float honor_bar; +        if( total_honor <= 2000 ) +            honor_bar = total_honor * 0.1275; +        else if( total_honor <= 5000 ) +            honor_bar = (total_honor-2000) * 0.085; +        else +            honor_bar = ( (uint32)total_honor % 5000) * 0.051; +         +        SetUInt32Value(PLAYER_FIELD_BYTES2, (uint32)honor_bar ); +    } +    //RANK  +        SetUInt32Value(PLAYER_BYTES_3, (CalculateHonorRank(total_last_weekend_honor) << 24) + (m_drunk & 0xFFFE) + getGender());
       //TODAY      SetUInt32Value(PLAYER_FIELD_SESSION_KILLS, (today_dishonorableKills << 16) + today_honorableKills ); @@ -4273,7 +4293,6 @@      SetUInt32Value(PLAYER_FIELD_LAST_WEEK_RANK, GetHonorLastWeekStanding());
       //LIFE TIME -    SetUInt32Value(PLAYER_FIELD_SESSION_KILLS, (lifetime_dishonorableKills << 16) + lifetime_honorableKills );      SetUInt32Value(PLAYER_FIELD_LIFETIME_DISHONORABLE_KILLS, lifetime_dishonorableKills);      SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, lifetime_honorableKills);      //TODO: Into what field we need to set it? Fix it! @@ -4282,19 +4301,21 @@
  uint32 Player::GetHonorRank() const { -    return CalculateHonorRank(m_total_honor_points); +    return CalculateHonorRank(m_honor_points_lastweek); }
  -//What is Player's rank... private, scout... +//What is Player's rank uint32 Player::CalculateHonorRank(float honor_points) const { -    int rank = 0; - -    if(honor_points <=    0.00) rank = 0; else -        if(honor_points <  2000.00) rank = 1; +    uint32 rank = 0; +    if        (honor_points <= -2000.0) rank = 1;    // Pariah (-4) +    else if    (honor_points <= -1000.0) rank = 2;    // Outlaw (-3) +    else if    (honor_points <= -500.0) rank = 3;    // Exiled (-2) +    else if    (honor_points < 0.0) rank = 4;        // Dishonored (-1) +    else if    (honor_points == 0.0) rank = 0;        // No rank (0) +    else if    (honor_points <= 2000.0) rank = 5;    // First rank      else -        rank = ( (int)(honor_points / 5000) + 1); - +            rank = ((int)(honor_points / 5000) + 6);      return rank; }
  @@ -4302,9 +4323,16 @@ int Player::CalculateTotalKills(Player *pVictim) const {      int total_kills = 0; - -    QueryResult *result = sDatabase.PQuery("SELECT count(*) as cnt FROM `character_kill` WHERE `guid` = '%u' AND `creature_template` = '%u'", GetGUIDLow(), pVictim->GetEntry()); - +     +    //Change GetEntry to GetGUIDLow for Victim & Added Today kills (from wowwiki) +    time_t rawtime; +    struct tm * now; +    uint32 today = 0; +    time( &rawtime ); +    now = localtime( &rawtime ); +    today = ((uint32)(now->tm_year << 16)|(uint32)(now->tm_yday)); +    //QueryResult *result = sDatabase.PQuery("SELECT `honor` FROM `character_kill` WHERE `guid` = '%u' AND `creature_template` = '%u' AND `date` = '%u'", GetGUIDLow(), pVictim->GetGUIDLow(), (uint32)today);  +    QueryResult *result = sDatabase.PQuery("SELECT count(*) as cnt FROM `character_kill` WHERE `guid` = '%u' AND `creature_template` = '%u' AND `date` = '%u'", GetGUIDLow(), pVictim->GetGUIDLow(), (uint32)today);      if(result)      {          Field *fields = result->Fetch(); @@ -4315,7 +4343,7 @@ }
  //How much honor Player gains/loses killing uVictim -void Player::CalculateHonor(Unit *uVictim) +void Player::CalculateHonor(Unit *uVictim, float honor_mn) {      float parcial_honor_points = 0;      int kill_type = 0; @@ -4333,6 +4361,15 @@          {              parcial_honor_points = MaNGOS::Honor: ishonorableKillPoints( getLevel() );              kill_type = DISHONORABLE_KILL; +///*******************************************ADDED For "Flying away DK" +            WorldPacket data;  +            data.Initialize(SMSG_PVP_CREDIT); +            data << (uint32) 0; // honor points     +            data << (uint64) cVictim->GetGUID(); // guid civilian victim +            //uint32 v_rank  = cVictim->GetHonorRank(); +            //data << (uint32) (v_rank); +            this->GetSession()->SendPacket(&data); +///*******************************************END              savekill = true;          }      } @@ -4342,15 +4379,34 @@          Player *pVictim = (Player *)uVictim;
           if( GetTeam() == pVictim->GetTeam() ) return; - -        if( getLevel() < (pVictim->getLevel()+5) ) +        //Gray Level +        int32 pl_grey = 0; +        int32 pl_level = getLevel(); +        if( pl_level <= 5 ) +                 pl_grey = 0; +            else if( pl_level <= 39 ) +                pl_grey = pl_level - 5 - pl_level/10; +            else +                pl_grey = pl_level - 1 - pl_level/5;  +        if( pVictim->getLevel() > pl_grey )          {              parcial_honor_points = MaNGOS::Honor::HonorableKillPoints( this, pVictim ); +            parcial_honor_points *= honor_mn;              kill_type = HONORABLE_KILL; +///*******************************************ADDED For "Flying away rank" +            WorldPacket data;  +            data.Initialize(SMSG_PVP_CREDIT); +            data << (uint32) parcial_honor_points; // honor points     +            // If guid=0, in combatlog: You have been awarded %u honor points. +            // If guid != 0, in combatlog - player_name dies, honorable kill Rank: rank_name (Estimated Honor Points: %u) +            data << (uint64) pVictim->GetGUID(); // guid victim +            uint32 v_rank  = pVictim->GetHonorRank(); +            data << (uint32) (v_rank); +            this->GetSession()->SendPacket(&data); +///*******************************************END              savekill = true;          }      } -      if (savekill)      {          time_t rawtime; @@ -4360,8 +4416,8 @@          now = localtime( &rawtime );          today = ((uint32)(now->tm_year << 16)|(uint32)(now->tm_yday));
  -        sDatabase.PExecute("INSERT INTO `character_kill` (`guid`,`creature_template`,`honor`,`date`,`type`) VALUES (%u, %u, %f, %u, %u)", (uint32)GetGUIDLow(), (uint32)uVictim->GetEntry(), (float)parcial_honor_points, (uint32)today, (uint8)kill_type); - +        // Change GetEntry to GetGUIDLow for Victim +        sDatabase.PExecute("INSERT INTO `character_kill` (`guid`,`creature_template`,`honor`,`date`,`type`) VALUES (%u, %u, %f, %u, %u)", (uint32)GetGUIDLow(), (uint32)uVictim->GetGUIDLow(), (float)parcial_honor_points, (uint32)today, (uint8)kill_type);          UpdateHonor();      } } @@ -7093,7 +7149,7 @@          }          if( pProto->RequiredSpell != 0 && !HasSpell( pProto->RequiredSpell ) )              return false; -        if( GetHonorRank() < pProto->RequiredHonorRank ) +        if( GetHonorHighestRank() < pProto->RequiredHonorRank ) //Change to Highest Rank ( Old GetHonorRank() )              return false;          if( getLevel() < pProto->RequiredLevel )              return false; @@ -7125,7 +7181,7 @@          }          if( pProto->RequiredSpell != 0 && !HasSpell( pProto->RequiredSpell ) )              return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; -        if( GetHonorRank() < pProto->RequiredHonorRank ) +        if( GetHonorHighestRank() < pProto->RequiredHonorRank ) //Change to Highest Rank ( Old GetHonorRank() )              return EQUIP_ITEM_RANK_NOT_ENOUGH;          /*if( GetReputation() < pProto->RequiredReputation )          return EQUIP_ITEM_REPUTATION_NOT_ENOUGH; Index: src/game/Player.h =================================================================== --- src/game/Player.h    (revision 3262) +++ src/game/Player.h    (working copy) @@ -1048,13 +1048,17 @@          /***                  HONOR SYSTEM                     ***/          /*********************************************************/          void UpdateHonor(); -        void CalculateHonor(Unit *pVictim); +//        void CalculateHonor(Unit *pVictim); //Changed for GroupHonor +        void CalculateHonor(Unit *pVictim, float); //Changed for GroupHonor          uint32 CalculateHonorRank(float honor) const;          uint32 GetHonorRank() const;          int  CalculateTotalKills(Player *pVictim) const;          //Acessors of total honor points          void SetTotalHonor(float total_honor_points) { m_total_honor_points = total_honor_points; };          float GetTotalHonor(void) const { return m_total_honor_points; }; +        void SetWeekEndHonor(float total_week_honor_points) { m_honor_points_lastweek = total_week_honor_points; }; +        float GetWeekEndHonor(void) const { return m_honor_points_lastweek; }; +          //Acessors of righest rank          uint32 GetHonorHighestRank() const { return m_highest_rank; }          void SetHonorHighestRank(uint32 hr) { m_highest_rank = hr; } @@ -1308,6 +1312,9 @@          std::deque<uint32> m_TaxiDestinations;
           float m_total_honor_points; +        //Added by Zhivoi +        float m_honor_points_lastweek; //For calculate rang +          float m_rating;          uint32 m_highest_rank;          int32 m_standing; Index: src/game/Unit.cpp =================================================================== --- src/game/Unit.cpp    (revision 3262) +++ src/game/Unit.cpp    (working copy) @@ -421,13 +421,13 @@          if(player)          {              float honordiff = player->GetTotalHonor(); -            player->CalculateHonor(pVictim);              honordiff -= player->GetTotalHonor();
               player->CalculateReputation(pVictim);
               if(!PvP)              { +                player->CalculateHonor(pVictim,1.0); //Civilian                  DEBUG_LOG("DealDamageIsPvE" ;                  uint32 xp = MaNGOS::XP::Gain(player, pVictim);
  @@ -467,6 +467,64 @@                  if(xp || honordiff < 0)                      ProcDamageAndSpell(pVictim,PROC_FLAG_KILL_XP_GIVER,PROC_FLAG_NONE);              } +            ///// HONOR PARTY +            else +            { +                Group *pGroup = player->groupInfo.group; +                if(pGroup) +                { +                    uint32 party_level = 0; //party level +                    uint32 party_grey = 0;    //party grey level  +                    int32 party_membcount = pGroup->GetMembersCount(); //Members + +                    for (uint32 i = 0; i < pGroup->GetMembersCount(); i++) +                    { +                        Player *pGroupGuy = objmgr.GetPlayer(pGroup->GetMemberGUID(i)); +                        if(    (!pGroupGuy) ||    //Player +                            (pVictim->GetDistanceSq(pGroupGuy) > sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE)) || //Distance +                            (!pGroupGuy->isAlive()) )    //Died +                        { +                            party_membcount-=1; +                            continue; +                        } +                        //We take only alive players, which beside +                        if(i+1) //check   +                            party_level uint32)((float)((party_level*i)+pGroupGuy->getLevel()))/((float)(i+1)); +                        else pGroupGuy->CalculateHonor(pVictim,10.0);    //FOR DEBUG +                    } + +                    if( party_level <= 10 ) +                        party_grey = 0; +                    else party_grey = party_level * 0.9; +                     +                    for (uint32 i = 0; i < pGroup->GetMembersCount(); i++) +                    { +                        Player *pGroupGuy = objmgr.GetPlayer(pGroup->GetMemberGUID(i)); +                        if(!pGroupGuy) //No Player +                        { +                            continue; +                        } +                        if(pVictim->GetDistanceSq(pGroupGuy) > sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE)) //Distance too greater +                        { +                            continue; +                        } +                        if(!pGroupGuy->isAlive()) //Player has died +                        { +                            continue; +                        } +                        //if all cheks passed - give honor for this player +                        if(pGroupGuy->getLevel() > party_grey) +                        { +                            if(party_membcount<1) party_membcount=1; +                            pGroupGuy->CalculateHonor(pVictim,(float)(1.0/((float)party_membcount))); +                        } +                    } +                } +                else //No Group +                { +                    player->CalculateHonor(pVictim,1.0);  +                } +            }           }          else          {
  _______________________________________  Hub   Reteaua   Nebuna  :  reneb.no-ip.org Camatar de trib -  TBC in curand pe MilenniuM.ro BOTD - All I leave behind is the breath of the dying! WoW addiction is a weapon of mass destruction
  
					 | 
				 
			 
		 |