Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
L
L2j Server Datapack
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
L2j
L2j Server Datapack
Commits
9fe4f5f4
Commit
9fe4f5f4
authored
11 years ago
by
Zoey76
Browse files
Options
Downloads
Patches
Plain Diff
BETA: Improvements to `Fishing` skill handler.
Patch by: FBIagent Tested by: FBIagent, lion
parent
56ade517
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Fishing.java
+121
-97
121 additions, 97 deletions
...ist/game/data/scripts/handlers/skillhandlers/Fishing.java
with
121 additions
and
97 deletions
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Fishing.java
+
121
−
97
View file @
9fe4f5f4
...
@@ -29,6 +29,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
...
@@ -29,6 +29,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import
com.l2jserver.gameserver.model.itemcontainer.Inventory
;
import
com.l2jserver.gameserver.model.itemcontainer.Inventory
;
import
com.l2jserver.gameserver.model.items.L2Weapon
;
import
com.l2jserver.gameserver.model.items.L2Weapon
;
import
com.l2jserver.gameserver.model.items.instance.L2ItemInstance
;
import
com.l2jserver.gameserver.model.items.instance.L2ItemInstance
;
import
com.l2jserver.gameserver.model.items.type.L2EtcItemType
;
import
com.l2jserver.gameserver.model.items.type.L2WeaponType
;
import
com.l2jserver.gameserver.model.items.type.L2WeaponType
;
import
com.l2jserver.gameserver.model.skills.L2Skill
;
import
com.l2jserver.gameserver.model.skills.L2Skill
;
import
com.l2jserver.gameserver.model.skills.L2SkillType
;
import
com.l2jserver.gameserver.model.skills.L2SkillType
;
...
@@ -37,17 +38,64 @@ import com.l2jserver.gameserver.model.zone.ZoneId;
...
@@ -37,17 +38,64 @@ import com.l2jserver.gameserver.model.zone.ZoneId;
import
com.l2jserver.gameserver.model.zone.type.L2FishingZone
;
import
com.l2jserver.gameserver.model.zone.type.L2FishingZone
;
import
com.l2jserver.gameserver.model.zone.type.L2WaterZone
;
import
com.l2jserver.gameserver.model.zone.type.L2WaterZone
;
import
com.l2jserver.gameserver.network.SystemMessageId
;
import
com.l2jserver.gameserver.network.SystemMessageId
;
import
com.l2jserver.gameserver.network.serverpackets.InventoryUpdate
;
import
com.l2jserver.gameserver.util.Util
;
import
com.l2jserver.gameserver.util.Util
;
import
com.l2jserver.util.Rnd
;
import
com.l2jserver.util.Rnd
;
public
class
Fishing
implements
ISkillHandler
public
final
class
Fishing
implements
ISkillHandler
{
{
private
static
final
int
MIN_BAIT_DISTANCE
=
90
;
private
static
final
int
MAX_BAIT_DISTANCE
=
250
;
private
static
final
L2SkillType
[]
SKILL_IDS
=
private
static
final
L2SkillType
[]
SKILL_IDS
=
{
{
L2SkillType
.
FISHING
L2SkillType
.
FISHING
};
};
/**
* Computes the Z of the bait.
* @param player the player
* @param baitX the bait x
* @param baitY the bait y
* @param fishingZone the fishing zone
* @param waterZone the water zone
* @return the bait z or {@link Integer#MIN_VALUE} when you cannot fish here
*/
private
int
computeBaitZ
(
final
L2PcInstance
player
,
final
int
baitX
,
final
int
baitY
,
final
L2FishingZone
fishingZone
,
final
L2WaterZone
waterZone
)
{
if
((
fishingZone
==
null
))
{
return
Integer
.
MIN_VALUE
;
}
if
((
waterZone
==
null
))
{
return
Integer
.
MIN_VALUE
;
}
// always use water zone, fishing zone high z is high in the air...
int
baitZ
=
waterZone
.
getWaterZ
();
if
(!
GeoData
.
getInstance
().
canSeeTarget
(
player
.
getX
(),
player
.
getY
(),
player
.
getZ
(),
baitX
,
baitY
,
baitZ
))
{
return
Integer
.
MIN_VALUE
;
}
if
(
GeoData
.
getInstance
().
hasGeo
(
baitX
,
baitY
))
{
if
(
GeoData
.
getInstance
().
getHeight
(
baitX
,
baitY
,
baitZ
)
>
baitZ
)
{
return
Integer
.
MIN_VALUE
;
}
if
(
GeoData
.
getInstance
().
getHeight
(
baitX
,
baitY
,
player
.
getZ
())
>
baitZ
)
{
return
Integer
.
MIN_VALUE
;
}
}
return
baitZ
;
}
@Override
@Override
public
void
useSkill
(
L2Character
activeChar
,
L2Skill
skill
,
L2Object
[]
targets
)
public
void
useSkill
(
L2Character
activeChar
,
L2Skill
skill
,
L2Object
[]
targets
)
{
{
...
@@ -58,14 +106,12 @@ public class Fishing implements ISkillHandler
...
@@ -58,14 +106,12 @@ public class Fishing implements ISkillHandler
final
L2PcInstance
player
=
activeChar
.
getActingPlayer
();
final
L2PcInstance
player
=
activeChar
.
getActingPlayer
();
/*
* If fishing is disabled, there isn't much point in doing anything else, unless you are GM. so this got moved up here, before anything else.
*/
if
(!
Config
.
ALLOWFISHING
&&
!
player
.
canOverrideCond
(
PcCondOverride
.
SKILL_CONDITIONS
))
if
(!
Config
.
ALLOWFISHING
&&
!
player
.
canOverrideCond
(
PcCondOverride
.
SKILL_CONDITIONS
))
{
{
player
.
sendMessage
(
"Fishing
server is currently offline
"
);
player
.
sendMessage
(
"Fishing
is disabled!
"
);
return
;
return
;
}
}
if
(
player
.
isFishing
())
if
(
player
.
isFishing
())
{
{
if
(
player
.
getFishCombat
()
!=
null
)
if
(
player
.
getFishCombat
()
!=
null
)
...
@@ -76,30 +122,24 @@ public class Fishing implements ISkillHandler
...
@@ -76,30 +122,24 @@ public class Fishing implements ISkillHandler
{
{
player
.
endFishing
(
false
);
player
.
endFishing
(
false
);
}
}
// Cancels fishing
player
.
sendPacket
(
SystemMessageId
.
FISHING_ATTEMPT_CANCELLED
);
player
.
sendPacket
(
SystemMessageId
.
FISHING_ATTEMPT_CANCELLED
);
return
;
return
;
}
}
L2Weapon
weaponItem
=
player
.
getActiveWeaponItem
();
if
(((
weaponItem
==
null
)
||
(
weaponItem
.
getItemType
()
!=
L2WeaponType
.
FISHINGROD
)))
// check for equiped fishing rod
L2Weapon
equipedWeapon
=
player
.
getActiveWeaponItem
();
if
(((
equipedWeapon
==
null
)
||
(
equipedWeapon
.
getItemType
()
!=
L2WeaponType
.
FISHINGROD
)))
{
{
// Fishing poles are not installed
player
.
sendPacket
(
SystemMessageId
.
FISHING_POLE_NOT_EQUIPPED
);
player
.
sendPacket
(
SystemMessageId
.
FISHING_POLE_NOT_EQUIPPED
);
return
;
return
;
}
}
L2ItemInstance
lure
=
player
.
getInventory
().
getPaperdollItem
(
Inventory
.
PAPERDOLL_LHAND
);
if
(
lure
==
null
)
{
// Bait not equiped.
player
.
sendPacket
(
SystemMessageId
.
BAIT_ON_HOOK_BEFORE_FISHING
);
return
;
}
player
.
setLure
(
lure
);
L2ItemInstance
lure2
=
player
.
getInventory
().
getPaperdollItem
(
Inventory
.
PAPERDOLL_LHAND
);
if
((
lure2
==
null
)
||
(
lure2
.
getCount
()
<
1
))
// Not enough bait.
// check for equiped lure
L2ItemInstance
equipedLeftHand
=
player
.
getInventory
().
getPaperdollItem
(
Inventory
.
PAPERDOLL_LHAND
);
if
((
equipedLeftHand
==
null
)
||
(
equipedLeftHand
.
getItemType
()
!=
L2EtcItemType
.
LURE
))
{
{
player
.
sendPacket
(
SystemMessageId
.
NOT_ENOUGH_BAIT
);
player
.
sendPacket
(
SystemMessageId
.
BAIT_ON_HOOK_BEFORE_FISHING
);
return
;
return
;
}
}
...
@@ -107,7 +147,6 @@ public class Fishing implements ISkillHandler
...
@@ -107,7 +147,6 @@ public class Fishing implements ISkillHandler
{
{
if
(
player
.
isInBoat
())
if
(
player
.
isInBoat
())
{
{
// You can't fish while you are on boat
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_ON_BOAT
);
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_ON_BOAT
);
return
;
return
;
}
}
...
@@ -120,112 +159,97 @@ public class Fishing implements ISkillHandler
...
@@ -120,112 +159,97 @@ public class Fishing implements ISkillHandler
if
(
player
.
isInsideZone
(
ZoneId
.
WATER
))
if
(
player
.
isInsideZone
(
ZoneId
.
WATER
))
{
{
// You can't fish in water
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_UNDER_WATER
);
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_UNDER_WATER
);
return
;
return
;
}
}
if
(
player
.
isInsideZone
(
ZoneId
.
PEACE
))
{
// You can't fish here.
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_HERE
);
return
;
}
}
}
/*
// calculate a position in front of the player with a random distance
* If fishing is enabled, here is the code that was striped from startFishing() in L2PcInstance. Decide now where will the hook be cast...
int
distance
=
Rnd
.
get
(
MIN_BAIT_DISTANCE
,
MAX_BAIT_DISTANCE
);
*/
final
double
angle
=
Util
.
convertHeadingToDegree
(
player
.
getHeading
());
int
rnd
=
Rnd
.
get
(
150
)
+
50
;
final
double
radian
=
Math
.
toRadians
(
angle
);
double
angle
=
Util
.
convertHeadingToDegree
(
player
.
getHeading
());
final
double
sin
=
Math
.
sin
(
radian
);
double
radian
=
Math
.
toRadians
(
angle
);
final
double
cos
=
Math
.
cos
(
radian
);
double
sin
=
Math
.
sin
(
radian
);
int
baitX
=
(
int
)
(
player
.
getX
()
+
(
cos
*
distance
));
double
cos
=
Math
.
cos
(
radian
);
int
baitY
=
(
int
)
(
player
.
getY
()
+
(
sin
*
distance
));
int
x
=
player
.
getX
()
+
(
int
)
(
cos
*
rnd
);
int
y
=
player
.
getY
()
+
(
int
)
(
sin
*
rnd
);
// search for fishing and water zone
int
z
=
player
.
getZ
()
+
50
;
L2FishingZone
fishingZone
=
null
;
/*
L2WaterZone
waterZone
=
null
;
* ...and if the spot is in a fishing zone. If it is, it will then position the hook on the water surface. If not, you have to be GM to proceed past here... in that case, the hook will be positioned using the old Z lookup method.
for
(
final
L2ZoneType
zone
:
ZoneManager
.
getInstance
().
getZones
(
baitX
,
baitY
))
*/
L2FishingZone
aimingTo
=
null
;
L2WaterZone
water
=
null
;
boolean
canFish
=
false
;
for
(
L2ZoneType
zone
:
ZoneManager
.
getInstance
().
getZones
(
x
,
y
))
{
{
if
(
zone
instanceof
L2FishingZone
)
if
(
zone
instanceof
L2FishingZone
)
{
{
aimingTo
=
(
L2FishingZone
)
zone
;
fishingZone
=
(
L2FishingZone
)
zone
;
continue
;
}
else
if
(
zone
instanceof
L2WaterZone
)
{
waterZone
=
(
L2WaterZone
)
zone
;
}
}
if
(
zone
instanceof
L2WaterZone
)
if
((
fishingZone
!=
null
)
&&
(
waterZone
!=
null
))
{
{
water
=
(
L2WaterZone
)
zone
;
break
;
}
}
}
}
if
(
aimingTo
!=
null
)
int
baitZ
=
computeBaitZ
(
player
,
baitX
,
baitY
,
fishingZone
,
waterZone
);
if
(
baitZ
==
Integer
.
MIN_VALUE
)
{
{
// fishing zone found, we can fish here
for
(
distance
=
MAX_BAIT_DISTANCE
;
distance
>=
MIN_BAIT_DISTANCE
;
--
distance
)
if
(
Config
.
GEODATA
>
0
)
{
{
// geodata enabled, checking if we can see end of the pole
baitX
=
(
int
)
(
player
.
getX
()
+
(
cos
*
distance
));
if
(
GeoData
.
getInstance
().
canSeeTarget
(
player
.
getX
(),
player
.
getY
(),
z
,
x
,
y
,
z
))
baitY
=
(
int
)
(
player
.
getY
()
+
(
sin
*
distance
));
// search for fishing and water zone again
fishingZone
=
null
;
waterZone
=
null
;
for
(
final
L2ZoneType
zone
:
ZoneManager
.
getInstance
().
getZones
(
baitX
,
baitY
))
{
{
// finding z level for hook
if
(
zone
instanceof
L2FishingZone
)
if
(
water
!=
null
)
{
{
// water zone exist
fishingZone
=
(
L2FishingZone
)
zone
;
if
(
GeoData
.
getInstance
().
getHeight
(
x
,
y
,
z
)
<
water
.
getWaterZ
())
{
// water Z is higher than geo Z
z
=
water
.
getWaterZ
()
+
10
;
canFish
=
true
;
}
}
}
else
else
if
(
zone
instanceof
L2WaterZone
)
{
{
// no water zone, using fishing zone
waterZone
=
(
L2WaterZone
)
zone
;
if
(
GeoData
.
getInstance
().
getHeight
(
x
,
y
,
z
)
<
aimingTo
.
getWaterZ
())
{
// fishing Z is higher than geo Z
z
=
aimingTo
.
getWaterZ
()
+
10
;
canFish
=
true
;
}
}
}
if
((
fishingZone
!=
null
)
&&
(
waterZone
!=
null
))
{
break
;
}
}
baitZ
=
computeBaitZ
(
player
,
baitX
,
baitY
,
fishingZone
,
waterZone
);
if
(
baitZ
!=
Integer
.
MIN_VALUE
)
{
break
;
}
}
}
}
else
if
(
baitZ
==
Integer
.
MIN_VALUE
)
{
{
// geodata disabled
if
(
player
.
isGM
())
// if water zone exist using it, if not - using fishing zone
if
(
water
!=
null
)
{
{
z
=
water
.
getWaterZ
()
+
10
;
baitZ
=
player
.
getZ
()
;
}
}
else
else
{
{
z
=
aimingTo
.
getWaterZ
()
+
10
;
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_HERE
);
return
;
}
}
canFish
=
true
;
}
}
}
}
if
(!
canFish
)
if
(!
player
.
destroyItem
(
"FishingSkillHandler"
,
equipedLeftHand
,
1
,
null
,
false
))
{
{
// You can't fish here
player
.
sendPacket
(
SystemMessageId
.
NOT_ENOUGH_BAIT
);
player
.
sendPacket
(
SystemMessageId
.
CANNOT_FISH_HERE
);
return
;
if
(!
player
.
isGM
())
{
return
;
}
}
}
// Has enough bait, consume 1 and update inventory. Start fishing
// follows.
player
.
setLure
(
equipedLeftHand
);
lure2
=
player
.
getInventory
().
destroyItem
(
"Consume"
,
player
.
getInventory
().
getPaperdollObjectId
(
Inventory
.
PAPERDOLL_LHAND
),
1
,
player
,
null
);
player
.
startFishing
(
baitX
,
baitY
,
baitZ
);
InventoryUpdate
iu
=
new
InventoryUpdate
();
iu
.
addModifiedItem
(
lure2
);
player
.
sendPacket
(
iu
);
// If everything else checks out, actually cast the hook and start
// fishing... :P
player
.
startFishing
(
x
,
y
,
z
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment