aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2023-03-12 11:07:34 +0100
committerGitHub <noreply@github.com>2023-03-12 11:07:34 +0100
commitbb6773171154a80275791bd57a00624e0107fac5 (patch)
treed0cc45c21e931d89d30665bd7edb12cef1532f57 /src/server/game/Entities/GameObject
parent09568736134372ec1a79b936a248eec30f071c8d (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.cpp41
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);