decode the four types the client kept sending

14303 AskForJoinableAlliancesList and 14107 CancelMatchmake are both genuinely
empty payloads. 516 UpdateLastShownLevelUp is header only, 537 StartMatchmake
carries a vint and a bool. none of them move the home checksum.

that clears the unknown type warnings out of the log.
This commit is contained in:
WiseDev 2026-08-23 09:48:49 +03:00
parent c0713b50d7
commit 68e2b87a0a
4 changed files with 63 additions and 2 deletions

View file

@ -0,0 +1,48 @@
use logic_derive::Command;
use titan::Payload;
use crate::commands::command::{CommandOutcome, Execute};
use crate::commands::command_type;
use crate::commands::header::LogicCommandHeader;
use crate::home::LogicHomeMode;
#[derive(Debug, Default, Payload, Command)]
#[command(id = command_type::UPDATE_LAST_SHOWN_LEVEL_UP)]
pub struct LogicUpdateLastShownLevelUpCommand {
pub header: LogicCommandHeader,
}
impl Execute for LogicUpdateLastShownLevelUpCommand {
fn execute(&self, mode: &mut LogicHomeMode) -> CommandOutcome {
let level = mode.avatar().exp_level;
let shown = mode.home().last_shown_level_up;
if level <= shown {
return CommandOutcome::Rejected("that level up was already shown");
}
mode.home_mut().last_shown_level_up = if shown > 1 { shown + 1 } else { 2 };
CommandOutcome::Applied
}
}
#[derive(Debug, Default, Payload, Command)]
#[command(id = command_type::START_MATCHMAKE)]
pub struct LogicStartMatchmakeCommand {
pub header: LogicCommandHeader,
#[codec(vint)]
pub matchmake_slot: i32,
#[codec(bool)]
pub notify: bool,
}
impl Execute for LogicStartMatchmakeCommand {
fn execute(&self, mode: &mut LogicHomeMode) -> CommandOutcome {
if mode
.avatar()
.arena
.as_arena()
.map(|arena| arena.is_training_camp())
.unwrap_or(true)
{
return CommandOutcome::Rejected("the training camp cannot matchmake");
}
if mode.is_claiming_reward() {
return CommandOutcome::Rejected("a reward claim is in progress");
}
CommandOutcome::Ignored
}
}

View file

@ -4,6 +4,7 @@ mod command;
mod deck; mod deck;
mod header; mod header;
mod manager; mod manager;
mod matchmake;
mod reward; mod reward;
mod shop; mod shop;
mod spells; mod spells;
@ -20,6 +21,7 @@ pub use command::{CommandMeta, CommandOutcome, CommandRegistryEntry, Execute, Lo
pub use deck::{LogicMoveSpellCommand, LogicSwapSpellsCommand}; pub use deck::{LogicMoveSpellCommand, LogicSwapSpellsCommand};
pub use header::LogicCommandHeader; pub use header::LogicCommandHeader;
pub use manager::LogicCommandManager; pub use manager::LogicCommandManager;
pub use matchmake::{LogicStartMatchmakeCommand, LogicUpdateLastShownLevelUpCommand};
pub use reward::LogicReward; pub use reward::LogicReward;
pub use shop::{ pub use shop::{
LogicBuyCardCommand, LogicBuyChestCommand, LogicBuyResourcePackCommand, LogicBuyCardCommand, LogicBuyChestCommand, LogicBuyResourcePackCommand,
@ -44,6 +46,7 @@ pub mod command_type {
pub const SELL_CHEST: i32 = 507; pub const SELL_CHEST: i32 = 507;
pub const UPDATE_LAST_SHOWN_LEVEL_UP: i32 = 516; pub const UPDATE_LAST_SHOWN_LEVEL_UP: i32 = 516;
pub const CANCEL_CHEST_OPEN: i32 = 517; pub const CANCEL_CHEST_OPEN: i32 = 517;
pub const START_MATCHMAKE: i32 = 537;
pub const COLLECT_FREE_CHEST: i32 = 518; pub const COLLECT_FREE_CHEST: i32 = 518;
pub const SORT_COLLECTION: i32 = 520; pub const SORT_COLLECTION: i32 = 520;
pub const MOVE_SPELL: i32 = 521; pub const MOVE_SPELL: i32 = 521;

View file

@ -12,8 +12,8 @@ pub use commands::{
LogicCommand, LogicCommandHeader, LogicCommandManager, LogicFuseSpellsCommand, LogicCommand, LogicCommandHeader, LogicCommandManager, LogicFuseSpellsCommand,
LogicHelpOpenedCommand, LogicMoveSpellCommand, LogicPageOpenedCommand, LogicHelpOpenedCommand, LogicMoveSpellCommand, LogicPageOpenedCommand,
LogicRefreshAchievementsCommand, LogicReward, LogicShopOpenedCommand, LogicRefreshAchievementsCommand, LogicReward, LogicShopOpenedCommand,
LogicShopSeedChangedCommand, LogicSortCollectionCommand, LogicStartRewardClaimCommand, LogicShopSeedChangedCommand, LogicSortCollectionCommand, LogicStartMatchmakeCommand,
LogicSwapSpellsCommand, LogicStartRewardClaimCommand, LogicSwapSpellsCommand, LogicUpdateLastShownLevelUpCommand,
}; };
pub use data::{ pub use data::{
table, DataError, LogicArenaData, LogicData, LogicDataRef, LogicDataTable, table, DataError, LogicArenaData, LogicData, LogicDataRef, LogicDataTable,

View file

@ -16,6 +16,16 @@ pub struct AskForPlayingFacebookFriendsMessage {
pub facebook_ids: Option<Vec<Option<String>>>, pub facebook_ids: Option<Vec<Option<String>>>,
} }
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
#[message(id = 14107, direction = "client", name = "CancelMatchmakeMessage")]
pub struct CancelMatchmakeMessage {}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
#[message(
id = 14303,
direction = "client",
name = "AskForJoinableAlliancesListMessage"
)]
pub struct AskForJoinableAlliancesListMessage {}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
#[message(id = 14402, direction = "client", name = "AskForTVContentMessage")] #[message(id = 14402, direction = "client", name = "AskForTVContentMessage")]
pub struct AskForTVContentMessage {} pub struct AskForTVContentMessage {}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]