寻仙招募修改,去除老逻辑

back_recharge
duhui 2022-05-24 11:34:06 +08:00
parent 8c94c1b2ab
commit 1f9d9736e6
1 changed files with 75 additions and 21 deletions

View File

@ -1733,7 +1733,7 @@ public class ActivityLogic implements IEventHandler{
// 消费抽取
if (drop == null){
// 十连抽还是单抽消耗物品获取
int[][] item = type == 1?setting.getCostItemSingle():setting.getCostItemMul();
int[][] item = num == 1?setting.getCostItemSingle():setting.getCostItemMul();
// 验证道具消耗
int[][] cost = new int[][]{{item[0][0],item[0][1]}};
boolean itemCost = ItemUtil.itemCost(user, cost, BIReason.CHOICE_DRAW_CARD, 0);
@ -1807,12 +1807,27 @@ public class ActivityLogic implements IEventHandler{
* @param num
* @return
* @throws Exception
*
*/
private CommonProto.Drop.Builder getDrawReward(User user,int activityId,int num,int[][] reward) throws Exception {
if (num == 1){
return getDrawRewardOne(user,activityId,num,reward);
}else {
return getDrawRewardTen(user,activityId,num,reward);
}
}
/**
*
* @param user
* @param activityId
* @param num
* @return
* @throws Exception
*/
private CommonProto.Drop.Builder getDrawRewardOne(User user,int activityId,int num,int[][] reward) throws Exception {
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId);
// 累计得抽奖次数
int count = mission.getV();
// up奖励id
int upRewardId = mission.getChoiceRewardIdByActivity(activityId);
// 根据活动获取本期得全部up信息
@ -1823,8 +1838,6 @@ public class ActivityLogic implements IEventHandler{
int camp = incs[4];
// 排序权重map
Map<Integer, Integer> weight = new TreeMap<>(SWishActivityPool.weight.get(camp));
// 常驻卡池
Map<Integer, SWishActivityPool> poolMap = SWishActivityPool.map;
// 将up奖励id得权重加入到整个卡池权重中
weight.put(-1,incs[2]);
// 计算总权重
@ -1833,32 +1846,19 @@ public class ActivityLogic implements IEventHandler{
int i = 0;
// 根据抽奖次数循环
while (i < num){
// 已抽奖次数+1
count++;
// 随机数
int randomInt = MathUtils.randomInt(totalWeight);
// LOGGER.error("心愿抽奖,总权重:{},随机值:{},权重区间:{}-{},当前次数:{}",totalWeight,randomInt,totalWeight-incs[2],totalWeight,count);
// up奖励信息
int[] result = new int[]{incs[0],incs[1]};
// 抽奖次数达到必出up次数
if (count >= incs[3]){
// 次数归0
count = 0;
// 添加奖励
reward[i++] = result;
continue;
}
// 权重循环
for (Map.Entry<Integer, Integer> entry : weight.entrySet()) {
// 随机值小于等于当前次数权重,证明抽到了
if (randomInt <= entry.getValue()){
// 根据id获取奖池信息
SWishActivityPool pool = poolMap.get(entry.getKey());
SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey());
// null意味着是up奖励
if (pool == null){
count = 0;
reward[i++] = result;
}
// 非up奖励
@ -1871,9 +1871,63 @@ public class ActivityLogic implements IEventHandler{
randomInt -= entry.getValue();
}
}
// 返回奖励信息
return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD);
}
// 更新抽奖次数和up奖励id
mission.setV(count);
/**
*
* @param user
* @param activityId
* @param num
* @return
* @throws Exception
*/
private CommonProto.Drop.Builder getDrawRewardTen(User user,int activityId,int num,int[][] reward) throws Exception {
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId);
// up奖励id
int upRewardId = mission.getChoiceRewardIdByActivity(activityId);
// 根据活动获取本期得全部up信息
int[] incs = SWishActivityUp.upMap.getOrDefault(activityId,new HashMap<>()).get(upRewardId);
if (incs == null){
throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"WishActivityUp查询不到活动" + activityId + "或奖励id" + upRewardId);
}
//拿到当前阵营
int camp = incs[4];
// 排序权重map
Map<Integer, Integer> weight = new TreeMap<>(SWishActivityPool.weight.get(camp));
// 计算总权重
int totalWeight = weight.values().stream().mapToInt(Integer::intValue).sum();
// 固定5次给碎片
int[] ints = {0,1,2,3,4,5,6,7,8,9};
List<Integer> random = MathUtils.randomForOneArray(ints, 5);
int i = 0;
// 根据抽奖次数循环
while (i < 10){
// 随机位置给碎片
if (random.contains(i)){
reward[i++] = new int[]{incs[0],incs[1]};
continue;
}
// 随机数
int randomInt = MathUtils.randomInt(totalWeight);
// 权重循环
for (Map.Entry<Integer, Integer> entry : weight.entrySet()) {
// 随机值小于等于当前次数权重,证明抽到了
if (randomInt <= entry.getValue()){
// 根据id获取奖池信息
SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey());
reward[i++] = pool.getItemId();
}
// 未抽到, 减去当前次数权重
randomInt -= entry.getValue();
}
}
// 返回奖励信息
return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD);
}