[cardmaker] Add experimental chusan gacha support

pull/1/head
Dom Eori 2022-07-27 22:41:22 +09:00
parent 563d91d438
commit a034ba2c88
46 changed files with 2244 additions and 3 deletions

View File

@ -163,6 +163,8 @@ public class AllNetController {
}
case "SDHD":
return "http://" + addr + ":" + port + "/ChusanServlet/";
case "SDED":
return "http://" + addr + ":" + port + "/CardMakerServlet/";
default:
return "http://" + addr + ":" + port + "/";
}

View File

@ -0,0 +1,56 @@
package icu.samnyan.aqua.sega.cardmaker.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.cardmaker.handler.impl.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@RestController
@RequestMapping("CardMakerServlet")
public class CardMakerController {
private final GetGameSettingHandler getGameSettingHandler;
private final GetClientBookkeepingHandler getClientBookkeepingHandler;
private final GetGameConnectHandler getGameConnectHandler;
@Autowired
public CardMakerController(GetGameSettingHandler getGameSettingHandler, GetClientBookkeepingHandler getClientBookkeepingHandler, GetGameConnectHandler getGameConnectHandler) {
this.getGameSettingHandler = getGameSettingHandler;
this.getClientBookkeepingHandler = getClientBookkeepingHandler;
this.getGameConnectHandler = getGameConnectHandler;
}
@PostMapping("GetGameSettingApi")
public String getGameSetting(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameSettingHandler.handle(request);
}
@PostMapping("GetGameConnectApi")
public String getGameConnect(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameConnectHandler.handle(request);
}
@PostMapping("GetClientBookkeepingApi")
public String getClientBookkeeping(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getClientBookkeepingHandler.handle(request);
}
@PostMapping("UpsertClientBookkeepingApi")
public String upsertClientBookkeeping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1},\"apiName\":\"upsertClientBookkeeping\"";
}
@PostMapping("UpsertClientSettingApi")
public String upsertClientSetting(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1,\"apiName\":\"upsertClientSetting\"}";
}
}

View File

@ -0,0 +1,39 @@
package icu.samnyan.aqua.sega.cardmaker.controller;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@RestControllerAdvice(basePackages = "icu.samnyan.aqua.sega.cardmaker")
public class CardMakerControllerAdvice {
private static final Logger logger = LoggerFactory.getLogger(CardMakerControllerAdvice.class);
/**
* Get the map object from json string
*
* @param request HttpServletRequest
*/
@ModelAttribute
public Map<String, Object> preHandle(HttpServletRequest request) throws IOException {
byte[] src = request.getInputStream().readAllBytes();
String outputString = new String(src, StandardCharsets.UTF_8).trim();
logger.info("Request " + request.getRequestURI() + ": " + outputString);
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(outputString, new TypeReference<>() {
});
}
}

View File

@ -0,0 +1,13 @@
package icu.samnyan.aqua.sega.cardmaker.handler;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
public interface BaseHandler {
String handle(Map<String, Object> request) throws JsonProcessingException;
}

View File

@ -0,0 +1,45 @@
package icu.samnyan.aqua.sega.cardmaker.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.cardmaker.handler.BaseHandler;
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("CardMakerGetClientBookkeepingHandler")
public class GetClientBookkeepingHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetClientBookkeepingHandler.class);
private final BasicMapper mapper;
@Autowired
public GetClientBookkeepingHandler(BasicMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
long placeId = ((Number) request.get("placeId")).longValue();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("placeId", placeId);
resultMap.put("length", 0);
resultMap.put("clientBookkeepingList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,76 @@
package icu.samnyan.aqua.sega.cardmaker.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.cardmaker.handler.BaseHandler;
import icu.samnyan.aqua.sega.cardmaker.model.response.data.GameConnect;
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.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("CardMakerGetGameConnectHandler")
public class GetGameConnectHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameConnectHandler.class);
private final BasicMapper mapper;
private final String ALLNET_HOST;
private final String ALLNET_PORT;
private final String SERVER_PORT;
@Autowired
public GetGameConnectHandler(BasicMapper mapper, @Value("${allnet.server.host:}") String ALLNET_HOST,
@Value("${allnet.server.port:}") String ALLNET_PORT, @Value("${server.port:}") String SERVER_PORT) {
this.mapper = mapper;
this.ALLNET_HOST = ALLNET_HOST;
this.ALLNET_PORT = ALLNET_PORT;
this.SERVER_PORT = SERVER_PORT;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
int type = ((Number) request.get("type")).intValue(); // Allnet enabled or not
long version = ((Number) request.get("version")).longValue(); // Rom version
// Unless ip and port is explicitly overridden, use the guessed ip and port as same as AllNet Controller does.
String localAddr;
try {
localAddr = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// If above didn't work then how did this run? I really don't know.
localAddr = "localhost";
}
String addr = ALLNET_HOST.equals("") ? localAddr : ALLNET_HOST;
String port = ALLNET_PORT.equals("") ? SERVER_PORT : ALLNET_PORT;
List<GameConnect> gameConnectList = new ArrayList<>();
GameConnect chuni = new GameConnect(0, 1, "http://" + addr + ":" + port + "/ChusanServlet/");
GameConnect mai = new GameConnect(1, 1, "http://" + addr + ":" + port + "/Maimai2Servlet/");
GameConnect ongeki = new GameConnect(2, 1, "http://" + addr + ":" + port + "/OngekiServlet/");
gameConnectList.add(chuni);
gameConnectList.add(mai);
gameConnectList.add(ongeki);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", gameConnectList.size());
resultMap.put("gameConnectList", gameConnectList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,66 @@
package icu.samnyan.aqua.sega.cardmaker.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.cardmaker.handler.BaseHandler;
import icu.samnyan.aqua.sega.cardmaker.model.response.GetGameSettingResp;
import icu.samnyan.aqua.sega.cardmaker.model.response.data.GameSetting;
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.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("CardMakerGetGameSettingHandler")
public class GetGameSettingHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameSettingHandler.class);
private final BasicMapper mapper;
@Autowired
public GetGameSettingHandler(BasicMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
LocalDateTime rebootStartTime = LocalDateTime.now().minusHours(3);
LocalDateTime rebootEndTime = LocalDateTime.now().minusHours(2);
GameSetting gameSetting = new GameSetting(
"1.0.0",
"1.32.0",
"1.30.0",
"1.32.0",
false,
10,
rebootStartTime.format(formatter),
rebootEndTime.format(formatter),
false,
100,
100,
100,
false);
GetGameSettingResp resp = new GetGameSettingResp(
gameSetting,
false,
false
);
String json = mapper.write(resp);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,16 @@
package icu.samnyan.aqua.sega.cardmaker.model.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CodeResp {
private int returnCode;
private String apiName;
}

View File

@ -0,0 +1,21 @@
package icu.samnyan.aqua.sega.cardmaker.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import icu.samnyan.aqua.sega.cardmaker.model.response.data.GameSetting;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GetGameSettingResp {
private GameSetting gameSetting;
@JsonProperty("isDumpUpload")
private boolean isDumpUpload;
@JsonProperty("isAou")
private boolean isAou;
}

View File

@ -0,0 +1,14 @@
package icu.samnyan.aqua.sega.cardmaker.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameConnect {
private int modelKind; // 0: chunithm, 1: maimai, 2: ongeki
private int type; // 0: LAN, 1: WAN
private String titleUri;
}

View File

@ -0,0 +1,31 @@
package icu.samnyan.aqua.sega.cardmaker.model.response.data;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameSetting {
private String dataVersion;
private String ongekiCmVersion;
private String chuniCmVersion;
private String maimaiCmVersion;
@JsonProperty("isMaintenance")
private boolean isMaintenance;
private int requestInterval;
private String rebootStartTime;
private String rebootEndTime;
@JsonProperty("isBackgroundDistribute")
private boolean isBackgroundDistribute;
private int maxCountCharacter;
private int maxCountItem;
private int maxCountCard;
private boolean watermark;
}

View File

@ -305,4 +305,9 @@ public class ChuniServletController {
return upsertUserChargelogHandler.handle(request);
}
@PostMapping("Ping")
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
}

View File

@ -46,9 +46,43 @@ public class ChusanServletController {
private final GetUserTeamHandler getUserTeamHandler;
private final UpsertUserAllHandler upsertUserAllHandler;
private final UpsertUserChargelogHandler upsertUserChargelogHandler;
private final GetGameGachaHandler getGameGachaHandler;
private final GetGameGachaCardByIdHandler getGameGachaCardByIdHandler;
private final GetUserCardPrintErrorHandler getUserCardPrintErrorHandler;
private final CMGetUserPreviewHandler cmGetUserPreviewHandler;
private final CMGetUserDataHandler cmGetUserDataHandler;
private final CMGetUserCharacterHandler cmGetUserCharacterHandler;
private final GetUserGachaHandler getUserGachaHandler;
private final GetUserPrintedCardHandler getUserPrintedCardHandler;
private final CMGetUserItemHandler cmGetUserItemHandler;
private final RollGachaHandler rollGachaHandler;
private final CMUpsertUserGachaHandler cmUpsertUserGachaHandler;
private final CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler;
private final CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler;
@Autowired
public ChusanServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler, GetGameChargeHandler getGameChargeHandler, GetGameEventHandler getGameEventHandler, GetGameIdlistHandler getGameIdlistHandler, GetGameRankingHandler getGameRankingHandler, GetGameSettingHandler getGameSettingHandler, GetTeamCourseRuleHandler getTeamCourseRuleHandler, GetTeamCourseSettingHandler getTeamCourseSettingHandler, GetUserActivityHandler getUserActivityHandler, GetUserCharacterHandler getUserCharacterHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, GetUserDataHandler getUserDataHandler, GetUserDuelHandler getUserDuelHandler, GetUserFavoriteItemHandler getUserFavoriteItemHandler, GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapAreaHandler getUserMapAreaHandler, GetUserMusicHandler getUserMusicHandler, GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler, GetUserRivalDataHandler getUserRivalDataHandler, GetUserRivalMusicHandler getUserRivalMusicHandler, GetUserTeamHandler getUserTeamHandler, UpsertUserAllHandler upsertUserAllHandler, UpsertUserChargelogHandler upsertUserChargelogHandler, GetUserSymbolChatSettingHandler getUserSymbolChatSettingHandler, GetUserNetBattleDataHandler getUserNetBattleDataHandler) {
public ChusanServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler,
GetGameChargeHandler getGameChargeHandler, GetGameEventHandler getGameEventHandler,
GetGameIdlistHandler getGameIdlistHandler, GetGameRankingHandler getGameRankingHandler,
GetGameSettingHandler getGameSettingHandler, GetTeamCourseRuleHandler getTeamCourseRuleHandler,
GetTeamCourseSettingHandler getTeamCourseSettingHandler, GetUserActivityHandler getUserActivityHandler,
GetUserCharacterHandler getUserCharacterHandler, GetUserChargeHandler getUserChargeHandler,
GetUserCourseHandler getUserCourseHandler, GetUserDataHandler getUserDataHandler,
GetUserDuelHandler getUserDuelHandler, GetUserFavoriteItemHandler getUserFavoriteItemHandler,
GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler,
GetUserMapAreaHandler getUserMapAreaHandler, GetUserMusicHandler getUserMusicHandler,
GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler,
GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler,
GetUserRivalDataHandler getUserRivalDataHandler, GetUserRivalMusicHandler getUserRivalMusicHandler,
GetUserTeamHandler getUserTeamHandler, UpsertUserAllHandler upsertUserAllHandler,
UpsertUserChargelogHandler upsertUserChargelogHandler, GetUserSymbolChatSettingHandler getUserSymbolChatSettingHandler,
GetUserNetBattleDataHandler getUserNetBattleDataHandler, GetGameGachaHandler getGameGachaHandler,
GetGameGachaCardByIdHandler getGameGachaCardByIdHandler, GetUserCardPrintErrorHandler getUserCardPrintErrorHandler,
CMGetUserPreviewHandler cmGetUserPreviewHandler, CMGetUserDataHandler cmGetUserDataHandler,
CMGetUserCharacterHandler cmGetUserCharacterHandler, GetUserGachaHandler getUserGachaHandler,
GetUserPrintedCardHandler getUserPrintedCardHandler, CMGetUserItemHandler cmGetUserItemHandler,
RollGachaHandler rollGachaHandler, CMUpsertUserGachaHandler cmUpsertUserGachaHandler,
CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler, CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler) {
this.gameLoginHandler = gameLoginHandler;
this.gameLogoutHandler = gameLogoutHandler;
this.getGameChargeHandler = getGameChargeHandler;
@ -80,6 +114,19 @@ public class ChusanServletController {
this.upsertUserChargelogHandler = upsertUserChargelogHandler;
this.getUserSymbolChatSettingHandler = getUserSymbolChatSettingHandler;
this.getUserNetBattleDataHandler = getUserNetBattleDataHandler;
this.getGameGachaHandler = getGameGachaHandler;
this.getGameGachaCardByIdHandler = getGameGachaCardByIdHandler;
this.getUserCardPrintErrorHandler = getUserCardPrintErrorHandler;
this.cmGetUserPreviewHandler = cmGetUserPreviewHandler;
this.cmGetUserDataHandler = cmGetUserDataHandler;
this.cmGetUserCharacterHandler = cmGetUserCharacterHandler;
this.getUserGachaHandler = getUserGachaHandler;
this.getUserPrintedCardHandler = getUserPrintedCardHandler;
this.cmGetUserItemHandler = cmGetUserItemHandler;
this.rollGachaHandler = rollGachaHandler;
this.cmUpsertUserGachaHandler = cmUpsertUserGachaHandler;
this.cmUpsertUserPrintSubtractHandler = cmUpsertUserPrintSubtractHandler;
this.cmUpsertUserPrintCancelHandler = cmUpsertUserPrintCancelHandler;
}
@PostMapping("GameLoginApi")
@ -277,7 +324,7 @@ public class ChusanServletController {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("MatchingServer/Ping")
@PostMapping({"MatchingServer/Ping", "Ping"})
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@ -296,4 +343,91 @@ public class ChusanServletController {
*/
// Cardmaker endpoints
@PostMapping("GetGameGachaApi")
String getGameGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameGachaHandler.handle(request);
}
@PostMapping("GetGameGachaCardByIdApi")
String getGameGachaCardById(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameGachaCardByIdHandler.handle(request);
}
@PostMapping("GetUserCardPrintErrorApi")
String getUserCardPrintError(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCardPrintErrorHandler.handle(request);
}
@PostMapping("CMGetUserCharacterApi")
String cmGetUserCharacter(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserCharacterHandler.handle(request);
}
@PostMapping("CMGetUserDataApi")
String cmGetUserData(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserDataHandler.handle(request);
}
@PostMapping("GetUserGachaApi")
String GetUserGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserGachaHandler.handle(request);
}
@PostMapping("CMGetUserItemApi")
String cmGetUserItem(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserItemHandler.handle(request);
}
@PostMapping("CMGetUserPreviewApi")
String cmGetUserPreview(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserPreviewHandler.handle(request);
}
@PostMapping("GetUserPrintedCardApi")
String getUserPrintedCard(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserPrintedCardHandler.handle(request);
}
@PostMapping("PrinterLoginApi")
String printerLogin(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("PrinterLogoutApi")
String printerLogout(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("RollGachaApi")
String rollGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return rollGachaHandler.handle(request);
}
@PostMapping("CMUpsertUserGachaApi")
String cmUpsertUserGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserGachaHandler.handle(request);
}
@PostMapping("CMUpsertUserPrintApi")
String cmUpsertUserPrint(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\", \"orderId\":\"0\", \"serialId\":\"FAKECARDIMAG12345678\", \"apiName\":\"CMUpsertUserPrintApi\"}";
}
@PostMapping("CMUpsertUserPrintCancelApi")
String cmUpsertUserPrintCancel(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserPrintCancelHandler.handle(request);
}
@PostMapping("CMUpsertUserPrintlogApi")
String cmUpsertUserPrintlog(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\", \"orderId\":\"0\", \"serialId\":\"FAKECARDIMAG12345678\", \"apiName\":\"CMUpsertUserPrintlogApi\"}";
}
@PostMapping("CMUpsertUserPrintSubtractApi")
String cmUpsertUserPrintSubtract(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserPrintSubtractHandler.handle(request);
}
}

View File

@ -0,0 +1,18 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameGachaCardRepository")
public interface GameGachaCardRepository extends JpaRepository<GameGachaCard, Long> {
List<GameGachaCard> findAllByGachaId(int gacha_id);
}

View File

@ -0,0 +1,13 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGacha;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameGachaRepository")
public interface GameGachaRepository extends JpaRepository<GameGacha, Long> {
}

View File

@ -0,0 +1,21 @@
package icu.samnyan.aqua.sega.chusan.dao.userdata;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanUserCardPrintStateRepository")
public interface UserCardPrintStateRepository extends JpaRepository<UserCardPrintState, Long> {
List<UserCardPrintState> findByUser_Card_ExtId(Long extId);
List<UserCardPrintState> findByUser_Card_ExtIdAndHasCompleted(Long extId, boolean hasCompleted);
List<UserCardPrintState> findByUserAndGachaIdAndHasCompleted(UserData userData, int gachaId, boolean hasCompleted);
}

View File

@ -0,0 +1,20 @@
package icu.samnyan.aqua.sega.chusan.dao.userdata;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanUserGachaRepository")
public interface UserGachaRepository extends JpaRepository<UserGacha, Long> {
List<UserGacha> findByUser_Card_ExtId(Long extId);
Optional<UserGacha> findByUserAndGachaId(UserData extId, int gachaId);
}

View File

@ -0,0 +1,68 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCharacter;
import icu.samnyan.aqua.sega.chusan.service.UserCharacterService;
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.data.domain.Page;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Handle getUserCharacter request
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserCharacterHandler")
public class CMGetUserCharacterHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserCharacterHandler.class);
private final BasicMapper mapper;
private final UserCharacterService userCharacterService;
@Autowired
public CMGetUserCharacterHandler(BasicMapper mapper, UserCharacterService userCharacterService) {
this.mapper = mapper;
this.userCharacterService = userCharacterService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
int nextIndex = ((Number) request.get("nextIndex")).intValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
int pageNum = nextIndex / maxCount;
Page<UserCharacter> dbPage = userCharacterService.getByUserId(userId, pageNum, maxCount);
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", dbPage.getNumberOfElements());
resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex);
List<Integer> userCharacterIdList = new ArrayList<>();
dbPage.getContent().forEach(userCharacter -> {
userCharacterIdList.add(userCharacter.getCharacterId());
});
resultMap.put("userCharacterList", userCharacterIdList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,59 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.response.data.UserEmoney;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
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.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserDataHandler")
public class CMGetUserDataHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserDataHandler.class);
private final BasicMapper mapper;
private final UserDataService userDataService;
@Autowired
public CMGetUserDataHandler(BasicMapper mapper, UserDataService userDataService) {
this.mapper = mapper;
this.userDataService = userDataService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Optional<UserData> userDataOptional = userDataService.getUserByExtId(userId);
if (userDataOptional.isPresent()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
UserData user = userDataOptional.get();
UserEmoney userEmoney = new UserEmoney();
user.setUserEmoney(userEmoney);
resultMap.put("userData", user);
resultMap.put("userEmoney", userEmoney);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
return null;
}
}

View File

@ -0,0 +1,66 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Handler for getting user item.
* This get call before profile create.
*
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserItemHandler")
public class CMGetUserItemHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserItemHandler.class);
private final BasicMapper mapper;
private final UserItemService userItemService;
public CMGetUserItemHandler(BasicMapper mapper, UserItemService userItemService) {
this.mapper = mapper;
this.userItemService = userItemService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Long nextIndexVal = ((Number) request.get("nextIndex")).longValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
Long mul = 10000000000L;
int kind = (int) (nextIndexVal / mul);
int nextIndex = (int) (nextIndexVal % mul);
int pageNum = nextIndex / maxCount;
Page<UserItem> userItemPage = userItemService.getByUserAndItemKind(userId, kind, pageNum, maxCount);
List<UserItem> userItemList = userItemPage.getContent();
long currentIndex = kind * mul + maxCount * pageNum + userItemPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userItemPage.getNumberOfElements());
resultMap.put("nextIndex", userItemPage.getNumberOfElements() < maxCount ? -1 : currentIndex);
resultMap.put("itemKind", kind);
resultMap.put("userItemList", userItemList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,60 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
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.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserPreviewHandler")
public class CMGetUserPreviewHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserPreviewHandler.class);
private final BasicMapper mapper;
private final UserDataService userDataService;
@Autowired
public CMGetUserPreviewHandler(BasicMapper mapper, UserDataService userDataService) {
this.mapper = mapper;
this.userDataService = userDataService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
String segaIdAuthKey = String.valueOf(request.get("segaIdAuthKey"));
Optional<UserData> userDataOptional = userDataService.getUserByExtId(userId);
if (userDataOptional.isPresent()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
UserData user = userDataOptional.get();
resultMap.put("userName", user.getUserName());
resultMap.put("level", user.getLevel());
resultMap.put("medal", user.getMedal());
resultMap.put("lastDataVersion", "2.00.00"); //Hardcode due to outdated
resultMap.put("isLogin", false);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
return null;
}
}

View File

@ -0,0 +1,117 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGachaRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserGachaHandler")
public class CMUpsertUserGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserGachaHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final UserGachaRepository userGachaRepository;
private final UserDataService userDataService;
private final UserItemService userItemService;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserGachaHandler(UserItemService userItemService, UserDataService userDataService,
UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper,
UserGachaRepository userGachaRepository) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.userGachaRepository = userGachaRepository;
this.userDataService = userDataService;
this.userItemService = userItemService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
int gachaId = ((Number) request.get("gachaId")).intValue();
int placeId = ((Number) request.get("placeId")).intValue();
UpsertUserGacha upsertUserGacha = mapper.convert(request.get("cmUpsertUserGacha"), UpsertUserGacha.class);
List<UserCardPrintState> userCardPrintStateList = new ArrayList<>();
UserData userData;
Optional<UserData> userOptional = userDataService.getUserByExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
logger.error("User not found. userId: {}", userId);
return null;
}
if (upsertUserGacha.getGameGachaCardList() != null) {
for (GameGachaCard gameGachaCard : upsertUserGacha.getGameGachaCardList()) {
UserCardPrintState userCardPrintState = new UserCardPrintState();
userCardPrintState.setHasCompleted(false);
userCardPrintState.setLimitDate(LocalDateTime.of(2029, 01, 01, 0, 0));
userCardPrintState.setPlaceId(placeId);
userCardPrintState.setCardId(gameGachaCard.getCardId());
userCardPrintState.setGachaId(gachaId);
userCardPrintState.setUser(userData);
userCardPrintStateRepository.save(userCardPrintState);
}
}
List<UserItem> userItemListToSave = new ArrayList<>();
List<UserItem> userItemList = upsertUserGacha.getUserItemList();
userItemList.forEach(newUserItem -> {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemIdAndKind(userData, itemId, itemKind);
UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(userData));
newUserItem.setId(userItem.getId());
newUserItem.setUser(userItem.getUser());
userItemListToSave.add(newUserItem);
});
userItemService.saveAll(userItemListToSave);
if (upsertUserGacha.getUserGacha() != null) {
UserGacha newUserGacha = upsertUserGacha.getUserGacha();
newUserGacha.setUser(userData);
userGachaRepository.save(newUserGacha);
}
userCardPrintStateList = userCardPrintStateRepository.findByUserAndGachaIdAndHasCompleted(userData, gachaId, false);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserGachaApi");
resultMap.put("userCardPrintStateList", userCardPrintStateList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,58 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
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;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserPrintCancelHandler")
public class CMUpsertUserPrintCancelHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserPrintCancelHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserPrintCancelHandler(UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
List<Integer> orderIdList = mapper.convert(request.get("orderIdList"), new TypeReference<List<Integer>>() {});
for (Integer orderId : orderIdList) {
Optional<UserCardPrintState> userCardPrintStateOptional = userCardPrintStateRepository.findById(orderId.longValue());
if (userCardPrintStateOptional.isPresent()) {
UserCardPrintState newUserCardPrintState = userCardPrintStateOptional.get();
newUserCardPrintState.setHasCompleted(true);
userCardPrintStateRepository.save(newUserCardPrintState);
}
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserPrintCancelApi");
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,92 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
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.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserPrintSubtractHandler")
public class CMUpsertUserPrintSubtractHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserPrintSubtractHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final UserItemService userItemService;
private final UserDataService userDataService;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserPrintSubtractHandler(UserItemService userItemService, UserDataService userDataService, UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.userItemService = userItemService;
this.userDataService = userDataService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
UserCardPrintState userCardPrintState = mapper.convert(request.get("userCardPrintState"), UserCardPrintState.class);
List<UserItem> userItemList = mapper.convert(request.get("userItemList"), new TypeReference<List<UserItem>>() {});
UserData userData;
Optional<UserData> userOptional = userDataService.getUserByExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
logger.error("User not found. userId: {}", userId);
return null;
}
List<UserItem> userItemListToSave = new ArrayList<>();
userItemList.forEach(newUserItem -> {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemIdAndKind(userData, itemId, itemKind);
UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(userData));
newUserItem.setId(userItem.getId());
newUserItem.setUser(userItem.getUser());
userItemListToSave.add(newUserItem);
});
userItemService.saveAll(userItemListToSave);
Optional<UserCardPrintState> userCardPrintStateOptional = userCardPrintStateRepository.findById(userCardPrintState.getId());
if (userCardPrintStateOptional.isPresent()) {
UserCardPrintState newUserCardPrintState = userCardPrintStateOptional.get();
newUserCardPrintState.setHasCompleted(true);
userCardPrintStateRepository.save(newUserCardPrintState);
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserPrintSubtractApi");
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,53 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.handler.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("ChusanGetGameGachaCardByIdHandler")
public class GetGameGachaCardByIdHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameGachaCardByIdHandler.class);
private final GameGachaCardService gameGachaCardService;
private final BasicMapper mapper;
@Autowired
public GetGameGachaCardByIdHandler(GameGachaCardService gameGachaCardService, BasicMapper mapper) {
this.gameGachaCardService = gameGachaCardService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
int gachaId = ((Number) request.get("gachaId")).intValue();
List<GameGachaCard> gameGachaCardList = gameGachaCardService.getByGachaId(gachaId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("gachaId", gachaId);
resultMap.put("length", gameGachaCardList.size());
resultMap.put("isPickup", false);
resultMap.put("gameGachaCardList", gameGachaCardList);
resultMap.put("emissionList", List.of());
resultMap.put("afterCalcList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,47 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGacha;
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("ChusanGetGameGachaHandler")
public class GetGameGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameGachaHandler.class);
private final GameGachaRepository gameGachaRepository;
private final BasicMapper mapper;
@Autowired
public GetGameGachaHandler(GameGachaRepository gameGachaRepository, BasicMapper mapper) {
this.gameGachaRepository = gameGachaRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
List<GameGacha> gameGachaList = gameGachaRepository.findAll();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", gameGachaList.size());
resultMap.put("gameGachaList", gameGachaList);
resultMap.put("registIdList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,49 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
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("ChusanGetUserCardPrintErrorHandler")
public class GetUserCardPrintErrorHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserCardPrintErrorHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final BasicMapper mapper;
@Autowired
public GetUserCardPrintErrorHandler(UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.mapper = mapper;
this.userCardPrintStateRepository = userCardPrintStateRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
Long userId = ((Number) request.get("userId")).longValue();
List<UserCardPrintState> userCardPrintStateList = userCardPrintStateRepository.findByUser_Card_ExtIdAndHasCompleted(userId, false);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userCardPrintStateList.size());
resultMap.put("userCardPrintStateList", userCardPrintStateList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,50 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import icu.samnyan.aqua.sega.chusan.service.UserGachaService;
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("ChusanGetUserGachaHandler")
public class GetUserGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserGachaHandler.class);
private final BasicMapper mapper;
private final UserGachaService userGachaService;
@Autowired
public GetUserGachaHandler(BasicMapper mapper, UserGachaService userGachaService) {
this.mapper = mapper;
this.userGachaService = userGachaService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
List<UserGacha> userGachaList = userGachaService.getByUserId(userId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userGachaList.size());
resultMap.put("userGachaList", userGachaList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,43 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
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("ChusanGetUserPrintedCardHandler")
public class GetUserPrintedCardHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserPrintedCardHandler.class);
private final BasicMapper mapper;
@Autowired
public GetUserPrintedCardHandler(BasicMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", 0);
resultMap.put("nextIndex", -1);
resultMap.put("userPrintedCardList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,50 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.handler.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, Object> 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;
}
}

View File

@ -0,0 +1,47 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanGameGacha")
@Table(name = "chusan_game_gacha")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameGacha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private int id;
private int gachaId;
private String gachaName;
private int type;
private int kind; // 0
@JsonProperty("isCeiling")
private boolean isCeiling;
private int ceilingCnt;
private int changeRateCnt1;
private int changeRateCnt2;
private LocalDateTime startDate;
private LocalDateTime endDate;
private LocalDateTime noticeStartDate;
private LocalDateTime noticeEndDate;
}

View File

@ -0,0 +1,39 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanGameGachaCard")
@Table(name = "chusan_game_gacha_card")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameGachaCard implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private int id;
private int gachaId;
private int cardId;
private int rarity;
private int weight;
@JsonProperty("isPickup")
private boolean isPickup;
}

View File

@ -0,0 +1,49 @@
package icu.samnyan.aqua.sega.chusan.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.model.userdata.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;
import java.io.Serializable;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UpsertUserGacha implements Serializable {
@Nullable
private UserData userData;
@Nullable
private UserGacha userGacha;
@Nullable
private List<Object> userCharacterList;
@Nullable
private List<Object> userCardList;
@Nullable
private List<GameGachaCard> gameGachaCardList;
@Nullable
private List<UserItem> userItemList;
@Nullable
@JsonProperty("isNewCharacterList")
private String isNewCharacterList;
@Nullable
@JsonProperty("isNewCardList")
private String isNewCardList;
}

View File

@ -0,0 +1,22 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEmoney {
private int type = 0;
private int emoneyCredit = 69;
private int emoneyBrand = 2;
private int ext1 = 0;
private int ext2 = 0;
private int ext3 = 0;
}

View File

@ -0,0 +1,45 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanUserCardPrintState")
@Table(name = "chusan_user_print_state")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCardPrintState implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("orderId")
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserData user;
private boolean hasCompleted;
private LocalDateTime limitDate;
private int placeId;
private int cardId;
private int gachaId;
public UserCardPrintState(UserData user) {
this.user = user;
}
}

View File

@ -1,9 +1,12 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import icu.samnyan.aqua.sega.chusan.model.response.data.UserEmoney;
import icu.samnyan.aqua.sega.general.model.Card;
import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer;
import lombok.AllArgsConstructor;
@ -13,6 +16,7 @@ import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
@ -328,11 +332,17 @@ public class UserData implements Serializable {
private long extLong2;
private String rankUpChallengeResults;
@JsonInclude
@Transient
private List<Object> rankUpChallengeResults;
@JsonProperty("isNetBattleHost")
private boolean isNetBattleHost;
private int netBattleEndState;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private UserEmoney userEmoney;
}

View File

@ -0,0 +1,52 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanUserGacha")
@Table(name = "chusan_user_gacha", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "gacha_id"})})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserGacha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserData user;
@Column(name = "gacha_id")
private int gachaId;
private int totalGachaCnt;
private int ceilingGachaCnt;
private int dailyGachaCnt;
private int fiveGachaCnt;
private int elevenGachaCnt;
private LocalDateTime dailyGachaDate;
public UserGacha(UserData user) {
this.user = user;
}
}

View File

@ -0,0 +1,46 @@
package icu.samnyan.aqua.sega.chusan.service;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
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 GameGachaCardRepository gameGachaCardRepository;
@Autowired
public GameGachaCardService(GameGachaCardRepository gameGachaCardRepository) {
this.gameGachaCardRepository = gameGachaCardRepository;
}
@Cacheable("gachaCard")
public List<GameGachaCard> getAll() {
return gameGachaCardRepository.findAll();
}
public List<GameGachaCard> getByGachaId(int gachaId) {
return gameGachaCardRepository.findAllByGachaId(gachaId);
}
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;
}
}

View File

@ -0,0 +1,40 @@
package icu.samnyan.aqua.sega.chusan.service;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGachaRepository;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Service("ChusanUserGachaService")
public class UserGachaService {
private final UserGachaRepository userGachaRepository;
public UserGachaService(UserGachaRepository userGachaRepository) {
this.userGachaRepository = userGachaRepository;
}
public UserGacha save(UserGacha userGacha) {
return userGachaRepository.save(userGacha);
}
public List<UserGacha> saveAll(List<UserGacha> newUserGachaList) {
return userGachaRepository.saveAll(newUserGachaList);
}
public List<UserGacha> getByUserId(String userId) {
return userGachaRepository.findByUser_Card_ExtId(Long.parseLong(userId));
}
public Optional<UserGacha> getByUserAndGachaId(UserData user, int gachaId) {
return userGachaRepository.findByUserAndGachaId(user, gachaId);
}
}

View File

@ -30,6 +30,7 @@ public class CompressionFilter extends OncePerRequestFilter {
filterList.add("/MaimaiServlet");
filterList.add("/Maimai2Servlet");
filterList.add("/ChusanServlet");
filterList.add("/CardMakerServlet");
}
@Override

View File

@ -288,5 +288,10 @@ public class Maimai2ServletController {
public String getUserFriendSeasonRankingHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserFriendSeasonRankingHandler.handle(request);
}
@PostMapping("Ping")
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
}

View File

@ -395,4 +395,9 @@ public class OngekiController {
return upsertUserAllHandler.handle(request);
}
@PostMapping("Ping")
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
}

View File

@ -0,0 +1,50 @@
CREATE TABLE chusan_game_gacha (
id BIGINT auto_increment PRIMARY KEY,
gacha_id INTEGER NOT NULL,
gacha_name VARCHAR(255),
`type` INTEGER,
kind INTEGER,
is_ceiling BOOLEAN,
ceiling_cnt INTEGER,
change_rate_cnt1 INTEGER,
change_rate_cnt2 INTEGER,
start_date DATETIME,
end_date DATETIME,
notice_start_date DATETIME,
notice_end_date DATETIME
);
CREATE TABLE chusan_game_gacha_card (
id BIGINT auto_increment PRIMARY KEY,
gacha_id INTEGER NOT NULL,
card_id INTEGER NOT NULL,
rarity INTEGER,
weight INTEGER,
is_pickup BOOLEAN
);
CREATE TABLE chusan_user_gacha (
id BIGINT auto_increment PRIMARY KEY,
gacha_id INTEGER,
total_gacha_cnt INTEGER,
ceiling_gacha_cnt INTEGER,
daily_gacha_cnt INTEGER,
five_gacha_cnt INTEGER,
eleven_gacha_cnt INTEGER,
daily_gacha_date DATETIME,
user_id BIGINT,
constraint FKKgEwDqNazYzQYXQ6aM
foreign key (user_id) references chusan_user_data (id)
);
CREATE TABLE chusan_user_print_state (
id BIGINT auto_increment PRIMARY KEY,
has_completed BOOLEAN,
limit_date DATETIME,
place_id INTEGER,
card_id INTEGER,
gacha_id INTEGER,
user_id BIGINT,
constraint FKYWeiCGeXh6fYTym8KY
foreign key (user_id) references chusan_user_data (id)
);

View File

@ -0,0 +1,185 @@
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (370, 'お風呂上がりの一発でわからせる!', 0, 0, b'0', 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (380, '優しいキャロルが流れる頃には', 0, 0, b'0', 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (390, '音闘気鍛練の行', 0, 0, b'0', 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (400, '最後の物語。約束はあなたと共に', 0, 0, b'0', 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (410, '可愛さ指数は3000倍', 0, 0, b'0', 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1323002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 905002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 894002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 646002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 40002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 25002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 6002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 11002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 231002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 237002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 239002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 325002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 336002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 442002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 449002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 338002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 635002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 637002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 642002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 761002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 763002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 768002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 774002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 868002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 885002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1011002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1015002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1024002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1030002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 874002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 657002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 995002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 996002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 777002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 538002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1324002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1160002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 895002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 647002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 45002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 24002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 36002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 39002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 20002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 189002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 198002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 232002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 237002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 316002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 327002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 434002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 441002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 445002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 621002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 628002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 630002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 639002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 643002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 766002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 634002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 867002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 870002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 884002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 886002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1010002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1017002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1030002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 873002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 992002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 658002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 994002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1325002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1161002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 896002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 648002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 18002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 44002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 10002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 31002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 192002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 196002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 201002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 237002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 317002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 319002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 322002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 334002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 437002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 443002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 447002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 622002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 638002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 760002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 762002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 765002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 452002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 871002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 888002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1013002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1016002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1030002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1026002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 875002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 656002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 991002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 993002, 2, 2, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 539002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 1336002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 897002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 649002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 662002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 28002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 2002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 41002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 43002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 29002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 199002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 203002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 230002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 237002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 318002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 333002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 433002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 435002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 444002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 623002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 625002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 627002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 629002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 640002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 767002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 769002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 773002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 775002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 631002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 1030002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 50002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 244002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 343002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 207002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 661002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 655002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 863002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1337002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1162002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 898002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 650002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 35002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 4002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 37002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 7002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 47002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 12002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 187002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 197002, 2, 4, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 202002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 227002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 237002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 328002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 329002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 436002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 438002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 624002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 626002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 636002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 641002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 644002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 764002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 770002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 772002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 632002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 633002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1030002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 341002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 660002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 659002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 345002, 2, 3, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 777002, 2, 1, b'0');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 862002, 2, 1, b'0');

View File

@ -0,0 +1,58 @@
CREATE TABLE chusan_game_gacha (
id INTEGER NOT NULL,
gacha_id INTEGER NOT NULL,
gacha_name VARCHAR,
type INTEGER,
kind INTEGER,
is_ceiling BOOLEAN,
ceiling_cnt INTEGER,
change_rate_cnt1 INTEGER,
change_rate_cnt2 INTEGER,
start_date DATETIME,
end_date DATETIME,
notice_start_date DATETIME,
notice_end_date DATETIME,
PRIMARY KEY (
id
)
);
CREATE TABLE chusan_game_gacha_card (
id INTEGER,
gacha_id INTEGER NOT NULL,
card_id INTEGER NOT NULL,
rarity INTEGER,
weight INTEGER,
is_pickup BOOLEAN,
PRIMARY KEY (
id
)
);
CREATE TABLE chusan_user_gacha (
id INTEGER,
gacha_id INTEGER,
total_gacha_cnt INTEGER,
ceiling_gacha_cnt INTEGER,
daily_gacha_cnt INTEGER,
five_gacha_cnt INTEGER,
eleven_gacha_cnt INTEGER,
daily_gacha_date DATETIME,
user_id BIGINT REFERENCES chusan_user_data (id),
PRIMARY KEY (
id
)
);
CREATE TABLE chusan_user_print_state (
id INTEGER,
has_completed BOOLEAN,
limit_date DATETIME,
place_id INTEGER,
card_id INTEGER,
gacha_id INTEGER,
user_id BIGINT REFERENCES chusan_user_data (id),
PRIMARY KEY (
id
)
);

View File

@ -0,0 +1,185 @@
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (370, 'お風呂上がりの一発でわからせる!', 0, 0, false, 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (380, '優しいキャロルが流れる頃には', 0, 0, false, 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (390, '音闘気鍛練の行', 0, 0, false, 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (400, '最後の物語。約束はあなたと共に', 0, 0, false, 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha` (`gacha_id`, `gacha_name`, `type`, `kind`, `is_ceiling`, `ceiling_cnt`, `change_rate_cnt1`, `change_rate_cnt2`, `start_date`, `end_date`, `notice_start_date`, `notice_end_date`) VALUES (410, '可愛さ指数は3000倍', 0, 0, false, 10, 0, 0, '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', '2029-01-01 00:00:00.000000');
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1323002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 905002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 894002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 646002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 40002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 25002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 6002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 11002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 231002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 237002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 239002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 325002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 336002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 442002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 449002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 338002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 635002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 637002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 642002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 761002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 763002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 768002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 774002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 868002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 885002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1011002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1015002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1024002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 1030002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 874002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 657002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 995002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 996002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 777002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (370, 538002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1324002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1160002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 895002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 647002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 45002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 24002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 36002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 39002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 20002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 189002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 198002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 232002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 237002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 316002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 327002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 434002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 441002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 445002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 621002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 628002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 630002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 639002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 643002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 766002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 634002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 867002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 870002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 884002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 886002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1010002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1017002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 1030002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 873002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 992002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 658002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (380, 994002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1325002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1161002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 896002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 648002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 18002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 44002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 10002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 31002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 192002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 196002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 201002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 237002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 317002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 319002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 322002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 334002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 437002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 443002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 447002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 622002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 638002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 760002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 762002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 765002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 452002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 871002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 888002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1013002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1016002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1030002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 1026002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 875002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 656002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 991002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 993002, 2, 2, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (390, 539002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 1336002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 897002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 649002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 662002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 28002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 2002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 41002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 43002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 29002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 199002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 203002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 230002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 237002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 318002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 333002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 433002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 435002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 444002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 623002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 625002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 627002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 629002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 640002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 767002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 769002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 773002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 775002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 631002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 1030002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 50002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 244002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 343002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 207002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 661002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 655002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (400, 863002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1337002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1162002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 898002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 650002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 35002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 4002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 37002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 7002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 47002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 12002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 187002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 197002, 2, 4, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 202002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 227002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 237002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 328002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 329002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 436002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 438002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 624002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 626002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 636002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 641002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 644002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 764002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 770002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 772002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 632002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 633002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 1030002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 341002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 660002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 659002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 345002, 2, 3, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 777002, 2, 1, False);
INSERT INTO `chusan_game_gacha_card` (`gacha_id`, `card_id`, `rarity`, `weight`, `is_pickup`) VALUES (410, 862002, 2, 1, False);