Skip to content

Commit ddf7f70

Browse files
author
Hexalgo
committed
fight modules rework cleaned and merged by khalid
1 parent 1c67b0d commit ddf7f70

File tree

9 files changed

+157
-21
lines changed

9 files changed

+157
-21
lines changed

pydofus2/com/ankamagames/berilia/managers/KernelEvent.py

+9
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,26 @@ class KernelEvent(Enum):
4646

4747
# Fight
4848
FightSwordShowed = auto()
49+
FightTurnReadyRequest = auto()
50+
FightTurnStart = auto()
51+
FightTurnStartPlaying = auto()
52+
FightTurnEnd = auto()
53+
FightOptionStateUpdate = auto()
4954
FightResumed = auto()
5055
FighterMovementApplied = auto()
5156
FighterCastedSpell = auto()
5257
SequenceExecFinished = auto()
58+
SequenceEnd = auto()
59+
SequenceStart = auto()
5360
FightStarted = auto()
5461
FightEnded = auto()
5562
MuleFightContext = auto()
5663
FighterShowed = auto()
5764
FightJoined = auto()
5865
RoleplayStarted = auto()
5966
FightLeader = auto()
67+
ActionFightNoSpellCast = auto()
68+
FightMapNoMovement = auto()
6069

6170
# buffs in fight
6271
BuffAdd = auto()

pydofus2/com/ankamagames/dofus/logic/game/fight/frames/FightBattleFrame.py

+75-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from pydofus2.com.ankamagames.berilia.managers.KernelEventsManager import KernelEventsManager
99
from pydofus2.com.ankamagames.dofus.internalDatacenter.spells.SpellWrapper import SpellWrapper
1010
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
1113
from pydofus2.com.ankamagames.dofus.logic.common.managers.StatsManager import StatsManager
1214
from pydofus2.com.ankamagames.dofus.logic.game.common.managers.PlayedCharacterManager import PlayedCharacterManager
1315
from pydofus2.com.ankamagames.dofus.logic.game.common.misc.DofusEntities import DofusEntities
@@ -69,6 +71,21 @@
6971
from 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+
)
7289
from 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

pydofus2/com/ankamagames/dofus/logic/game/fight/frames/FightContextFrame.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
)
3838
from pydofus2.com.ankamagames.dofus.logic.game.fight.managers.SpellModifiersManager import SpellModifiersManager
3939
from pydofus2.com.ankamagames.dofus.logic.game.fight.types.SpellCastSequenceContext import SpellCastSequenceContext
40+
from pydofus2.com.ankamagames.dofus.logic.game.roleplay.frames.RoleplayEntitiesFrame import RoleplayEntitiesFrame
4041
from pydofus2.com.ankamagames.dofus.network.enums.ChallengeBonusEnum import ChallengeBonusEnum
4142
from pydofus2.com.ankamagames.dofus.network.enums.ChallengeModEnum import ChallengeModEnum
4243
from pydofus2.com.ankamagames.dofus.network.enums.ChallengeStateEnum import ChallengeStateEnum
@@ -113,6 +114,9 @@
113114
from pydofus2.com.ankamagames.dofus.network.messages.game.context.fight.GameFightLeaveMessage import (
114115
GameFightLeaveMessage,
115116
)
117+
from pydofus2.com.ankamagames.dofus.network.messages.game.context.fight.GameFightOptionStateUpdateMessage import (
118+
GameFightOptionStateUpdateMessage,
119+
)
116120
from pydofus2.com.ankamagames.dofus.network.messages.game.context.fight.GameFightResumeMessage import (
117121
GameFightResumeMessage,
118122
)
@@ -516,7 +520,8 @@ def process(self, msg: Message) -> bool:
516520
SpellWrapper.resetAllCoolDown(PlayedCharacterManager().id, None)
517521
SpellModifiersManager.clear()
518522
Kernel().worker.removeFrame(self)
519-
return False
523+
KernelEventsManager().send(KernelEvent.FightEnded)
524+
return True
520525

521526
elif isinstance(msg, ChallengeTargetsListRequestAction):
522527
ctlra = msg
@@ -547,7 +552,8 @@ def process(self, msg: Message) -> bool:
547552
return True
548553

549554
elif isinstance(msg, GameActionFightNoSpellCastMessage):
550-
return False
555+
KernelEventsManager().send(KernelEvent.ActionFightNoSpellCast)
556+
return True
551557

552558
elif isinstance(msg, UpdateSpellModifierAction):
553559
usma = msg
@@ -655,6 +661,16 @@ def process(self, msg: Message) -> bool:
655661
self._challengeBonusType = msg.challengeBonus
656662
KernelEventsManager().send(KernelEvent.ChallengeBonusSelected, self._challengeBonusType)
657663
return True
664+
# THIS IS CUSTOM INTEGRATION.
665+
elif isinstance(msg, GameFightOptionStateUpdateMessage):
666+
gfosumsg = msg
667+
KernelEventsManager().send(
668+
KernelEvent.FightOptionStateUpdate, gfosumsg.fightId, gfosumsg.teamId, gfosumsg.option, gfosumsg.state
669+
)
670+
if Kernel().worker.getFrameByType(RoleplayEntitiesFrame):
671+
return False
672+
673+
return True
658674

659675
return False
660676

pydofus2/com/ankamagames/dofus/logic/game/fight/frames/FightTurnFrame.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from typing import TYPE_CHECKING
22

33
from pydofus2.com.ankamagames.atouin.messages.EntityMovementCompleteMessage import EntityMovementCompleteMessage
4+
from pydofus2.com.ankamagames.berilia.managers.KernelEvent import KernelEvent
5+
from pydofus2.com.ankamagames.berilia.managers.KernelEventsManager import KernelEventsManager
46
from pydofus2.com.ankamagames.dofus.logic.game.common.misc.DofusEntities import DofusEntities
57
from pydofus2.com.ankamagames.dofus.logic.game.fight.managers.CurrentPlayedFighterManager import (
68
CurrentPlayedFighterManager,
@@ -83,7 +85,8 @@ def process(self, msg: Message) -> bool:
8385
if isinstance(msg, GameMapNoMovementMessage):
8486
if self.myTurn:
8587
self._isRequestingMovement = False
86-
return False
88+
KernelEventsManager().send(KernelEvent.FightMapNoMovement)
89+
return True
8790

8891
elif isinstance(msg, EntityMovementCompleteMessage):
8992
if self.myTurn:

pydofus2/com/ankamagames/dofus/logic/game/roleplay/frames/RoleplayEntitiesFrame.py

+35
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
from pydofus2.com.ankamagames.dofus.logic.game.roleplay.types.FightTeam import FightTeam
2121
from pydofus2.com.ankamagames.dofus.network.enums.MapObstacleStateEnum import MapObstacleStateEnum
2222
from pydofus2.com.ankamagames.dofus.network.messages.common.basic.BasicPingMessage import BasicPingMessage
23+
from pydofus2.com.ankamagames.dofus.network.messages.game.context.fight.GameFightOptionStateUpdateMessage import (
24+
GameFightOptionStateUpdateMessage,
25+
)
2326
from pydofus2.com.ankamagames.dofus.network.messages.game.context.fight.GameFightUpdateTeamMessage import (
2427
GameFightUpdateTeamMessage,
2528
)
@@ -143,6 +146,7 @@ def __init__(self):
143146
super().__init__()
144147

145148
def pulled(self) -> bool:
149+
Logger().debug("pulled")
146150
self._fights.clear()
147151
self._objects.clear()
148152
self._npcList.clear()
@@ -151,6 +155,7 @@ def pulled(self) -> bool:
151155
return super().pulled()
152156

153157
def pushed(self) -> bool:
158+
Logger().debug("pushed")
154159
self.nbrFails = 0
155160
self.initNewMap()
156161
self.mcidm_processed = False
@@ -360,6 +365,24 @@ def process(self, msg: Message):
360365
self.updateFight(gfutmsg.fightId, gfutmsg.team)
361366
return True
362367

368+
elif isinstance(msg, GameFightOptionStateUpdateMessage):
369+
gfosumsg = msg
370+
self.updateSwordOptions(gfosumsg.fightId, gfosumsg.teamId, gfosumsg.option, gfosumsg.state)
371+
KernelEventsManager().send(
372+
KernelEvent.FightOptionStateUpdate, gfosumsg.fightId, gfosumsg.teamId, gfosumsg.option, gfosumsg.state
373+
)
374+
375+
return True
376+
377+
elif isinstance(msg, GameFightOptionStateUpdateMessage):
378+
gfosumsg = msg
379+
self.updateSwordOptions(gfosumsg.fightId, gfosumsg.teamId, gfosumsg.option, gfosumsg.state)
380+
KernelEventsManager().send(
381+
KernelEvent.FightOptionStateUpdate, gfosumsg.fightId, gfosumsg.teamId, gfosumsg.option, gfosumsg.state
382+
)
383+
384+
return True
385+
363386
elif isinstance(msg, GameRolePlayShowChallengeMessage):
364387
grpsclmsg = msg
365388
self.addFight(grpsclmsg.commonsInfos)
@@ -430,6 +453,18 @@ def removeFight(self, fightId: int) -> None:
430453
del team.teamEntity
431454
del self._fights[fightId]
432455

456+
def updateSwordOptions(self, fightId: int, teamId: int, option: int = -1, state: bool = False):
457+
opt = None
458+
fight: Fight = self._fights.get(fightId, None)
459+
if not fight:
460+
return
461+
fightTeam: FightTeam = fight.getTeamById(teamId)
462+
463+
if not fightTeam:
464+
return
465+
if option != -1:
466+
fightTeam.teamOptions[option] = state
467+
433468
def updateFight(self, fightId: int, team: FightTeamInformations) -> None:
434469
present: bool = False
435470
fight: Fight = self._fights.get(fightId)

pydofus2/com/ankamagames/dofus/network/messages/connection/IdentificationSuccessMessage.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class IdentificationSuccessMessage(NetworkMessage):
1919
hasForceRight: bool
2020
wasAlreadyConnected: bool
2121
hasRights: bool
22+
hasReportRight: bool
2223
hasForceRight: bool
2324
wasAlreadyConnected: bool
2425

pydofus2/com/ankamagames/jerakine/network/messages/Worker.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323

2424

2525
class Worker(MessageHandler):
26-
DEBUG_FRAMES: bool = False
27-
DEBUG_MESSAGES: bool = False
28-
DEBUG_FRAMES_PROCESSING: bool = False
26+
DEBUG_FRAMES: bool = True
27+
DEBUG_MESSAGES: bool = True
28+
DEBUG_FRAMES_PROCESSING: bool = True
2929
LOCK = threading.Lock()
3030
CONDITION = threading.Condition(LOCK)
3131
LAST_TIME = time.perf_counter()

pydofus2/com/ankamagames/jerakine/network/parser/D2protocol.json

+12-12
Original file line numberDiff line numberDiff line change
@@ -29758,23 +29758,23 @@
2975829758
}
2975929759
},
2976029760
"primitives": [
29761-
"Short",
29762-
"UTF",
2976329761
"UnsignedInt",
29764-
"VarUhInt",
29765-
"ByteArray",
29766-
"Float",
29767-
"VarLong",
29768-
"UnsignedByte",
2976929762
"Byte",
29770-
"VarUhLong",
29763+
"UnsignedByte",
29764+
"UTF",
2977129765
"UnsignedShort",
29772-
"VarShort",
29773-
"VarUhShort",
29766+
"VarUhInt",
2977429767
"Int",
29775-
"VarInt",
29768+
"VarUhShort",
2977629769
"Double",
29777-
"Boolean"
29770+
"VarUhLong",
29771+
"Float",
29772+
"Boolean",
29773+
"VarInt",
29774+
"VarShort",
29775+
"VarLong",
29776+
"Short",
29777+
"ByteArray"
2977829778
],
2977929779
"type": {
2978029780
"AbstractCharacterInformation": {

0 commit comments

Comments
 (0)