- summary: Puts the character into a fight: whether it is still in placement, the placement countdown and the fight type.
- area: Game.Fight.Preparation
Puts the character into a fight: whether it is still in placement, the placement countdown and the fight type.
Kind event · Area Game.Fight.Preparation
Tells you how you are in the fight you just entered: placing your character before the fight, or dropped into a fight that is already running.
WHAT TO DO WHEN YOU RECEIVE IT
1. Read FightJoinEvent.is_fight_started.
- false: you are in the PLACEMENT PHASE. Start a countdown of
FightJoinEvent.time_max_before_fight_start TENTHS OF A SECOND (the client
multiplies it by 100 to get milliseconds; 443 means 44.3 s). Place your
character and say you are ready before it runs out.
- true: the fight is already under way (spectating, reconnecting into a
fight). There is no placement; wait for the turn messages.
2. Store FightJoinEvent.fight_type (FightType). It is the same fight type as
FightStartingEvent.fight_type; the client stores it again from here.
3. SEND NOTHING BACK because of this message alone. The client's own replies during
placement come from the player's actions (choosing a cell, the ready button),
not from this event.
4. Expect one fighter-show event per fighter right behind it: they place every
fighter, you included, on its starting cell.
WHAT THE CLIENT DOES. The fight-start handler stores the negation of
FightJoinEvent.is_fight_started as the fight's "in preparation" flag and uses it to
choose between the placement path and the running-fight path; on current builds the
fight-state object and the fight UI service read it too (the UI flips to fight mode
only when it is true).
That handler then converts the countdown to milliseconds and passes it, together with
FightJoinEvent.is_team_phase, to the notification that opens the placement
interface, and starts the countdown display from the same value.
TWO MEMBERS STAY UNNAMED. The canonical message also carries can_be_cancelled and can_say_ready. No client code reads either (the unobfuscated beta client does not read them either), so nothing tells the two same-typed booleans apart. Leave them unset; they are server information only.
OBSERVED (one capture, PvM attack on a monster group): is_fight_started = false,
time = 443, fight_type = PvM, is_team_phase = true; one of the two unnamed booleans
was true, the other false. It arrived in the same burst as FightStartingEvent,
right after it, and one FightFighterShowEvent per monster followed in the same
millisecond.
When you may send it
- Requires
context_readyinferred
Related messages
- You will then receive
FightFighterShowEventobserved — in the same millisecond, one per fighter already in the fight (two monsters); 1 capture - Arrives after
FightStartingEvent
Fields
| # | Field | Type | Meaning | You set it |
|---|---|---|---|---|
| 1 | is_fight_started | bool | False while fighters are still being placed; true when you join a fight already under way. Observed: falseThe live boolean that does not travel with the countdown; the fight-start handler keeps its negation as the fight's in-preparation flag, and on dofus3 builds two or three client services read it. | never |
| 3 | time_max_before_fight_start | int64 | Placement countdown: time left before the fight starts on its own. (tenths of a second) Observed: 443The client multiplies it by 100 to get milliseconds. | never |
| 4 | is_team_phase | bool | Team-phase flag the client passes, with the countdown, to the placement interface. Observed: trueProven as the boolean that travels with the converted countdown into one constructor; the beta client names that argument isTeamPhase. | never |
| 5 | fight_type | FightType | The kind of fight joined. A FightType; the same value as FightStartingEvent.fight_type. | never |