back_recharge
parent
815cfcd3c4
commit
80aa815e76
|
@ -0,0 +1,2 @@
|
|||
Id ComonpentsId Stage Cost BaseAttribute
|
||||
int int int mut,int#int,2 mut,int#int,2
|
|
@ -0,0 +1,58 @@
|
|||
Id OpenRules ComonpentList
|
||||
int mut,int#int,2 mut,int#int,1
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
||||
0 null null
|
|
@ -0,0 +1,2 @@
|
|||
Id DifferDemonsId SkillId Cost
|
||||
int int int mut,int#int,2
|
|
@ -1,58 +1,26 @@
|
|||
Id PropertyId Name Info
|
||||
int int string string
|
||||
1 1 Hp 生命值
|
||||
2 2 Attack 攻击力
|
||||
3 3 PhysicalDefence 护甲
|
||||
4 4 MagicDefence 魔抗
|
||||
5 5 Speed 速度
|
||||
6 51 DamageBocusFactor 伤害加成百分比
|
||||
7 52 DamageReduceFactor 伤害减免百分比
|
||||
8 53 Hit 效果命中率
|
||||
9 54 Dodge 效果抵抗率
|
||||
10 55 CritFactor 暴击率
|
||||
11 56 CritDamageFactor 暴伤
|
||||
12 57 TreatFacter 回复系数
|
||||
13 101 FireDamageBonusFactor 火攻(%)
|
||||
14 102 WindDamageBonusFactor 风攻(%)
|
||||
15 103 WaterDamageBonusFactor 水攻(%)
|
||||
16 104 LandDamageBonusFactor 地攻(%)
|
||||
17 105 LightDamageBonusFactor 光攻(%)
|
||||
18 106 DarkDamageBonusFactor 暗攻(%)
|
||||
19 107 FireDamageReduceFactor 火抗(%)
|
||||
20 108 WindDamageReduceFactor 风抗(%)
|
||||
21 109 WaterDamageReduceFactor 水抗(%)
|
||||
22 110 LandDamageReduceFactor 地抗(%)
|
||||
23 111 LightDamageReduceFactor 光抗(%)
|
||||
24 112 DarkDamageReduceFactor 暗抗(%)
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
0 null
|
||||
Id PropertyId Style Score
|
||||
int int int float
|
||||
1 1 1 0
|
||||
2 2 1 10
|
||||
3 3 1 5
|
||||
4 4 1 5
|
||||
5 5 1 5
|
||||
6 51 2 0
|
||||
7 52 2 0
|
||||
8 53 2 5
|
||||
9 54 2 5
|
||||
10 55 2 5
|
||||
11 56 2 0
|
||||
12 57 2 0
|
||||
13 101 2 30
|
||||
14 102 2 30
|
||||
15 103 2 30
|
||||
16 104 2 30
|
||||
17 105 2 30
|
||||
18 106 2 30
|
||||
19 107 2 30
|
||||
20 108 2 30
|
||||
21 109 2 30
|
||||
22 110 2 30
|
||||
23 111 2 30
|
||||
24 112 2 30
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.ljsd.jieling.config;
|
||||
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
|
||||
|
@ -9,7 +10,7 @@ import java.util.TreeMap;
|
|||
|
||||
@Table(name = "HeroRankupConfig")
|
||||
public class SCHeroRankUpConfig implements BaseConfig{
|
||||
public static Map<Integer,Map<Integer,SCHeroRankUpConfig>> scHeroRankUpConfigByType;
|
||||
public static Map<Integer,Map<Integer,Map<Integer,SCHeroRankUpConfig>>> scHeroRankUpConfigByStar;
|
||||
|
||||
private int id;
|
||||
|
||||
|
@ -27,26 +28,30 @@ public class SCHeroRankUpConfig implements BaseConfig{
|
|||
|
||||
private int consumeMaterial[][];
|
||||
|
||||
private int star;
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
Map<Integer,Map<Integer,SCHeroRankUpConfig>> result = new HashMap<>();
|
||||
Map<Integer,Map<Integer,Map<Integer,SCHeroRankUpConfig>>> result = new HashMap<>();
|
||||
Map<Integer, SCHeroRankUpConfig> config = STableManager.getConfig(SCHeroRankUpConfig.class);
|
||||
for(SCHeroRankUpConfig scHeroRankUpConfig: config.values()){
|
||||
int type = scHeroRankUpConfig.getType();
|
||||
if(!result.containsKey(type)){
|
||||
result.put(type,new TreeMap<>());
|
||||
}
|
||||
if(type == 1){
|
||||
result.get(type).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig);
|
||||
}else{
|
||||
result.get(type).put(scHeroRankUpConfig.getLimitStar(),scHeroRankUpConfig);
|
||||
if(!result.get(type).containsKey(scHeroRankUpConfig.getStar())){
|
||||
result.get(type).put(scHeroRankUpConfig.getStar(),new HashMap<>());
|
||||
}
|
||||
if(type == GlobalsDef.UP_STAR_TYPE){
|
||||
result.get(type).get(scHeroRankUpConfig.getStar()).put(scHeroRankUpConfig.getLimitStar(),scHeroRankUpConfig);
|
||||
}
|
||||
scHeroRankUpConfigByType = result;
|
||||
result.get(type).get(scHeroRankUpConfig.getStar()).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig);
|
||||
}
|
||||
scHeroRankUpConfigByStar = result;
|
||||
}
|
||||
|
||||
public static Map<Integer, SCHeroRankUpConfig> getScHeroRankUpConfigByType(int type) {
|
||||
return scHeroRankUpConfigByType.get(type);
|
||||
public static Map<Integer, SCHeroRankUpConfig> getScHeroRankUpConfigByType(int type,int heroInitStar) {
|
||||
return scHeroRankUpConfigByStar.get(type).get(heroInitStar);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
|
@ -80,4 +85,8 @@ public class SCHeroRankUpConfig implements BaseConfig{
|
|||
public int[][] getConsumeMaterial() {
|
||||
return consumeMaterial;
|
||||
}
|
||||
|
||||
public int getStar() {
|
||||
return star;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package com.ljsd.jieling.config;
|
||||
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(name ="DifferDemonsComonpentsConfig")
|
||||
public class SDifferDemonsComonpentsConfig implements BaseConfig {
|
||||
|
||||
private int id;
|
||||
|
||||
private int comonpentsId;
|
||||
|
||||
private int stage;
|
||||
|
||||
private int[][] cost;
|
||||
|
||||
private int[][] baseAttribute;
|
||||
|
||||
private static Map<Integer,Map<Integer,SDifferDemonsComonpentsConfig>> sDifferDemonsComonpentsConfig;
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
Map<Integer,Map<Integer,SDifferDemonsComonpentsConfig>> sDifferDemonsComonpentsConfigTmp = new HashMap<>();
|
||||
Map<Integer, SDifferDemonsComonpentsConfig> config = STableManager.getConfig(SDifferDemonsComonpentsConfig.class);
|
||||
for(SDifferDemonsComonpentsConfig sDifferDemonsComonpentsConfig : config.values()){
|
||||
int comonpentsId = sDifferDemonsComonpentsConfig.getComonpentsId();
|
||||
int stage = sDifferDemonsComonpentsConfig.getStage();
|
||||
|
||||
if(!sDifferDemonsComonpentsConfigTmp.containsKey(comonpentsId)){
|
||||
sDifferDemonsComonpentsConfigTmp.put(comonpentsId,new HashMap<>());
|
||||
}
|
||||
sDifferDemonsComonpentsConfigTmp.get(comonpentsId).put(stage,sDifferDemonsComonpentsConfig);
|
||||
}
|
||||
sDifferDemonsComonpentsConfig = sDifferDemonsComonpentsConfigTmp;
|
||||
|
||||
}
|
||||
|
||||
public static Map<Integer,SDifferDemonsComonpentsConfig> getsDifferDemonsComonpentsConfigMap(int comonpentId) {
|
||||
return sDifferDemonsComonpentsConfig.get(comonpentId);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public int getComonpentsId() {
|
||||
return comonpentsId;
|
||||
}
|
||||
|
||||
public int getStage() {
|
||||
return stage;
|
||||
}
|
||||
|
||||
public int[][] getCost() {
|
||||
return cost;
|
||||
}
|
||||
|
||||
public int[][] getBaseAttribute() {
|
||||
return baseAttribute;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.ljsd.jieling.config;
|
||||
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(name ="DifferDemonsConfig")
|
||||
public class SDifferDemonsConfig implements BaseConfig {
|
||||
|
||||
private int id;
|
||||
|
||||
private int[][] openRules;
|
||||
|
||||
private int[] comonpentList;
|
||||
|
||||
private static Map<Integer,SDifferDemonsConfig> sDifferDemonsConfigMap;
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
sDifferDemonsConfigMap= STableManager.getConfig(SDifferDemonsConfig.class);
|
||||
}
|
||||
|
||||
public static SDifferDemonsConfig getsDifferDemonsConfigByPokenID(int pokenmonId) {
|
||||
return sDifferDemonsConfigMap.get(pokenmonId);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public int[][] getOpenRules() {
|
||||
return openRules;
|
||||
}
|
||||
|
||||
public int[] getComonpentList() {
|
||||
return comonpentList;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package com.ljsd.jieling.config;
|
||||
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(name ="DifferDemonsStageConfig")
|
||||
public class SDifferDemonsStageConfig implements BaseConfig {
|
||||
|
||||
private int id;
|
||||
|
||||
private int differDemonsId;
|
||||
|
||||
private int skillId;
|
||||
|
||||
private int[][] cost;
|
||||
|
||||
private int comonpentPreStage;
|
||||
|
||||
private static Map<Integer,Map<Integer,SDifferDemonsStageConfig>> sDifferDemonsStageConfigMap;
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
Map<Integer,Map<Integer,SDifferDemonsStageConfig>> sDifferDemonsStageConfigMapTmp = new HashMap<>();
|
||||
Map<Integer, SDifferDemonsStageConfig> config = STableManager.getConfig(SDifferDemonsStageConfig.class);
|
||||
for(SDifferDemonsStageConfig sDifferDemonsStageConfig : config.values()){
|
||||
int comonpentPreStage = sDifferDemonsStageConfig.getComonpentPreStage();
|
||||
int differDemonsId = sDifferDemonsStageConfig.getDifferDemonsId();
|
||||
if(!sDifferDemonsStageConfigMapTmp.containsKey(differDemonsId)){
|
||||
sDifferDemonsStageConfigMapTmp.put(differDemonsId,new HashMap<>());
|
||||
}
|
||||
sDifferDemonsStageConfigMapTmp.get(differDemonsId).put(comonpentPreStage,sDifferDemonsStageConfig);
|
||||
}
|
||||
sDifferDemonsStageConfigMap = sDifferDemonsStageConfigMapTmp;
|
||||
}
|
||||
|
||||
public static Map<Integer, SDifferDemonsStageConfig> getsDifferDemonsStageConfigMap(int pokenmonId) {
|
||||
return sDifferDemonsStageConfigMap.get(pokenmonId);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public int getDifferDemonsId() {
|
||||
return differDemonsId;
|
||||
}
|
||||
|
||||
public int getSkillId() {
|
||||
return skillId;
|
||||
}
|
||||
|
||||
public int[][] getCost() {
|
||||
return cost;
|
||||
}
|
||||
|
||||
public int getComonpentPreStage() {
|
||||
return comonpentPreStage;
|
||||
}
|
||||
}
|
|
@ -60,11 +60,14 @@ public class SGameSetting implements BaseConfig {
|
|||
return actionPowerRormula;
|
||||
}
|
||||
|
||||
public float calSpeed(float speed, int level){
|
||||
public float calSpeed(float speed, int breakTimes){
|
||||
if(breakTimes == 0){
|
||||
return 0;
|
||||
}
|
||||
float result = speed;
|
||||
int length = speedFormula.length;
|
||||
for(int i=0;i< speedFormula.length;i++){
|
||||
double pow = Math.pow(level, --length);
|
||||
double pow = Math.pow(breakTimes, --length);
|
||||
result += speedFormula[i]*pow;
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -16,6 +16,8 @@ public class SHeroLevlConfig implements BaseConfig{
|
|||
|
||||
private float characterLevelPara;
|
||||
|
||||
private float speedLevelPara;
|
||||
|
||||
private int[][] consume;
|
||||
|
||||
|
||||
|
@ -49,4 +51,8 @@ public class SHeroLevlConfig implements BaseConfig{
|
|||
public int[][] getConsume() {
|
||||
return consume;
|
||||
}
|
||||
|
||||
public float getSpeedLevelPara() {
|
||||
return speedLevelPara;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,11 @@ public class SItem implements BaseConfig {
|
|||
private int itemType;
|
||||
private int itemBaseType; //道具类型(该道具在哪个背包显示)
|
||||
private int quantity;
|
||||
private boolean isStacking;
|
||||
private int[] price;
|
||||
private int useType; //使用类型0不使用 1掉落组 2N选1
|
||||
private int rewardGroup;
|
||||
private int usePerCount;
|
||||
private boolean isopen;
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
|
@ -45,7 +49,23 @@ public class SItem implements BaseConfig {
|
|||
return quantity;
|
||||
}
|
||||
|
||||
public boolean isStacking() {
|
||||
return isStacking;
|
||||
public int[] getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public int getUseType() {
|
||||
return useType;
|
||||
}
|
||||
|
||||
public int getRewardGroup() {
|
||||
return rewardGroup;
|
||||
}
|
||||
|
||||
public int getUsePerCount() {
|
||||
return usePerCount;
|
||||
}
|
||||
|
||||
public boolean isIsopen() {
|
||||
return isopen;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.ljsd.jieling.config;
|
|||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(name ="PropertyConfig")
|
||||
|
@ -12,16 +13,29 @@ public class SPropertyConfig implements BaseConfig {
|
|||
|
||||
private int propertyId;
|
||||
|
||||
private String name;
|
||||
private int style;
|
||||
|
||||
private String info;
|
||||
private float score;
|
||||
|
||||
|
||||
private static Map<Integer,SPropertyConfig> sPropertyConfigByPIDMap;
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
Map<Integer,SPropertyConfig> sPropertyConfigByPIDMapTmp = new HashMap<>();
|
||||
Map<Integer, SPropertyConfig> config = STableManager.getConfig(SPropertyConfig.class);
|
||||
for(SPropertyConfig sPropertyConfig : config.values()){
|
||||
int propertyId = sPropertyConfig.getPropertyId();
|
||||
sPropertyConfigByPIDMapTmp.put(propertyId,sPropertyConfig);
|
||||
}
|
||||
sPropertyConfigByPIDMapTmp = sPropertyConfigByPIDMap;
|
||||
|
||||
}
|
||||
|
||||
public static SPropertyConfig getsPropertyConfigByPID(int propertyId) {
|
||||
return sPropertyConfigByPIDMap.get(propertyId);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
|
@ -31,13 +45,11 @@ public class SPropertyConfig implements BaseConfig {
|
|||
return propertyId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
public int getStyle() {
|
||||
return style;
|
||||
}
|
||||
|
||||
public String getInfo() {
|
||||
return info;
|
||||
public float getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.config;
|
|||
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -26,6 +27,8 @@ public class SRewardGroup implements BaseConfig {
|
|||
@Override
|
||||
public void init() throws Exception {
|
||||
sRewardItemMap = STableManager.getConfig(SRewardGroup.class);
|
||||
ItemUtil.initDropReward();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.ljsd.jieling.config;
|
|||
|
||||
import com.ljsd.jieling.logic.STableManager;
|
||||
import com.ljsd.jieling.logic.Table;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -11,13 +12,14 @@ public class SRewardItem implements BaseConfig {
|
|||
private int id;
|
||||
private int itemId;
|
||||
private int chance; //获取概率
|
||||
private int growChance; //成长概率 针对特殊处理,如果不获取,则获取概率增加
|
||||
private float growChance; //成长概率 针对特殊处理,如果不获取,则获取概率增加
|
||||
private int randomMin; //获取数量最小值
|
||||
private int randomMax; //获取数量最大值
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
sDropMap = STableManager.getConfig(SRewardItem.class);
|
||||
ItemUtil.initDropReward();
|
||||
}
|
||||
|
||||
|
||||
|
@ -37,7 +39,7 @@ public class SRewardItem implements BaseConfig {
|
|||
return chance;
|
||||
}
|
||||
|
||||
public int getGrowChance() {
|
||||
public float getGrowChance() {
|
||||
return growChance;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,4 +13,12 @@ public interface GlobalsDef {
|
|||
int MAGIC_DEFENCE_TYPE =4;
|
||||
int SPEED_TYPE =5;
|
||||
|
||||
//
|
||||
int RANKUP_PARA_TYPE =1;
|
||||
int BREAK_PARA_TYPE =2;
|
||||
|
||||
// 属性加成类型
|
||||
int ABSOLUTE_TYPE =1; // 绝对值
|
||||
int PERCENT_TYPE =2; // 百分比
|
||||
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@ package com.ljsd.jieling.globals;
|
|||
|
||||
public interface GlobalItemType {
|
||||
//掉落物品类型
|
||||
int ALL_DROP = 0; //全部掉落
|
||||
int WEIGHT_DROP = 1; //随机掉落
|
||||
int SUCCESSIVELY_RANDOM = 2; // 依次随机
|
||||
int ALL_DROP = 1; //全部掉落
|
||||
int WEIGHT_DROP = 2; //随机掉落
|
||||
int SUCCESSIVELY_RANDOM = 3; // 依次随机
|
||||
|
||||
// 物品类型
|
||||
int GEM = 3; // 钻石Id(充值获得)
|
||||
|
@ -12,5 +12,10 @@ public interface GlobalItemType {
|
|||
int CARD = 1; // 卡牌
|
||||
int CARD_FRAGMENT = 2; // 卡牌碎片
|
||||
int EQUIP = 3; //装备
|
||||
int RANDOM_ITME = 5; // 随机道具
|
||||
|
||||
//物品使用类型
|
||||
int NO_USE = 0 ; //不使用
|
||||
int RANDOM_USE = 1; // 随机使用
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.ljsd.jieling.handler;
|
||||
|
||||
import com.ljsd.jieling.util.MailUtil;
|
||||
import com.ljsd.jieling.logic.Mail.MailLogic;
|
||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
|
@ -31,7 +31,7 @@ public class GetAllMailHandler extends BaseHandler {
|
|||
int msgIndex = netData.getIndex();
|
||||
LOGGER.info("processMessage->uid={},token={},msgId={},msgIndex={}",
|
||||
userId, token,msgId,msgIndex);
|
||||
List<CommonProto.Mail> allUserMail = MailUtil.getInstance().getAllUserMail(userId);
|
||||
List<CommonProto.Mail> allUserMail = MailLogic.getInstance().getAllUserMail(userId);
|
||||
PlayerInfoProto.GetAllMailInfoResponse getPlayerInfoResponse = PlayerInfoProto.GetAllMailInfoResponse.newBuilder()
|
||||
.addAllMialList(allUserMail)
|
||||
.build();
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package com.ljsd.jieling.handler;
|
||||
|
||||
import com.ljsd.jieling.logic.hero.HeroLogic;
|
||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.HeroInfoProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@Component
|
||||
public class HeroComposeHandler extends BaseHandler{
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return MessageTypeProto.MessageType.HERO_COMPOSE_REQUEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(ISession iSession, PacketNetData netData) throws Exception {
|
||||
byte[] bytes = netData.parseClientProtoNetData();
|
||||
HeroInfoProto.HeroComposeRequest heroComposeRequest = HeroInfoProto.HeroComposeRequest.parseFrom(bytes);
|
||||
CommonProto.Item item = heroComposeRequest.getItem();
|
||||
HeroLogic.getInstance().heroCompose(iSession,item);
|
||||
|
||||
}
|
||||
}
|
|
@ -4,8 +4,7 @@ import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
|||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.protocols.PlayerInfoProto;
|
||||
import com.ljsd.jieling.util.MailUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.logic.Mail.MailLogic;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -31,7 +30,7 @@ public class ReadMailHandler extends BaseHandler {
|
|||
userId, token,msgId,msgIndex);
|
||||
PlayerInfoProto.MailReadRequest mailReadRequest = PlayerInfoProto.MailReadRequest.parseFrom(message);
|
||||
String mailId = mailReadRequest.getMailId();
|
||||
MailUtil.getInstance().readMail(iSession,mailId);
|
||||
MailLogic.getInstance().readMail(iSession,mailId);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import com.ljsd.jieling.network.session.ISession;
|
|||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.protocols.PlayerInfoProto;
|
||||
import com.ljsd.jieling.util.MailUtil;
|
||||
import com.ljsd.jieling.logic.Mail.MailLogic;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -34,7 +34,7 @@ public class TakeMailHandler extends BaseHandler {
|
|||
userId, token,msgId,msgIndex);
|
||||
PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message);
|
||||
List<String> mailIdsList = takeMailRequest.getMailIdsList();
|
||||
CommonProto.Drop.Builder dropBuilder = MailUtil.getInstance().takeMail(mailIdsList, userId);
|
||||
CommonProto.Drop.Builder dropBuilder = MailLogic.getInstance().takeMail(mailIdsList, userId);
|
||||
PlayerInfoProto.TakeMailResponse takeMailResponse = PlayerInfoProto.TakeMailResponse.newBuilder()
|
||||
.setDrop(dropBuilder)
|
||||
.buildPartial();
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package com.ljsd.jieling.handler;
|
||||
|
||||
import com.ljsd.jieling.globals.Global;
|
||||
import com.ljsd.jieling.logic.dao.User;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.item.ItemLogic;
|
||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.protocols.PlayerInfoProto;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class UseAndPriceItemHandler extends BaseHandler {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(UseAndPriceItemHandler.class);
|
||||
|
||||
@Override
|
||||
public MessageTypeProto.MessageType getMessageCode() {
|
||||
return MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_REQUEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(ISession iSession, PacketNetData netData) throws Exception {
|
||||
PlayerInfoProto.UseAndPriceItemRequest useAndPriceItemRequest
|
||||
= PlayerInfoProto.UseAndPriceItemRequest.parseFrom(netData.parseClientProtoNetData());
|
||||
int type = useAndPriceItemRequest.getType();
|
||||
CommonProto.Item item = useAndPriceItemRequest.getItem();
|
||||
if (type == 0){
|
||||
ItemLogic.getInstance().useItem(iSession,item);
|
||||
}else{
|
||||
ItemLogic.getInstance().priceItem(iSession,item);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,197 @@
|
|||
package com.ljsd.jieling.logic.Mail;
|
||||
|
||||
import com.ljsd.jieling.globals.Global;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.util.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class MailLogic {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MailLogic.class);
|
||||
|
||||
private MailLogic(){}
|
||||
|
||||
public static class Instance {
|
||||
public final static MailLogic instance = new MailLogic();
|
||||
}
|
||||
|
||||
public static MailLogic getInstance() {
|
||||
return MailLogic.Instance.instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户的所有邮件
|
||||
* @param userId
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<CommonProto.Mail> getAllUserMail(int userId) throws Exception {
|
||||
List<CommonProto.Mail> mailList = new CopyOnWriteArrayList<>();
|
||||
User user = UserManager.getUser(userId);
|
||||
MailManager mailManager = user.getMailManager();
|
||||
Map<String, Mail> mailMap = mailManager.getMailMap();
|
||||
// 获取系统邮件
|
||||
List<SystemMail> systemMail = getSystemMail();
|
||||
|
||||
systemMailToUserMail(systemMail,mailMap,userId);
|
||||
if (mailMap.size() ==0){
|
||||
return mailList;
|
||||
}
|
||||
List<Mail> cMailList = new CopyOnWriteArrayList<>();
|
||||
for (Map.Entry<String,Mail> entry :mailMap.entrySet()){
|
||||
Mail cMail = entry.getValue();
|
||||
int nowTime = (int)(TimeUtils.now()/1000);
|
||||
if (cMail.getEffectiveTime() != 0 && (nowTime - cMail.getSendTime()) > cMail.getEffectiveTime()){
|
||||
mailManager.removeMail(cMail.getId());
|
||||
continue;
|
||||
}
|
||||
cMailList.add(cMail);
|
||||
}
|
||||
//超过邮件上限, 删除时间最早的一封
|
||||
if (cMailList.size() > Global.MAIL_BOX_CAPACITY){
|
||||
Collections.sort(cMailList, Comparator.comparingInt(Mail::getSendTime));
|
||||
for(int i = 0; i < (cMailList.size()-Global.MAIL_BOX_CAPACITY); i++){
|
||||
cMailList.remove(0);
|
||||
mailManager.removeMail(cMailList.get(0).getId());
|
||||
}
|
||||
}
|
||||
getAllMailProtoList(cMailList,mailList);
|
||||
return mailList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将系统邮件生成用户邮件
|
||||
* @param systemMailList
|
||||
* @param mailMap
|
||||
*/
|
||||
private void systemMailToUserMail(List<SystemMail> systemMailList, Map<String, Mail> mailMap,int userId) throws Exception {
|
||||
MailingSystem mailingSystem = MailingSystemManager.getMailingSystem();
|
||||
SysMailManager sysMailManager = mailingSystem.getSysMailManager();
|
||||
SysMail sysMail = sysMailManager.getSysMail(userId);
|
||||
User user = UserManager.getUser(userId);
|
||||
long createTime = user.getPlayerInfoManager().getCreateTime();
|
||||
String clientVersion = user.getPlayerInfoManager().getClientVersion();
|
||||
List<Integer> sysMailIds = sysMail.getSysMailIds();
|
||||
for (SystemMail systemMail:systemMailList){
|
||||
int systemId = systemMail.getId();
|
||||
if (systemMail.getUserList().size() !=0 || !systemMail.getUserList().contains(userId)){
|
||||
continue;
|
||||
}
|
||||
if (sysMailIds.contains(systemId)){
|
||||
continue;
|
||||
}
|
||||
if (createTime >= systemMail.getRegisterEndTime() && systemMail.getRegisterEndTime() != 0) {
|
||||
continue;
|
||||
}
|
||||
String[] split = systemMail.getVersion().split(",");
|
||||
Set<String> version = new HashSet<>(Arrays.asList(split));
|
||||
if (!version.contains(clientVersion) || !"0".equals(systemMail.getVersion())) {
|
||||
continue;
|
||||
}
|
||||
sysMailIds.add(systemId);
|
||||
sysMail.setSysMailIds(sysMailIds);
|
||||
sysMailManager.addSystemMail(sysMail);
|
||||
initUserMail(userId,systemMail,user.getMailManager(),mailMap);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initUserMail(int userId, SystemMail systemMail,MailManager mailManager,Map<String, Mail> mailMap) throws Exception {
|
||||
int sendTime = (int) (TimeUtils.now()/1000);
|
||||
Mail mail = new Mail(userId,systemMail.getTitle(),systemMail.getContent(),systemMail.getReward(),sendTime,systemMail.getEffectiveTime(),systemMail.getName(),Global.MAIL_TYPE_SYS);
|
||||
mailManager.addMail(mail);
|
||||
mailMap.put(mail.getId(),mail);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有系统邮件
|
||||
*
|
||||
*/
|
||||
private List<SystemMail> getSystemMail() {
|
||||
MailingSystem mailingSystem = MailingSystemManager.getMailingSystem();
|
||||
SystemMailManager systemMailManager = mailingSystem.getSystemMailManager();
|
||||
Map<Integer, SystemMail> systemMailMap = systemMailManager.getSystemMailMap();
|
||||
List<SystemMail> systemMailsList = new CopyOnWriteArrayList<>();
|
||||
int nowTime = (int)(TimeUtils.now()/1000);
|
||||
for (Map.Entry<Integer,SystemMail> entry:systemMailMap.entrySet()){
|
||||
SystemMail systemMail = entry.getValue();
|
||||
int time = nowTime + systemMail.getEffectiveTime();
|
||||
if (systemMail.getEffectiveTime() !=0 || nowTime > time){
|
||||
continue;
|
||||
}
|
||||
systemMailsList.add(systemMail);
|
||||
}
|
||||
return systemMailsList;
|
||||
}
|
||||
|
||||
private void getAllMailProtoList(List<Mail> cMailList, List<CommonProto.Mail> mailList) {
|
||||
for (Mail mail :cMailList){
|
||||
mailList.add(CBean2Proto.getMail(mail));
|
||||
}
|
||||
}
|
||||
|
||||
// 读取邮件
|
||||
public void readMail(ISession iSession, String mailId) throws Exception {
|
||||
int msgId = MessageTypeProto.MessageType.GET_ALL_MAIL_INFO_RESPONSE_VALUE;
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
MailManager mailManager = user.getMailManager();
|
||||
Mail mail = mailManager.getMailMap().get(mailId);
|
||||
if (mail == null){
|
||||
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
|
||||
}
|
||||
mail.setState(Global.MAIL_STATE_READ);
|
||||
mailManager.addMail(mail);
|
||||
MessageUtil.sendMessage(iSession, 1,msgId, null, true);
|
||||
}
|
||||
|
||||
//领取附件
|
||||
public CommonProto.Drop.Builder takeMail(List<String> mailIdsList, int userId) throws Exception {
|
||||
User user = UserManager.getUser(userId);
|
||||
MailManager mailManager = user.getMailManager();
|
||||
StringBuilder mailItem = new StringBuilder();
|
||||
for (String mailId : mailIdsList){
|
||||
Mail mail = mailManager.getMail(mailId);
|
||||
if (mail == null){
|
||||
continue;
|
||||
}
|
||||
if (mailItem.length() == 0){
|
||||
mailItem = new StringBuilder(mail.getMailItem());
|
||||
}else{
|
||||
mailItem.append("|").append(mail.getMailItem());
|
||||
}
|
||||
|
||||
}
|
||||
int[][] itemArr = StringUtil.parseFiledInt2(mailItem.toString());
|
||||
CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr);
|
||||
return dropBuilder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送系统邮件
|
||||
*/
|
||||
public void sendSystemMail(String title,List<Integer> userList,String content,int sendTime, String reward,
|
||||
int effectiveTime,String sendName,long registerEndTime,String version) throws Exception {
|
||||
MailingSystem mailingSystem = MailingSystemManager.getMailingSystem();
|
||||
String name = mailingSystem.getSystemMailManager().getName();
|
||||
AutoIncrementManager autoIncrementManager = mailingSystem.getcAutoIncrementManager();
|
||||
autoIncrementManager.addAutoIncrement(new AutoIncrement(name));
|
||||
SystemMailManager systemMailManager = mailingSystem.getSystemMailManager();
|
||||
int id = getSystemMailId(autoIncrementManager,name);
|
||||
systemMailManager.addSystemMail(new SystemMail(id,title,userList,content,sendTime,reward,effectiveTime,sendName,registerEndTime,version));
|
||||
MailingSystemManager.ljsdMongoTemplate.lastUpdate();
|
||||
}
|
||||
|
||||
private static int getSystemMailId(AutoIncrementManager autoIncrementManager,String name) throws Exception {
|
||||
AutoIncrement autoIncrement = autoIncrementManager.getAutoIncrement(name);
|
||||
int cnt = autoIncrement.getCnt();
|
||||
autoIncrement.setCnt(cnt+1);
|
||||
return cnt;
|
||||
}
|
||||
}
|
|
@ -52,7 +52,7 @@ public class Equip extends MongoBase {
|
|||
this.secondValueByIdMap = getSecondValue(sEquipConfig.getPool(),secondValue);
|
||||
}
|
||||
|
||||
public Map<Integer,Integer> getSecondValue(int poolId,int nums){
|
||||
private Map<Integer,Integer> getSecondValue(int poolId,int nums){
|
||||
Map<Integer,Integer> result = new HashMap<>();
|
||||
List<SEquipPropertyPool> sEquipPropertyPoolList = SEquipPropertyPool.getSEquipPropertyPool(poolId);
|
||||
int totalWeight = 0;
|
||||
|
@ -114,4 +114,12 @@ public class Equip extends MongoBase {
|
|||
updateString("heroId",heroId);
|
||||
this.heroId = heroId;
|
||||
}
|
||||
|
||||
public Map<Integer, Integer> getPropertyValueByIdMap() {
|
||||
return propertyValueByIdMap;
|
||||
}
|
||||
|
||||
public Map<Integer, Integer> getSecondValueByIdMap() {
|
||||
return secondValueByIdMap;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.ljsd.jieling.logic.dao;
|
|||
|
||||
|
||||
import com.ljsd.common.mogodb.LjsdMongoTemplate;
|
||||
import com.ljsd.jieling.util.MailUtil;
|
||||
import com.ljsd.jieling.logic.Mail.MailLogic;
|
||||
import com.ljsd.jieling.util.TimeUtils;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
|
||||
|
@ -28,7 +28,7 @@ public class MailingSystemManager {
|
|||
int nowTime = (int)(TimeUtils.now()/1000);
|
||||
mailingSystem.getSysMailManager().addSystemMail(new SysMail(1));
|
||||
MailingSystemManager.ljsdMongoTemplate.lastUpdate();
|
||||
MailUtil.getInstance().sendSystemMail("开服邮件",new ArrayList<>(),"DSKGSD",nowTime,"1#5000|2#100",30*24*60*60,"IDIP",0,"0");
|
||||
MailLogic.getInstance().sendSystemMail("开服邮件",new ArrayList<>(),"DSKGSD",nowTime,"1#5000|2#100",30*24*60*60,"IDIP",0,"0");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
package com.ljsd.jieling.logic.dao;
|
||||
|
||||
import com.ljsd.common.mogodb.MongoBase;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Pokemon extends MongoBase {
|
||||
|
||||
private int id;
|
||||
|
||||
private Map<Integer,Integer> comonpentsLevelMap; // 组件进阶信息
|
||||
|
||||
private int allStage;
|
||||
|
||||
public Pokemon(){}
|
||||
|
||||
public Pokemon(int id){
|
||||
this.id = id;
|
||||
this.comonpentsLevelMap = new HashMap<>();
|
||||
}
|
||||
|
||||
public void upComonpentLevel(int comonpentId) throws Exception {
|
||||
int level =1;
|
||||
Integer integer = this.comonpentsLevelMap.get(comonpentId);
|
||||
if( integer != null){
|
||||
level = integer+1 ;
|
||||
}
|
||||
updateString("comonpentsLevelMap."+comonpentId,level);
|
||||
this.comonpentsLevelMap.put(comonpentId,level);
|
||||
}
|
||||
|
||||
public int getAllStage() {
|
||||
return allStage;
|
||||
}
|
||||
|
||||
public void setAllStage(int allStage) throws Exception {
|
||||
updateString("allStage."+allStage,allStage);
|
||||
this.allStage = allStage;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Map<Integer, Integer> getComonpentsLevelMap() {
|
||||
return comonpentsLevelMap;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.ljsd.jieling.logic.dao;
|
||||
|
||||
import com.ljsd.common.mogodb.MongoBase;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class PokemonManager extends MongoBase {
|
||||
private Map<Integer,Pokemon> pokemonMap;
|
||||
|
||||
|
||||
public void addPokemon(Pokemon pokemon) throws Exception {
|
||||
updateString("pokemonMap." + pokemon.getId(),pokemon);
|
||||
pokemonMap.put(pokemon.getId(),pokemon);
|
||||
}
|
||||
|
||||
|
||||
public Map<Integer, Pokemon> getPokemonMap() {
|
||||
return pokemonMap;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,8 @@ public class User extends MongoRoot {
|
|||
|
||||
private AdventureManager adventureManager;
|
||||
|
||||
private PokemonManager pokemonManager;
|
||||
|
||||
|
||||
|
||||
public User(int uid, PlayerManager playerManager, ItemManager itemManager,
|
||||
|
@ -37,6 +39,7 @@ public class User extends MongoRoot {
|
|||
this.mailManager = new MailManager();
|
||||
this.equipManager = new EquipManager();
|
||||
this.adventureManager = new AdventureManager();
|
||||
this.pokemonManager = new PokemonManager();
|
||||
|
||||
//綁定关系
|
||||
this.playerManager.init(this, "playerManager", false);
|
||||
|
@ -47,6 +50,7 @@ public class User extends MongoRoot {
|
|||
this.mailManager.init(this,"mailManager",false);
|
||||
this.equipManager.init(this,"equipManager",false);
|
||||
this.adventureManager.init(this,"adventureManager",false);
|
||||
this.pokemonManager.init(this,"pokemonManager",false);
|
||||
}
|
||||
|
||||
public User(){
|
||||
|
@ -57,6 +61,7 @@ public class User extends MongoRoot {
|
|||
this.mapManager = new MapManager();
|
||||
this.equipManager = new EquipManager();
|
||||
this.adventureManager = new AdventureManager();
|
||||
this.pokemonManager = new PokemonManager();
|
||||
//綁定关系
|
||||
playerManager.init(this, "playerManager", false);
|
||||
itemManager.init(this, "itemManager", false);
|
||||
|
@ -64,6 +69,7 @@ public class User extends MongoRoot {
|
|||
mapManager.init(this, "mapManager", false);
|
||||
equipManager.init(this,"equipManager",false);
|
||||
adventureManager.init(this,"adventureManager",false);
|
||||
adventureManager.init(this,"pokemonManager",false);
|
||||
}
|
||||
|
||||
public static void init(LjsdMongoTemplate ljsdMongoTemplate) {
|
||||
|
@ -134,4 +140,8 @@ public class User extends MongoRoot {
|
|||
public AdventureManager getAdventureManager() {
|
||||
return adventureManager;
|
||||
}
|
||||
|
||||
public PokemonManager getPokemonManager() {
|
||||
return pokemonManager;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ public class CombatLogic {
|
|||
cacheHeroTid.add(templateId);
|
||||
myRecommendHeroSize++;
|
||||
}
|
||||
totalForce += HeroLogic.getInstance().calHeoForce(hero);
|
||||
totalForce += HeroLogic.getInstance().calHeoForce(user,hero);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,9 @@ package com.ljsd.jieling.logic.hero;
|
|||
import com.ljsd.GameApplication;
|
||||
import com.ljsd.jieling.config.*;
|
||||
import com.ljsd.jieling.core.GlobalsDef;
|
||||
import com.ljsd.jieling.globals.Global;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.logic.item.ItemLogic;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.HeroInfoProto;
|
||||
|
@ -13,6 +15,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class HeroLogic {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(HeroLogic.class);
|
||||
|
@ -113,13 +116,11 @@ public class HeroLogic {
|
|||
}
|
||||
if( itemType == 2) {
|
||||
Item item = itemManager.getItem(itemId);
|
||||
if (item == null){
|
||||
if (item == null) {
|
||||
item = itemManager.newItem(itemId, itemNum);
|
||||
}else{
|
||||
if(sItem.isStacking()){
|
||||
} else {
|
||||
item.setItemNum(item.getItemNum() + itemNum);
|
||||
}
|
||||
}
|
||||
items.add(CBean2Proto.getItem(item));
|
||||
}
|
||||
}
|
||||
|
@ -215,10 +216,11 @@ public class HeroLogic {
|
|||
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_LEVEL_RESPONSE_VALUE,"");
|
||||
return;
|
||||
}
|
||||
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
|
||||
|
||||
int oldLevel = hero.getLevel();
|
||||
//判断需要进行升级还是进行突破
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE);
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE,scHero.getStar());
|
||||
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldLevel);
|
||||
boolean isBreak =false;
|
||||
int[][] consume;
|
||||
|
@ -268,9 +270,15 @@ public class HeroLogic {
|
|||
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"");
|
||||
return;
|
||||
}
|
||||
int oldStar = targetHero.getStar();
|
||||
|
||||
int oldStar = targetHero.getStar();
|
||||
SCHero scHero = SCHero.getsCHero().get(targetHero.getTemplateId());
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE,scHero.getStar());
|
||||
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar);
|
||||
if( targetHero.getLevel() < scHeroRankUpConfig.getLimitLevel()){
|
||||
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"等级不够");
|
||||
return;
|
||||
}
|
||||
Map<Integer,SCHero.ConsumeMaterialInfo> consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1);
|
||||
boolean canUse = true;
|
||||
List<String> removeHeroIds = new ArrayList<>();
|
||||
|
@ -324,11 +332,10 @@ public class HeroLogic {
|
|||
}
|
||||
|
||||
if(!canUse){
|
||||
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"");
|
||||
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"所选英雄不符合");
|
||||
return;
|
||||
}
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE);
|
||||
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar);
|
||||
|
||||
int[][] consumeMaterial = scHeroRankUpConfig.getConsumeMaterial();
|
||||
boolean enoughCost = ItemUtil.itemCost(user, consumeMaterial);
|
||||
if(!enoughCost){
|
||||
|
@ -354,15 +361,48 @@ public class HeroLogic {
|
|||
}
|
||||
|
||||
//初始属性*(1+化境增长)*等级系数 + 初始属性*突破系数
|
||||
public Map<Integer,Integer> calHeroAllAttribute(Hero hero){
|
||||
Map<Integer,Integer> result = new HashMap<>();
|
||||
int templateId = hero.getTemplateId();
|
||||
SCHero scHero = SCHero.getsCHero().get(templateId);
|
||||
SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel());
|
||||
float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
|
||||
Map<Integer, Float> paraForHero = getParaForHero(hero);
|
||||
Map<Integer,Float> baseValueMap = new HashMap<>();
|
||||
baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE));
|
||||
baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE));
|
||||
baseValueMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.PHYSICAL_DEFENCE_TYPE));
|
||||
baseValueMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,getBaseValueByType(scHero,GlobalsDef.MAGIC_DEFENCE_TYPE));
|
||||
baseValueMap.put(GlobalsDef.SPEED_TYPE,getBaseValueByType(scHero,GlobalsDef.SPEED_TYPE));
|
||||
for(Map.Entry<Integer,Float> item : baseValueMap.entrySet()){
|
||||
Integer attributeType = item.getKey();
|
||||
Float heroBaseValue = item.getValue();
|
||||
if(attributeType == GlobalsDef.SPEED_TYPE){
|
||||
result.put (attributeType,(int)(heroBaseValue * sHeroLevlConfig.getSpeedLevelPara() + SGameSetting.getGameSetting().calSpeed(heroBaseValue, hero.getBreakId())));
|
||||
}
|
||||
result.put(attributeType,(int)(heroBaseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + heroBaseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f));
|
||||
}
|
||||
|
||||
public float calHeroAttribute(Hero hero,int type){
|
||||
return result;
|
||||
}
|
||||
public int calHeroAttribute(Hero hero,int type){
|
||||
//计算化境增长
|
||||
int templateId = hero.getTemplateId();
|
||||
SCHero scHero = SCHero.getsCHero().get(templateId);
|
||||
float baseValue = getBaseValueByType(scHero,type);
|
||||
SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel());
|
||||
float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara();
|
||||
Map<Integer, Float> paraForHero = getParaForHero(hero);
|
||||
if(type == GlobalsDef.SPEED_TYPE){
|
||||
return (int)(baseValue * sHeroLevlConfig.getSpeedLevelPara() + SGameSetting.getGameSetting().calSpeed(baseValue, hero.getBreakId()));
|
||||
}
|
||||
return (int)(baseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + baseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f);
|
||||
}
|
||||
|
||||
float characterLevelPara = SHeroLevlConfig.getsCHero().get(hero.getLevel()).getCharacterLevelPara();
|
||||
//计算化境增长
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypeOfStar = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE);
|
||||
private Map<Integer,Float> getParaForHero(Hero hero){
|
||||
Map<Integer,Float> result = new HashMap<>(2);
|
||||
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypeOfStar = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE,scHero.getStar());
|
||||
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByTypeOfStar.get(hero.getStar());
|
||||
float rankupPara =0.0f;
|
||||
if( scHeroRankUpConfig!=null ){
|
||||
|
@ -371,22 +411,18 @@ public class HeroLogic {
|
|||
//突破系数
|
||||
float breakPara = 0.0f;
|
||||
int heroLevel = hero.getLevel();
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypOfBreak = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE);
|
||||
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypOfBreak = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE,scHero.getStar());
|
||||
for( SCHeroRankUpConfig scHeroRankUpConfigTmp :scHeroRankUpConfigByTypOfBreak.values()){
|
||||
if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() ){
|
||||
if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() && hero.getBreakId()>= scHeroRankUpConfigTmp.getId()){
|
||||
breakPara = scHeroRankUpConfigTmp.getRankupPara();
|
||||
}
|
||||
if(heroLevel <= scHeroRankUpConfigTmp.getOpenLevel()){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(type == GlobalsDef.SPEED_TYPE){
|
||||
return SGameSetting.getGameSetting().calSpeed(baseValue,heroLevel);
|
||||
}
|
||||
|
||||
return baseValue * ( 1 + rankupPara/10000.f) + characterLevelPara * breakPara;
|
||||
|
||||
result.put(GlobalsDef.RANKUP_PARA_TYPE,rankupPara);
|
||||
result.put(GlobalsDef.BREAK_PARA_TYPE,breakPara);
|
||||
return result;
|
||||
}
|
||||
|
||||
private float getBaseValueByType(SCHero scHero,int type){
|
||||
|
@ -413,13 +449,42 @@ public class HeroLogic {
|
|||
}
|
||||
|
||||
|
||||
//todo 计算英雄战斗力 战斗力 = 生命*0.7 + (护甲 + 魔坑)*5 + 攻击 *10 + (暴击率 + 效果命中率 )*5 +(属性攻击率 + 属性防御率)*30
|
||||
public int calHeoForce(Hero hero){
|
||||
double heroBaseForce = calHeroAttribute(hero, GlobalsDef.HP_TYPE) * 0.7 + (calHeroAttribute(hero, GlobalsDef.PHYSICAL_DEFENCE_TYPE) + calHeroAttribute(hero, GlobalsDef.MAGIC_DEFENCE_TYPE)) * 5 + calHeroAttribute(hero, GlobalsDef.ATTACK_TYPE) * 10;
|
||||
//todo 计算装备加成
|
||||
float equipAddForce =0.0f;
|
||||
int result = (int) (heroBaseForce + equipAddForce);
|
||||
return result;
|
||||
public int calHeoForce(User user, Hero hero){
|
||||
Map<Integer, Integer> heroAllAttribute = calHeroAllAttribute(hero);
|
||||
Collection<String> values = hero.getEquipByPositionMap().values();
|
||||
EquipManager equipManager = user.getEquipManager();
|
||||
for(String equipId:values){
|
||||
Equip equip = equipManager.getEquipMap().get(equipId);
|
||||
Map<Integer, Integer> propertyValueByIdMap = equip.getPropertyValueByIdMap();
|
||||
Map<Integer, Integer> secondValueByIdMap = equip.getSecondValueByIdMap();
|
||||
combinedAttribute(propertyValueByIdMap,heroAllAttribute);
|
||||
combinedAttribute(secondValueByIdMap,heroAllAttribute);
|
||||
}
|
||||
double result = 0;
|
||||
for(Map.Entry<Integer, Integer> item : heroAllAttribute.entrySet()){
|
||||
Integer propertyId = item.getKey();
|
||||
Integer propertyValue = item.getValue();
|
||||
SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(propertyId);
|
||||
int style = sPropertyConfig.getStyle();
|
||||
float score = sPropertyConfig.getScore();
|
||||
if(style == GlobalsDef.PERCENT_TYPE){
|
||||
score = score/100;
|
||||
}
|
||||
result += propertyValue*score;
|
||||
}
|
||||
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
private void combinedAttribute(Map<Integer, Integer> otherAttriMaop,Map<Integer,Integer> heroAttributeMap){
|
||||
for(Map.Entry<Integer, Integer> item : otherAttriMaop.entrySet()){
|
||||
Integer propertyId = item.getKey();
|
||||
Integer propertyValue = item.getValue();
|
||||
if(heroAttributeMap.containsKey(propertyId)){
|
||||
propertyValue = heroAttributeMap.get(propertyId);
|
||||
}
|
||||
heroAttributeMap.put(propertyId,propertyValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -476,7 +541,115 @@ public class HeroLogic {
|
|||
MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.EQUIP_UNLOAD_OPT_RESPONSE_VALUE,null,true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 英雄合成
|
||||
* @param iSession
|
||||
* @param item
|
||||
*/
|
||||
public void heroCompose(ISession iSession, CommonProto.Item item) throws Exception {
|
||||
int msgId = MessageTypeProto.MessageType.HERO_COMPOSE_RESPONSE_VALUE;
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
int itemId = item.getItemId();
|
||||
int itemNum = item.getItemNum();
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
boolean result = ItemUtil.checkCost(user, sItem, itemNum);
|
||||
if (!result){
|
||||
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
|
||||
}
|
||||
Map<Integer,Integer> randomMap = new ConcurrentHashMap<>();
|
||||
randomMap.put(itemId,itemNum);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.useRandomItem(user,randomMap );
|
||||
HeroInfoProto.HeroComposeResponse heroComposeResponse = HeroInfoProto.HeroComposeResponse
|
||||
.newBuilder()
|
||||
.setDrop(drop)
|
||||
.build();
|
||||
MessageUtil.sendMessage(iSession,1,msgId,heroComposeResponse,true); }
|
||||
|
||||
//异妖相关 组件放置升级
|
||||
public void pokenmonUpLevel(ISession session,int pokemonId,int comonpentId) throws Exception {
|
||||
int uid = session.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
PokemonManager pokemonManager = user.getPokemonManager();
|
||||
Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId);
|
||||
if(pokemon == null){
|
||||
return;
|
||||
}
|
||||
Integer oldLevel = pokemon.getComonpentsLevelMap().get(comonpentId);
|
||||
if (checkPokemonComonpent(pokemonId, comonpentId,oldLevel, user)){
|
||||
return;
|
||||
}
|
||||
pokemon.upComonpentLevel(comonpentId);
|
||||
|
||||
//发送成功消息
|
||||
|
||||
}
|
||||
|
||||
// 异妖进阶
|
||||
public void pokemonAdvanced(ISession session,int pokemonId) throws Exception {
|
||||
int uid = session.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
PokemonManager pokemonManager = user.getPokemonManager();
|
||||
Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId);
|
||||
if(pokemon == null){
|
||||
return;
|
||||
}
|
||||
SDifferDemonsConfig sDifferDemonsConfig = SDifferDemonsConfig.getsDifferDemonsConfigByPokenID(pokemonId);
|
||||
int[] comonpentList = sDifferDemonsConfig.getComonpentList();
|
||||
Map<Integer, Integer> comonpentsLevelMap = pokemon.getComonpentsLevelMap();
|
||||
Map<Integer, SDifferDemonsStageConfig> sDifferDemonsStageConfigMap = SDifferDemonsStageConfig.getsDifferDemonsStageConfigMap(pokemonId);
|
||||
SDifferDemonsStageConfig sDifferDemonsStageConfig = sDifferDemonsStageConfigMap.get(pokemon.getAllStage() + 1);
|
||||
int comonpentPreStage = sDifferDemonsStageConfig.getComonpentPreStage();
|
||||
|
||||
boolean isEnough = true;
|
||||
for(int i=0;i<comonpentList.length;i++){
|
||||
if(!comonpentsLevelMap.containsKey(comonpentList[i])){
|
||||
isEnough =false;
|
||||
break;
|
||||
}
|
||||
if(comonpentsLevelMap.get(comonpentList[i]) < comonpentPreStage){
|
||||
isEnough =false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!isEnough){
|
||||
return;
|
||||
}
|
||||
|
||||
pokemon.setAllStage(pokemon.getAllStage()+1);
|
||||
|
||||
//发送成功消息
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private boolean checkPokemonComonpent(int pokemonId, int comonpentId, int oldLevel,User user) throws Exception {
|
||||
SDifferDemonsConfig sDifferDemonsConfig = SDifferDemonsConfig.getsDifferDemonsConfigByPokenID(pokemonId);
|
||||
int[] comonpentList = sDifferDemonsConfig.getComonpentList();
|
||||
boolean isHave = false;
|
||||
for(int i=0;i<comonpentList.length;i++){
|
||||
if( comonpentList[i] == comonpentId){
|
||||
isHave = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!isHave){
|
||||
return true;
|
||||
}
|
||||
|
||||
Map<Integer, SDifferDemonsComonpentsConfig> sDifferDemonsComonpentsConfigMap = SDifferDemonsComonpentsConfig.getsDifferDemonsComonpentsConfigMap(comonpentId);
|
||||
if(!sDifferDemonsComonpentsConfigMap.containsKey(oldLevel+1)){
|
||||
return true;
|
||||
}
|
||||
SDifferDemonsComonpentsConfig sDifferDemonsComonpentsConfig = sDifferDemonsComonpentsConfigMap.get(oldLevel + 1);
|
||||
int[][] cost = sDifferDemonsComonpentsConfig.getCost();
|
||||
boolean enoughCost = ItemUtil.itemCost(user, cost);
|
||||
if(!enoughCost){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
package com.ljsd.jieling.logic.item;
|
||||
|
||||
import com.ljsd.jieling.config.*;
|
||||
import com.ljsd.jieling.globals.GlobalItemType;
|
||||
import com.ljsd.jieling.logic.dao.*;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.protocols.CommonProto;
|
||||
import com.ljsd.jieling.protocols.MessageTypeProto;
|
||||
import com.ljsd.jieling.protocols.PlayerInfoProto;
|
||||
import com.ljsd.jieling.util.*;
|
||||
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class ItemLogic {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ItemLogic.class);
|
||||
|
||||
private ItemLogic(){}
|
||||
|
||||
public static class Instance {
|
||||
public final static ItemLogic instance = new ItemLogic();
|
||||
}
|
||||
|
||||
public static ItemLogic getInstance() {
|
||||
return ItemLogic.Instance.instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 出售道具
|
||||
* @param iSession
|
||||
* @param item
|
||||
* @throws Exception
|
||||
*/
|
||||
public void priceItem(ISession iSession,CommonProto.Item item) throws Exception {
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE;
|
||||
int itemId = item.getItemId();
|
||||
int itemNum = item.getItemNum();
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
if (sItem == null){
|
||||
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
|
||||
return;
|
||||
}
|
||||
String costItem = itemId + "#"+ itemNum;
|
||||
int[][] costItemArr = StringUtil.parseFiledInt2(costItem);
|
||||
boolean result = ItemUtil.itemCost(user, costItemArr);
|
||||
if (!result){
|
||||
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
|
||||
return;
|
||||
}
|
||||
int[] prices = sItem.getPrice();
|
||||
int priceItemId = prices[0];
|
||||
int priceItemNum = prices[1] * itemNum;
|
||||
String priceReward = priceItemId+"#"+priceItemNum;
|
||||
int[][] ints = StringUtil.parseFiledInt2(priceReward);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, ints);
|
||||
sendUseAndPriceItemMessage(iSession, msgId, drop);
|
||||
}
|
||||
|
||||
private void sendUseAndPriceItemMessage(ISession iSession, int msgId, CommonProto.Drop.Builder drop) {
|
||||
PlayerInfoProto.UseAndPriceItemResponse useAndPriceItemResponse = PlayerInfoProto.UseAndPriceItemResponse.newBuilder()
|
||||
.setDrop(drop)
|
||||
.build();
|
||||
MessageUtil.sendMessage(iSession, 1,msgId, useAndPriceItemResponse, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用道具
|
||||
* @param iSession
|
||||
* @param item
|
||||
*/
|
||||
public void useItem(ISession iSession, CommonProto.Item item) throws Exception {
|
||||
int msgId = MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE;
|
||||
int uid = iSession.getUid();
|
||||
User user = UserManager.getUser(uid);
|
||||
int itemId = item.getItemId();
|
||||
int itemNum = item.getItemNum();
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
boolean result = ItemUtil.checkCost(user, sItem, itemNum);
|
||||
if (!result){
|
||||
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
|
||||
}
|
||||
Map<Integer,Integer> randomMap = new ConcurrentHashMap<>();
|
||||
randomMap.put(itemId,itemNum);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.useRandomItem(user,randomMap);
|
||||
sendUseAndPriceItemMessage(iSession, msgId, drop);
|
||||
}
|
||||
}
|
|
@ -10,9 +10,11 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class ItemUtil {
|
||||
private static Map<Integer,String> dropRewardMap = new ConcurrentHashMap<>();
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class);
|
||||
//掉落
|
||||
public static CommonProto.Drop.Builder drop(User user, int[][] itemArr) throws Exception {
|
||||
|
@ -20,17 +22,21 @@ public class ItemUtil {
|
|||
Map<Integer, Integer> itemMap = new HashMap<>();
|
||||
Map<Integer, Integer> cardMap = new HashMap<>();
|
||||
Map<Integer,Integer> equipMap = new HashMap<>();
|
||||
selectItemArr(itemArr,cardMap,itemMap,equipMap);
|
||||
Map<Integer,Integer> randomMap = new HashMap<>();
|
||||
selectItemArr(itemArr,cardMap,itemMap,equipMap,randomMap);
|
||||
|
||||
|
||||
useRandomItem(user,randomMap);
|
||||
addItem(user,itemMap,dropBuilder);
|
||||
addCard(user,cardMap,dropBuilder);
|
||||
addEquip(user,equipMap,dropBuilder);
|
||||
return dropBuilder;
|
||||
}
|
||||
|
||||
private static void selectItemArr(int[][] itemArr, Map<Integer, Integer> cardMap, Map<Integer, Integer> itemMap,Map<Integer,Integer> equipMap) {
|
||||
private static void selectItemArr(int[][] itemArr, Map<Integer, Integer> cardMap, Map<Integer, Integer>
|
||||
itemMap,Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap) {
|
||||
for (int[] items : itemArr){
|
||||
getMap(items[0],items[1], itemMap, cardMap,equipMap,1);
|
||||
getMap(items[0],items[1], itemMap, cardMap,equipMap,randomMap,1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,15 +46,18 @@ public class ItemUtil {
|
|||
Map<Integer, Integer> itemMap = new HashMap<>();
|
||||
Map<Integer, Integer> cardMap = new HashMap<>();
|
||||
Map<Integer, Integer> equipMap = new HashMap<>();
|
||||
Map<Integer,Integer> randomMap = new HashMap<>();
|
||||
for (int dropGroupId :dropGroupIds){
|
||||
SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId);
|
||||
if (sRewardGroup == null){
|
||||
continue;
|
||||
}
|
||||
selectDrop(sRewardGroup,itemMap,cardMap,equipMap,dropRatio);
|
||||
selectDrop(sRewardGroup,itemMap,cardMap,equipMap,randomMap,dropRatio);
|
||||
}
|
||||
useRandomItem(user,randomMap);
|
||||
addItem(user,itemMap,dropBuilder);
|
||||
addCard(user,cardMap,dropBuilder);
|
||||
addEquip(user,equipMap,dropBuilder);
|
||||
return dropBuilder;
|
||||
}
|
||||
public static CommonProto.Drop.Builder drop(User user, Map<int [],Float> dropGroupAndRatioMap) throws Exception {
|
||||
|
@ -60,86 +69,81 @@ public class ItemUtil {
|
|||
}
|
||||
return dropBuilder;
|
||||
}
|
||||
private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
|
||||
int[] rewardItem = sRewardGroup.getRewardItem();
|
||||
StringBuilder rewardStr = new StringBuilder();
|
||||
StringBuilder weight = new StringBuilder();
|
||||
for (int dropId :rewardItem){
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(dropId);
|
||||
if (sRewardItem == null){
|
||||
continue;
|
||||
}
|
||||
if (rewardStr.length() == 0){
|
||||
rewardStr = new StringBuilder(String.valueOf(sRewardItem.getItemId()));
|
||||
}else{
|
||||
rewardStr.append("#").append(sRewardItem.getItemId());
|
||||
}
|
||||
if (weight.length() == 0){
|
||||
weight = new StringBuilder(String.valueOf(sRewardItem.getChance()));
|
||||
}else{
|
||||
weight.append("#").append(sRewardItem.getItemId());
|
||||
}
|
||||
}
|
||||
private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap , float dropRatio) {
|
||||
String dropInfo = dropRewardMap.get(sRewardGroup.getId());
|
||||
String rewardStr = dropInfo.split("\\|")[0];
|
||||
String weight = dropInfo.split("\\|")[1];
|
||||
switch (sRewardGroup.getIsUpset()) {
|
||||
case GlobalItemType.ALL_DROP:
|
||||
getMap(StringUtil.parseFiledInt(rewardStr.toString()),itemMap,cardMap,equipMap,dropRatio);
|
||||
getMap(StringUtil.parseFiledInt(rewardStr),itemMap,cardMap,equipMap,randomMap,dropRatio);
|
||||
break;
|
||||
case GlobalItemType.WEIGHT_DROP:
|
||||
getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.toString().split("#"),weight.toString().split("#"),
|
||||
itemMap,equipMap,cardMap,dropRatio);
|
||||
getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.split("#"),weight.split("#"),
|
||||
itemMap,equipMap,cardMap,randomMap,dropRatio);
|
||||
break;
|
||||
case GlobalItemType.SUCCESSIVELY_RANDOM:
|
||||
getSuccessivelyRandmoMap(sRewardGroup,rewardStr.toString().split("#"),weight.toString().split("#"),
|
||||
itemMap,cardMap,equipMap,dropRatio);
|
||||
getSuccessivelyRandmoMap(sRewardGroup,rewardStr.split("#"),weight.split("#"),
|
||||
itemMap,cardMap,equipMap,randomMap,dropRatio);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap,
|
||||
Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
|
||||
private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[]
|
||||
rewardArr,String[] weightArr, Map<Integer, Integer> itemMap,Map<Integer, Integer>
|
||||
cardMap, Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap,float dropRatio) {
|
||||
for (int i = 0 ; i < sRewardGroup.getRewardMaxNum();i++){
|
||||
int itemId = 0;
|
||||
int id = 0;
|
||||
for (int j = 0 ; j < sRewardGroup.getLoop();i++){
|
||||
int index = MathUtils.randomForStrArray(weightArr);
|
||||
itemId = Integer.parseInt(rewardArr[index]);
|
||||
if (itemId ==Integer.parseInt(rewardArr[j])){
|
||||
id = Integer.parseInt(rewardArr[index]);
|
||||
if (id ==Integer.parseInt(rewardArr[j])){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (0 == itemId){
|
||||
if (0 == id){
|
||||
int index = MathUtils.randomForStrArray(weightArr);
|
||||
itemId = Integer.parseInt(rewardArr[index]);
|
||||
id = Integer.parseInt(rewardArr[index]);
|
||||
}
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
|
||||
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
|
||||
getMap(itemId,itemNum ,itemMap, cardMap,equipMap,dropRatio);
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(id);
|
||||
int itemNum = getItemNum(sRewardItem);
|
||||
getMap(sRewardItem.getItemId(),itemNum ,itemMap, cardMap,equipMap,randomMap,dropRatio);
|
||||
}
|
||||
}
|
||||
|
||||
private static void getRandomMap(int randomItemNum ,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,
|
||||
Map<Integer,Integer> equipMap,float dropRatio) {
|
||||
Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap ,float dropRatio) {
|
||||
for (int i = 0 ; i < randomItemNum;i++){
|
||||
int index = MathUtils.randomForStrArray(weightArr);
|
||||
int itemId = Integer.parseInt(rewardArr[index]);
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
|
||||
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
|
||||
getMap(itemId,itemNum, itemMap, cardMap,equipMap,dropRatio);
|
||||
int id = Integer.parseInt(rewardArr[index]);
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(id);
|
||||
int itemNum = getItemNum(sRewardItem);
|
||||
getMap(sRewardItem.getItemId(),itemNum, itemMap, cardMap,equipMap,randomMap,dropRatio);
|
||||
}
|
||||
}
|
||||
|
||||
private static void getMap(int[] itemInfo, Map<Integer, Integer> itemMap,Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
|
||||
for (int itemId :itemInfo){
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
|
||||
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
|
||||
getMap(itemId,itemNum,itemMap, cardMap,equipMap,dropRatio);
|
||||
/**
|
||||
* 成长百分比
|
||||
* @param sRewardItem
|
||||
* @return
|
||||
*/
|
||||
private static int getItemNum(SRewardItem sRewardItem) {
|
||||
return MathUtils.numRount(MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax()) * sRewardItem.getGrowChance());
|
||||
}
|
||||
|
||||
private static void getMap(int[] itemInfo, Map<Integer, Integer> itemMap,Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap ,float dropRatio) {
|
||||
for (int id :itemInfo){
|
||||
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(id);
|
||||
int itemNum = getItemNum(sRewardItem);
|
||||
getMap(sRewardItem.getItemId(),itemNum,itemMap, cardMap,equipMap,randomMap,dropRatio);
|
||||
}
|
||||
}
|
||||
|
||||
private static void getMap(int itemId ,int itemNum, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
|
||||
private static void getMap(int itemId ,int itemNum, Map<Integer, Integer> itemMap,
|
||||
Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap ,Map<Integer,Integer> randomMap,float dropRatio) {
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
int itemType =getItemType(sItem.getItemType());
|
||||
int itemType =getItemType(sItem);
|
||||
switch (itemType) {
|
||||
case GlobalItemType.ITEM:
|
||||
putcountMap(itemId,MathUtils.numRount((itemNum * dropRatio)) , itemMap);
|
||||
|
@ -150,16 +154,25 @@ public class ItemUtil {
|
|||
case GlobalItemType.EQUIP:
|
||||
putcountMap(itemId, itemNum, cardMap);
|
||||
break;
|
||||
case GlobalItemType.RANDOM_ITME:
|
||||
putcountMap(itemId, itemNum, randomMap);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static int getItemType(int itemType) {
|
||||
switch (itemType) {
|
||||
private static int getItemType(SItem sItem) {
|
||||
int itemType = sItem.getItemType();
|
||||
switch (sItem.getItemType()) {
|
||||
case GlobalItemType.CARD_FRAGMENT:
|
||||
itemType = GlobalItemType.ITEM;
|
||||
break;
|
||||
case GlobalItemType.RANDOM_ITME:
|
||||
if (!sItem.isIsopen()){
|
||||
itemType = GlobalItemType.ITEM;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -185,13 +198,11 @@ public class ItemUtil {
|
|||
continue;
|
||||
}
|
||||
Item item = itemManager.getItem(entry.getKey());
|
||||
if (item == null){
|
||||
if (item == null) {
|
||||
item = itemManager.newItem(entry.getKey(), entry.getValue());
|
||||
}else{
|
||||
if(sItem.isStacking()){
|
||||
} else {
|
||||
item.setItemNum(item.getItemNum() + entry.getValue());
|
||||
}
|
||||
}
|
||||
itemProtoList.add(CBean2Proto.getItem(item));
|
||||
}
|
||||
if (dropBuilder != null) {
|
||||
|
@ -342,7 +353,7 @@ public class ItemUtil {
|
|||
int itemId = costItem[0];
|
||||
int itemNum = costItem[1];
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
int itemType = getItemType(sItem.getItemType());
|
||||
int itemType = getItemType(sItem);
|
||||
switch (itemType) {
|
||||
case GlobalItemType.GEM:
|
||||
putcountMap(itemId,itemNum,moneyMap);
|
||||
|
@ -355,4 +366,80 @@ public class ItemUtil {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用随机物品
|
||||
* @param user
|
||||
* @param randomMap
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static CommonProto.Drop.Builder useRandomItem(User user,Map<Integer,Integer> randomMap) throws Exception {
|
||||
StringBuilder dropIds = new StringBuilder();
|
||||
for (Map.Entry<Integer,Integer> entry : randomMap.entrySet()){
|
||||
int itemId = entry.getKey();
|
||||
int itemNum = entry.getValue();
|
||||
SItem sItem = SItem.getsItemMap().get(itemId);
|
||||
for (int i = 0; i < itemNum; i++){
|
||||
if (dropIds.length() == 0){
|
||||
dropIds = new StringBuilder(String.valueOf(sItem.getRewardGroup()));
|
||||
}else{
|
||||
dropIds.append("#").append(sItem.getRewardGroup());
|
||||
}
|
||||
}
|
||||
}
|
||||
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
|
||||
if (!dropIds.toString().isEmpty()){
|
||||
int[] ints = StringUtil.parseFiledInt(dropIds.toString());
|
||||
drop = ItemUtil.drop(user, ints, 1);
|
||||
}
|
||||
return drop;
|
||||
}
|
||||
public static boolean checkCost(User user ,SItem sItem , int itemNum) throws Exception {
|
||||
if (sItem == null){
|
||||
return false;
|
||||
}
|
||||
if (sItem.getUseType() == GlobalItemType.NO_USE){
|
||||
return false;
|
||||
}
|
||||
String costItem = sItem.getId() +"#"+ itemNum;
|
||||
int[][] ints = StringUtil.parseFiledInt2(costItem);
|
||||
return ItemUtil.itemCost(user, ints);
|
||||
}
|
||||
|
||||
public static void initDropReward() {
|
||||
Map<Integer, SRewardGroup> sRewardGroupMap = SRewardGroup.getsRewardItemMap();
|
||||
Map<Integer, SRewardItem> sRewardItemMap = SRewardItem.getsDropMap();
|
||||
if (sRewardGroupMap == null){
|
||||
return;
|
||||
}
|
||||
if (sRewardItemMap == null){
|
||||
return;
|
||||
}
|
||||
Map<Integer,String> dropMap = new ConcurrentHashMap<>();
|
||||
for (Map.Entry<Integer,SRewardGroup> entry :sRewardGroupMap.entrySet()){
|
||||
SRewardGroup sRewardGroup = entry.getValue();
|
||||
int[] rewardItem = sRewardGroup.getRewardItem();
|
||||
StringBuilder rewardStr = new StringBuilder();
|
||||
StringBuilder weight = new StringBuilder();
|
||||
for (int dropId :rewardItem){
|
||||
SRewardItem sRewardItem =sRewardItemMap.get(dropId);
|
||||
if (sRewardItem == null){
|
||||
continue;
|
||||
}
|
||||
if (rewardStr.length() == 0){
|
||||
rewardStr = new StringBuilder(String.valueOf(sRewardItem.getId()));
|
||||
}else{
|
||||
rewardStr.append("#").append(sRewardItem.getId());
|
||||
}
|
||||
if (weight.length() == 0){
|
||||
weight = new StringBuilder(String.valueOf(sRewardItem.getChance()));
|
||||
}else{
|
||||
weight.append("#").append(sRewardItem.getChance());
|
||||
}
|
||||
dropMap.put(sRewardGroup.getId(),rewardStr +"|"+weight);
|
||||
}
|
||||
}
|
||||
dropRewardMap = dropMap;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue