aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAokromes <Aokromes@users.noreply.github.com>2014-06-11 17:32:49 +0200
committerAokromes <Aokromes@users.noreply.github.com>2014-06-11 17:32:49 +0200
commit9f4bab55ed31eb7aa1528d08b666076bec385959 (patch)
tree7fb8c275cc44b3307abcd97f357dc445645d8aa6 /src
parentf19c6f4091406a42fd75f2cef73a2189cf856ba8 (diff)
parentae46affe4e8d69219a28df7b5557a323a2b1f248 (diff)
Merge pull request #12046 from phoenixfight/fishmaster
Core/Fishing: Repair fishing spell result fish escape
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp39
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h1
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
-rw-r--r--src/server/game/Loot/LootMgr.h3
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h3
5 files changed, 41 insertions, 10 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 370696474ae..c6b4039621a 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -696,12 +696,39 @@ void GameObject::getFishLoot(Loot* fishloot, Player* loot_owner)
fishloot->clear();
uint32 zone, subzone;
+ uint32 defaultzone = 1;
GetZoneAndAreaId(zone, subzone);
// if subzone loot exist use it
- if (!fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true))
- // else use zone loot (must exist in like case)
- fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true);
+ fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true);
+ if (fishloot->empty()) //use this becase if zone or subzone has set LOOT_MODE_JUNK_FISH,Even if no normal drop, fishloot->FillLoot return true. it wrong.
+ {
+ //subzone no result,use zone loot
+ fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true);
+ //use zone 1 as default, somewhere fishing got nothing,becase subzone and zone not set, like Off the coast of Storm Peaks.
+ if (fishloot->empty())
+ fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true);
+ }
+}
+
+void GameObject::getFishLootJunk(Loot* fishloot, Player* loot_owner)
+{
+ fishloot->clear();
+
+ uint32 zone, subzone;
+ uint32 defaultzone = 1;
+ GetZoneAndAreaId(zone, subzone);
+
+ // if subzone loot exist use it
+ fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ if (fishloot->empty()) //use this becase if zone or subzone has normal mask drop, then fishloot->FillLoot return true.
+ {
+ //use zone loot
+ fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ if (fishloot->empty())
+ //use zone 1 as default
+ fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
+ }
}
void GameObject::SaveToDB()
@@ -1416,10 +1443,8 @@ void GameObject::Use(Unit* user)
else
player->SendLoot(GetGUID(), LOOT_FISHING);
}
- /// @todo else: junk
- else
- m_respawnTime = time(NULL);
-
+ else // else: junk
+ player->SendLoot(GetGUID(), LOOT_FISHING_JUNK);
break;
}
case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index a99c5db93aa..7aa3a01016b 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -713,6 +713,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void Refresh();
void Delete();
void getFishLoot(Loot* loot, Player* loot_owner);
+ void getFishLootJunk(Loot* loot, Player* loot_owner);
GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); }
GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c7f36aff92b..977142c8b21 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -8790,7 +8790,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
// not check distance for GO in case owned GO (fishing bobber case, for example)
// And permit out of range GO with no owner in case fishing hole
- if (!go || (loot_type != LOOT_FISHINGHOLE && (loot_type != LOOT_FISHING || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault()))
+ if (!go || (loot_type != LOOT_FISHINGHOLE && ((loot_type != LOOT_FISHING && loot_type != LOOT_FISHING_JUNK) || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault()))
{
SendLootRelease(guid);
return;
@@ -8828,6 +8828,8 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
if (loot_type == LOOT_FISHING)
go->getFishLoot(loot, this);
+ else if (loot_type == LOOT_FISHING_JUNK)
+ go->getFishLootJunk(loot, this);
if (go->GetGOInfo()->type == GAMEOBJECT_TYPE_CHEST && go->GetGOInfo()->chest.groupLootRules)
{
@@ -9070,6 +9072,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
{
case LOOT_INSIGNIA: loot_type = LOOT_SKINNING; break;
case LOOT_FISHINGHOLE: loot_type = LOOT_FISHING; break;
+ case LOOT_FISHING_JUNK: loot_type = LOOT_FISHING; break;
default: break;
}
diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h
index ed0f3b9717b..9be745e622d 100644
--- a/src/server/game/Loot/LootMgr.h
+++ b/src/server/game/Loot/LootMgr.h
@@ -86,7 +86,8 @@ enum LootType
LOOT_MILLING = 8,
LOOT_FISHINGHOLE = 20, // unsupported by client, sending LOOT_FISHING instead
- LOOT_INSIGNIA = 21 // unsupported by client, sending LOOT_CORPSE instead
+ LOOT_INSIGNIA = 21, // unsupported by client, sending LOOT_CORPSE instead
+ LOOT_FISHING_JUNK = 22 // unsupported by client, sending LOOT_FISHING instead
};
// type of Loot Item in Loot View
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 4ec1d5750a4..16dde61158b 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -41,7 +41,8 @@ enum LootModes
LOOT_MODE_HARD_MODE_1 = 0x2,
LOOT_MODE_HARD_MODE_2 = 0x4,
LOOT_MODE_HARD_MODE_3 = 0x8,
- LOOT_MODE_HARD_MODE_4 = 0x10
+ LOOT_MODE_HARD_MODE_4 = 0x10,
+ LOOT_MODE_JUNK_FISH = 0x8000
};
enum Expansions