diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CreateDeck.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CreateDeck.java new file mode 100644 index 0000000..b37a50e --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/CreateDeck.java @@ -0,0 +1,57 @@ +package com.alterdekim.hearthhack.component.processor.client.request; + +import com.alterdekim.Protocol; +import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.entity.Deck; +import com.alterdekim.hearthhack.util.BattleNetPacket; +import com.alterdekim.hearthhack.util.ClientRequestBody; +import lombok.extern.slf4j.Slf4j; + +import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + +@Slf4j +public class CreateDeck extends ClientRequestParser { + @Override + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + // DeckCreated 217 + + Protocol.CreateDeck request = Protocol.CreateDeck.parseFrom(body.getBody()); + + Deck d = conn.getUserService().createDeck(conn.getUserId(), request.getName(), request.getHero(), request.getHeroPremium() != 0); + + Protocol.DeckCreated response = Protocol.DeckCreated.newBuilder() + .setInfo(Protocol.DeckInfo.newBuilder() + .setId(d.getId()) + .setName(d.getName()) + .setCardBack(conn.getUserService().getCardBackById(d.getCardBack()).getBackId()) + .setHero(d.getHero()) + .setDeckType(Protocol.DeckType.forNumber(d.getDeckType())) + .setValidity(767L) + .setHeroPremium(d.getHeroPremium() ? 1 : 0) + .setCardBackOverride(d.getCardBackOverride()) + .setHeroOverride(d.getHeroOverride()) + .setLastModified(d.getLastModified()) + .setSortOrder(d.getSortOrder()) + .setSourceType(Protocol.DeckSourceType.forNumber(d.getSourceType())) + .build() + ).build(); + + Protocol.Notification n = generateNotification(217, 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 + public int getId() { + return 209; + } +} 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 3b09ff6..232d16a 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 @@ -6,13 +6,24 @@ import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; import lombok.extern.slf4j.Slf4j; +import java.util.stream.IntStream; + @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); + + data.getCardsList().forEach(c -> { + IntStream.range(0, c.getQty()).forEach(i -> conn.getUserService().addCardToDeck(conn.getUserId(), data.getDeck(), (long) c.getDef().getAsset(), c.getDef().hasPremium() && c.getDef().getPremium() != 0)); + }); + if( data.hasCardBack() ) { + conn.getUserService().updateDeckCardBack(conn.getUserId(), data.getDeck(), data.getCardBack()); + } + if( data.hasHero() ) { + conn.getUserService().updateDeckHero(conn.getUserId(), data.getDeck(), data.getHero().getAsset(), data.getHero().getPremium() != 0); + } } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeleteDeck.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeleteDeck.java new file mode 100644 index 0000000..e192c22 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/DeleteDeck.java @@ -0,0 +1,37 @@ +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 static com.alterdekim.hearthhack.util.GameUtilities.generateNotification; + +public class DeleteDeck extends ClientRequestParser { + @Override + public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { + Protocol.DeleteDeck request = Protocol.DeleteDeck.parseFrom(body.getBody()); + conn.getUserService().deleteDeck(conn.getUserId(), request.getDeck()); + Protocol.DeckDeleted response = Protocol.DeckDeleted.newBuilder() + .setDeck(request.getDeck()) + .build(); + + byte[] b = generateNotification(218, response.toByteString(), response.getSerializedSize()).toByteArray(); + + 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 210; + } +} diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java index ba76a8f..7b2816a 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/GetAchieves.java @@ -24,11 +24,6 @@ public class GetAchieves extends ClientRequestParser { @Override public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception { - //Protocol.GetAchieves getAchieves = Protocol.GetAchieves.parseFrom(body.getBody()); - // Achieves (result) 252 - - // byte[] b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318FC0122A82F0A0C667261676D656E745F30303012972F32942F0A28080210011801200130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28080310011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31080F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A310818100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083E100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A31083F100118FFFFFFFFFFFFFFFFFF01280130013A0D08E00F10041818200928243015420D08E00F100418182009282430150A28084110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A31084F100218FFFFFFFFFFFFFFFFFF01280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A28086110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D80110011801200130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A2908D90110011801280130013A0D08E00F100418182009281E300A420D08E00F100418182009281E300A0A130801100018FFFFFFFFFFFFFFFFFF01280148010A130804100018FFFFFFFFFFFFFFFFFF01280148010A130805100018FFFFFFFFFFFFFFFFFF01280148010A130806100018FFFFFFFFFFFFFFFFFF01280148010A130807100018FFFFFFFFFFFFFFFFFF01280148010A130808100018FFFFFFFFFFFFFFFFFF01280148010A130809100018FFFFFFFFFFFFFFFFFF01280148010A13080A100018FFFFFFFFFFFFFFFFFF01280148010A13080D100018FFFFFFFFFFFFFFFFFF01280148010A13080E100018FFFFFFFFFFFFFFFFFF01280148010A130810100018FFFFFFFFFFFFFFFFFF01280148010A130811100018FFFFFFFFFFFFFFFFFF01280148010A130812100018FFFFFFFFFFFFFFFFFF01280148010A130813100018FFFFFFFFFFFFFFFFFF01280148010A130814100018FFFFFFFFFFFFFFFFFF01280148010A130815100018FFFFFFFFFFFFFFFFFF01280148010A130816100018FFFFFFFFFFFFFFFFFF01280148010A130817100018FFFFFFFFFFFFFFFFFF01280148010A130819100018FFFFFFFFFFFFFFFFFF01280148010A13081A100018FFFFFFFFFFFFFFFFFF01280148010A13081B100018FFFFFFFFFFFFFFFFFF01280148010A13081C100018FFFFFFFFFFFFFFFFFF01280148010A13081D100018FFFFFFFFFFFFFFFFFF01280148010A13081E100018FFFFFFFFFFFFFFFFFF01280148010A130837100018FFFFFFFFFFFFFFFFFF01280148010A130839100018FFFFFFFFFFFFFFFFFF01280148010A13083A100018FFFFFFFFFFFFFFFFFF01280148010A13083B100018FFFFFFFFFFFFFFFFFF01280148010A13083C100018FFFFFFFFFFFFFFFFFF01280148010A13083D100018FFFFFFFFFFFFFFFFFF01280148010A130842100018FFFFFFFFFFFFFFFFFF01280148010A130843100018FFFFFFFFFFFFFFFFFF01280148010A130844100018FFFFFFFFFFFFFFFFFF01280148010A130846100018FFFFFFFFFFFFFFFFFF01280148010A130847100018FFFFFFFFFFFFFFFFFF01280148010A130848100018FFFFFFFFFFFFFFFFFF01280148010A130849100018FFFFFFFFFFFFFFFFFF01280148010A13084A100018FFFFFFFFFFFFFFFFFF01280148010A13084B100018FFFFFFFFFFFFFFFFFF01280148010A13084C100018FFFFFFFFFFFFFFFFFF01280148010A13084D100018FFFFFFFFFFFFFFFFFF01280148010A13084E100018FFFFFFFFFFFFFFFFFF01280148010A130850100018FFFFFFFFFFFFFFFFFF01280148010A130851100018FFFFFFFFFFFFFFFFFF01280148010A130852100018FFFFFFFFFFFFFFFFFF01280148010A130853100018FFFFFFFFFFFFFFFFFF01280148010A130854100018FFFFFFFFFFFFFFFFFF01280148010A130855100018FFFFFFFFFFFFFFFFFF01280148010A130856100018FFFFFFFFFFFFFFFFFF01280148010A130857100018FFFFFFFFFFFFFFFFFF01280148010A130858100018FFFFFFFFFFFFFFFFFF01280148010A130859100018FFFFFFFFFFFFFFFFFF01280148010A13085A100018FFFFFFFFFFFFFFFFFF01280148010A13085B100018FFFFFFFFFFFFFFFFFF01280148010A13085C100018FFFFFFFFFFFFFFFFFF01280148010A13085D100018FFFFFFFFFFFFFFFFFF01280148010A13085E100018FFFFFFFFFFFFFFFFFF01280148010A13085F100018FFFFFFFFFFFFFFFFFF01280148010A130860100018FFFFFFFFFFFFFFFFFF01280148010A130862100018FFFFFFFFFFFFFFFFFF01280148010A130863100018FFFFFFFFFFFFFFFFFF01280148010A130864100018FFFFFFFFFFFFFFFFFF01280148010A130865100018FFFFFFFFFFFFFFFFFF01280148010A130866100018FFFFFFFFFFFFFFFFFF01280148010A130867100018FFFFFFFFFFFFFFFFFF01280148010A130868100018FFFFFFFFFFFFFFFFFF01280148010A130869100018FFFFFFFFFFFFFFFFFF01280148010A13086A100018FFFFFFFFFFFFFFFFFF01280148010A13086B100018FFFFFFFFFFFFFFFFFF01280148010A13086C100018FFFFFFFFFFFFFFFFFF01280148010A13086D100018FFFFFFFFFFFFFFFFFF01280148010A13086E100018FFFFFFFFFFFFFFFFFF01280148010A130870100018FFFFFFFFFFFFFFFFFF01280148010A130871100018FFFFFFFFFFFFFFFFFF01280148010A130872100018FFFFFFFFFFFFFFFFFF01280148010A130873100018FFFFFFFFFFFFFFFFFF01280148010A130874100018FFFFFFFFFFFFFFFFFF01280148010A130875100018FFFFFFFFFFFFFFFFFF01280148010A130876100018FFFFFFFFFFFFFFFFFF01280148010A130877100018FFFFFFFFFFFFFFFFFF01280148010A130878100018FFFFFFFFFFFFFFFFFF01280148010A130879100018FFFFFFFFFFFFFFFFFF01280148010A13087F100018FFFFFFFFFFFFFFFFFF01280148010A14088001100018FFFFFFFFFFFFFFFFFF01280148010A14088101100018FFFFFFFFFFFFFFFFFF01280148010A14088201100018FFFFFFFFFFFFFFFFFF01280148010A14088301100018FFFFFFFFFFFFFFFFFF01280148010A14088401100018FFFFFFFFFFFFFFFFFF01280148010A14088501100018FFFFFFFFFFFFFFFFFF01280148010A14088601100018FFFFFFFFFFFFFFFFFF01280148010A14088701100018FFFFFFFFFFFFFFFFFF01280148010A14088801100018FFFFFFFFFFFFFFFFFF01280148010A14088901100018FFFFFFFFFFFFFFFFFF01280148010A14088A01100018FFFFFFFFFFFFFFFFFF01280148010A14088B01100018FFFFFFFFFFFFFFFFFF01280148010A14088C01100018FFFFFFFFFFFFFFFFFF01280148010A14088D01100018FFFFFFFFFFFFFFFFFF01280148010A14088E01100018FFFFFFFFFFFFFFFFFF01280148010A14088F01100018FFFFFFFFFFFFFFFFFF01280148010A14089001100018FFFFFFFFFFFFFFFFFF01280148010A14089101100018FFFFFFFFFFFFFFFFFF01280148010A14089201100018FFFFFFFFFFFFFFFFFF01280148010A14089301100018FFFFFFFFFFFFFFFFFF01280148010A14089401100018FFFFFFFFFFFFFFFFFF01280148010A14089501100018FFFFFFFFFFFFFFFFFF01280148010A14089601100018FFFFFFFFFFFFFFFFFF01280148010A14089701100018FFFFFFFFFFFFFFFFFF01280148010A14089801100018FFFFFFFFFFFFFFFFFF01280148010A14089901100018FFFFFFFFFFFFFFFFFF01280148010A14089A01100018FFFFFFFFFFFFFFFFFF01280148010A14089B01100018FFFFFFFFFFFFFFFFFF01280148010A14089C01100018FFFFFFFFFFFFFFFFFF01280148010A14089D01100018FFFFFFFFFFFFFFFFFF01280148010A14089E01100018FFFFFFFFFFFFFFFFFF01280148010A14089F01100018FFFFFFFFFFFFFFFFFF01280148010A1408A001100018FFFFFFFFFFFFFFFFFF01280148010A1408A101100018FFFFFFFFFFFFFFFFFF01280148010A1408A201100018FFFFFFFFFFFFFFFFFF01280148010A1408A301100018FFFFFFFFFFFFFFFFFF01280148010A1408A401100018FFFFFFFFFFFFFFFFFF01280148010A1408A501100018FFFFFFFFFFFFFFFFFF01280148010A1408A601100018FFFFFFFFFFFFFFFFFF01280148010A1408A701100018FFFFFFFFFFFFFFFFFF01280148010A1408A801100018FFFFFFFFFFFFFFFFFF01280148010A1408A901100018FFFFFFFFFFFFFFFFFF01280148010A1408AA01100018FFFFFFFFFFFFFFFFFF01280148010A1408AB01100018FFFFFFFFFFFFFFFFFF01280148010A1408AC01100018FFFFFFFFFFFFFFFFFF01280148010A1408AD01100018FFFFFFFFFFFFFFFFFF01280148010A1408AE01100018FFFFFFFFFFFFFFFFFF01280148010A1408AF01100018FFFFFFFFFFFFFFFFFF01280148010A1408B001100018FFFFFFFFFFFFFFFFFF01280148010A1408B101100018FFFFFFFFFFFFFFFFFF01280148010A1408B201100018FFFFFFFFFFFFFFFFFF01280148010A1408B301100018FFFFFFFFFFFFFFFFFF01280148010A1408B401100018FFFFFFFFFFFFFFFFFF01280148010A1408B501100018FFFFFFFFFFFFFFFFFF01280148010A1408B601100018FFFFFFFFFFFFFFFFFF01280148010A1408B701100018FFFFFFFFFFFFFFFFFF01280148010A1408B801100018FFFFFFFFFFFFFFFFFF01280148010A1408B901100018FFFFFFFFFFFFFFFFFF01280148010A1408BA01100018FFFFFFFFFFFFFFFFFF01280148010A1408BB01100018FFFFFFFFFFFFFFFFFF01280148010A1408BC01100018FFFFFFFFFFFFFFFFFF01280148010A1408BD01100018FFFFFFFFFFFFFFFFFF01280148010A1408BE01100018FFFFFFFFFFFFFFFFFF01280148010A1408BF01100018FFFFFFFFFFFFFFFFFF01280148010A1408C001100018FFFFFFFFFFFFFFFFFF01280148010A1408C101100018FFFFFFFFFFFFFFFFFF01280148010A1408C201100018FFFFFFFFFFFFFFFFFF01280148010A1408C301100018FFFFFFFFFFFFFFFFFF01280148010A1408C401100018FFFFFFFFFFFFFFFFFF01280148010A1408C501100018FFFFFFFFFFFFFFFFFF01280148010A1408C601100018FFFFFFFFFFFFFFFFFF01280148010A1408C701100018FFFFFFFFFFFFFFFFFF01280148010A1408C801100018FFFFFFFFFFFFFFFFFF01280148010A1408C901100018FFFFFFFFFFFFFFFFFF01280148010A1408CA01100018FFFFFFFFFFFFFFFFFF01280148010A1408CB01100018FFFFFFFFFFFFFFFFFF01280148010A1408CD01100018FFFFFFFFFFFFFFFFFF01280148010A1408CE01100018FFFFFFFFFFFFFFFFFF01280148010A1408CF01100018FFFFFFFFFFFFFFFFFF01280148010A1408D001100018FFFFFFFFFFFFFFFFFF01280148010A1408D101100018FFFFFFFFFFFFFFFFFF01280148010A1408D201100018FFFFFFFFFFFFFFFFFF01280148010A1408D301100018FFFFFFFFFFFFFFFFFF01280148010A1408D401100018FFFFFFFFFFFFFFFFFF01280148010A1408D501100018FFFFFFFFFFFFFFFFFF01280148010A1408D701100018FFFFFFFFFFFFFFFFFF01280148010A1408DA01100018FFFFFFFFFFFFFFFFFF01280148010A1408DC01100018FFFFFFFFFFFFFFFFFF01280148010A1408DD01100018FFFFFFFFFFFFFFFFFF01280148010A1408E801100018FFFFFFFFFFFFFFFFFF01280148010A1408E901100018FFFFFFFFFFFFFFFFFF01280148010A1408EA01100018FFFFFFFFFFFFFFFFFF01280148010A1408EB01100018FFFFFFFFFFFFFFFFFF01280148010A1408EC01100018FFFFFFFFFFFFFFFFFF01280148010A1408ED01100018FFFFFFFFFFFFFFFFFF01280148010A1408EE01100018FFFFFFFFFFFFFFFFFF01280148010A1408EF01100018FFFFFFFFFFFFFFFFFF01280148010A14088402100018FFFFFFFFFFFFFFFFFF01280148010A14088502100018FFFFFFFFFFFFFFFFFF01280148010A14088602100018FFFFFFFFFFFFFFFFFF01280148010A14088702100018FFFFFFFFFFFFFFFFFF01280148010A14088802100018FFFFFFFFFFFFFFFFFF01280148010A14088902100018FFFFFFFFFFFFFFFFFF01280148010A14088A02100018FFFFFFFFFFFFFFFFFF01280148010A14088B02100018FFFFFFFFFFFFFFFFFF01280148010A14088C02100018FFFFFFFFFFFFFFFFFF01280148010A14088D02100018FFFFFFFFFFFFFFFFFF01280148010A14088E02100018FFFFFFFFFFFFFFFFFF01280148010A14088F02100018FFFFFFFFFFFFFFFFFF01280148010A14089002100018FFFFFFFFFFFFFFFFFF01280148010A14089102100018FFFFFFFFFFFFFFFFFF01280148010A14089202100018FFFFFFFFFFFFFFFFFF01280148010A14089302100018FFFFFFFFFFFFFFFFFF01280148010A14089402100018FFFFFFFFFFFFFFFFFF01280148010A14089502100018FFFFFFFFFFFFFFFFFF01280148010A14089602100018FFFFFFFFFFFFFFFFFF01280148010A14089702100018FFFFFFFFFFFFFFFFFF01280148010A14089802100018FFFFFFFFFFFFFFFFFF01280148010A14089902100018FFFFFFFFFFFFFFFFFF01280148010A14089A02100018FFFFFFFFFFFFFFFFFF01280148010A14089B02100018FFFFFFFFFFFFFFFFFF01280148010A14089C02100018FFFFFFFFFFFFFFFFFF01280148010A1408A102100018FFFFFFFFFFFFFFFFFF01280148010A1408A202100018FFFFFFFFFFFFFFFFFF01280148010A1408A302100018FFFFFFFFFFFFFFFFFF01280148010A1408A402100018FFFFFFFFFFFFFFFFFF01280148010A1408A502100018FFFFFFFFFFFFFFFFFF01280148010A1408A602100018FFFFFFFFFFFFFFFFFF01280148010A1408A702100018FFFFFFFFFFFFFFFFFF01280148010A1408A802100018FFFFFFFFFFFFFFFFFF01280148010A1408A902100018FFFFFFFFFFFFFFFFFF01280148010A1408AA02100018FFFFFFFFFFFFFFFFFF01280148010A1408AB02100018FFFFFFFFFFFFFFFFFF01280148010A1408AC02100018FFFFFFFFFFFFFFFFFF01280148010A1408AD02100018FFFFFFFFFFFFFFFFFF01280148010A1408AE02100018FFFFFFFFFFFFFFFFFF01280148010A1408AF02100018FFFFFFFFFFFFFFFFFF01280148010A1408B002100018FFFFFFFFFFFFFFFFFF01280148010A1408B102100018FFFFFFFFFFFFFFFFFF01280148010A1408B202100018FFFFFFFFFFFFFFFFFF01280148010A1408B302100018FFFFFFFFFFFFFFFFFF01280148010A1408B402100018FFFFFFFFFFFFFFFFFF01280148010A1408B502100018FFFFFFFFFFFFFFFFFF01280148010A1408B602100018FFFFFFFFFFFFFFFFFF01280148010A1408B702100018FFFFFFFFFFFFFFFFFF01280148010A1408B802100018FFFFFFFFFFFFFFFFFF01280148010A1408B902100018FFFFFFFFFFFFFFFFFF01280148010A1408BA02100018FFFFFFFFFFFFFFFFFF01280148010A1408BB02100018FFFFFFFFFFFFFFFFFF01280148010A1408BC02100018FFFFFFFFFFFFFFFFFF01280148010A1408BD02100018FFFFFFFFFFFFFFFFFF01280148010A1408BE02100018FFFFFFFFFFFFFFFFFF01280148010A1408BF02100018FFFFFFFFFFFFFFFFFF01280148010A1408C002100018FFFFFFFFFFFFFFFFFF01280148010A1408C102100018FFFFFFFFFFFFFFFFFF01280148010A1408C202100018FFFFFFFFFFFFFFFFFF01280148010A1408C302100018FFFFFFFFFFFFFFFFFF01280148010A1408C402100018FFFFFFFFFFFFFFFFFF01280148010A1408C502100018FFFFFFFFFFFFFFFFFF01280148010A1408C602100018FFFFFFFFFFFFFFFFFF01280148010A1408C702100018FFFFFFFFFFFFFFFFFF01280148010A1408C802100018FFFFFFFFFFFFFFFFFF01280148010A1408C902100018FFFFFFFFFFFFFFFFFF01280148010A1408CA02100018FFFFFFFFFFFFFFFFFF01280148010A1408CB02100018FFFFFFFFFFFFFFFFFF01280148010A1408CC02100018FFFFFFFFFFFFFFFFFF01280148010A1408CD02100018FFFFFFFFFFFFFFFFFF01280148010A1408CE02100018FFFFFFFFFFFFFFFFFF01280148010A1408CF02100018FFFFFFFFFFFFFFFFFF01280148010A1408D002100018FFFFFFFFFFFFFFFFFF01280148010A1408D102100018FFFFFFFFFFFFFFFFFF01280148010A1408D202100018FFFFFFFFFFFFFFFFFF012801480122130A0C6D6573736167655F73697A65120318942F2A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802"); - // 1..9 Protocol.Achieves.Builder achieves = Protocol.Achieves.newBuilder(); IntStream.range(1, 100).filter(i -> i != 79).forEach(i -> achieves.addList(Protocol.Achieve.newBuilder() diff --git a/src/main/java/com/alterdekim/hearthhack/repository/DeckContentRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/DeckContentRepository.java index 3221842..1e44c78 100644 --- a/src/main/java/com/alterdekim/hearthhack/repository/DeckContentRepository.java +++ b/src/main/java/com/alterdekim/hearthhack/repository/DeckContentRepository.java @@ -3,8 +3,10 @@ package com.alterdekim.hearthhack.repository; import com.alterdekim.hearthhack.entity.Deck; import com.alterdekim.hearthhack.entity.DeckContent; 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.transaction.annotation.Transactional; import java.util.List; @@ -12,4 +14,9 @@ public interface DeckContentRepository extends JpaRepository @Query(value = "SELECT new DeckContent(d.id, d.userId, d.deckId, d.assetId, d.isPremium) FROM DeckContent d WHERE d.userId = :userId AND d.deckId = :deckId") List findCardsByDeckId(@Param("userId") Long userId, @Param("deckId") Long deckId); + + @Transactional + @Modifying + @Query(value = "DELETE FROM DeckContent d WHERE d.userId = :userId AND d.deckId = :deckId") + void clearDeck(@Param("userId") Long userId, @Param("deckId") Long deckId); } diff --git a/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java index 27d8d7c..deec844 100644 --- a/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java +++ b/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java @@ -21,4 +21,20 @@ public interface DeckRepository extends JpaRepository { @Transactional @Modifying void updateDeckName(@Param("userId") Long userId, @Param("deckId") Long deckId, @Param("deckName") String name); + + + @Transactional + @Modifying + @Query(value = "UPDATE Deck d SET d.cardBack = :cardBack WHERE d.userId = :userId AND d.id = :deckId") + void updateDeckCardBack(@Param("userId") Long userId, @Param("deckId") Long deckId, @Param("cardBack") Integer cardBack); + + @Transactional + @Modifying + @Query(value = "UPDATE Deck d SET d.heroPremium = :isPremium, d.hero = :heroId WHERE d.userId = :userId AND d.id = :deckId") + void updateDeckHero(@Param("userId") Long userId, @Param("deckId") Long deckId, @Param("heroId") Integer heroId, @Param("isPremium") Boolean isPremium); + + @Transactional + @Modifying + @Query(value = "DELETE FROM Deck d WHERE d.id = :deckId AND d.userId = :userId") + void deleteDeck(@Param("userId") Long userId, @Param("deckId") Long deckId); } diff --git a/src/main/java/com/alterdekim/hearthhack/service/UserService.java b/src/main/java/com/alterdekim/hearthhack/service/UserService.java index 9f1bdcf..0884b20 100644 --- a/src/main/java/com/alterdekim/hearthhack/service/UserService.java +++ b/src/main/java/com/alterdekim/hearthhack/service/UserService.java @@ -50,14 +50,39 @@ public class UserService implements IService { deckContentRepository.save(new DeckContent(user.getId(), d.getId(), 670L, false)); } + public Deck createDeck(Long userId, String name, Integer hero, Boolean isPremium) { + return deckRepository.save(new Deck(userId, name, 0L, hero, Protocol.DeckType.NORMAL_DECK.getNumber(), isPremium, false, false, System.currentTimeMillis(), 1461490210L, Protocol.DeckSourceType.DECK_SOURCE_TYPE_NORMAL_VALUE)); + } + public void updateDeckName(Long userId, Long deckId, String name) { deckRepository.updateDeckName(userId, deckId, name); } + public void updateDeckHero(Long userId, Long deckId, Integer heroId, Boolean isPremium) { + deckRepository.updateDeckHero(userId, deckId, heroId, isPremium); + } + + public void updateDeckCardBack(Long userId, Long deckId, Integer cardBack) { + deckRepository.updateDeckCardBack(userId, deckId, cardBack); + } + + public void clearDeckData(Long userId, Long deckId) { + deckContentRepository.clearDeck(userId, deckId); + } + + public void addCardToDeck(Long userId, Long deckId, Long assetId, Boolean isPremium) { + deckContentRepository.save(new DeckContent(userId, deckId, assetId, isPremium)); + } + public List getDecksForUser(Long userId) { return deckRepository.findDecksByUserId(userId); } + public void deleteDeck(Long userId, Long deckId) { + deckContentRepository.clearDeck(userId, deckId); + deckRepository.deleteDeck(userId, deckId); + } + public List getDeckContentForDeckId(Long userId, Long deckId) { return deckContentRepository.findCardsByDeckId(userId, deckId); } diff --git a/src/main/proto/bnet/protocol/protocol.proto b/src/main/proto/bnet/protocol/protocol.proto index cdf0934..d15a071 100644 --- a/src/main/proto/bnet/protocol/protocol.proto +++ b/src/main/proto/bnet/protocol/protocol.proto @@ -3409,6 +3409,52 @@ message DeckSetData { optional bool tagged_standard = 5; } +// ref: PegasusUtil.DeleteDeck +message DeleteDeck { + // ref: PegasusUtil.DeleteDeck/PacketID + enum PacketID { + system = 0; + ID = 210; + } + + required int64 deck = 1; +} + +// ref: PegasusUtil.DeckDeleted +message DeckDeleted { + // ref: PegasusUtil.DeckDeleted/PacketID + enum PacketID { + ID = 218; + } + + required int64 deck = 1; +} + +// ref: PegasusUtil.CreateDeck +message CreateDeck { + // ref: PegasusUtil.CreateDeck/PacketID + enum PacketID { + system = 0; + ID = 209; + } + + required string name = 1; + required int32 hero = 2; + required int32 hero_premium = 3; + required DeckType deck_type = 4; + optional bool tagged_standard = 5; +} + +// ref: PegasusUtil.DeckCreated +message DeckCreated { + // ref: PegasusUtil.DeckCreated/PacketID + enum PacketID { + ID = 217; + } + + required DeckInfo info = 1; +} + // ref: PegasusUtil.BoughtSoldCard message BoughtSoldCard { // ref: PegasusUtil.BoughtSoldCard/PacketID