排行榜,特权修改

back_recharge
lvxinran 2020-01-03 15:02:54 +08:00
parent 481cda0103
commit 2c6eccad1a
12 changed files with 95 additions and 59 deletions

View File

@ -6,7 +6,7 @@ public interface VipPrivilegeType {
int ADVENTURE_RUNNE_REWARD = 3;//探险符文奖励收益
int ADVENTURE_EXP_REWARD = 27;//探险符文奖励收益
int FAST_MAP_LIMIT = 4;//快速探险的次数上限
int FAST_MAP_LIMIT = 4;//极速探索每日免费次数
int BUY_STAIM_LIMIT = 5;//购买体力次数上限
int SECRET_RANDOM_LIMIT = 6;//秘盒抽取次数上限
@ -21,12 +21,11 @@ public interface VipPrivilegeType {
int BUY_GOLD_DAY_LIMIT = 12; //每日可购买金币的次数
int POKEMON_NUM = 13; //异妖上阵栏位
int FREE_HERO_RANDOM = 14;//免费抽取妖灵师
int FREE_SECRET_RANDOM = 15; //解锁免费抽取秘盒
int TOWER_RESRT_NUM= 17; //每日试炼重置次数
int TIME_RANDOM_FREE = 32;//东海寻仙每日赠送招募次数
int FAST_BUY_COUNT = 33;//极速探索购买次数
//功能项解锁
int UNLOCK_TWO_FIGHT = 501;//解锁2倍速战斗

View File

@ -20,6 +20,6 @@ public class RankHandler extends BaseHandler<PlayerInfoProto.RankRequest> {
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.RankRequest proto) throws Exception {
// MapLogic.getInstance().getTowerRank(iSession,proto.getType(),MessageTypeProto.MessageType.GET_ONE_RANK_RESPONSE);
RankLogic.getInstance().getRank(iSession,proto.getType(),MessageTypeProto.MessageType.GET_ONE_RANK_RESPONSE);
RankLogic.getInstance().getRank(iSession,proto.getType(),proto.getActiviteId(),MessageTypeProto.MessageType.GET_ONE_RANK_RESPONSE);
}
}

View File

@ -1083,7 +1083,7 @@ public class MapLogic {
mapManager.setHighestTower(mapManager.getTower());
AbstractRank towerRank = RankContext.getRankEnum(RankEnum.TOWER_RANK.getType());
// TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))
if(towerRank.getScore(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))>towerRank.getScoreById(user.getId())){
if(towerRank.getScore(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000))>towerRank.getScoreById(user.getId(),0)){
towerRank.addRank(user.getId(),0,mapManager.getTower(),(int)mapManager.getCurrTowerTime()/1000);
// RedisUtil.getInstence().zsetAddOne(RedisKey.getKey(RedisKey.TOWER_RANK,"",false),String.valueOf(user.getId()),TowerRankUtil.getRankNumber(mapManager.getTower(),(int)(mapManager.getCurrTowerTime()/1000)));
}

View File

@ -44,7 +44,7 @@ public class FourtyTwoBehavior extends BaseBehavior {
AbstractRank towerRank = RankContext.getRankEnum(RankEnum.TOWER_RANK.getType());
// Double zSetScore = RedisUtil.getInstence().getZSetScore(RedisKey.TOWER_RANK, "", String.valueOf(user.getId()));
// TowerRankUtil.getRankNumber(mapManager.getTower(),(int)time/1000)
if(towerRank.getScore(mapManager.getTower(),(int)time/1000)>towerRank.getScoreById(user.getId())){
if(towerRank.getScore(mapManager.getTower(),(int)time/1000)>towerRank.getScoreById(user.getId(),0)){
// String key = RedisKey.getKey(RedisKey.TOWER_RANK,"",false);
// RedisUtil.getInstence().zsetAddOne(key,String.valueOf(user.getId()),TowerRankUtil.getRankNumber(mapManager.getTower(),(int)time/1000));
towerRank.addRank(user.getId(),0,mapManager.getTower(),(int)time/1000);

View File

@ -53,7 +53,7 @@ public class LimitRandomCardActivity extends AbstractActivity {
return;
}
AbstractRank randomRank= RankContext.getRankEnum(RankEnum.RANDOM_CARD_RANK.getType());
int scoreById = Double.valueOf(randomRank.getScoreById(((RandomCardEvent) event).getUid())).intValue();
int scoreById = Double.valueOf(randomRank.getScoreById(((RandomCardEvent) event).getUid(),id)).intValue();
if(scoreById==-1){
scoreById=0;
}

View File

@ -26,6 +26,7 @@ import com.ljsd.jieling.logic.hero.HeroAttributeEnum;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
@ -208,7 +209,9 @@ public class CombatLogic {
}else{
String err ="";
if(position == 0){
err = StoreLogic.checkBuyGoodsAndUpdate(user,7,10008,1);
if(!PlayerLogic.getInstance().check(user,VipPrivilegeType.FAST_MAP_LIMIT,1)) {
err = StoreLogic.checkBuyGoodsAndUpdate(user,7,10008,1);
}
}else{
err = StoreLogic.checkBuyGoodsAndUpdate(user,7,10015,1);
}

View File

@ -715,23 +715,43 @@ public class PlayerLogic {
user.getPlayerInfoManager().setRideLevel(rideLevel+1);
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
}
public boolean check(User user,int privilageId,int updateNum){
public boolean check(User user,int privilageTypeId,int updateNum){
Map<Integer, VipInfo> vipInfo = user.getPlayerInfoManager().getVipInfo();
if(privilageId == 0){
if(privilageTypeId == 0){
return true;
}
if(!vipInfo.containsKey(privilageId)){
List<SPrivilegeTypeConfig> sPrivilegeTypeConfigs = SPrivilegeTypeConfig.privilegeByType.get(privilageTypeId);
List<Integer> typePrivileges = new ArrayList<>();
for(SPrivilegeTypeConfig config:sPrivilegeTypeConfigs){
if(!vipInfo.containsKey(config.getId())){
continue;
}
typePrivileges.add(config.getId());
}
if(typePrivileges.isEmpty()){
return false;
}
VipInfo info = vipInfo.get(privilageId);
if(info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime()){
return false;
for(Integer privilageId:typePrivileges){
VipInfo info = vipInfo.get(privilageId);
if(info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime()){
continue;
}
int mCount = getMaxCountByPrivilege(user,privilageId);
if(mCount==-1){
return true;
}
if((info.getCount()+updateNum>mCount)|| (info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime())){
continue;
}
user.getPlayerInfoManager().updateVipPrivilage(privilageId, updateNum);
return true;
}
SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilageId);
return false;
}
public int getMaxCountByPrivilege(User user,int privilegeId){
SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privilegeId);
Map<Integer, Map<Integer, Integer>> conditionMap = SPrivilegeTypeConfig.conditionMap.get(sPrivilegeTypeConfig.getUnlockType());
int maxCount = 0;
int mCount = 0;
int cond = 0;
switch (sPrivilegeTypeConfig.getUnlockType()){
case GlobalsDef.LEVEL_UNLOCK_PRIVILEGE:
@ -744,19 +764,30 @@ public class PlayerLogic {
cond = user.getPlayerInfoManager().getVipLevel();
break;
}
TreeMap<Integer, Integer> condition = (TreeMap)conditionMap.get(privilegeId);
if(sPrivilegeTypeConfig.getUnlockType()!=GlobalsDef.RECHARGE_UNLOCK_PRIVILEGE){
TreeMap<Integer, Integer> condition = (TreeMap)conditionMap.get(privilageId);
maxCount = condition.floorEntry(cond).getValue();
mCount = condition.floorEntry(cond).getValue();
}else{
mCount = condition.get(0);
}
if(maxCount==-1){
return true;
return mCount;
}
public int getMaxCountByPrivilegeType(User user ,int privilegeType){
List<SPrivilegeTypeConfig> sPrivilegeTypeConfigs = SPrivilegeTypeConfig.privilegeByType.get(privilegeType);
List<Integer> typePrivileges = new ArrayList<>();
for(SPrivilegeTypeConfig config:sPrivilegeTypeConfigs){
if(!user.getPlayerInfoManager().getVipInfo().containsKey(config.getId())){
continue;
}
typePrivileges.add(config.getId());
}
if((info.getCount()+updateNum>maxCount)|| (info.getEffectTime()!=0&&TimeUtils.now()/1000>info.getEffectTime())){
return false;
if(typePrivileges.isEmpty()){
return 0;
}
user.getPlayerInfoManager().updateVipPrivilage(privilageId, updateNum);
return true;
int maxCount = 0;
for(Integer privilageId:typePrivileges){
maxCount+=getMaxCountByPrivilege(user,privilageId);
}
return maxCount;
}
}

View File

@ -31,9 +31,9 @@ public class RankLogic {
public static class Instance {
public final static RankLogic instance = new RankLogic();
}
public void getRank(ISession session, int type, MessageTypeProto.MessageType messageType) throws Exception {
public void getRank(ISession session, int type, int activityId,MessageTypeProto.MessageType messageType) throws Exception {
int page = 1;
PlayerInfoProto.RankResponse rankResponse= RankContext.getRankEnum(type).getRank(session.getUid(),0,1, -1);
PlayerInfoProto.RankResponse rankResponse= RankContext.getRankEnum(type).getRank(session.getUid(),activityId,1, -1);
MessageUtil.sendMessage(session,1,messageType.getNumber(),rankResponse,true);
}
}

View File

@ -49,7 +49,7 @@ public abstract class AbstractRank implements IRank {
}
PlayerInfoProto.RankResponse.Builder allUserResponse = getAllUserResponse(zsetreverseRangeWithScores,start);
//当前用户信息
getMyInfo(user,allUserResponse);
getMyInfo(user,activityId,allUserResponse);
return allUserResponse.build();
}
@ -107,9 +107,9 @@ public abstract class AbstractRank implements IRank {
builder.addRanks(everyRank);
}
protected void getMyInfo(User user,PlayerInfoProto.RankResponse.Builder allUserResponse){
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,"",Integer.toString(user.getId())).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, "", Integer.toString(user.getId()));
protected void getMyInfo(User user,int activityId,PlayerInfoProto.RankResponse.Builder allUserResponse){
int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,String.valueOf(activityId),Integer.toString(user.getId())).intValue();
Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, String.valueOf(activityId), Integer.toString(user.getId()));
CommonProto.RankInfo towerRankInfo = CommonProto.RankInfo.newBuilder()
.setRank(myRank)
.setParam1(getParam1(zSetScore))
@ -162,7 +162,7 @@ public abstract class AbstractRank implements IRank {
public int getParam3(double data) {
return getDataByScore(data).length>2?getDataByScore(data)[2]:0;
}
public double getScoreById(int uid){
return RedisUtil.getInstence().getZSetScore(redisKey, "", String.valueOf(uid));
public double getScoreById(int uid,int activityId){
return RedisUtil.getInstence().getZSetScore(redisKey, String.valueOf(activityId), String.valueOf(uid));
}
}

View File

@ -485,13 +485,13 @@ public class StoreLogic {
if (!result){
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
if(relatedtoVIP == 1 && limit!=0){
int updateValue = itemNum;
if(limit == 6){
updateValue= sStoreConfig.getGoods()[0][1]*itemNum;
}
playerInfoManager.updateVipPrivilage(limit,updateValue);
}
// if(relatedtoVIP == 1 && limit!=0){
// int updateValue = itemNum;
// if(limit == 6){
// updateValue= sStoreConfig.getGoods()[0][1]*itemNum;
// }
// playerInfoManager.updateVipPrivilage(limit,updateValue);
// }
itemNumMap.put(itemId,buyTimes +itemNum);
storeInfo.setItemNumMap(itemNumMap);
KtEventUtils.onKtEvent(user, ParamEventBean.UserStoreEvent,storeId,itemId,cost[0][0],itemNum,cost[0][1]);

View File

@ -23,6 +23,7 @@ import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
@ -267,13 +268,13 @@ public class ItemUtil {
}
public static void extraAddItem(User user, Map<Integer, Integer> itemMap,int resson){
public static void extraAddItem(User user, Map<Integer, Integer> itemMap,int reason){
ItemManager itemManager = user.getItemManager();
for(Map.Entry<Integer,Integer> item : itemMap.entrySet()){
Integer itemId = item.getKey();
Integer value = item.getValue();
SItem sItem = SItem.getsItemMap().get(itemId);
int itemNums = privilegeAdd(user, resson, sItem.getId(), value);
int itemNums = privilegeAdd(user, reason, sItem.getId(), value);
Item hadItem = itemManager.getItem(itemId);
int hadNums = 0;
if(hadItem !=null){
@ -1480,29 +1481,30 @@ public class ItemUtil {
//特权加成收益计算
public static int privilegeAdd(User user,int reason,int itemType,int sourceNum){
int vipLevel = user.getPlayerInfoManager().getVipLevel();
SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel);
Map<Integer, Integer> privilegeMap = sVipLevelConfig.getPrivilegeMap();
// int vipLevel = user.getPlayerInfoManager().getVipLevel();
// SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel);
// Map<Integer, Integer> privilegeMap = sVipLevelConfig.getPrivilegeMap();
if(reason == BIReason.ADVENTURE_BASE_REWARD){
if(itemType == Global.EXP){
sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum,VipPrivilegeType.ADVENTURE_EXP_REWARD);
sourceNum = parseTheValueByPrivilegeMap(user,sourceNum,VipPrivilegeType.ADVENTURE_EXP_REWARD);
return sourceNum;
}
sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum, VipPrivilegeType.ADVENTURE_BASE_REWARD);
sourceNum = parseTheValueByPrivilegeMap(user,sourceNum, VipPrivilegeType.ADVENTURE_BASE_REWARD);
}
if(reason == BIReason.ADVENTURE_BASE_REWARD || reason == BIReason.ADVENTURE_RANDOM_REWARDD ){
if(itemType == GlobalItemType.MINERAL){
sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum,VipPrivilegeType.ADVENTURE_MINERAL_REWARD);
sourceNum = parseTheValueByPrivilegeMap(user,sourceNum,VipPrivilegeType.ADVENTURE_MINERAL_REWARD);
}else if(itemType == GlobalItemType.RUNNE){
sourceNum = parseTheValueByPrivilegeMap(privilegeMap,sourceNum,VipPrivilegeType.ADVENTURE_RUNNE_REWARD);
sourceNum = parseTheValueByPrivilegeMap(user,sourceNum,VipPrivilegeType.ADVENTURE_RUNNE_REWARD);
}
}
return sourceNum;
}
private static int parseTheValueByPrivilegeMap( Map<Integer, Integer> privilegeMap,int sourceNum,int privigeId){
Integer privigeValue = privilegeMap.get(privigeId);
if(privigeValue!=null){
private static int parseTheValueByPrivilegeMap(User user,int sourceNum,int privigeId){
int privigeValue = PlayerLogic.getInstance().getMaxCountByPrivilegeType(user,privigeId);
// Integer privigeValue = privilegeMap.get(privigeId);
if(privigeValue!=0){
SPrivilegeTypeConfig sPrivilegeTypeConfig = SPrivilegeTypeConfig.getsPrivilegeTypeConfigMap().get(privigeId);
int dataType = sPrivilegeTypeConfig.getIfFloat();
if(dataType == GlobalsDef.PERCENT_TYPE){

View File

@ -3,10 +3,7 @@ package config;
import manager.STableManager;
import manager.Table;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.*;
@Table(name ="PrivilegeTypeConfig")
public class SPrivilegeTypeConfig implements BaseConfig {
@ -32,12 +29,16 @@ public class SPrivilegeTypeConfig implements BaseConfig {
private static Map<Integer,SPrivilegeTypeConfig> sPrivilegeTypeConfigMap;
public static Map<Integer,Map<Integer,Map<Integer,Integer>>> conditionMap;
public static Map<Integer, List<SPrivilegeTypeConfig>> privilegeByType;
@Override
public void init() throws Exception {
sPrivilegeTypeConfigMap = STableManager.getConfig(SPrivilegeTypeConfig.class);
conditionMap = new HashMap<>();
privilegeByType = new HashMap<>();
for (Map.Entry<Integer,SPrivilegeTypeConfig> entry:sPrivilegeTypeConfigMap.entrySet()){
privilegeByType.computeIfAbsent(entry.getValue().getPrivilegeType(),n->new ArrayList<>()).add(entry.getValue());
conditionMap.computeIfAbsent(entry.getValue().getUnlockType(),n->new HashMap<>()).computeIfAbsent(entry.getKey(),n->new TreeMap<>());
if(entry.getValue().getCondition()!=null){
for(int[] cond:entry.getValue().getCondition()){