88from pydofus2 .com .ankamagames .berilia .managers .KernelEventsManager import KernelEventsManager
99from pydofus2 .com .ankamagames .dofus .internalDatacenter .spells .SpellWrapper import SpellWrapper
1010from 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
1113from pydofus2 .com .ankamagames .dofus .logic .common .managers .StatsManager import StatsManager
1214from pydofus2 .com .ankamagames .dofus .logic .game .common .managers .PlayedCharacterManager import PlayedCharacterManager
1315from pydofus2 .com .ankamagames .dofus .logic .game .common .misc .DofusEntities import DofusEntities
6971from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .GameFightTurnListMessage import (
7072 GameFightTurnListMessage ,
7173)
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+ )
7289from pydofus2 .com .ankamagames .dofus .network .messages .game .context .fight .SlaveNoLongerControledMessage import (
7390 SlaveNoLongerControledMessage ,
7491)
@@ -189,6 +206,27 @@ def process(self, msg: Message) -> bool:
189206 self .updateTurnsList (gftmsg .ids , gftmsg .deadsIds )
190207 return True
191208
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+
192230 elif isinstance (msg , GameFightSynchronizeMessage ):
193231 gftcimsg = msg
194232 if self ._newWave :
@@ -233,7 +271,8 @@ def process(self, msg: Message) -> bool:
233271 Kernel ().worker .addFrame (self ._sequenceFrameSwitcher )
234272 self ._currentSequenceFrame = fseqf .FightSequenceFrame (self , self ._currentSequenceFrame )
235273 self ._sequenceFrameSwitcher .currentFrame = self ._currentSequenceFrame
236- return False
274+ KernelEventsManager ().send (KernelEvent .SequenceStart , msg .sequenceType , msg .authorId )
275+ return True
237276
238277 elif isinstance (msg , SequenceEndMessage ):
239278 semsg = msg
@@ -253,7 +292,8 @@ def process(self, msg: Message) -> bool:
253292 self ._currentSequenceFrame .execute ()
254293 self ._sequenceFrameSwitcher .currentFrame = self ._currentSequenceFrame .parent
255294 self ._currentSequenceFrame = self ._currentSequenceFrame .parent
256- return False
295+ KernelEventsManager ().send (KernelEvent .SequenceEnd )
296+ return True
257297
258298 elif isinstance (msg , GameFightNewWaveMessage ):
259299 gfnwmsg = msg
@@ -298,7 +338,7 @@ def process(self, msg: Message) -> bool:
298338 self .endBattle (gfemsg )
299339 FightersStateManager ().endFight ()
300340 CurrentPlayedFighterManager ().endFight ()
301- return False
341+ return True
302342
303343 elif isinstance (msg , GameContextDestroyMessage ):
304344 if self ._battleResults :
@@ -327,6 +367,21 @@ def process(self, msg: Message) -> bool:
327367 elif isinstance (msg , RemoveSpellModifierMessage ):
328368 SpellModifiersManager ().deleteSpellModifierAction (msg .actorId , msg .modifierType , msg .actionType )
329369 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
330385
331386 elif isinstance (msg , GameFightTurnEndMessage ):
332387 if not self ._confirmTurnEnd :
@@ -336,6 +391,7 @@ def process(self, msg: Message) -> bool:
336391 entityInfos = Kernel ().fightEntitiesFrame .getEntityInfos (msg .id )
337392 if isinstance (entityInfos , GameFightFighterInformations ) and not entityInfos .spawnInfo .alive :
338393 bffm .BuffManager ().markFinishingBuffs (msg .id )
394+ KernelEventsManager ().send (KernelEvent .FightTurnEnd , msg .id )
339395 if msg .id == CurrentPlayedFighterManager ().currentFighterId :
340396 CurrentPlayedFighterManager ().getSpellCastManager ().nextTurn ()
341397 SpellWrapper .refreshAllPlayerSpellHolder (msg .id )
@@ -370,6 +426,22 @@ def pulled(self) -> bool:
370426 KernelEventsManager ().send (KernelEvent .FightEnded )
371427 return True
372428
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+
373445 def getSequencesStack (self ) -> list [fseqf .FightSequenceFrame ]:
374446 res = []
375447 seq = self ._currentSequenceFrame
0 commit comments