diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BuySellCard.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BuySellCard.java index 3d8383a..a59d683 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BuySellCard.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/BuySellCard.java @@ -4,12 +4,60 @@ import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import lombok.extern.slf4j.Slf4j; +import java.util.stream.IntStream; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + +@Slf4j public class BuySellCard extends ClientRequestParser { @Override public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { Protocol.BuySellCard request = Protocol.BuySellCard.parseFrom(body.getBody()); + int count = request.hasCount() ? request.getCount() : 1; + if( request.getBuying() ) { + if( conn.getUserService().getDustForUserId(conn.getUserId()) < request.getUnitBuyPrice()*count ) { + sendResponse(Protocol.BoughtSoldCard.newBuilder() + .setAmount(0) + .setResult(Protocol.BoughtSoldCard.Result.WRONG_BUY_PRICE) + .setDef(request.getDef()) + .build(), conn); + return; + } + IntStream.range(0, count).forEach(i -> conn.getUserService().addCardToCollection(conn.getUserId(), (long) request.getDef().getAsset(), request.getDef().getPremium() != 0, true)); + conn.getUserService().setDustForUserId(conn.getUserId(), conn.getUserService().getDustForUserId(conn.getUserId())-(request.getUnitBuyPrice()*count)); + sendResponse(Protocol.BoughtSoldCard.newBuilder() + .setAmount(request.getUnitBuyPrice()*count) + .setCount(count) + .setResult(Protocol.BoughtSoldCard.Result.BOUGHT) + .setDef(request.getDef()) + .build(), conn); + return; + } + conn.getUserService().removeCardToCollection(conn.getUserId(), (long) request.getDef().getAsset(), request.getDef().getPremium() != 0); + conn.getUserService().setDustForUserId(conn.getUserId(), conn.getUserService().getDustForUserId(conn.getUserId())+(request.getUnitSellPrice()*count)); + sendResponse(Protocol.BoughtSoldCard.newBuilder() + .setAmount(request.getUnitSellPrice()*count) + .setCount(count) + .setResult(Protocol.BoughtSoldCard.Result.SOLD) + .setDef(request.getDef()) + .build(), conn); + } + private void sendResponse(Protocol.BoughtSoldCard response, TcpConnection conn) throws Exception { + Protocol.Notification n = generateNotification(258, response.toByteString(), response.getSerializedSize()); + + Protocol.Header header = Protocol.Header.newBuilder() + .setServiceId(4) + .setMethodId(1) + .setToken(conn.nextToken()) + .setObjectId(0) + .setSize(n.getSerializedSize()) + .setStatus(0) + .build(); + + conn.send(new BattleNetPacket(header, n.toByteArray())); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeckUpdate.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeckUpdate.java index 1341f92..3b09ff6 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeckUpdate.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeckUpdate.java @@ -1,14 +1,18 @@ package com.alterdekim.hearthhack.component.processor.client.request; +import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class DeckUpdate extends ClientRequestParser { @Override public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { // 222 DeckSetData - + Protocol.DeckSetData data = Protocol.DeckSetData.parseFrom(body.getBody()); + log.info("DeckSetData: {}", data); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetCardSeen.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetCardSeen.java index 47f83e7..ff000ca 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetCardSeen.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/SetCardSeen.java @@ -11,8 +11,8 @@ public class SetCardSeen extends ClientRequestParser { @Override public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { Protocol.AckCardSeen request = Protocol.AckCardSeen.parseFrom(body.getBody()); - List l = request.getCardDefsList(); - + request.getCardDefsList() + .forEach(c -> conn.getUserService().updateCardSeenCollection(conn.getUserId(), (long) c.getAsset(), c.getPremium() != 0, true)); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java index 9c884fd..a02c87c 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java @@ -2,9 +2,13 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; -import com.alterdekim.hearthhack.dbf.CardsDBF; +import com.alterdekim.hearthhack.dbf.DBFCard; import com.alterdekim.hearthhack.dbf.DBFField; +import com.alterdekim.hearthhack.game.GameTag; +import com.alterdekim.hearthhack.game.TagRarity; import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.xml.XMLTag; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import java.util.List; @@ -17,51 +21,54 @@ public class CardValues extends GenericParser { @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { - CardsDBF cards = conn.getDbfConfig().getCards(); Protocol.CardValues.Builder cardVals = Protocol.CardValues.newBuilder(); - cards.getRecords().forEach(c -> { - List fields = c.getFields(); - if( !fields.stream().filter(p -> p.getColumn().equals("IS_COLLECTIBLE")).findFirst().get().getVal().equals("True") ) return; - cardVals.addCards(Protocol.CardValue.newBuilder() - .setCard( - Protocol.CardDef.newBuilder() - .setAsset( - Integer.parseInt( - fields.stream() - .filter(p -> p.getColumn().equals("ID")) - .findFirst() - .get() - .getVal() + conn.getDbfConfig().getFormattedCards().getObjects().forEach(f -> { + DBFCard c = f.getDbfCard(); + RarityValues val = RarityValues.fromInt(f.getEntity().getTags().stream().filter(p -> p.getEnumID().intValue() == GameTag.RARITY.getValue().intValue()).findFirst().orElse(new XMLTag(0,"", 0, "")).getValue()); + if( val == RarityValues.INVALID ) return; + List fields = c.getFields(); + if (!fields.stream().filter(p -> p.getColumn().equals("IS_COLLECTIBLE")).findFirst().get().getVal().equals("True")) + return; + cardVals.addCards(Protocol.CardValue.newBuilder() + .setCard( + Protocol.CardDef.newBuilder() + .setAsset( + Integer.parseInt( + fields.stream() + .filter(p -> p.getColumn().equals("ID")) + .findFirst() + .get() + .getVal() ) - ) - .setPremium(1) - .build() - ) - .setBuy(400) - .setSell(100) - .setNerfed(false)); - cardVals.addCards(Protocol.CardValue.newBuilder() - .setCard( - Protocol.CardDef.newBuilder() - .setAsset( - Integer.parseInt( - fields.stream() - .filter(p -> p.getColumn().equals("ID")) - .findFirst() - .get() - .getVal() - ) - ) - .setPremium(0) - .build() - ) - .setBuy(400) - .setSell(100) - .setNerfed(false)); + ) + .setPremium(1) + .build() + ) + .setBuy(val.getCraftGold()) + .setSell(val.getSellGold()) + .setNerfed(false)); + cardVals.addCards(Protocol.CardValue.newBuilder() + .setCard( + Protocol.CardDef.newBuilder() + .setAsset( + Integer.parseInt( + fields.stream() + .filter(p -> p.getColumn().equals("ID")) + .findFirst() + .get() + .getVal() + ) + ) + .setPremium(0) + .build() + ) + .setBuy(val.getCraft()) + .setSell(val.getSell()) + .setNerfed(false)); }); - Protocol.CardValues vals = cardVals.setCardNerfIndex(5).build(); + Protocol.CardValues vals = cardVals.setCardNerfIndex(5).build(); Protocol.Notification n = generateNotification(260, vals.toByteString(), vals.getSerializedSize()); @@ -75,23 +82,41 @@ public class CardValues extends GenericParser { .build(); conn.send(new BattleNetPacket(header, n.toByteArray())); - - // byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318840222BFAE010A0C667261676D656E745F30303012ADAE0132A9AE010A0B0A0308A2021028182820010A0F0A0508A202100110900318900320010A0D0A0308F90C10900318900320010A0F0A0508F90C100110C00C18C00C20010A0D0A0308ED0310900318900320010A0F0A0508ED03100110C00C18C00C20010A0B0A0308D9041064186420010A0F0A0508D904100110A00618A00620010A0D0A0308980710900318900320010A0F0A05089807100110C00C18C00C20010A0B0A0308B1081064186420010A0F0A0508B108100110A00618A00620010A0B0A030892051028182820010A0F0A05089205100110900318900320010A0B0A0308F7061064186420010A0F0A0508F706100110A00618A00620010A0B0A0308D2031064186420010A0F0A0508D203100110A00618A00620010A0D0A0308DC0A10900318900320010A0F0A0508DC0A100110C00C18C00C20010A0B0A0308A8081064186420010A0F0A0508A808100110A00618A00620010A0B0A0308DF161028180520000A0E0A0508B4051001109003183220000A0C0A0408BEAE021064181420000A0E0A0508FF03100110A006186420000A0D0A0308B80810C00C18900320000A0B0A0308AE061028180520000A0C0A0408F9AC021028180520000A0E0A0508C613100110A006186420000A0C0A04088AAD021028180520000A0E0A0508E5131001109003183220000A0B0A0308F7041064181420000A0E0A050888071001109003183220000A0E0A0508FB131001109003183220000A0B0A0308E2061028180520000A0D0A0308FA0610C00C18900320000A0E0A0508E1041001109003183220000A0D0A0408FDAF02109003186420000A0E0A0508A8031001109003183220000A0B0A0308F1131064181420000A0E0A0508C104100110A006186420000A0D0A0308FB1410C00C18900320000A0B0A0308F10F1028180520000A0B0A0308C4051064181420000A0E0A0508D50A100110A006186420000A0E0A040820100110801918C00C20000A0B0A0308F9111028180520000A0E0A0508BA131001109003183220000A0D0A0408D3AA02109003186420000A0F0A0608F5AC021001109003183220000A0B0A0308AC011028180520000A0B0A030890031028180520000A0C0A040880AD021064181420000A0E0A0508900F1001109003183220000A0E0A0508DB0F1001109003183220000A0C0A0408FDAE021028180520000A0F0A0508D513100110C00C18900320000A0B0A0308D2131028180520000A0C0A0308CD13109003186420000A0E0A0508A406100110A006186420000A0E0A05089347100110A006186420000A0B0A0308F6081028180520000A0B0A03089E011064181420000A0B0A0308E30F1028180520000A0B0A030888141028180520000A0B0A0308DC061028180520000A100A0608C2AE02100110801918C00C20000A0F0A0608F9AB02100110A006186420000A0F0A0608F9AC021001109003183220000A0E0A0508B906100110A006186420000A100A0608E9AC02100110801918C00C20000A0C0A03088305109003186420000A0B0A0308AF101028180520000A100A060886B102100110801918C00C20000A0C0A0308C10F109003186420000A0B0A0308900F1028180520000A0B0A030895141064181420000A0B0A0308EC051064181420000A0C0A0408DBAF021064181420000A0E0A05089E01100110A006186420000A0F0A0508E115100110C00C18900320000A0D0A0308F80C10C00C18900320000A0B0A03088D031028180520000A0F0A0508A110100110801918C00C20000A0E0A04084B100110C00C18900320000A0B0A030897101028180520000A0B0A0308FB051064181420000A0E0A0508DF02100110A006186420000A0C0A03089D10109003186420000A0E0A040824100110801918C00C20000A0F0A0608E2AF021001109003183220000A0E0A0508A414100110A006186420000A0D0A040856100110A006186420000A0B0A03088E051064181420000A0E0A0508C414100110A006186420000A0E0A0508B303100110A006186420000A0B0A0308900E1028180520000A0F0A05089B03100110801918C00C20000A0B0A0308E2071028180520000A0D0A04088DAE02109003186420000A0E0A0408EFAF0210C00C18900320000A0E0A0508E913100110A006186420000A100A060883AC02100110801918C00C20000A0F0A0608F6AE021001109003183220000A0E0A0508D9131001109003183220000A0E0A0508CB141001109003183220000A0A0A0208711064181420000A0B0A0308D9071028180520000A0F0A0608D9AE02100110A006186420000A0B0A0308F7111064181420000A0F0A0508D706100110801918C00C20000A0E0A05088104100110A006186420000A0C0A040885AD021028180520000A0E0A05089E02100110A006186420000A0B0A030880101028180520000A0E0A05089301100110A006186420000A0F0A0508DB06100110C00C18900320000A0B0A0308980D1064181420000A0F0A060888AC021001109003183220000A0F0A05088305100110C00C18900320000A0B0A0308FD111064181420000A0F0A0508D80F100110C00C18900320000A0E0A05088A03100110A006186420000A0E0A05088F141001109003183220000A0E0A0408A8AB0210C00C18900320000A0B0A0308CC081064181420000A0E0A0508E7161001109003183220000A0F0A0508E002100110C00C18900320000A0F0A0508EF08100110801918C00C20000A0B0A0308F8021028180520000A0E0A0508F60F1001109003183220000A0C0A040889AC021028180520000A0F0A0508A210100110801918C00C20000A0C0A040891AD021064181420000A0B0A0308DC0F1028180520000A0E0A0508B111100110A006186420000A0F0A05089417100110801918C00C20000A100A0608FEAF02100110801918C00C20000A0F0A05089C10100110C00C18900320000A0E0A0508D5161001109003183220000A0D0A04083D1001109003183220000A0F0A0508E10F100110801918C00C20000A0D0A0408C0AF02109003186420000A0D0A0308F60210C00C18900320000A0B0A030897061064181420000A0E0A05088601100110A006186420000A0C0A03088A01109003186420000A0E0A0508B6131001109003183220000A0E0A0508ED01100110A006186420000A0C0A0408A1AC021064181420000A0E0A0508FA0F100110A006186420000A0E0A05089D151001109003183220000A0E0A050882051001109003183220000A0D0A040871100110A006186420000A0F0A06088DAF021001109003183220000A0B0A03088D0F1064181420000A0C0A04089AAC021028180520000A0B0A0308C5081028180520000A0C0A0308B911109003186420000A0E0A0508E103100110A006186420000A0D0A0308DA0F10C00C18900320000A0C0A0408A9AF021028180520000A0B0A0308B8031064181420000A0B0A030899141064181420000A0F0A0608DBAF02100110A006186420000A0C0A0308B206109003186420000A0F0A0608DDAD02100110A006186420000A0B0A030899021064181420000A100A06089FB002100110801918C00C20000A0B0A0308BA011028180520000A0C0A0308B413109003186420000A0D0A03089A1410C00C18900320000A0C0A0308ED08109003186420000A0E0A0408E0AC0210C00C18900320000A0E0A0508B514100110A006186420000A0C0A040883AD021028180520000A0D0A0308E10F10C00C18900320000A0D0A04088DAC02109003186420000A0A0A0208251064181420000A0E0A05089014100110A006186420000A0F0A060893AD02100110A006186420000A0E0A0508B76C1001109003183220000A0E0A0508C9011001109003183220000A0E0A0508EC111001109003183220000A0E0A0508F405100110A006186420000A0B0A0308DD081064181420000A0B0A0308B3131064181420000A100A0608D9AF02100110C00C18900320000A0E0A0508BF141001109003183220000A0E0A0508FB0C1001109003183220000A0B0A020817109003186420000A0F0A0508BD13100110C00C18900320000A0C0A0308A204109003186420000A0E0A0508DC061001109003183220000A0B0A0308CB141028180520000A0B0A0308C4151064181420000A0F0A05088614100110C00C18900320000A0F0A0608B8AC02100110A006186420000A0D0A0308EC1510C00C18900320000A0C0A0308D013109003186420000A0E0A0508DE05100110A006186420000A0E0A0508FF0F1001109003183220000A0F0A0608F7AA021001109003183220000A0B0A0308C9041028180520000A0E0A0508F90E1001109003183220000A0F0A06089AAC021001109003183220000A0E0A0508C1161001109003183220000A0C0A0308D204109003186420000A0B0A030897151028180520000A0E0A0508F7031001109003183220000A0F0A0608E9AB021001109003183220000A0B0A0308BF161028180520000A0E0A0408E6AE0210C00C18900320000A0B0A0308CE061028180520000A0E0A0508C911100110A006186420000A0F0A0508D10F100110C00C18900320000A0B0A030890101028180520000A0F0A0608CEB102100110A006186420000A0F0A0508BA11100110C00C18900320000A0B0A0308D9151064181420000A0B0A0308C4161028180520000A0B0A0308CB051064181420000A0B0A030881101028180520000A0D0A0308C31610C00C18900320000A0E0A05088C0F1001109003183220000A0B0A0308ED091064181420000A0E0A0508C903100110A006186420000A0B0A0308DF151028180520000A0C0A0308EE02109003186420000A0E0A0508E90F1001109003183220000A0E0A0508F946100110A006186420000A0B0A0308E6161028180520000A0E0A0508C314100110A006186420000A0F0A0508B206100110C00C18900320000A100A0608A2AC02100110C00C18900320000A0F0A0508C20E100110C00C18900320000A0F0A0508EC15100110801918C00C20000A0E0A0508920E1001109003183220000A0C0A0408FEAE021028180520000A0F0A0508C50F100110C00C18900320000A0E0A0508BF17100110A006186420000A0B0A0308FF051028180520000A0E0A0508BF161001109003183220000A0E0A0508C80F100110A006186420000A0E0A0508F6061001109003183220000A0C0A03088609109003186420000A0E0A0508F704100110A006186420000A0F0A0508A810100110801918C00C20000A0F0A060886B002100110A006186420000A0E0A050892101001109003183220000A0E0A040809100110801918C00C20000A0B0A0308AD151064181420000A0B0A0308DB031064181420000A0E0A05088508100110A006186420000A0B0A0308B5141064181420000A0B0A0308C8161028180520000A0C0A0308BE0F109003186420000A0B0A030882121028180520000A0B0A0308F7051064181420000A0D0A0308C80310C00C18900320000A0F0A0508F013100110C00C18900320000A0E0A050897011001109003183220000A0E0A0508F4111001109003183220000A0B0A0308F60E1028180520000A0E0A0508D216100110A006186420000A0F0A0508D202100110801918C00C20000A0E0A0508E60F1001109003183220000A0B0A0308C4061028180520000A0C0A0308CE13109003186420000A0F0A0608DAB0021001109003183220000A0C0A0308CF14109003186420000A0B0A0308F6061028180520000A0B0A0308B4051028180520000A0B0A0308D20F1064181420000A0F0A0608B2AD021001109003183220000A0B0A030880041028180520000A0E0A05088A10100110A006186420000A0B0A0308C2081028180520000A0C0A0408B1B0021028180520000A0F0A060883AD021001109003183220000A100A0608A7AD02100110C00C18900320000A0B0A0308CE161028180520000A0E0A050885101001109003183220000A0B0A0308EB131028180520000A0C0A0308C814109003186420000A0E0A0508EE13100110A006186420000A0B0A0308F0111028180520000A0E0A05088910100110A006186420000A0F0A0508CB15100110C00C18900320000A0E0A05088E10100110A006186420000A0B0A0308880E1028180520000A0E0A050880041001109003183220000A0E0A0508C4061001109003183220000A0E0A0508AE031001109003183220000A0B0A0308AE031028180520000A0E0A0508D307100110A006186420000A0E0A0508C2151001109003183220000A0B0A03089A041028180520000A0B0A0308D3071064181420000A0A0A02082D1028180520000A0E0A0508B3011001109003183220000A0E0A05088B141001109003183220000A0D0A0408BDAC02109003186420000A0E0A0508FA051001109003183220000A0E0A05088B10100110A006186420000A0E0A0508CF131001109003183220000A0E0A0508F40F1001109003183220000A0C0A04088CAC021064181420000A0B0A0308A0151064181420000A0E0A0508C415100110A006186420000A0C0A0308C50F109003186420000A0F0A0508B90D100110801918C00C20000A0A0A02085F1064181420000A0E0A0508FD021001109003183220000A0D0A04081E1001109003183220000A0C0A03089609109003186420000A100A06088AB002100110801918C00C20000A0D0A03089D0D10C00C18900320000A0C0A0408B6AC021064181420000A0E0A0508CC161001109003183220000A0F0A05088609100110C00C18900320000A0E0A0508F80F100110A006186420000A0C0A04088BAF021064181420000A0E0A050893141001109003183220000A0B0A0308E90F1028180520000A0F0A0508CE0F100110C00C18900320000A0F0A0608D0AF021001109003183220000A0B0A0308E3111064181420000A0E0A0508A9151001109003183220000A0D0A0408DCAF02109003186420000A0E0A0508D3161001109003183220000A0C0A0408DDAD021064181420000A100A0608C4AB02100110C00C18900320000A0F0A0608F6AA021001109003183220000A0C0A040893AD021064181420000A0E0A0508DF141001109003183220000A0E0A0408CFB10210C00C18900320000A0F0A0608F1AF02100110A006186420000A0E0A0508F00F1001109003183220000A0E0A0408C9AF0210C00C18900320000A0C0A0408F2AF021028180520000A0D0A0308B40310C00C18900320000A0D0A0308841710C00C18900320000A0E0A0508D2131001109003183220000A0E0A0508810E100110A006186420000A0E0A0508FD051001109003183220000A0E0A0508AB021001109003183220000A0F0A0508A615100110C00C18900320000A0E0A0508F90F1001109003183220000A0F0A060886AD021001109003183220000A0F0A0508C001100110C00C18900320000A0E0A0508BE161001109003183220000A0F0A0508A010100110801918C00C20000A0B0A0308C9131064181420000A0E0A050896141001109003183220000A0C0A02080910C00C18900320000A0E0A0508F50F1001109003183220000A0F0A0508C803100110801918C00C20000A0E0A0508E4131001109003183220000A0B0A0308EE0F1064181420000A0D0A0308930F10C00C18900320000A0F0A05089F10100110801918C00C20000A0C0A0308DE14109003186420000A0E0A0508BB161001109003183220000A0B0A0308B7171064181420000A0D0A0308D61110C00C18900320000A0F0A0608F2AF021001109003183220000A0F0A0508AF04100110801918C00C20000A0B0A030895031028180520000A0B0A03088E171064181420000A0D0A0308BA0410C00C18900320000A0E0A0508D1131001109003183220000A0C0A0308A805109003186420000A0F0A05088F06100110C00C18900320000A0B0A0308F9031028180520000A0F0A05088005100110801918C00C20000A0C0A0408F9B0021028180520000A0B0A0308E4151064181420000A0E0A050883091001109003183220000A0E0A0508A015100110A006186420000A0F0A05088710100110C00C18900320000A0C0A0408BBAF021028180520000A0F0A05089007100110801918C00C20000A0C0A040882AD021028180520000A0E0A0508C5081001109003183220000A0E0A0508C1131001109003183220000A0F0A0508B911100110C00C18900320000A0B0A0308DF141028180520000A0E0A050899071001109003183220000A0B0A0308D5161028180520000A0B0A03088C0E1028180520000A0F0A0608B0B002100110A006186420000A0A0A0208161028180520000A0E0A05088C10100110A006186420000A0F0A06088CAC02100110A006186420000A0E0A0508F70F1001109003183220000A0B0A030887041028180520000A0F0A0508ED08100110C00C18900320000A0F0A0508C703100110C00C18900320000A0E0A0508CE061001109003183220000A0B0A03088C101064181420000A0F0A0508A610100110801918C00C20000A0B0A03088D081064181420000A0C0A0308DE16109003186420000A0F0A0508F602100110801918C00C20000A0B0A0308DD041064181420000A0B0A0308ED041028180520000A0E0A0508A2141001109003183220000A0B0A03088F141028180520000A0F0A0508D30F100110801918C00C20000A0E0A0508B717100110A006186420000A0E0A0508C50E1001109003183220000A0A0A02080C1064181420000A0B0A0308C3131028180520000A0E0A0508E006100110A006186420000A0B0A0308BF141028180520000A0B0A0308B76C1028180520000A0B0A030883141064181420000A0B0A03088F091064181420000A100A0608C7AE02100110C00C18900320000A0E0A0508F711100110A006186420000A0B0A0308D2111028180520000A0B0A03088A101064181420000A0A0A0208441028180520000A0E0A05089F031001109003183220000A0E0A0508F70C100110A006186420000A0B0A0308CC161028180520000A0C0A04088F9A021064181420000A0E0A0508B2141001109003183220000A0F0A0508A209100110801918C00C20000A0B0A0308FF031064181420000A0D0A0308840E10C00C18900320000A0B0A0308F20F1064181420000A0B0A030880071064181420000A0E0A0508EE111001109003183220000A0C0A0308E40F109003186420000A0B0A0308DC021028180520000A0D0A0308C20610C00C18900320000A0B0A0308CE031028180520000A0E0A0508DA131001109003183220000A0E0A0508C4131001109003183220000A0E0A0508F9111001109003183220000A0D0A0308A21010C00C18900320000A0E0A0508F0111001109003183220000A0E0A05088F10100110A006186420000A0E0A0508D9071001109003183220000A0B0A0308D4041064181420000A0E0A0508E9011001109003183220000A0B0A030887031064181420000A0E0A05089902100110A006186420000A0F0A0608FEAE021001109003183220000A0C0A03088710109003186420000A0D0A0308D71310C00C18900320000A0B0A0308A4071064181420000A0E0A0508D5031001109003183220000A0B0A0308E50F1064181420000A0F0A0508A614100110C00C18900320000A0E0A0508DE071001109003183220000A0E0A0508CE031001109003183220000A0C0A0408F5AC021028180520000A0C0A0408D4AF021028180520000A0F0A0508FB0E100110801918C00C20000A0C0A0308E915109003186420000A0F0A0508E20F100110C00C18900320000A0F0A0508C814100110C00C18900320000A0E0A0508C40E1001109003183220000A0B0A0308E8011028180520000A0B0A0308FD051028180520000A0E0A05089706100110A006186420000A0E0A0508DF151001109003183220000A0B0A03089F031028180520000A0E0A0408C0AC0210C00C18900320000A0C0A0308D613109003186420000A0E0A0508AD15100110A006186420000A0B0A03088E0E1028180520000A0F0A05088914100110C00C18900320000A0F0A0508A315100110C00C18900320000A0E0A05089310100110A006186420000A0B0A03088B141028180520000A0E0A05088C011001109003183220000A0E0A0508D404100110A006186420000A0C0A02082010C00C18900320000A0E0A0508D1111001109003183220000A0E0A0508AE10100110A006186420000A0C0A0408CEB1021064181420000A0D0A03088B0F10C00C18900320000A0F0A0508A515100110801918C00C20000A0E0A050884101001109003183220000A100A0608B1AF02100110C00C18900320000A0E0A0508C405100110A006186420000A0B0A030893011064181420000A0D0A0308890610C00C18900320000A0B0A030888071028180520000A0E0A0508A705100110A006186420000A0E0A040886B10210C00C18900320000A0B0A030892101028180520000A0E0A0508870E100110A006186420000A0E0A0508D40A1001109003183220000A0C0A0308A615109003186420000A0B0A0308CF161028180520000A0D0A0308A31010C00C18900320000A0C0A0308F508109003186420000A0F0A0508B914100110C00C18900320000A0B0A0308D4051028180520000A0B0A0308B9061064181420000A0E0A0508E507100110A006186420000A0E0A0508E30F1001109003183220000A0E0A0508E20C100110A006186420000A0E0A0508E9121001109003183220000A0C0A0308B702109003186420000A0E0A0508C9041001109003183220000A0B0A0308D8141064181420000A0B0A0308CD161028180520000A100A0608BDAC02100110C00C18900320000A0B0A030895101064181420000A0C0A0408A0AB021064181420000A0E0A05089A021001109003183220000A0E0A0508AE061001109003183220000A0B0A0308DB0A1064181420000A0E0A050890101001109003183220000A0D0A0308FB0810C00C18900320000A0B0A0308CD151028180520000A0B0A0308C3141064181420000A0B0A0308E1031064181420000A0B0A03088D101064181420000A0C0A0308E115109003186420000A0D0A0308D20210C00C18900320000A0C0A0308D10F109003186420000A0E0A05089914100110A006186420000A0E0A0508F20B100110A006186420000A0C0A0408C5AE021028180520000A0B0A030885041064181420000A0B0A0308EA0F1028180520000A0B0A0308AD101028180520000A100A0608A0B002100110801918C00C20000A100A0608E0AC02100110801918C00C20000A0D0A03089F1010C00C18900320000A0B0A0308E8121028180520000A0C0A03089810109003186420000A100A0608D3AE02100110801918C00C20000A0C0A03089A10109003186420000A0E0A050894141001109003183220000A0B0A0308C3011028180520000A0F0A0608CEAE02100110A006186420000A0B0A03089A021028180520000A0B0A030885081064181420000A0F0A05088A01100110C00C18900320000A0B0A0308D2141028180520000A0E0A05088703100110A006186420000A0C0A0408F1AF021064181420000A0D0A0308900710C00C18900320000A0C0A0408D0AF021028180520000A0F0A0508DE14100110C00C18900320000A0F0A0608D4AE02100110A006186420000A0F0A0508B413100110C00C18900320000A100A0608CDAF02100110C00C18900320000A0C0A0408F7AA021028180520000A0E0A0508D50F1001109003183220000A0F0A06088BAF02100110A006186420000A0E0A0508BB13100110A006186420000A0E0A05089403100110A006186420000A0D0A04082D1001109003183220000A0E0A0508CD151001109003183220000A0D0A0308D70610C00C18900320000A0E0A0508B7041001109003183220000A0F0A060880AF021001109003183220000A0B0A0308FC0F1028180520000A0E0A0508EB131001109003183220000A0B0A0308A5091028180520000A0E0A05088D031001109003183220000A0B0A0308DB0F1028180520000A0C0A0408AFAC021064181420000A0B0A0308810A1028180520000A0C0A0308BB03109003186420000A0F0A060884AD021001109003183220000A0E0A0508C509100110A006186420000A0E0A0508E2061001109003183220000A0B0A0308DF021064181420000A0B0A0308C4141064181420000A0E0A0508900E1001109003183220000A0C0A040888AC021028180520000A0F0A060891AD02100110A006186420000A0F0A05088B0F100110801918C00C20000A0B0A0308FB011028180520000A0D0A0308DA0D10C00C18900320000A0E0A0508EB16100110A006186420000A0E0A05089514100110A006186420000A0C0A0308BD13109003186420000A0B0A0308E1041028180520000A0F0A0508C90F100110801918C00C20000A0C0A0408CEAE021064181420000A0E0A0508E8121001109003183220000A0E0A0508EA0F1001109003183220000A0B0A0308F8131064181420000A0F0A05088412100110801918C00C20000A0D0A0408F2AE02109003186420000A0E0A0508BA161001109003183220000A0C0A0408ECAE021028180520000A0B0A0308D60F1028180520000A0E0A05088310100110A006186420000A100A0608A8AB02100110801918C00C20000A0D0A0308FB0E10C00C18900320000A0F0A0608B4AC021001109003183220000A0F0A0508CE13100110C00C18900320000A0C0A03089910109003186420000A0E0A0508FB11100110A006186420000A0F0A05089A10100110C00C18900320000A0C0A0308B914109003186420000A0E0A0508E2151001109003183220000A0C0A0408FBAA021064181420000A0F0A0508A510100110801918C00C20000A0B0A030891101064181420000A0B0A03089B151028180520000A0E0A0508AF101001109003183220000A0F0A0608DBB0021001109003183220000A0E0A0508E50F100110A006186420000A0D0A0308F80810C00C18900320000A0F0A05089002100110C00C18900320000A0F0A0608B8AD021001109003183220000A0E0A0508C3011001109003183220000A0D0A0408161001109003183220000A0B0A0308D2151064181420000A0C0A0308A315109003186420000A0E0A050886061001109003183220000A0B0A03088F0F1028180520000A0E0A05088504100110A006186420000A0D0A0308EF0F10C00C18900320000A0D0A0408A7AD02109003186420000A0E0A050897681001109003183220000A0B0A03088A031064181420000A100A0608C9AF02100110801918C00C20000A0E0A0508F2011001109003183220000A0F0A0508A710100110801918C00C20000A0C0A0308A614109003186420000A0D0A040887AB02109003186420000A0C0A0308C115109003186420000A0B0A0308C60F1064181420000A0B0A0308B0101028180520000A0E0A0508FB05100110A006186420000A0D0A0408B1AF02109003186420000A0F0A060888B002100110A006186420000A0E0A050881051001109003183220000A0B0A0308DE071028180520000A0B0A0308F9461064181420000A0F0A0508850E100110801918C00C20000A0B0A030880121028180520000A0B0A0308D9131028180520000A0D0A0308C50410C00C18900320000A0B0A0308C8131064181420000A0F0A0508C316100110801918C00C20000A0D0A0408CDAF02109003186420000A0E0A0408CBAC0210C00C18900320000A0E0A0508F705100110A006186420000A0E0A0508BA011001109003183220000A0C0A0308C70F109003186420000A0F0A0508D204100110C00C18900320000A0B0A0308FB131028180520000A0E0A0508FA11100110A006186420000A0E0A050895031001109003183220000A0D0A0408A9AD02109003186420000A0B0A0308ED021028180520000A0E0A0508E70F100110A006186420000A0C0A0308C001109003186420000A0C0A040888B0021064181420000A0E0A050896101001109003183220000A0B0A0308E9121028180520000A0D0A0308A61010C00C18900320000A0E0A0508E00F100110A006186420000A0B0A0308D2161064181420000A0B0A0308FA051028180520000A0E0A0508D814100110A006186420000A0B0A0308ED0F1064181420000A0B0A0308F5041064181420000A0B0A0308F70F1028180520000A0E0A0508CD161001109003183220000A0C0A0408F6AA021028180520000A0C0A0308E107109003186420000A0C0A0308DB06109003186420000A0C0A0408F9AB021064181420000A0E0A0508B714100110A006186420000A0B0A03089D021028180520000A0B0A0308C4131028180520000A0B0A0308C9011028180520000A0E0A0508810A1001109003183220000A0B0A0308C9031064181420000A0F0A0608E8AF021001109003183220000A0D0A0308B01510C00C18900320000A0F0A0508F80D100110C00C18900320000A0C0A040888AF021064181420000A0E0A05088D0E1001109003183220000A0F0A06088AAD021001109003183220000A100A0608F2AE02100110C00C18900320000A0B0A03089E021064181420000A0B0A0308FE0D1064181420000A0F0A0508ED16100110C00C18900320000A0F0A0608FFAF02100110A006186420000A0E0A0508BC051001109003183220000A0F0A060880AD02100110A006186420000A0F0A0608F2B002100110A006186420000A0B0A0308BB161028180520000A0C0A0408BEAB021028180520000A0C0A0408CFAF021028180520000A0B0A030882051028180520000A0E0A0508E311100110A006186420000A0F0A0508D80A100110C00C18900320000A0E0A0508D311100110A006186420000A0F0A05088414100110C00C18900320000A0E0A0508E415100110A006186420000A100A0608AEAB02100110801918C00C20000A0B0A0308F50F1028180520000A0B0A030893071064181420000A0F0A0608C4AE021001109003183220000A0C0A04088EAC021064181420000A0C0A0408D191021064181420000A0E0A0508CA08100110A006186420000A0B0A0308810E1064181420000A0F0A05089B10100110C00C18900320000A0F0A0508C20F100110801918C00C20000A0D0A0408F9AA02109003186420000A0E0A05088610100110A006186420000A0E0A0508CF161001109003183220000A0C0A0408D9AE021064181420000A0E0A040883AC0210C00C18900320000A0B0A0308F5131028180520000A0D0A0408FFAD02109003186420000A0D0A0308A41510C00C18900320000A0F0A05089A14100110801918C00C20000A0E0A0508E2081001109003183220000A0E0A0508F713100110A006186420000A0B0A0308DA131028180520000A0E0A0508EA161001109003183220000A0F0A0608BBAF021001109003183220000A0F0A0508F80C100110801918C00C20000A0F0A0508A310100110801918C00C20000A0B0A02084B109003186420000A0A0A0208561064181420000A0F0A0508A314100110801918C00C20000A0E0A0508AB061001109003183220000A100A0608CBAC02100110801918C00C20000A0E0A0508CB13100110A006186420000A0A0A02083D1028180520000A0B0A030886101064181420000A0F0A0508B403100110801918C00C20000A0F0A06088F9A02100110A006186420000A0E0A050881101001109003183220000A0E0A0508CE15100110A006186420000A0B0A0308D50A1064181420000A0D0A0308820E10C00C18900320000A0E0A0508CB0F100110A006186420000A0B0A0308F5051028180520000A0B0A0308D90D1028180520000A0F0A0508FB14100110801918C00C20000A100A0608B0AF02100110C00C18900320000A0B0A0308A7051064181420000A0E0A0408BFAC0210C00C18900320000A0C0A0408CBAF021028180520000A0E0A0408D8AC0210C00C18900320000A0C0A0408FAAA021064181420000A0B0A0308F90F1028180520000A0E0A0508D215100110A006186420000A0E0A050890151001109003183220000A0F0A0608AFAC02100110A006186420000A0B0A0308C0141028180520000A0F0A0508AC04100110801918C00C20000A0F0A0608C5AE021001109003183220000A0B0A0308CD0F1064181420000A0B0A0308E9131064181420000A0D0A03089E1010C00C18900320000A0C0A03089B10109003186420000A0E0A0508F807100110A006186420000A0E0A0508F9031001109003183220000A0B0A0308BA131028180520000A0B0A0308E2111028180520000A0B0A0308C9111064181420000A0B0A0308D3161028180520000A0E0A050882121001109003183220000A0C0A02082410C00C18900320000A0B0A0308FA0C1064181420000A0B0A0308E6111064181420000A0E0A0508B803100110A006186420000A0F0A0508E911100110801918C00C20000A0F0A0508FF0D100110801918C00C20000A0E0A0508940F1001109003183220000A0E0A0508D60A100110A006186420000A0B0A030896141028180520000A0B0A0308C5091064181420000A0C0A040884B0021064181420000A0E0A0508F5161001109003183220000A0F0A0508BC14100110C00C18900320000A100A0608E6AE02100110801918C00C20000A0F0A0508A410100110801918C00C20000A0E0A0508ED09100110A006186420000A0E0A0508C9071001109003183220000A0B0A0308FB0F1028180520000A0D0A04080C100110A006186420000A0E0A05088F0F1001109003183220000A0B0A030894101028180520000A0C0A0308C703109003186420000A0B0A0308EA161028180520000A0F0A0608A0AB02100110A006186420000A0B0A0308FB061064181420000A0D0A0308E81110C00C18900320000A0D0A0408FEAA02109003186420000A0D0A0308EF0810C00C18900320000A100A060892AC02100110C00C18900320000A0E0A0508FB0F1001109003183220000A0D0A03089B0310C00C18900320000A0F0A0508C914100110801918C00C20000A100A060881B102100110C00C18900320000A0E0A0508D015100110A006186420000A0F0A0508EF0F100110801918C00C20000A0C0A0408D2AE021028180520000A0C0A0408C4AE021028180520000A0B0A0308D1111028180520000A0F0A0508E915100110C00C18900320000A0C0A0308F80D109003186420000A0B0A0308C9161028180520000A0F0A060884B002100110A006186420000A0B0A030882161028180520000A0F0A0508BE0F100110C00C18900320000A0E0A0508F20F100110A006186420000A0B0A0308B2141028180520000A0E0A0508C0151001109003183220000A0E0A0508EE0F100110A006186420000A0B0A0308FE071028180520000A0B0A0308CB0F1064181420000A0E0A0508E611100110A006186420000A0D0A040825100110A006186420000A0B0A0308F7131064181420000A0B0A0308A4061064181420000A0D0A0308941710C00C18900320000A0E0A0508A106100110A006186420000A0B0A0308A1061064181420000A0B0A0308E7161028180520000A0C0A04088DAF021028180520000A0D0A0308FF0D10C00C18900320000A100A0608C0AC02100110801918C00C20000A0B0A0308CA081064181420000A0B0A0308A8031028180520000A0F0A0508BB03100110C00C18900320000A0E0A0508FB06100110A006186420000A0F0A05089609100110C00C18900320000A0B0A0308F4111028180520000A0B0A0308C7171028180520000A0B0A0308890F1064181420000A0B0A03088A0E1028180520000A0E0A0508F8021001109003183220000A0C0A03089C10109003186420000A0B0A030891171064181420000A100A0608A7AC02100110C00C18900320000A0B0A0308F70D1028180520000A0E0A0408AEAB0210C00C18900320000A0C0A03089101109003186420000A0D0A04085F100110A006186420000A0F0A0608CFAF021001109003183220000A0D0A0308A81010C00C18900320000A0F0A060889AC021001109003183220000A0C0A0308BA11109003186420000A0E0A0508C308100110A006186420000A0B0A0308F70C1064181420000A0C0A0408FAB0021064181420000A0B0A03088E0F1064181420000A0B0A0308CB131064181420000A0E0A040817100110C00C18900320000A0B0A0308BE161028180520000A0C0A03088B08109003186420000A0B0A0308F80F1064181420000A0B0A0308E6041028180520000A0E0A050887041001109003183220000A0F0A0508BD14100110801918C00C20000A0E0A0508C8161001109003183220000A100A0608A4AC02100110C00C18900320000A0B0A0308E5131028180520000A0E0A0408E9AC0210C00C18900320000A0F0A06089DAC02100110A006186420000A100A0608EFAF02100110801918C00C20000A0B0A0308F4051064181420000A0C0A03088616109003186420000A0B0A030894141028180520000A0D0A0308A40310C00C18900320000A0B0A0308EE131064181420000A0E0A050882101001109003183220000A0D0A0308FC1310C00C18900320000A0B0A0308AE101064181420000A0F0A0508DF0F100110C00C18900320000A0C0A0408F2B0021064181420000A0B0A0308C7131028180520000A0D0A0308800510C00C18900320000A0B0A0308D20A1028180520000A0E0A0508D1141001109003183220000A0E0A0508ED021001109003183220000A0E0A0508DE15100110A006186420000A0B0A0308CF131028180520000A0F0A05089910100110C00C18900320000A0C0A0308950F109003186420000A0B0A0308BF171064181420000A0E0A0508D3131001109003183220000A0D0A0308ED0510C00C18900320000A0B0A03088A061028180520000A0B0A030896101028180520000A0B0A0308E20C1064181420000A0B0A0308C2151028180520000A0F0A0608A1AC02100110A006186420000A0D0A0408C7AE02109003186420000A0E0A0408D3AE0210C00C18900320000A0F0A0508D511100110801918C00C20000A0E0A0508EA041001109003183220000A0E0A0508A5091001109003183220000A0F0A0508EC0F100110C00C18900320000A0B0A0308D40A1028180520000A0F0A0508C115100110C00C18900320000A0B0A0308E00F1064181420000A0C0A04089DAC021064181420000A0B0A03088E101064181420000A0F0A0608FDAE021001109003183220000A0F0A05088417100110801918C00C20000A0B0A0308A2141028180520000A0B0A0308E0061064181420000A0F0A060881B0021001109003183220000A0B0A0308D4111028180520000A0F0A0508EB02100110801918C00C20000A0B0A0308A4141064181420000A0F0A0508D002100110801918C00C20000A0B0A0308F2011028180520000A100A0608A9AD02100110C00C18900320000A0B0A0308C2161028180520000A0E0A050880121001109003183220000A0C0A0308D513109003186420000A0B0A0308DC011064181420000A0C0A040880AF021028180520000A0D0A0308871710C00C18900320000A0E0A0508D60F1001109003183220000A0B0A0308D4081028180520000A0E0A0508FA0C100110A006186420000A0E0A0508C3131001109003183220000A0F0A0508930F100110801918C00C20000A0B0A0308910E1028180520000A0E0A0508E6161001109003183220000A0E0A0508DD0F100110A006186420000A0C0A0308E002109003186420000A0D0A04088AAE02109003186420000A0B0A03089D151028180520000A0E0A0508870F1001109003183220000A0B0A0308C1041064181420000A100A0608F9AA02100110C00C18900320000A0B0A030894031064181420000A0B0A0308C9071028180520000A0E0A0408C4AC0210C00C18900320000A0F0A05088906100110801918C00C20000A0E0A05089B151001109003183220000A0E0A050896061001109003183220000A0F0A0508B808100110801918C00C20000A0D0A0308F21310C00C18900320000A0E0A0508FA0D100110A006186420000A0C0A0308A708109003186420000A0F0A0508BA14100110801918C00C20000A0B0A0308C5031064181420000A0E0A0508FB011001109003183220000A0E0A0508890F100110A006186420000A0B0A0308B1111064181420000A0E0A0508DC01100110A006186420000A0E0A0508F2111001109003183220000A0E0A0508F811100110A006186420000A0E0A0508ED13100110A006186420000A0B0A0308F60F1028180520000A0B0A0308EC111028180520000A0E0A05088810100110A006186420000A0B0A0308E5071064181420000A0E0A0508D20F100110A006186420000A0F0A05089D0D100110801918C00C20000A0E0A0508F311100110A006186420000A0F0A0508C207100110801918C00C20000A0D0A0308EB0210C00C18900320000A0D0A0308AF0410C00C18900320000A0C0A0308F013109003186420000A0B0A030882101028180520000A0F0A0508D301100110C00C18900320000A0C0A0408DDAE021028180520000A0E0A0508C60F100110A006186420000A0E0A05088E0F100110A006186420000A0B0A0308FB111064181420000A0E0A0508DF161001109003183220000A0E0A0508DB03100110A006186420000A0D0A0308CA1410C00C18900320000A0E0A0508D2141001109003183220000A0C0A040886AD021028180520000A0F0A0608D4AF021001109003183220000A0E0A0508D40F100110A006186420000A0B0A0308F3111064181420000A0F0A060885AD021001109003183220000A0E0A0508F60E1001109003183220000A0B0A030899071028180520000A0E0A0508DB0A100110A006186420000A0E0A050897101001109003183220000A0D0A0308BC1510C00C18900320000A0D0A0408A7AC02109003186420000A0F0A0508CF14100110C00C18900320000A0F0A0608F4AF02100110A006186420000A0B0A0308890E1028180520000A0E0A0508C2081001109003183220000A0B0A0308A9151028180520000A0E0A0508DC15100110A006186420000A0E0A0508D915100110A006186420000A0B0A0308B4141064181420000A0C0A0308D90F109003186420000A0B0A0308E2151028180520000A0E0A0508CC08100110A006186420000A0E0A0508F111100110A006186420000A0E0A0508C0141001109003183220000A0E0A0508C7131001109003183220000A0C0A0308DF0F109003186420000A0B0A0308CE151064181420000A0C0A0308F305109003186420000A0B0A0308D8131028180520000A0E0A0508C90D100110A006186420000A0C0A0408FEAC021028180520000A0F0A06088EAC02100110A006186420000A0E0A0508F813100110A006186420000A0F0A0508A805100110C00C18900320000A0E0A0508F504100110A006186420000A0B0A0308F1111064181420000A100A0608AEB002100110C00C18900320000A0B0A0308BC051028180520000A0F0A0508C206100110801918C00C20000A0E0A0508D4111001109003183220000A0B0A0308E9011028180520000A0E0A0508DE0F100110A006186420000A0E0A0508FD0D1001109003183220000A100A0608FDAF02100110C00C18900320000A0B0A0308FF0F1028180520000A0F0A0508F914100110801918C00C20000A0B0A0308C40F1028180520000A0B0A0308CE141064181420000A0B0A0308F8071064181420000A0E0A0508D8131001109003183220000A0E0A0508C503100110A006186420000A0B0A030886061028180520000A0E0A0508D711100110A006186420000A100A0608DCAF02100110C00C18900320000A0F0A0508E811100110801918C00C20000A0C0A0408B8AC021064181420000A0F0A0508FC13100110801918C00C20000A0E0A05089D06100110A006186420000A0C0A0408DAB0021028180520000A0B0A0308EA041028180520000A0B0A0308C3081064181420000A0B0A0308F90E1028180520000A0E0A0508F10F1001109003183220000A0E0A0508C0071001109003183220000A0B0A0308920E1028180520000A0B0A030889101064181420000A0F0A0508950F100110C00C18900320000A0E0A0508E8011001109003183220000A0E0A0508CE14100110A006186420000A0E0A0508EC05100110A006186420000A0B0A0308FD0D1028180520000A0B0A0308CA161028180520000A0F0A0608F7AB021001109003183220000A0E0A0408FEAF0210C00C18900320000A0B0A03088D0E1028180520000A0D0A0308FA1410C00C18900320000A0C0A0308920F109003186420000A0F0A0508C515100110801918C00C20000A0E0A050882161001109003183220000A0E0A05088F0E1001109003183220000A100A0608FFAD02100110C00C18900320000A0E0A0408A0B00210C00C18900320000A0F0A05088717100110801918C00C20000A0F0A0508E107100110C00C18900320000A0B0A0308BA161028180520000A0E0A05089117100110A006186420000A0C0A0308BC14109003186420000A100A06088DAC02100110C00C18900320000A0E0A0508980D100110A006186420000A0C0A0308FD0F109003186420000A100A0608D8AC02100110801918C00C20000A0B0A0308E7111064181420000A0E0A0508E6041001109003183220000A0D0A0408D9AF02109003186420000A0E0A05089E07100110A006186420000A0F0A0508A403100110801918C00C20000A0B0A0308C90D1064181420000A0E0A0508CB16100110A006186420000A0F0A0608FBAA02100110A006186420000A0F0A0508E40F100110C00C18900320000A0E0A050890031001109003183220000A0D0A0408AEB002109003186420000A0C0A0408E8AF021028180520000A0B0A0308CB161064181420000A0F0A0508BF08100110C00C18900320000A0E0A0508C40F1001109003183220000A0E0A0508DD0A1001109003183220000A0E0A05088A061001109003183220000A0E0A0508B2081001109003183220000A0E0A0508CF151001109003183220000A0B0A0308D5081064181420000A0E0A0508DB091001109003183220000A100A0608C0AF02100110C00C18900320000A0D0A0308A11010C00C18900320000A0C0A0308910F109003186420000A0B0A0308E70F1064181420000A0B0A0308F6071064181420000A0B0A030893471064181420000A0F0A0608B1B0021001109003183220000A0B0A030897011028180520000A0C0A0308E20F109003186420000A0F0A0608FAAC021001109003183220000A0F0A0608FBAB02100110A006186420000A0B0A0308ED011064181420000A0E0A0508FE0D100110A006186420000A0C0A0408B9AB021064181420000A0C0A0408B0B0021064181420000A0E0A0508DC0F1001109003183220000A0E0A0508F30F1001109003183220000A0B0A0308870E1064181420000A0D0A0408221001109003183220000A0F0A0608CBAF021001109003183220000A0E0A0508CA161001109003183220000A0B0A0308C8041028180520000A0F0A0508FA0E100110801918C00C20000A0F0A05088B08100110C00C18900320000A0D0A0308851710C00C18900320000A0F0A0608ADB002100110A006186420000A0B0A0308F2051028180520000A0D0A0408A4AC02109003186420000A0B0A0308F50D1028180520000A0D0A0308C51510C00C18900320000A0C0A0408FFAF021064181420000A100A0608C4AC02100110801918C00C20000A0E0A05088E0E1001109003183220000A0B0A0308EB161064181420000A0B0A030883091028180520000A0D0A0308F91410C00C18900320000A0E0A0508890E1001109003183220000A0F0A0508AA06100110C00C18900320000A0D0A0308E91110C00C18900320000A0E0A0508EE01100110A006186420000A0C0A0408DBB0021028180520000A0F0A0508A715100110801918C00C20000A0C0A0408E2AF021028180520000A0E0A050881171001109003183220000A0B0A0308B7141064181420000A0B0A0308F8111064181420000A0F0A0508D613100110C00C18900320000A0D0A0308BA1410C00C18900320000A0B0A030883101064181420000A0F0A0508B702100110C00C18900320000A0B0A0308DE0F1064181420000A0F0A0608A9AF021001109003183220000A0B0A0308FE0C1064181420000A0B0A0308C6131064181420000A0B0A0308E4131028180520000A0F0A0608E0B002100110A006186420000A0F0A0608B6AC02100110A006186420000A100A0608BFAC02100110801918C00C20000A0F0A0508FB08100110801918C00C20000A0E0A0508910E1001109003183220000A0B0A030891141028180520000A0D0A040881B102109003186420000A0B0A0308C0071028180520000A0B0A0308E7071028180520000A0D0A0308C90F10C00C18900320000A0E0A0508A407100110A006186420000A0F0A0508EE02100110C00C18900320000A0B0A0308FD021028180520000A0B0A030886011064181420000A0E0A0508B0101001109003183220000A0B0A030882081064181420000A0B0A0308880F1028180520000A0E0A04089FB00210C00C18900320000A0E0A0508CB05100110A006186420000A0F0A060882B0021001109003183220000A0F0A0508A708100110C00C18900320000A0B0A0308AB061028180520000A0F0A0508FD0F100110C00C18900320000A0B0A0308CF151028180520000A0B0A0308D5031028180520000A0E0A05088E17100110A006186420000A0B0A0308EE061028180520000A0D0A0308841210C00C18900320000A0E0A05088007100110A006186420000A0B0A03089D061064181420000A0B0A03088C021028180520000A100A06088DAE02100110C00C18900320000A0E0A0508D2111001109003183220000A0B0A0308F7031028180520000A0D0A0308B20210C00C18900320000A0B0A03088F0E1028180520000A0B0A0308FA111064181420000A0B0A0308BB131064181420000A0E0A0508ED041001109003183220000A0D0A0308AC0410C00C18900320000A0B0A0308C1161028180520000A0F0A0608FAB002100110A006186420000A0F0A0508C504100110801918C00C20000A0E0A0508FC0F1001109003183220000A100A0608FEAA02100110C00C18900320000A0F0A0608ECAE021001109003183220000A0E0A0508FE0C100110A006186420000A0B0A0308F30C1028180520000A0B0A0308C40E1028180520000A0E0A0508FD11100110A006186420000A0B0A0308D3131028180520000A0D0A0308D51110C00C18900320000A0E0A05089307100110A006186420000A0C0A0408ADB0021064181420000A0B0A030890151028180520000A0E0A05089D021001109003183220000A0F0A06088DAD021001109003183220000A0B0A030881171028180520000A100A0608D3AA02100110C00C18900320000A0E0A0508F5131001109003183220000A0C0A0308BF08109003186420000A0E0A05088D10100110A006186420000A0C0A03088D14109003186420000A0F0A0508B015100110801918C00C20000A0C0A040884AD021028180520000A0B0A0308E2081028180520000A0B0A030893101064181420000A0B0A0308E7131028180520000A0F0A05089D10100110C00C18900320000A0E0A0508D4081001109003183220000A0E0A0508C615100110A006186420000A0B0A0308940F1028180520000A0E0A05088E05100110A006186420000A0E0A0508E8151001109003183220000A0E0A0508CE161001109003183220000A0F0A0508A415100110801918C00C20000A0F0A0608BEAB021001109003183220000A0D0A0308B90D10C00C18900320000A0E0A05088C0E1001109003183220000A0F0A0508C815100110801918C00C20000A0C0A0308CE0F109003186420000A0E0A0508C8041001109003183220000A0F0A0508BA04100110801918C00C20000A0F0A05088517100110801918C00C20000A0E0A0508B8131001109003183220000A0F0A060888AF02100110A006186420000A0B0A0308FA0F1064181420000A0B0A0308ED131064181420000A0B0A0308D1141028180520000A0F0A05088D14100110C00C18900320000A0E0A04088AB00210C00C18900320000A0F0A05089F02100110C00C18900320000A0C0A0308D301109003186420000A0C0A0308C20E109003186420000A0C0A03088614109003186420000A0F0A0508D90F100110C00C18900320000A0E0A0508F50D1001109003183220000A0B0A0308DE051064181420000A0D0A040892AC02109003186420000A0F0A0508F213100110801918C00C20000A0B0A0308E60F1028180520000A0C0A040881B0021028180520000A0F0A0508D611100110801918C00C20000A100A060887AB02100110C00C18900320000A0B0A0308D60A1064181420000A0C0A040882B0021028180520000A0E0A05088D08100110A006186420000A0B0A0308DA041028180520000A0C0A0308D80A109003186420000A0F0A05088C14100110C00C18900320000A0D0A0308A51510C00C18900320000A0F0A0508DE16100110C00C18900320000A0B0A0308F00F1028180520000A0B0A0308AB021028180520000A0C0A03088914109003186420000A0E0A050880101001109003183220000A0B0A0308870F1028180520000A0D0A0408A2AC02109003186420000A0F0A0508ED05100110801918C00C20000A0E0A050897151001109003183220000A0D0A0308A31410C00C18900320000A0B0A0308EB111028180520000A0F0A05088616100110C00C18900320000A0B0A0308BF131028180520000A0F0A0508FA14100110801918C00C20000A0F0A0608F9B0021001109003183220000A100A0608CFB102100110801918C00C20000A0B0A0308B9171064181420000A0D0A0308850E10C00C18900320000A0B0A03088C0F1028180520000A0E0A05089668100110A006186420000A0F0A0508820E100110801918C00C20000A0F0A0608FEAC021001109003183220000A0E0A050891141001109003183220000A0E0A0508F70D1001109003183220000A0F0A0508910F100110C00C18900320000A0B0A03088B101064181420000A0E0A0508B917100110A006186420000A0D0A0308A71010C00C18900320000A0B0A0308DD0A1028180520000A0F0A05089810100110C00C18900320000A0E0A0508F6081001109003183220000A0B0A0308D40F1064181420000A0E0A0508E2071001109003183220000A0E0A0508B313100110A006186420000A0B0A030885101028180520000A0E0A0408C2AE0210C00C18900320000A0D0A0308BD1410C00C18900320000A0E0A0508D508100110A006186420000A0F0A0508840E100110801918C00C20000A0E0A05088C021001109003183220000A0E0A0508DD08100110A006186420000A0E0A05088A0E1001109003183220000A0B0A0308D50F1028180520000A0E0A0508FE071001109003183220000A0F0A0508D713100110801918C00C20000A0E0A0508ED0F100110A006186420000A0B0A03089E071064181420000A0C0A0408C9B0021028180520000A0E0A0508880E1001109003183220000A0E0A05088F09100110A006186420000A0B0A030893141028180520000A0C0A03089F02109003186420000A0B0A030897681028180520000A0C0A03088C14109003186420000A0F0A0508F808100110801918C00C20000A0B0A0308C80F1064181420000A0C0A0308EC0F109003186420000A100A06088AAE02100110C00C18900320000A0D0A0308C20F10C00C18900320000A0C0A03088F06109003186420000A0B0A0308E8151028180520000A0B0A0308F2111028180520000A0E0A0508EE061001109003183220000A0D0A0308A41010C00C18900320000A0F0A05089304100110C00C18900320000A0B0A0308B8131028180520000A0C0A0408B8AD021028180520000A0D0A0308C81510C00C18900320000A0F0A0508F305100110C00C18900320000A0E0A0508D4051001109003183220000A0F0A0508E80F100110801918C00C20000A0E0A0508EB111001109003183220000A0E0A05088D0F100110A006186420000A0E0A0508E2111001109003183220000A0E0A0508FC10100110A006186420000A0F0A0608BEAE02100110A006186420000A0E0A0508C9161001109003183220000A0E0A05089A041001109003183220000A0D0A0308C91410C00C18900320000A0B0A0308B2081028180520000A0D0A0308DA0610C00C18900320000A0F0A0508C10F100110C00C18900320000A0C0A0408D4AE021064181420000A0F0A0508D013100110C00C18900320000A0E0A05088208100110A006186420000A0B0A0308B3011028180520000A0C0A040886B0021064181420000A0A0A0208451028180520000A0B0A0308EE111028180520000A0D0A0408B0AF02109003186420000A0F0A0508DA0F100110801918C00C20000A0B0A0308D0151064181420000A0B0A0308DC151064181420000A0B0A0308C50E1028180520000A0F0A05089E10100110801918C00C20000A0B0A0308EE011064181420000A0E0A0508E7071001109003183220000A0C0A0308ED16109003186420000A0E0A0508D90D1001109003183220000A0B0A0308C1131028180520000A0C0A0308CB15109003186420000A0B0A0308FB0C1028180520000A0D0A0408451001109003183220000A0C0A03088414109003186420000A0C0A0408F4AF021064181420000A0C0A0408FBAB021064181420000A0E0A0508AD101001109003183220000A0E0A0508CD0F100110A006186420000A0E0A0508B414100110A006186420000A0B0A030896061028180520000A0D0A0308D00210C00C18900320000A0E0A0508E7131001109003183220000A0B0A0308B3031064181420000A0D0A0308A20910C00C18900320000A0B0A0308B7041028180520000A0C0A0408E0B0021064181420000A0D0A0308FA0E10C00C18900320000A0E0A0508AC011001109003183220000A0B0A0308F5161028180520000A0F0A0508EB0F100110C00C18900320000A0C0A0308D80F109003186420000A0F0A0508CD13100110C00C18900320000A0D0A0308D30F10C00C18900320000A0B0A03088C011028180520000A0F0A0508B202100110801918C00C20000A0E0A0508880F1001109003183220000A0B0A030881051028180520000A0B0A0308DB091028180520000A0E0A0508DA041001109003183220000A0D0A0408441001109003183220000A0A0A02081E1028180520000A0E0A05088314100110A006186420000A0D0A0308A01010C00C18900320000A0E0A0508FF051001109003183220000A0E0A0508F607100110A006186420000A0F0A0608DDAE021001109003183220000A0B0A0308D3111064181420000A0E0A0508D70F100110A006186420000A0B0A0308FE0F1028180520000A0B0A0308DE151064181420000A0E0A0508F2051001109003183220000A0D0A03088E0410C00C18900320000A0B0A0308B6131028180520000A0C0A0408E9AB021028180520000A0B0A030881041064181420000A0E0A05089510100110A006186420000A0C0A0408B4AC021028180520000A0B0A0308FC101064181420000A0E0A0508C2161001109003183220000A0F0A0508C70F100110C00C18900320000A0D0A0308E80F10C00C18900320000A0F0A0508CA14100110801918C00C20000A0D0A0408C4AB02109003186420000A0E0A0508BF131001109003183220000A0C0A0408B2AD021028180520000A0B0A030890141064181420000A0F0A05089101100110C00C18900320000A0B0A03088F101064181420000A0E0A05089110100110A006186420000A0F0A05088E04100110801918C00C20000A0F0A0608B9AB02100110A006186420000A0C0A0408F6AE021028180520000A0F0A060887AC021001109003183220000A0E0A0508F5051001109003183220000A0B0A0308D7111064181420000A0B0A0308C6151064181420000A0E0A0508F30C1001109003183220000A0D0A0308A71510C00C18900320000A0E0A0508D20A1001109003183220000A0B0A0308DD0F1064181420000A0E0A0508C913100110A006186420000A0C0A0408F7AB021028180520000A0F0A0608D2AE021001109003183220000A0F0A0608D19102100110A006186420000A0E0A0508C7171001109003183220000A0F0A05088707100110C00C18900320000A0C0A03089304109003186420000A0C0A0408C1AB021028180520000A0F0A05089B14100110C00C18900320000A0D0A0308C20710C00C18900320000A0B0A0308F40F1028180520000A0B0A030884101028180520000A0C0A03088707109003186420000A0F0A0508F508100110C00C18900320000A0C0A04088DAD021028180520000A0F0A0608FAAA02100110A006186420000A0A0A0208221028180520000A0B0A0308F30F1028180520000A0E0A050888141001109003183220000A0F0A0608C1AB021001109003183220000A0C0A03089B14109003186420000A0B0A0308F20B1064181420000A0F0A0508BC15100110801918C00C20000A0C0A0308EB0F109003186420000A0E0A0508E711100110A006186420000A0B0A0308D70F1064181420000A0F0A0508FA06100110801918C00C20000A0E0A0508DD04100110A006186420000A0B0A030896681064181420000A0C0A0308AA06109003186420000A0B0A0308D1131028180520000A0E0A0508C813100110A006186420000A0F0A0508A204100110C00C18900320000A0C0A0408FAAC021028180520000A0B0A030888101064181420000A0D0A0308A51010C00C18900320000A0E0A0508DC021001109003183220000A0E0A050894101001109003183220000A0E0A0508C4161001109003183220000A0F0A0608C9B0021001109003183220000A0F0A060882AD021001109003183220000A0C0A040887AC021028180520000A0C0A03089002109003186420000A0F0A0508920F100110C00C18900320000A0B0A0308FA0D1064181420000A0E0A0508F113100110A006186420000A0B0A0308C0151028180520000A0E0A0508FE0F100110900318322000100522140A0C6D6573736167655F73697A65120418A9AE012A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - - /* Protocol.Header header = Protocol.Header.newBuilder() - .setServiceId(4) - .setMethodId(1) - .setToken(conn.nextToken()) - .setObjectId(0) - .setSize(b.length) - .setStatus(0) - .build();*/ - - // conn.send(new BattleNetPacket(header, b)); } @Override public int getId() { return CARD_VALUES.getValue(); } + + + @Getter + private enum RarityValues { + INVALID(0, 0, 0, 0), + COMMON(40, 5, 400, 50), + FREE(0, 0, 0, 0), + RARE(100, 20, 800, 100), + EPIC(400, 100, 1600, 400), + LEGENDARY(1600, 400, 3200, 1600); + + private final int craft; + private final int sell; + private final int craftGold; + private final int sellGold; + + RarityValues(int craft, int sell, int craftGold, int sellGold) { + this.craft = craft; + this.sell = sell; + this.craftGold = craftGold; + this.sellGold = sellGold; + } + + public static RarityValues fromTagRarity(TagRarity rarity) { + return RarityValues.values()[rarity.ordinal()]; + } + + public static RarityValues fromInt(Integer i) { + return i > 5 ? RarityValues.INVALID : RarityValues.values()[i]; + } + } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java index d8f0fd2..761aeb2 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.stream.Collectors; import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification; +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.COLLECTION; @@ -26,8 +27,6 @@ public class Collection extends GenericParser { @Override public void parseGenericRequest(int token, TcpConnection conn) throws Exception { - // my collection - List l = conn.getUserService().getCollectionOfUser(conn.getUserId()) .stream() .map(p -> Protocol.CardStack.newBuilder() @@ -40,13 +39,11 @@ public class Collection extends GenericParser { .build()) .collect(Collectors.toList()); - log.info("Collection: {}", l); - Protocol.Collection collection = Protocol.Collection.newBuilder() .addAllStacks(l) .build(); - Protocol.Notification n = generateEmptyNotification(207); + Protocol.Notification n = generateNotification(207, collection.toByteString(), collection.getSerializedSize()); Protocol.Header header = Protocol.Header.newBuilder() .setServiceId(4) diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagCardSet.java b/src/main/java/com/alterdekim/hearthhack/game/TagCardSet.java index eef36f0..cb9af8d 100644 --- a/src/main/java/com/alterdekim/hearthhack/game/TagCardSet.java +++ b/src/main/java/com/alterdekim/hearthhack/game/TagCardSet.java @@ -1,51 +1,27 @@ package com.alterdekim.hearthhack.game; public enum TagCardSet { - // Token: 0x04000B64 RID: 2916 INVALID, - // Token: 0x04000B65 RID: 2917 TEST_TEMPORARY, - // Token: 0x04000B66 RID: 2918 CORE, - // Token: 0x04000B67 RID: 2919 EXPERT1, - // Token: 0x04000B68 RID: 2920 REWARD, - // Token: 0x04000B69 RID: 2921 MISSIONS, - // Token: 0x04000B6A RID: 2922 DEMO, - // Token: 0x04000B6B RID: 2923 NONE, - // Token: 0x04000B6C RID: 2924 CHEAT, - // Token: 0x04000B6D RID: 2925 BLANK, - // Token: 0x04000B6E RID: 2926 DEBUG_SP, - // Token: 0x04000B6F RID: 2927 PROMO, - // Token: 0x04000B70 RID: 2928 FP1, - // Token: 0x04000B71 RID: 2929 PE1, - // Token: 0x04000B72 RID: 2930 BRM, - // Token: 0x04000B73 RID: 2931 TGT, - // Token: 0x04000B74 RID: 2932 CREDITS, - // Token: 0x04000B75 RID: 2933 HERO_SKINS, - // Token: 0x04000B76 RID: 2934 TB, - // Token: 0x04000B77 RID: 2935 SLUSH, - // Token: 0x04000B78 RID: 2936 LOE, - // Token: 0x04000B79 RID: 2937 OG, - // Token: 0x04000B7A RID: 2938 OG_RESERVE -} - +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagCardType.java b/src/main/java/com/alterdekim/hearthhack/game/TagCardType.java new file mode 100644 index 0000000..cdbfc14 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagCardType.java @@ -0,0 +1,15 @@ +package com.alterdekim.hearthhack.game; + +public enum TagCardType { + INVALID, + GAME, + PLAYER, + HERO, + MINION, + SPELL, + ENCHANTMENT, + WEAPON, + ITEM, + TOKEN, + HERO_POWER +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagClass.java b/src/main/java/com/alterdekim/hearthhack/game/TagClass.java new file mode 100644 index 0000000..d284d06 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagClass.java @@ -0,0 +1,16 @@ +package com.alterdekim.hearthhack.game; + +public enum TagClass { + INVALID, + DEATHKNIGHT, + DRUID, + HUNTER, + MAGE, + PALADIN, + PRIEST, + ROGUE, + SHAMAN, + WARLOCK, + WARRIOR, + DREAM +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagEnchantmentVisual.java b/src/main/java/com/alterdekim/hearthhack/game/TagEnchantmentVisual.java new file mode 100644 index 0000000..484e742 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagEnchantmentVisual.java @@ -0,0 +1,8 @@ +package com.alterdekim.hearthhack.game; + +public enum TagEnchantmentVisual { + INVALID, + POSITIVE, + NEGATIVE, + NEUTRAL +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagFaction.java b/src/main/java/com/alterdekim/hearthhack/game/TagFaction.java new file mode 100644 index 0000000..6fa30dc --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagFaction.java @@ -0,0 +1,8 @@ +package com.alterdekim.hearthhack.game; + +public enum TagFaction { + INVALID, + HORDE, + ALLIANCE, + NEUTRAL +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagGoldRewardState.java b/src/main/java/com/alterdekim/hearthhack/game/TagGoldRewardState.java new file mode 100644 index 0000000..f16b69f --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagGoldRewardState.java @@ -0,0 +1,11 @@ +package com.alterdekim.hearthhack.game; + +public enum TagGoldRewardState { + INVALID, + ELIGIBLE, + WRONG_GAME_TYPE, + ALREADY_CAPPED, + BAD_RATING, + SHORT_GAME, + OVER_CAIS +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagMulligan.java b/src/main/java/com/alterdekim/hearthhack/game/TagMulligan.java new file mode 100644 index 0000000..ef28b3f --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagMulligan.java @@ -0,0 +1,9 @@ +package com.alterdekim.hearthhack.game; + +public enum TagMulligan { + INVALID, + INPUT, + DEALING, + WAITING, + DONE +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagPlayState.java b/src/main/java/com/alterdekim/hearthhack/game/TagPlayState.java new file mode 100644 index 0000000..776b435 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagPlayState.java @@ -0,0 +1,13 @@ +package com.alterdekim.hearthhack.game; + +public enum TagPlayState { + INVALID, + PLAYING, + WINNING, + LOSING, + WON, + LOST, + TIED, + DISCONNECTED, + CONCEDED +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagPremium.java b/src/main/java/com/alterdekim/hearthhack/game/TagPremium.java new file mode 100644 index 0000000..41f4e78 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagPremium.java @@ -0,0 +1,6 @@ +package com.alterdekim.hearthhack.game; + +public enum TagPremium { + NORMAL, + GOLDEN +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagRace.java b/src/main/java/com/alterdekim/hearthhack/game/TagRace.java new file mode 100644 index 0000000..4230fac --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagRace.java @@ -0,0 +1,29 @@ +package com.alterdekim.hearthhack.game; + +public enum TagRace { + INVALID, + BLOODELF, + DRAENEI, + DWARF, + GNOME, + GOBLIN, + HUMAN, + NIGHTELF, + ORC, + TAUREN, + TROLL, + UNDEAD, + WORGEN, + GOBLIN2, + MURLOC, + DEMON, + SCOURGE, + MECHANICAL, + ELEMENTAL, + OGRE, + PET, + TOTEM, + NERUBIAN, + PIRATE, + DRAGON +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagRarity.java b/src/main/java/com/alterdekim/hearthhack/game/TagRarity.java new file mode 100644 index 0000000..038b597 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagRarity.java @@ -0,0 +1,10 @@ +package com.alterdekim.hearthhack.game; + +public enum TagRarity { + INVALID, + COMMON, + FREE, + RARE, + EPIC, + LEGENDARY +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagState.java b/src/main/java/com/alterdekim/hearthhack/game/TagState.java new file mode 100644 index 0000000..604a247 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagState.java @@ -0,0 +1,8 @@ +package com.alterdekim.hearthhack.game; + +public enum TagState { + INVALID, + LOADING, + RUNNING, + COMPLETE +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagStep.java b/src/main/java/com/alterdekim/hearthhack/game/TagStep.java new file mode 100644 index 0000000..1b0e85c --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagStep.java @@ -0,0 +1,22 @@ +package com.alterdekim.hearthhack.game; + +public enum TagStep { + INVALID, + BEGIN_FIRST, + BEGIN_SHUFFLE, + BEGIN_DRAW, + BEGIN_MULLIGAN, + MAIN_BEGIN, + MAIN_READY, + MAIN_RESOURCE, + MAIN_DRAW, + MAIN_START, + MAIN_ACTION, + MAIN_COMBAT, + MAIN_END, + MAIN_NEXT, + FINAL_WRAPUP, + FINAL_GAMEOVER, + MAIN_CLEANUP, + MAIN_START_TRIGGERS +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagType.java b/src/main/java/com/alterdekim/hearthhack/game/TagType.java new file mode 100644 index 0000000..bf0fb5d --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagType.java @@ -0,0 +1,13 @@ +package com.alterdekim.hearthhack.game; + +public enum TagType { + UNKNOWN, + BOOL, + NUMBER, + COUNTER, + ENTITY, + PLAYER, + TEAM, + ENTITY_DEFINITION, + STRING +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/game/TagZone.java b/src/main/java/com/alterdekim/hearthhack/game/TagZone.java new file mode 100644 index 0000000..104e183 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/game/TagZone.java @@ -0,0 +1,12 @@ +package com.alterdekim.hearthhack.game; + +public enum TagZone { + INVALID, + PLAY, + DECK, + HAND, + GRAVEYARD, + REMOVEDFROMGAME, + SETASIDE, + SECRET +} \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/repository/UserCardRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/UserCardRepository.java index aa2c57f..4c28873 100644 --- a/src/main/java/com/alterdekim/hearthhack/repository/UserCardRepository.java +++ b/src/main/java/com/alterdekim/hearthhack/repository/UserCardRepository.java @@ -4,9 +4,11 @@ import com.alterdekim.hearthhack.dto.UserCardDTO; import com.alterdekim.hearthhack.entity.User; import com.alterdekim.hearthhack.entity.UserCard; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -15,4 +17,14 @@ public interface UserCardRepository extends JpaRepository { @Query(nativeQuery = true) List getCollectionOfUser(@Param("userId") Long userId); + + @Modifying + @Transactional + @Query(value = "UPDATE UserCard u SET u.hasSeen = :hasSeen WHERE u.userId = :userId AND u.assetId = :assetId AND u.isPremium = :isPremium") + void updateSeenByUserIdAndCard(@Param("userId") Long userId, @Param("assetId") Long assetId, @Param("isPremium") Boolean isPremium, @Param("hasSeen") Boolean hasSeen); + + @Modifying + @Transactional + @Query(value = "DELETE FROM UserCard u WHERE u.id IN (SELECT MAX(b.id) FROM UserCard b WHERE b.userId = :userId AND b.assetId = :assetId AND b.isPremium = :isPremium)") + void remove(@Param("userId") Long userId, @Param("assetId") Long assetId, @Param("isPremium") Boolean isPremium); } diff --git a/src/main/java/com/alterdekim/hearthhack/repository/UserRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/UserRepository.java index 751654e..bbcbd03 100644 --- a/src/main/java/com/alterdekim/hearthhack/repository/UserRepository.java +++ b/src/main/java/com/alterdekim/hearthhack/repository/UserRepository.java @@ -22,4 +22,9 @@ public interface UserRepository extends JpaRepository { @Modifying @Query(value = "UPDATE User u SET u.goldBalance = :goldCount WHERE u.id = :userId") void updateGoldOfUser(@Param("userId") Long userId, @Param("goldCount") Integer goldCount); + + @Transactional + @Modifying + @Query(value = "UPDATE User u SET u.dustBalance = :dustCount WHERE u.id = :userId") + void updateDustOfUser(@Param("userId") Long userId, @Param("dustCount") Integer dustCount); } \ No newline at end of file diff --git a/src/main/java/com/alterdekim/hearthhack/service/UserService.java b/src/main/java/com/alterdekim/hearthhack/service/UserService.java index c943577..57b0025 100644 --- a/src/main/java/com/alterdekim/hearthhack/service/UserService.java +++ b/src/main/java/com/alterdekim/hearthhack/service/UserService.java @@ -76,6 +76,10 @@ public class UserService implements IService { userRepository.updateGoldOfUser(userId, gold); } + public void setDustForUserId(Long userId, Integer dust) { + userRepository.updateDustOfUser(userId, dust); + } + public Integer getDustForUserId(Long userId) { return userRepository.findById(userId).get().getDustBalance(); } @@ -98,10 +102,18 @@ public class UserService implements IService { this.userCardRepository.save(new UserCard(userId, assetId, isPremium, hasSeen)); } + public void removeCardToCollection(Long userId, Long assetId, Boolean isPremium) { + this.userCardRepository.remove(userId, assetId, isPremium); + } + public List getCollectionOfUser(Long userId) { return this.userCardRepository.getCollectionOfUser(userId); } + public void updateCardSeenCollection(Long userId, Long assetId, Boolean isPremium, Boolean hasSeen) { + this.userCardRepository.updateSeenByUserIdAndCard(userId, assetId, isPremium, hasSeen); + } + public List findAllUsers() { List users = userRepository.findAll(); return users.stream().map(this::convertEntityToDto) diff --git a/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java b/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java index d916d29..c860846 100644 --- a/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java +++ b/src/main/java/com/alterdekim/hearthhack/xml/CardsXML.java @@ -18,27 +18,4 @@ public class CardsXML { @JsonProperty("Entity") @JacksonXmlElementWrapper(useWrapping = false) private List entities; - - - public Optional findEntityByCardId(String cardId) { - return this.entities.stream().filter(p -> p.getCardId().equals(cardId)).findFirst(); - } - - public List findEntitiesByTagVal(GameTag tag, Integer val) { - return this.entities.stream() - .filter(p -> p.getTags() - .stream() - .anyMatch(f -> f.getEnumID().intValue() == tag.getValue().intValue() && f.getValue().intValue() == val.intValue()) - ) - .collect(Collectors.toList()); - } - - public List findEntitiesByTagVal(GameTag tag, String val) { - return this.entities.stream() - .filter(p -> p.getTags() - .stream() - .anyMatch(f -> f.getEnumID().intValue() == tag.getValue().intValue() && f.getVal().equals(val)) - ) - .collect(Collectors.toList()); - } } diff --git a/src/main/proto/bnet/protocol/protocol.proto b/src/main/proto/bnet/protocol/protocol.proto index f19a5b2..af3a2cc 100644 --- a/src/main/proto/bnet/protocol/protocol.proto +++ b/src/main/proto/bnet/protocol/protocol.proto @@ -3357,4 +3357,58 @@ message BuySellCard { required bool buying = 3; optional int32 unit_sell_price = 4; optional int32 unit_buy_price = 5; +} + +// ref: PegasusUtil.DeckRenamed +message DeckRenamed { + // ref: PegasusUtil.DeckRenamed/PacketID + enum PacketID { + ID = 219; + } + + required int64 deck = 1; + required string name = 2; +} + +// ref: PegasusUtil.DeckSetData +message DeckSetData { + // ref: PegasusUtil.DeckSetData/PacketID + enum PacketID { + system = 0; + ID = 222; + } + + required int64 deck = 1; + repeated DeckCardData cards = 2; + optional CardDef hero = 3; + optional int32 card_back = 4; + optional bool tagged_standard = 5; +} + +// ref: PegasusUtil.BoughtSoldCard +message BoughtSoldCard { + // ref: PegasusUtil.BoughtSoldCard/PacketID + enum PacketID { + ID = 258; + } + + // ref: PegasusUtil.BoughtSoldCard/Result + enum Result { + GENERIC_FAILURE = 1; + SOLD = 2; + BOUGHT = 3; + SOULBOUND = 4; + WRONG_SELL_PRICE = 5; + WRONG_BUY_PRICE = 6; + NO_PERMISSION = 7; + EVENT_NOT_ACTIVE = 8; + } + + required CardDef def = 1; + required int32 amount = 2; + required Result result = 3; + optional int32 count = 4; + optional bool nerfed = 5; + optional int32 unit_sell_price = 6; + optional int32 unit_buy_price = 7; } \ No newline at end of file