diff --git a/src/main/java/com/alterdekim/Main.java b/src/main/java/com/alterdekim/Main.java index c03183f..242e20a 100644 --- a/src/main/java/com/alterdekim/Main.java +++ b/src/main/java/com/alterdekim/Main.java @@ -13,27 +13,28 @@ public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { - new Server(1119).startListening(); + new Server(1119).startListening(); /* System.out.println(Util.bytesToHex(exampleProtocol.Test.newBuilder() .setA(9999) .setB("testing") .setC(7777) .build().toByteArray()));*/ - /* Scanner scanner = new Scanner(System.in); + + /* Scanner scanner = new Scanner(System.in); String s = ""; - while( (s = scanner.nextLine()) != null ) { + while ((s = scanner.nextLine()) != null) { try { byte[] arr = Util.hexStringToByteArray(s); int offset = 0; - while( offset < arr.length ) { + while (offset < arr.length) { BattleNetPacket bp = new BattleNetPacket(); offset += bp.Decode(arr, offset, arr.length); - log.warn( offset + " " + arr.length); + log.warn(offset + " " + arr.length); log.info(bp.getHeader().toString()); log.info("Body.Length = " + bp.getBody().length); log.info(Util.bytesToHex(bp.getBody())); } - } catch ( Exception e ) { + } catch (Exception e) { e.printStackTrace(); } }*/ diff --git a/src/main/java/com/alterdekim/services/GameUtilitiesService.java b/src/main/java/com/alterdekim/services/GameUtilitiesService.java index 7ce7a12..94ff5ab 100644 --- a/src/main/java/com/alterdekim/services/GameUtilitiesService.java +++ b/src/main/java/com/alterdekim/services/GameUtilitiesService.java @@ -312,6 +312,9 @@ public class GameUtilitiesService extends Service { conn.send(new BattleNetPacket(header, b)); } else if( packet.getHeader().getToken() == 24 ) { + + log.warn("GameUtils " + Util.bytesToHex(packet.getBody())); + byte[] b = Util.hexStringToByteArray("0A090A026964120318C6020A100A0570726F746F12073205080110C702"); Protocol.Header header = Protocol.Header.newBuilder() @@ -532,8 +535,47 @@ public class GameUtilitiesService extends Service { conn.send(new BattleNetPacket(header, b)); + // GoldBalance b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F747970651203189602221D0A0C667261676D656E745F303030120D320B0800100018BF843D20D00F22120A0C6D6573736167655F73697A651202180B2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + // log.warn("ProtoNotify" + Protocol.Notification.parseFrom(b)); + + Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder() + .setCap(999999) + .setBonusBalance(165) + .setCappedBalance(160) + .setCapWarning(2000) + .build(); + + Protocol.Notification notification = Protocol.Notification.newBuilder() + .setSenderId(Protocol.EntityId.newBuilder() + .setHigh(144115188075855872L) + .setLow(0)) + .setTargetId(Protocol.EntityId.newBuilder() + .setHigh(144115198130930503L) + .setLow(78330215)) + .setType("WTCG.UtilNotificationMessage") + .setSenderBattleTag("") + .setSenderAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(0)) + .setTargetAccountId(Protocol.EntityId.newBuilder() + .setHigh(72057594037927936L) + .setLow(437154195)) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_type") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(278L))) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("fragment_000") + .setValue(Protocol.Variant.newBuilder() + .setBlobValue(gb.toByteString()))) + .addAttribute(Protocol.Attribute.newBuilder() + .setName("message_size") + .setValue(Protocol.Variant.newBuilder() + .setIntValue(gb.getSerializedSize()))) + .build(); + b = notification.toByteArray(); header = Protocol.Header.newBuilder() .setServiceId(4) .setMethodId(1) @@ -651,6 +693,13 @@ public class GameUtilitiesService extends Service { } else if( packet.getHeader().getToken() == 25 ) { byte[] b = Util.hexStringToByteArray("0A090A026964120318C6020A100A0570726F746F12073205080110ED01"); + /*byte[] b = Protocol.GoldBalance.newBuilder() + .setCap(999999) + .setBonusBalance(0) + .setCappedBalance(0) + .setCapWarning(2000) + .build().toByteArray();*/ + //log.warn("GoldBalance " + Util.bytesToHex(b)); Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(254) .setToken(packet.getHeader().getToken()) @@ -757,6 +806,53 @@ public class GameUtilitiesService extends Service { .setStatus(0) .build(); + conn.send(new BattleNetPacket(header, b)); + } else if( packet.getHeader().getToken() == 34 || packet.getHeader().getToken() == 35 ) { + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(254) + .setToken(12) + .setObjectId(0) + .setSize(0) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, new byte[0])); + + header = Protocol.Header.newBuilder() + .setServiceId(254) + .setToken(packet.getHeader().getToken()) + .setObjectId(0) + .setSize(0) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, new byte[0])); + + byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318E00122120A0C6D6573736167655F73697A65120218002A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(64) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, b)); + + b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318880222190A0C667261676D656E745F30303012093207800101A801AC0222120A0C6D6573736167655F73697A65120218072A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(65) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + conn.send(new BattleNetPacket(header, b)); } break; diff --git a/src/main/java/com/alterdekim/services/PresenceService.java b/src/main/java/com/alterdekim/services/PresenceService.java index 4b21099..88d5adc 100644 --- a/src/main/java/com/alterdekim/services/PresenceService.java +++ b/src/main/java/com/alterdekim/services/PresenceService.java @@ -201,6 +201,40 @@ public class PresenceService extends Service { .setStatus(0) .build(); conn.send(new BattleNetPacket(header, b)); + } else if( packet.getHeader().getToken() == 33 ) { + byte[] b = Util.hexStringToByteArray("0D5545000015737368001A20BEC5292231D7686AF00CE64E0C58CC6E360EA950AAFFAC6A114F03A958E275F3"); + + Protocol.Header header1 = Protocol.Header.newBuilder() + .setServiceId(254) + .setToken(packet.getHeader().getToken()) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + conn.send(new BattleNetPacket(header1, b)); + } else if( packet.getHeader().getToken() == 36 ) { + byte[] b = Util.hexStringToByteArray("0A090A026964120318C6020A120A0570726F746F12093207080110C9011806"); + + Protocol.Header header1 = Protocol.Header.newBuilder() + .setServiceId(254) + .setToken(packet.getHeader().getToken()) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + conn.send(new BattleNetPacket(header1, b)); + + b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318E00122120A0C6D6573736167655F73697A65120218002A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); + + header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(64) + .setObjectId(0) + .setSize(b.length) + .setStatus(0) + .build(); + conn.send(new BattleNetPacket(header, b)); } break; default: diff --git a/src/main/proto/bnet/protocol/protocol.proto b/src/main/proto/bnet/protocol/protocol.proto index 457e9d3..01a8f10 100644 --- a/src/main/proto/bnet/protocol/protocol.proto +++ b/src/main/proto/bnet/protocol/protocol.proto @@ -2058,3 +2058,15 @@ message UpdateChannelCountRequest { required bnet.protocol.EntityId channel_id = 3; } +// ref: PegasusUtil.GoldBalance +message GoldBalance { + // ref: PegasusUtil.GoldBalance/Types/PacketID + enum PacketID { + ID = 278; + } + + optional int64 capped_balance = 1; + optional int64 bonus_balance = 2; + optional int64 cap = 3; + optional int64 cap_warning = 4; +} \ No newline at end of file