寻仙招募修改,去除老逻辑
parent
8c94c1b2ab
commit
1f9d9736e6
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue