Manual/Protocol Surface/Command reference
v1.0.364 notes · build 2026-11-07 12:10 UTC

Command reference

3,115 + 54 · directions · domains · conventions · 1.0.364 diff
#commands #protocol

Dispatch on a flat dot-separated string; no numeric opcode layer above the SFS2X framing. 1.0.364: MsgDefines defines 3,115 commands, MsgMap handles 3,097; 54 C#-only commands; 133 chat-table wire names. (1.0.351: 3,065 / 3,047 + 131 chat = 3,178.)

Direction split static

Request 2,243; Push 731 (push.*-named + init); never sent 124; indirect send (via variable, e.g. BatchDoServerMail(MsgDefines.X)) 9; sent and push-named 6; C#-only request 2. Total 3,115 = 3,113 distinct wire names (two strings defined under two keys each). C# handles 71 wire names; for the 18 shared with Lua, C# wins. Chat table: 87 on the chat WebSocket, 45 on the game socket, 1 unhandled; 5 share wire names with MsgDefines. ~23% of the catalog is pushes.

Domains (1.0.351 categorization)

Activity 900 (deprioritize), Season 754 (deprioritize), Alliance 310, Shop/Economy/IAP 188, World Map 166, City/Building 110, Military/Army 87, Account/Login 80, Hero 71, Task/Quest 70, Government 69, PVP/Arena 53, Chat 31, Mail 27, System 26, Admin/Debug 7, Misc 108. Trade trucks train. and alliance.train. = the 60-command Net/Msgs/Railway module in 1.0.364 (alliance train runs under activity type 203).

1.0.364 vs 1.0.351 diff (LWLF 793 → 825) static

3,065→3,115 keys, 3,047→3,097 handled; 50 added, 0 removed, 0 renamed, no handler moved; live Android (826) and iOS (821) bundles match 1.0.364 at catalog level; every reimplemented request schema unchanged (push.chat.get.system.mails gained delActivityIds). Adds:

  • CrystalBoss/Red-Boss 13 (red.boss.get.march, red.boss.battle.report, get.red.boss.user.record, red.boss.get.achievement.info, red.boss.receive.achievement.reward, red.boss.get.progress, red.boss.claim.all {type}, red.boss.claim.daily.reward, 5× push.red.boss.*)
  • Account 8 (user.del.user, user.del.check, del.account.get.max.pay.user, push.account.del.max.pay.user, account.passkey.init, push.account.passkey.init, account.passkey.list, account.passkey.delete)
  • DispatchRecover 7 (reward.recover.param switches recover_reward_a/recover_reward_b, claim costs a_k5/b_k5 as type,id,num; dispatch.recover.reward.list/.log/{customId}; train.recover.reward.list/.log/{customId}; records older than the last seven are mailed)
  • Net.Msgs root 5 (age.signal.record, exchange.goods.buy, world.alliance.expedition.info, world.give.up.alliance.building, push.bp.score.repair)
  • PVPFormationPreset 5 (formation.preset.save/.apply/.rename/.delete, push.formation.preset)
  • Social 3 (social.status.update/.clear/.view); Activity 2 (dragon.move.base.cool, winter.storm.reward.get.all); AllianceStar 2; CrystalTalent 2 (crystal.talent.info, crystal.talent.upgrade {nodeId, recommend}); push.alliance.gift.exp.change; chat.permission.syn {action}; hero.init.detail.get {heroUuids}
  • Also MailEnum gained CrystalBoss=58; Lua LoginErrorCode gained 55–58. C# sends change.user.parseid, check.device.change, login.ext outside MsgDefines.

Claim requests

558 claim-like catalogued (55 with hand-traced eligibility; ~260 free-claim-like). Claim-all sentinels: daily.quest.reward {stage:-1} (response lists in stageArr); sign.receive.day.reward {day:0}; activity.hero.score.reward {index:-1}; new.arena.reward/gale.arena.reward {target:-1}; season.tower.reward {stageId:-1}; city.battle.activity.gain.task.reward {configId:-1} all tasks / -2 score goals; city.competition.s0.gain.task.reward {cityLv:-1, configId:-1}; zone.mobilization.claim.challenge.reward {index:0}; lw.receive.towerup.first.reward/lw.receive.dominator.up.first.reward {id:-1}.

Conventions

  • TaskState: 1 = CanReceive (claimable), 2 = claimed; generic already-claimed error 120289 live; daily gates use the server day (02:00 UTC live).
  • activityId is an Int almost everywhere but a UTF string in hero.event.info.get; detail reads send the entry's activityid field (Alliance Duel {id:55000, activityid:"70000"} — requesting "55000" yields bare {success=true} live).
  • useFree:0, useGold/gold flags spend diamonds (free.building.up.new {gold:2}); speed-ups build.ccd.m.new, queue.ccd.m.new, building.camp.accel take item strings (itemIDs as "tmpl;n|tmpl;n") or useGold; the UI's isGold never reaches the wire; queue.ccd.m.new with empty itemIDs = diamond instant-finish; items-only build.ccd.m.new reply lists itemCostArr + remainGold live.
  • Reward payload: reward: [{type: Int, value: Int|Object, total?: Long}] + sibling resource: {oil, metal, money, electricity, water, pvePoint, wood, people, dragonHonorScore, obsidian, flint, petroleum} (absolute balances, applied before reward entries). Plain resources: METAL = iron, WOOD(31) = coins, FOOD, GOLD = diamonds, PETROLEUM = oil; on the wire food = money, coins = wood, iron = metal. Goods type 7 {itemId, count, rewardAdd}; resource items 27 {id, num}; heroes 25 {heroId, rewardAdd, uuid}; soldiers 23 {itemId, count}; equipment 38 nests value.changes[] as {equipUid, cfgId, num, changeNum}.

Full catalogs

commands.tsv (all 3,115 rows: wire name, direction, runtime handler, request params with SFS types as name:Int, [name:Type] for conditional puts, response fields read, DataCenter managers, send sites, C# shadow, relevance label); command_send_sites.tsv (4,561 sites with enclosing function + nearest if guards); claim_commands.tsv (558); chat_commands.tsv (133); systems.tsv (159 game systems). The 1.0.351 cmd-data rows are [Key, wire cmd, handler class, channel(SFS|WS)], e.g. [TaskRewardGet, task.reward.get, Net.Msgs.TaskRewardGetMessage, SFS].

notes build 2026-11-07 12:10 UTC · lw-notes@9c47e1b · sources: own capture/analysis cross-checked against the public dossier