diff options
| author | Meji <alvaro.megias@outlook.com> | 2023-03-12 11:07:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-12 11:07:34 +0100 |
| commit | bb6773171154a80275791bd57a00624e0107fac5 (patch) | |
| tree | d0cc45c21e931d89d30665bd7edb12cef1532f57 /src/server/game/Entities/GameObject | |
| parent | 09568736134372ec1a79b936a248eec30f071c8d (diff) | |
Core/Fishing: Update correct fishing skill according to area expansion (#28838)
Closes #26676
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 43707fa07ce..3d182cf6604 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2525,34 +2525,37 @@ void GameObject::Use(Unit* user) SendUpdateToPlayer(player); - uint32 zone, subzone; - GetZoneAndAreaId(zone, subzone); + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(GetAreaId()); + if (!areaEntry) + { + TC_LOG_ERROR("entities.gameobject", "Gameobject '{}' ({}) spawned in unknown area (x: {} y: {} z: {} map: {})", + GetEntry(), GetGUID().ToString(), GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId()); + break; + } + + // Update the correct fishing skill according to the area's ContentTuning + ContentTuningEntry const* areaContentTuning = sObjectMgr->GetContentTuningForArea(areaEntry); + if (!areaContentTuning) + break; - int32 zone_skill = sObjectMgr->GetFishingBaseSkillLevel(subzone); - if (!zone_skill) - zone_skill = sObjectMgr->GetFishingBaseSkillLevel(zone); + player->UpdateFishingSkill(areaContentTuning->ExpansionID); - //provide error, no fishable zone or area should be 0 - if (!zone_skill) - TC_LOG_ERROR("sql.sql", "Fishable areaId {} are not properly defined in `skill_fishing_base_level`.", subzone); + // Send loot + int32 areaFishingLevel = sObjectMgr->GetFishingBaseSkillLevel(areaEntry); - int32 skill = player->GetSkillValue(SKILL_FISHING); + uint32 playerFishingSkill = player->GetProfessionSkillForExp(SKILL_FISHING, areaContentTuning->ExpansionID); + int32 playerFishingLevel = player->GetSkillValue(playerFishingSkill); - int32 chance; - if (skill < zone_skill) + int32 roll = irand(1, 100); + int32 chance = 100; + if (playerFishingLevel < areaFishingLevel) { - chance = int32(pow((double)skill/zone_skill, 2) * 100); + chance = int32(pow((double)playerFishingLevel / areaFishingLevel, 2) * 100); if (chance < 1) chance = 1; } - else - chance = 100; - - int32 roll = irand(1, 100); - - TC_LOG_DEBUG("misc", "Fishing check (skill: {} zone min skill: {} chance {} roll: {}", skill, zone_skill, chance, roll); - player->UpdateFishingSkill(); + TC_LOG_DEBUG("misc", "Fishing check (skill {} level: {} area skill level: {} chance {} roll: {}", playerFishingSkill, playerFishingLevel, areaFishingLevel, chance, roll); /// @todo find reasonable value for fishing hole search GameObject* fishingPool = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE); |
