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}"])
|
||||
class ChusanServletController(
|
||||
val gameLogin: GameLoginHandler,
|
||||
val getUserCharacter: GetUserCharacterHandler,
|
||||
val getUserCourse: GetUserCourseHandler,
|
||||
val getUserFavoriteItem: GetUserFavoriteItemHandler,
|
||||
val getUserItem: GetUserItemHandler,
|
||||
val getUserLoginBonus: GetUserLoginBonusHandler,
|
||||
val getUserMapArea: GetUserMapAreaHandler,
|
||||
val getUserMusic: GetUserMusicHandler,
|
||||
val getUserPreview: GetUserPreviewHandler,
|
||||
val getUserRecentRating: GetUserRecentRatingHandler,
|
||||
val getUserTeam: GetUserTeamHandler,
|
||||
val upsertUserAll: UpsertUserAllHandler,
|
||||
val upsertUserChargelog: UpsertUserChargelogHandler,
|
||||
val getUserCardPrintError: GetUserCardPrintErrorHandler,
|
||||
val cmGetUserPreview: CMGetUserPreviewHandler,
|
||||
val cmGetUserData: CMGetUserDataHandler,
|
||||
val cmGetUserCharacter: CMGetUserCharacterHandler,
|
||||
val getUserGacha: GetUserGachaHandler,
|
||||
val cmGetUserItem: CMGetUserItemHandler,
|
||||
val rollGacha: RollGachaHandler,
|
||||
val cmUpsertUserGacha: CMUpsertUserGachaHandler,
|
||||
val cmUpsertUserPrintSubtract: CMUpsertUserPrintSubtractHandler,
|
||||
val cmUpsertUserPrintCancel: CMUpsertUserPrintCancelHandler,
|
||||
val beginMatching: BeginMatchingHandler,
|
||||
|
||||
// Luminous
|
||||
val getGameMapAreaCondition: GetGameMapAreaConditionHandler,
|
||||
|
||||
val mapper: StringMapper,
|
||||
val db: Chu3Repos,
|
||||
|
@ -168,7 +154,6 @@ fun ChusanServletController.init() {
|
|||
"CMUpsertUserPrint" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintApi"}""" }
|
||||
"CMUpsertUserPrintlog" { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678","apiName":"CMUpsertUserPrintlogApi"}""" }
|
||||
|
||||
// Matching
|
||||
// Matching TODO: Actually implement this
|
||||
"EndMatching" { """{"matchingResult":{"matchingMemberInfoList":[],"matchingMemberRoleList":[],"reflectorUri":""}}""" }
|
||||
"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)
|
||||
}
|
||||
|
||||
"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 {
|
||||
mapOf("gachaId" to it.size, "length" to it.size, "isPickup" to false, "gameGachaCardList" to it,
|
||||
"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 {
|
||||
fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o)
|
||||
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>>() {})
|
||||
|
||||
companion object {
|
||||
|
|
Loading…
Reference in New Issue