summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CONTRIBUTORS1
-rw-r--r--Server/Plugins/APIDump/APIDesc.lua9
-rw-r--r--src/Entities/Floater.cpp2
-rw-r--r--src/Entities/Floater.h4
-rw-r--r--src/Items/ItemFishingRod.h10
5 files changed, 24 insertions, 2 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 6d2c8edfd..2bbee0d32 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -40,6 +40,7 @@ Seadragon91 (Lukas Pioch)
Sofapriester
SphinxC0re
structinf (xdot)
+sweetgiorni
Sxw1212
Taugeshtu
tigerw (Tiger Wang)
diff --git a/Server/Plugins/APIDump/APIDesc.lua b/Server/Plugins/APIDump/APIDesc.lua
index 09f784a93..3cbb013d6 100644
--- a/Server/Plugins/APIDump/APIDesc.lua
+++ b/Server/Plugins/APIDump/APIDesc.lua
@@ -6585,6 +6585,15 @@ cFile:DeleteFile("/usr/bin/virus.exe");
},
Notes = "Returns the EntityID of the player who owns the floater.",
},
+ GetBitePos =
+ {
+ Returns =
+ {
+ Name = "BitePosition",
+ Type = "Vector3d",
+ },
+ Notes = "Returns the position of the floater just before a fish bites. If a fish hasn't bitten the floater, this function returns the position the floater was cast from.",
+ },
},
Inherits = "cEntity",
},
diff --git a/src/Entities/Floater.cpp b/src/Entities/Floater.cpp
index 304ba6425..8f98cb36c 100644
--- a/src/Entities/Floater.cpp
+++ b/src/Entities/Floater.cpp
@@ -103,6 +103,7 @@ protected:
cFloater::cFloater(double a_X, double a_Y, double a_Z, Vector3d a_Speed, UInt32 a_PlayerID, int a_CountDownTime) :
cEntity(etFloater, a_X, a_Y, a_Z, 0.2, 0.2),
+ m_BitePos(Vector3d(a_X, a_Y, a_Z)),
m_CanPickupItem(false),
m_PickupCountDown(0),
m_CountDownTime(a_CountDownTime),
@@ -135,6 +136,7 @@ void cFloater::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
{
if (m_CountDownTime <= 0)
{
+ m_BitePos = GetPosition();
m_World->BroadcastSoundEffect("entity.bobber.splash", GetPosX(), GetPosY(), GetPosZ(), 1, 1);
SetPosY(GetPosY() - 1);
m_CanPickupItem = true;
diff --git a/src/Entities/Floater.h b/src/Entities/Floater.h
index 89ee8cc08..59402393f 100644
--- a/src/Entities/Floater.h
+++ b/src/Entities/Floater.h
@@ -27,12 +27,16 @@ public:
bool CanPickup(void) const { return m_CanPickupItem; }
UInt32 GetOwnerID(void) const { return m_PlayerID; }
UInt32 GetAttachedMobID(void) const { return m_AttachedMobID; }
+ Vector3d GetBitePos(void) const { return m_BitePos; }
// tolua_end
protected:
// Position
Vector3d m_ParticlePos;
+ // Position just before the floater gets pulled under by a fish
+ Vector3d m_BitePos;
+
// Bool needed to check if you can get a fish.
bool m_CanPickupItem;
diff --git a/src/Items/ItemFishingRod.h b/src/Items/ItemFishingRod.h
index 3a2ef0275..fa27e08f6 100644
--- a/src/Items/ItemFishingRod.h
+++ b/src/Items/ItemFishingRod.h
@@ -35,6 +35,7 @@ public:
{
m_CanPickup = reinterpret_cast<cFloater *>(a_Entity)->CanPickup();
m_Pos = Vector3d(a_Entity->GetPosX(), a_Entity->GetPosY(), a_Entity->GetPosZ());
+ m_BitePos = reinterpret_cast<cFloater *>(a_Entity)->GetBitePos();
m_AttachedMobID = reinterpret_cast<cFloater *>(a_Entity)->GetAttachedMobID();
a_Entity->Destroy(true);
return true;
@@ -44,11 +45,13 @@ public:
bool IsAttached(void) const { return (m_AttachedMobID != cEntity::INVALID_ID); }
UInt32 GetAttachedMobID(void) const { return m_AttachedMobID; }
Vector3d GetPos(void) const { return m_Pos; }
+ Vector3d GetBitePos(void) const { return m_BitePos; }
protected:
bool m_CanPickup;
UInt32 m_AttachedMobID;
Vector3d m_Pos;
+ Vector3d m_BitePos;
} ;
@@ -236,9 +239,12 @@ public:
{
return true;
}
- Vector3d FloaterPos = FloaterInfo.GetPos();
+ Vector3d FloaterPos = FloaterInfo.GetBitePos();
+ FloaterPos.y += 0.5f;
+ const float FISH_SPEED_MULT = 2.25f;
+
Vector3d FlyDirection = a_Player->GetEyePosition() - FloaterPos;
- a_World->SpawnItemPickups(Drops, FloaterPos.x, FloaterPos.y, FloaterPos.z, FlyDirection.x, FlyDirection.y + 1, FlyDirection.z);
+ a_World->SpawnItemPickups(Drops, FloaterPos.x, FloaterPos.y, FloaterPos.z, FlyDirection.x * FISH_SPEED_MULT, (FlyDirection.y + 1.0f) * FISH_SPEED_MULT, FlyDirection.z * FISH_SPEED_MULT);
cRoot::Get()->GetPluginManager()->CallHookPlayerFished(*a_Player, Drops);
}
}