mirror of
https://github.com/mangosfour/server.git
synced 2025-12-17 16:37:00 +00:00
One more attempt to fix free talent points amount
This commit is contained in:
parent
ef65518690
commit
2884b06b0a
4 changed files with 39 additions and 23 deletions
|
|
@ -693,7 +693,7 @@ void WorldSession::HandleLearnPreviewTalentsPet( WorldPacket & recv_data )
|
||||||
|
|
||||||
recv_data >> talentId >> talentRank;
|
recv_data >> talentId >> talentRank;
|
||||||
|
|
||||||
_player->LearnPetTalent(guid, talentId, talentRank, true);
|
_player->LearnPetTalent(guid, talentId, talentRank);
|
||||||
}
|
}
|
||||||
|
|
||||||
_player->SendTalentsInfoData(true);
|
_player->SendTalentsInfoData(true);
|
||||||
|
|
|
||||||
|
|
@ -19764,7 +19764,7 @@ void Player::BuildEnchantmentsInfoData(WorldPacket *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::LearnTalent(uint32 talentId, uint32 talentRank, bool skipPrevRanks)
|
void Player::LearnTalent(uint32 talentId, uint32 talentRank)
|
||||||
{
|
{
|
||||||
uint32 CurTalentPoints = GetFreeTalentPoints();
|
uint32 CurTalentPoints = GetFreeTalentPoints();
|
||||||
|
|
||||||
|
|
@ -19788,12 +19788,23 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank, bool skipPrevRanks)
|
||||||
if( (getClassMask() & talentTabInfo->ClassMask) == 0 )
|
if( (getClassMask() & talentTabInfo->ClassMask) == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// check for LearnPreviewTalents case
|
// find current max talent rank
|
||||||
if(skipPrevRanks && (CurTalentPoints < (talentRank + 1)))
|
int32 curtalent_maxrank = 0;
|
||||||
|
for(int32 k = 4; k > -1; --k)
|
||||||
|
{
|
||||||
|
if(talentInfo->RankID[k] && HasSpell(talentInfo->RankID[k]))
|
||||||
|
{
|
||||||
|
curtalent_maxrank = k + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we already have same or higher talent rank learned
|
||||||
|
if(curtalent_maxrank >= (talentRank + 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// prevent skip talent ranks (cheating)
|
// check if we have enough talent points
|
||||||
if(talentRank > 0 && !HasSpell(talentInfo->RankID[talentRank-1]) && !skipPrevRanks)
|
if(CurTalentPoints < (talentRank - curtalent_maxrank + 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check if it requires another talent
|
// Check if it requires another talent
|
||||||
|
|
@ -19864,13 +19875,10 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank, bool skipPrevRanks)
|
||||||
sLog.outDetail("TalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
|
sLog.outDetail("TalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
|
||||||
|
|
||||||
// update free talent points
|
// update free talent points
|
||||||
if(skipPrevRanks)
|
SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1));
|
||||||
SetFreeTalentPoints(CurTalentPoints - (talentRank + 1));
|
|
||||||
else
|
|
||||||
SetFreeTalentPoints(CurTalentPoints - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank, bool skipPrevRanks)
|
void Player::LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank)
|
||||||
{
|
{
|
||||||
Pet *pet = GetPet();
|
Pet *pet = GetPet();
|
||||||
|
|
||||||
|
|
@ -19915,12 +19923,23 @@ void Player::LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank,
|
||||||
if(!((1 << pet_family->petTalentType) & talentTabInfo->petTalentMask))
|
if(!((1 << pet_family->petTalentType) & talentTabInfo->petTalentMask))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// check for LearnPreviewTalents case
|
// find current max talent rank
|
||||||
if(skipPrevRanks && (CurTalentPoints < (talentRank + 1)))
|
int32 curtalent_maxrank = 0;
|
||||||
|
for(int32 k = 4; k > -1; --k)
|
||||||
|
{
|
||||||
|
if(talentInfo->RankID[k] && pet->HasSpell(talentInfo->RankID[k]))
|
||||||
|
{
|
||||||
|
curtalent_maxrank = k + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we already have same or higher talent rank learned
|
||||||
|
if(curtalent_maxrank >= (talentRank + 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// prevent skip talent ranks (cheating)
|
// check if we have enough talent points
|
||||||
if(talentRank > 0 && !pet->HasSpell(talentInfo->RankID[talentRank-1]) && !skipPrevRanks)
|
if(CurTalentPoints < (talentRank - curtalent_maxrank + 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check if it requires another talent
|
// Check if it requires another talent
|
||||||
|
|
@ -19991,10 +20010,7 @@ void Player::LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank,
|
||||||
sLog.outDetail("TalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
|
sLog.outDetail("TalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
|
||||||
|
|
||||||
// update free talent points
|
// update free talent points
|
||||||
if(skipPrevRanks)
|
pet->SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1));
|
||||||
pet->SetFreeTalentPoints(CurTalentPoints - (talentRank + 1));
|
|
||||||
else
|
|
||||||
pet->SetFreeTalentPoints(CurTalentPoints - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SendEquipmentSetList()
|
void Player::SendEquipmentSetList()
|
||||||
|
|
|
||||||
|
|
@ -1475,8 +1475,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
void BuildPlayerTalentsInfoData(WorldPacket *data);
|
void BuildPlayerTalentsInfoData(WorldPacket *data);
|
||||||
void BuildPetTalentsInfoData(WorldPacket *data);
|
void BuildPetTalentsInfoData(WorldPacket *data);
|
||||||
void SendTalentsInfoData(bool pet);
|
void SendTalentsInfoData(bool pet);
|
||||||
void LearnTalent(uint32 talentId, uint32 talentRank, bool skipPrevRanks = false);
|
void LearnTalent(uint32 talentId, uint32 talentRank);
|
||||||
void LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank, bool skipPrevRanks = false);
|
void LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank);
|
||||||
|
|
||||||
uint32 CalculateTalentsPoints() const;
|
uint32 CalculateTalentsPoints() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket)
|
||||||
|
|
||||||
recvPacket >> talentId >> talentRank;
|
recvPacket >> talentId >> talentRank;
|
||||||
|
|
||||||
_player->LearnTalent(talentId, talentRank, true);
|
_player->LearnTalent(talentId, talentRank);
|
||||||
}
|
}
|
||||||
|
|
||||||
_player->SendTalentsInfoData(false);
|
_player->SendTalentsInfoData(false);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue