mirror of https://github.com/hykilpikonna/AquaDX
[O] Rewrite roll gacha
parent
5787d32c1a
commit
bcf9af71e2
|
@ -31,32 +31,18 @@ import kotlin.reflect.full.declaredMemberProperties
|
||||||
@API(value = ["/g/chu3/{version}/ChuniServlet", "/g/chu3/{version}"])
|
@API(value = ["/g/chu3/{version}/ChuniServlet", "/g/chu3/{version}"])
|
||||||
class ChusanServletController(
|
class ChusanServletController(
|
||||||
val gameLogin: GameLoginHandler,
|
val gameLogin: GameLoginHandler,
|
||||||
val getUserCharacter: GetUserCharacterHandler,
|
|
||||||
val getUserCourse: GetUserCourseHandler,
|
|
||||||
val getUserFavoriteItem: GetUserFavoriteItemHandler,
|
|
||||||
val getUserItem: GetUserItemHandler,
|
|
||||||
val getUserLoginBonus: GetUserLoginBonusHandler,
|
val getUserLoginBonus: GetUserLoginBonusHandler,
|
||||||
val getUserMapArea: GetUserMapAreaHandler,
|
|
||||||
val getUserMusic: GetUserMusicHandler,
|
val getUserMusic: GetUserMusicHandler,
|
||||||
val getUserPreview: GetUserPreviewHandler,
|
|
||||||
val getUserRecentRating: GetUserRecentRatingHandler,
|
val getUserRecentRating: GetUserRecentRatingHandler,
|
||||||
val getUserTeam: GetUserTeamHandler,
|
val getUserTeam: GetUserTeamHandler,
|
||||||
val upsertUserAll: UpsertUserAllHandler,
|
val upsertUserAll: UpsertUserAllHandler,
|
||||||
val upsertUserChargelog: UpsertUserChargelogHandler,
|
|
||||||
val getUserCardPrintError: GetUserCardPrintErrorHandler,
|
|
||||||
val cmGetUserPreview: CMGetUserPreviewHandler,
|
val cmGetUserPreview: CMGetUserPreviewHandler,
|
||||||
val cmGetUserData: CMGetUserDataHandler,
|
val cmGetUserData: CMGetUserDataHandler,
|
||||||
val cmGetUserCharacter: CMGetUserCharacterHandler,
|
val cmGetUserCharacter: CMGetUserCharacterHandler,
|
||||||
val getUserGacha: GetUserGachaHandler,
|
|
||||||
val cmGetUserItem: CMGetUserItemHandler,
|
val cmGetUserItem: CMGetUserItemHandler,
|
||||||
val rollGacha: RollGachaHandler,
|
|
||||||
val cmUpsertUserGacha: CMUpsertUserGachaHandler,
|
val cmUpsertUserGacha: CMUpsertUserGachaHandler,
|
||||||
val cmUpsertUserPrintSubtract: CMUpsertUserPrintSubtractHandler,
|
val cmUpsertUserPrintSubtract: CMUpsertUserPrintSubtractHandler,
|
||||||
val cmUpsertUserPrintCancel: CMUpsertUserPrintCancelHandler,
|
val cmUpsertUserPrintCancel: CMUpsertUserPrintCancelHandler,
|
||||||
val beginMatching: BeginMatchingHandler,
|
|
||||||
|
|
||||||
// Luminous
|
|
||||||
val getGameMapAreaCondition: GetGameMapAreaConditionHandler,
|
|
||||||
|
|
||||||
val mapper: StringMapper,
|
val mapper: StringMapper,
|
||||||
val db: Chu3Repos,
|
val db: Chu3Repos,
|
||||||
|
@ -168,7 +154,6 @@ fun ChusanServletController.init() {
|
||||||
"CMUpsertUserPrint" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintApi"}""" }
|
"CMUpsertUserPrint" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintApi"}""" }
|
||||||
"CMUpsertUserPrintlog" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintlogApi"}""" }
|
"CMUpsertUserPrintlog" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintlogApi"}""" }
|
||||||
|
|
||||||
// Matching
|
|
||||||
// Matching TODO: Actually implement this
|
// Matching TODO: Actually implement this
|
||||||
"EndMatching" { """{"matchingResult":{"matchingMemberInfoList":[],"matchingMemberRoleList":[],"reflectorUri":""}}""" }
|
"EndMatching" { """{"matchingResult":{"matchingMemberInfoList":[],"matchingMemberRoleList":[],"reflectorUri":""}}""" }
|
||||||
"GetMatchingState" { """{"matchingWaitState":{"restMSec":"30000","pollingInterval":"10","matchingMemberInfoList":[],"isFinish":"true"}}""" }
|
"GetMatchingState" { """{"matchingWaitState":{"restMSec":"30000","pollingInterval":"10","matchingMemberInfoList":[],"isFinish":"true"}}""" }
|
||||||
|
@ -203,6 +188,17 @@ fun ChusanServletController.init() {
|
||||||
mapOf("userId" to uid, "length" to lst.size, "userDuelList" to lst)
|
mapOf("userId" to uid, "length" to lst.size, "userDuelList" to lst)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"GetUserGacha" {
|
||||||
|
val lst = db.userGacha.findByUser_Card_ExtId(uid)
|
||||||
|
mapOf("userId" to uid, "length" to lst.size, "userGachaList" to lst)
|
||||||
|
}
|
||||||
|
|
||||||
|
"RollGacha" {
|
||||||
|
val (gachaId, times) = parsing { data["gachaId"]!!.int to data["times"]!!.int }
|
||||||
|
val lst = db.gameGachaCard.findAllByGachaId(gachaId).shuffled().take(times)
|
||||||
|
mapOf("length" to lst.size, "gameGachaCardList" to lst)
|
||||||
|
}
|
||||||
|
|
||||||
"GetGameGachaCardById" { db.gameGachaCard.findAllByGachaId(parsing { data["gachaId"]!!.int }).let {
|
"GetGameGachaCardById" { db.gameGachaCard.findAllByGachaId(parsing { data["gachaId"]!!.int }).let {
|
||||||
mapOf("gachaId" to it.size, "length" to it.size, "isPickup" to false, "gameGachaCardList" to it,
|
mapOf("gachaId" to it.size, "length" to it.size, "isPickup" to false, "gameGachaCardList" to it,
|
||||||
"emissionList" to empty, "afterCalcList" to empty)
|
"emissionList" to empty, "afterCalcList" to empty)
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
package icu.samnyan.aqua.sega.chusan.handler;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import icu.samnyan.aqua.sega.general.BaseHandler;
|
|
||||||
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
|
|
||||||
import icu.samnyan.aqua.sega.chusan.service.GameGachaCardService;
|
|
||||||
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
|
||||||
*/
|
|
||||||
@Component("ChusanRollGachaHandler")
|
|
||||||
public class RollGachaHandler implements BaseHandler {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(RollGachaHandler.class);
|
|
||||||
private final GameGachaCardService gameGachaCardService;
|
|
||||||
private final BasicMapper mapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public RollGachaHandler(GameGachaCardService gameGachaCardService, BasicMapper mapper) {
|
|
||||||
this.gameGachaCardService = gameGachaCardService;
|
|
||||||
this.mapper = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String handle(Map<String, ?> request) throws JsonProcessingException {
|
|
||||||
int gachaId = ((Number) request.get("gachaId")).intValue();
|
|
||||||
int times = ((Number) request.get("times")).intValue();
|
|
||||||
|
|
||||||
List<GameGachaCard> gameGachaCardList = gameGachaCardService.getRandomCards(gachaId, times);
|
|
||||||
|
|
||||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
|
||||||
resultMap.put("length", gameGachaCardList.size());
|
|
||||||
resultMap.put("gameGachaCardList", gameGachaCardList);
|
|
||||||
|
|
||||||
String json = mapper.write(resultMap);
|
|
||||||
logger.info("Response: " + json);
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
package icu.samnyan.aqua.sega.chusan.model.response;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCharacter;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@AllArgsConstructor
|
|
||||||
@NoArgsConstructor
|
|
||||||
public class GetUserPreviewResp {
|
|
||||||
|
|
||||||
private String userId;
|
|
||||||
@JsonProperty("isLogin")
|
|
||||||
private boolean isLogin;
|
|
||||||
private LocalDateTime lastLoginDate;
|
|
||||||
private String userName;
|
|
||||||
private int reincarnationNum;
|
|
||||||
private int level;
|
|
||||||
private String exp;
|
|
||||||
private int playerRating;
|
|
||||||
private String lastGameId;
|
|
||||||
private String lastRomVersion;
|
|
||||||
private String lastDataVersion;
|
|
||||||
private LocalDateTime lastPlayDate;
|
|
||||||
private int emoneyBrandId;
|
|
||||||
private int trophyId;
|
|
||||||
private UserCharacter userCharacter;
|
|
||||||
private int playerLevel;
|
|
||||||
private int rating;
|
|
||||||
private int headphone;
|
|
||||||
private int chargeState;
|
|
||||||
private String userNameEx;
|
|
||||||
private int banState = 0;
|
|
||||||
private int classEmblemMedal;
|
|
||||||
private int classEmblemBase;
|
|
||||||
private int battleRankId;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
package icu.samnyan.aqua.sega.chusan.service;
|
|
||||||
|
|
||||||
import icu.samnyan.aqua.sega.chusan.model.Chu3GameGachaCardRepo;
|
|
||||||
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
|
||||||
*/
|
|
||||||
@Service("ChusanGameGachaCardService")
|
|
||||||
public class GameGachaCardService {
|
|
||||||
|
|
||||||
private final Chu3GameGachaCardRepo gameGachaCardRepository;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public GameGachaCardService(Chu3GameGachaCardRepo gameGachaCardRepository) {
|
|
||||||
this.gameGachaCardRepository = gameGachaCardRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<GameGachaCard> getRandomCards(int gachaId, int times) {
|
|
||||||
List<GameGachaCard> gachaCards = gameGachaCardRepository.findAllByGachaId(gachaId);
|
|
||||||
List<GameGachaCard> randomCards = new ArrayList<>();
|
|
||||||
|
|
||||||
Random rand = new Random();
|
|
||||||
for (int i = 0; i < Math.min(times, gachaCards.size()); i++) {
|
|
||||||
randomCards.add(gachaCards.remove(rand.nextInt(gachaCards.size())));
|
|
||||||
}
|
|
||||||
|
|
||||||
return randomCards;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -27,6 +27,7 @@ import java.time.format.DateTimeFormatter
|
||||||
class StringMapper {
|
class StringMapper {
|
||||||
fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o)
|
fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o)
|
||||||
fun <T> convert(map: Any?, toClass: Class<T>?) = STRING_MAPPER.convertValue(map, toClass)
|
fun <T> convert(map: Any?, toClass: Class<T>?) = STRING_MAPPER.convertValue(map, toClass)
|
||||||
|
final inline fun <reified T> convert(map: Any?) = convert(map, T::class.java)
|
||||||
fun toMap(obj: Any?) = STRING_MAPPER.convertValue(obj, object : TypeReference<LinkedHashMap<String, Any>>() {})
|
fun toMap(obj: Any?) = STRING_MAPPER.convertValue(obj, object : TypeReference<LinkedHashMap<String, Any>>() {})
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
Loading…
Reference in New Issue