View difference between Paste ID: Px3Tf7bV and SDZ50gAv
SHOW: | | - or go back to the newest paste.
1
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/enums/ZoneId.java b/aCis_gameserver/java/net/sf/l2j/gameserver/enums/ZoneId.java
2
index 412b17a..897e488 100644
3
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/enums/ZoneId.java
4
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/enums/ZoneId.java
5
@@ -21,7 +21,8 @@
6
 	CAST_ON_ARTIFACT(16),
7
 	NO_RESTART(17),
8
 	SCRIPT(18),
9
-	BOSS(19);
10
+	BOSS(19),
11
+	PAGAN (20);
12
 	
13
 	private final int _id;
14
 	
15
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
16
index edcfca7..03cedff 100644
17
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
18
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
19
@@ -4347,6 +4347,14 @@
20
 		_isIn7sDungeon = isIn7sDungeon;
21
 	}
22
index COLOQUE NO FINAL A CIMA DA CHAVE }
23
+	public boolean useTemporaryFix()
24
+	{
25
+		if (isInsideZone(ZoneId.PAGAN) || isInsideZone(ZoneId.WATER) || isInWater())
26
+			return true;
27
+			
28
+		return false;	
29
+	}
30
+	
31
 	/**
32
 	 * Update the characters table of the database with online status and lastAccess of this Player (called when login and logout).
33
 	 */
34
@@ -7126,6 +7134,9 @@
35
 	 */
36
 	public final boolean isFalling(int z)
37
 	{
38
+		if (useTemporaryFix())
39
+			return false;
40
+		
41
 		if (isDead() || getMove().getMoveType() != MoveType.GROUND)
42
 			return false;
43
 		
44
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/move/PlayerMove.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/move/PlayerMove.java
45
index 36d0924..6969b46 100644
46
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/move/PlayerMove.java
47
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/move/PlayerMove.java
48
@@ -293,7 +293,7 @@
49
 		}
50
 		
51
 		// Check if location can be reached (case of dynamic objects, such as opening doors/fences).
52
-		if (type == MoveType.GROUND && !GeoEngine.getInstance().canMoveToTarget(curX, curY, curZ, nextX, nextY, nextZ))
53
+		if (type == MoveType.GROUND && !GeoEngine.getInstance().canMoveToTarget(curX, curY, curZ, nextX, nextY, nextZ) && !_actor.useTemporaryFix()))
54
 		{
55
 			_blocked = true;
56
 			return true;
57
@@ -437,19 +437,13 @@
58
 		// Retain some informations fur future use.
59
 		final MoveType moveType = getMoveType();
60
 		
61
-		// We can process to next point without extra help ; return directly.
62
-		if (moveType != MoveType.GROUND)
63
-		{
64
-			if (GeoEngine.getInstance().canFlyToTarget(ox, oy, oz, 32, tx, ty, tz))
65
-				return null;
66
-		}
67
-		else if (GeoEngine.getInstance().canMoveToTarget(ox, oy, oz, tx, ty, tz))
68
+		if (GeoEngine.getInstance().canMoveToTarget(ox, oy, oz, tx, ty, tz))
69
 			return null;
70
 		
71
 		// Create dummy packet.
72
 		final ExServerPrimitive dummy = _isDebugPath ? new ExServerPrimitive() : null;
73
 		
74
-		if (moveType != MoveType.GROUND)
75
+		if ((moveType != MoveType.GROUND) || _actor.useTemporaryFix())
76
 			return GeoEngine.getInstance().getValidFlyLocation(ox, oy, oz, 32, tx, ty, tz, dummy);
77
 		
78
 		// Calculate the path. If no path or too short, calculate the first valid location.
79
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/zone/type/WaterZone.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/zone/type/WaterZone.java
80
new file mode 100644
81
index 0000000..0b63200
82
--- /dev/null
83
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/zone/type/WaterZone.java
84
@@ -0,0 +1,28 @@
85
public class WaterZone extends ZoneType
86
{
87
	public WaterZone(int id)
88
	{
89
		super(id);
90
	}
91
	
92
	@Override
93
	protected void onEnter(Creature character)
94
	{
95
		character.setInsideZone(ZoneId.WATER, true);
96
		character.getMove().addMoveType(MoveType.SWIM);
97
+		character.setInsideZone(ZoneId.PAGAN, true);
98
99
	}
100
	
101
	@Override
102
	protected void onExit(Creature character)
103
	{
104
		character.setInsideZone(ZoneId.WATER, false);
105
		character.getMove().removeMoveType(MoveType.SWIM);
106
+		character.setInsideZone(ZoneId.PAGAN, false);
107
108
	}
109
110
}
111
\ No newline at end of file
112
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java
113
index 3677647..38ac3d3 100644
114
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java
115
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java
116
@@ -51,7 +51,7 @@
117
 				sendPacket(new GetOnVehicle(player.getObjectId(), _boatId, player.getBoatPosition()));
118
 		}
119
 		// For regular movement, send back if the desync is bigger than actual speed.
120
-		else
121
+		else if (!player.useTemporaryFix())
122
 		{
123
 			actualSpeed = player.getStatus().getMoveSpeed();
124
 			dist = (player.getMove().getMoveType() == MoveType.GROUND) ? player.getPosition().distance2D(_x, _y) : player.getPosition().distance3D(_x, _y, _z);
125