1
1
const serverPackets = require ( './../ServerPackets/serverPackets' ) ;
2
2
const ClientPacket = require ( "./ClientPacket" ) ;
3
3
const players = require ( './../Models/Players' ) ;
4
+ const tasks = require ( './../libs/tasks' ) ;
5
+ const database = require ( './../../Database' ) ;
6
+
7
+ class Formuls {
8
+ nextTickRunSpeed ( speed ) {
9
+ return Math . round ( ( 0.1 / speed ) * 1_000_000 ) ;
10
+ }
11
+ }
4
12
5
13
class MoveBackwardToLocation {
6
14
constructor ( packet , client ) {
@@ -36,9 +44,30 @@ class MoveBackwardToLocation {
36
44
return this . _data . getData ( ) [ 6 ] ;
37
45
}
38
46
39
- _init ( ) {
47
+ async _init ( ) {
40
48
const player = players . getPlayerByClient ( this . _client ) ;
41
- const positions = {
49
+
50
+ tasks . findById ( `move:${ player . objectId } ` ) . forEach ( task => {
51
+ task . remove ( ) ;
52
+ } ) ;
53
+
54
+ player . update ( {
55
+ x : this . originX ,
56
+ y : this . originY ,
57
+ z : this . originZ
58
+ } ) ;
59
+
60
+ let objectId = await database . getNextObjectId ( ) ;
61
+
62
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
63
+ objectId : objectId ++ ,
64
+ itemId : 57 ,
65
+ x : player . x ,
66
+ y : player . y ,
67
+ z : player . z
68
+ } ) ) ;
69
+
70
+ const path = {
42
71
target : {
43
72
x : this . targetX ,
44
73
y : this . targetY ,
@@ -51,7 +80,196 @@ class MoveBackwardToLocation {
51
80
}
52
81
}
53
82
54
- this . _client . sendPacket ( new serverPackets . MoveToLocation ( positions , player . objectId ) ) ;
83
+ let angle = Math . atan2 ( path . target . y - path . origin . y , path . target . x - path . origin . x ) ;
84
+
85
+ const dx = path . target . x - path . origin . x ;
86
+ const dy = path . target . y - path . origin . y ;
87
+
88
+ let distance = Math . sqrt ( dx * dx + dy * dy ) - ( 10 + 9 ) ;
89
+
90
+ // walk
91
+ if ( distance < 36 ) {
92
+ const d = distance ; // fix
93
+
94
+ tasks . add ( {
95
+ id : `move:${ player . objectId } ` ,
96
+ time : ( 1000 / 88 ) * distance ,
97
+ callback : ( event ) => {
98
+ if ( event . runs === 1 ) {
99
+ event . stop ( ) ;
100
+
101
+ player . attack ( this . objectId ) ;
102
+ }
103
+
104
+ player . update ( {
105
+ x : player . x + ( Math . cos ( angle ) * d ) , // забирается из вне. Значение стирается
106
+ y : player . y + ( Math . sin ( angle ) * d ) ,
107
+ z : player . z
108
+ } ) ;
109
+
110
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
111
+ objectId : objectId ++ ,
112
+ itemId : 57 ,
113
+ x : player . x ,
114
+ y : player . y ,
115
+ z : player . z
116
+ } ) ) ;
117
+ }
118
+ } ) ;
119
+
120
+ distance = 0 ;
121
+ }
122
+
123
+ // walk
124
+ if ( distance > 36 ) {
125
+ tasks . add ( {
126
+ id : `move:${ player . objectId } ` ,
127
+ time : ( 1000 / 88 ) * 36 ,
128
+ callback : ( event ) => {
129
+ if ( event . runs === 1 ) {
130
+ event . stop ( ) ;
131
+ }
132
+
133
+ player . update ( {
134
+ x : player . x + ( Math . cos ( angle ) * 36 ) ,
135
+ y : player . y + ( Math . sin ( angle ) * 36 ) ,
136
+ z : player . z
137
+ } ) ;
138
+
139
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
140
+ objectId : objectId ++ ,
141
+ itemId : 57 ,
142
+ x : player . x ,
143
+ y : player . y ,
144
+ z : player . z
145
+ } ) ) ;
146
+ }
147
+ } ) ;
148
+
149
+ distance = distance - 36 ;
150
+ }
151
+
152
+ if ( distance < 126 ) {
153
+ const d = distance ; // fix
154
+
155
+ tasks . add ( {
156
+ id : `move:${ player . objectId } ` ,
157
+ time : ( 1000 / 126 ) * distance ,
158
+ callback : ( event ) => {
159
+ if ( event . runs === 1 ) {
160
+ event . stop ( ) ;
161
+
162
+ player . attack ( this . objectId ) ;
163
+ }
164
+
165
+ player . update ( {
166
+ x : player . x + ( Math . cos ( angle ) * d ) ,
167
+ y : player . y + ( Math . sin ( angle ) * d ) ,
168
+ z : player . z
169
+ } ) ;
170
+
171
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
172
+ objectId : objectId ++ ,
173
+ itemId : 57 ,
174
+ x : player . x ,
175
+ y : player . y ,
176
+ z : player . z
177
+ } ) ) ;
178
+ }
179
+ } ) ;
180
+
181
+ distance = 0 ;
182
+ }
183
+
184
+ if ( distance > 126 ) {
185
+ tasks . add ( {
186
+ id : `move:${ player . objectId } ` ,
187
+ time : 1000 ,
188
+ callback : ( event ) => {
189
+ player . update ( {
190
+ x : player . x + ( Math . cos ( angle ) * 126 ) ,
191
+ y : player . y + ( Math . sin ( angle ) * 126 ) ,
192
+ z : player . z
193
+ } ) ;
194
+
195
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
196
+ objectId : objectId ++ ,
197
+ itemId : 57 ,
198
+ x : player . x ,
199
+ y : player . y ,
200
+ z : player . z
201
+ } ) ) ;
202
+
203
+ const dx = path . target . x - player . x ;
204
+ const dy = path . target . y - player . y ;
205
+ const distance = Math . sqrt ( dx * dx + dy * dy ) - ( 10 + 9 ) ;
206
+
207
+ if ( distance < 126 ) {
208
+ event . stop ( ) ;
209
+ }
210
+ }
211
+ } ) ;
212
+ }
213
+
214
+ function calculateFinalDistance ( ) {
215
+ let x = player . x ;
216
+ let y = player . y ;
217
+
218
+ let dx = path . target . x - x ;
219
+ let dy = path . target . y - y ;
220
+ let distance = Math . sqrt ( dx * dx + dy * dy ) - 36 - ( 10 + 9 ) ;
221
+
222
+ while ( distance > 126 ) {
223
+ x = x + ( Math . cos ( angle ) * 126 ) ;
224
+ y = y + ( Math . sin ( angle ) * 126 ) ;
225
+
226
+ dx = path . target . x - x ;
227
+ dy = path . target . y - y ;
228
+ distance = Math . sqrt ( dx * dx + dy * dy ) - 36 - ( 10 + 9 ) ;
229
+ }
230
+
231
+ return distance ;
232
+ }
233
+
234
+ if ( distance > 126 && ( distance % 126 ) > 0 ) {
235
+ const finalDistance = calculateFinalDistance ( ) ;
236
+
237
+ tasks . add ( {
238
+ id : `move:${ player . objectId } ` ,
239
+ time : ( 1000 / 126 ) * finalDistance ,
240
+ callback : ( event ) => {
241
+ if ( event . runs === 1 ) {
242
+ event . stop ( ) ;
243
+ }
244
+
245
+ player . update ( {
246
+ x : player . x + ( Math . cos ( angle ) * ( finalDistance ) ) ,
247
+ y : player . y + ( Math . sin ( angle ) * ( finalDistance ) ) ,
248
+ z : player . z
249
+ } ) ;
250
+
251
+ this . _client . sendPacket ( new serverPackets . DropItem ( player , {
252
+ objectId : objectId ++ ,
253
+ itemId : 57 ,
254
+ x : player . x ,
255
+ y : player . y ,
256
+ z : player . z
257
+ } ) ) ;
258
+
259
+ player . attack ( this . objectId ) ;
260
+ }
261
+ } ) ;
262
+ }
263
+
264
+ tasks . start ( `move:${ player . objectId } ` ) ;
265
+
266
+ this . _client . sendPacket ( new serverPackets . MoveToLocation ( path , player . objectId ) ) ;
267
+
268
+ // player.update({
269
+ // x: this.targetX,
270
+ // y: this.targetY,
271
+ // z: this.targetZ
272
+ // });
55
273
}
56
274
}
57
275
0 commit comments