// gameserver/src/handlers.zig — CW lines (line numbers from PearlSR @ 06aa2d2 + working tree)
23:const grid_fight = @import("services/grid_fight.zig");
25:const grid_fight_talent = @import("services/grid_fight_talent.zig");
40:    .{ CmdID.CmdGridFightGetDataCsReq, grid_fight.onGetData },
41:    .{ CmdID.CmdGridFightStartGamePlayCsReq, grid_fight.onStartGamePlay },
42:    .{ CmdID.CmdGridFightQuitLeaveGamePlayCsReq, grid_fight.onQuitLeaveGamePlay },
43:    .{ CmdID.CmdGridFightResumeGamePlayCsReq, grid_fight.onResumeGamePlay },
44:    .{ CmdID.CmdGridFightRefreshShopCsReq, grid_fight.onRefreshShop },
45:    .{ CmdID.CmdGridFightBuyGoodsCsReq, grid_fight.onBuyGoods },
46:    .{ CmdID.CmdGridFightBuyExpCsReq, grid_fight.onBuyExp },
47:    .{ CmdID.CmdGridFightRecycleRoleCsReq, grid_fight.onRecycleRole },
48:    .{ CmdID.CmdGridFightUpdatePosCsReq, grid_fight.onUpdatePos },
49:    .{ CmdID.CmdGridFightLockShopCsReq, grid_fight.onLockShop },
50:    .{ CmdID.CmdGridFightEnterBattleStageCsReq, grid_fight.onEnterBattleStage },
51:    .{ CmdID.CmdGridFightBackToPrepareReq, grid_fight.onBackToPrepare },
52:    .{ CmdID.CmdGridFightEnterBonfireCsReq, grid_fight.onEnterBonfire },
53:    .{ CmdID.CmdGridFightHandleBonfireHealHpCsReq, grid_fight.onBonfireHeal },
54:    .{ CmdID.CmdGridFightEquipDressCsReq, grid_fight.onEquipDress },
55:    .{ CmdID.CmdGridFightEquipCraftCsReq, grid_fight.onEquipCraft },
56:    .{ CmdID.CmdGridFightRecycleItemCsReq, grid_fight.onRecycleItem },
57:    // GridFightGetOrbCsReq (open dropped orbs); name obfuscated in this protocol.
58:    .{ CmdID.CmdIKMOCJBMGOJ, grid_fight.onGetOrb },
59:    .{ CmdID.CmdGridFightQuitSettleCsReq, grid_fight.onQuitSettle },
60:    .{ CmdID.CmdGridFightGetArchiveCsReq, grid_fight.onGetArchive },
61:    .{ CmdID.CmdGetGameFormationCsReq, grid_fight.onGetGameFormation },
62:    .{ CmdID.CmdUpdateGameFormationCsReq, grid_fight.onUpdateGameFormation },
63:    .{ CmdID.CmdMOIONLDJGJI, grid_fight.onUseConsumable },
64:    .{ CmdID.CmdGridFightUseForgeCsReq, grid_fight.onUseForge },
65:    .{ CmdID.CmdGetActivityScheduleConfigCsReq, grid_fight.onGetActivitySchedule },
66:    .{ CmdID.CmdCycleScoreRewardGetDataCsReq, grid_fight.onCycleScoreRewardGetData },
67:    .{ CmdID.CmdGetOfferingInfoCsReq, grid_fight.onGetOfferingInfo },
68:    .{ CmdID.CmdGridFightTraitUpdateCsReq, grid_fight.onTraitUpdate },
101:    .{ CmdID.CmdPVEBattleResultCsReq, grid_fight.onPVEBattleResult },
107:    .{ CmdID.CmdGetCurBattleInfoCsReq, grid_fight.onGetCurBattleInfo },
199:    //.{ CmdID.CmdGetActivityScheduleConfigCsReq, events.onGetActivity },
223:    .{ CmdID.CmdGridFightPermanentTalentEnableCsReq, grid_fight_talent.onPermanentTalentEnable },
224:    .{ CmdID.CmdGridFightSeasonTalentEnableCsReq, grid_fight_talent.onSeasonTalentEnable },
246:    .{ CmdID.CmdGridFightFinishTutorialCsReq, CmdID.CmdGridFightFinishTutorialScRsp },
247:    .{ CmdID.CmdGridFightUpdateEquipTrackCsReq, CmdID.CmdGridFightUpdateEquipTrackScRsp },
248:    .{ CmdID.CmdGridFightUpdateEquipTrackPriorityCsReq, CmdID.CmdGridFightUpdateEquipTrackPriorityScRsp },
249:    .{ CmdID.CmdGridFightUpdateSpotLightTrackCsReq, CmdID.CmdGridFightUpdateSpotLightTrackScRsp },
250:    .{ CmdID.CmdGridFightPermanentTalentResetCsReq, CmdID.CmdGridFightPermanentTalentResetScRsp },
251:    .{ CmdID.CmdGridFightSeasonTalentResetCsReq, CmdID.CmdGridFightSeasonTalentResetScRsp },
387:    if (try @import("services/grid_fight.zig").handleRest(session, packet, arena.allocator())) return;
430:/// login produced seven such exceptions (EvolveBuild, GridFight, CycleScore,

// gameserver/src/control.zig
14:const grid_fight = @import("services/grid_fight.zig");
15-const watermark = @import("watermark.zig");
16-const LineupStore = @import("manager/lineup_store.zig");
17-const ConfigManager = @import("manager/config_mgr.zig");
18-
--
169:    if (std.mem.eql(u8, line, "gridfight-reset")) {
170-        lock.lock();
171-        defer lock.unlock();
172:        return grid_fight.controlReset();
173-    }
174-    if (std.mem.eql(u8, line, "status")) {
175-        lock.lock();
176-        defer lock.unlock();

// gameserver/src/services/mission.zig
74-/// (ActivityFinalityBattleLevel UnlockQuest). Reported finished so every
75-/// stage is open from the start, whatever quests.json holds. The Currency Wars
76:/// Overclock unlock quest is reported the same way (grid_fight.isUnlockQuest).
77-var event_quests: ?[]const u32 = null;
78-fn eventUnlockQuest(id: u32) bool {
--
115-        quest.progress = 200;
116-        quest.status = if (quests.value.questFinished(id.quest_id) or eventUnlockQuest(id.quest_id) or
117:            @import("grid_fight.zig").isUnlockQuest(id.quest_id))
118-            protocol.QuestStatus.QUEST_FINISH
119-        else

// gameserver/src/services/elation.zig
354-    if (mech_entrance.matches(req.entry_id, floor) and mech_entrance.enabled(allocator))
355-        return mech_entrance.enterScene(session, req, allocator);
356-    if (!entrance.matches(req.entry_id, floor) or !entranceEnabled(allocator))
357:        return @import("grid_fight.zig").onEnterScene(session, packet, allocator);
358-
359-    var manager = @import("../manager/scene_mgr.zig").SceneManager.init(allocator, session.player_uid);
