Files
csdemo/Protobufs/underlords/dac_gamemessages.proto
2024-09-15 05:09:15 +02:00

1377 lines
40 KiB
Protocol Buffer

import "steammessages.proto";
import "dac_gcmessages_common.proto";
import "usermessages.proto";
option optimize_for = SPEED;
option cc_generic_services = false;
enum EDACGameMessages {
k_EMsgNetBufferContents = 2;
k_EMsgClientConnectionStarted = 3;
k_EMsgClientConnectionComplete = 4;
k_EMsgClientSetDebugNetBuffer = 5;
k_EMsgPlayerOrder = 6;
k_EMsgGameReplayActionMarker = 7;
k_EMsgPlayerCombinedHero = 8;
k_EMsgPlayerCombatResult = 9;
k_EMsgPlayerWinStreak = 10;
k_EMsgNetBufferRemoved = 11;
k_EMsgClientToServerChatMsg = 12;
k_EMsgServerToClientChatMsg = 13;
k_EMsgPlayerEliminated = 14;
k_EMsgRecordLocalBotStats = 15;
k_EMsgPlayerOrderProcessed = 16;
k_EMsgPlayerAcquiredItem = 18;
k_EMsgPlayerLevelUp = 19;
k_EMsgClientToServerUpvoteNotification = 20;
k_EMsgServerToClientNotificationChanged = 21;
k_EMsgItemChangedOwner = 22;
k_EMsgLocalPlayerInventory = 23;
k_eMsgIndividualPostMatchStats = 24;
k_EMsgPlayerPreferences = 25;
k_EMsgPlayerStateUpdatesComplete = 26;
k_EMsgClientToServerTeammateDuosMessage = 27;
k_EMsgServerToClientTeammateDuosMessage = 28;
k_EMsgPlayerSelectedTalent = 29;
k_EMsgPlayerRecievedUnitFromDuosPartner = 30;
k_EMsgClientToServerLoadShareCode = 31;
k_EMsgPlayerBoardBuddyCommand = 33;
k_EMsgPlayerMapPropCommand = 34;
k_EMsgPlayerLoadPuzzleLeaderboardCommand = 35;
k_EMsgClientToServerClickMsg = 36;
k_EMsgServerToClientClickMsg = 37;
k_EMsgPlayerChallengeCompletePrediction = 38;
}
enum EDACDisconnectReason {
k_EDACDisconnectReason_UserLeaveMatch = 1001;
k_EDACDisconnectReason_UserQuitApp = 1002;
k_EDACDisconnectReason_UserCancel = 1003;
k_EDACDisconnectReason_Goodbye = 1004;
k_EDACDisconnectReason_BadMessage = 2001;
k_EDACDisconnectReason_GameDestroyedUnexpectedly = 2002;
k_EDACDisconnectReason_ChangingServer = 2003;
k_EDACDisconnectReason_OldConnection = 2004;
k_EDACDisconnectReason_GoodbyeUnrecognizedGame = 2005;
}
enum EGameState {
EGameState_Intro = 0;
EGameState_Playing = 1;
EGameState_GameOver = 2;
}
enum ERoundState {
ERoundState_Preparing = 0;
ERoundState_Ready = 1;
ERoundState_Combat = 2;
ERoundState_RoundOver = 3;
}
enum EUnitKeyword {
EUnitKeyword_Invalid = 0;
EUnitKeyword_Beast = 1;
EUnitKeyword_Demon = 2;
EUnitKeyword_Dragon = 3;
EUnitKeyword_Dwarf = 4;
EUnitKeyword_Element = 5;
EUnitKeyword_Elf = 6;
EUnitKeyword_Goblin = 7;
EUnitKeyword_Human = 8;
EUnitKeyword_Naga = 9;
EUnitKeyword_Ogre = 10;
EUnitKeyword_Orc = 11;
EUnitKeyword_Troll = 12;
EUnitKeyword_Undead = 13;
EUnitKeyword_Satyr = 14;
EUnitKeyword_Assassin = 15;
EUnitKeyword_DemonHunter = 16;
EUnitKeyword_Druid = 17;
EUnitKeyword_Hunter = 18;
EUnitKeyword_Knight = 19;
EUnitKeyword_Mage = 20;
EUnitKeyword_Mech = 21;
EUnitKeyword_Shaman = 22;
EUnitKeyword_Warlock = 23;
EUnitKeyword_Warrior = 24;
EUnitKEyword_MegaWarrior = 25;
EUnitKeyword_MegaAssassin = 26;
EUnitKeyword_MegaBloodbound = 27;
EUnitKeyword_MegaElusive = 28;
EUnitKeyword_MegaWarlock = 29;
EUnitKeyword_MegaScaled = 30;
EUnitKeyword_MegaTroll = 31;
EUnitKeyword_MegaDemon = 32;
EUnitKeyword_Primordial = 33;
EUnitKeyword_Brawny = 34;
EUnitKeyword_Savage = 35;
EUnitKeyword_Inventor = 36;
EUnitKeyword_Insect = 37;
EUnitKeyword_Spectral = 38;
EUnitKeyword_Summoner = 39;
EUnitKeyword_SpiritBrother = 40;
EUnitKeyword_Meepo = 41;
EUnitKeyword_Brawler = 43;
EUnitKeyword_Guardian = 46;
EUnitKeyword_Champion = 50;
EUnitKeyword_Wisp = 51;
EUnitKeyword_Brutal = 52;
EUnitKeyword_Healer = 53;
EUnitKeyword_Vigilant = 54;
EUnitKeyword_Void = 55;
EUnitKeyword_Fallen = 42;
EUnitKeyword_Wild = 44;
EUnitKeyword_Swordsman = 45;
EUnitKeyword_Rogue = 47;
EUnitKeyword_Poisoner = 48;
EUnitKeyword_Magus = 49;
}
enum ESynergyType {
ESynergyType_Class = 1;
ESynergyType_Race = 2;
}
enum EDACItemType {
EDACItemType_Invalid = -1;
EDACItemType_Global = 0;
EDACItemType_Equipment_Offensive = 1;
EDACItemType_Equipment_Defensive = 2;
EDACItemType_Equipment_Support = 3;
EDACItemType_Placeable = 5;
EDACItemType_Equipment_Hat = 9;
}
enum EPlayerConnectionState {
EPlayerConnectionState_Connecting = 0;
EPlayerConnectionState_Connected = 1;
EPlayerConnectionState_Disconnected = 2;
}
enum ESendDestination {
ESendDestination_Duos_Partner = 0;
}
enum EPlayerOrder {
EPlayerOrder_SellUnit = 2;
EPlayerOrder_MoveUnit = 3;
EPlayerOrder_BuyXP = 4;
EPlayerOrder_ReRoll = 5;
EPlayerOrder_LockShop = 6;
EPlayerOrder_AssignEquipmentItem = 7;
EPlayerOrder_SelectItemRewardChoice = 8;
EPlayerOrder_DevGold = 9;
EPlayerOrder_DevItem = 10;
EPlayerOrder_DevHero = 12;
EPlayerOrder_BuyAndCombine = 15;
EPlayerOrder_PauseGame = 16;
EPlayerOrder_ResumeGame = 17;
EPlayerOrder_SpectatePlayer = 18;
EPlayerOrder_RequestPlayerStats = 19;
EPlayerOrder_StepForward = 20;
EPlayerOrder_MutePlayer = 21;
EPlayerOrder_SelectTalent = 22;
EPlayerOrder_Send = 23;
EPlayerOrder_CombineItem = 24;
EPlayerOrder_BuyCombineMove = 25;
EPlayerOrder_BuyAndSend = 26;
EPlayerOrder_SendGold = 27;
EPlayerOrder_DevTalent = 28;
EPlayerOrder_SellItem = 29;
EPlayerOrder_DevSetPlayerLevel = 30;
EPlayerOrder_DevGiveUnderlord = 32;
EPlayerOrder_DevSetAutosavingEnabled = 33;
EPlayerOrder_DevRemoveAllUnits = 34;
EPlayerOrder_DevSetUnitRank = 35;
EPlayerOrder_DevRemoveAllItems = 36;
EPlayerOrder_ClearBoard = 37;
EPlayerOrder_GoToTutorialState = 38;
EPlayerOrder_SelectTurboBucket = 39;
EPlayerOrder_TurboBucketReroll = 40;
EPlayerOrder_SelectUnderlord = 41;
EPlayerOrder_DevMakeTestBot = 42;
EPlayerOrder_ItemRewardChoiceReroll = 43;
EPlayerOrder_BuyPuzzleUnit = 44;
EPlayerOrder_Dungeon_AdvancePhase = 45;
}
enum ERoundCombatResult {
ERoundCombatResult_Draw = 0;
ERoundCombatResult_HomeWin = 1;
ERoundCombatResult_AwayWin = 2;
}
enum EDamageSourceType {
k_EDamageSourceType_Round = 0;
k_EDamageSourceType_Unit = 1;
k_EDamageSourceType_Item = 2;
k_EDamageSourceType_DuosNetDamage = 3;
}
enum ERoundVictoryLevel {
ERoundVictoryLevel_HomeDecisive = 0;
ERoundVictoryLevel_HomeNarrow = 1;
ERoundVictoryLevel_HomeFlawless = 2;
ERoundVictoryLevel_HomeNormal = 3;
ERoundVictoryLevel_AwayDecisive = 4;
ERoundVictoryLevel_AwayNarrow = 5;
ERoundVictoryLevel_AwayFlawless = 6;
ERoundVictoryLevel_AwayNormal = 7;
ERoundVictoryLevel_Draw = 8;
}
enum EDACPuzzleRule {
k_EDACPuzzleRule_None = 0;
k_EDACPuzzleRule_UnitCountLimit = 1;
k_EDACPuzzleRule_UnitStarLimit = 2;
k_EDACPuzzleRule_BoardCostLimit = 3;
k_EDACPuzzleRule_ItemCountLimit = 4;
k_EDACPuzzleRule_ValidBoardPositions = 5;
k_EDACPuzzleRule_MaxCombatDuration = 6;
k_EDACPuzzleRule_UnitCopyLimit = 7;
k_EDACPuzzleRule_Custom1 = 100;
k_EDACPuzzleRule_Custom2 = 101;
k_EDACPuzzleRule_Custom3 = 102;
k_EDACPuzzleRule_Custom4 = 103;
k_EDACPuzzleRule_AllianceAllowed1 = 110;
k_EDACPuzzleRule_AllianceAllowed2 = 111;
k_EDACPuzzleRule_AllianceAllowed3 = 112;
k_EDACPuzzleRule_AllianceAllowed4 = 113;
k_EDACPuzzleRule_AllianceDisllowed1 = 120;
k_EDACPuzzleRule_AllianceDisllowed2 = 121;
k_EDACPuzzleRule_AllianceDisllowed3 = 122;
k_EDACPuzzleRule_AllianceDisllowed4 = 123;
k_EDACPuzzleRule_UnitAllowed1 = 130;
k_EDACPuzzleRule_UnitAllowed2 = 131;
k_EDACPuzzleRule_UnitAllowed3 = 132;
k_EDACPuzzleRule_UnitAllowed4 = 133;
k_EDACPuzzleRule_UnitDisallowed1 = 140;
k_EDACPuzzleRule_UnitDisallowed2 = 141;
k_EDACPuzzleRule_UnitDisallowed3 = 142;
k_EDACPuzzleRule_UnitDisallowed4 = 143;
}
enum EDACDungeonRoomType {
k_EDACDungeonRoomType_None = 0;
k_EDACDungeonRoomType_Shop = 1;
k_EDACDungeonRoomType_Mystery = 2;
k_EDACDungeonRoomType_MiniGame = 3;
k_EDACDungeonRoomType_StandardCombat = 4;
k_EDACDungeonRoomType_MiniBoss = 5;
k_EDACDungeonRoomType_Boss = 6;
}
enum EDACDungeonPhase {
k_EDACDungeonPhase_None = 0;
k_EDACDungeonPhase_Intro_ChoosingUnderlord = 1;
k_EDACDungeonPhase_Intro_ChoosingFirstUnit = 2;
k_EDACDungeonPhase_Room_Setup = 3;
k_EDACDungeonPhase_Room_Main = 4;
k_EDACDungeonPhase_Room_Post_Rewards = 5;
k_EDACDungeonPhase_Room_Post_ChooseNextRoom = 6;
k_EDACDungeonPhase_Victory = 7;
k_EDACDungeonPhase_Defeat = 8;
}
enum EUnitAIState {
EUnitAIState_Idle = 0;
EUnitAIState_MoveToAttack = 1;
EUnitAIState_MoveToLocation = 2;
EUnitAIState_Attack = 3;
EUnitAIState_CastAbility = 4;
EUnitAIState_Dead = 5;
EUnitAIState_Portrait = 6;
EUnitAIState_WalkBack = 7;
EUnitAIState_Celebrate = 8;
EUnitAIState_RoundEndTeleport = 9;
EUnitAIState_Resurrecting = 10;
EUnitAIState_WalkThroughGate = 11;
EUnitAIState_MoveInFear = 12;
}
enum EDACIncidentType {
EDACIncidentType_None = 0;
EDACIncidentType_DamagePhysical = 1;
EDACIncidentType_DamageMagical = 2;
EDACIncidentType_DamagePure = 3;
EDACIncidentType_Died = 4;
EDACIncidentType_Heal = 5;
}
enum EDACNetBuffer {
k_eDACNetBuffer_MatchState = 0;
k_eDACNetBuffer_RoundCombat = 1;
k_eDACNetBuffer_PublicPlayerState = 2;
k_eDACNetBuffer_PrivatePlayerState = 3;
k_eDACNetBuffer_Debug = 4;
k_eDACNetBuffer_ModifierName = 5;
k_eDACNetBuffer_IndividualPostMatchStats = 6;
k_eDACNetBuffer_PublicPostMatchStats = 7;
k_eDACNetBuffer_GameModeState = 8;
k_eDACNetBuffer_RoundCombatGlobal = 9;
}
enum EInGameChatType {
k_eInGameChatType_Global = 0;
k_eInGameChatType_Combat = 1;
}
enum EClickType {
k_eClickType_Left = 0;
k_eClickType_Right = 1;
}
enum EMapPropCommand {
k_eMapPropCommand_None = 0;
k_eMapPropCommand_Click = 1;
}
enum EDuosMessageType {
k_eDuosMessageType_None = 0;
k_eDuosMessageType_IWant = 1001;
k_eDuosMessageType_DoYouWant = 1002;
k_eDuosMessageType_YesWant = 1003;
k_eDuosMessageType_NoWant = 1004;
k_eDuosMessageType_FreeYourBenchFor = 1005;
k_eDuosMessageType_Thanks = 1006;
k_eDuosMessageType_Sent1Gold = 1007;
k_eDuosMessageType_Sent5Gold = 1008;
k_eDuosMessageType_INoLongerWant = 1009;
k_eDuosMessageType_WantGold = 1010;
k_eDuosMessageType_LevelUpQuestion = 1011;
k_eDuosMessageType_SpendRerollQuestion = 1012;
}
enum EDuosMessageTargetType {
k_eDuosMessageTargetType_None = 0;
k_eDuosMessageTargetType_Unit = 1;
k_eDuosMessageTargetType_Synergy = 2;
k_eDuosMessageTargetType_Gold = 3;
}
enum EBoardBuddyCommand {
k_eBoardBuddyCommand_None = 0;
k_eBoardBuddyCommand_Move = 1;
}
message CClientReconnectInfo {
optional fixed64 server_steam_id = 1;
optional uint64 lobby_id = 2;
optional uint32 time_updated = 3;
optional uint32 udp_connect_ip = 4;
optional uint32 udp_connect_port = 5;
optional uint32 compatibility_version = 7;
}
message CMsgPlayerStateUpdatesComplete {
}
message CMsgClientUnderlordLoadout {
repeated uint32 item_defs = 1;
optional string loadout_name = 2;
optional bool selected = 3;
optional uint32 underlord_id = 4;
}
message CMsgClientUnderlordLoadoutList {
optional uint32 version = 1;
repeated .CMsgClientUnderlordLoadout loadouts = 2;
}
message CMsgPlayerOrder {
required .EPlayerOrder order = 1 [default = EPlayerOrder_SellUnit];
optional int32 param1 = 2;
optional int32 param2 = 3;
optional int32 param3 = 4;
optional uint32 spoof_player_slot = 5;
optional uint32 command_id = 6;
optional int32 param4 = 7;
optional int32 param5 = 8;
optional int32 param6 = 9;
optional string string_param1 = 10;
}
message CMsgPlayerOrderProcessed {
optional uint32 command_id = 1;
}
message CMsgPlayerCombinedHero {
optional uint32 player_slot = 1;
optional int32 unit_id = 2;
optional uint32 new_rank = 3;
optional uint32 entindex = 4;
optional uint32 notification_id = 5;
optional bool duos_combine = 6;
}
message CMsgPlayerAcquiredItem {
optional uint32 player_slot = 1;
optional int32 item_id = 2;
optional uint32 notification_id = 3;
}
message CMsgPlayerRecievedUnitFromDuosPartner {
optional int32 unit_id = 1;
}
message CMsgPlayerSelectedTalent {
optional uint32 player_slot = 1;
optional int32 talent_itemdef_index = 2;
optional uint32 notification_id = 3;
}
message CMsgPlayerCombatResult {
message DamageSource {
required .EDamageSourceType type = 1 [default = k_EDamageSourceType_Round];
optional int32 entity_id = 2;
optional int32 rank = 3;
optional int32 damage_dealt = 4;
}
optional uint32 player_slot = 1;
optional .ERoundCombatResult result = 4 [default = ERoundCombatResult_Draw];
optional uint32 damage_taken = 5;
repeated .CMsgPlayerCombatResult.DamageSource damage_sources = 6;
optional bool aegis_used = 7;
optional .ERoundVictoryLevel victory_level = 8 [default = ERoundVictoryLevel_HomeDecisive];
optional uint32 notification_id = 9;
optional uint32 total_gold = 11;
optional uint32 gold_from_interest = 12;
optional uint32 gold_from_streak = 13;
optional uint32 gold_from_items = 14;
optional uint32 gold_from_round_bonus = 15;
optional uint32 gold_from_victory = 16;
optional bool free_reroll = 17;
oneof opponent {
uint32 opponent_player_slot = 2;
uint32 opponent_neutral_wave = 3;
}
}
message CMsgPlayerWinStreak {
optional uint32 player_slot = 1;
optional uint32 streak_length = 2;
optional uint32 notification_id = 3;
}
message CMsgPlayerLevelUp {
optional uint32 player_slot = 1;
optional uint32 level = 2;
optional uint32 notification_id = 3;
}
message CMsgItemChangedOwner {
optional uint32 old_player_slot = 1;
optional uint32 new_player_slot = 2;
optional uint32 item_id = 3;
optional uint32 notification_id = 4;
}
message CMsgPlayerEliminated {
optional uint32 player_slot = 1;
optional uint32 final_position = 2;
optional uint32 notification_id = 3;
optional uint32 opponent_player_slot = 4;
optional bool was_head_to_head = 5;
}
message CMsgPosition {
required int32 x = 1;
required int32 y = 2;
}
message CMsgUnit {
required int32 entindex = 1;
optional int32 unit_id = 2;
optional .CMsgPosition position = 3;
optional int32 rank = 4;
optional int32 gold_value = 6;
optional uint32 kill_count = 8;
optional uint32 kill_streak = 9;
repeated .EUnitKeyword keywords = 10;
optional bool is_summoned = 11;
optional uint32 duel_bonus_damage = 12;
optional int32 unit_cap_cost = 13;
optional bool is_placeable_item = 14;
optional bool bot_ignore = 15;
optional bool can_move_to_bench = 16;
optional bool can_be_sold = 17;
optional bool recommended_for_placement = 18;
optional float float_kill_count = 38;
}
message CMsgShopItem {
optional int32 unit_id = 1;
optional bool will_combine_two_stars = 2;
optional int32 gold_cost = 3;
optional bool wanted_legendary = 4;
optional bool will_combine_three_stars = 5;
repeated .EUnitKeyword keywords = 6;
}
message CMsgTurboBucket {
repeated .EUnitKeyword keywords = 1;
repeated int32 unit_ids = 2;
}
message CMsgUnderlordPickerOffering {
optional uint32 underlord_id = 1;
optional uint32 build_id = 2;
}
message CMsgSynergy {
optional .EUnitKeyword keyword = 1 [default = EUnitKeyword_Invalid];
optional int32 unique_unit_count = 2;
optional int32 bench_additional_unique_unit_count = 3;
}
message CMsgItemSlot {
optional uint32 slot_index = 1;
required uint32 item_id = 2;
optional int32 assigned_unit_entindex = 3;
}
message CMsgBoardBuddy {
optional float desired_pos_x = 1;
optional float desired_pos_y = 2;
}
message CMsgMapProp {
optional uint32 prop_idx = 1;
optional uint32 prop_state = 2;
optional uint32 num_clicks = 3;
}
message CMsgPublicPlayerState {
message LoadoutItem {
optional uint32 slot = 1;
optional uint32 sub_slot = 2;
optional uint32 def_index = 3;
}
required uint32 player_slot = 1;
optional uint32 account_id = 2;
optional .EPlayerConnectionState connection_status = 3 [default = EPlayerConnectionState_Connecting];
optional bool is_human_player = 4;
optional int32 health = 5;
optional int32 gold = 6;
optional int32 level = 7;
optional int32 xp = 8;
repeated .CMsgItemSlot item_slots = 9;
repeated .CMsgUnit units = 10;
optional uint32 final_place = 14;
optional int32 next_level_xp = 15;
repeated .CMsgSynergy synergies = 16;
optional string bot_persona_name = 17;
optional uint64 sequence_number = 18;
optional int32 shop_cost_modifier = 20;
optional float combat_duration = 21;
optional int32 reroll_cost_modifier = 22;
optional int32 win_streak = 26;
optional int32 lose_streak = 27;
optional uint32 rank_tier = 28;
optional float disconnected_time = 29;
optional uint32 vs_opponent_wins = 30;
optional uint32 vs_opponent_losses = 31;
optional uint32 vs_opponent_draws = 32;
optional .EDACPlatform platform = 33 [default = k_eDACPlatform_None];
optional uint32 event_tier = 34;
optional string persona_name = 36;
optional uint32 wins = 37;
optional uint32 losses = 38;
optional uint32 global_leaderboard_rank = 39;
repeated .CMsgPublicPlayerState.LoadoutItem player_loadout = 40;
optional uint32 net_worth = 41;
optional uint32 combat_result = 43;
optional .EDACLobbyTeam lobby_team = 44 [default = k_EDACLobbyTeam_Team0];
repeated uint32 underlord_selected_talents = 45;
optional bool is_mirrored_match = 46;
optional uint32 underlord = 47;
optional uint32 party_index = 48;
optional uint32 next_combat_opponent_neutral_wave = 49;
optional int32 board_unit_limit = 52;
repeated uint32 underlord_available_talents = 53;
optional uint32 combat_type = 54;
optional .CMsgBoardBuddy board_buddy = 55;
repeated .CMsgMapProp prop_state = 56;
optional float brawny_kills_float = 57;
optional bool owns_event = 58;
optional uint32 city_prestige_level = 59;
optional uint32 stat_best_victory_duration = 1000;
optional uint32 stat_best_victory_net_worth = 1001;
optional uint32 stat_best_victory_remaining_health_percent = 1002;
optional uint32 stat_best_victory_units = 1006;
optional uint32 stat_prev_victory_duration = 1003;
optional uint32 stat_prev_victory_net_worth = 1004;
optional uint32 stat_prev_victory_remaining_health_percent = 1005;
optional uint32 stat_prev_victory_units = 1007;
oneof opponent {
uint32 opponent_player_slot = 24;
uint32 opponent_neutral_wave = 25;
}
}
message CMsgPublicPostMatchStats {
message PlayerPerRoundInfo {
optional uint32 gold = 1;
optional uint32 health = 2;
optional uint32 level = 3;
optional uint32 wins = 4;
optional uint32 losses = 5;
optional uint32 net_worth = 6;
repeated .CMsgUnit units = 7;
repeated uint32 synergies = 8;
repeated .CMsgItemSlot item_slots = 9;
repeated uint32 underlord_selected_talents = 10;
}
message PlayerInfo {
repeated .CMsgPublicPostMatchStats.PlayerPerRoundInfo rounds = 1;
optional uint32 player_slot = 2;
optional uint32 account_id = 3;
optional bool is_human_player = 4;
optional string persona_name = 5;
optional uint32 mmr_level = 6;
optional uint32 global_leaderboard_rank = 7;
optional uint32 final_position = 8;
optional .EDACLobbyTeam lobby_team = 9 [default = k_EDACLobbyTeam_Team0];
}
repeated .CMsgPublicPostMatchStats.PlayerInfo players = 1;
optional uint32 game_mode = 2;
optional uint64 match_id = 3;
}
message CMsgIndividualPostMatchStats {
message Round {
repeated .CMsgUnit units = 1;
repeated uint32 synergies = 2;
repeated .CMsgItemSlot items = 3;
optional uint32 gold_spent_on_rerolls = 4;
optional uint32 gold_earned = 5;
optional uint32 interest_gold_earned = 6;
optional uint32 streak_gold_earned = 7;
optional uint32 victory = 8;
optional uint32 xp_earned = 9;
optional uint32 health = 10;
optional uint32 gold = 11;
optional uint32 round_ranking = 12;
optional uint32 level = 13;
optional uint32 enemy_player_slot = 14;
optional uint32 gold_spent_on_levels = 15;
optional uint32 gold_spent_on_units = 16;
optional uint32 damage_dealt_to_units = 17;
optional uint32 victory_level = 18;
optional uint32 damage_dealt_to_player = 19;
optional uint32 enemy_underlord = 20;
repeated uint32 underlord_selected_talents = 21;
}
message Challenge {
optional uint32 slot_id = 1;
optional uint32 sequence_id = 2;
optional uint32 progress = 3;
optional uint32 initial_progress = 4;
optional uint32 claimed = 5;
}
message Currency {
optional uint32 currency_id = 1;
optional uint32 initial_amount = 2;
optional uint32 amount_gained = 3;
}
message Event {
optional uint32 event_id = 1;
optional bool event_owned = 2;
optional uint32 event_tier = 3;
repeated .CMsgIndividualPostMatchStats.Challenge challenges = 4;
repeated .CMsgIndividualPostMatchStats.Currency currencies = 5;
}
message RankUpdate {
optional uint32 initial_level_score = 1;
optional uint32 initial_level = 2;
optional float initial_level_partial_progress = 3;
optional uint32 final_level_score = 4;
optional uint32 final_level = 5;
optional float final_level_partial_progress = 6;
optional uint32 initial_leaderboard_place = 7;
}
repeated .CMsgIndividualPostMatchStats.Round rounds = 1;
optional uint32 player_slot = 2;
optional uint32 position = 3;
repeated .CMsgIndividualPostMatchStats.Event events = 4;
optional .CMsgIndividualPostMatchStats.RankUpdate individual_rank_update = 5;
optional .CMsgIndividualPostMatchStats.RankUpdate duos_rank_update = 6;
optional .EDACGameMode game_mode = 7 [default = k_EDACGameMode_Invalid];
optional .EDACMatchMode match_mode = 8 [default = k_EDACMatchMode_Invalid];
optional .EDACBotDifficulty bot_difficulty = 9 [default = k_EDACBotDifficulty_None];
optional uint32 underlord_id = 10;
optional uint32 underlord_build_id = 11;
optional .CMsgGameModeSettings game_mode_settings = 12;
}
message CMsgPlayerPreferences {
optional bool auto_deploy_units = 1;
}
message CMsgPrivatePlayerState {
message ItemChoiceReward {
message Choice {
required uint32 item_id = 1;
optional bool available = 2;
}
required int32 reward_id = 1;
repeated .CMsgPrivatePlayerState.ItemChoiceReward.Choice choices = 2;
}
message Challenge {
optional uint32 slot_id = 1;
optional uint32 sequence_id = 2;
optional uint32 progress = 3;
optional uint32 initial_progress = 4;
optional uint32 claimed = 5;
}
enum EGrantRewards {
EGrantRewards_No = 0;
EGrantRewards_Yes = 1;
EGrantRewards_NoLongerEligible = 2;
}
required uint32 player_slot = 1;
optional int32 unclaimed_reward_count = 2;
optional .CMsgPrivatePlayerState.ItemChoiceReward oldest_unclaimed_reward = 3;
optional bool shop_locked = 4;
repeated .CMsgShopItem shop_units = 5;
optional uint32 gold_earned_this_round = 6;
optional uint32 shop_generation_id = 7;
repeated .CMsgPrivatePlayerState.Challenge challenges = 8;
optional .CMsgPrivatePlayerState.EGrantRewards grants_rewards = 9 [default = EGrantRewards_No];
optional uint32 sequence_number = 10;
optional int32 reroll_cost = 11;
optional bool used_turbo_bucket_reroll = 20;
repeated .CMsgTurboBucket turbo_buckets = 21;
optional bool can_select_underlord = 22;
repeated .CMsgUnderlordPickerOffering underlord_picker_offering = 23;
optional bool used_item_reward_reroll_this_round = 24;
}
message CMsgMatchState {
message TeamInfo {
optional .EDACLobbyTeam lobby_team = 1 [default = k_EDACLobbyTeam_Team0];
optional string team_name = 2;
optional uint32 team_mmr_level = 3;
optional uint32 team_leaderboard_place = 4;
}
optional .EGameState game_state = 1 [default = EGameState_Intro];
optional .ERoundState round_state = 2 [default = ERoundState_Preparing];
optional int32 round_number = 3;
optional float state_change_time = 4;
optional float state_duration = 5;
optional float paused_state_time_remaining = 6;
optional uint64 match_id = 8;
optional .CMsgGameModifiers game_modifiers = 9;
repeated .CMsgMatchState.TeamInfo team_info = 10;
optional string feature_controls = 11;
}
message CMsgGameModeState_Normal {
}
message CMsgGameModeState_Turbo {
optional .CMsgGameModeState_Normal base_normal = 1;
}
message CMsgDuos_TeamCombatResult {
optional uint32 player_slot = 1;
optional uint32 opponent_slot = 2;
optional int32 damage_result = 3;
optional uint32 teammate_slot = 4;
optional uint32 teammate_opponent_slot = 5;
optional int32 teammate_damage_result = 6;
}
message CMsgGameModeState_Duos {
optional .CMsgGameModeState_Normal base_normal = 1;
repeated .CMsgDuos_TeamCombatResult combat_results = 2;
}
message CMsgGameModeState_TechPrototypeA {
optional int32 rounds_remaining = 1;
}
message CMsgGameModeState_Sandbox {
optional int32 opponent_player_slot = 1;
}
message CMsgGameModeState_Puzzle {
message ActiveRule {
optional .EDACPuzzleRule rule = 1 [default = k_EDACPuzzleRule_None];
optional bool satisfied = 2;
repeated int32 constraints = 3 [packed = true];
optional int32 current_value = 4;
}
optional int32 opponent_player_slot = 1;
repeated .CMsgGameModeState_Puzzle.ActiveRule active_rules = 2;
optional bool active_rules_satisfied = 3;
optional int32 puzzle_id = 4;
repeated uint32 allowed_unit_def_indices = 5;
}
message CMsgGameModeState_Tutorial {
optional string tutorial_state_name = 1;
optional int32 opponent_player_slot = 2;
}
message CMsgGameModeState_Streetfight {
optional uint32 streetfight_id = 1;
optional int32 opponent_player_slot = 2;
}
message DungeonActionCard {
optional int32 card_id = 1;
}
message CMsgGameModeState_Dungeon {
optional .EDACDungeonPhase dungeon_phase = 1 [default = k_EDACDungeonPhase_None];
optional .EDACDungeonRoomType current_room_type = 2 [default = k_EDACDungeonRoomType_None];
repeated .EDACDungeonRoomType next_room_types = 3;
repeated .DungeonActionCard available_cards = 4;
}
message CMsgGameModeState {
oneof details {
.CMsgGameModeState_Normal details_normal = 1;
.CMsgGameModeState_Turbo details_turbo = 2;
.CMsgGameModeState_Duos details_duos = 3;
.CMsgGameModeState_TechPrototypeA details_tech_prototype_a = 4;
.CMsgGameModeState_Sandbox details_sandbox = 5;
.CMsgGameModeState_Puzzle details_puzzle = 6;
.CMsgGameModeState_Tutorial details_tutorial = 7;
.CMsgGameModeState_Streetfight details_streetfight = 8;
.CMsgGameModeState_Dungeon details_dungeon = 9;
}
}
message CMsgUnitPosition {
required float x = 1;
required float y = 2;
required float z = 3;
}
message CMsgUnitPositionAndFacing {
required float x = 1;
required float y = 2;
required float z = 3;
required float yaw = 4;
}
message CMsgUnitAbilityCooldown {
required uint32 ability_id = 1;
required float cooldown_ratio = 2;
}
message CMsgUnitSnapshot {
optional int32 entindex = 1;
optional int32 unit_id = 2;
optional int32 team_number = 3;
optional .CMsgUnitPositionAndFacing position = 4;
optional int32 health = 5;
optional int32 mana = 6;
repeated string particle_attachment_names = 7;
optional int32 rank = 8;
optional .EUnitAIState ai_state = 9 [default = EUnitAIState_Idle];
optional float cooldown_ratio = 10;
optional uint32 kill_count = 12;
optional uint32 kill_streak = 13;
optional int32 max_health = 14;
repeated .EUnitKeyword keywords = 15;
optional .CMsgUnitPositionAndFacing starting_position = 16;
optional bool is_summoned = 17;
optional int32 summon_owner_entindex = 18;
optional uint32 duel_bonus_damage = 19;
optional int32 armor = 20;
optional uint32 underlord_power = 21;
optional uint32 status_label = 22;
optional uint32 status_effect_index = 23;
optional float attacks_per_second = 24;
optional int32 damage_min = 25;
optional int32 damage_max = 26;
optional int32 damage_bonus = 27;
optional bool full_update = 28;
repeated .CMsgUnitAbilityCooldown ability_cooldowns = 29;
repeated uint32 abilities_enabled = 30;
repeated uint32 buff_status = 31;
optional bool force_big_healthbar = 32;
optional uint32 override_item_slot = 33;
optional int32 range_bonus = 34;
optional bool can_move_to_bench = 35;
optional bool can_be_sold = 36;
optional bool recommended_for_placement = 37;
optional float float_kill_count = 38;
optional float cooldown_multiplier = 39;
optional bool client_synthesized_for_setup = 1001;
optional bool client_is_on_bench = 1002;
}
message CMsgUnitMeterDamageDealt {
optional int32 total_damage_dealt = 1;
optional int32 spell_damage_dealt = 2;
optional int32 attack_damage_dealt = 3;
optional int32 item_damage_dealt = 4;
}
message CMsgUnitMeterDetail {
optional int32 value = 2;
optional uint32 id = 3;
}
message CMsgUnitMeterDamageTaken {
optional int32 total_damage_taken = 1;
optional int32 physical_damage_taken = 2;
optional int32 magical_damage_taken = 3;
optional int32 pure_damage_taken = 4;
}
message CMsgUnitMeterSnapshot {
optional int32 entindex = 1;
optional int32 unit_id = 2;
optional int32 team_number = 3;
optional .CMsgUnitMeterDamageDealt damage_dealt = 4;
optional .CMsgUnitMeterDamageTaken damage_taken = 5;
optional uint32 healing_done = 6;
optional uint32 kills = 7;
optional float time_of_death = 8;
optional uint32 rank = 9;
optional int32 globalindex = 10;
repeated .CMsgUnitMeterDetail damage_dealt_details = 11;
repeated .CMsgUnitMeterDetail healing_done_details = 12;
optional float disable_done = 13;
repeated .CMsgUnitMeterDetail damage_taken_details = 14;
repeated .CMsgUnitMeterDetail kills_details = 15;
repeated .CMsgUnitMeterDetail disable_done_details = 16;
}
message CMsgCombatMetersSnapshot {
required float snapshot_time = 1;
repeated .CMsgUnitMeterSnapshot units = 2;
}
message CMsgCombatDebugSnapshot {
message PathfindingCell {
required bool reserved = 1;
optional int32 owner_entindex = 2;
}
message ActivePath {
optional int32 owner_entindex = 1;
repeated .CMsgPosition path_waypoints = 2;
optional int32 path_waypoint_index = 3;
}
repeated .CMsgCombatDebugSnapshot.PathfindingCell pathfinding_cells = 1;
repeated .CMsgCombatDebugSnapshot.ActivePath active_paths = 2;
}
message CMsgCombatSnapshot {
required float snapshot_time = 1;
repeated .CMsgUnitSnapshot units = 2;
optional .CMsgCombatDebugSnapshot debug_snapshot = 3;
}
message CMsgCombatEvent_Attack {
optional int32 attack_projectile_speed = 1;
}
message CMsgCombatEvent_Damage {
optional uint32 damage_amount = 1;
optional bool is_critical = 2;
}
message CMsgCombatEvent_AttackMissed {
}
message CMsgCombatEvent_AttackEvaded {
}
message CMsgCombatEvent_AttackBlocked {
optional uint32 block_amount = 1;
}
message CMsgCombatEvent_Death {
}
message CMsgCombatEvent_StartAttack {
optional float attack_speed = 1;
}
message CMsgCombatEvent_SoundEvent {
optional uint32 soundevent_hash = 1;
optional .CMsgUnitPosition position = 2;
optional bool restrict_to_home_team = 4;
}
message CMsgCombatEvent_SpeechEvent {
optional string vcd_name = 1;
optional bool restrict_to_home_team = 2;
optional int32 priority = 3;
}
message CMsgCombatEvent_ModifierCreate {
required uint32 modifier_entindex = 1;
required uint32 modifier_id = 2;
optional float duration = 3;
optional int32 synergy_level = 4;
}
message CMsgCombatEvent_ModifierDestroy {
required uint32 modifier_entindex = 1;
}
message CMsgCombatEvent_StartGesture {
required uint32 activity = 1;
optional float fade_in = 2;
optional float fade_out = 3;
optional int32 slot = 4;
optional float duration = 5;
}
message CMsgCombatEvent_StopGesture {
required uint32 activity = 1;
}
message CMsgCombatEvent_CancelAttack {
}
message CMsgCombatEvent_CombatEnded {
optional bool ran_out_of_time = 1;
}
message CMsgCombatEvent_Resurrect {
}
message CMsgCombatEvent_CastAbility {
optional uint32 ability_id = 1;
}
message CMsgCombatEvent {
required float event_time = 1;
optional uint32 source_entindex = 2;
optional uint32 target_entindex = 3;
oneof details {
.CMsgCombatEvent_Attack details_attack = 4;
.CMsgCombatEvent_Damage details_damage = 5;
.CMsgCombatEvent_Death details_death = 6;
.CMsgCombatEvent_StartAttack details_start_attack = 7;
.CMsgCombatEvent_SoundEvent details_sound_event = 8;
.CUserMsg_ParticleManager details_particle_event = 9;
.CMsgCombatEvent_ModifierCreate details_modifier_create = 10;
.CMsgCombatEvent_ModifierDestroy details_modifier_destroy = 11;
.CMsgCombatEvent_StartGesture details_start_gesture = 12;
.CMsgCombatEvent_CancelAttack details_cancel_attack = 13;
.CMsgCombatEvent_CombatEnded details_combat_ended = 14;
.CMsgCombatEvent_AttackMissed details_attack_missed = 15;
.CMsgCombatEvent_AttackEvaded details_attack_evaded = 16;
.CMsgCombatEvent_AttackBlocked details_attack_blocked = 17;
.CMsgCombatEvent_Resurrect details_resurrect = 18;
.CMsgCombatEvent_SpeechEvent details_speech_event = 19;
.CMsgCombatEvent_CastAbility details_cast_ability = 20;
.CMsgCombatEvent_StopGesture details_stop_gesture = 21;
}
}
message CMsgCombatHighlight {
required .EDACIncidentType highlight_type = 1 [default = EDACIncidentType_None];
optional float start_time = 2;
optional float finish_time = 3;
optional int32 source_unit_idx = 4;
optional int32 target_unit_idx = 5;
optional float magnitude = 6;
}
message CMsgRoundCombat {
optional int32 round_number = 1;
optional float combat_duration = 2;
optional float combat_intro_duration = 3;
optional float added_time_before_results = 4;
repeated .CMsgCombatSnapshot snapshots = 5;
repeated .CMsgCombatEvent events = 6;
optional .ERoundCombatResult result = 7 [default = ERoundCombatResult_Draw];
optional uint32 player_player_slot = 8;
repeated .CMsgCombatMetersSnapshot meter_snapshots = 11;
repeated .CMsgCombatHighlight combat_highlights = 12;
optional bool mirrored = 14;
oneof opponent {
uint32 opponent_player_slot = 9;
uint32 opponent_neutral_wave = 10;
}
}
message CMsgBattle {
optional int32 round_number = 1;
repeated .CMsgRoundCombat combats = 2;
optional .CMsgRoundCombatGlobal global = 3;
}
message CMsgRoundCombatGlobal {
message EventList {
repeated .CMsgCombatEvent events = 1;
}
message CombatPlayerSlotToEventsEntry {
optional uint32 key = 1;
optional .CMsgRoundCombatGlobal.EventList value = 2;
}
optional int32 round_number = 1;
repeated .CMsgRoundCombatGlobal.CombatPlayerSlotToEventsEntry combat_player_slot_to_events = 2;
}
message CMsgClientServerHeader {
required .EDACGameMessages msg_id = 1 [default = k_EMsgNetBufferContents];
optional bytes payload = 2;
}
message CMsgNetBufferContents {
optional bool is_diff = 1;
optional bool is_last = 2;
optional bytes payload = 3;
optional uint32 unpacked_state_size = 4;
optional .EDACNetBuffer net_buffer_type = 5 [default = k_eDACNetBuffer_MatchState];
optional uint32 net_buffer_id = 6;
optional uint32 server_time_ms = 7;
optional bool is_result_compressed = 8;
optional bool is_update_compressed = 9;
}
message CMsgNetBufferRemoved {
optional .EDACNetBuffer net_buffer_type = 5 [default = k_eDACNetBuffer_MatchState];
optional uint32 net_buffer_id = 6;
}
message CMsgClientConnectionStarted {
message GameConstants {
message UnitChances {
repeated float chance = 1;
}
optional .CMsgGameModeSettings game_mode_settings = 1;
repeated int32 player_experience_table = 2;
optional int32 experience_purchase_gold_cost = 3;
optional int32 experience_purchase_amount = 4;
repeated .CMsgClientConnectionStarted.GameConstants.UnitChances unit_tier_chances = 5;
optional int32 max_interest_gold = 6;
optional int32 interest_gold_divisor = 7;
optional bool win_matters_for_item_rewards = 8;
repeated int32 loot_round_numbers = 9;
optional bool has_neutral_rounds = 10;
optional int32 underlord_selection_round = 11;
optional float kill_multiplier = 12;
optional uint32 prestige_level = 13;
}
message GameManager {
optional uint32 definition_set = 1;
}
optional bool in_developer_mode = 1;
optional bool in_offline_mode = 2;
optional bool is_listen_server_game = 3;
optional bool is_single_human_game = 4;
optional .EDACMatchMode match_mode = 5 [default = k_EDACMatchMode_Invalid];
optional .EDACGameMode game_mode = 6 [default = k_EDACGameMode_Invalid];
optional .CMsgClientConnectionStarted.GameConstants game_constants = 7;
optional .CMsgClientConnectionStarted.GameManager game_manager = 8;
}
message CMsgClientConnectionComplete {
}
message CMsgClientSetDebugNetBuffer {
optional uint32 net_buffer_id = 1;
optional string contents = 2;
optional uint32 repeat = 3;
optional bool force_full_send = 4;
}
message CDACNetBuffer_Debug {
optional string contents = 1;
}
message CMsgGameReplayActionMarker {
enum EActionType {
k_eActionType_Placholder = 1;
}
optional .CMsgGameReplayActionMarker.EActionType action = 1 [default = k_eActionType_Placholder];
}
message CMsgModifierName {
message Modifier {
required uint32 modifier_id = 1;
required string modifier_name = 2;
}
repeated .CMsgModifierName.Modifier modifier_list = 1;
}
message CMsgClientToServerChatMsg {
optional uint32 message_id = 1;
optional string custom_text = 2;
optional .EInGameChatType chat_type = 3 [default = k_eInGameChatType_Global];
optional uint32 board_spray_id = 4;
optional float board_spray_x = 5;
optional float board_spray_y = 6;
optional uint32 sprayed_board_player_slot = 7;
}
message CMsgServerToClientChatMsg {
optional uint32 player_slot = 1;
optional uint32 message_id = 2;
optional string custom_text = 3;
optional uint32 notification_id = 4;
optional .EInGameChatType chat_type = 5 [default = k_eInGameChatType_Global];
optional uint32 board_spray_id = 6;
optional float board_spray_x = 7;
optional float board_spray_y = 8;
optional uint32 sprayed_board_player_slot = 9;
}
message CMsgClientToServerClickMsg {
optional .EClickType click_type = 1 [default = k_eClickType_Left];
optional uint32 target_player_slot = 2;
optional float click_x = 3;
optional float click_y = 4;
optional float click_z = 5;
}
message CMsgServerToClientClickMsg {
optional .EClickType click_type = 1 [default = k_eClickType_Left];
optional uint32 source_player_slot = 2;
optional uint32 target_player_slot = 3;
optional float click_x = 4;
optional float click_y = 5;
optional float click_z = 6;
}
message CMsgPlayerMapPropCommand {
optional uint32 command = 1;
optional uint32 player_slot = 2;
optional uint32 prop_idx = 3;
}
message CMsgClientToServerTeammateDuosMessage {
optional uint32 teammate_slot = 1;
optional .EDuosMessageType message_type = 2 [default = k_eDuosMessageType_None];
optional .EDuosMessageTargetType target_type = 3 [default = k_eDuosMessageTargetType_None];
optional uint32 target_id = 4;
}
message CMsgServerToClientTeammateDuosMessage {
optional uint32 teammate_slot = 1;
optional .EDuosMessageType message_type = 2 [default = k_eDuosMessageType_None];
optional .EDuosMessageTargetType target_type = 3 [default = k_eDuosMessageTargetType_None];
optional uint32 target_id = 4;
}
message CMsgClientToServerLoadShareCode {
optional string share_code = 1;
}
message CMsgClientToServerBoardBuddyCommand {
optional uint32 command = 1;
optional float pos_x = 2;
optional float pos_y = 3;
}
message CMsgClientToServerPuzzleLeaderboardCommand {
optional uint32 leaderboard = 1;
}
message CMsgRecordLocalBotStats {
optional bytes serialized_msg = 1;
}
message CMsgClientToServerUpvoteNotification {
optional uint32 notification_id = 1;
}
message CMsgServerToClientNotificationChanged {
message UpvoteSubtype {
optional uint32 item_id = 1;
optional uint32 upvotes = 2;
}
optional uint32 notification_id = 1;
optional uint32 upvotes = 2;
repeated .CMsgServerToClientNotificationChanged.UpvoteSubtype subtypes = 3;
}
message CMsgClientToServerLocalPlayerInventory {
message LoadoutItem {
optional uint32 slot = 1;
optional uint32 sub_slot = 2;
optional uint32 def_index = 3;
}
repeated .CMsgClientToServerLocalPlayerInventory.LoadoutItem player_loadout = 1;
}
message CMsgGameStateIntegrationData {
optional uint32 id = 1;
optional .CMsgPublicPlayerState public_player_state = 2;
optional .CMsgPrivatePlayerState private_player_state = 3;
}
message CMsgGameStateIntegrationBlock {
repeated .CMsgGameStateIntegrationData data = 1;
optional uint32 id = 2;
}
message CMsgGameStateIntegrationUpdate {
repeated .CMsgGameStateIntegrationBlock block = 1;
optional string auth = 2;
}
message CMsgClientToServerInitData {
optional .CMsgGameModifiers game_modifiers = 1;
optional uint32 event_id = 2;
optional bool developer_mode = 3;
optional string load_save_file = 4;
optional int32 local_mmr_level = 5 [default = -1];
optional uint32 underlord = 6;
optional uint32 local_global_leaderboard_rank = 7;
optional bool offline_mode = 8;
optional int32 bot_difficulty = 9 [default = 0];
optional bool tutorial = 10;
optional .EDACGameMode game_mode = 11 [default = k_EDACGameMode_Normal];
optional .CMsgGameModeSettings game_mode_settings = 12;
optional string feature_controls = 13;
optional uint32 active_challenge_slot_id = 14;
}
message CMsgClientAccountSyncStorageFile {
optional uint32 version = 1;
repeated uint32 ids = 2;
repeated uint32 values = 3;
}
message CMsgPlayerChallengeCompletePrediction {
optional uint32 event_id = 1;
optional uint32 slot_id = 2;
optional uint32 challenge_id = 3;
optional uint32 config_id = 4;
optional uint32 initial_progress = 5;
optional uint32 predicted_total = 6;
}