@@ -850,6 +850,7 @@ export function GameProvider({ children }: GameProviderProps) {
850850 fighters : ship . fighters ,
851851 max_fighters : ship . max_fighters ,
852852 current_task_id : ship . current_task_id ,
853+ current_task_actor : ship . current_task_actor ,
853854 } )
854855 }
855856 }
@@ -908,6 +909,7 @@ export function GameProvider({ children }: GameProviderProps) {
908909 fighters : ship . fighters ,
909910 max_fighters : ship . max_fighters ,
910911 current_task_id : ship . current_task_id ,
912+ current_task_actor : ship . current_task_actor ,
911913 } )
912914 }
913915
@@ -1541,9 +1543,9 @@ export function GameProvider({ children }: GameProviderProps) {
15411543 const myId = useGameStore . getState ( ) . character_id
15421544 const isMyTask = ! data . actor_character_id || data . actor_character_id === myId
15431545
1544- // Only track tasks initiated by this player in the task engine.
1545- // Other corp members' tasks show ship "busy" status via the
1546- // ship's current_task_id but don't fill our task engine badges .
1546+ // Only tasks initiated by this player get full task- engine
1547+ // metadata. Ship busy state is tracked separately so other
1548+ // corp members' tasks can still mark a ship occupied .
15471549 if ( taskId && isMyTask ) {
15481550 useGameStore . getState ( ) . addActiveTask ( {
15491551 task_id : taskId ,
@@ -1559,11 +1561,12 @@ export function GameProvider({ children }: GameProviderProps) {
15591561 } )
15601562 }
15611563
1562- // Update corp ship's task state so ShipCard shows busy status
15631564 if ( taskId && data . ship_id && isKnownFleetShip ( data . ship_id ) ) {
1564- upsertCorporationShip ( data . ship_id , {
1565- current_task_id : taskId ,
1566- current_task_actor_name : data . actor_character_name ?? null ,
1565+ useGameStore . getState ( ) . setShipTaskOccupancy ( data . ship_id , {
1566+ task_id : taskId ,
1567+ actor_name : data . actor_character_name ?? null ,
1568+ task_status : data . task_status === "waking" ? "waking" : "active" ,
1569+ source : "live" ,
15671570 } )
15681571 }
15691572 break
@@ -1574,28 +1577,35 @@ export function GameProvider({ children }: GameProviderProps) {
15741577 const data = e . payload as Msg . TaskFinishMessage
15751578
15761579 const taskId = normalizeTaskId ( data . task_id )
1580+ if ( ! taskId ) break
15771581
1578- // Clear corp ship's task state regardless of who owns the task
1579- if ( data . ship_id && isKnownFleetShip ( data . ship_id ) ) {
1580- upsertCorporationShip ( data . ship_id , {
1581- current_task_id : null ,
1582- current_task_actor_name : null ,
1583- } )
1582+ const activeTasks = useGameStore . getState ( ) . activeTasks
1583+ const selectedTaskId =
1584+ activeTasks [ taskId ] ? taskId : (
1585+ Object . keys ( activeTasks ) . find ( ( activeTaskId ) => activeTaskId . startsWith ( taskId ) )
1586+ )
1587+ const activeTask = selectedTaskId ? activeTasks [ selectedTaskId ] : undefined
1588+ const shipId = data . ship_id ?? activeTask ?. ship_id
1589+
1590+ if ( shipId && isKnownFleetShip ( shipId ) ) {
1591+ useGameStore . getState ( ) . clearShipTaskOccupancyByShipId ( shipId )
1592+ } else {
1593+ useGameStore . getState ( ) . clearShipTaskOccupancyByTaskId ( taskId )
15841594 }
15851595
15861596 // Only process task engine cleanup if this task is in our
15871597 // active tasks (i.e. we tracked it on task.start because it
15881598 // belongs to us).
1589- if ( taskId && useGameStore . getState ( ) . activeTasks [ taskId ] ) {
1590- useGameStore . getState ( ) . removeActiveTask ( taskId )
1599+ if ( selectedTaskId ) {
1600+ useGameStore . getState ( ) . removeActiveTask ( selectedTaskId )
15911601
15921602 // Backward compatibility while old short IDs may still exist in local state.
1593- if ( taskId . length > 6 ) {
1594- useGameStore . getState ( ) . removeActiveTask ( taskId . slice ( 0 , 6 ) )
1603+ if ( selectedTaskId . length > 6 ) {
1604+ useGameStore . getState ( ) . removeActiveTask ( selectedTaskId . slice ( 0 , 6 ) )
15951605 } else {
15961606 const activeTaskIds = Object . keys ( useGameStore . getState ( ) . activeTasks )
15971607 for ( const activeTaskId of activeTaskIds ) {
1598- if ( activeTaskId . startsWith ( taskId ) ) {
1608+ if ( activeTaskId . startsWith ( selectedTaskId ) ) {
15991609 useGameStore . getState ( ) . removeActiveTask ( activeTaskId )
16001610 }
16011611 }
@@ -1628,10 +1638,9 @@ export function GameProvider({ children }: GameProviderProps) {
16281638 const shipId = data . ship_id ?? activeTask ?. ship_id
16291639
16301640 if ( shipId && isKnownFleetShip ( shipId ) ) {
1631- upsertCorporationShip ( shipId , {
1632- current_task_id : null ,
1633- current_task_actor_name : null ,
1634- } )
1641+ useGameStore . getState ( ) . clearShipTaskOccupancyByShipId ( shipId )
1642+ } else {
1643+ useGameStore . getState ( ) . clearShipTaskOccupancyByTaskId ( taskId )
16351644 }
16361645
16371646 if ( selectedTaskId ) {
0 commit comments