refactoring. Decrypting new packet.
This commit is contained in:
parent
c2c17f1f24
commit
f71f61e51b
@ -2,6 +2,7 @@ package com.alterdekim.hearthhack.component;
|
|||||||
|
|
||||||
import com.alterdekim.hearthhack.component.processor.*;
|
import com.alterdekim.hearthhack.component.processor.*;
|
||||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||||
|
import com.alterdekim.hearthhack.util.Util;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ public class TcpConnection extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void send(BattleNetPacket bp) throws Exception {
|
public void send(BattleNetPacket bp) throws Exception {
|
||||||
|
log.info("TcpConnection.send: service={}, method={}, body={}", bp.getHeader().getServiceId(), bp.getHeader().getMethodId(), Util.bytesToHex(bp.getBody()));
|
||||||
this.outToClient.write(bp.Encode());
|
this.outToClient.write(bp.Encode());
|
||||||
this.outToClient.flush();
|
this.outToClient.flush();
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,99 @@
|
|||||||
|
package com.alterdekim.hearthhack.util;
|
||||||
|
|
||||||
|
import com.google.protobuf.GeneratedMessageV3;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class PegasusPacket {
|
||||||
|
|
||||||
|
private final int TYPE_BYTES = 4;
|
||||||
|
|
||||||
|
private final int SIZE_BYTES = 4;
|
||||||
|
|
||||||
|
public int size;
|
||||||
|
|
||||||
|
public int type;
|
||||||
|
|
||||||
|
public int context;
|
||||||
|
|
||||||
|
public Object body;
|
||||||
|
|
||||||
|
private boolean sizeRead;
|
||||||
|
|
||||||
|
private boolean typeRead;
|
||||||
|
|
||||||
|
public PegasusPacket(int type, int context, Object body) {
|
||||||
|
this.type = type;
|
||||||
|
this.context = context;
|
||||||
|
this.size = -1;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PegasusPacket(int type, int context, int size, Object body) {
|
||||||
|
this.type = type;
|
||||||
|
this.context = context;
|
||||||
|
this.size = size;
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Object GetBody() {
|
||||||
|
return this.body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean IsLoaded() {
|
||||||
|
return this.body != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Decode(byte[] bytes, int offset, int available) {
|
||||||
|
String arg = "";
|
||||||
|
int num = 0;
|
||||||
|
while (num < 8 && num < available) {
|
||||||
|
arg = arg + bytes[offset + num] + " ";
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
int num2 = 0;
|
||||||
|
if (!this.typeRead) {
|
||||||
|
if (available < 4) return num2;
|
||||||
|
this.type = toInt32_2(bytes, offset);
|
||||||
|
this.typeRead = true;
|
||||||
|
available -= 4;
|
||||||
|
num2 += 4;
|
||||||
|
offset += 4;
|
||||||
|
}
|
||||||
|
if (!this.sizeRead) {
|
||||||
|
if (available < 4) return num2;
|
||||||
|
this.size = toInt32_2(bytes, offset);
|
||||||
|
this.sizeRead = true;
|
||||||
|
available -= 4;
|
||||||
|
num2 += 4;
|
||||||
|
offset += 4;
|
||||||
|
}
|
||||||
|
if (this.body == null) {
|
||||||
|
if (available < this.size) return num2;
|
||||||
|
byte[] array = new byte[this.size];
|
||||||
|
System.arraycopy(bytes, offset, array, 0, this.size);
|
||||||
|
this.body = array;
|
||||||
|
num2 += this.size;
|
||||||
|
}
|
||||||
|
return num2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public byte[] Encode() {
|
||||||
|
if (this.body instanceof GeneratedMessageV3) {
|
||||||
|
GeneratedMessageV3 protoBuf = (GeneratedMessageV3) this.body;
|
||||||
|
this.size = (int) protoBuf.GetSerializedSize();
|
||||||
|
byte[] array = new byte[this.size + 4 + 4];
|
||||||
|
Array.Copy(BitConverter.GetBytes(this.Type), 0, array, 0, 4);
|
||||||
|
Array.Copy(BitConverter.GetBytes(this.Size), 0, array, 4, 4);
|
||||||
|
protoBuf.Serialize(new MemoryStream(array, 8, this.Size));
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
private int toInt32_2(byte[] bytes, int index) {
|
||||||
|
int a = (int)((int)(0xff & bytes[index]) << 32 | (int)(0xff & bytes[index + 1]) << 40 | (int)(0xff & bytes[index + 2]) << 48 | (int)(0xff & bytes[index + 3]) << 56);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
@ -2614,3 +2614,428 @@ message CardValues {
|
|||||||
repeated CardValue cards = 1;
|
repeated CardValue cards = 1;
|
||||||
required int32 card_nerf_index = 2;
|
required int32 card_nerf_index = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.RewardProgress
|
||||||
|
message RewardProgress {
|
||||||
|
// ref: PegasusUtil.RewardProgress/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 271;
|
||||||
|
}
|
||||||
|
|
||||||
|
required Date season_end = 1;
|
||||||
|
required int32 wins_per_gold = 2;
|
||||||
|
required int32 gold_per_reward = 3;
|
||||||
|
required int32 max_gold_per_day = 4;
|
||||||
|
required int32 season_number = 5;
|
||||||
|
optional int32 pack_id = 8;
|
||||||
|
required int32 xp_solo_limit = 9;
|
||||||
|
required int32 max_hero_level = 10;
|
||||||
|
required Date next_quest_cancel = 11;
|
||||||
|
required float event_timing_mod = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.PlayerRecord
|
||||||
|
message PlayerRecord {
|
||||||
|
required GameType type = 1;
|
||||||
|
optional int32 data = 2;
|
||||||
|
required int32 wins = 3;
|
||||||
|
required int32 losses = 4;
|
||||||
|
optional int32 ties = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.GameType
|
||||||
|
enum GameType {
|
||||||
|
GT_UNKNOWN = 0;
|
||||||
|
GT_VS_AI = 1;
|
||||||
|
GT_VS_FRIEND = 2;
|
||||||
|
GT_TUTORIAL = 4;
|
||||||
|
GT_ARENA = 5;
|
||||||
|
GT_TEST = 6;
|
||||||
|
GT_RANKED = 7;
|
||||||
|
GT_CASUAL = 8;
|
||||||
|
GT_TAVERNBRAWL = 16;
|
||||||
|
GT_TB_1P_VS_AI = 17;
|
||||||
|
GT_TB_2P_COOP = 18;
|
||||||
|
GT_LAST = 19;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.PlayerRecords
|
||||||
|
message PlayerRecords {
|
||||||
|
// ref: PegasusUtil.PlayerRecords/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 270;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated PlayerRecord records = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.ArcaneDustBalance
|
||||||
|
message ArcaneDustBalance {
|
||||||
|
// ref: PegasusUtil.ArcaneDustBalance/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 262;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int64 balance = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.ClientOptions
|
||||||
|
message ClientOptions {
|
||||||
|
// ref: PegasusUtil.ClientOptions/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 241;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated ClientOption options = 1;
|
||||||
|
optional bool failed = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.AdventureProgressResponse
|
||||||
|
message AdventureProgressResponse {
|
||||||
|
// ref: PegasusUtil.AdventureProgressResponse/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 306;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated AdventureProgress list = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.AdventureProgress
|
||||||
|
message AdventureProgress {
|
||||||
|
// ref: PegasusShared.AdventureProgress/Flags
|
||||||
|
enum Flags {
|
||||||
|
OWNED = 1;
|
||||||
|
DEFEAT_HEROIC_MISSION_1 = 2;
|
||||||
|
DEFEAT_HEROIC_MISSION_2 = 4;
|
||||||
|
DEFEAT_HEROIC_MISSION_3 = 8;
|
||||||
|
DEFEAT_HEROIC_MISSION_4 = 16;
|
||||||
|
DEFEAT_CLASS_CHALLENGE_MISSION_1 = 256;
|
||||||
|
DEFEAT_CLASS_CHALLENGE_MISSION_2 = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 wing_id = 1;
|
||||||
|
required int32 progress = 2;
|
||||||
|
optional int32 ack = 3 [default = 0];
|
||||||
|
required uint64 flags = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.HeroXP
|
||||||
|
message HeroXP {
|
||||||
|
// ref: PegasusUtil.HeroXP/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 283;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated HeroXPInfo xp_infos = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.HeroXPInfo
|
||||||
|
message HeroXPInfo {
|
||||||
|
required int32 class_id = 1;
|
||||||
|
required int32 level = 2;
|
||||||
|
required int64 curr_xp = 3;
|
||||||
|
required int64 max_xp = 4;
|
||||||
|
optional NextHeroLevelReward next_reward = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.NextHeroLevelReward
|
||||||
|
message NextHeroLevelReward {
|
||||||
|
required int32 level = 1;
|
||||||
|
optional ProfileNoticeRewardBooster reward_booster = 2;
|
||||||
|
optional ProfileNoticeRewardCard reward_card = 3;
|
||||||
|
optional ProfileNoticeRewardDust reward_dust = 4;
|
||||||
|
optional ProfileNoticeRewardGold reward_gold = 5;
|
||||||
|
optional ProfileNoticeRewardMount reward_mount = 6;
|
||||||
|
optional ProfileNoticeRewardForge reward_forge = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardForge
|
||||||
|
message ProfileNoticeRewardForge {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardForge/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 quantity = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardMount
|
||||||
|
message ProfileNoticeRewardMount {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardMount/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 mount_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardGold
|
||||||
|
message ProfileNoticeRewardGold {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardGold/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 amount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardDust
|
||||||
|
message ProfileNoticeRewardDust {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardDust/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 amount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardCard
|
||||||
|
message ProfileNoticeRewardCard {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardCard/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
required CardDef card = 1;
|
||||||
|
optional int32 quantity = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardBooster
|
||||||
|
message ProfileNoticeRewardBooster {
|
||||||
|
// ref: PegasusShared.ProfileNoticeRewardBooster/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 booster_type = 1;
|
||||||
|
required int32 booster_count = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.FavoriteHeroesResponse
|
||||||
|
message FavoriteHeroesResponse {
|
||||||
|
// ref: PegasusUtil.FavoriteHeroesResponse/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 318;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated FavoriteHero favorite_heroes = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.FavoriteHero
|
||||||
|
message FavoriteHero {
|
||||||
|
required int32 class_id = 1;
|
||||||
|
required CardDef hero = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.CardBacks
|
||||||
|
message CardBacks {
|
||||||
|
// ref: PegasusUtil.CardBacks/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
system = 0;
|
||||||
|
ID = 236;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 default_card_back = 1;
|
||||||
|
repeated int32 card_backs = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.AccountLicensesInfoResponse
|
||||||
|
message AccountLicensesInfoResponse {
|
||||||
|
// ref: PegasusUtil.AccountLicensesInfoResponse/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 325;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated AccountLicenseInfo list = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.AccountLicenseInfo
|
||||||
|
message AccountLicenseInfo {
|
||||||
|
// ref: PegasusShared.AccountLicenseInfo/Flags
|
||||||
|
enum Flags {
|
||||||
|
OWNED = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int64 license = 1;
|
||||||
|
required uint64 flags = 2;
|
||||||
|
required int64 cas_id = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.ProfileNotice
|
||||||
|
message ProfileNotice {
|
||||||
|
required int64 entry = 1;
|
||||||
|
optional ProfileNoticeMedal medal = 2;
|
||||||
|
optional ProfileNoticeRewardBooster reward_booster = 3;
|
||||||
|
optional ProfileNoticeRewardCard reward_card = 4;
|
||||||
|
optional ProfileNoticePreconDeck precon_deck = 6;
|
||||||
|
optional ProfileNoticeRewardDust reward_dust = 7;
|
||||||
|
optional ProfileNoticeRewardGold reward_gold = 8;
|
||||||
|
optional ProfileNoticeRewardMount reward_mount = 9;
|
||||||
|
optional ProfileNoticeRewardForge reward_forge = 10;
|
||||||
|
required int32 origin = 11;
|
||||||
|
optional int64 origin_data = 12;
|
||||||
|
required Date when = 13;
|
||||||
|
optional ProfileNoticePurchase purchase = 14;
|
||||||
|
optional ProfileNoticeCardBack reward_card_back = 15;
|
||||||
|
optional ProfileNoticeDisconnectedGameResult dc_game_result = 16;
|
||||||
|
optional ProfileNoticeBonusStars bonus_stars = 17;
|
||||||
|
optional ProfileNoticeAdventureProgress adventure_progress = 18;
|
||||||
|
optional ProfileNoticeLevelUp level_up = 19;
|
||||||
|
optional ProfileNoticeAccountLicense account_license = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusUtil.ProfileNotices
|
||||||
|
message ProfileNotices {
|
||||||
|
// ref: PegasusUtil.ProfileNotices/PacketID
|
||||||
|
enum PacketID {
|
||||||
|
ID = 212;
|
||||||
|
}
|
||||||
|
|
||||||
|
repeated ProfileNotice list = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeMedal
|
||||||
|
message ProfileNoticeMedal {
|
||||||
|
// ref: PegasusShared.ProfileNoticeMedal/MedalType
|
||||||
|
enum MedalType {
|
||||||
|
UNKNOWN_MEDAL = 0;
|
||||||
|
STANDARD_MEDAL = 1;
|
||||||
|
WILD_MEDAL = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeMedal/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 star_level = 1;
|
||||||
|
optional int32 legend_rank = 2;
|
||||||
|
optional int32 best_star_level = 3;
|
||||||
|
optional RewardChest chest = 4;
|
||||||
|
optional MedalType medal_type = 5 [default = UNKNOWN_MEDAL];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticePreconDeck
|
||||||
|
message ProfileNoticePreconDeck {
|
||||||
|
// ref: PegasusShared.ProfileNoticePreconDeck/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int64 deck = 1;
|
||||||
|
required int32 hero = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticePurchase
|
||||||
|
message ProfileNoticePurchase {
|
||||||
|
// ref: PegasusShared.ProfileNoticePurchase/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
required string product_id = 1;
|
||||||
|
optional int64 data = 2;
|
||||||
|
optional int32 currency = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeCardBack
|
||||||
|
message ProfileNoticeCardBack {
|
||||||
|
// ref: PegasusShared.ProfileNoticeCardBack/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 card_back = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeDisconnectedGameResult
|
||||||
|
message ProfileNoticeDisconnectedGameResult {
|
||||||
|
// ref: PegasusShared.ProfileNoticeDisconnectedGameResult/GameResult
|
||||||
|
enum GameResult {
|
||||||
|
GR_UNKNOWN = 0;
|
||||||
|
GR_PLAYING = 1;
|
||||||
|
GR_WINNER = 2;
|
||||||
|
GR_TIE = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeDisconnectedGameResult/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeDisconnectedGameResult/PlayerResult
|
||||||
|
enum PlayerResult {
|
||||||
|
PR_UNKNOWN = 0;
|
||||||
|
PR_WON = 1;
|
||||||
|
PR_LOST = 2;
|
||||||
|
PR_DISCONNECTED = 3;
|
||||||
|
PR_QUIT = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
optional GameType game_type = 8 [default = GT_UNKNOWN];
|
||||||
|
optional int32 mission_id = 9;
|
||||||
|
optional GameResult game_result = 10 [default = GR_UNKNOWN];
|
||||||
|
optional PlayerResult your_result = 11 [default = PR_UNKNOWN];
|
||||||
|
optional PlayerResult opponent_result = 12 [default = PR_UNKNOWN];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeBonusStars
|
||||||
|
message ProfileNoticeBonusStars {
|
||||||
|
// ref: PegasusShared.ProfileNoticeBonusStars/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 star_level = 1;
|
||||||
|
required int32 stars = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeAdventureProgress
|
||||||
|
message ProfileNoticeAdventureProgress {
|
||||||
|
// ref: PegasusShared.ProfileNoticeAdventureProgress/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 wing_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeLevelUp
|
||||||
|
message ProfileNoticeLevelUp {
|
||||||
|
// ref: PegasusShared.ProfileNoticeLevelUp/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int32 hero_class = 1;
|
||||||
|
required int32 new_level = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.ProfileNoticeAccountLicense
|
||||||
|
message ProfileNoticeAccountLicense {
|
||||||
|
// ref: PegasusShared.ProfileNoticeAccountLicense/NoticeID
|
||||||
|
enum NoticeID {
|
||||||
|
ID = 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
required int64 license = 1;
|
||||||
|
required int64 cas_id = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.RewardBag
|
||||||
|
message RewardBag {
|
||||||
|
optional ProfileNoticeRewardBooster reward_booster = 1;
|
||||||
|
optional ProfileNoticeRewardCard reward_card = 2;
|
||||||
|
optional ProfileNoticeRewardDust reward_dust = 3;
|
||||||
|
optional ProfileNoticeRewardGold reward_gold = 4;
|
||||||
|
optional ProfileNoticeCardBack reward_card_back = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ref: PegasusShared.RewardChest
|
||||||
|
message RewardChest {
|
||||||
|
optional RewardBag bag1 = 1;
|
||||||
|
optional RewardBag bag2 = 2;
|
||||||
|
optional RewardBag bag3 = 3;
|
||||||
|
optional RewardBag bag4 = 4;
|
||||||
|
optional RewardBag bag5 = 5;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user