8
8
from pydofus2 .com .ankamagames .berilia .managers .KernelEventsManager import KernelEventsManager
9
9
from pydofus2 .com .ankamagames .dofus .internalDatacenter .spells .SpellWrapper import SpellWrapper
10
10
from pydofus2 .com .ankamagames .dofus .kernel .Kernel import Kernel
11
+ from pydofus2 .com .ankamagames .dofus .kernel .net .ConnectionsHandler import ConnectionsHandler
12
+ from pydofus2 .com .ankamagames .dofus .logic .common .managers .PlayerManager import PlayerManager
11
13
from pydofus2 .com .ankamagames .dofus .logic .common .managers .StatsManager import StatsManager
12
14
from pydofus2 .com .ankamagames .dofus .logic .game .common .managers .PlayedCharacterManager import PlayedCharacterManager
13
15
from pydofus2 .com .ankamagames .dofus .logic .game .common .misc .DofusEntities import DofusEntities
69
71
from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnListMessage import (
70
72
GameFightTurnListMessage ,
71
73
)
74
+ from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnReadyMessage import (
75
+ GameFightTurnReadyMessage ,
76
+ )
77
+ from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnReadyRequestMessage import (
78
+ GameFightTurnReadyRequestMessage ,
79
+ )
80
+ from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnResumeMessage import (
81
+ GameFightTurnResumeMessage ,
82
+ )
83
+ from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnStartMessage import (
84
+ GameFightTurnStartMessage ,
85
+ )
86
+ from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnStartPlayingMessage import (
87
+ GameFightTurnStartPlayingMessage ,
88
+ )
72
89
from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .SlaveNoLongerControledMessage import (
73
90
SlaveNoLongerControledMessage ,
74
91
)
@@ -189,6 +206,27 @@ def process(self, msg: Message) -> bool:
189
206
self .updateTurnsList (gftmsg .ids , gftmsg .deadsIds )
190
207
return True
191
208
209
+ elif isinstance (msg , GameFightTurnStartMessage ):
210
+ if not Kernel ().fightEntitiesFrame :
211
+ return KernelEventsManager ().onceFramePushed (
212
+ "FightEntitiesFrame" , self .process , [msg ], originator = self
213
+ )
214
+ Logger ().separator (f"Player { msg .id } turn to play" , "~" )
215
+ self ._currentPlayerId = msg .id
216
+ if not self ._lastPlayerId :
217
+ self ._lastPlayerId = self ._currentPlayerId
218
+ if not isinstance (msg , GameFightTurnResumeMessage ):
219
+ bffm .BuffManager ().decrementDuration (msg .id )
220
+ bffm .BuffManager ().resetTriggerCount (msg .id )
221
+ if Kernel ().battleFrame :
222
+ Kernel ().battleFrame .removeSavedPosition (msg .id )
223
+ if Kernel ().fightEntitiesFrame :
224
+ for entityId , infos in Kernel ().fightEntitiesFrame .entities .items ():
225
+ if infos and infos .stats .summoner == msg .id :
226
+ Kernel ().battleFrame .removeSavedPosition (entityId )
227
+ KernelEventsManager ().send (KernelEvent .FightTurnStart , msg .id )
228
+ return True
229
+
192
230
elif isinstance (msg , GameFightSynchronizeMessage ):
193
231
gftcimsg = msg
194
232
if self ._newWave :
@@ -233,7 +271,8 @@ def process(self, msg: Message) -> bool:
233
271
Kernel ().worker .addFrame (self ._sequenceFrameSwitcher )
234
272
self ._currentSequenceFrame = fseqf .FightSequenceFrame (self , self ._currentSequenceFrame )
235
273
self ._sequenceFrameSwitcher .currentFrame = self ._currentSequenceFrame
236
- return False
274
+ KernelEventsManager ().send (KernelEvent .SequenceStart , msg .sequenceType , msg .authorId )
275
+ return True
237
276
238
277
elif isinstance (msg , SequenceEndMessage ):
239
278
semsg = msg
@@ -253,7 +292,8 @@ def process(self, msg: Message) -> bool:
253
292
self ._currentSequenceFrame .execute ()
254
293
self ._sequenceFrameSwitcher .currentFrame = self ._currentSequenceFrame .parent
255
294
self ._currentSequenceFrame = self ._currentSequenceFrame .parent
256
- return False
295
+ KernelEventsManager ().send (KernelEvent .SequenceEnd )
296
+ return True
257
297
258
298
elif isinstance (msg , GameFightNewWaveMessage ):
259
299
gfnwmsg = msg
@@ -298,7 +338,7 @@ def process(self, msg: Message) -> bool:
298
338
self .endBattle (gfemsg )
299
339
FightersStateManager ().endFight ()
300
340
CurrentPlayedFighterManager ().endFight ()
301
- return False
341
+ return True
302
342
303
343
elif isinstance (msg , GameContextDestroyMessage ):
304
344
if self ._battleResults :
@@ -327,6 +367,21 @@ def process(self, msg: Message) -> bool:
327
367
elif isinstance (msg , RemoveSpellModifierMessage ):
328
368
SpellModifiersManager ().deleteSpellModifierAction (msg .actorId , msg .modifierType , msg .actionType )
329
369
return True
370
+ elif isinstance (msg , GameFightTurnStartPlayingMessage ):
371
+ if PlayerManager ().kisServerPort <= 0 :
372
+ KernelEventsManager ().send (KernelEvent .FightTurnStartPlaying )
373
+
374
+ return True
375
+
376
+ elif isinstance (msg , GameFightTurnReadyRequestMessage ):
377
+ if self .executingSequence :
378
+ Logger ().warn ("Delaying turn end acknowledgement because we're still in a sequence." )
379
+ self ._confirmTurnEnd = True
380
+ else :
381
+ self .confirmTurnEnd ()
382
+
383
+ KernelEventsManager ().send (KernelEvent .FightTurnReadyRequest )
384
+ return False
330
385
331
386
elif isinstance (msg , GameFightTurnEndMessage ):
332
387
if not self ._confirmTurnEnd :
@@ -336,6 +391,7 @@ def process(self, msg: Message) -> bool:
336
391
entityInfos = Kernel ().fightEntitiesFrame .getEntityInfos (msg .id )
337
392
if isinstance (entityInfos , GameFightFighterInformations ) and not entityInfos .spawnInfo .alive :
338
393
bffm .BuffManager ().markFinishingBuffs (msg .id )
394
+ KernelEventsManager ().send (KernelEvent .FightTurnEnd , msg .id )
339
395
if msg .id == CurrentPlayedFighterManager ().currentFighterId :
340
396
CurrentPlayedFighterManager ().getSpellCastManager ().nextTurn ()
341
397
SpellWrapper .refreshAllPlayerSpellHolder (msg .id )
@@ -370,6 +426,22 @@ def pulled(self) -> bool:
370
426
KernelEventsManager ().send (KernelEvent .FightEnded )
371
427
return True
372
428
429
+ def confirmTurnEnd (self ):
430
+ fighterInfos = Kernel ().fightEntitiesFrame .getEntityInfos (self ._lastPlayerId )
431
+ if fighterInfos :
432
+ bffm .BuffManager ().markFinishingBuffs (self ._lastPlayerId )
433
+ if self ._lastPlayerId == CurrentPlayedFighterManager ().currentFighterId :
434
+ SpellWrapper .refreshAllPlayerSpellHolder (self ._lastPlayerId )
435
+ KernelEventsManager ().send (KernelEvent .FightTurnEnd , self ._lastPlayerId )
436
+ else :
437
+ Logger ().error (f"Can't find fighter infos for player { self ._lastPlayerId } " )
438
+ spellCastManager = CurrentPlayedFighterManager ().getSpellCastManagerById (self ._lastPlayerId )
439
+ if spellCastManager :
440
+ spellCastManager .nextTurn ()
441
+ turnReadyMsg = GameFightTurnReadyMessage ()
442
+ turnReadyMsg .init (True )
443
+ ConnectionsHandler ().send (turnReadyMsg )
444
+
373
445
def getSequencesStack (self ) -> list [fseqf .FightSequenceFrame ]:
374
446
res = []
375
447
seq = self ._currentSequenceFrame
0 commit comments